diff --git a/.gitmodules b/.gitmodules index d69fb8f..e69de29 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,4 +0,0 @@ -[submodule "clucene"] - path = clucene - url = https://github.com/Blue-Rocket/clucene.git - branch = develop diff --git a/BRFullTextSearch.podspec b/BRFullTextSearch.podspec index 44f5954..4e3dcca 100644 --- a/BRFullTextSearch.podspec +++ b/BRFullTextSearch.podspec @@ -1,7 +1,7 @@ Pod::Spec.new do |s| s.name = "BRFullTextSearch" - s.version = "1.1.1" + s.version = "2.0.0-beta1" s.summary = "Objective-C full text search engine." s.description = <<-DESC This project provides a way to integrate full-text search @@ -16,25 +16,22 @@ Pod::Spec.new do |s| s.license = "Apache License, Version 2.0" s.author = { "Matt Magoffin" => "matt@bluerocket.us" } - s.ios.deployment_target = '5.0' + s.ios.deployment_target = '5.1' s.osx.deployment_target = '10.7' - s.source = { :git => "https://github.com/Blue-Rocket/BRFullTextSearch.git", - :tag => s.version.to_s, :submodules => true } + s.source = { :git => "https://github.com/Blue-Rocket/BRFullTextSearch.git", :tag => s.version.to_s } - s.libraries = 'stdc++', 'z' - s.compiler_flags = '-Wmost', - '-fvisibility=default', '-fPIC', '-D_UCS2', '-D_UNICODE', '-D_REENTRANT', + s.libraries = 'c++', 'z' + s.compiler_flags = '-fvisibility=default', '-fPIC', '-D_UCS2', '-D_UNICODE', '-D_REENTRANT', '-DNDEBUG' s.xcconfig = { - 'CLANG_CXX_LANGUAGE_STANDARD' => 'gnu++98', - 'CLANG_CXX_LIBRARY' => 'libstdc++', - 'OTHER_LDFLAGS' => '-stdlib=libstdc++', + 'CLANG_CXX_LANGUAGE_STANDARD' => 'c++0x', + 'CLANG_CXX_LIBRARY' => 'libc++', } s.requires_arc = true - + s.default_subspec = 'Core' s.subspec 'Core' do |as| @@ -56,58 +53,7 @@ Pod::Spec.new do |s| "BRFullTextSearch/*Analyzer*", "BRFullTextSearch/*Filter*" as.dependency 'BRFullTextSearch/API' - as.dependency 'BRFullTextSearch/CLucene' - end - - s.subspec 'CLucene' do |as| - as.dependency 'BRFullTextSearch/CLucene-Shared' - as.dependency 'BRFullTextSearch/CLucene-Core' - as.dependency 'BRFullTextSearch/CLucene-Contribs-Lib' - end - - s.subspec 'CLucene-Config' do |as| - as.requires_arc = false - as.source_files = "BRFullTextSearch/CLucene/*" - as.header_mappings_dir = 'BRFullTextSearch' - end - - s.subspec 'CLucene-Core-API' do |as| - as.requires_arc = false - as.source_files = "clucene/src/core/CLucene.h", - "clucene/src/core/CLucene/**/*.h" - as.header_mappings_dir = 'clucene/src/core' - as.exclude_files = "clucene/src/core/CLucene/CLMonolithic.*", - "clucene/src/core/CLucene/search/FilterResultCache.*", - "clucene/src/core/CLucene/queryParser/legacy" - as.dependency 'BRFullTextSearch/CLucene-Config' - end - - s.subspec 'CLucene-Shared' do |as| - as.requires_arc = false - as.source_files = "clucene/src/shared/CLucene/**/*.{h,c,cpp}" - as.header_mappings_dir = 'clucene/src/shared' - as.exclude_files = "clucene/src/shared/CLucene/CLSharedMonolithic.*", - "clucene/src/shared/CLucene/util/deflate.*" - as.dependency 'BRFullTextSearch/CLucene-Core-API' - end - - s.subspec 'CLucene-Core' do |as| - as.requires_arc = false - as.source_files = "clucene/src/core/CLucene/**/*.{c,cpp}" - as.header_mappings_dir = 'clucene/src/core' - as.exclude_files = "clucene/src/core/CLucene/CLMonolithic.*", - "clucene/src/core/CLucene/search/FilterResultCache.*", - "clucene/src/core/CLucene/queryParser/legacy" - as.dependency 'BRFullTextSearch/CLucene-Core-API' - as.dependency 'BRFullTextSearch/CLucene-Shared' - end - - s.subspec 'CLucene-Contribs-Lib' do |as| - as.requires_arc = false - as.source_files = "clucene/src/contribs-lib/CLucene/**/*.{h,c,cpp}" - as.header_mappings_dir = 'clucene/src/contribs-lib' - as.dependency 'BRFullTextSearch/CLucene-Core' - as.dependency 'BRFullTextSearch/CLucene-Shared' + as.dependency 'BRCLucene', '< 2.0' end end diff --git a/BRFullTextSearch.xcodeproj/project.pbxproj b/BRFullTextSearch.xcodeproj/project.pbxproj index 9f30887..1452d7e 100644 --- a/BRFullTextSearch.xcodeproj/project.pbxproj +++ b/BRFullTextSearch.xcodeproj/project.pbxproj @@ -21,185 +21,11 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 03B7FF76098C0020B53B1963 /* libPods-BasePods-BRFullTextSearchTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 01C1BE10792AA64013FE1EF4 /* libPods-BasePods-BRFullTextSearchTests.a */; }; + 08F58ED50F9FA6B4ADC815B9 /* libPods-BasePods-BRFullTextSearchMacOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 975BE9E97FE948445107BD2A /* libPods-BasePods-BRFullTextSearchMacOS.a */; }; + 6022E4062A55E98145910DDD /* libPods-BasePods-BRFullTextSearch.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 8D25A545E77BFA43C3C5D47F /* libPods-BasePods-BRFullTextSearch.a */; }; + B41D7B5916D7FE7B09F1A0F7 /* libPods-BRFullTextSearchTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 4A941FCDB2DC233E241C3800 /* libPods-BRFullTextSearchTests.a */; }; C909C2651784CB600016C25E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C909C2641784CB600016C25E /* Foundation.framework */; }; - C909C2911784CC320016C25E /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = C909C2901784CC320016C25E /* libz.dylib */; }; - C909C2931784CC380016C25E /* libstdc++.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = C909C2921784CC380016C25E /* libstdc++.dylib */; }; - C909C4901784CF0A0016C25E /* gunichartables.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C29F1784CF090016C25E /* gunichartables.cpp */; }; - C909C4921784CF0A0016C25E /* repl_lltot.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C2A01784CF090016C25E /* repl_lltot.cpp */; }; - C909C4941784CF0A0016C25E /* repl_tcscasecmp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C2A21784CF090016C25E /* repl_tcscasecmp.cpp */; }; - C909C4961784CF0A0016C25E /* repl_tcslwr.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C2A31784CF090016C25E /* repl_tcslwr.cpp */; }; - C909C4981784CF0A0016C25E /* repl_tcstod.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C2A41784CF090016C25E /* repl_tcstod.cpp */; }; - C909C49A1784CF0A0016C25E /* repl_tcstoll.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C2A51784CF090016C25E /* repl_tcstoll.cpp */; }; - C909C49C1784CF0A0016C25E /* repl_tprintf.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C2A61784CF090016C25E /* repl_tprintf.cpp */; }; - C909C49E1784CF0A0016C25E /* threads.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C2A91784CF090016C25E /* threads.cpp */; }; - C909C4A01784CF0A0016C25E /* utf8.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C2AA1784CF090016C25E /* utf8.cpp */; }; - C909C4A21784CF0A0016C25E /* condition.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C2AD1784CF090016C25E /* condition.cpp */; }; - C909C4A41784CF0A0016C25E /* SharedHeader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C2AF1784CF090016C25E /* SharedHeader.cpp */; }; - C909C4A81784CF0A0016C25E /* dirent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C2B31784CF090016C25E /* dirent.cpp */; }; - C909C4AA1784CF0A0016C25E /* Misc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C2B51784CF090016C25E /* Misc.cpp */; }; - C909C4AC1784CF0A0016C25E /* StringBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C2B71784CF090016C25E /* StringBuffer.cpp */; }; - C909C4C91784CF0A0016C25E /* AnalysisHeader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C2D91784CF090016C25E /* AnalysisHeader.cpp */; }; - C909C4CB1784CF0A0016C25E /* Analyzers.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C2DB1784CF090016C25E /* Analyzers.cpp */; }; - C909C4CD1784CF0A0016C25E /* CachingTokenFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C2DD1784CF090016C25E /* CachingTokenFilter.cpp */; }; - C909C4CF1784CF0A0016C25E /* StandardAnalyzer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C2E01784CF090016C25E /* StandardAnalyzer.cpp */; }; - C909C4D11784CF0A0016C25E /* StandardFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C2E21784CF090016C25E /* StandardFilter.cpp */; }; - C909C4D31784CF0A0016C25E /* StandardTokenizer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C2E41784CF090016C25E /* StandardTokenizer.cpp */; }; - C909C4D71784CF0A0016C25E /* error.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C2EA1784CF090016C25E /* error.cpp */; }; - C909C4D91784CF0A0016C25E /* DateField.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C2EF1784CF090016C25E /* DateField.cpp */; }; - C909C4DB1784CF0A0016C25E /* DateTools.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C2F11784CF090016C25E /* DateTools.cpp */; }; - C909C4DD1784CF0A0016C25E /* Document.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C2F31784CF090016C25E /* Document.cpp */; }; - C909C4DF1784CF0A0016C25E /* Field.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C2F51784CF090016C25E /* Field.cpp */; }; - C909C4E11784CF0A0016C25E /* FieldSelector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C2F71784CF090016C25E /* FieldSelector.cpp */; }; - C909C4E31784CF0A0016C25E /* NumberTools.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C2F91784CF090016C25E /* NumberTools.cpp */; }; - C909C4E51784CF0A0016C25E /* CompoundFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3131784CF090016C25E /* CompoundFile.cpp */; }; - C909C4E71784CF0A0016C25E /* DirectoryIndexReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3141784CF090016C25E /* DirectoryIndexReader.cpp */; }; - C909C4E91784CF0A0016C25E /* DocumentsWriter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3161784CF090016C25E /* DocumentsWriter.cpp */; }; - C909C4EB1784CF0A0016C25E /* DocumentsWriterThreadState.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3171784CF090016C25E /* DocumentsWriterThreadState.cpp */; }; - C909C4ED1784CF0A0016C25E /* FieldInfos.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3181784CF090016C25E /* FieldInfos.cpp */; }; - C909C4EF1784CF0A0016C25E /* FieldsReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3191784CF090016C25E /* FieldsReader.cpp */; }; - C909C4F11784CF0A0016C25E /* FieldsWriter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C31A1784CF090016C25E /* FieldsWriter.cpp */; }; - C909C4F31784CF0A0016C25E /* IndexDeletionPolicy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C31B1784CF090016C25E /* IndexDeletionPolicy.cpp */; }; - C909C4F51784CF0A0016C25E /* IndexFileDeleter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C31D1784CF090016C25E /* IndexFileDeleter.cpp */; }; - C909C4F71784CF0A0016C25E /* IndexFileNameFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C31E1784CF090016C25E /* IndexFileNameFilter.cpp */; }; - C909C4F91784CF0A0016C25E /* IndexFileNames.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C31F1784CF090016C25E /* IndexFileNames.cpp */; }; - C909C4FB1784CF0A0016C25E /* IndexModifier.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3201784CF090016C25E /* IndexModifier.cpp */; }; - C909C4FD1784CF0A0016C25E /* IndexReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3221784CF090016C25E /* IndexReader.cpp */; }; - C909C4FF1784CF0A0016C25E /* IndexWriter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3241784CF090016C25E /* IndexWriter.cpp */; }; - C909C5011784CF0A0016C25E /* MergePolicy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3261784CF090016C25E /* MergePolicy.cpp */; }; - C909C5031784CF0A0016C25E /* MergeScheduler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3281784CF090016C25E /* MergeScheduler.cpp */; }; - C909C5051784CF0A0016C25E /* MultipleTermPositions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C32A1784CF090016C25E /* MultipleTermPositions.cpp */; }; - C909C5071784CF0A0016C25E /* MultiReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C32C1784CF090016C25E /* MultiReader.cpp */; }; - C909C5091784CF0A0016C25E /* MultiSegmentReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C32E1784CF090016C25E /* MultiSegmentReader.cpp */; }; - C909C50B1784CF0A0016C25E /* Payload.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C32F1784CF090016C25E /* Payload.cpp */; }; - C909C50D1784CF0A0016C25E /* SegmentInfos.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3311784CF090016C25E /* SegmentInfos.cpp */; }; - C909C50F1784CF0A0016C25E /* SegmentMergeInfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3321784CF090016C25E /* SegmentMergeInfo.cpp */; }; - C909C5111784CF0A0016C25E /* SegmentMergeQueue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3331784CF090016C25E /* SegmentMergeQueue.cpp */; }; - C909C5131784CF0A0016C25E /* SegmentMerger.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3341784CF090016C25E /* SegmentMerger.cpp */; }; - C909C5151784CF0A0016C25E /* SegmentReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3351784CF090016C25E /* SegmentReader.cpp */; }; - C909C5171784CF0A0016C25E /* SegmentTermDocs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3361784CF090016C25E /* SegmentTermDocs.cpp */; }; - C909C5191784CF0A0016C25E /* SegmentTermEnum.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3371784CF090016C25E /* SegmentTermEnum.cpp */; }; - C909C51B1784CF0A0016C25E /* SegmentTermPositions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3381784CF090016C25E /* SegmentTermPositions.cpp */; }; - C909C51D1784CF0A0016C25E /* SegmentTermVector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3391784CF090016C25E /* SegmentTermVector.cpp */; }; - C909C51F1784CF0A0016C25E /* SkipListReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C33A1784CF090016C25E /* SkipListReader.cpp */; }; - C909C5211784CF0A0016C25E /* SkipListWriter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C33B1784CF090016C25E /* SkipListWriter.cpp */; }; - C909C5231784CF0A0016C25E /* Term.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C33C1784CF090016C25E /* Term.cpp */; }; - C909C5251784CF0A0016C25E /* TermInfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C33E1784CF090016C25E /* TermInfo.cpp */; }; - C909C5271784CF0A0016C25E /* TermInfosReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C33F1784CF090016C25E /* TermInfosReader.cpp */; }; - C909C5291784CF0A0016C25E /* TermInfosWriter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3401784CF090016C25E /* TermInfosWriter.cpp */; }; - C909C52B1784CF0A0016C25E /* Terms.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3411784CF090016C25E /* Terms.cpp */; }; - C909C52D1784CF0A0016C25E /* TermVectorReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3441784CF090016C25E /* TermVectorReader.cpp */; }; - C909C52F1784CF0A0016C25E /* TermVectorWriter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3451784CF090016C25E /* TermVectorWriter.cpp */; }; - C909C5311784CF0A0016C25E /* FastCharStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3491784CF090016C25E /* FastCharStream.cpp */; }; - C909C5331784CF0A0016C25E /* Lexer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C34D1784CF090016C25E /* Lexer.cpp */; }; - C909C5351784CF0A0016C25E /* MultiFieldQueryParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C34E1784CF090016C25E /* MultiFieldQueryParser.cpp */; }; - C909C5371784CF0A0016C25E /* QueryParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3501784CF090016C25E /* QueryParser.cpp */; }; - C909C5391784CF0A0016C25E /* QueryParserBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3521784CF090016C25E /* QueryParserBase.cpp */; }; - C909C53B1784CF0A0016C25E /* QueryToken.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3531784CF090016C25E /* QueryToken.cpp */; }; - C909C53D1784CF0A0016C25E /* TokenList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3551784CF090016C25E /* TokenList.cpp */; }; - C909C53F1784CF0A0016C25E /* MultiFieldQueryParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3561784CF090016C25E /* MultiFieldQueryParser.cpp */; }; - C909C5411784CF0A0016C25E /* QueryParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3581784CF090016C25E /* QueryParser.cpp */; }; - C909C5431784CF0A0016C25E /* QueryParserTokenManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C35B1784CF090016C25E /* QueryParserTokenManager.cpp */; }; - C909C5451784CF0A0016C25E /* QueryToken.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C35D1784CF090016C25E /* QueryToken.cpp */; }; - C909C5471784CF0A0016C25E /* BooleanQuery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C36E1784CF090016C25E /* BooleanQuery.cpp */; }; - C909C5491784CF0A0016C25E /* BooleanScorer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3701784CF090016C25E /* BooleanScorer.cpp */; }; - C909C54B1784CF0A0016C25E /* BooleanScorer2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3711784CF090016C25E /* BooleanScorer2.cpp */; }; - C909C54D1784CF0A0016C25E /* CachingSpanFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3721784CF090016C25E /* CachingSpanFilter.cpp */; }; - C909C54F1784CF0A0016C25E /* CachingWrapperFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3741784CF090016C25E /* CachingWrapperFilter.cpp */; }; - C909C5511784CF0A0016C25E /* ChainedFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3761784CF090016C25E /* ChainedFilter.cpp */; }; - C909C5531784CF0A0016C25E /* Compare.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3781784CF090016C25E /* Compare.cpp */; }; - C909C5551784CF0A0016C25E /* ConjunctionScorer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C37A1784CF090016C25E /* ConjunctionScorer.cpp */; }; - C909C5571784CF0A0016C25E /* ConstantScoreQuery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C37B1784CF090016C25E /* ConstantScoreQuery.cpp */; }; - C909C5591784CF0A0016C25E /* DateFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C37D1784CF090016C25E /* DateFilter.cpp */; }; - C909C55B1784CF0A0016C25E /* DisjunctionSumScorer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C37F1784CF090016C25E /* DisjunctionSumScorer.cpp */; }; - C909C55D1784CF0A0016C25E /* ExactPhraseScorer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3801784CF090016C25E /* ExactPhraseScorer.cpp */; }; - C909C55F1784CF0A0016C25E /* Explanation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3811784CF090016C25E /* Explanation.cpp */; }; - C909C5611784CF0A0016C25E /* FieldCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3831784CF090016C25E /* FieldCache.cpp */; }; - C909C5631784CF0A0016C25E /* FieldCacheImpl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3851784CF090016C25E /* FieldCacheImpl.cpp */; }; - C909C5651784CF0A0016C25E /* FieldDocSortedHitQueue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3871784CF090016C25E /* FieldDocSortedHitQueue.cpp */; }; - C909C5671784CF0A0016C25E /* FieldSortedHitQueue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3881784CF090016C25E /* FieldSortedHitQueue.cpp */; }; - C909C5691784CF0A0016C25E /* FilteredTermEnum.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C38B1784CF090016C25E /* FilteredTermEnum.cpp */; }; - C909C56D1784CF0A0016C25E /* FuzzyQuery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C38F1784CF090016C25E /* FuzzyQuery.cpp */; }; - C909C56F1784CF0A0016C25E /* HitQueue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3911784CF090016C25E /* HitQueue.cpp */; }; - C909C5711784CF0A0016C25E /* Hits.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3921784CF090016C25E /* Hits.cpp */; }; - C909C5731784CF0A0016C25E /* IndexSearcher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3941784CF090016C25E /* IndexSearcher.cpp */; }; - C909C5751784CF0A0016C25E /* MatchAllDocsQuery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3961784CF090016C25E /* MatchAllDocsQuery.cpp */; }; - C909C5771784CF0A0016C25E /* MultiPhraseQuery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3981784CF090016C25E /* MultiPhraseQuery.cpp */; }; - C909C5791784CF0A0016C25E /* MultiSearcher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C39A1784CF090016C25E /* MultiSearcher.cpp */; }; - C909C57B1784CF0A0016C25E /* MultiTermQuery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C39C1784CF090016C25E /* MultiTermQuery.cpp */; }; - C909C57D1784CF0A0016C25E /* PhrasePositions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C39E1784CF090016C25E /* PhrasePositions.cpp */; }; - C909C57F1784CF0A0016C25E /* PhraseQuery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C39F1784CF090016C25E /* PhraseQuery.cpp */; }; - C909C5811784CF0A0016C25E /* PhraseScorer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3A11784CF090016C25E /* PhraseScorer.cpp */; }; - C909C5831784CF0A0016C25E /* PrefixQuery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3A21784CF090016C25E /* PrefixQuery.cpp */; }; - C909C5851784CF0A0016C25E /* QueryFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3A51784CF090016C25E /* QueryFilter.cpp */; }; - C909C5871784CF0A0016C25E /* RangeFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3A71784CF090016C25E /* RangeFilter.cpp */; }; - C909C5891784CF0A0016C25E /* RangeQuery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3A91784CF090016C25E /* RangeQuery.cpp */; }; - C909C58B1784CF0A0016C25E /* Scorer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3AB1784CF090016C25E /* Scorer.cpp */; }; - C909C58D1784CF0A0016C25E /* ScorerDocQueue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3AD1784CF090016C25E /* ScorerDocQueue.cpp */; }; - C909C58F1784CF0A0016C25E /* SearchHeader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3B01784CF090016C25E /* SearchHeader.cpp */; }; - C909C5911784CF0A0016C25E /* Similarity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3B21784CF090016C25E /* Similarity.cpp */; }; - C909C5931784CF0A0016C25E /* SloppyPhraseScorer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3B41784CF090016C25E /* SloppyPhraseScorer.cpp */; }; - C909C5951784CF0A0016C25E /* Sort.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3B51784CF090016C25E /* Sort.cpp */; }; - C909C5971784CF0A0016C25E /* SpanQueryFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3B91784CF090016C25E /* SpanQueryFilter.cpp */; }; - C909C5991784CF0A0016C25E /* NearSpansOrdered.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3C01784CF090016C25E /* NearSpansOrdered.cpp */; }; - C909C59B1784CF0A0016C25E /* NearSpansUnordered.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3C11784CF090016C25E /* NearSpansUnordered.cpp */; }; - C909C59D1784CF0A0016C25E /* SpanFirstQuery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3C21784CF090016C25E /* SpanFirstQuery.cpp */; }; - C909C59F1784CF0A0016C25E /* SpanNearQuery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3C41784CF090016C25E /* SpanNearQuery.cpp */; }; - C909C5A11784CF0A0016C25E /* SpanNotQuery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3C61784CF090016C25E /* SpanNotQuery.cpp */; }; - C909C5A31784CF0A0016C25E /* SpanOrQuery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3C81784CF090016C25E /* SpanOrQuery.cpp */; }; - C909C5A51784CF0A0016C25E /* SpanScorer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3CC1784CF090016C25E /* SpanScorer.cpp */; }; - C909C5A71784CF0A0016C25E /* SpanTermQuery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3CE1784CF090016C25E /* SpanTermQuery.cpp */; }; - C909C5A91784CF0A0016C25E /* SpanWeight.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3D01784CF090016C25E /* SpanWeight.cpp */; }; - C909C5AB1784CF0A0016C25E /* TermSpans.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3D21784CF090016C25E /* TermSpans.cpp */; }; - C909C5AD1784CF0A0016C25E /* TermQuery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3D31784CF090016C25E /* TermQuery.cpp */; }; - C909C5AF1784CF0A0016C25E /* TermScorer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3D51784CF090016C25E /* TermScorer.cpp */; }; - C909C5B11784CF0A0016C25E /* WildcardQuery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3D61784CF090016C25E /* WildcardQuery.cpp */; }; - C909C5B31784CF0A0016C25E /* WildcardTermEnum.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3D81784CF090016C25E /* WildcardTermEnum.cpp */; }; - C909C5B51784CF0A0016C25E /* StdHeader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3DA1784CF090016C25E /* StdHeader.cpp */; }; - C909C5B71784CF0A0016C25E /* Directory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3E01784CF090016C25E /* Directory.cpp */; }; - C909C5B91784CF0A0016C25E /* FSDirectory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3E21784CF090016C25E /* FSDirectory.cpp */; }; - C909C5BB1784CF0A0016C25E /* IndexInput.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3E41784CF090016C25E /* IndexInput.cpp */; }; - C909C5BD1784CF0A0016C25E /* IndexOutput.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3E61784CF0A0016C25E /* IndexOutput.cpp */; }; - C909C5BF1784CF0A0016C25E /* Lock.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3E81784CF0A0016C25E /* Lock.cpp */; }; - C909C5C11784CF0A0016C25E /* LockFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3EA1784CF0A0016C25E /* LockFactory.cpp */; }; - C909C5C31784CF0A0016C25E /* MMapInput.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3EC1784CF0A0016C25E /* MMapInput.cpp */; }; - C909C5C51784CF0A0016C25E /* RAMDirectory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3ED1784CF0A0016C25E /* RAMDirectory.cpp */; }; - C909C5C71784CF0A0016C25E /* BitSet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3FB1784CF0A0016C25E /* BitSet.cpp */; }; - C909C5C91784CF0A0016C25E /* Equators.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3FE1784CF0A0016C25E /* Equators.cpp */; }; - C909C5CB1784CF0A0016C25E /* FastCharStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C4001784CF0A0016C25E /* FastCharStream.cpp */; }; - C909C5CD1784CF0A0016C25E /* MD5Digester.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C4011784CF0A0016C25E /* MD5Digester.cpp */; }; - C909C5CF1784CF0A0016C25E /* Reader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C4031784CF0A0016C25E /* Reader.cpp */; }; - C909C5D11784CF0A0016C25E /* StringIntern.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C4051784CF0A0016C25E /* StringIntern.cpp */; }; - C909C5D31784CF0A0016C25E /* ThreadLocal.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C4061784CF0A0016C25E /* ThreadLocal.cpp */; }; - C909C5FE1784CF0A0016C25E /* libstemmer.c in Sources */ = {isa = PBXBuildFile; fileRef = C909C43F1784CF0A0016C25E /* libstemmer.c */; }; - C909C6001784CF0A0016C25E /* api.c in Sources */ = {isa = PBXBuildFile; fileRef = C909C4431784CF0A0016C25E /* api.c */; }; - C909C6021784CF0A0016C25E /* utilities.c in Sources */ = {isa = PBXBuildFile; fileRef = C909C4461784CF0A0016C25E /* utilities.c */; }; - C909C6041784CF0A0016C25E /* Snowball.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C4471784CF0A0016C25E /* Snowball.cpp */; }; - C909C6081784CF0A0016C25E /* stem_ISO_8859_1_danish.c in Sources */ = {isa = PBXBuildFile; fileRef = C909C44D1784CF0A0016C25E /* stem_ISO_8859_1_danish.c */; }; - C909C60A1784CF0A0016C25E /* stem_ISO_8859_1_dutch.c in Sources */ = {isa = PBXBuildFile; fileRef = C909C44F1784CF0A0016C25E /* stem_ISO_8859_1_dutch.c */; }; - C909C60C1784CF0A0016C25E /* stem_ISO_8859_1_english.c in Sources */ = {isa = PBXBuildFile; fileRef = C909C4511784CF0A0016C25E /* stem_ISO_8859_1_english.c */; }; - C909C60E1784CF0A0016C25E /* stem_ISO_8859_1_finnish.c in Sources */ = {isa = PBXBuildFile; fileRef = C909C4531784CF0A0016C25E /* stem_ISO_8859_1_finnish.c */; }; - C909C6101784CF0A0016C25E /* stem_ISO_8859_1_french.c in Sources */ = {isa = PBXBuildFile; fileRef = C909C4551784CF0A0016C25E /* stem_ISO_8859_1_french.c */; }; - C909C6121784CF0A0016C25E /* stem_ISO_8859_1_german.c in Sources */ = {isa = PBXBuildFile; fileRef = C909C4571784CF0A0016C25E /* stem_ISO_8859_1_german.c */; }; - C909C6141784CF0A0016C25E /* stem_ISO_8859_1_italian.c in Sources */ = {isa = PBXBuildFile; fileRef = C909C4591784CF0A0016C25E /* stem_ISO_8859_1_italian.c */; }; - C909C6161784CF0A0016C25E /* stem_ISO_8859_1_norwegian.c in Sources */ = {isa = PBXBuildFile; fileRef = C909C45B1784CF0A0016C25E /* stem_ISO_8859_1_norwegian.c */; }; - C909C6181784CF0A0016C25E /* stem_ISO_8859_1_porter.c in Sources */ = {isa = PBXBuildFile; fileRef = C909C45D1784CF0A0016C25E /* stem_ISO_8859_1_porter.c */; }; - C909C61A1784CF0A0016C25E /* stem_ISO_8859_1_portuguese.c in Sources */ = {isa = PBXBuildFile; fileRef = C909C45F1784CF0A0016C25E /* stem_ISO_8859_1_portuguese.c */; }; - C909C61C1784CF0A0016C25E /* stem_ISO_8859_1_spanish.c in Sources */ = {isa = PBXBuildFile; fileRef = C909C4611784CF0A0016C25E /* stem_ISO_8859_1_spanish.c */; }; - C909C61E1784CF0A0016C25E /* stem_ISO_8859_1_swedish.c in Sources */ = {isa = PBXBuildFile; fileRef = C909C4631784CF0A0016C25E /* stem_ISO_8859_1_swedish.c */; }; - C909C6201784CF0A0016C25E /* stem_KOI8_R_russian.c in Sources */ = {isa = PBXBuildFile; fileRef = C909C4651784CF0A0016C25E /* stem_KOI8_R_russian.c */; }; - C909C6221784CF0A0016C25E /* stem_UTF_8_danish.c in Sources */ = {isa = PBXBuildFile; fileRef = C909C4671784CF0A0016C25E /* stem_UTF_8_danish.c */; }; - C909C6241784CF0A0016C25E /* stem_UTF_8_dutch.c in Sources */ = {isa = PBXBuildFile; fileRef = C909C4691784CF0A0016C25E /* stem_UTF_8_dutch.c */; }; - C909C6261784CF0A0016C25E /* stem_UTF_8_english.c in Sources */ = {isa = PBXBuildFile; fileRef = C909C46B1784CF0A0016C25E /* stem_UTF_8_english.c */; }; - C909C6281784CF0A0016C25E /* stem_UTF_8_finnish.c in Sources */ = {isa = PBXBuildFile; fileRef = C909C46D1784CF0A0016C25E /* stem_UTF_8_finnish.c */; }; - C909C62A1784CF0A0016C25E /* stem_UTF_8_french.c in Sources */ = {isa = PBXBuildFile; fileRef = C909C46F1784CF0A0016C25E /* stem_UTF_8_french.c */; }; - C909C62C1784CF0A0016C25E /* stem_UTF_8_german.c in Sources */ = {isa = PBXBuildFile; fileRef = C909C4711784CF0A0016C25E /* stem_UTF_8_german.c */; }; - C909C62E1784CF0A0016C25E /* stem_UTF_8_italian.c in Sources */ = {isa = PBXBuildFile; fileRef = C909C4731784CF0A0016C25E /* stem_UTF_8_italian.c */; }; - C909C6301784CF0A0016C25E /* stem_UTF_8_norwegian.c in Sources */ = {isa = PBXBuildFile; fileRef = C909C4751784CF0A0016C25E /* stem_UTF_8_norwegian.c */; }; - C909C6321784CF0A0016C25E /* stem_UTF_8_porter.c in Sources */ = {isa = PBXBuildFile; fileRef = C909C4771784CF0A0016C25E /* stem_UTF_8_porter.c */; }; - C909C6341784CF0A0016C25E /* stem_UTF_8_portuguese.c in Sources */ = {isa = PBXBuildFile; fileRef = C909C4791784CF0A0016C25E /* stem_UTF_8_portuguese.c */; }; - C909C6361784CF0A0016C25E /* stem_UTF_8_russian.c in Sources */ = {isa = PBXBuildFile; fileRef = C909C47B1784CF0A0016C25E /* stem_UTF_8_russian.c */; }; - C909C6381784CF0A0016C25E /* stem_UTF_8_spanish.c in Sources */ = {isa = PBXBuildFile; fileRef = C909C47D1784CF0A0016C25E /* stem_UTF_8_spanish.c */; }; - C909C63A1784CF0A0016C25E /* stem_UTF_8_swedish.c in Sources */ = {isa = PBXBuildFile; fileRef = C909C47F1784CF0A0016C25E /* stem_UTF_8_swedish.c */; }; C909C64A1784D00C0016C25E /* BRSnowballAnalyzer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C6461784D00C0016C25E /* BRSnowballAnalyzer.cpp */; }; C909C64C1784D00C0016C25E /* BRNoLockFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C6481784D00C0016C25E /* BRNoLockFactory.cpp */; }; C909C65D1784D4B70016C25E /* NSString+CLuceneAdditions.mm in Sources */ = {isa = PBXBuildFile; fileRef = C909C6581784D4B70016C25E /* NSString+CLuceneAdditions.mm */; }; @@ -217,8 +43,6 @@ C90B75241C7EA04300014124 /* CLuceneSearchServiceTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = C97940ED1786015200DF0660 /* CLuceneSearchServiceTests.mm */; }; C90B75251C7EA04700014124 /* NSDate_BRFullTextSearchAdditionsTests.m in Sources */ = {isa = PBXBuildFile; fileRef = C9AE054417E149E4006527D0 /* NSDate_BRFullTextSearchAdditionsTests.m */; }; C90B75261C7EA04B00014124 /* TestIndexable.m in Sources */ = {isa = PBXBuildFile; fileRef = C99FCBE918466AA700A90E66 /* TestIndexable.m */; }; - C90B75291C7EA32800014124 /* libstdc++.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = C909C2921784CC380016C25E /* libstdc++.dylib */; }; - C90B752A1C7EA32B00014124 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = C909C2901784CC320016C25E /* libz.dylib */; }; C90B752D1C7EA44900014124 /* BRSimpleSortDescriptorTests.m in Sources */ = {isa = PBXBuildFile; fileRef = C90B752C1C7EA44900014124 /* BRSimpleSortDescriptorTests.m */; }; C933D8271CD68B2D006206B9 /* stop-words.txt in Resources */ = {isa = PBXBuildFile; fileRef = E3DF7F421C69AC43005B861B /* stop-words.txt */; }; C9575E811A97EDAF00394CDA /* NSData+CLuceneAdditions.mm in Sources */ = {isa = PBXBuildFile; fileRef = C9575E801A97EDAF00394CDA /* NSData+CLuceneAdditions.mm */; }; @@ -245,9 +69,6 @@ E38E8CC91C6A5194000EB763 /* NSString+CLuceneAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = C909C6571784D4B70016C25E /* NSString+CLuceneAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; E38E8CCA1C6A5194000EB763 /* SnowballPrefixFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = C9D6EC201AD615FC006D23F4 /* SnowballPrefixFilter.h */; settings = {ATTRIBUTES = (Public, ); }; }; E38E8CCB1C6A519B000EB763 /* BRSearchResult.h in Headers */ = {isa = PBXBuildFile; fileRef = C909C6521784D4B70016C25E /* BRSearchResult.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E3DF7E4E1C69A145005B861B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E3DF7E4D1C69A145005B861B /* Foundation.framework */; }; - E3DF7E511C69A1BE005B861B /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = E3DF7E4F1C69A149005B861B /* libz.tbd */; }; - E3DF7E531C69A1C9005B861B /* libstdc++.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = E3DF7E521C69A1C9005B861B /* libstdc++.tbd */; }; E3DF7E541C69A253005B861B /* NSDate+BRFullTextSearchAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = C909C6771784DB700016C25E /* NSDate+BRFullTextSearchAdditions.m */; }; E3DF7E551C69A256005B861B /* NSDateComponents+BRFullTextSearchAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = C909C67F1784DCD50016C25E /* NSDateComponents+BRFullTextSearchAdditions.m */; }; E3DF7E561C69A259005B861B /* NSTimeZone+BRFullTextSearchAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = C909C67B1784DBD30016C25E /* NSTimeZone+BRFullTextSearchAdditions.m */; }; @@ -264,182 +85,6 @@ E3DF7E611C69A2D8005B861B /* BRNoLockFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C6481784D00C0016C25E /* BRNoLockFactory.cpp */; }; E3DF7E621C69A2DD005B861B /* BRSearchService.m in Sources */ = {isa = PBXBuildFile; fileRef = C9F87C3D17D94AA700485FAE /* BRSearchService.m */; }; E3DF7E631C69A2E1005B861B /* BRSearchFields.m in Sources */ = {isa = PBXBuildFile; fileRef = C909C6731784D64D0016C25E /* BRSearchFields.m */; }; - E3DF7E641C69A310005B861B /* AnalysisHeader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C2D91784CF090016C25E /* AnalysisHeader.cpp */; }; - E3DF7E651C69A317005B861B /* Analyzers.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C2DB1784CF090016C25E /* Analyzers.cpp */; }; - E3DF7E661C69A31D005B861B /* CachingTokenFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C2DD1784CF090016C25E /* CachingTokenFilter.cpp */; }; - E3DF7E671C69A321005B861B /* StandardAnalyzer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C2E01784CF090016C25E /* StandardAnalyzer.cpp */; }; - E3DF7E681C69A325005B861B /* StandardFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C2E21784CF090016C25E /* StandardFilter.cpp */; }; - E3DF7E691C69A328005B861B /* StandardTokenizer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C2E41784CF090016C25E /* StandardTokenizer.cpp */; }; - E3DF7E6A1C69A32D005B861B /* error.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C2EA1784CF090016C25E /* error.cpp */; }; - E3DF7E6B1C69A333005B861B /* DateField.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C2EF1784CF090016C25E /* DateField.cpp */; }; - E3DF7E6C1C69A338005B861B /* DateTools.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C2F11784CF090016C25E /* DateTools.cpp */; }; - E3DF7E6D1C69A33A005B861B /* Document.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C2F31784CF090016C25E /* Document.cpp */; }; - E3DF7E6E1C69A33D005B861B /* Field.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C2F51784CF090016C25E /* Field.cpp */; }; - E3DF7E6F1C69A340005B861B /* FieldSelector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C2F71784CF090016C25E /* FieldSelector.cpp */; }; - E3DF7E701C69A342005B861B /* NumberTools.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C2F91784CF090016C25E /* NumberTools.cpp */; }; - E3DF7E711C69A37C005B861B /* CompoundFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3131784CF090016C25E /* CompoundFile.cpp */; }; - E3DF7E721C69A37C005B861B /* DirectoryIndexReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3141784CF090016C25E /* DirectoryIndexReader.cpp */; }; - E3DF7E731C69A37C005B861B /* DocumentsWriter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3161784CF090016C25E /* DocumentsWriter.cpp */; }; - E3DF7E741C69A37C005B861B /* DocumentsWriterThreadState.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3171784CF090016C25E /* DocumentsWriterThreadState.cpp */; }; - E3DF7E751C69A37C005B861B /* FieldInfos.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3181784CF090016C25E /* FieldInfos.cpp */; }; - E3DF7E761C69A37C005B861B /* FieldsReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3191784CF090016C25E /* FieldsReader.cpp */; }; - E3DF7E771C69A37C005B861B /* FieldsWriter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C31A1784CF090016C25E /* FieldsWriter.cpp */; }; - E3DF7E781C69A37C005B861B /* IndexDeletionPolicy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C31B1784CF090016C25E /* IndexDeletionPolicy.cpp */; }; - E3DF7E791C69A37C005B861B /* IndexFileDeleter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C31D1784CF090016C25E /* IndexFileDeleter.cpp */; }; - E3DF7E7A1C69A37C005B861B /* IndexFileNameFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C31E1784CF090016C25E /* IndexFileNameFilter.cpp */; }; - E3DF7E7B1C69A37C005B861B /* IndexFileNames.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C31F1784CF090016C25E /* IndexFileNames.cpp */; }; - E3DF7E7C1C69A37C005B861B /* IndexModifier.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3201784CF090016C25E /* IndexModifier.cpp */; }; - E3DF7E7D1C69A37C005B861B /* IndexReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3221784CF090016C25E /* IndexReader.cpp */; }; - E3DF7E7E1C69A37C005B861B /* IndexWriter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3241784CF090016C25E /* IndexWriter.cpp */; }; - E3DF7E7F1C69A37C005B861B /* MergePolicy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3261784CF090016C25E /* MergePolicy.cpp */; }; - E3DF7E801C69A37C005B861B /* MergeScheduler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3281784CF090016C25E /* MergeScheduler.cpp */; }; - E3DF7E811C69A37C005B861B /* MultipleTermPositions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C32A1784CF090016C25E /* MultipleTermPositions.cpp */; }; - E3DF7E821C69A37C005B861B /* MultiReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C32C1784CF090016C25E /* MultiReader.cpp */; }; - E3DF7E831C69A37C005B861B /* MultiSegmentReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C32E1784CF090016C25E /* MultiSegmentReader.cpp */; }; - E3DF7E841C69A37C005B861B /* Payload.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C32F1784CF090016C25E /* Payload.cpp */; }; - E3DF7E851C69A37C005B861B /* SegmentInfos.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3311784CF090016C25E /* SegmentInfos.cpp */; }; - E3DF7E861C69A37C005B861B /* SegmentMergeInfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3321784CF090016C25E /* SegmentMergeInfo.cpp */; }; - E3DF7E871C69A37C005B861B /* SegmentMergeQueue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3331784CF090016C25E /* SegmentMergeQueue.cpp */; }; - E3DF7E881C69A37C005B861B /* SegmentMerger.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3341784CF090016C25E /* SegmentMerger.cpp */; }; - E3DF7E891C69A37C005B861B /* SegmentReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3351784CF090016C25E /* SegmentReader.cpp */; }; - E3DF7E8A1C69A37C005B861B /* SegmentTermDocs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3361784CF090016C25E /* SegmentTermDocs.cpp */; }; - E3DF7E8B1C69A37C005B861B /* SegmentTermEnum.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3371784CF090016C25E /* SegmentTermEnum.cpp */; }; - E3DF7E8C1C69A37C005B861B /* SegmentTermPositions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3381784CF090016C25E /* SegmentTermPositions.cpp */; }; - E3DF7E8D1C69A37C005B861B /* SegmentTermVector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3391784CF090016C25E /* SegmentTermVector.cpp */; }; - E3DF7E8E1C69A37C005B861B /* SkipListReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C33A1784CF090016C25E /* SkipListReader.cpp */; }; - E3DF7E8F1C69A37C005B861B /* SkipListWriter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C33B1784CF090016C25E /* SkipListWriter.cpp */; }; - E3DF7E901C69A37C005B861B /* Term.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C33C1784CF090016C25E /* Term.cpp */; }; - E3DF7E911C69A37C005B861B /* TermInfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C33E1784CF090016C25E /* TermInfo.cpp */; }; - E3DF7E921C69A37C005B861B /* TermInfosReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C33F1784CF090016C25E /* TermInfosReader.cpp */; }; - E3DF7E931C69A37C005B861B /* TermInfosWriter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3401784CF090016C25E /* TermInfosWriter.cpp */; }; - E3DF7E941C69A37C005B861B /* Terms.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3411784CF090016C25E /* Terms.cpp */; }; - E3DF7E951C69A37C005B861B /* TermVectorReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3441784CF090016C25E /* TermVectorReader.cpp */; }; - E3DF7E961C69A37C005B861B /* TermVectorWriter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3451784CF090016C25E /* TermVectorWriter.cpp */; }; - E3DF7E971C69A383005B861B /* FastCharStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3491784CF090016C25E /* FastCharStream.cpp */; }; - E3DF7E981C69A387005B861B /* Lexer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C34D1784CF090016C25E /* Lexer.cpp */; }; - E3DF7E991C69A387005B861B /* MultiFieldQueryParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C34E1784CF090016C25E /* MultiFieldQueryParser.cpp */; }; - E3DF7E9A1C69A387005B861B /* QueryParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3501784CF090016C25E /* QueryParser.cpp */; }; - E3DF7E9B1C69A387005B861B /* QueryParserBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3521784CF090016C25E /* QueryParserBase.cpp */; }; - E3DF7E9C1C69A387005B861B /* QueryToken.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3531784CF090016C25E /* QueryToken.cpp */; }; - E3DF7E9D1C69A387005B861B /* TokenList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3551784CF090016C25E /* TokenList.cpp */; }; - E3DF7E9E1C69A387005B861B /* MultiFieldQueryParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3561784CF090016C25E /* MultiFieldQueryParser.cpp */; }; - E3DF7E9F1C69A387005B861B /* QueryParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3581784CF090016C25E /* QueryParser.cpp */; }; - E3DF7EA01C69A387005B861B /* QueryParserTokenManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C35B1784CF090016C25E /* QueryParserTokenManager.cpp */; }; - E3DF7EA11C69A387005B861B /* QueryToken.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C35D1784CF090016C25E /* QueryToken.cpp */; }; - E3DF7EA21C69A38F005B861B /* BooleanQuery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C36E1784CF090016C25E /* BooleanQuery.cpp */; }; - E3DF7EA31C69A38F005B861B /* BooleanScorer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3701784CF090016C25E /* BooleanScorer.cpp */; }; - E3DF7EA41C69A38F005B861B /* BooleanScorer2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3711784CF090016C25E /* BooleanScorer2.cpp */; }; - E3DF7EA51C69A38F005B861B /* CachingSpanFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3721784CF090016C25E /* CachingSpanFilter.cpp */; }; - E3DF7EA61C69A38F005B861B /* CachingWrapperFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3741784CF090016C25E /* CachingWrapperFilter.cpp */; }; - E3DF7EA71C69A38F005B861B /* ChainedFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3761784CF090016C25E /* ChainedFilter.cpp */; }; - E3DF7EA81C69A38F005B861B /* Compare.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3781784CF090016C25E /* Compare.cpp */; }; - E3DF7EA91C69A38F005B861B /* ConjunctionScorer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C37A1784CF090016C25E /* ConjunctionScorer.cpp */; }; - E3DF7EAA1C69A38F005B861B /* ConstantScoreQuery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C37B1784CF090016C25E /* ConstantScoreQuery.cpp */; }; - E3DF7EAB1C69A38F005B861B /* DateFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C37D1784CF090016C25E /* DateFilter.cpp */; }; - E3DF7EAC1C69A38F005B861B /* DisjunctionSumScorer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C37F1784CF090016C25E /* DisjunctionSumScorer.cpp */; }; - E3DF7EAD1C69A38F005B861B /* ExactPhraseScorer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3801784CF090016C25E /* ExactPhraseScorer.cpp */; }; - E3DF7EAE1C69A38F005B861B /* Explanation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3811784CF090016C25E /* Explanation.cpp */; }; - E3DF7EAF1C69A38F005B861B /* FieldCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3831784CF090016C25E /* FieldCache.cpp */; }; - E3DF7EB01C69A38F005B861B /* FieldCacheImpl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3851784CF090016C25E /* FieldCacheImpl.cpp */; }; - E3DF7EB11C69A38F005B861B /* FieldDocSortedHitQueue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3871784CF090016C25E /* FieldDocSortedHitQueue.cpp */; }; - E3DF7EB21C69A38F005B861B /* FieldSortedHitQueue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3881784CF090016C25E /* FieldSortedHitQueue.cpp */; }; - E3DF7EB31C69A38F005B861B /* FilteredTermEnum.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C38B1784CF090016C25E /* FilteredTermEnum.cpp */; }; - E3DF7EB41C69A38F005B861B /* FuzzyQuery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C38F1784CF090016C25E /* FuzzyQuery.cpp */; }; - E3DF7EB51C69A38F005B861B /* HitQueue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3911784CF090016C25E /* HitQueue.cpp */; }; - E3DF7EB61C69A38F005B861B /* Hits.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3921784CF090016C25E /* Hits.cpp */; }; - E3DF7EB71C69A38F005B861B /* IndexSearcher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3941784CF090016C25E /* IndexSearcher.cpp */; }; - E3DF7EB81C69A38F005B861B /* MatchAllDocsQuery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3961784CF090016C25E /* MatchAllDocsQuery.cpp */; }; - E3DF7EB91C69A38F005B861B /* MultiPhraseQuery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3981784CF090016C25E /* MultiPhraseQuery.cpp */; }; - E3DF7EBA1C69A38F005B861B /* MultiSearcher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C39A1784CF090016C25E /* MultiSearcher.cpp */; }; - E3DF7EBB1C69A38F005B861B /* MultiTermQuery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C39C1784CF090016C25E /* MultiTermQuery.cpp */; }; - E3DF7EBC1C69A38F005B861B /* PhrasePositions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C39E1784CF090016C25E /* PhrasePositions.cpp */; }; - E3DF7EBD1C69A38F005B861B /* PhraseQuery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C39F1784CF090016C25E /* PhraseQuery.cpp */; }; - E3DF7EBE1C69A38F005B861B /* PhraseScorer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3A11784CF090016C25E /* PhraseScorer.cpp */; }; - E3DF7EBF1C69A38F005B861B /* PrefixQuery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3A21784CF090016C25E /* PrefixQuery.cpp */; }; - E3DF7EC01C69A38F005B861B /* QueryFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3A51784CF090016C25E /* QueryFilter.cpp */; }; - E3DF7EC11C69A38F005B861B /* RangeFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3A71784CF090016C25E /* RangeFilter.cpp */; }; - E3DF7EC21C69A38F005B861B /* RangeQuery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3A91784CF090016C25E /* RangeQuery.cpp */; }; - E3DF7EC31C69A38F005B861B /* Scorer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3AB1784CF090016C25E /* Scorer.cpp */; }; - E3DF7EC41C69A38F005B861B /* ScorerDocQueue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3AD1784CF090016C25E /* ScorerDocQueue.cpp */; }; - E3DF7EC51C69A38F005B861B /* SearchHeader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3B01784CF090016C25E /* SearchHeader.cpp */; }; - E3DF7EC61C69A38F005B861B /* Similarity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3B21784CF090016C25E /* Similarity.cpp */; }; - E3DF7EC71C69A38F005B861B /* SloppyPhraseScorer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3B41784CF090016C25E /* SloppyPhraseScorer.cpp */; }; - E3DF7EC81C69A38F005B861B /* Sort.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3B51784CF090016C25E /* Sort.cpp */; }; - E3DF7EC91C69A38F005B861B /* SpanQueryFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3B91784CF090016C25E /* SpanQueryFilter.cpp */; }; - E3DF7ECA1C69A393005B861B /* NearSpansOrdered.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3C01784CF090016C25E /* NearSpansOrdered.cpp */; }; - E3DF7ECB1C69A394005B861B /* NearSpansUnordered.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3C11784CF090016C25E /* NearSpansUnordered.cpp */; }; - E3DF7ECC1C69A394005B861B /* SpanFirstQuery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3C21784CF090016C25E /* SpanFirstQuery.cpp */; }; - E3DF7ECD1C69A394005B861B /* SpanNearQuery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3C41784CF090016C25E /* SpanNearQuery.cpp */; }; - E3DF7ECE1C69A394005B861B /* SpanNotQuery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3C61784CF090016C25E /* SpanNotQuery.cpp */; }; - E3DF7ECF1C69A394005B861B /* SpanOrQuery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3C81784CF090016C25E /* SpanOrQuery.cpp */; }; - E3DF7ED01C69A394005B861B /* SpanScorer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3CC1784CF090016C25E /* SpanScorer.cpp */; }; - E3DF7ED11C69A394005B861B /* SpanTermQuery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3CE1784CF090016C25E /* SpanTermQuery.cpp */; }; - E3DF7ED21C69A394005B861B /* SpanWeight.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3D01784CF090016C25E /* SpanWeight.cpp */; }; - E3DF7ED31C69A394005B861B /* TermSpans.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3D21784CF090016C25E /* TermSpans.cpp */; }; - E3DF7ED41C69A394005B861B /* TermQuery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3D31784CF090016C25E /* TermQuery.cpp */; }; - E3DF7ED51C69A394005B861B /* TermScorer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3D51784CF090016C25E /* TermScorer.cpp */; }; - E3DF7ED61C69A394005B861B /* WildcardQuery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3D61784CF090016C25E /* WildcardQuery.cpp */; }; - E3DF7ED71C69A394005B861B /* WildcardTermEnum.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3D81784CF090016C25E /* WildcardTermEnum.cpp */; }; - E3DF7ED81C69A394005B861B /* StdHeader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3DA1784CF090016C25E /* StdHeader.cpp */; }; - E3DF7ED91C69A39A005B861B /* Directory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3E01784CF090016C25E /* Directory.cpp */; }; - E3DF7EDA1C69A39A005B861B /* FSDirectory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3E21784CF090016C25E /* FSDirectory.cpp */; }; - E3DF7EDB1C69A39A005B861B /* IndexInput.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3E41784CF090016C25E /* IndexInput.cpp */; }; - E3DF7EDC1C69A39A005B861B /* IndexOutput.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3E61784CF0A0016C25E /* IndexOutput.cpp */; }; - E3DF7EDD1C69A39A005B861B /* Lock.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3E81784CF0A0016C25E /* Lock.cpp */; }; - E3DF7EDE1C69A39A005B861B /* LockFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3EA1784CF0A0016C25E /* LockFactory.cpp */; }; - E3DF7EDF1C69A39A005B861B /* MMapInput.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3EC1784CF0A0016C25E /* MMapInput.cpp */; }; - E3DF7EE01C69A39A005B861B /* RAMDirectory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3ED1784CF0A0016C25E /* RAMDirectory.cpp */; }; - E3DF7EE11C69A39D005B861B /* BitSet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3FB1784CF0A0016C25E /* BitSet.cpp */; }; - E3DF7EE21C69A39D005B861B /* Equators.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C3FE1784CF0A0016C25E /* Equators.cpp */; }; - E3DF7EE31C69A39D005B861B /* FastCharStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C4001784CF0A0016C25E /* FastCharStream.cpp */; }; - E3DF7EE41C69A39D005B861B /* MD5Digester.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C4011784CF0A0016C25E /* MD5Digester.cpp */; }; - E3DF7EE51C69A39D005B861B /* Reader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C4031784CF0A0016C25E /* Reader.cpp */; }; - E3DF7EE61C69A39D005B861B /* StringIntern.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C4051784CF0A0016C25E /* StringIntern.cpp */; }; - E3DF7EE71C69A39D005B861B /* ThreadLocal.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C4061784CF0A0016C25E /* ThreadLocal.cpp */; }; - E3DF7EE81C69A3A1005B861B /* gunichartables.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C29F1784CF090016C25E /* gunichartables.cpp */; }; - E3DF7EE91C69A3A1005B861B /* repl_lltot.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C2A01784CF090016C25E /* repl_lltot.cpp */; }; - E3DF7EEA1C69A3A1005B861B /* repl_tcscasecmp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C2A21784CF090016C25E /* repl_tcscasecmp.cpp */; }; - E3DF7EEB1C69A3A1005B861B /* repl_tcslwr.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C2A31784CF090016C25E /* repl_tcslwr.cpp */; }; - E3DF7EEC1C69A3A1005B861B /* repl_tcstod.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C2A41784CF090016C25E /* repl_tcstod.cpp */; }; - E3DF7EED1C69A3A1005B861B /* repl_tcstoll.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C2A51784CF090016C25E /* repl_tcstoll.cpp */; }; - E3DF7EEE1C69A3A1005B861B /* repl_tprintf.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C2A61784CF090016C25E /* repl_tprintf.cpp */; }; - E3DF7EEF1C69A3A1005B861B /* threads.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C2A91784CF090016C25E /* threads.cpp */; }; - E3DF7EF01C69A3A1005B861B /* utf8.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C2AA1784CF090016C25E /* utf8.cpp */; }; - E3DF7EF11C69A3A4005B861B /* condition.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C2AD1784CF090016C25E /* condition.cpp */; }; - E3DF7EF21C69A3A7005B861B /* SharedHeader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C2AF1784CF090016C25E /* SharedHeader.cpp */; }; - E3DF7EF31C69A3A9005B861B /* dirent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C2B31784CF090016C25E /* dirent.cpp */; }; - E3DF7EF41C69A3A9005B861B /* Misc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C2B51784CF090016C25E /* Misc.cpp */; }; - E3DF7EF51C69A3A9005B861B /* StringBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C2B71784CF090016C25E /* StringBuffer.cpp */; }; - E3DF7EF61C69A3AB005B861B /* Snowball.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C909C4471784CF0A0016C25E /* Snowball.cpp */; }; - E3DF7EF81C69A787005B861B /* libstemmer.c in Sources */ = {isa = PBXBuildFile; fileRef = C909C43F1784CF0A0016C25E /* libstemmer.c */; }; - E3DF7EF91C69A787005B861B /* api.c in Sources */ = {isa = PBXBuildFile; fileRef = C909C4431784CF0A0016C25E /* api.c */; }; - E3DF7EFA1C69A787005B861B /* utilities.c in Sources */ = {isa = PBXBuildFile; fileRef = C909C4461784CF0A0016C25E /* utilities.c */; }; - E3DF7EFB1C69A78B005B861B /* stem_ISO_8859_1_danish.c in Sources */ = {isa = PBXBuildFile; fileRef = C909C44D1784CF0A0016C25E /* stem_ISO_8859_1_danish.c */; }; - E3DF7EFC1C69A78B005B861B /* stem_ISO_8859_1_dutch.c in Sources */ = {isa = PBXBuildFile; fileRef = C909C44F1784CF0A0016C25E /* stem_ISO_8859_1_dutch.c */; }; - E3DF7EFD1C69A78B005B861B /* stem_ISO_8859_1_english.c in Sources */ = {isa = PBXBuildFile; fileRef = C909C4511784CF0A0016C25E /* stem_ISO_8859_1_english.c */; }; - E3DF7EFE1C69A78B005B861B /* stem_ISO_8859_1_finnish.c in Sources */ = {isa = PBXBuildFile; fileRef = C909C4531784CF0A0016C25E /* stem_ISO_8859_1_finnish.c */; }; - E3DF7EFF1C69A78B005B861B /* stem_ISO_8859_1_french.c in Sources */ = {isa = PBXBuildFile; fileRef = C909C4551784CF0A0016C25E /* stem_ISO_8859_1_french.c */; }; - E3DF7F001C69A78B005B861B /* stem_ISO_8859_1_german.c in Sources */ = {isa = PBXBuildFile; fileRef = C909C4571784CF0A0016C25E /* stem_ISO_8859_1_german.c */; }; - E3DF7F011C69A78B005B861B /* stem_ISO_8859_1_italian.c in Sources */ = {isa = PBXBuildFile; fileRef = C909C4591784CF0A0016C25E /* stem_ISO_8859_1_italian.c */; }; - E3DF7F021C69A78B005B861B /* stem_ISO_8859_1_norwegian.c in Sources */ = {isa = PBXBuildFile; fileRef = C909C45B1784CF0A0016C25E /* stem_ISO_8859_1_norwegian.c */; }; - E3DF7F031C69A78B005B861B /* stem_ISO_8859_1_porter.c in Sources */ = {isa = PBXBuildFile; fileRef = C909C45D1784CF0A0016C25E /* stem_ISO_8859_1_porter.c */; }; - E3DF7F041C69A78B005B861B /* stem_ISO_8859_1_portuguese.c in Sources */ = {isa = PBXBuildFile; fileRef = C909C45F1784CF0A0016C25E /* stem_ISO_8859_1_portuguese.c */; }; - E3DF7F051C69A78B005B861B /* stem_ISO_8859_1_spanish.c in Sources */ = {isa = PBXBuildFile; fileRef = C909C4611784CF0A0016C25E /* stem_ISO_8859_1_spanish.c */; }; - E3DF7F061C69A78B005B861B /* stem_ISO_8859_1_swedish.c in Sources */ = {isa = PBXBuildFile; fileRef = C909C4631784CF0A0016C25E /* stem_ISO_8859_1_swedish.c */; }; - E3DF7F071C69A78B005B861B /* stem_KOI8_R_russian.c in Sources */ = {isa = PBXBuildFile; fileRef = C909C4651784CF0A0016C25E /* stem_KOI8_R_russian.c */; }; - E3DF7F081C69A78B005B861B /* stem_UTF_8_danish.c in Sources */ = {isa = PBXBuildFile; fileRef = C909C4671784CF0A0016C25E /* stem_UTF_8_danish.c */; }; - E3DF7F091C69A78B005B861B /* stem_UTF_8_dutch.c in Sources */ = {isa = PBXBuildFile; fileRef = C909C4691784CF0A0016C25E /* stem_UTF_8_dutch.c */; }; - E3DF7F0A1C69A78B005B861B /* stem_UTF_8_english.c in Sources */ = {isa = PBXBuildFile; fileRef = C909C46B1784CF0A0016C25E /* stem_UTF_8_english.c */; }; - E3DF7F0B1C69A78B005B861B /* stem_UTF_8_finnish.c in Sources */ = {isa = PBXBuildFile; fileRef = C909C46D1784CF0A0016C25E /* stem_UTF_8_finnish.c */; }; - E3DF7F0C1C69A78B005B861B /* stem_UTF_8_french.c in Sources */ = {isa = PBXBuildFile; fileRef = C909C46F1784CF0A0016C25E /* stem_UTF_8_french.c */; }; - E3DF7F0D1C69A78B005B861B /* stem_UTF_8_german.c in Sources */ = {isa = PBXBuildFile; fileRef = C909C4711784CF0A0016C25E /* stem_UTF_8_german.c */; }; - E3DF7F0E1C69A78B005B861B /* stem_UTF_8_italian.c in Sources */ = {isa = PBXBuildFile; fileRef = C909C4731784CF0A0016C25E /* stem_UTF_8_italian.c */; }; - E3DF7F0F1C69A78B005B861B /* stem_UTF_8_norwegian.c in Sources */ = {isa = PBXBuildFile; fileRef = C909C4751784CF0A0016C25E /* stem_UTF_8_norwegian.c */; }; - E3DF7F101C69A78B005B861B /* stem_UTF_8_porter.c in Sources */ = {isa = PBXBuildFile; fileRef = C909C4771784CF0A0016C25E /* stem_UTF_8_porter.c */; }; - E3DF7F111C69A78B005B861B /* stem_UTF_8_portuguese.c in Sources */ = {isa = PBXBuildFile; fileRef = C909C4791784CF0A0016C25E /* stem_UTF_8_portuguese.c */; }; - E3DF7F121C69A78B005B861B /* stem_UTF_8_russian.c in Sources */ = {isa = PBXBuildFile; fileRef = C909C47B1784CF0A0016C25E /* stem_UTF_8_russian.c */; }; - E3DF7F131C69A78B005B861B /* stem_UTF_8_spanish.c in Sources */ = {isa = PBXBuildFile; fileRef = C909C47D1784CF0A0016C25E /* stem_UTF_8_spanish.c */; }; - E3DF7F141C69A78B005B861B /* stem_UTF_8_swedish.c in Sources */ = {isa = PBXBuildFile; fileRef = C909C47F1784CF0A0016C25E /* stem_UTF_8_swedish.c */; }; E3DF7F651C69AC43005B861B /* stop-words.txt in Resources */ = {isa = PBXBuildFile; fileRef = E3DF7F3C1C69AC43005B861B /* stop-words.txt */; }; E3DF7F661C69AC43005B861B /* stop-words.txt in Resources */ = {isa = PBXBuildFile; fileRef = E3DF7F3F1C69AC43005B861B /* stop-words.txt */; }; E3DF7F671C69AC43005B861B /* stop-words.txt in Resources */ = {isa = PBXBuildFile; fileRef = E3DF7F421C69AC43005B861B /* stop-words.txt */; }; @@ -484,395 +129,20 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 01C1BE10792AA64013FE1EF4 /* libPods-BasePods-BRFullTextSearchTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-BasePods-BRFullTextSearchTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 0B150ED0DC675AAD38D91041 /* Pods-BasePods-BRFullTextSearchTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-BasePods-BRFullTextSearchTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-BasePods-BRFullTextSearchTests/Pods-BasePods-BRFullTextSearchTests.release.xcconfig"; sourceTree = ""; }; + 175688046C735C8053C0E015 /* Pods-BRFullTextSearchTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-BRFullTextSearchTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-BRFullTextSearchTests/Pods-BRFullTextSearchTests.debug.xcconfig"; sourceTree = ""; }; + 4A941FCDB2DC233E241C3800 /* libPods-BRFullTextSearchTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-BRFullTextSearchTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 5AD30F9EDBB90E180F819A99 /* Pods-BRFullTextSearchTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-BRFullTextSearchTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-BRFullTextSearchTests/Pods-BRFullTextSearchTests.release.xcconfig"; sourceTree = ""; }; + 685E3CDA24EE7C8ED3604A8D /* Pods-BasePods-BRFullTextSearchMacOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-BasePods-BRFullTextSearchMacOS.debug.xcconfig"; path = "Pods/Target Support Files/Pods-BasePods-BRFullTextSearchMacOS/Pods-BasePods-BRFullTextSearchMacOS.debug.xcconfig"; sourceTree = ""; }; + 8D25A545E77BFA43C3C5D47F /* libPods-BasePods-BRFullTextSearch.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-BasePods-BRFullTextSearch.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 8DD1D88DC310484ED3F8C547 /* Pods-BasePods-BRFullTextSearch.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-BasePods-BRFullTextSearch.release.xcconfig"; path = "Pods/Target Support Files/Pods-BasePods-BRFullTextSearch/Pods-BasePods-BRFullTextSearch.release.xcconfig"; sourceTree = ""; }; + 975BE9E97FE948445107BD2A /* libPods-BasePods-BRFullTextSearchMacOS.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-BasePods-BRFullTextSearchMacOS.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 9D9A68963B8579823FD1C229 /* Pods-BasePods-BRFullTextSearchTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-BasePods-BRFullTextSearchTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-BasePods-BRFullTextSearchTests/Pods-BasePods-BRFullTextSearchTests.debug.xcconfig"; sourceTree = ""; }; + BFBBFA8CFA6938DDA64085B3 /* Pods-BasePods-BRFullTextSearchMacOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-BasePods-BRFullTextSearchMacOS.release.xcconfig"; path = "Pods/Target Support Files/Pods-BasePods-BRFullTextSearchMacOS/Pods-BasePods-BRFullTextSearchMacOS.release.xcconfig"; sourceTree = ""; }; C909C2611784CB600016C25E /* libBRFullTextSearch.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libBRFullTextSearch.a; sourceTree = BUILT_PRODUCTS_DIR; }; C909C2641784CB600016C25E /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; C909C2681784CB600016C25E /* BRFullTextSearch-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "BRFullTextSearch-Prefix.pch"; sourceTree = ""; }; - C909C2901784CC320016C25E /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = usr/lib/libz.dylib; sourceTree = SDKROOT; }; - C909C2921784CC380016C25E /* libstdc++.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libstdc++.dylib"; path = "usr/lib/libstdc++.dylib"; sourceTree = SDKROOT; }; - C909C2991784CF090016C25E /* _SharedHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _SharedHeader.h; sourceTree = ""; }; - C909C29D1784CF090016C25E /* _gunichartables.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _gunichartables.h; sourceTree = ""; }; - C909C29E1784CF090016C25E /* _threads.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _threads.h; sourceTree = ""; }; - C909C29F1784CF090016C25E /* gunichartables.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gunichartables.cpp; sourceTree = ""; }; - C909C2A01784CF090016C25E /* repl_lltot.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = repl_lltot.cpp; sourceTree = ""; }; - C909C2A11784CF090016C25E /* repl_tchar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = repl_tchar.h; sourceTree = ""; }; - C909C2A21784CF090016C25E /* repl_tcscasecmp.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = repl_tcscasecmp.cpp; sourceTree = ""; }; - C909C2A31784CF090016C25E /* repl_tcslwr.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = repl_tcslwr.cpp; sourceTree = ""; }; - C909C2A41784CF090016C25E /* repl_tcstod.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = repl_tcstod.cpp; sourceTree = ""; }; - C909C2A51784CF090016C25E /* repl_tcstoll.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = repl_tcstoll.cpp; sourceTree = ""; }; - C909C2A61784CF090016C25E /* repl_tprintf.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = repl_tprintf.cpp; sourceTree = ""; }; - C909C2A71784CF090016C25E /* repl_wchar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = repl_wchar.h; sourceTree = ""; }; - C909C2A81784CF090016C25E /* repl_wctype.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = repl_wctype.h; sourceTree = ""; }; - C909C2A91784CF090016C25E /* threads.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = threads.cpp; sourceTree = ""; }; - C909C2AA1784CF090016C25E /* utf8.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = utf8.cpp; sourceTree = ""; }; - C909C2AC1784CF090016C25E /* _condition.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _condition.h; sourceTree = ""; }; - C909C2AD1784CF090016C25E /* condition.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = condition.cpp; sourceTree = ""; }; - C909C2AE1784CF090016C25E /* LuceneThreads.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LuceneThreads.h; sourceTree = ""; }; - C909C2AF1784CF090016C25E /* SharedHeader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SharedHeader.cpp; sourceTree = ""; }; - C909C2B01784CF090016C25E /* SharedHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SharedHeader.h; sourceTree = ""; }; - C909C2B31784CF090016C25E /* dirent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dirent.cpp; sourceTree = ""; }; - C909C2B41784CF090016C25E /* dirent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dirent.h; sourceTree = ""; }; - C909C2B51784CF090016C25E /* Misc.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Misc.cpp; sourceTree = ""; }; - C909C2B61784CF090016C25E /* Misc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Misc.h; sourceTree = ""; }; - C909C2B71784CF090016C25E /* StringBuffer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = StringBuffer.cpp; sourceTree = ""; }; - C909C2B81784CF090016C25E /* StringBuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StringBuffer.h; sourceTree = ""; }; - C909C2D71784CF090016C25E /* _ApiHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _ApiHeader.h; sourceTree = ""; }; - C909C2D91784CF090016C25E /* AnalysisHeader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AnalysisHeader.cpp; sourceTree = ""; }; - C909C2DA1784CF090016C25E /* AnalysisHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AnalysisHeader.h; sourceTree = ""; }; - C909C2DB1784CF090016C25E /* Analyzers.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Analyzers.cpp; sourceTree = ""; }; - C909C2DC1784CF090016C25E /* Analyzers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Analyzers.h; sourceTree = ""; }; - C909C2DD1784CF090016C25E /* CachingTokenFilter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CachingTokenFilter.cpp; sourceTree = ""; }; - C909C2DE1784CF090016C25E /* CachingTokenFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CachingTokenFilter.h; sourceTree = ""; }; - C909C2E01784CF090016C25E /* StandardAnalyzer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = StandardAnalyzer.cpp; sourceTree = ""; }; - C909C2E11784CF090016C25E /* StandardAnalyzer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StandardAnalyzer.h; sourceTree = ""; }; - C909C2E21784CF090016C25E /* StandardFilter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = StandardFilter.cpp; sourceTree = ""; }; - C909C2E31784CF090016C25E /* StandardFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StandardFilter.h; sourceTree = ""; }; - C909C2E41784CF090016C25E /* StandardTokenizer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = StandardTokenizer.cpp; sourceTree = ""; }; - C909C2E51784CF090016C25E /* StandardTokenizer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StandardTokenizer.h; sourceTree = ""; }; - C909C2E61784CF090016C25E /* StandardTokenizerConstants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StandardTokenizerConstants.h; sourceTree = ""; }; - C909C2E71784CF090016C25E /* CLConfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CLConfig.h; sourceTree = ""; }; - C909C2EA1784CF090016C25E /* error.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = error.cpp; sourceTree = ""; }; - C909C2EB1784CF090016C25E /* error.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = error.h; sourceTree = ""; }; - C909C2EC1784CF090016C25E /* lucenebase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lucenebase.h; sourceTree = ""; }; - C909C2ED1784CF090016C25E /* mem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mem.h; sourceTree = ""; }; - C909C2EF1784CF090016C25E /* DateField.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DateField.cpp; sourceTree = ""; }; - C909C2F01784CF090016C25E /* DateField.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DateField.h; sourceTree = ""; }; - C909C2F11784CF090016C25E /* DateTools.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DateTools.cpp; sourceTree = ""; }; - C909C2F21784CF090016C25E /* DateTools.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DateTools.h; sourceTree = ""; }; - C909C2F31784CF090016C25E /* Document.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Document.cpp; sourceTree = ""; }; - C909C2F41784CF090016C25E /* Document.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Document.h; sourceTree = ""; }; - C909C2F51784CF090016C25E /* Field.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Field.cpp; sourceTree = ""; }; - C909C2F61784CF090016C25E /* Field.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Field.h; sourceTree = ""; }; - C909C2F71784CF090016C25E /* FieldSelector.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FieldSelector.cpp; sourceTree = ""; }; - C909C2F81784CF090016C25E /* FieldSelector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FieldSelector.h; sourceTree = ""; }; - C909C2F91784CF090016C25E /* NumberTools.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NumberTools.cpp; sourceTree = ""; }; - C909C2FA1784CF090016C25E /* NumberTools.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NumberTools.h; sourceTree = ""; }; - C909C2FC1784CF090016C25E /* _CompoundFile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _CompoundFile.h; sourceTree = ""; }; - C909C2FD1784CF090016C25E /* _DocumentsWriter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _DocumentsWriter.h; sourceTree = ""; }; - C909C2FE1784CF090016C25E /* _FieldInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _FieldInfo.h; sourceTree = ""; }; - C909C2FF1784CF090016C25E /* _FieldInfos.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _FieldInfos.h; sourceTree = ""; }; - C909C3001784CF090016C25E /* _FieldsReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _FieldsReader.h; sourceTree = ""; }; - C909C3011784CF090016C25E /* _FieldsWriter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _FieldsWriter.h; sourceTree = ""; }; - C909C3021784CF090016C25E /* _IndexFileDeleter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _IndexFileDeleter.h; sourceTree = ""; }; - C909C3031784CF090016C25E /* _IndexFileNameFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _IndexFileNameFilter.h; sourceTree = ""; }; - C909C3041784CF090016C25E /* _IndexFileNames.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _IndexFileNames.h; sourceTree = ""; }; - C909C3051784CF090016C25E /* _MultiSegmentReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _MultiSegmentReader.h; sourceTree = ""; }; - C909C3061784CF090016C25E /* _SegmentHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _SegmentHeader.h; sourceTree = ""; }; - C909C3071784CF090016C25E /* _SegmentInfos.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _SegmentInfos.h; sourceTree = ""; }; - C909C3081784CF090016C25E /* _SegmentMergeInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _SegmentMergeInfo.h; sourceTree = ""; }; - C909C3091784CF090016C25E /* _SegmentMergeQueue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _SegmentMergeQueue.h; sourceTree = ""; }; - C909C30A1784CF090016C25E /* _SegmentMerger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _SegmentMerger.h; sourceTree = ""; }; - C909C30B1784CF090016C25E /* _SegmentTermEnum.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _SegmentTermEnum.h; sourceTree = ""; }; - C909C30C1784CF090016C25E /* _SkipListReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _SkipListReader.h; sourceTree = ""; }; - C909C30D1784CF090016C25E /* _SkipListWriter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _SkipListWriter.h; sourceTree = ""; }; - C909C30E1784CF090016C25E /* _Term.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _Term.h; sourceTree = ""; }; - C909C30F1784CF090016C25E /* _TermInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _TermInfo.h; sourceTree = ""; }; - C909C3101784CF090016C25E /* _TermInfosReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _TermInfosReader.h; sourceTree = ""; }; - C909C3111784CF090016C25E /* _TermInfosWriter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _TermInfosWriter.h; sourceTree = ""; }; - C909C3121784CF090016C25E /* _TermVector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _TermVector.h; sourceTree = ""; }; - C909C3131784CF090016C25E /* CompoundFile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CompoundFile.cpp; sourceTree = ""; }; - C909C3141784CF090016C25E /* DirectoryIndexReader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DirectoryIndexReader.cpp; sourceTree = ""; }; - C909C3151784CF090016C25E /* DirectoryIndexReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DirectoryIndexReader.h; sourceTree = ""; }; - C909C3161784CF090016C25E /* DocumentsWriter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DocumentsWriter.cpp; sourceTree = ""; }; - C909C3171784CF090016C25E /* DocumentsWriterThreadState.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DocumentsWriterThreadState.cpp; sourceTree = ""; }; - C909C3181784CF090016C25E /* FieldInfos.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FieldInfos.cpp; sourceTree = ""; }; - C909C3191784CF090016C25E /* FieldsReader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FieldsReader.cpp; sourceTree = ""; }; - C909C31A1784CF090016C25E /* FieldsWriter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FieldsWriter.cpp; sourceTree = ""; }; - C909C31B1784CF090016C25E /* IndexDeletionPolicy.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IndexDeletionPolicy.cpp; sourceTree = ""; }; - C909C31C1784CF090016C25E /* IndexDeletionPolicy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IndexDeletionPolicy.h; sourceTree = ""; }; - C909C31D1784CF090016C25E /* IndexFileDeleter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IndexFileDeleter.cpp; sourceTree = ""; }; - C909C31E1784CF090016C25E /* IndexFileNameFilter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IndexFileNameFilter.cpp; sourceTree = ""; }; - C909C31F1784CF090016C25E /* IndexFileNames.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IndexFileNames.cpp; sourceTree = ""; }; - C909C3201784CF090016C25E /* IndexModifier.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IndexModifier.cpp; sourceTree = ""; }; - C909C3211784CF090016C25E /* IndexModifier.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IndexModifier.h; sourceTree = ""; }; - C909C3221784CF090016C25E /* IndexReader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IndexReader.cpp; sourceTree = ""; }; - C909C3231784CF090016C25E /* IndexReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IndexReader.h; sourceTree = ""; }; - C909C3241784CF090016C25E /* IndexWriter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IndexWriter.cpp; sourceTree = ""; }; - C909C3251784CF090016C25E /* IndexWriter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IndexWriter.h; sourceTree = ""; }; - C909C3261784CF090016C25E /* MergePolicy.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MergePolicy.cpp; sourceTree = ""; }; - C909C3271784CF090016C25E /* MergePolicy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MergePolicy.h; sourceTree = ""; }; - C909C3281784CF090016C25E /* MergeScheduler.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MergeScheduler.cpp; sourceTree = ""; }; - C909C3291784CF090016C25E /* MergeScheduler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MergeScheduler.h; sourceTree = ""; }; - C909C32A1784CF090016C25E /* MultipleTermPositions.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MultipleTermPositions.cpp; sourceTree = ""; }; - C909C32B1784CF090016C25E /* MultipleTermPositions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MultipleTermPositions.h; sourceTree = ""; }; - C909C32C1784CF090016C25E /* MultiReader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MultiReader.cpp; sourceTree = ""; }; - C909C32D1784CF090016C25E /* MultiReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MultiReader.h; sourceTree = ""; }; - C909C32E1784CF090016C25E /* MultiSegmentReader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MultiSegmentReader.cpp; sourceTree = ""; }; - C909C32F1784CF090016C25E /* Payload.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Payload.cpp; sourceTree = ""; }; - C909C3301784CF090016C25E /* Payload.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Payload.h; sourceTree = ""; }; - C909C3311784CF090016C25E /* SegmentInfos.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SegmentInfos.cpp; sourceTree = ""; }; - C909C3321784CF090016C25E /* SegmentMergeInfo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SegmentMergeInfo.cpp; sourceTree = ""; }; - C909C3331784CF090016C25E /* SegmentMergeQueue.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SegmentMergeQueue.cpp; sourceTree = ""; }; - C909C3341784CF090016C25E /* SegmentMerger.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SegmentMerger.cpp; sourceTree = ""; }; - C909C3351784CF090016C25E /* SegmentReader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SegmentReader.cpp; sourceTree = ""; }; - C909C3361784CF090016C25E /* SegmentTermDocs.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SegmentTermDocs.cpp; sourceTree = ""; }; - C909C3371784CF090016C25E /* SegmentTermEnum.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SegmentTermEnum.cpp; sourceTree = ""; }; - C909C3381784CF090016C25E /* SegmentTermPositions.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SegmentTermPositions.cpp; sourceTree = ""; }; - C909C3391784CF090016C25E /* SegmentTermVector.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SegmentTermVector.cpp; sourceTree = ""; }; - C909C33A1784CF090016C25E /* SkipListReader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SkipListReader.cpp; sourceTree = ""; }; - C909C33B1784CF090016C25E /* SkipListWriter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SkipListWriter.cpp; sourceTree = ""; }; - C909C33C1784CF090016C25E /* Term.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Term.cpp; sourceTree = ""; }; - C909C33D1784CF090016C25E /* Term.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Term.h; sourceTree = ""; }; - C909C33E1784CF090016C25E /* TermInfo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TermInfo.cpp; sourceTree = ""; }; - C909C33F1784CF090016C25E /* TermInfosReader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TermInfosReader.cpp; sourceTree = ""; }; - C909C3401784CF090016C25E /* TermInfosWriter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TermInfosWriter.cpp; sourceTree = ""; }; - C909C3411784CF090016C25E /* Terms.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Terms.cpp; sourceTree = ""; }; - C909C3421784CF090016C25E /* Terms.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Terms.h; sourceTree = ""; }; - C909C3431784CF090016C25E /* TermVector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TermVector.h; sourceTree = ""; }; - C909C3441784CF090016C25E /* TermVectorReader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TermVectorReader.cpp; sourceTree = ""; }; - C909C3451784CF090016C25E /* TermVectorWriter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TermVectorWriter.cpp; sourceTree = ""; }; - C909C3471784CF090016C25E /* _CharStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _CharStream.h; sourceTree = ""; }; - C909C3481784CF090016C25E /* _FastCharStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _FastCharStream.h; sourceTree = ""; }; - C909C3491784CF090016C25E /* FastCharStream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FastCharStream.cpp; sourceTree = ""; }; - C909C34B1784CF090016C25E /* _Lexer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _Lexer.h; sourceTree = ""; }; - C909C34C1784CF090016C25E /* _TokenList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _TokenList.h; sourceTree = ""; }; - C909C34D1784CF090016C25E /* Lexer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Lexer.cpp; sourceTree = ""; }; - C909C34E1784CF090016C25E /* MultiFieldQueryParser.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MultiFieldQueryParser.cpp; sourceTree = ""; }; - C909C34F1784CF090016C25E /* MultiFieldQueryParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MultiFieldQueryParser.h; sourceTree = ""; }; - C909C3501784CF090016C25E /* QueryParser.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = QueryParser.cpp; sourceTree = ""; }; - C909C3511784CF090016C25E /* QueryParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = QueryParser.h; sourceTree = ""; }; - C909C3521784CF090016C25E /* QueryParserBase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = QueryParserBase.cpp; sourceTree = ""; }; - C909C3531784CF090016C25E /* QueryToken.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = QueryToken.cpp; sourceTree = ""; }; - C909C3541784CF090016C25E /* QueryToken.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = QueryToken.h; sourceTree = ""; }; - C909C3551784CF090016C25E /* TokenList.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TokenList.cpp; sourceTree = ""; }; - C909C3561784CF090016C25E /* MultiFieldQueryParser.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MultiFieldQueryParser.cpp; sourceTree = ""; }; - C909C3571784CF090016C25E /* MultiFieldQueryParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MultiFieldQueryParser.h; sourceTree = ""; }; - C909C3581784CF090016C25E /* QueryParser.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = QueryParser.cpp; sourceTree = ""; }; - C909C3591784CF090016C25E /* QueryParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = QueryParser.h; sourceTree = ""; }; - C909C35A1784CF090016C25E /* QueryParserConstants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = QueryParserConstants.h; sourceTree = ""; }; - C909C35B1784CF090016C25E /* QueryParserTokenManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = QueryParserTokenManager.cpp; sourceTree = ""; }; - C909C35C1784CF090016C25E /* QueryParserTokenManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = QueryParserTokenManager.h; sourceTree = ""; }; - C909C35D1784CF090016C25E /* QueryToken.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = QueryToken.cpp; sourceTree = ""; }; - C909C35E1784CF090016C25E /* QueryToken.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = QueryToken.h; sourceTree = ""; }; - C909C3601784CF090016C25E /* _BooleanScorer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _BooleanScorer.h; sourceTree = ""; }; - C909C3611784CF090016C25E /* _BooleanScorer2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _BooleanScorer2.h; sourceTree = ""; }; - C909C3621784CF090016C25E /* _ConjunctionScorer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _ConjunctionScorer.h; sourceTree = ""; }; - C909C3631784CF090016C25E /* _DisjunctionSumScorer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _DisjunctionSumScorer.h; sourceTree = ""; }; - C909C3641784CF090016C25E /* _ExactPhraseScorer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _ExactPhraseScorer.h; sourceTree = ""; }; - C909C3651784CF090016C25E /* _FieldCacheImpl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _FieldCacheImpl.h; sourceTree = ""; }; - C909C3661784CF090016C25E /* _FieldDocSortedHitQueue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _FieldDocSortedHitQueue.h; sourceTree = ""; }; - C909C3671784CF090016C25E /* _HitQueue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _HitQueue.h; sourceTree = ""; }; - C909C3681784CF090016C25E /* _PhrasePositions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _PhrasePositions.h; sourceTree = ""; }; - C909C3691784CF090016C25E /* _PhraseQueue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _PhraseQueue.h; sourceTree = ""; }; - C909C36A1784CF090016C25E /* _PhraseScorer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _PhraseScorer.h; sourceTree = ""; }; - C909C36B1784CF090016C25E /* _SloppyPhraseScorer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _SloppyPhraseScorer.h; sourceTree = ""; }; - C909C36C1784CF090016C25E /* _TermScorer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _TermScorer.h; sourceTree = ""; }; - C909C36D1784CF090016C25E /* BooleanClause.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BooleanClause.h; sourceTree = ""; }; - C909C36E1784CF090016C25E /* BooleanQuery.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BooleanQuery.cpp; sourceTree = ""; }; - C909C36F1784CF090016C25E /* BooleanQuery.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BooleanQuery.h; sourceTree = ""; }; - C909C3701784CF090016C25E /* BooleanScorer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BooleanScorer.cpp; sourceTree = ""; }; - C909C3711784CF090016C25E /* BooleanScorer2.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BooleanScorer2.cpp; sourceTree = ""; }; - C909C3721784CF090016C25E /* CachingSpanFilter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CachingSpanFilter.cpp; sourceTree = ""; }; - C909C3731784CF090016C25E /* CachingSpanFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CachingSpanFilter.h; sourceTree = ""; }; - C909C3741784CF090016C25E /* CachingWrapperFilter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CachingWrapperFilter.cpp; sourceTree = ""; }; - C909C3751784CF090016C25E /* CachingWrapperFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CachingWrapperFilter.h; sourceTree = ""; }; - C909C3761784CF090016C25E /* ChainedFilter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ChainedFilter.cpp; sourceTree = ""; }; - C909C3771784CF090016C25E /* ChainedFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ChainedFilter.h; sourceTree = ""; }; - C909C3781784CF090016C25E /* Compare.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Compare.cpp; sourceTree = ""; }; - C909C3791784CF090016C25E /* Compare.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Compare.h; sourceTree = ""; }; - C909C37A1784CF090016C25E /* ConjunctionScorer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ConjunctionScorer.cpp; sourceTree = ""; }; - C909C37B1784CF090016C25E /* ConstantScoreQuery.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ConstantScoreQuery.cpp; sourceTree = ""; }; - C909C37C1784CF090016C25E /* ConstantScoreQuery.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ConstantScoreQuery.h; sourceTree = ""; }; - C909C37D1784CF090016C25E /* DateFilter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DateFilter.cpp; sourceTree = ""; }; - C909C37E1784CF090016C25E /* DateFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DateFilter.h; sourceTree = ""; }; - C909C37F1784CF090016C25E /* DisjunctionSumScorer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DisjunctionSumScorer.cpp; sourceTree = ""; }; - C909C3801784CF090016C25E /* ExactPhraseScorer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ExactPhraseScorer.cpp; sourceTree = ""; }; - C909C3811784CF090016C25E /* Explanation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Explanation.cpp; sourceTree = ""; }; - C909C3821784CF090016C25E /* Explanation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Explanation.h; sourceTree = ""; }; - C909C3831784CF090016C25E /* FieldCache.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FieldCache.cpp; sourceTree = ""; }; - C909C3841784CF090016C25E /* FieldCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FieldCache.h; sourceTree = ""; }; - C909C3851784CF090016C25E /* FieldCacheImpl.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FieldCacheImpl.cpp; sourceTree = ""; }; - C909C3861784CF090016C25E /* FieldDoc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FieldDoc.h; sourceTree = ""; }; - C909C3871784CF090016C25E /* FieldDocSortedHitQueue.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FieldDocSortedHitQueue.cpp; sourceTree = ""; }; - C909C3881784CF090016C25E /* FieldSortedHitQueue.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FieldSortedHitQueue.cpp; sourceTree = ""; }; - C909C3891784CF090016C25E /* FieldSortedHitQueue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FieldSortedHitQueue.h; sourceTree = ""; }; - C909C38A1784CF090016C25E /* Filter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Filter.h; sourceTree = ""; }; - C909C38B1784CF090016C25E /* FilteredTermEnum.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FilteredTermEnum.cpp; sourceTree = ""; }; - C909C38C1784CF090016C25E /* FilteredTermEnum.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FilteredTermEnum.h; sourceTree = ""; }; - C909C38F1784CF090016C25E /* FuzzyQuery.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FuzzyQuery.cpp; sourceTree = ""; }; - C909C3901784CF090016C25E /* FuzzyQuery.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FuzzyQuery.h; sourceTree = ""; }; - C909C3911784CF090016C25E /* HitQueue.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HitQueue.cpp; sourceTree = ""; }; - C909C3921784CF090016C25E /* Hits.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Hits.cpp; sourceTree = ""; }; - C909C3931784CF090016C25E /* Hits.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Hits.h; sourceTree = ""; }; - C909C3941784CF090016C25E /* IndexSearcher.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IndexSearcher.cpp; sourceTree = ""; }; - C909C3951784CF090016C25E /* IndexSearcher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IndexSearcher.h; sourceTree = ""; }; - C909C3961784CF090016C25E /* MatchAllDocsQuery.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MatchAllDocsQuery.cpp; sourceTree = ""; }; - C909C3971784CF090016C25E /* MatchAllDocsQuery.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MatchAllDocsQuery.h; sourceTree = ""; }; - C909C3981784CF090016C25E /* MultiPhraseQuery.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MultiPhraseQuery.cpp; sourceTree = ""; }; - C909C3991784CF090016C25E /* MultiPhraseQuery.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MultiPhraseQuery.h; sourceTree = ""; }; - C909C39A1784CF090016C25E /* MultiSearcher.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MultiSearcher.cpp; sourceTree = ""; }; - C909C39B1784CF090016C25E /* MultiSearcher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MultiSearcher.h; sourceTree = ""; }; - C909C39C1784CF090016C25E /* MultiTermQuery.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MultiTermQuery.cpp; sourceTree = ""; }; - C909C39D1784CF090016C25E /* MultiTermQuery.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MultiTermQuery.h; sourceTree = ""; }; - C909C39E1784CF090016C25E /* PhrasePositions.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PhrasePositions.cpp; sourceTree = ""; }; - C909C39F1784CF090016C25E /* PhraseQuery.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PhraseQuery.cpp; sourceTree = ""; }; - C909C3A01784CF090016C25E /* PhraseQuery.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PhraseQuery.h; sourceTree = ""; }; - C909C3A11784CF090016C25E /* PhraseScorer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PhraseScorer.cpp; sourceTree = ""; }; - C909C3A21784CF090016C25E /* PrefixQuery.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PrefixQuery.cpp; sourceTree = ""; }; - C909C3A31784CF090016C25E /* PrefixQuery.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PrefixQuery.h; sourceTree = ""; }; - C909C3A41784CF090016C25E /* Query.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Query.h; sourceTree = ""; }; - C909C3A51784CF090016C25E /* QueryFilter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = QueryFilter.cpp; sourceTree = ""; }; - C909C3A61784CF090016C25E /* QueryFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = QueryFilter.h; sourceTree = ""; }; - C909C3A71784CF090016C25E /* RangeFilter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RangeFilter.cpp; sourceTree = ""; }; - C909C3A81784CF090016C25E /* RangeFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RangeFilter.h; sourceTree = ""; }; - C909C3A91784CF090016C25E /* RangeQuery.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RangeQuery.cpp; sourceTree = ""; }; - C909C3AA1784CF090016C25E /* RangeQuery.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RangeQuery.h; sourceTree = ""; }; - C909C3AB1784CF090016C25E /* Scorer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Scorer.cpp; sourceTree = ""; }; - C909C3AC1784CF090016C25E /* Scorer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Scorer.h; sourceTree = ""; }; - C909C3AD1784CF090016C25E /* ScorerDocQueue.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScorerDocQueue.cpp; sourceTree = ""; }; - C909C3AE1784CF090016C25E /* ScorerDocQueue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScorerDocQueue.h; sourceTree = ""; }; - C909C3AF1784CF090016C25E /* Searchable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Searchable.h; sourceTree = ""; }; - C909C3B01784CF090016C25E /* SearchHeader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SearchHeader.cpp; sourceTree = ""; }; - C909C3B11784CF090016C25E /* SearchHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SearchHeader.h; sourceTree = ""; }; - C909C3B21784CF090016C25E /* Similarity.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Similarity.cpp; sourceTree = ""; }; - C909C3B31784CF090016C25E /* Similarity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Similarity.h; sourceTree = ""; }; - C909C3B41784CF090016C25E /* SloppyPhraseScorer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SloppyPhraseScorer.cpp; sourceTree = ""; }; - C909C3B51784CF090016C25E /* Sort.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Sort.cpp; sourceTree = ""; }; - C909C3B61784CF090016C25E /* Sort.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Sort.h; sourceTree = ""; }; - C909C3B71784CF090016C25E /* SpanFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SpanFilter.h; sourceTree = ""; }; - C909C3B81784CF090016C25E /* SpanFilterResult.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SpanFilterResult.h; sourceTree = ""; }; - C909C3B91784CF090016C25E /* SpanQueryFilter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SpanQueryFilter.cpp; sourceTree = ""; }; - C909C3BA1784CF090016C25E /* SpanQueryFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SpanQueryFilter.h; sourceTree = ""; }; - C909C3BC1784CF090016C25E /* _EmptySpans.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _EmptySpans.h; sourceTree = ""; }; - C909C3BD1784CF090016C25E /* _NearSpansOrdered.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _NearSpansOrdered.h; sourceTree = ""; }; - C909C3BE1784CF090016C25E /* _NearSpansUnordered.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _NearSpansUnordered.h; sourceTree = ""; }; - C909C3BF1784CF090016C25E /* _TermSpans.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _TermSpans.h; sourceTree = ""; }; - C909C3C01784CF090016C25E /* NearSpansOrdered.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NearSpansOrdered.cpp; sourceTree = ""; }; - C909C3C11784CF090016C25E /* NearSpansUnordered.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NearSpansUnordered.cpp; sourceTree = ""; }; - C909C3C21784CF090016C25E /* SpanFirstQuery.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SpanFirstQuery.cpp; sourceTree = ""; }; - C909C3C31784CF090016C25E /* SpanFirstQuery.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SpanFirstQuery.h; sourceTree = ""; }; - C909C3C41784CF090016C25E /* SpanNearQuery.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SpanNearQuery.cpp; sourceTree = ""; }; - C909C3C51784CF090016C25E /* SpanNearQuery.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SpanNearQuery.h; sourceTree = ""; }; - C909C3C61784CF090016C25E /* SpanNotQuery.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SpanNotQuery.cpp; sourceTree = ""; }; - C909C3C71784CF090016C25E /* SpanNotQuery.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SpanNotQuery.h; sourceTree = ""; }; - C909C3C81784CF090016C25E /* SpanOrQuery.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SpanOrQuery.cpp; sourceTree = ""; }; - C909C3C91784CF090016C25E /* SpanOrQuery.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SpanOrQuery.h; sourceTree = ""; }; - C909C3CA1784CF090016C25E /* SpanQuery.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SpanQuery.h; sourceTree = ""; }; - C909C3CB1784CF090016C25E /* Spans.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Spans.h; sourceTree = ""; }; - C909C3CC1784CF090016C25E /* SpanScorer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SpanScorer.cpp; sourceTree = ""; }; - C909C3CD1784CF090016C25E /* SpanScorer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SpanScorer.h; sourceTree = ""; }; - C909C3CE1784CF090016C25E /* SpanTermQuery.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SpanTermQuery.cpp; sourceTree = ""; }; - C909C3CF1784CF090016C25E /* SpanTermQuery.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SpanTermQuery.h; sourceTree = ""; }; - C909C3D01784CF090016C25E /* SpanWeight.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SpanWeight.cpp; sourceTree = ""; }; - C909C3D11784CF090016C25E /* SpanWeight.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SpanWeight.h; sourceTree = ""; }; - C909C3D21784CF090016C25E /* TermSpans.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TermSpans.cpp; sourceTree = ""; }; - C909C3D31784CF090016C25E /* TermQuery.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TermQuery.cpp; sourceTree = ""; }; - C909C3D41784CF090016C25E /* TermQuery.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TermQuery.h; sourceTree = ""; }; - C909C3D51784CF090016C25E /* TermScorer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TermScorer.cpp; sourceTree = ""; }; - C909C3D61784CF090016C25E /* WildcardQuery.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WildcardQuery.cpp; sourceTree = ""; }; - C909C3D71784CF090016C25E /* WildcardQuery.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WildcardQuery.h; sourceTree = ""; }; - C909C3D81784CF090016C25E /* WildcardTermEnum.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WildcardTermEnum.cpp; sourceTree = ""; }; - C909C3D91784CF090016C25E /* WildcardTermEnum.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WildcardTermEnum.h; sourceTree = ""; }; - C909C3DA1784CF090016C25E /* StdHeader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = StdHeader.cpp; sourceTree = ""; }; - C909C3DB1784CF090016C25E /* StdHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StdHeader.h; sourceTree = ""; }; - C909C3DD1784CF090016C25E /* _Lock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _Lock.h; sourceTree = ""; }; - C909C3DE1784CF090016C25E /* _MMapIndexInput.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _MMapIndexInput.h; sourceTree = ""; }; - C909C3DF1784CF090016C25E /* _RAMDirectory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _RAMDirectory.h; sourceTree = ""; }; - C909C3E01784CF090016C25E /* Directory.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Directory.cpp; sourceTree = ""; }; - C909C3E11784CF090016C25E /* Directory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Directory.h; sourceTree = ""; }; - C909C3E21784CF090016C25E /* FSDirectory.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FSDirectory.cpp; sourceTree = ""; }; - C909C3E31784CF090016C25E /* FSDirectory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSDirectory.h; sourceTree = ""; }; - C909C3E41784CF090016C25E /* IndexInput.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IndexInput.cpp; sourceTree = ""; }; - C909C3E51784CF090016C25E /* IndexInput.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IndexInput.h; sourceTree = ""; }; - C909C3E61784CF0A0016C25E /* IndexOutput.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IndexOutput.cpp; sourceTree = ""; }; - C909C3E71784CF0A0016C25E /* IndexOutput.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IndexOutput.h; sourceTree = ""; }; - C909C3E81784CF0A0016C25E /* Lock.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Lock.cpp; sourceTree = ""; }; - C909C3E91784CF0A0016C25E /* Lock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Lock.h; sourceTree = ""; }; - C909C3EA1784CF0A0016C25E /* LockFactory.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LockFactory.cpp; sourceTree = ""; }; - C909C3EB1784CF0A0016C25E /* LockFactory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LockFactory.h; sourceTree = ""; }; - C909C3EC1784CF0A0016C25E /* MMapInput.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MMapInput.cpp; sourceTree = ""; }; - C909C3ED1784CF0A0016C25E /* RAMDirectory.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RAMDirectory.cpp; sourceTree = ""; }; - C909C3EE1784CF0A0016C25E /* RAMDirectory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RAMDirectory.h; sourceTree = ""; }; - C909C3F01784CF0A0016C25E /* _Arrays.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _Arrays.h; sourceTree = ""; }; - C909C3F11784CF0A0016C25E /* _bufferedstream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _bufferedstream.h; sourceTree = ""; }; - C909C3F21784CF0A0016C25E /* _FastCharStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _FastCharStream.h; sourceTree = ""; }; - C909C3F31784CF0A0016C25E /* _MD5Digester.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _MD5Digester.h; sourceTree = ""; }; - C909C3F41784CF0A0016C25E /* _streambase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _streambase.h; sourceTree = ""; }; - C909C3F51784CF0A0016C25E /* _streambuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _streambuffer.h; sourceTree = ""; }; - C909C3F61784CF0A0016C25E /* _StringIntern.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _StringIntern.h; sourceTree = ""; }; - C909C3F71784CF0A0016C25E /* _ThreadLocal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _ThreadLocal.h; sourceTree = ""; }; - C909C3F81784CF0A0016C25E /* _VoidList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _VoidList.h; sourceTree = ""; }; - C909C3F91784CF0A0016C25E /* _VoidMap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _VoidMap.h; sourceTree = ""; }; - C909C3FA1784CF0A0016C25E /* Array.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Array.h; sourceTree = ""; }; - C909C3FB1784CF0A0016C25E /* BitSet.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BitSet.cpp; sourceTree = ""; }; - C909C3FC1784CF0A0016C25E /* BitSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BitSet.h; sourceTree = ""; }; - C909C3FD1784CF0A0016C25E /* CLStreams.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CLStreams.h; sourceTree = ""; }; - C909C3FE1784CF0A0016C25E /* Equators.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Equators.cpp; sourceTree = ""; }; - C909C3FF1784CF0A0016C25E /* Equators.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Equators.h; sourceTree = ""; }; - C909C4001784CF0A0016C25E /* FastCharStream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FastCharStream.cpp; sourceTree = ""; }; - C909C4011784CF0A0016C25E /* MD5Digester.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MD5Digester.cpp; sourceTree = ""; }; - C909C4021784CF0A0016C25E /* PriorityQueue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PriorityQueue.h; sourceTree = ""; }; - C909C4031784CF0A0016C25E /* Reader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Reader.cpp; sourceTree = ""; }; - C909C4041784CF0A0016C25E /* Reader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Reader.h; sourceTree = ""; }; - C909C4051784CF0A0016C25E /* StringIntern.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = StringIntern.cpp; sourceTree = ""; }; - C909C4061784CF0A0016C25E /* ThreadLocal.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ThreadLocal.cpp; sourceTree = ""; }; - C909C4071784CF0A0016C25E /* VoidList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VoidList.h; sourceTree = ""; }; - C909C4081784CF0A0016C25E /* VoidMap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VoidMap.h; sourceTree = ""; }; - C909C4091784CF0A0016C25E /* CLucene.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CLucene.h; sourceTree = ""; }; - C909C43D1784CF0A0016C25E /* libstemmer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = libstemmer.h; sourceTree = ""; }; - C909C43F1784CF0A0016C25E /* libstemmer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = libstemmer.c; sourceTree = ""; }; - C909C4401784CF0A0016C25E /* modules.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = modules.h; sourceTree = ""; }; - C909C4411784CF0A0016C25E /* libstemmer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = libstemmer.h; sourceTree = ""; }; - C909C4431784CF0A0016C25E /* api.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = api.c; sourceTree = ""; }; - C909C4441784CF0A0016C25E /* api.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = api.h; sourceTree = ""; }; - C909C4451784CF0A0016C25E /* header.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = header.h; sourceTree = ""; }; - C909C4461784CF0A0016C25E /* utilities.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = utilities.c; sourceTree = ""; }; - C909C4471784CF0A0016C25E /* Snowball.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Snowball.cpp; sourceTree = ""; }; - C909C44A1784CF0A0016C25E /* SnowballAnalyzer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SnowballAnalyzer.h; sourceTree = ""; }; - C909C44B1784CF0A0016C25E /* SnowballFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SnowballFilter.h; sourceTree = ""; }; - C909C44D1784CF0A0016C25E /* stem_ISO_8859_1_danish.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = stem_ISO_8859_1_danish.c; sourceTree = ""; }; - C909C44E1784CF0A0016C25E /* stem_ISO_8859_1_danish.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = stem_ISO_8859_1_danish.h; sourceTree = ""; }; - C909C44F1784CF0A0016C25E /* stem_ISO_8859_1_dutch.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = stem_ISO_8859_1_dutch.c; sourceTree = ""; }; - C909C4501784CF0A0016C25E /* stem_ISO_8859_1_dutch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = stem_ISO_8859_1_dutch.h; sourceTree = ""; }; - C909C4511784CF0A0016C25E /* stem_ISO_8859_1_english.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = stem_ISO_8859_1_english.c; sourceTree = ""; }; - C909C4521784CF0A0016C25E /* stem_ISO_8859_1_english.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = stem_ISO_8859_1_english.h; sourceTree = ""; }; - C909C4531784CF0A0016C25E /* stem_ISO_8859_1_finnish.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = stem_ISO_8859_1_finnish.c; sourceTree = ""; }; - C909C4541784CF0A0016C25E /* stem_ISO_8859_1_finnish.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = stem_ISO_8859_1_finnish.h; sourceTree = ""; }; - C909C4551784CF0A0016C25E /* stem_ISO_8859_1_french.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = stem_ISO_8859_1_french.c; sourceTree = ""; }; - C909C4561784CF0A0016C25E /* stem_ISO_8859_1_french.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = stem_ISO_8859_1_french.h; sourceTree = ""; }; - C909C4571784CF0A0016C25E /* stem_ISO_8859_1_german.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = stem_ISO_8859_1_german.c; sourceTree = ""; }; - C909C4581784CF0A0016C25E /* stem_ISO_8859_1_german.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = stem_ISO_8859_1_german.h; sourceTree = ""; }; - C909C4591784CF0A0016C25E /* stem_ISO_8859_1_italian.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = stem_ISO_8859_1_italian.c; sourceTree = ""; }; - C909C45A1784CF0A0016C25E /* stem_ISO_8859_1_italian.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = stem_ISO_8859_1_italian.h; sourceTree = ""; }; - C909C45B1784CF0A0016C25E /* stem_ISO_8859_1_norwegian.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = stem_ISO_8859_1_norwegian.c; sourceTree = ""; }; - C909C45C1784CF0A0016C25E /* stem_ISO_8859_1_norwegian.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = stem_ISO_8859_1_norwegian.h; sourceTree = ""; }; - C909C45D1784CF0A0016C25E /* stem_ISO_8859_1_porter.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = stem_ISO_8859_1_porter.c; sourceTree = ""; }; - C909C45E1784CF0A0016C25E /* stem_ISO_8859_1_porter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = stem_ISO_8859_1_porter.h; sourceTree = ""; }; - C909C45F1784CF0A0016C25E /* stem_ISO_8859_1_portuguese.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = stem_ISO_8859_1_portuguese.c; sourceTree = ""; }; - C909C4601784CF0A0016C25E /* stem_ISO_8859_1_portuguese.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = stem_ISO_8859_1_portuguese.h; sourceTree = ""; }; - C909C4611784CF0A0016C25E /* stem_ISO_8859_1_spanish.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = stem_ISO_8859_1_spanish.c; sourceTree = ""; }; - C909C4621784CF0A0016C25E /* stem_ISO_8859_1_spanish.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = stem_ISO_8859_1_spanish.h; sourceTree = ""; }; - C909C4631784CF0A0016C25E /* stem_ISO_8859_1_swedish.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = stem_ISO_8859_1_swedish.c; sourceTree = ""; }; - C909C4641784CF0A0016C25E /* stem_ISO_8859_1_swedish.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = stem_ISO_8859_1_swedish.h; sourceTree = ""; }; - C909C4651784CF0A0016C25E /* stem_KOI8_R_russian.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = stem_KOI8_R_russian.c; sourceTree = ""; }; - C909C4661784CF0A0016C25E /* stem_KOI8_R_russian.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = stem_KOI8_R_russian.h; sourceTree = ""; }; - C909C4671784CF0A0016C25E /* stem_UTF_8_danish.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = stem_UTF_8_danish.c; sourceTree = ""; }; - C909C4681784CF0A0016C25E /* stem_UTF_8_danish.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = stem_UTF_8_danish.h; sourceTree = ""; }; - C909C4691784CF0A0016C25E /* stem_UTF_8_dutch.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = stem_UTF_8_dutch.c; sourceTree = ""; }; - C909C46A1784CF0A0016C25E /* stem_UTF_8_dutch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = stem_UTF_8_dutch.h; sourceTree = ""; }; - C909C46B1784CF0A0016C25E /* stem_UTF_8_english.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = stem_UTF_8_english.c; sourceTree = ""; }; - C909C46C1784CF0A0016C25E /* stem_UTF_8_english.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = stem_UTF_8_english.h; sourceTree = ""; }; - C909C46D1784CF0A0016C25E /* stem_UTF_8_finnish.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = stem_UTF_8_finnish.c; sourceTree = ""; }; - C909C46E1784CF0A0016C25E /* stem_UTF_8_finnish.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = stem_UTF_8_finnish.h; sourceTree = ""; }; - C909C46F1784CF0A0016C25E /* stem_UTF_8_french.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = stem_UTF_8_french.c; sourceTree = ""; }; - C909C4701784CF0A0016C25E /* stem_UTF_8_french.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = stem_UTF_8_french.h; sourceTree = ""; }; - C909C4711784CF0A0016C25E /* stem_UTF_8_german.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = stem_UTF_8_german.c; sourceTree = ""; }; - C909C4721784CF0A0016C25E /* stem_UTF_8_german.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = stem_UTF_8_german.h; sourceTree = ""; }; - C909C4731784CF0A0016C25E /* stem_UTF_8_italian.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = stem_UTF_8_italian.c; sourceTree = ""; }; - C909C4741784CF0A0016C25E /* stem_UTF_8_italian.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = stem_UTF_8_italian.h; sourceTree = ""; }; - C909C4751784CF0A0016C25E /* stem_UTF_8_norwegian.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = stem_UTF_8_norwegian.c; sourceTree = ""; }; - C909C4761784CF0A0016C25E /* stem_UTF_8_norwegian.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = stem_UTF_8_norwegian.h; sourceTree = ""; }; - C909C4771784CF0A0016C25E /* stem_UTF_8_porter.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = stem_UTF_8_porter.c; sourceTree = ""; }; - C909C4781784CF0A0016C25E /* stem_UTF_8_porter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = stem_UTF_8_porter.h; sourceTree = ""; }; - C909C4791784CF0A0016C25E /* stem_UTF_8_portuguese.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = stem_UTF_8_portuguese.c; sourceTree = ""; }; - C909C47A1784CF0A0016C25E /* stem_UTF_8_portuguese.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = stem_UTF_8_portuguese.h; sourceTree = ""; }; - C909C47B1784CF0A0016C25E /* stem_UTF_8_russian.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = stem_UTF_8_russian.c; sourceTree = ""; }; - C909C47C1784CF0A0016C25E /* stem_UTF_8_russian.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = stem_UTF_8_russian.h; sourceTree = ""; }; - C909C47D1784CF0A0016C25E /* stem_UTF_8_spanish.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = stem_UTF_8_spanish.c; sourceTree = ""; }; - C909C47E1784CF0A0016C25E /* stem_UTF_8_spanish.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = stem_UTF_8_spanish.h; sourceTree = ""; }; - C909C47F1784CF0A0016C25E /* stem_UTF_8_swedish.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = stem_UTF_8_swedish.c; sourceTree = ""; }; - C909C4801784CF0A0016C25E /* stem_UTF_8_swedish.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = stem_UTF_8_swedish.h; sourceTree = ""; }; - C909C6431784CF640016C25E /* clucene-config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "clucene-config.h"; path = "BRFullTextSearch/CLucene/clucene-config.h"; sourceTree = ""; }; - C909C6441784CF640016C25E /* _clucene-config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "_clucene-config.h"; path = "BRFullTextSearch/CLucene/_clucene-config.h"; sourceTree = ""; }; C909C6451784D00C0016C25E /* BRSnowballAnalyzer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BRSnowballAnalyzer.h; sourceTree = ""; }; C909C6461784D00C0016C25E /* BRSnowballAnalyzer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BRSnowballAnalyzer.cpp; sourceTree = ""; }; C909C6471784D00C0016C25E /* BRNoLockFactory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BRNoLockFactory.h; sourceTree = ""; }; @@ -917,7 +187,6 @@ C97940F11786022900DF0660 /* BRSimpleIndexable.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BRSimpleIndexable.m; sourceTree = ""; }; C99FCBE818466AA700A90E66 /* TestIndexable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TestIndexable.h; sourceTree = ""; }; C99FCBE918466AA700A90E66 /* TestIndexable.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TestIndexable.m; sourceTree = ""; }; - C99FCBEB18466FE600A90E66 /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; C99FCBEE1846745E00A90E66 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; C9A68F3D1BCB6376003E6AE1 /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = SOURCE_ROOT; }; C9AE054317E149E4006527D0 /* NSDate_BRFullTextSearchAdditionsTests.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NSDate_BRFullTextSearchAdditionsTests.h; sourceTree = ""; }; @@ -931,9 +200,6 @@ E345D8FC1C9DEA89005733F5 /* BRFullTextSearchTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = BRFullTextSearchTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; E3DF7E451C69A075005B861B /* BRFullTextSearch.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = BRFullTextSearch.framework; sourceTree = BUILT_PRODUCTS_DIR; }; E3DF7E491C69A075005B861B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - E3DF7E4D1C69A145005B861B /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; - E3DF7E4F1C69A149005B861B /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/usr/lib/libz.tbd; sourceTree = DEVELOPER_DIR; }; - E3DF7E521C69A1C9005B861B /* libstdc++.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = "libstdc++.tbd"; path = "Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/usr/lib/libstdc++.tbd"; sourceTree = DEVELOPER_DIR; }; E3DF7F3D1C69AC43005B861B /* da */ = {isa = PBXFileReference; lastKnownFileType = text; name = da; path = "stop-words.txt"; sourceTree = ""; }; E3DF7F401C69AC43005B861B /* de */ = {isa = PBXFileReference; lastKnownFileType = text; name = de; path = "stop-words.txt"; sourceTree = ""; }; E3DF7F431C69AC43005B861B /* en */ = {isa = PBXFileReference; lastKnownFileType = text; name = en; path = "stop-words.txt"; sourceTree = ""; }; @@ -948,6 +214,7 @@ E3DF7F5E1C69AC43005B861B /* ru */ = {isa = PBXFileReference; lastKnownFileType = text; name = ru; path = "stop-words.txt"; sourceTree = ""; }; E3DF7F611C69AC43005B861B /* sv */ = {isa = PBXFileReference; lastKnownFileType = text; name = sv; path = "stop-words.txt"; sourceTree = ""; }; E3DF7F641C69AC43005B861B /* tr */ = {isa = PBXFileReference; lastKnownFileType = text; name = tr; path = "stop-words.txt"; sourceTree = ""; }; + E420548430583E76A949D1FF /* Pods-BasePods-BRFullTextSearch.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-BasePods-BRFullTextSearch.debug.xcconfig"; path = "Pods/Target Support Files/Pods-BasePods-BRFullTextSearch/Pods-BasePods-BRFullTextSearch.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -955,10 +222,9 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - C909C2931784CC380016C25E /* libstdc++.dylib in Frameworks */, C99FCBF01846746E00A90E66 /* UIKit.framework in Frameworks */, - C909C2911784CC320016C25E /* libz.dylib in Frameworks */, C909C2651784CB600016C25E /* Foundation.framework in Frameworks */, + 6022E4062A55E98145910DDD /* libPods-BasePods-BRFullTextSearch.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -966,9 +232,9 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - C90B75291C7EA32800014124 /* libstdc++.dylib in Frameworks */, C90B751D1C7EA00D00014124 /* libBRFullTextSearch.a in Frameworks */, - C90B752A1C7EA32B00014124 /* libz.dylib in Frameworks */, + B41D7B5916D7FE7B09F1A0F7 /* libPods-BRFullTextSearchTests.a in Frameworks */, + 03B7FF76098C0020B53B1963 /* libPods-BasePods-BRFullTextSearchTests.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -976,25 +242,38 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - E3DF7E531C69A1C9005B861B /* libstdc++.tbd in Frameworks */, - E3DF7E511C69A1BE005B861B /* libz.tbd in Frameworks */, - E3DF7E4E1C69A145005B861B /* Foundation.framework in Frameworks */, + 08F58ED50F9FA6B4ADC815B9 /* libPods-BasePods-BRFullTextSearchMacOS.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + C8BB0A7835A76631C11A6DD6 /* Pods */ = { + isa = PBXGroup; + children = ( + 175688046C735C8053C0E015 /* Pods-BRFullTextSearchTests.debug.xcconfig */, + 5AD30F9EDBB90E180F819A99 /* Pods-BRFullTextSearchTests.release.xcconfig */, + E420548430583E76A949D1FF /* Pods-BasePods-BRFullTextSearch.debug.xcconfig */, + 8DD1D88DC310484ED3F8C547 /* Pods-BasePods-BRFullTextSearch.release.xcconfig */, + 9D9A68963B8579823FD1C229 /* Pods-BasePods-BRFullTextSearchTests.debug.xcconfig */, + 0B150ED0DC675AAD38D91041 /* Pods-BasePods-BRFullTextSearchTests.release.xcconfig */, + 685E3CDA24EE7C8ED3604A8D /* Pods-BasePods-BRFullTextSearchMacOS.debug.xcconfig */, + BFBBFA8CFA6938DDA64085B3 /* Pods-BasePods-BRFullTextSearchMacOS.release.xcconfig */, + ); + name = Pods; + sourceTree = ""; + }; C909C2581784CB600016C25E = { isa = PBXGroup; children = ( C933D8261CD68AF8006206B9 /* Packaging */, - C909C6421784CF0E0016C25E /* CLucene */, C909C2661784CB600016C25E /* BRFullTextSearch */, C909C27B1784CB600016C25E /* BRFullTextSearchTests */, E3DF7E461C69A075005B861B /* BRFullTextSearch Mac OS */, C909C2631784CB600016C25E /* Frameworks */, C909C2621784CB600016C25E /* Products */, + C8BB0A7835A76631C11A6DD6 /* Pods */, ); sourceTree = ""; }; @@ -1011,14 +290,12 @@ C909C2631784CB600016C25E /* Frameworks */ = { isa = PBXGroup; children = ( - E3DF7E521C69A1C9005B861B /* libstdc++.tbd */, - E3DF7E4F1C69A149005B861B /* libz.tbd */, - E3DF7E4D1C69A145005B861B /* Foundation.framework */, C99FCBEE1846745E00A90E66 /* UIKit.framework */, - C909C2921784CC380016C25E /* libstdc++.dylib */, - C909C2901784CC320016C25E /* libz.dylib */, C909C2641784CB600016C25E /* Foundation.framework */, - C99FCBEB18466FE600A90E66 /* XCTest.framework */, + 4A941FCDB2DC233E241C3800 /* libPods-BRFullTextSearchTests.a */, + 8D25A545E77BFA43C3C5D47F /* libPods-BasePods-BRFullTextSearch.a */, + 01C1BE10792AA64013FE1EF4 /* libPods-BasePods-BRFullTextSearchTests.a */, + 975BE9E97FE948445107BD2A /* libPods-BasePods-BRFullTextSearchMacOS.a */, ); name = Frameworks; sourceTree = ""; @@ -1076,584 +353,6 @@ name = "Supporting Files"; sourceTree = ""; }; - C909C2961784CF090016C25E /* shared */ = { - isa = PBXGroup; - children = ( - C909C2971784CF090016C25E /* CLucene */, - ); - name = shared; - path = clucene/src/shared; - sourceTree = ""; - }; - C909C2971784CF090016C25E /* CLucene */ = { - isa = PBXGroup; - children = ( - C909C2991784CF090016C25E /* _SharedHeader.h */, - C909C29C1784CF090016C25E /* config */, - C909C2AB1784CF090016C25E /* debug */, - C909C2AE1784CF090016C25E /* LuceneThreads.h */, - C909C2AF1784CF090016C25E /* SharedHeader.cpp */, - C909C2B01784CF090016C25E /* SharedHeader.h */, - C909C2B11784CF090016C25E /* util */, - ); - path = CLucene; - sourceTree = ""; - }; - C909C29C1784CF090016C25E /* config */ = { - isa = PBXGroup; - children = ( - C909C29D1784CF090016C25E /* _gunichartables.h */, - C909C29E1784CF090016C25E /* _threads.h */, - C909C29F1784CF090016C25E /* gunichartables.cpp */, - C909C2A01784CF090016C25E /* repl_lltot.cpp */, - C909C2A11784CF090016C25E /* repl_tchar.h */, - C909C2A21784CF090016C25E /* repl_tcscasecmp.cpp */, - C909C2A31784CF090016C25E /* repl_tcslwr.cpp */, - C909C2A41784CF090016C25E /* repl_tcstod.cpp */, - C909C2A51784CF090016C25E /* repl_tcstoll.cpp */, - C909C2A61784CF090016C25E /* repl_tprintf.cpp */, - C909C2A71784CF090016C25E /* repl_wchar.h */, - C909C2A81784CF090016C25E /* repl_wctype.h */, - C909C2A91784CF090016C25E /* threads.cpp */, - C909C2AA1784CF090016C25E /* utf8.cpp */, - ); - path = config; - sourceTree = ""; - }; - C909C2AB1784CF090016C25E /* debug */ = { - isa = PBXGroup; - children = ( - C909C2AC1784CF090016C25E /* _condition.h */, - C909C2AD1784CF090016C25E /* condition.cpp */, - ); - path = debug; - sourceTree = ""; - }; - C909C2B11784CF090016C25E /* util */ = { - isa = PBXGroup; - children = ( - C909C2B31784CF090016C25E /* dirent.cpp */, - C909C2B41784CF090016C25E /* dirent.h */, - C909C2B51784CF090016C25E /* Misc.cpp */, - C909C2B61784CF090016C25E /* Misc.h */, - C909C2B71784CF090016C25E /* StringBuffer.cpp */, - C909C2B81784CF090016C25E /* StringBuffer.h */, - ); - path = util; - sourceTree = ""; - }; - C909C2D51784CF090016C25E /* core */ = { - isa = PBXGroup; - children = ( - C909C2D61784CF090016C25E /* CLucene */, - C909C4091784CF0A0016C25E /* CLucene.h */, - ); - name = core; - path = clucene/src/core; - sourceTree = ""; - }; - C909C2D61784CF090016C25E /* CLucene */ = { - isa = PBXGroup; - children = ( - C909C2D71784CF090016C25E /* _ApiHeader.h */, - C909C2D81784CF090016C25E /* analysis */, - C909C2E71784CF090016C25E /* CLConfig.h */, - C909C2E91784CF090016C25E /* debug */, - C909C2EE1784CF090016C25E /* document */, - C909C2FB1784CF090016C25E /* index */, - C909C3461784CF090016C25E /* queryParser */, - C909C35F1784CF090016C25E /* search */, - C909C3DA1784CF090016C25E /* StdHeader.cpp */, - C909C3DB1784CF090016C25E /* StdHeader.h */, - C909C3DC1784CF090016C25E /* store */, - C909C3EF1784CF0A0016C25E /* util */, - ); - path = CLucene; - sourceTree = ""; - }; - C909C2D81784CF090016C25E /* analysis */ = { - isa = PBXGroup; - children = ( - C909C2D91784CF090016C25E /* AnalysisHeader.cpp */, - C909C2DA1784CF090016C25E /* AnalysisHeader.h */, - C909C2DB1784CF090016C25E /* Analyzers.cpp */, - C909C2DC1784CF090016C25E /* Analyzers.h */, - C909C2DD1784CF090016C25E /* CachingTokenFilter.cpp */, - C909C2DE1784CF090016C25E /* CachingTokenFilter.h */, - C909C2DF1784CF090016C25E /* standard */, - ); - path = analysis; - sourceTree = ""; - }; - C909C2DF1784CF090016C25E /* standard */ = { - isa = PBXGroup; - children = ( - C909C2E01784CF090016C25E /* StandardAnalyzer.cpp */, - C909C2E11784CF090016C25E /* StandardAnalyzer.h */, - C909C2E21784CF090016C25E /* StandardFilter.cpp */, - C909C2E31784CF090016C25E /* StandardFilter.h */, - C909C2E41784CF090016C25E /* StandardTokenizer.cpp */, - C909C2E51784CF090016C25E /* StandardTokenizer.h */, - C909C2E61784CF090016C25E /* StandardTokenizerConstants.h */, - ); - path = standard; - sourceTree = ""; - }; - C909C2E91784CF090016C25E /* debug */ = { - isa = PBXGroup; - children = ( - C909C2EA1784CF090016C25E /* error.cpp */, - C909C2EB1784CF090016C25E /* error.h */, - C909C2EC1784CF090016C25E /* lucenebase.h */, - C909C2ED1784CF090016C25E /* mem.h */, - ); - path = debug; - sourceTree = ""; - }; - C909C2EE1784CF090016C25E /* document */ = { - isa = PBXGroup; - children = ( - C909C2EF1784CF090016C25E /* DateField.cpp */, - C909C2F01784CF090016C25E /* DateField.h */, - C909C2F11784CF090016C25E /* DateTools.cpp */, - C909C2F21784CF090016C25E /* DateTools.h */, - C909C2F31784CF090016C25E /* Document.cpp */, - C909C2F41784CF090016C25E /* Document.h */, - C909C2F51784CF090016C25E /* Field.cpp */, - C909C2F61784CF090016C25E /* Field.h */, - C909C2F71784CF090016C25E /* FieldSelector.cpp */, - C909C2F81784CF090016C25E /* FieldSelector.h */, - C909C2F91784CF090016C25E /* NumberTools.cpp */, - C909C2FA1784CF090016C25E /* NumberTools.h */, - ); - path = document; - sourceTree = ""; - }; - C909C2FB1784CF090016C25E /* index */ = { - isa = PBXGroup; - children = ( - C909C2FC1784CF090016C25E /* _CompoundFile.h */, - C909C2FD1784CF090016C25E /* _DocumentsWriter.h */, - C909C2FE1784CF090016C25E /* _FieldInfo.h */, - C909C2FF1784CF090016C25E /* _FieldInfos.h */, - C909C3001784CF090016C25E /* _FieldsReader.h */, - C909C3011784CF090016C25E /* _FieldsWriter.h */, - C909C3021784CF090016C25E /* _IndexFileDeleter.h */, - C909C3031784CF090016C25E /* _IndexFileNameFilter.h */, - C909C3041784CF090016C25E /* _IndexFileNames.h */, - C909C3051784CF090016C25E /* _MultiSegmentReader.h */, - C909C3061784CF090016C25E /* _SegmentHeader.h */, - C909C3071784CF090016C25E /* _SegmentInfos.h */, - C909C3081784CF090016C25E /* _SegmentMergeInfo.h */, - C909C3091784CF090016C25E /* _SegmentMergeQueue.h */, - C909C30A1784CF090016C25E /* _SegmentMerger.h */, - C909C30B1784CF090016C25E /* _SegmentTermEnum.h */, - C909C30C1784CF090016C25E /* _SkipListReader.h */, - C909C30D1784CF090016C25E /* _SkipListWriter.h */, - C909C30E1784CF090016C25E /* _Term.h */, - C909C30F1784CF090016C25E /* _TermInfo.h */, - C909C3101784CF090016C25E /* _TermInfosReader.h */, - C909C3111784CF090016C25E /* _TermInfosWriter.h */, - C909C3121784CF090016C25E /* _TermVector.h */, - C909C3131784CF090016C25E /* CompoundFile.cpp */, - C909C3141784CF090016C25E /* DirectoryIndexReader.cpp */, - C909C3151784CF090016C25E /* DirectoryIndexReader.h */, - C909C3161784CF090016C25E /* DocumentsWriter.cpp */, - C909C3171784CF090016C25E /* DocumentsWriterThreadState.cpp */, - C909C3181784CF090016C25E /* FieldInfos.cpp */, - C909C3191784CF090016C25E /* FieldsReader.cpp */, - C909C31A1784CF090016C25E /* FieldsWriter.cpp */, - C909C31B1784CF090016C25E /* IndexDeletionPolicy.cpp */, - C909C31C1784CF090016C25E /* IndexDeletionPolicy.h */, - C909C31D1784CF090016C25E /* IndexFileDeleter.cpp */, - C909C31E1784CF090016C25E /* IndexFileNameFilter.cpp */, - C909C31F1784CF090016C25E /* IndexFileNames.cpp */, - C909C3201784CF090016C25E /* IndexModifier.cpp */, - C909C3211784CF090016C25E /* IndexModifier.h */, - C909C3221784CF090016C25E /* IndexReader.cpp */, - C909C3231784CF090016C25E /* IndexReader.h */, - C909C3241784CF090016C25E /* IndexWriter.cpp */, - C909C3251784CF090016C25E /* IndexWriter.h */, - C909C3261784CF090016C25E /* MergePolicy.cpp */, - C909C3271784CF090016C25E /* MergePolicy.h */, - C909C3281784CF090016C25E /* MergeScheduler.cpp */, - C909C3291784CF090016C25E /* MergeScheduler.h */, - C909C32A1784CF090016C25E /* MultipleTermPositions.cpp */, - C909C32B1784CF090016C25E /* MultipleTermPositions.h */, - C909C32C1784CF090016C25E /* MultiReader.cpp */, - C909C32D1784CF090016C25E /* MultiReader.h */, - C909C32E1784CF090016C25E /* MultiSegmentReader.cpp */, - C909C32F1784CF090016C25E /* Payload.cpp */, - C909C3301784CF090016C25E /* Payload.h */, - C909C3311784CF090016C25E /* SegmentInfos.cpp */, - C909C3321784CF090016C25E /* SegmentMergeInfo.cpp */, - C909C3331784CF090016C25E /* SegmentMergeQueue.cpp */, - C909C3341784CF090016C25E /* SegmentMerger.cpp */, - C909C3351784CF090016C25E /* SegmentReader.cpp */, - C909C3361784CF090016C25E /* SegmentTermDocs.cpp */, - C909C3371784CF090016C25E /* SegmentTermEnum.cpp */, - C909C3381784CF090016C25E /* SegmentTermPositions.cpp */, - C909C3391784CF090016C25E /* SegmentTermVector.cpp */, - C909C33A1784CF090016C25E /* SkipListReader.cpp */, - C909C33B1784CF090016C25E /* SkipListWriter.cpp */, - C909C33C1784CF090016C25E /* Term.cpp */, - C909C33D1784CF090016C25E /* Term.h */, - C909C33E1784CF090016C25E /* TermInfo.cpp */, - C909C33F1784CF090016C25E /* TermInfosReader.cpp */, - C909C3401784CF090016C25E /* TermInfosWriter.cpp */, - C909C3411784CF090016C25E /* Terms.cpp */, - C909C3421784CF090016C25E /* Terms.h */, - C909C3431784CF090016C25E /* TermVector.h */, - C909C3441784CF090016C25E /* TermVectorReader.cpp */, - C909C3451784CF090016C25E /* TermVectorWriter.cpp */, - ); - path = index; - sourceTree = ""; - }; - C909C3461784CF090016C25E /* queryParser */ = { - isa = PBXGroup; - children = ( - C909C3471784CF090016C25E /* _CharStream.h */, - C909C3481784CF090016C25E /* _FastCharStream.h */, - C909C3491784CF090016C25E /* FastCharStream.cpp */, - C909C34A1784CF090016C25E /* legacy */, - C909C3561784CF090016C25E /* MultiFieldQueryParser.cpp */, - C909C3571784CF090016C25E /* MultiFieldQueryParser.h */, - C909C3581784CF090016C25E /* QueryParser.cpp */, - C909C3591784CF090016C25E /* QueryParser.h */, - C909C35A1784CF090016C25E /* QueryParserConstants.h */, - C909C35B1784CF090016C25E /* QueryParserTokenManager.cpp */, - C909C35C1784CF090016C25E /* QueryParserTokenManager.h */, - C909C35D1784CF090016C25E /* QueryToken.cpp */, - C909C35E1784CF090016C25E /* QueryToken.h */, - ); - path = queryParser; - sourceTree = ""; - }; - C909C34A1784CF090016C25E /* legacy */ = { - isa = PBXGroup; - children = ( - C909C34B1784CF090016C25E /* _Lexer.h */, - C909C34C1784CF090016C25E /* _TokenList.h */, - C909C34D1784CF090016C25E /* Lexer.cpp */, - C909C34E1784CF090016C25E /* MultiFieldQueryParser.cpp */, - C909C34F1784CF090016C25E /* MultiFieldQueryParser.h */, - C909C3501784CF090016C25E /* QueryParser.cpp */, - C909C3511784CF090016C25E /* QueryParser.h */, - C909C3521784CF090016C25E /* QueryParserBase.cpp */, - C909C3531784CF090016C25E /* QueryToken.cpp */, - C909C3541784CF090016C25E /* QueryToken.h */, - C909C3551784CF090016C25E /* TokenList.cpp */, - ); - path = legacy; - sourceTree = ""; - }; - C909C35F1784CF090016C25E /* search */ = { - isa = PBXGroup; - children = ( - C909C3601784CF090016C25E /* _BooleanScorer.h */, - C909C3611784CF090016C25E /* _BooleanScorer2.h */, - C909C3621784CF090016C25E /* _ConjunctionScorer.h */, - C909C3631784CF090016C25E /* _DisjunctionSumScorer.h */, - C909C3641784CF090016C25E /* _ExactPhraseScorer.h */, - C909C3651784CF090016C25E /* _FieldCacheImpl.h */, - C909C3661784CF090016C25E /* _FieldDocSortedHitQueue.h */, - C909C3671784CF090016C25E /* _HitQueue.h */, - C909C3681784CF090016C25E /* _PhrasePositions.h */, - C909C3691784CF090016C25E /* _PhraseQueue.h */, - C909C36A1784CF090016C25E /* _PhraseScorer.h */, - C909C36B1784CF090016C25E /* _SloppyPhraseScorer.h */, - C909C36C1784CF090016C25E /* _TermScorer.h */, - C909C36D1784CF090016C25E /* BooleanClause.h */, - C909C36E1784CF090016C25E /* BooleanQuery.cpp */, - C909C36F1784CF090016C25E /* BooleanQuery.h */, - C909C3701784CF090016C25E /* BooleanScorer.cpp */, - C909C3711784CF090016C25E /* BooleanScorer2.cpp */, - C909C3721784CF090016C25E /* CachingSpanFilter.cpp */, - C909C3731784CF090016C25E /* CachingSpanFilter.h */, - C909C3741784CF090016C25E /* CachingWrapperFilter.cpp */, - C909C3751784CF090016C25E /* CachingWrapperFilter.h */, - C909C3761784CF090016C25E /* ChainedFilter.cpp */, - C909C3771784CF090016C25E /* ChainedFilter.h */, - C909C3781784CF090016C25E /* Compare.cpp */, - C909C3791784CF090016C25E /* Compare.h */, - C909C37A1784CF090016C25E /* ConjunctionScorer.cpp */, - C909C37B1784CF090016C25E /* ConstantScoreQuery.cpp */, - C909C37C1784CF090016C25E /* ConstantScoreQuery.h */, - C909C37D1784CF090016C25E /* DateFilter.cpp */, - C909C37E1784CF090016C25E /* DateFilter.h */, - C909C37F1784CF090016C25E /* DisjunctionSumScorer.cpp */, - C909C3801784CF090016C25E /* ExactPhraseScorer.cpp */, - C909C3811784CF090016C25E /* Explanation.cpp */, - C909C3821784CF090016C25E /* Explanation.h */, - C909C3831784CF090016C25E /* FieldCache.cpp */, - C909C3841784CF090016C25E /* FieldCache.h */, - C909C3851784CF090016C25E /* FieldCacheImpl.cpp */, - C909C3861784CF090016C25E /* FieldDoc.h */, - C909C3871784CF090016C25E /* FieldDocSortedHitQueue.cpp */, - C909C3881784CF090016C25E /* FieldSortedHitQueue.cpp */, - C909C3891784CF090016C25E /* FieldSortedHitQueue.h */, - C909C38A1784CF090016C25E /* Filter.h */, - C909C38B1784CF090016C25E /* FilteredTermEnum.cpp */, - C909C38C1784CF090016C25E /* FilteredTermEnum.h */, - C909C38F1784CF090016C25E /* FuzzyQuery.cpp */, - C909C3901784CF090016C25E /* FuzzyQuery.h */, - C909C3911784CF090016C25E /* HitQueue.cpp */, - C909C3921784CF090016C25E /* Hits.cpp */, - C909C3931784CF090016C25E /* Hits.h */, - C909C3941784CF090016C25E /* IndexSearcher.cpp */, - C909C3951784CF090016C25E /* IndexSearcher.h */, - C909C3961784CF090016C25E /* MatchAllDocsQuery.cpp */, - C909C3971784CF090016C25E /* MatchAllDocsQuery.h */, - C909C3981784CF090016C25E /* MultiPhraseQuery.cpp */, - C909C3991784CF090016C25E /* MultiPhraseQuery.h */, - C909C39A1784CF090016C25E /* MultiSearcher.cpp */, - C909C39B1784CF090016C25E /* MultiSearcher.h */, - C909C39C1784CF090016C25E /* MultiTermQuery.cpp */, - C909C39D1784CF090016C25E /* MultiTermQuery.h */, - C909C39E1784CF090016C25E /* PhrasePositions.cpp */, - C909C39F1784CF090016C25E /* PhraseQuery.cpp */, - C909C3A01784CF090016C25E /* PhraseQuery.h */, - C909C3A11784CF090016C25E /* PhraseScorer.cpp */, - C909C3A21784CF090016C25E /* PrefixQuery.cpp */, - C909C3A31784CF090016C25E /* PrefixQuery.h */, - C909C3A41784CF090016C25E /* Query.h */, - C909C3A51784CF090016C25E /* QueryFilter.cpp */, - C909C3A61784CF090016C25E /* QueryFilter.h */, - C909C3A71784CF090016C25E /* RangeFilter.cpp */, - C909C3A81784CF090016C25E /* RangeFilter.h */, - C909C3A91784CF090016C25E /* RangeQuery.cpp */, - C909C3AA1784CF090016C25E /* RangeQuery.h */, - C909C3AB1784CF090016C25E /* Scorer.cpp */, - C909C3AC1784CF090016C25E /* Scorer.h */, - C909C3AD1784CF090016C25E /* ScorerDocQueue.cpp */, - C909C3AE1784CF090016C25E /* ScorerDocQueue.h */, - C909C3AF1784CF090016C25E /* Searchable.h */, - C909C3B01784CF090016C25E /* SearchHeader.cpp */, - C909C3B11784CF090016C25E /* SearchHeader.h */, - C909C3B21784CF090016C25E /* Similarity.cpp */, - C909C3B31784CF090016C25E /* Similarity.h */, - C909C3B41784CF090016C25E /* SloppyPhraseScorer.cpp */, - C909C3B51784CF090016C25E /* Sort.cpp */, - C909C3B61784CF090016C25E /* Sort.h */, - C909C3B71784CF090016C25E /* SpanFilter.h */, - C909C3B81784CF090016C25E /* SpanFilterResult.h */, - C909C3B91784CF090016C25E /* SpanQueryFilter.cpp */, - C909C3BA1784CF090016C25E /* SpanQueryFilter.h */, - C909C3BB1784CF090016C25E /* spans */, - C909C3D31784CF090016C25E /* TermQuery.cpp */, - C909C3D41784CF090016C25E /* TermQuery.h */, - C909C3D51784CF090016C25E /* TermScorer.cpp */, - C909C3D61784CF090016C25E /* WildcardQuery.cpp */, - C909C3D71784CF090016C25E /* WildcardQuery.h */, - C909C3D81784CF090016C25E /* WildcardTermEnum.cpp */, - C909C3D91784CF090016C25E /* WildcardTermEnum.h */, - ); - path = search; - sourceTree = ""; - }; - C909C3BB1784CF090016C25E /* spans */ = { - isa = PBXGroup; - children = ( - C909C3BC1784CF090016C25E /* _EmptySpans.h */, - C909C3BD1784CF090016C25E /* _NearSpansOrdered.h */, - C909C3BE1784CF090016C25E /* _NearSpansUnordered.h */, - C909C3BF1784CF090016C25E /* _TermSpans.h */, - C909C3C01784CF090016C25E /* NearSpansOrdered.cpp */, - C909C3C11784CF090016C25E /* NearSpansUnordered.cpp */, - C909C3C21784CF090016C25E /* SpanFirstQuery.cpp */, - C909C3C31784CF090016C25E /* SpanFirstQuery.h */, - C909C3C41784CF090016C25E /* SpanNearQuery.cpp */, - C909C3C51784CF090016C25E /* SpanNearQuery.h */, - C909C3C61784CF090016C25E /* SpanNotQuery.cpp */, - C909C3C71784CF090016C25E /* SpanNotQuery.h */, - C909C3C81784CF090016C25E /* SpanOrQuery.cpp */, - C909C3C91784CF090016C25E /* SpanOrQuery.h */, - C909C3CA1784CF090016C25E /* SpanQuery.h */, - C909C3CB1784CF090016C25E /* Spans.h */, - C909C3CC1784CF090016C25E /* SpanScorer.cpp */, - C909C3CD1784CF090016C25E /* SpanScorer.h */, - C909C3CE1784CF090016C25E /* SpanTermQuery.cpp */, - C909C3CF1784CF090016C25E /* SpanTermQuery.h */, - C909C3D01784CF090016C25E /* SpanWeight.cpp */, - C909C3D11784CF090016C25E /* SpanWeight.h */, - C909C3D21784CF090016C25E /* TermSpans.cpp */, - ); - path = spans; - sourceTree = ""; - }; - C909C3DC1784CF090016C25E /* store */ = { - isa = PBXGroup; - children = ( - C909C3DD1784CF090016C25E /* _Lock.h */, - C909C3DE1784CF090016C25E /* _MMapIndexInput.h */, - C909C3DF1784CF090016C25E /* _RAMDirectory.h */, - C909C3E01784CF090016C25E /* Directory.cpp */, - C909C3E11784CF090016C25E /* Directory.h */, - C909C3E21784CF090016C25E /* FSDirectory.cpp */, - C909C3E31784CF090016C25E /* FSDirectory.h */, - C909C3E41784CF090016C25E /* IndexInput.cpp */, - C909C3E51784CF090016C25E /* IndexInput.h */, - C909C3E61784CF0A0016C25E /* IndexOutput.cpp */, - C909C3E71784CF0A0016C25E /* IndexOutput.h */, - C909C3E81784CF0A0016C25E /* Lock.cpp */, - C909C3E91784CF0A0016C25E /* Lock.h */, - C909C3EA1784CF0A0016C25E /* LockFactory.cpp */, - C909C3EB1784CF0A0016C25E /* LockFactory.h */, - C909C3EC1784CF0A0016C25E /* MMapInput.cpp */, - C909C3ED1784CF0A0016C25E /* RAMDirectory.cpp */, - C909C3EE1784CF0A0016C25E /* RAMDirectory.h */, - ); - path = store; - sourceTree = ""; - }; - C909C3EF1784CF0A0016C25E /* util */ = { - isa = PBXGroup; - children = ( - C909C3F01784CF0A0016C25E /* _Arrays.h */, - C909C3F11784CF0A0016C25E /* _bufferedstream.h */, - C909C3F21784CF0A0016C25E /* _FastCharStream.h */, - C909C3F31784CF0A0016C25E /* _MD5Digester.h */, - C909C3F41784CF0A0016C25E /* _streambase.h */, - C909C3F51784CF0A0016C25E /* _streambuffer.h */, - C909C3F61784CF0A0016C25E /* _StringIntern.h */, - C909C3F71784CF0A0016C25E /* _ThreadLocal.h */, - C909C3F81784CF0A0016C25E /* _VoidList.h */, - C909C3F91784CF0A0016C25E /* _VoidMap.h */, - C909C3FA1784CF0A0016C25E /* Array.h */, - C909C3FB1784CF0A0016C25E /* BitSet.cpp */, - C909C3FC1784CF0A0016C25E /* BitSet.h */, - C909C3FD1784CF0A0016C25E /* CLStreams.h */, - C909C3FE1784CF0A0016C25E /* Equators.cpp */, - C909C3FF1784CF0A0016C25E /* Equators.h */, - C909C4001784CF0A0016C25E /* FastCharStream.cpp */, - C909C4011784CF0A0016C25E /* MD5Digester.cpp */, - C909C4021784CF0A0016C25E /* PriorityQueue.h */, - C909C4031784CF0A0016C25E /* Reader.cpp */, - C909C4041784CF0A0016C25E /* Reader.h */, - C909C4051784CF0A0016C25E /* StringIntern.cpp */, - C909C4061784CF0A0016C25E /* ThreadLocal.cpp */, - C909C4071784CF0A0016C25E /* VoidList.h */, - C909C4081784CF0A0016C25E /* VoidMap.h */, - ); - path = util; - sourceTree = ""; - }; - C909C43B1784CF0A0016C25E /* snowball */ = { - isa = PBXGroup; - children = ( - C909C43C1784CF0A0016C25E /* include */, - C909C43E1784CF0A0016C25E /* libstemmer */, - C909C4411784CF0A0016C25E /* libstemmer.h */, - C909C4421784CF0A0016C25E /* runtime */, - C909C4471784CF0A0016C25E /* Snowball.cpp */, - C909C44A1784CF0A0016C25E /* SnowballAnalyzer.h */, - C909C44B1784CF0A0016C25E /* SnowballFilter.h */, - C909C44C1784CF0A0016C25E /* src_c */, - ); - name = snowball; - path = "clucene/src/contribs-lib/CLucene/snowball"; - sourceTree = ""; - }; - C909C43C1784CF0A0016C25E /* include */ = { - isa = PBXGroup; - children = ( - C909C43D1784CF0A0016C25E /* libstemmer.h */, - ); - path = include; - sourceTree = ""; - }; - C909C43E1784CF0A0016C25E /* libstemmer */ = { - isa = PBXGroup; - children = ( - C909C43F1784CF0A0016C25E /* libstemmer.c */, - C909C4401784CF0A0016C25E /* modules.h */, - ); - path = libstemmer; - sourceTree = ""; - }; - C909C4421784CF0A0016C25E /* runtime */ = { - isa = PBXGroup; - children = ( - C909C4431784CF0A0016C25E /* api.c */, - C909C4441784CF0A0016C25E /* api.h */, - C909C4451784CF0A0016C25E /* header.h */, - C909C4461784CF0A0016C25E /* utilities.c */, - ); - path = runtime; - sourceTree = ""; - }; - C909C44C1784CF0A0016C25E /* src_c */ = { - isa = PBXGroup; - children = ( - C909C44D1784CF0A0016C25E /* stem_ISO_8859_1_danish.c */, - C909C44E1784CF0A0016C25E /* stem_ISO_8859_1_danish.h */, - C909C44F1784CF0A0016C25E /* stem_ISO_8859_1_dutch.c */, - C909C4501784CF0A0016C25E /* stem_ISO_8859_1_dutch.h */, - C909C4511784CF0A0016C25E /* stem_ISO_8859_1_english.c */, - C909C4521784CF0A0016C25E /* stem_ISO_8859_1_english.h */, - C909C4531784CF0A0016C25E /* stem_ISO_8859_1_finnish.c */, - C909C4541784CF0A0016C25E /* stem_ISO_8859_1_finnish.h */, - C909C4551784CF0A0016C25E /* stem_ISO_8859_1_french.c */, - C909C4561784CF0A0016C25E /* stem_ISO_8859_1_french.h */, - C909C4571784CF0A0016C25E /* stem_ISO_8859_1_german.c */, - C909C4581784CF0A0016C25E /* stem_ISO_8859_1_german.h */, - C909C4591784CF0A0016C25E /* stem_ISO_8859_1_italian.c */, - C909C45A1784CF0A0016C25E /* stem_ISO_8859_1_italian.h */, - C909C45B1784CF0A0016C25E /* stem_ISO_8859_1_norwegian.c */, - C909C45C1784CF0A0016C25E /* stem_ISO_8859_1_norwegian.h */, - C909C45D1784CF0A0016C25E /* stem_ISO_8859_1_porter.c */, - C909C45E1784CF0A0016C25E /* stem_ISO_8859_1_porter.h */, - C909C45F1784CF0A0016C25E /* stem_ISO_8859_1_portuguese.c */, - C909C4601784CF0A0016C25E /* stem_ISO_8859_1_portuguese.h */, - C909C4611784CF0A0016C25E /* stem_ISO_8859_1_spanish.c */, - C909C4621784CF0A0016C25E /* stem_ISO_8859_1_spanish.h */, - C909C4631784CF0A0016C25E /* stem_ISO_8859_1_swedish.c */, - C909C4641784CF0A0016C25E /* stem_ISO_8859_1_swedish.h */, - C909C4651784CF0A0016C25E /* stem_KOI8_R_russian.c */, - C909C4661784CF0A0016C25E /* stem_KOI8_R_russian.h */, - C909C4671784CF0A0016C25E /* stem_UTF_8_danish.c */, - C909C4681784CF0A0016C25E /* stem_UTF_8_danish.h */, - C909C4691784CF0A0016C25E /* stem_UTF_8_dutch.c */, - C909C46A1784CF0A0016C25E /* stem_UTF_8_dutch.h */, - C909C46B1784CF0A0016C25E /* stem_UTF_8_english.c */, - C909C46C1784CF0A0016C25E /* stem_UTF_8_english.h */, - C909C46D1784CF0A0016C25E /* stem_UTF_8_finnish.c */, - C909C46E1784CF0A0016C25E /* stem_UTF_8_finnish.h */, - C909C46F1784CF0A0016C25E /* stem_UTF_8_french.c */, - C909C4701784CF0A0016C25E /* stem_UTF_8_french.h */, - C909C4711784CF0A0016C25E /* stem_UTF_8_german.c */, - C909C4721784CF0A0016C25E /* stem_UTF_8_german.h */, - C909C4731784CF0A0016C25E /* stem_UTF_8_italian.c */, - C909C4741784CF0A0016C25E /* stem_UTF_8_italian.h */, - C909C4751784CF0A0016C25E /* stem_UTF_8_norwegian.c */, - C909C4761784CF0A0016C25E /* stem_UTF_8_norwegian.h */, - C909C4771784CF0A0016C25E /* stem_UTF_8_porter.c */, - C909C4781784CF0A0016C25E /* stem_UTF_8_porter.h */, - C909C4791784CF0A0016C25E /* stem_UTF_8_portuguese.c */, - C909C47A1784CF0A0016C25E /* stem_UTF_8_portuguese.h */, - C909C47B1784CF0A0016C25E /* stem_UTF_8_russian.c */, - C909C47C1784CF0A0016C25E /* stem_UTF_8_russian.h */, - C909C47D1784CF0A0016C25E /* stem_UTF_8_spanish.c */, - C909C47E1784CF0A0016C25E /* stem_UTF_8_spanish.h */, - C909C47F1784CF0A0016C25E /* stem_UTF_8_swedish.c */, - C909C4801784CF0A0016C25E /* stem_UTF_8_swedish.h */, - ); - path = src_c; - sourceTree = ""; - }; - C909C6421784CF0E0016C25E /* CLucene */ = { - isa = PBXGroup; - children = ( - C909C6431784CF640016C25E /* clucene-config.h */, - C909C6441784CF640016C25E /* _clucene-config.h */, - C909C2D51784CF090016C25E /* core */, - C909C2961784CF090016C25E /* shared */, - C909C43B1784CF0A0016C25E /* snowball */, - ); - name = CLucene; - sourceTree = ""; - }; C909C64F1784D3890016C25E /* CLucene */ = { isa = PBXGroup; children = ( @@ -1911,9 +610,11 @@ isa = PBXNativeTarget; buildConfigurationList = C909C2861784CB600016C25E /* Build configuration list for PBXNativeTarget "BRFullTextSearch" */; buildPhases = ( + 1691C4EF91153A97CC3284E5 /* [CP] Check Pods Manifest.lock */, C909C25D1784CB600016C25E /* Sources */, C909C25E1784CB600016C25E /* Frameworks */, C909C25F1784CB600016C25E /* CopyFiles */, + B4DC1C858B5C151A3753077A /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -1928,9 +629,12 @@ isa = PBXNativeTarget; buildConfigurationList = C90B75201C7EA00D00014124 /* Build configuration list for PBXNativeTarget "BRFullTextSearchTests" */; buildPhases = ( + EB68ED7E5609A553FDEAF143 /* [CP] Check Pods Manifest.lock */, C90B75141C7EA00D00014124 /* Sources */, C90B75151C7EA00D00014124 /* Frameworks */, C90B75161C7EA00D00014124 /* Resources */, + 5617952ED2518554D95E35B0 /* [CP] Embed Pods Frameworks */, + 00D7B40D1EF58CD637A4F7F5 /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -1942,22 +646,24 @@ productReference = E345D8FC1C9DEA89005733F5 /* BRFullTextSearchTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; - E3DF7E441C69A075005B861B /* BRFullTextSearch Mac OS */ = { + E3DF7E441C69A075005B861B /* BRFullTextSearchMacOS */ = { isa = PBXNativeTarget; - buildConfigurationList = E3DF7E4C1C69A075005B861B /* Build configuration list for PBXNativeTarget "BRFullTextSearch Mac OS" */; + buildConfigurationList = E3DF7E4C1C69A075005B861B /* Build configuration list for PBXNativeTarget "BRFullTextSearchMacOS" */; buildPhases = ( + 62172D825257FBA38E5A7E81 /* [CP] Check Pods Manifest.lock */, E3DF7E401C69A075005B861B /* Sources */, E3DF7E411C69A075005B861B /* Frameworks */, E3DF7E421C69A075005B861B /* Headers */, E3DF7E431C69A075005B861B /* Resources */, E38E8DD21C6A596A000EB763 /* ShellScript */, + FC367F5EDEBE8EC8EAB3FCD4 /* [CP] Copy Pods Resources */, ); buildRules = ( ); dependencies = ( ); - name = "BRFullTextSearch Mac OS"; - productName = "BRFullTextSearch Mac OS"; + name = BRFullTextSearchMacOS; + productName = "BRFullTextSearchMacOS"; productReference = E3DF7E451C69A075005B861B /* BRFullTextSearch.framework */; productType = "com.apple.product-type.framework"; }; @@ -2003,7 +709,7 @@ C909C2601784CB600016C25E /* BRFullTextSearch */, C90B75171C7EA00D00014124 /* BRFullTextSearchTests */, C909C28C1784CB740016C25E /* BRFullTextSearch.framework */, - E3DF7E441C69A075005B861B /* BRFullTextSearch Mac OS */, + E3DF7E441C69A075005B861B /* BRFullTextSearchMacOS */, ); }; /* End PBXProject section */ @@ -2041,6 +747,81 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 00D7B40D1EF58CD637A4F7F5 /* [CP] Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "[CP] Copy Pods Resources"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-BasePods-BRFullTextSearchTests/Pods-BasePods-BRFullTextSearchTests-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; + 1691C4EF91153A97CC3284E5 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "[CP] Check Pods Manifest.lock"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n"; + showEnvVarsInLog = 0; + }; + 5617952ED2518554D95E35B0 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "[CP] Embed Pods Frameworks"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-BasePods-BRFullTextSearchTests/Pods-BasePods-BRFullTextSearchTests-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + 62172D825257FBA38E5A7E81 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "[CP] Check Pods Manifest.lock"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n"; + showEnvVarsInLog = 0; + }; + B4DC1C858B5C151A3753077A /* [CP] Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "[CP] Copy Pods Resources"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-BasePods-BRFullTextSearch/Pods-BasePods-BRFullTextSearch-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; C909C64E1784D1090016C25E /* Generate framework */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -2068,6 +849,36 @@ shellPath = /bin/sh; shellScript = "PRODUCT=BRFullTextSearch\n\nOUTPUT_DIR=\"${PROJECT_DIR}/Framework-MacOS\"\nHEADERS_DIR=\"${OUTPUT_DIR}/Headers\"\nRESOURCE_DIR=\"${OUTPUT_DIR}/Resources\"\n\n# Start clean by removing output dir\nrm -rf ${HEADERS_DIR}\nmkdir -p \"${HEADERS_DIR}\"\n\n# Copy source headers into flat Headers directory\nrsync -a --include '*/' --include '**/*.h' --exclude '*' ${PROJECT_DIR}/clucene/src/shared/CLucene \"${HEADERS_DIR}/\"\nrsync -a --include '*/' --include '**/*.h' --exclude '*' ${PROJECT_DIR}/clucene/src/core/CLucene \"${HEADERS_DIR}/\"\nrsync -a --include '*/' --include '**/Snowball*.h' --exclude '*' --prune-empty-dirs ${PROJECT_DIR}/clucene/src/contribs-lib/CLucene \"${HEADERS_DIR}/\"\nrsync -a ${PROJECT_DIR}/clucene/src/contribs-lib/CLucene/snowball/libstemmer.h \"${HEADERS_DIR}/\"\nrsync -a --include 'CLucene' --include '**/*.h' --exclude '*' ${PROJECT_DIR}/${PRODUCT}/ \"${HEADERS_DIR}/\"\nrsync -a --include '*.lproj/' --include '*.lproj/*' --exclude '*' ${PROJECT_DIR}/${PRODUCT}/ \"${RESOURCE_DIR}/\"\n\necho \"Output to: ${OUTPUT_DIR}\"\n\n# change to \"Release Debug\" to build both\nCONFIGURATIONS=\"Debug\"\nfor CONFIG in ${CONFIGURATIONS}; do\n FRAMEWORK_DIR=\"${OUTPUT_DIR}/${CONFIG}/${PRODUCT}.framework\"\n\n cd ${PROJECT_DIR}\n \n cp -r \"${HEADERS_DIR}\" \"${FRAMEWORK_DIR}/Versions/Current/\"\n cp -r \"${RESOURCE_DIR}\" \"${FRAMEWORK_DIR}/Versions/Current/\"\n\ndone\n"; }; + EB68ED7E5609A553FDEAF143 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "[CP] Check Pods Manifest.lock"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n"; + showEnvVarsInLog = 0; + }; + FC367F5EDEBE8EC8EAB3FCD4 /* [CP] Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "[CP] Copy Pods Resources"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-BasePods-BRFullTextSearchMacOS/Pods-BasePods-BRFullTextSearchMacOS-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -2075,186 +886,10 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - C909C4901784CF0A0016C25E /* gunichartables.cpp in Sources */, - C909C4921784CF0A0016C25E /* repl_lltot.cpp in Sources */, - C909C4941784CF0A0016C25E /* repl_tcscasecmp.cpp in Sources */, C9E6137617C5A82E00EB6E38 /* NSExpression+CLuceneAdditions.mm in Sources */, - C909C4961784CF0A0016C25E /* repl_tcslwr.cpp in Sources */, - C909C4981784CF0A0016C25E /* repl_tcstod.cpp in Sources */, - C909C49A1784CF0A0016C25E /* repl_tcstoll.cpp in Sources */, - C909C49C1784CF0A0016C25E /* repl_tprintf.cpp in Sources */, - C909C49E1784CF0A0016C25E /* threads.cpp in Sources */, - C909C4A01784CF0A0016C25E /* utf8.cpp in Sources */, - C909C4A21784CF0A0016C25E /* condition.cpp in Sources */, - C909C4A41784CF0A0016C25E /* SharedHeader.cpp in Sources */, - C909C4A81784CF0A0016C25E /* dirent.cpp in Sources */, - C909C4AA1784CF0A0016C25E /* Misc.cpp in Sources */, - C909C4AC1784CF0A0016C25E /* StringBuffer.cpp in Sources */, - C909C4C91784CF0A0016C25E /* AnalysisHeader.cpp in Sources */, - C909C4CB1784CF0A0016C25E /* Analyzers.cpp in Sources */, - C909C4CD1784CF0A0016C25E /* CachingTokenFilter.cpp in Sources */, - C909C4CF1784CF0A0016C25E /* StandardAnalyzer.cpp in Sources */, - C909C4D11784CF0A0016C25E /* StandardFilter.cpp in Sources */, - C909C4D31784CF0A0016C25E /* StandardTokenizer.cpp in Sources */, - C909C4D71784CF0A0016C25E /* error.cpp in Sources */, - C909C4D91784CF0A0016C25E /* DateField.cpp in Sources */, - C909C4DB1784CF0A0016C25E /* DateTools.cpp in Sources */, - C909C4DD1784CF0A0016C25E /* Document.cpp in Sources */, - C909C4DF1784CF0A0016C25E /* Field.cpp in Sources */, - C909C4E11784CF0A0016C25E /* FieldSelector.cpp in Sources */, - C909C4E31784CF0A0016C25E /* NumberTools.cpp in Sources */, - C909C4E51784CF0A0016C25E /* CompoundFile.cpp in Sources */, - C909C4E71784CF0A0016C25E /* DirectoryIndexReader.cpp in Sources */, - C909C4E91784CF0A0016C25E /* DocumentsWriter.cpp in Sources */, C9D6EC231AD619B9006D23F4 /* SnowballPrefixFilter.cpp in Sources */, - C909C4EB1784CF0A0016C25E /* DocumentsWriterThreadState.cpp in Sources */, - C909C4ED1784CF0A0016C25E /* FieldInfos.cpp in Sources */, - C909C4EF1784CF0A0016C25E /* FieldsReader.cpp in Sources */, - C909C4F11784CF0A0016C25E /* FieldsWriter.cpp in Sources */, - C909C4F31784CF0A0016C25E /* IndexDeletionPolicy.cpp in Sources */, - C909C4F51784CF0A0016C25E /* IndexFileDeleter.cpp in Sources */, - C909C4F71784CF0A0016C25E /* IndexFileNameFilter.cpp in Sources */, - C909C4F91784CF0A0016C25E /* IndexFileNames.cpp in Sources */, - C909C4FB1784CF0A0016C25E /* IndexModifier.cpp in Sources */, - C909C4FD1784CF0A0016C25E /* IndexReader.cpp in Sources */, - C909C4FF1784CF0A0016C25E /* IndexWriter.cpp in Sources */, - C909C5011784CF0A0016C25E /* MergePolicy.cpp in Sources */, - C909C5031784CF0A0016C25E /* MergeScheduler.cpp in Sources */, - C909C5051784CF0A0016C25E /* MultipleTermPositions.cpp in Sources */, - C909C5071784CF0A0016C25E /* MultiReader.cpp in Sources */, - C909C5091784CF0A0016C25E /* MultiSegmentReader.cpp in Sources */, - C909C50B1784CF0A0016C25E /* Payload.cpp in Sources */, - C909C50D1784CF0A0016C25E /* SegmentInfos.cpp in Sources */, - C909C50F1784CF0A0016C25E /* SegmentMergeInfo.cpp in Sources */, - C909C5111784CF0A0016C25E /* SegmentMergeQueue.cpp in Sources */, - C909C5131784CF0A0016C25E /* SegmentMerger.cpp in Sources */, - C909C5151784CF0A0016C25E /* SegmentReader.cpp in Sources */, - C909C5171784CF0A0016C25E /* SegmentTermDocs.cpp in Sources */, - C909C5191784CF0A0016C25E /* SegmentTermEnum.cpp in Sources */, - C909C51B1784CF0A0016C25E /* SegmentTermPositions.cpp in Sources */, - C909C51D1784CF0A0016C25E /* SegmentTermVector.cpp in Sources */, - C909C51F1784CF0A0016C25E /* SkipListReader.cpp in Sources */, - C909C5211784CF0A0016C25E /* SkipListWriter.cpp in Sources */, - C909C5231784CF0A0016C25E /* Term.cpp in Sources */, - C909C5251784CF0A0016C25E /* TermInfo.cpp in Sources */, - C909C5271784CF0A0016C25E /* TermInfosReader.cpp in Sources */, - C909C5291784CF0A0016C25E /* TermInfosWriter.cpp in Sources */, - C909C52B1784CF0A0016C25E /* Terms.cpp in Sources */, - C909C52D1784CF0A0016C25E /* TermVectorReader.cpp in Sources */, - C909C52F1784CF0A0016C25E /* TermVectorWriter.cpp in Sources */, - C909C5311784CF0A0016C25E /* FastCharStream.cpp in Sources */, - C909C5331784CF0A0016C25E /* Lexer.cpp in Sources */, - C909C5351784CF0A0016C25E /* MultiFieldQueryParser.cpp in Sources */, - C909C5371784CF0A0016C25E /* QueryParser.cpp in Sources */, - C909C5391784CF0A0016C25E /* QueryParserBase.cpp in Sources */, - C909C53B1784CF0A0016C25E /* QueryToken.cpp in Sources */, - C909C53D1784CF0A0016C25E /* TokenList.cpp in Sources */, - C909C53F1784CF0A0016C25E /* MultiFieldQueryParser.cpp in Sources */, - C909C5411784CF0A0016C25E /* QueryParser.cpp in Sources */, - C909C5431784CF0A0016C25E /* QueryParserTokenManager.cpp in Sources */, - C909C5451784CF0A0016C25E /* QueryToken.cpp in Sources */, - C909C5471784CF0A0016C25E /* BooleanQuery.cpp in Sources */, - C909C5491784CF0A0016C25E /* BooleanScorer.cpp in Sources */, - C909C54B1784CF0A0016C25E /* BooleanScorer2.cpp in Sources */, - C909C54D1784CF0A0016C25E /* CachingSpanFilter.cpp in Sources */, - C909C54F1784CF0A0016C25E /* CachingWrapperFilter.cpp in Sources */, - C909C5511784CF0A0016C25E /* ChainedFilter.cpp in Sources */, - C909C5531784CF0A0016C25E /* Compare.cpp in Sources */, - C909C5551784CF0A0016C25E /* ConjunctionScorer.cpp in Sources */, - C909C5571784CF0A0016C25E /* ConstantScoreQuery.cpp in Sources */, - C909C5591784CF0A0016C25E /* DateFilter.cpp in Sources */, - C909C55B1784CF0A0016C25E /* DisjunctionSumScorer.cpp in Sources */, - C909C55D1784CF0A0016C25E /* ExactPhraseScorer.cpp in Sources */, - C909C55F1784CF0A0016C25E /* Explanation.cpp in Sources */, - C909C5611784CF0A0016C25E /* FieldCache.cpp in Sources */, - C909C5631784CF0A0016C25E /* FieldCacheImpl.cpp in Sources */, - C909C5651784CF0A0016C25E /* FieldDocSortedHitQueue.cpp in Sources */, - C909C5671784CF0A0016C25E /* FieldSortedHitQueue.cpp in Sources */, C90B75131C7E99CA00014124 /* BRSimpleSortDescriptor.m in Sources */, - C909C5691784CF0A0016C25E /* FilteredTermEnum.cpp in Sources */, - C909C56D1784CF0A0016C25E /* FuzzyQuery.cpp in Sources */, - C909C56F1784CF0A0016C25E /* HitQueue.cpp in Sources */, - C909C5711784CF0A0016C25E /* Hits.cpp in Sources */, - C909C5731784CF0A0016C25E /* IndexSearcher.cpp in Sources */, - C909C5751784CF0A0016C25E /* MatchAllDocsQuery.cpp in Sources */, - C909C5771784CF0A0016C25E /* MultiPhraseQuery.cpp in Sources */, - C909C5791784CF0A0016C25E /* MultiSearcher.cpp in Sources */, - C909C57B1784CF0A0016C25E /* MultiTermQuery.cpp in Sources */, - C909C57D1784CF0A0016C25E /* PhrasePositions.cpp in Sources */, - C909C57F1784CF0A0016C25E /* PhraseQuery.cpp in Sources */, - C909C5811784CF0A0016C25E /* PhraseScorer.cpp in Sources */, - C909C5831784CF0A0016C25E /* PrefixQuery.cpp in Sources */, C9575E811A97EDAF00394CDA /* NSData+CLuceneAdditions.mm in Sources */, - C909C5851784CF0A0016C25E /* QueryFilter.cpp in Sources */, - C909C5871784CF0A0016C25E /* RangeFilter.cpp in Sources */, - C909C5891784CF0A0016C25E /* RangeQuery.cpp in Sources */, - C909C58B1784CF0A0016C25E /* Scorer.cpp in Sources */, - C909C58D1784CF0A0016C25E /* ScorerDocQueue.cpp in Sources */, - C909C58F1784CF0A0016C25E /* SearchHeader.cpp in Sources */, - C909C5911784CF0A0016C25E /* Similarity.cpp in Sources */, - C909C5931784CF0A0016C25E /* SloppyPhraseScorer.cpp in Sources */, - C909C5951784CF0A0016C25E /* Sort.cpp in Sources */, - C909C5971784CF0A0016C25E /* SpanQueryFilter.cpp in Sources */, - C909C5991784CF0A0016C25E /* NearSpansOrdered.cpp in Sources */, - C909C59B1784CF0A0016C25E /* NearSpansUnordered.cpp in Sources */, - C909C59D1784CF0A0016C25E /* SpanFirstQuery.cpp in Sources */, - C909C59F1784CF0A0016C25E /* SpanNearQuery.cpp in Sources */, - C909C5A11784CF0A0016C25E /* SpanNotQuery.cpp in Sources */, - C909C5A31784CF0A0016C25E /* SpanOrQuery.cpp in Sources */, - C909C5A51784CF0A0016C25E /* SpanScorer.cpp in Sources */, - C909C5A71784CF0A0016C25E /* SpanTermQuery.cpp in Sources */, - C909C5A91784CF0A0016C25E /* SpanWeight.cpp in Sources */, - C909C5AB1784CF0A0016C25E /* TermSpans.cpp in Sources */, - C909C5AD1784CF0A0016C25E /* TermQuery.cpp in Sources */, - C909C5AF1784CF0A0016C25E /* TermScorer.cpp in Sources */, - C909C5B11784CF0A0016C25E /* WildcardQuery.cpp in Sources */, - C909C5B31784CF0A0016C25E /* WildcardTermEnum.cpp in Sources */, - C909C5B51784CF0A0016C25E /* StdHeader.cpp in Sources */, - C909C5B71784CF0A0016C25E /* Directory.cpp in Sources */, - C909C5B91784CF0A0016C25E /* FSDirectory.cpp in Sources */, - C909C5BB1784CF0A0016C25E /* IndexInput.cpp in Sources */, - C909C5BD1784CF0A0016C25E /* IndexOutput.cpp in Sources */, - C909C5BF1784CF0A0016C25E /* Lock.cpp in Sources */, - C909C5C11784CF0A0016C25E /* LockFactory.cpp in Sources */, - C909C5C31784CF0A0016C25E /* MMapInput.cpp in Sources */, - C909C5C51784CF0A0016C25E /* RAMDirectory.cpp in Sources */, - C909C5C71784CF0A0016C25E /* BitSet.cpp in Sources */, - C909C5C91784CF0A0016C25E /* Equators.cpp in Sources */, - C909C5CB1784CF0A0016C25E /* FastCharStream.cpp in Sources */, - C909C5CD1784CF0A0016C25E /* MD5Digester.cpp in Sources */, - C909C5CF1784CF0A0016C25E /* Reader.cpp in Sources */, - C909C5D11784CF0A0016C25E /* StringIntern.cpp in Sources */, - C909C5D31784CF0A0016C25E /* ThreadLocal.cpp in Sources */, - C909C5FE1784CF0A0016C25E /* libstemmer.c in Sources */, - C909C6001784CF0A0016C25E /* api.c in Sources */, - C909C6021784CF0A0016C25E /* utilities.c in Sources */, - C909C6041784CF0A0016C25E /* Snowball.cpp in Sources */, - C909C6081784CF0A0016C25E /* stem_ISO_8859_1_danish.c in Sources */, - C909C60A1784CF0A0016C25E /* stem_ISO_8859_1_dutch.c in Sources */, - C909C60C1784CF0A0016C25E /* stem_ISO_8859_1_english.c in Sources */, - C909C60E1784CF0A0016C25E /* stem_ISO_8859_1_finnish.c in Sources */, - C909C6101784CF0A0016C25E /* stem_ISO_8859_1_french.c in Sources */, - C909C6121784CF0A0016C25E /* stem_ISO_8859_1_german.c in Sources */, - C909C6141784CF0A0016C25E /* stem_ISO_8859_1_italian.c in Sources */, - C909C6161784CF0A0016C25E /* stem_ISO_8859_1_norwegian.c in Sources */, - C909C6181784CF0A0016C25E /* stem_ISO_8859_1_porter.c in Sources */, - C909C61A1784CF0A0016C25E /* stem_ISO_8859_1_portuguese.c in Sources */, - C909C61C1784CF0A0016C25E /* stem_ISO_8859_1_spanish.c in Sources */, - C909C61E1784CF0A0016C25E /* stem_ISO_8859_1_swedish.c in Sources */, - C909C6201784CF0A0016C25E /* stem_KOI8_R_russian.c in Sources */, - C909C6221784CF0A0016C25E /* stem_UTF_8_danish.c in Sources */, - C909C6241784CF0A0016C25E /* stem_UTF_8_dutch.c in Sources */, - C909C6261784CF0A0016C25E /* stem_UTF_8_english.c in Sources */, - C909C6281784CF0A0016C25E /* stem_UTF_8_finnish.c in Sources */, - C909C62A1784CF0A0016C25E /* stem_UTF_8_french.c in Sources */, - C909C62C1784CF0A0016C25E /* stem_UTF_8_german.c in Sources */, - C909C62E1784CF0A0016C25E /* stem_UTF_8_italian.c in Sources */, - C909C6301784CF0A0016C25E /* stem_UTF_8_norwegian.c in Sources */, - C909C6321784CF0A0016C25E /* stem_UTF_8_porter.c in Sources */, - C909C6341784CF0A0016C25E /* stem_UTF_8_portuguese.c in Sources */, - C909C6361784CF0A0016C25E /* stem_UTF_8_russian.c in Sources */, - C909C6381784CF0A0016C25E /* stem_UTF_8_spanish.c in Sources */, - C909C63A1784CF0A0016C25E /* stem_UTF_8_swedish.c in Sources */, C909C64A1784D00C0016C25E /* BRSnowballAnalyzer.cpp in Sources */, C909C64C1784D00C0016C25E /* BRNoLockFactory.cpp in Sources */, C909C65D1784D4B70016C25E /* NSString+CLuceneAdditions.mm in Sources */, @@ -2287,199 +922,23 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - E3DF7EFB1C69A78B005B861B /* stem_ISO_8859_1_danish.c in Sources */, - E3DF7EA71C69A38F005B861B /* ChainedFilter.cpp in Sources */, - E3DF7EA31C69A38F005B861B /* BooleanScorer.cpp in Sources */, - E3DF7EAE1C69A38F005B861B /* Explanation.cpp in Sources */, - E3DF7EEF1C69A3A1005B861B /* threads.cpp in Sources */, - E3DF7EC71C69A38F005B861B /* SloppyPhraseScorer.cpp in Sources */, - E3DF7EC91C69A38F005B861B /* SpanQueryFilter.cpp in Sources */, E3DF7E571C69A265005B861B /* BRSimpleIndexable.m in Sources */, - E3DF7E771C69A37C005B861B /* FieldsWriter.cpp in Sources */, - E3DF7F101C69A78B005B861B /* stem_UTF_8_porter.c in Sources */, - E3DF7E9B1C69A387005B861B /* QueryParserBase.cpp in Sources */, E3DF7E5A1C69A2C9005B861B /* NSExpression+CLuceneAdditions.mm in Sources */, - E3DF7E971C69A383005B861B /* FastCharStream.cpp in Sources */, - E3DF7E991C69A387005B861B /* MultiFieldQueryParser.cpp in Sources */, - E3DF7EC31C69A38F005B861B /* Scorer.cpp in Sources */, - E3DF7EA91C69A38F005B861B /* ConjunctionScorer.cpp in Sources */, E3DF7E621C69A2DD005B861B /* BRSearchService.m in Sources */, - E3DF7EBC1C69A38F005B861B /* PhrasePositions.cpp in Sources */, - E3DF7F051C69A78B005B861B /* stem_ISO_8859_1_spanish.c in Sources */, - E3DF7E9F1C69A387005B861B /* QueryParser.cpp in Sources */, - E3DF7E6A1C69A32D005B861B /* error.cpp in Sources */, - E3DF7ECF1C69A394005B861B /* SpanOrQuery.cpp in Sources */, - E3DF7EF01C69A3A1005B861B /* utf8.cpp in Sources */, E3DF7E551C69A256005B861B /* NSDateComponents+BRFullTextSearchAdditions.m in Sources */, - E3DF7E701C69A342005B861B /* NumberTools.cpp in Sources */, - E3DF7F111C69A78B005B861B /* stem_UTF_8_portuguese.c in Sources */, - E3DF7EC81C69A38F005B861B /* Sort.cpp in Sources */, - E3DF7EF11C69A3A4005B861B /* condition.cpp in Sources */, - E3DF7EB91C69A38F005B861B /* MultiPhraseQuery.cpp in Sources */, - E3DF7EBD1C69A38F005B861B /* PhraseQuery.cpp in Sources */, - E3DF7F0A1C69A78B005B861B /* stem_UTF_8_english.c in Sources */, - E3DF7E7B1C69A37C005B861B /* IndexFileNames.cpp in Sources */, - E3DF7EA01C69A387005B861B /* QueryParserTokenManager.cpp in Sources */, - E3DF7F0C1C69A78B005B861B /* stem_UTF_8_french.c in Sources */, - E3DF7EB21C69A38F005B861B /* FieldSortedHitQueue.cpp in Sources */, - E3DF7EEA1C69A3A1005B861B /* repl_tcscasecmp.cpp in Sources */, - E3DF7EAD1C69A38F005B861B /* ExactPhraseScorer.cpp in Sources */, - E3DF7ED31C69A394005B861B /* TermSpans.cpp in Sources */, - E3DF7EE11C69A39D005B861B /* BitSet.cpp in Sources */, - E3DF7EB81C69A38F005B861B /* MatchAllDocsQuery.cpp in Sources */, E345D8FD1C9DEB77005733F5 /* BRSimpleSortDescriptor.m in Sources */, - E3DF7E741C69A37C005B861B /* DocumentsWriterThreadState.cpp in Sources */, - E3DF7E691C69A328005B861B /* StandardTokenizer.cpp in Sources */, - E3DF7ECE1C69A394005B861B /* SpanNotQuery.cpp in Sources */, - E3DF7F0F1C69A78B005B861B /* stem_UTF_8_norwegian.c in Sources */, E3DF7E5F1C69A2D3005B861B /* CLuceneIndexUpdateContext.mm in Sources */, - E3DF7ED91C69A39A005B861B /* Directory.cpp in Sources */, E3DF7E611C69A2D8005B861B /* BRNoLockFactory.cpp in Sources */, - E3DF7EC51C69A38F005B861B /* SearchHeader.cpp in Sources */, - E3DF7E821C69A37C005B861B /* MultiReader.cpp in Sources */, - E3DF7EF21C69A3A7005B861B /* SharedHeader.cpp in Sources */, - E3DF7E911C69A37C005B861B /* TermInfo.cpp in Sources */, - E3DF7EEC1C69A3A1005B861B /* repl_tcstod.cpp in Sources */, - E3DF7ECD1C69A394005B861B /* SpanNearQuery.cpp in Sources */, - E3DF7E751C69A37C005B861B /* FieldInfos.cpp in Sources */, - E3DF7EE61C69A39D005B861B /* StringIntern.cpp in Sources */, - E3DF7ED51C69A394005B861B /* TermScorer.cpp in Sources */, - E3DF7EC01C69A38F005B861B /* QueryFilter.cpp in Sources */, - E3DF7EF51C69A3A9005B861B /* StringBuffer.cpp in Sources */, - E3DF7E6B1C69A333005B861B /* DateField.cpp in Sources */, - E3DF7E711C69A37C005B861B /* CompoundFile.cpp in Sources */, - E3DF7EA51C69A38F005B861B /* CachingSpanFilter.cpp in Sources */, - E3DF7EAC1C69A38F005B861B /* DisjunctionSumScorer.cpp in Sources */, - E3DF7E951C69A37C005B861B /* TermVectorReader.cpp in Sources */, - E3DF7EA41C69A38F005B861B /* BooleanScorer2.cpp in Sources */, - E3DF7EFE1C69A78B005B861B /* stem_ISO_8859_1_finnish.c in Sources */, - E3DF7E9D1C69A387005B861B /* TokenList.cpp in Sources */, - E3DF7EFD1C69A78B005B861B /* stem_ISO_8859_1_english.c in Sources */, E3DF7E601C69A2D5005B861B /* BRSnowballAnalyzer.cpp in Sources */, - E3DF7E881C69A37C005B861B /* SegmentMerger.cpp in Sources */, - E3DF7E961C69A37C005B861B /* TermVectorWriter.cpp in Sources */, - E3DF7EF81C69A787005B861B /* libstemmer.c in Sources */, - E3DF7EFC1C69A78B005B861B /* stem_ISO_8859_1_dutch.c in Sources */, - E3DF7E891C69A37C005B861B /* SegmentReader.cpp in Sources */, - E3DF7E6E1C69A33D005B861B /* Field.cpp in Sources */, - E3DF7ECA1C69A393005B861B /* NearSpansOrdered.cpp in Sources */, - E3DF7ECC1C69A394005B861B /* SpanFirstQuery.cpp in Sources */, - E3DF7F0B1C69A78B005B861B /* stem_UTF_8_finnish.c in Sources */, - E3DF7E861C69A37C005B861B /* SegmentMergeInfo.cpp in Sources */, - E3DF7EAB1C69A38F005B861B /* DateFilter.cpp in Sources */, - E3DF7E7D1C69A37C005B861B /* IndexReader.cpp in Sources */, - E3DF7EEE1C69A3A1005B861B /* repl_tprintf.cpp in Sources */, - E3DF7E641C69A310005B861B /* AnalysisHeader.cpp in Sources */, - E3DF7ED61C69A394005B861B /* WildcardQuery.cpp in Sources */, - E3DF7E931C69A37C005B861B /* TermInfosWriter.cpp in Sources */, - E3DF7E671C69A321005B861B /* StandardAnalyzer.cpp in Sources */, - E3DF7EE21C69A39D005B861B /* Equators.cpp in Sources */, - E3DF7EDC1C69A39A005B861B /* IndexOutput.cpp in Sources */, - E3DF7E801C69A37C005B861B /* MergeScheduler.cpp in Sources */, E3DF7E5C1C69A2CD005B861B /* CLuceneSearchService.mm in Sources */, - E3DF7F141C69A78B005B861B /* stem_UTF_8_swedish.c in Sources */, - E3DF7E921C69A37C005B861B /* TermInfosReader.cpp in Sources */, - E3DF7ECB1C69A394005B861B /* NearSpansUnordered.cpp in Sources */, - E3DF7EFF1C69A78B005B861B /* stem_ISO_8859_1_french.c in Sources */, - E3DF7E681C69A325005B861B /* StandardFilter.cpp in Sources */, - E3DF7E9A1C69A387005B861B /* QueryParser.cpp in Sources */, - E3DF7E841C69A37C005B861B /* Payload.cpp in Sources */, - E3DF7E8B1C69A37C005B861B /* SegmentTermEnum.cpp in Sources */, - E3DF7E6C1C69A338005B861B /* DateTools.cpp in Sources */, - E3DF7EAF1C69A38F005B861B /* FieldCache.cpp in Sources */, - E3DF7F081C69A78B005B861B /* stem_UTF_8_danish.c in Sources */, - E3DF7EE01C69A39A005B861B /* RAMDirectory.cpp in Sources */, - E3DF7EB01C69A38F005B861B /* FieldCacheImpl.cpp in Sources */, - E3DF7E811C69A37C005B861B /* MultipleTermPositions.cpp in Sources */, - E3DF7E9C1C69A387005B861B /* QueryToken.cpp in Sources */, - E3DF7E8F1C69A37C005B861B /* SkipListWriter.cpp in Sources */, E3DF7E581C69A2C4005B861B /* SnowballPrefixFilter.cpp in Sources */, - E3DF7F021C69A78B005B861B /* stem_ISO_8859_1_norwegian.c in Sources */, - E3DF7EBB1C69A38F005B861B /* MultiTermQuery.cpp in Sources */, - E3DF7F031C69A78B005B861B /* stem_ISO_8859_1_porter.c in Sources */, - E3DF7EE91C69A3A1005B861B /* repl_lltot.cpp in Sources */, - E3DF7EDB1C69A39A005B861B /* IndexInput.cpp in Sources */, - E3DF7EB41C69A38F005B861B /* FuzzyQuery.cpp in Sources */, - E3DF7E731C69A37C005B861B /* DocumentsWriter.cpp in Sources */, - E3DF7EEB1C69A3A1005B861B /* repl_tcslwr.cpp in Sources */, - E3DF7EE51C69A39D005B861B /* Reader.cpp in Sources */, - E3DF7EF31C69A3A9005B861B /* dirent.cpp in Sources */, - E3DF7EFA1C69A787005B861B /* utilities.c in Sources */, - E3DF7E851C69A37C005B861B /* SegmentInfos.cpp in Sources */, E3DF7E591C69A2C7005B861B /* NSString+CLuceneAdditions.mm in Sources */, - E3DF7E781C69A37C005B861B /* IndexDeletionPolicy.cpp in Sources */, - E3DF7EC11C69A38F005B861B /* RangeFilter.cpp in Sources */, - E3DF7EB71C69A38F005B861B /* IndexSearcher.cpp in Sources */, - E3DF7E8E1C69A37C005B861B /* SkipListReader.cpp in Sources */, - E3DF7ED21C69A394005B861B /* SpanWeight.cpp in Sources */, - E3DF7EE71C69A39D005B861B /* ThreadLocal.cpp in Sources */, - E3DF7EC61C69A38F005B861B /* Similarity.cpp in Sources */, - E3DF7E8D1C69A37C005B861B /* SegmentTermVector.cpp in Sources */, - E3DF7E901C69A37C005B861B /* Term.cpp in Sources */, - E3DF7EF61C69A3AB005B861B /* Snowball.cpp in Sources */, - E3DF7EB31C69A38F005B861B /* FilteredTermEnum.cpp in Sources */, - E3DF7E651C69A317005B861B /* Analyzers.cpp in Sources */, - E3DF7EBA1C69A38F005B861B /* MultiSearcher.cpp in Sources */, - E3DF7E6D1C69A33A005B861B /* Document.cpp in Sources */, - E3DF7EBF1C69A38F005B861B /* PrefixQuery.cpp in Sources */, - E3DF7F061C69A78B005B861B /* stem_ISO_8859_1_swedish.c in Sources */, - E3DF7E661C69A31D005B861B /* CachingTokenFilter.cpp in Sources */, - E3DF7F131C69A78B005B861B /* stem_UTF_8_spanish.c in Sources */, E3DF7E5D1C69A2CF005B861B /* CLuceneSearchResults.mm in Sources */, - E3DF7F041C69A78B005B861B /* stem_ISO_8859_1_portuguese.c in Sources */, - E3DF7EC21C69A38F005B861B /* RangeQuery.cpp in Sources */, - E3DF7E721C69A37C005B861B /* DirectoryIndexReader.cpp in Sources */, - E3DF7EE41C69A39D005B861B /* MD5Digester.cpp in Sources */, - E3DF7EE81C69A3A1005B861B /* gunichartables.cpp in Sources */, - E3DF7EB61C69A38F005B861B /* Hits.cpp in Sources */, - E3DF7F0D1C69A78B005B861B /* stem_UTF_8_german.c in Sources */, - E3DF7E8A1C69A37C005B861B /* SegmentTermDocs.cpp in Sources */, - E3DF7F071C69A78B005B861B /* stem_KOI8_R_russian.c in Sources */, - E3DF7EB51C69A38F005B861B /* HitQueue.cpp in Sources */, - E3DF7EDF1C69A39A005B861B /* MMapInput.cpp in Sources */, - E3DF7F121C69A78B005B861B /* stem_UTF_8_russian.c in Sources */, - E3DF7EF41C69A3A9005B861B /* Misc.cpp in Sources */, E3DF7E5E1C69A2D1005B861B /* CLuceneSearchResult.mm in Sources */, - E3DF7EAA1C69A38F005B861B /* ConstantScoreQuery.cpp in Sources */, - E3DF7E6F1C69A340005B861B /* FieldSelector.cpp in Sources */, E3DF7E631C69A2E1005B861B /* BRSearchFields.m in Sources */, - E3DF7EF91C69A787005B861B /* api.c in Sources */, - E3DF7EC41C69A38F005B861B /* ScorerDocQueue.cpp in Sources */, E3DF7E541C69A253005B861B /* NSDate+BRFullTextSearchAdditions.m in Sources */, - E3DF7EDA1C69A39A005B861B /* FSDirectory.cpp in Sources */, - E3DF7ED01C69A394005B861B /* SpanScorer.cpp in Sources */, - E3DF7E871C69A37C005B861B /* SegmentMergeQueue.cpp in Sources */, - E3DF7EDD1C69A39A005B861B /* Lock.cpp in Sources */, - E3DF7ED81C69A394005B861B /* StdHeader.cpp in Sources */, - E3DF7F001C69A78B005B861B /* stem_ISO_8859_1_german.c in Sources */, - E3DF7E7F1C69A37C005B861B /* MergePolicy.cpp in Sources */, - E3DF7E831C69A37C005B861B /* MultiSegmentReader.cpp in Sources */, - E3DF7ED41C69A394005B861B /* TermQuery.cpp in Sources */, - E3DF7EB11C69A38F005B861B /* FieldDocSortedHitQueue.cpp in Sources */, - E3DF7EDE1C69A39A005B861B /* LockFactory.cpp in Sources */, - E3DF7EA11C69A387005B861B /* QueryToken.cpp in Sources */, - E3DF7EBE1C69A38F005B861B /* PhraseScorer.cpp in Sources */, - E3DF7EED1C69A3A1005B861B /* repl_tcstoll.cpp in Sources */, - E3DF7E941C69A37C005B861B /* Terms.cpp in Sources */, - E3DF7E981C69A387005B861B /* Lexer.cpp in Sources */, E3DF7E5B1C69A2CB005B861B /* NSData+CLuceneAdditions.mm in Sources */, E3DF7E561C69A259005B861B /* NSTimeZone+BRFullTextSearchAdditions.m in Sources */, - E3DF7EA21C69A38F005B861B /* BooleanQuery.cpp in Sources */, - E3DF7ED11C69A394005B861B /* SpanTermQuery.cpp in Sources */, - E3DF7F0E1C69A78B005B861B /* stem_UTF_8_italian.c in Sources */, - E3DF7E7C1C69A37C005B861B /* IndexModifier.cpp in Sources */, - E3DF7E9E1C69A387005B861B /* MultiFieldQueryParser.cpp in Sources */, - E3DF7ED71C69A394005B861B /* WildcardTermEnum.cpp in Sources */, - E3DF7F011C69A78B005B861B /* stem_ISO_8859_1_italian.c in Sources */, - E3DF7E8C1C69A37C005B861B /* SegmentTermPositions.cpp in Sources */, - E3DF7E7A1C69A37C005B861B /* IndexFileNameFilter.cpp in Sources */, - E3DF7E791C69A37C005B861B /* IndexFileDeleter.cpp in Sources */, - E3DF7EE31C69A39D005B861B /* FastCharStream.cpp in Sources */, - E3DF7E7E1C69A37C005B861B /* IndexWriter.cpp in Sources */, - E3DF7F091C69A78B005B861B /* stem_UTF_8_dutch.c in Sources */, - E3DF7E761C69A37C005B861B /* FieldsReader.cpp in Sources */, - E3DF7EA61C69A38F005B861B /* CachingWrapperFilter.cpp in Sources */, - E3DF7EA81C69A38F005B861B /* Compare.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2613,8 +1072,8 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++98"; - CLANG_CXX_LIBRARY = "compiler-default"; + CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; + CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_EMPTY_BODY = YES; @@ -2623,11 +1082,6 @@ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; ENABLE_TESTABILITY = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(inherited)", - "$(DEVELOPER_FRAMEWORKS_DIR)", - ); GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; GCC_OPTIMIZATION_LEVEL = 0; @@ -2642,15 +1096,8 @@ GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 5.1; ONLY_ACTIVE_ARCH = YES; - OTHER_CFLAGS = ( - "-fvisibility=default", - "-fPIC", - "-D_UCS2", - "-D_UNICODE", - "-D_REENTRANT", - ); + OTHER_CFLAGS = ""; SDKROOT = iphoneos; - USER_HEADER_SEARCH_PATHS = "\"$(PROJECT_DIR)/BRFullTextSearch\" \"$(PROJECT_DIR)/clucene/src/shared\" \"$(PROJECT_DIR)/clucene/src/core\""; }; name = Debug; }; @@ -2658,8 +1105,8 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++98"; - CLANG_CXX_LIBRARY = "compiler-default"; + CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; + CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_EMPTY_BODY = YES; @@ -2667,62 +1114,39 @@ CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(inherited)", - "$(DEVELOPER_FRAMEWORKS_DIR)", - ); GCC_C_LANGUAGE_STANDARD = gnu99; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES; GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 5.1; - OTHER_CFLAGS = ( - "-fvisibility=default", - "-fPIC", - "-D_UCS2", - "-D_UNICODE", - "-D_REENTRANT", - "-DNDEBUG", - ); + OTHER_CFLAGS = ""; SDKROOT = iphoneos; - USER_HEADER_SEARCH_PATHS = "\"$(PROJECT_DIR)/BRFullTextSearch\" \"$(PROJECT_DIR)/clucene/src/shared\" \"$(PROJECT_DIR)/clucene/src/core\""; VALIDATE_PRODUCT = YES; }; name = Release; }; C909C2871784CB600016C25E /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = E420548430583E76A949D1FF /* Pods-BasePods-BRFullTextSearch.debug.xcconfig */; buildSettings = { DSTROOT = /tmp/BRFullTextSearch.dst; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "BRFullTextSearch/BRFullTextSearch-Prefix.pch"; - OTHER_LDFLAGS = "-ObjC"; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; - WARNING_CFLAGS = ( - "-Wmost", - "-Wno-four-char-constants", - "-Wno-unknown-pragmas", - ); }; name = Debug; }; C909C2881784CB600016C25E /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 8DD1D88DC310484ED3F8C547 /* Pods-BasePods-BRFullTextSearch.release.xcconfig */; buildSettings = { DSTROOT = /tmp/BRFullTextSearch.dst; GCC_OPTIMIZATION_LEVEL = 1; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "BRFullTextSearch/BRFullTextSearch-Prefix.pch"; - OTHER_LDFLAGS = "-ObjC"; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; - WARNING_CFLAGS = ( - "-Wmost", - "-Wno-four-char-constants", - "-Wno-unknown-pragmas", - ); }; name = Release; }; @@ -2742,6 +1166,7 @@ }; C90B75211C7EA00D00014124 /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 9D9A68963B8579823FD1C229 /* Pods-BasePods-BRFullTextSearchTests.debug.xcconfig */; buildSettings = { CLANG_ENABLE_MODULES = YES; CLANG_WARN_BOOL_CONVERSION = YES; @@ -2764,7 +1189,6 @@ INFOPLIST_FILE = BRFullTextSearchTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MTL_ENABLE_DEBUG_INFO = YES; - OTHER_LDFLAGS = "-ObjC"; PRODUCT_BUNDLE_IDENTIFIER = us.bluerocket.BRFullTextSearchTests; PRODUCT_NAME = "$(TARGET_NAME)"; }; @@ -2772,6 +1196,7 @@ }; C90B75221C7EA00D00014124 /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 0B150ED0DC675AAD38D91041 /* Pods-BasePods-BRFullTextSearchTests.release.xcconfig */; buildSettings = { CLANG_ENABLE_MODULES = YES; CLANG_WARN_BOOL_CONVERSION = YES; @@ -2792,7 +1217,6 @@ INFOPLIST_FILE = BRFullTextSearchTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MTL_ENABLE_DEBUG_INFO = NO; - OTHER_LDFLAGS = "-ObjC"; PRODUCT_BUNDLE_IDENTIFIER = us.bluerocket.BRFullTextSearchTests; PRODUCT_NAME = "$(TARGET_NAME)"; }; @@ -2800,9 +1224,8 @@ }; E3DF7E4A1C69A075005B861B /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 685E3CDA24EE7C8ED3604A8D /* Pods-BasePods-BRFullTextSearchMacOS.debug.xcconfig */; buildSettings = { - CLANG_CXX_LANGUAGE_STANDARD = "gnu++98"; - CLANG_CXX_LIBRARY = "compiler-default"; CLANG_ENABLE_MODULES = NO; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; @@ -2810,8 +1233,6 @@ CLANG_WARN_UNREACHABLE_CODE = YES; CODE_SIGN_IDENTITY = ""; COMBINE_HIDPI_IMAGES = YES; - CONFIGURATION_BUILD_DIR = "Framework-MacOS/Debug"; - CONFIGURATION_TEMP_DIR = "build/BRFullTextSearch.build/Debug-macos"; CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = dwarf; DEFINES_MODULE = NO; @@ -2822,10 +1243,6 @@ FRAMEWORK_VERSION = A; GCC_NO_COMMON_BLOCKS = YES; GCC_PREFIX_HEADER = "BRFullTextSearch/BRFullTextSearch-Prefix.pch"; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNDECLARED_SELECTOR = YES; @@ -2834,9 +1251,8 @@ INFOPLIST_FILE = "BRFullTextSearch Mac OS/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.8; + MACOSX_DEPLOYMENT_TARGET = 10.7; MTL_ENABLE_DEBUG_INFO = YES; - OTHER_LDFLAGS = ""; PRODUCT_BUNDLE_IDENTIFIER = "us.bluerocket.brfulltextsearch-macos"; PRODUCT_NAME = BRFullTextSearch; SDKROOT = macosx; @@ -2853,9 +1269,8 @@ }; E3DF7E4B1C69A075005B861B /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = BFBBFA8CFA6938DDA64085B3 /* Pods-BasePods-BRFullTextSearchMacOS.release.xcconfig */; buildSettings = { - CLANG_CXX_LANGUAGE_STANDARD = "gnu++98"; - CLANG_CXX_LIBRARY = "compiler-default"; CLANG_ENABLE_MODULES = NO; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; @@ -2863,8 +1278,6 @@ CLANG_WARN_UNREACHABLE_CODE = YES; CODE_SIGN_IDENTITY = ""; COMBINE_HIDPI_IMAGES = YES; - CONFIGURATION_BUILD_DIR = "Framework-MacOS/Release"; - CONFIGURATION_TEMP_DIR = "build/BRFullTextSearch.build/Release-macos"; COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; @@ -2885,9 +1298,8 @@ INFOPLIST_FILE = "BRFullTextSearch Mac OS/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.8; + MACOSX_DEPLOYMENT_TARGET = 10.7; MTL_ENABLE_DEBUG_INFO = NO; - OTHER_LDFLAGS = ""; PRODUCT_BUNDLE_IDENTIFIER = "us.bluerocket.brfulltextsearch-macos"; PRODUCT_NAME = BRFullTextSearch; SDKROOT = macosx; @@ -2941,7 +1353,7 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - E3DF7E4C1C69A075005B861B /* Build configuration list for PBXNativeTarget "BRFullTextSearch Mac OS" */ = { + E3DF7E4C1C69A075005B861B /* Build configuration list for PBXNativeTarget "BRFullTextSearchMacOS" */ = { isa = XCConfigurationList; buildConfigurations = ( E3DF7E4A1C69A075005B861B /* Debug */, diff --git a/BRFullTextSearch.xcworkspace/contents.xcworkspacedata b/BRFullTextSearch.xcworkspace/contents.xcworkspacedata index b6bac7c..ce142f9 100644 --- a/BRFullTextSearch.xcworkspace/contents.xcworkspacedata +++ b/BRFullTextSearch.xcworkspace/contents.xcworkspacedata @@ -5,9 +5,6 @@ location = "group:BRFullTextSearch.xcodeproj"> - - + location = "group:Pods/Pods.xcodeproj"> diff --git a/BRFullTextSearch/BRNoLockFactory.cpp b/BRFullTextSearch/BRNoLockFactory.cpp index e262f52..670bc08 100644 --- a/BRFullTextSearch/BRNoLockFactory.cpp +++ b/BRFullTextSearch/BRNoLockFactory.cpp @@ -12,7 +12,7 @@ #include "CLucene/_ApiHeader.h" #include "BRNoLockFactory.h" -#include "_Lock.h" +#include "CLucene/store/_Lock.h" #include "CLucene/util/Misc.h" CL_NS_DEF(store) diff --git a/BRFullTextSearch/CLuceneSearchResults.h b/BRFullTextSearch/CLuceneSearchResults.h index f3d8626..361ae8e 100644 --- a/BRFullTextSearch/CLuceneSearchResults.h +++ b/BRFullTextSearch/CLuceneSearchResults.h @@ -7,7 +7,6 @@ // #import -#import #import "BRSearchResults.h" namespace lucene { @@ -27,6 +26,6 @@ namespace lucene { - (id)initWithHits:(std::auto_ptr)theHits sort:(std::auto_ptr)theSort query:(std::auto_ptr)theQuery - searcher:(std::tr1::shared_ptr)theSearcher; + searcher:(std::shared_ptr)theSearcher; @end diff --git a/BRFullTextSearch/CLuceneSearchResults.mm b/BRFullTextSearch/CLuceneSearchResults.mm index 90d01c0..a6893de 100644 --- a/BRFullTextSearch/CLuceneSearchResults.mm +++ b/BRFullTextSearch/CLuceneSearchResults.mm @@ -19,13 +19,13 @@ @implementation CLuceneSearchResults { std::auto_ptr hits; std::auto_ptr sort; std::auto_ptr query; - std::tr1::shared_ptr searcher; + std::shared_ptr searcher; } - (id)initWithHits:(std::auto_ptr)theHits sort:(std::auto_ptr)theSort query:(std::auto_ptr)theQuery - searcher:(std::tr1::shared_ptr)theSearcher { + searcher:(std::shared_ptr)theSearcher { if ( (self = [super init]) ) { hits = theHits; sort = theSort; diff --git a/BRFullTextSearch/CLuceneSearchService.mm b/BRFullTextSearch/CLuceneSearchService.mm index 930cfd0..a145790 100644 --- a/BRFullTextSearch/CLuceneSearchService.mm +++ b/BRFullTextSearch/CLuceneSearchService.mm @@ -10,7 +10,7 @@ #import "CLucene.h" #import "CLucene/_ApiHeader.h" -#import "ConstantScoreQuery.h" +#import "CLucene/search/ConstantScoreQuery.h" #import "BRNoLockFactory.h" #import "BRSimpleSortDescriptor.h" #import "BRSnowballAnalyzer.h" @@ -48,7 +48,7 @@ @implementation CLuceneSearchService { NSInteger indexUpdateOptimizeThreshold; Directory *dir; std::auto_ptr defaultAnalyzer; - std::tr1::shared_ptr searcher; + std::shared_ptr searcher; NSBundle *bundle; NSString *defaultAnalyzerLanguage; } @@ -140,8 +140,8 @@ + (BOOL)indexExistsAtPath:(NSString *)path { #pragma mark - Accessors -- (std::tr1::shared_ptr)searcher { - std::tr1::shared_ptr s = searcher; +- (std::shared_ptr)searcher { + std::shared_ptr s = searcher; if ( s.get() == NULL ) { @synchronized(self) { // create the index directory, if it doesn't already exist @@ -677,7 +677,7 @@ - (int)removeObjectsFromIndexMatchingPredicateAndWait:(NSPredicate *)predicate e Query *q = parser.parse([query asCLuceneString], [fieldName asCLuceneString], [self defaultAnalyzer]); rootQuery.get()->add(q, true, BooleanClause::SHOULD); } - std::tr1::shared_ptr s = [self searcher]; + std::shared_ptr s = [self searcher]; std::auto_ptr hits(s->search(rootQuery.get())); std::auto_ptr sort; std::auto_ptr resultQuery(rootQuery); @@ -691,7 +691,7 @@ - (int)removeObjectsFromIndexMatchingPredicateAndWait:(NSPredicate *)predicate e NSString *idValue = [self idValueForType:type identifier:identifier]; try { Term *idTerm = new Term([kBRSearchFieldNameIdentifier asCLuceneString], [idValue asCLuceneString]); - std::tr1::shared_ptr s = [self searcher]; + std::shared_ptr s = [self searcher]; std::auto_ptr idQuery(new TermQuery(idTerm)); std::auto_ptr hits(s->search(idQuery.get())); CLuceneSearchResult *result = nil; @@ -707,7 +707,7 @@ - (int)removeObjectsFromIndexMatchingPredicateAndWait:(NSPredicate *)predicate e } - (id)searchWithQuery:(std::auto_ptr)query sortDescriptors:(nullable NSArray> *)sortDescriptors { - std::tr1::shared_ptr s = [self searcher]; + std::shared_ptr s = [self searcher]; if ( sortDescriptors != nil ) { std::vector sortFields; for ( id desc in sortDescriptors ) { diff --git a/BRFullTextSearch/SnowballPrefixFilter.h b/BRFullTextSearch/SnowballPrefixFilter.h index 1e7b404..667e67c 100644 --- a/BRFullTextSearch/SnowballPrefixFilter.h +++ b/BRFullTextSearch/SnowballPrefixFilter.h @@ -10,7 +10,7 @@ #define __BRFullTextSearch__SnowballPrefixFilter__ #include "CLucene/analysis/AnalysisHeader.h" -#include "SnowballFilter.h" +#include "CLucene/snowball/SnowballFilter.h" using namespace lucene::analysis; using namespace lucene::analysis::snowball; diff --git a/CHANGELOG.md b/CHANGELOG.md index fe53328..97ff2b8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,17 @@ # Change Log -## [1.1.1](https://github.com/Blue-Rocket/BRFullTextSearch/tree/1.1.1) (2016-05-18) +## [2.0.0-beta1](https://github.com/Blue-Rocket/BRFullTextSearch/tree/2.0.0-beta1) (2016-11-30) +[Full Changelog](https://github.com/Blue-Rocket/BRFullTextSearch/compare/1.1.1...2.0.0-beta1) + +**Implemented enhancements:** + +- Update to BRCLucene pod [\#22](https://github.com/Blue-Rocket/BRFullTextSearch/issues/22) + +**Closed issues:** + +- Index corruption [\#19](https://github.com/Blue-Rocket/BRFullTextSearch/issues/19) + +## [1.1.1](https://github.com/Blue-Rocket/BRFullTextSearch/tree/1.1.1) (2016-05-17) [Full Changelog](https://github.com/Blue-Rocket/BRFullTextSearch/compare/1.1.0...1.1.1) **Implemented enhancements:** diff --git a/Podfile b/Podfile new file mode 100644 index 0000000..b4f9bbd --- /dev/null +++ b/Podfile @@ -0,0 +1,21 @@ +source 'https://github.com/CocoaPods/Specs.git' + +inhibit_all_warnings! + +install! 'cocoapods', :deterministic_uuids => false + +abstract_target 'BasePods' do + pod 'BRCLucene', '~> 1.0.0-beta1' + + target 'BRFullTextSearch' do + platform :ios, '5.1' + end + + target 'BRFullTextSearchTests' do + platform :ios, '5.1' + end + + target 'BRFullTextSearchMacOS' do + platform :osx, '10.7' + end +end diff --git a/Podfile.lock b/Podfile.lock new file mode 100644 index 0000000..b514d6e --- /dev/null +++ b/Podfile.lock @@ -0,0 +1,28 @@ +PODS: + - BRCLucene (1.0.0-beta1): + - BRCLucene/CLucene (= 1.0.0-beta1) + - BRCLucene/CLucene (1.0.0-beta1): + - BRCLucene/CLucene-Contribs-Lib + - BRCLucene/CLucene-Core + - BRCLucene/CLucene-Shared + - BRCLucene/CLucene-Config (1.0.0-beta1) + - BRCLucene/CLucene-Contribs-Lib (1.0.0-beta1): + - BRCLucene/CLucene-Core + - BRCLucene/CLucene-Shared + - BRCLucene/CLucene-Core (1.0.0-beta1): + - BRCLucene/CLucene-Core-API + - BRCLucene/CLucene-Shared + - BRCLucene/CLucene-Core-API (1.0.0-beta1): + - BRCLucene/CLucene-Config + - BRCLucene/CLucene-Shared (1.0.0-beta1): + - BRCLucene/CLucene-Core-API + +DEPENDENCIES: + - BRCLucene (~> 1.0.0-beta1) + +SPEC CHECKSUMS: + BRCLucene: e3ff71c464c0a37d5093f2e1e9ee4e46bf578454 + +PODFILE CHECKSUM: ee15b1e6dd161fbe90172ae3362b2df9b74822dc + +COCOAPODS: 1.1.1 diff --git a/Pods/BRCLucene/BRCLucene/src/CLucene/_clucene-config.h b/Pods/BRCLucene/BRCLucene/src/CLucene/_clucene-config.h new file mode 100644 index 0000000..791a0c3 --- /dev/null +++ b/Pods/BRCLucene/BRCLucene/src/CLucene/_clucene-config.h @@ -0,0 +1,112 @@ +#ifndef _SRC_CLUCENE_INTERNAL_CLUCENE_CONFIG_H +#define _SRC_CLUCENE_INTERNAL_CLUCENE_CONFIG_H 1 + +/* src/shared/CLucene/_clucene-config.h. +* Generated automatically at end of cmake. +* These are internal definitions, and this file does not need to be distributed +*/ + +/* CMake will look for these functions: */ +/* #undef _CL_HAVE_FUNCTION__VSNWPRINTF */ +/* #undef _CL_HAVE_FUNCTION__SNWPRINTF */ +#define _CL_HAVE_FUNCTION_WCSCASECMP +#define _CL_HAVE_FUNCTION_WCSCAT 1 +#define _CL_HAVE_FUNCTION_WCSCHR 1 +#define _CL_HAVE_FUNCTION_WCSCMP 1 +#define _CL_HAVE_FUNCTION_WCSCPY 1 +#define _CL_HAVE_FUNCTION_WCSCSPN 1 +/* #undef _CL_HAVE_FUNCTION_WCSICMP */ +#define _CL_HAVE_FUNCTION_WCSLEN 1 +#define _CL_HAVE_FUNCTION_WCSNCMP 1 +#define _CL_HAVE_FUNCTION_WCSNCPY 1 +#define _CL_HAVE_FUNCTION_WCSSTR 1 +#define _CL_HAVE_FUNCTION_WCSTOD 1 +#define _CL_HAVE_FUNCTION_WCSDUP 1 +#define _CL_HAVE_FUNCTION_WCSTOLL 1 +/* #undef _CL_HAVE_FUNCTION_WCSUPR */ +#define _CL_HAVE_FUNCTION_GETTIMEOFDAY 1 +/* #undef _CL_HAVE_FUNCTION_MAPVIEWOFFILE */ + +/* #undef _CL_HAVE_FUNCTION_LLTOA */ +/* #undef _CL_HAVE_FUNCTION_LLTOW */ +#define _CL_HAVE_FUNCTION_PRINTF 1 +#define _CL_HAVE_FUNCTION_SNPRINTF 1 +#define _CL_HAVE_FUNCTION_MMAP 1 +/* #undef _CL_HAVE_FUNCTION_STRLWR */ +#define _CL_HAVE_FUNCTION_STRTOLL 1 +/* #undef _CL_HAVE_FUNCTION_STRUPR */ +/* #undef _CL_HAVE_FUNCTION_GETPAGESIZE */ +#define _CL_HAVE_FUNCTION_USLEEP 1 +/* #undef _CL_HAVE_FUNCTION_SLEEP */ + +#define CL_MAX_PATH 4096 +//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 + +#define _O_RANDOM 0 +#define _O_BINARY 0 +#define _S_IREAD S_IREAD +#define _S_IWRITE S_IWRITE +#define _timeb timeb + +#define _ILONG(x) x ## L +#define _ILONGLONG(x) x ## LL + +#define fileStat stat +#define cl_stat_t stat +#define fileSize CL_NS(util)::Misc::filelength +#define fileSeek lseek +#define fileTell(fhandle) fileSeek(fhandle, 0, SEEK_CUR) +#define fileHandleStat fstat +#define _realpath realpath +#define _rename rename +#define _close close +#define _read read +#define _cl_open open +#define _write write +#define _snprintf snprintf +#define _mkdir(x) mkdir(x,0777) +#define _unlink unlink +#define _ftime ftime +#define SLEEPFUNCTION usleep + +/* CMake will determine these specifics. Things like bugs, etc */ + +/* Does not support new float byte<->float conversions */ +/* #undef _CL_HAVE_NO_FLOAT_BYTE */ + +/* Define if recursive pthread mutexes are available */ +#define _CL_HAVE_PTHREAD_MUTEX_RECURSIVE 1 + +/** define if you would like to force clucene to use the internal +* character functions. +* Tests may display unpredictable behaviour if this is not defined. +*/ +#ifndef LUCENE_USE_INTERNAL_CHAR_FUNCTIONS + #define LUCENE_USE_INTERNAL_CHAR_FUNCTIONS 1 +#endif + +/** fix ansi for loop scope */ +#if 1==0 + #define for if (0); else for +#endif + + +/* Compiler oddities */ + +//not sure why, but cygwin reports _S_IREAD, but doesn't actually work... +//TODO: make this work properly (this bit shouldn't be necessary) +#ifdef __CYGWIN__ + #define _S_IREAD 0333 + #define _S_IWRITE 0333 +#endif + +#ifdef __BORLANDC__ //borland compiler + #define O_RANDOM 0 +#endif + +#endif diff --git a/Pods/BRCLucene/BRCLucene/src/CLucene/clucene-config.h b/Pods/BRCLucene/BRCLucene/src/CLucene/clucene-config.h new file mode 100644 index 0000000..b3fe69f --- /dev/null +++ b/Pods/BRCLucene/BRCLucene/src/CLucene/clucene-config.h @@ -0,0 +1,148 @@ +#ifndef _SRC_CLUCENE_CLUCENE_CONFIG_H +#define _SRC_CLUCENE_CLUCENE_CONFIG_H 1 + +/* src/shared/CLucene/clucene-config.h. +* Generated automatically at end of cmake. +*/ + +/* CMake will look for these headers: */ +#define _CL_HAVE_STRING_H 1 +#define _CL_HAVE_MEMORY_H 1 +#define _CL_HAVE_UNISTD_H 1 +/* #undef _CL_HAVE_IO_H */ +/* #undef _CL_HAVE_DIRECT_H */ +#define _CL_HAVE_DIRENT_H 1 +#define _CL_HAVE_SYS_DIR_H +/* #undef _CL_HAVE_SYS_NDIR_H */ +#define _CL_HAVE_ERRNO_H 1 +#define _CL_HAVE_WCHAR_H 1 +#define _CL_HAVE_WCTYPE_H +#define _CL_HAVE_CTYPE_H 1 +/* #undef _CL_HAVE_WINDOWS_H */ +/* #undef _CL_HAVE_WINDEF_H */ +#define _CL_HAVE_SYS_TYPES_H 1 +/* #undef _CL_HAVE_DLFCN_H */ +#define _CL_HAVE_EXT_HASH_MAP 1 +/* #undef _CL_HAVE_EXT_HASH_SET */ +#define _CL_HAVE_TR1_UNORDERED_MAP 1 +#define _CL_HAVE_TR1_UNORDERED_SET 1 +/* #undef _CL_HAVE_HASH_MAP */ +/* #undef _CL_HAVE_HASH_SET */ +/* #undef _CL_HAVE_NDIR_H */ +#define _CL_HAVE_SYS_STAT_H 1 +#define _CL_HAVE_SYS_TIMEB_H 1 +#define _CL_HAVE_SYS_TIME_H 1 +/* #undef _CL_HAVE_TCHAR_H */ +#define _CL_HAVE_SYS_MMAN_H 1 +/* #undef _CL_HAVE_WINERROR_H */ +#define _CL_HAVE_STDINT_H 1 + +// our needed types +/* undef int8_t int8_t */ +/* undef uint8_t uint8_t */ +/* undef int16_t int16_t */ +/* undef uint16_t uint16_t */ +/* undef int32_t int32_t */ +/* undef uint32_t uint32_t */ +/* undef int64_t int64_t */ +/* undef uint64_t uint64_t */ + +/* undef float_t*/ + +/* undef size_t size_t */ + +/* tchar & _T definitions... */ +typedef wchar_t TCHAR; +#define _T(x) L ## x + +/* CMake will determine these specifics. Things like bugs, etc */ + +/* if we can't support the map/set hashing */ +/* #undef LUCENE_DISABLE_HASHING */ + +/* Define if you have POSIX threads libraries and header files. */ +#define _CL_HAVE_PTHREAD 1 + +/* Define if you have Win32 threads libraries and header files. */ +/* #undef _CL_HAVE_WIN32_THREADS */ + +/* Define if we have gcc atomic functions */ +#define _CL_HAVE_GCC_ATOMIC_FUNCTIONS 1 + +/* Define what eval method is required for float_t to be defined (for GCC). */ +/* #undef _FLT_EVAL_METHOD */ + +/* If we use hashmaps, which namespace do we use: */ +#define CL_NS_HASHING(func) std::tr1::func +/* If we use hashmaps, which classes do we use: */ +#define _CL_HASH_MAP unordered_map +#define _CL_HASH_SET unordered_set + +/* define if the compiler implements namespaces */ +#define _CL_HAVE_NAMESPACES + +/* Defined if the snprintf overflow test fails */ +/* #undef _CL_HAVE_SNPRINTF_BUG */ + +/* Defined if the swprintf test fails */ +/* #undef _CL_HAVE_SNWPRINTF_BUG */ + +/* How to define a static const in a class */ +#define LUCENE_STATIC_CONSTANT(type, assignment) static const type assignment + +/* Define to the necessary symbol if this constant uses a non-standard name on + your system. */ +//todo: not checked +/* #undef _CL_PTHREAD_CREATE_JOINABLE */ + +/* Define to 1 if the `S_IS*' macros in do not work properly. */ +//todo: not being checked for... +/* #undef _CL_STAT_MACROS_BROKEN */ + +/* Define to 1 if you can safely include both and . */ +//not actually used for anything... +//#define _CL_TIME_WITH_SYS_TIME 1 + +/* Define that we will be using -fvisibility=hidden, and + * make public classes visible using __attribute__ ((visibility("default"))) + */ +/* #undef _CL_HAVE_GCCVISIBILITYPATCH */ + + +/* Versions, etc */ + +/* Name of package */ +#define _CL_PACKAGE "clucene-core" + +/* Version number of package */ +#define _CL_VERSION "2.3.3.4" + +/* So-Version number of package */ +#define _CL_SOVERSION "1" + +/* A comparable version number */ +#define _CL_INT_VERSION 2030304 + +/* Configured options (from command line) */ + +/* Forces into Ascii mode */ +/* #undef _ASCII */ + +/* Conditional Debugging */ +/* #undef _CL__CND_DEBUG */ + +/* debuging option */ +/* #undef _DEBUG */ + +/* Disable multithreading */ +/* #undef _CL_DISABLE_MULTITHREADING */ + + +#ifdef __BORLANDC__ //borland compiler + //todo: bcc incorrectly detects this... fix this in cmake + #undef LUCENE_STATIC_CONSTANT + #define LUCENE_STATIC_CONSTANT(type, assignment) enum { assignment } +#endif + + +#endif diff --git a/Pods/BRCLucene/README b/Pods/BRCLucene/README new file mode 100644 index 0000000..9b411e7 --- /dev/null +++ b/Pods/BRCLucene/README @@ -0,0 +1,63 @@ +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 +------------ +Read the INSTALL file + + +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 +------------- +You can build your own documentation by running 'make DoxygenDoc' from your +'out-of-source' cmake-configured build directory. +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/ +There is an online version (which won't be as up to date as if you build your +own) at http://clucene.sourceforge.net/doc/html/ + + +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: + +This software contains code derived from the RSA Data Security +Inc. MD5 Message-Digest Algorithm. + +CLucene relies heavily on the use of cmake to provide a stable build environment. + diff --git a/Pods/BRCLucene/README.PACKAGE b/Pods/BRCLucene/README.PACKAGE new file mode 100644 index 0000000..e33b1d4 --- /dev/null +++ b/Pods/BRCLucene/README.PACKAGE @@ -0,0 +1,11 @@ +CLucene is a C++ port of the popular Apache Lucene search engine +(http://lucene.apache.org/java). It is released under LGPL or the Apache +License. + +CLucene aims to be a high-speed alternative to Java Lucene, its API is very +similar to that of the Java version. CLucene has recently been brought up to +date with Lucene 2.3.2. It contains most of the same functionality as the +Java version. + +This package contains the files necessary for running applications that +use the libclucene library. diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/analysis/LanguageBasedAnalyzer.cpp b/Pods/BRCLucene/src/contribs-lib/CLucene/analysis/LanguageBasedAnalyzer.cpp new file mode 100644 index 0000000..da28cbe --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/analysis/LanguageBasedAnalyzer.cpp @@ -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. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "LanguageBasedAnalyzer.h" +#include "CLucene/analysis/cjk/CJKAnalyzer.h" +#include "CLucene/analysis/Analyzers.h" +#include "CLucene/analysis/standard/StandardTokenizer.h" +#include "CLucene/analysis/standard/StandardFilter.h" +#include "CLucene/snowball/SnowballFilter.h" + +CL_NS_USE(util) +CL_NS_USE2(analysis,cjk) +CL_NS_USE2(analysis,standard) +CL_NS_USE2(analysis,snowball) + +CL_NS_DEF(analysis) + +LanguageBasedAnalyzer::LanguageBasedAnalyzer(const TCHAR* language, bool stem) +{ + if ( language == NULL ) + _tcsncpy(lang,LUCENE_BLANK_STRING,100); + else + _tcsncpy(lang,language,100); + this->stem = stem; +} +LanguageBasedAnalyzer::~LanguageBasedAnalyzer(){ +} +void LanguageBasedAnalyzer::setLanguage(const TCHAR* language){ + _tcsncpy(lang,language,100); +} +void LanguageBasedAnalyzer::setStem(bool stem){ + this->stem = stem; +} +TokenStream* LanguageBasedAnalyzer::tokenStream(const TCHAR* fieldName, Reader* reader) { + TokenStream* ret = NULL; + if ( _tcscmp(lang, _T("cjk"))==0 ){ + ret = _CLNEW CL_NS2(analysis,cjk)::CJKTokenizer(reader); + }else{ + BufferedReader* bufferedReader = reader->__asBufferedReader(); + if ( bufferedReader == NULL ) + ret = _CLNEW StandardTokenizer( _CLNEW FilteredBufferedReader(reader, false), true ); + else + ret = _CLNEW StandardTokenizer(bufferedReader); + + ret = _CLNEW StandardFilter(ret,true); + + if ( stem ) + ret = _CLNEW SnowballFilter(ret,lang, true); //todo: should check whether snowball supports the language + + if ( stem ) //hmm... this could be configured seperately from stem + ret = _CLNEW ISOLatin1AccentFilter(ret, true); //todo: this should really only be applied to latin languages... + + //lower case after the latin1 filter + ret = _CLNEW LowerCaseFilter(ret,true); + } + //todo: could add a stop filter based on the language - need to fix the stoplist loader first + + return ret; +} + +CL_NS_END diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/analysis/LanguageBasedAnalyzer.h b/Pods/BRCLucene/src/contribs-lib/CLucene/analysis/LanguageBasedAnalyzer.h new file mode 100644 index 0000000..596c86b --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/analysis/LanguageBasedAnalyzer.h @@ -0,0 +1,26 @@ +/*------------------------------------------------------------------------------ +* 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_languagebasedanalyzer_ +#define _lucene_analysis_languagebasedanalyzer_ + +#include "CLucene/analysis/AnalysisHeader.h" + +CL_NS_DEF(analysis) + +class CLUCENE_CONTRIBS_EXPORT LanguageBasedAnalyzer: public CL_NS(analysis)::Analyzer{ + TCHAR lang[100]; + bool stem; +public: + LanguageBasedAnalyzer(const TCHAR* language=NULL, bool stem=true); + ~LanguageBasedAnalyzer(); + void setLanguage(const TCHAR* language); + void setStem(bool stem); + TokenStream* tokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader); + }; + +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/analysis/PorterStemmer.cpp b/Pods/BRCLucene/src/contribs-lib/CLucene/analysis/PorterStemmer.cpp new file mode 100644 index 0000000..d5ec3a6 --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/analysis/PorterStemmer.cpp @@ -0,0 +1,313 @@ +/* This is the Porter stemming algorithm, originally written by Martin Porter. + It may be regarded as cononical, in that it follows the + algorithm presented in + + Porter, 1980, An algorithm for suffix stripping, Program, Vol. 14, + no. 3, pp 130-137, + + See also http://www.tartarus.org/~martin/PorterStemmer + + Modified by "Hemant Muthiyan" + email: hemant_muthiyan@yahoo.co.in + +*/ + +#include "CLucene/_ApiHeader.h" +#include "PorterStemmer.h" + +CL_NS_DEF(analysis) + + bool PorterStemmer::cons(size_t i) { + switch (b[i]) { + case 'a': case 'e': case 'i': case 'o': case 'u': + return false; + case 'y': + return (i==k0) ? true : !cons(i-1); + default: + return true; + } + } + + int32_t PorterStemmer::m() { + int32_t n = 0; + size_t i = k0; + while(true) { + if (i > j) + return n; + if (! cons(i)) + break; + i++; + } + i++; + while(true) { + while(true) { + if (i > j) + return n; + if (cons(i)) + break; + i++; + } + i++; + n++; + while(true) { + if (i > j) + return n; + if (! cons(i)) + break; + i++; + } + i++; + } + } + + bool PorterStemmer::vowelinstem() { + for (size_t i = k0; i <= j; i++) + if (! cons(i)) + return true; + return false; + } + + /* doublec(j) is true <=> j,(j-1) contain a double consonant. */ + bool PorterStemmer::doublec(size_t j) { + if (j < k0+1) + return false; + if (b[j] != b[j-1]) + return false; + return cons(j); + } + + /* cvc(i) is true <=> i-2,i-1,i has the form consonant - vowel - consonant + and also if the second c is not w,x or y. this is used when trying to + restore an e at the end of a short word. e.g. + + cav(e), lov(e), hop(e), crim(e), but + snow, box, tray. + + */ + bool PorterStemmer::cvc(size_t i) { + if (i < k0+2 || !cons(i) || cons(i-1) || !cons(i-2)) + return false; + else { + int32_t ch = b[i]; + if (ch == 'w' || ch == 'x' || ch == 'y') return false; + } + return true; + } + + bool PorterStemmer::ends(TCHAR *s) { + size_t l = _tcslen(s); + size_t o = k-l+1; + if (o < k0) + return false; + for (size_t i = 0; i < l; i++) + if (b[o+i] != s[i]) + return false; + j = (l > k) ? 0 : k-l; + return true; + } + + void PorterStemmer::setto(const TCHAR *s) { + size_t l = _tcslen(s); + size_t o = j+1; + for (size_t i = 0; i < l; i++) + b[o+i] = s[i]; + k = j+l; + dirty = true; + } + + void PorterStemmer::r(const TCHAR *s) { + if (m() > 0) setto(s); + } + + void PorterStemmer::step1() { + if (b[k] == _T('s')) { + if (ends(_T("sses"))) k -= 2; + else if (ends(_T("ies"))) setto(_T("i")); + else if (b[k-1] != _T('s')) k--; + } + if (ends(_T("eed"))) { + if (m() > 0) + k--; + } + else if ((ends(_T("ed")) || ends(_T("ing"))) && vowelinstem()) { + k = j; + if (ends(_T("at"))) setto(_T("ate")); + else if (ends(_T("bl"))) setto(_T("ble")); + else if (ends(_T("iz"))) setto(_T("ize")); + else if (doublec(k)) { + int32_t ch = b[k--]; + if (ch == _T('l') || ch == _T('s') || ch == _T('z')) + k++; + } + else if (m() == 1 && cvc(k)) + setto(_T("e")); + } + } + + void PorterStemmer::step2() { + if (ends(_T("y")) && vowelinstem()) { + b[k] = 'i'; + dirty = true; + } + } + + void PorterStemmer::step3() { + if (k == k0) return; /* For Bug 1 */ + switch (b[k-1]) { + case 'a': + if (ends(_T("ational"))) { r(_T("ate")); break; } + if (ends(_T("tional"))) { r(_T("tion")); break; } + break; + case 'c': + if (ends(_T("enci"))) { r(_T("ence")); break; } + if (ends(_T("anci"))) { r(_T("ance")); break; } + break; + case 'e': + if (ends(_T("izer"))) { r(_T("ize")); break; } + break; + case 'l': + if (ends(_T("bli"))) { r(_T("ble")); break; } + if (ends(_T("alli"))) { r(_T("al")); break; } + if (ends(_T("entli"))) { r(_T("ent")); break; } + if (ends(_T("eli"))) { r(_T("e")); break; } + if (ends(_T("ousli"))) { r(_T("ous")); break; } + break; + case 'o': + if (ends(_T("ization"))) { r(_T("ize")); break; } + if (ends(_T("ation"))) { r(_T("ate")); break; } + if (ends(_T("ator"))) { r(_T("ate")); break; } + break; + case 's': + if (ends(_T("alism"))) { r(_T("al")); break; } + if (ends(_T("iveness"))) { r(_T("ive")); break; } + if (ends(_T("fulness"))) { r(_T("ful")); break; } + if (ends(_T("ousness"))) { r(_T("ous")); break; } + break; + case 't': + if (ends(_T("aliti"))) { r(_T("al")); break; } + if (ends(_T("iviti"))) { r(_T("ive")); break; } + if (ends(_T("biliti"))) { r(_T("ble")); break; } + break; + case 'g': + if (ends(_T("logi"))) { r(_T("log")); break; } + } + } + + void PorterStemmer::step4() { + switch (b[k]) { + case 'e': + if (ends(_T("icate"))) { r(_T("ic")); break; } + if (ends(_T("ative"))) { r(LUCENE_BLANK_STRING); break; } + if (ends(_T("alize"))) { r(_T("al")); break; } + break; + case 'i': + if (ends(_T("iciti"))) { r(_T("ic")); break; } + break; + case 'l': + if (ends(_T("ical"))) { r(_T("ic")); break; } + if (ends(_T("ful"))) { r(LUCENE_BLANK_STRING); break; } + break; + case 's': + if (ends(_T("ness"))) { r(LUCENE_BLANK_STRING); break; } + break; + } + } + + void PorterStemmer::step5() { + if (k == k0) return; /* for Bug 1 */ + switch (b[k-1]) { + case 'a': + if (ends(_T("al"))) break; + return; + case 'c': + if (ends(_T("ance"))) break; + if (ends(_T("ence"))) break; + return; + case 'e': + if (ends(_T("er"))) break; return; + case 'i': + if (ends(_T("ic"))) break; return; + case 'l': + if (ends(_T("able"))) break; + if (ends(_T("ible"))) break; return; + case 'n': + if (ends(_T("ant"))) break; + if (ends(_T("ement"))) break; + if (ends(_T("ment"))) break; + /* element etc. not stripped before the m */ + if (ends(_T("ent"))) break; + return; + case 'o': + if (ends(_T("ion")) && j >= 0 && (b[j] == 's' || b[j] == 't')) break; + /* j >= 0 fixes Bug 2 */ + if (ends(_T("ou"))) break; + return; + /* takes care of -ous */ + case 's': + if (ends(_T("ism"))) break; + return; + case 't': + if (ends(_T("ate"))) break; + if (ends(_T("iti"))) break; + return; + case 'u': + if (ends(_T("ous"))) break; + return; + case 'v': + if (ends(_T("ive"))) break; + return; + case 'z': + if (ends(_T("ize"))) break; + return; + default: + return; + } + if (m() > 1) + k = j; + } + + void PorterStemmer::step6() { + j = k; + if (b[k] == 'e') { + int32_t a = m(); + if (a > 1 || a == 1 && !cvc(k-1)) + k--; + } + if (b[k] == 'l' && doublec(k) && m() > 1) + k--; + } + + + PorterStemmer::PorterStemmer(TCHAR *Text) { + b = Text; + i = _tcslen(b); + dirty = false; + } + + PorterStemmer::~PorterStemmer(){ + b = NULL; + } + + + int32_t PorterStemmer::getResultLength() { return i; } + + bool PorterStemmer::stem() { + //i = strlen(b); + k = i -1; + k0 = 0; + if (k > k0+1) { + step1(); step2(); step3(); step4(); step5(); step6(); + } + // Also, a word is considered dirty if we lopped off letters + // Thanks to Ifigenia Vairelles for pointing this out. + if (i != k+1) + dirty = true; + i = k+1; + return dirty; + } + + const TCHAR* PorterStemmer::getResultBuffer() { + return b; + } + +CL_NS_END diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/analysis/PorterStemmer.h b/Pods/BRCLucene/src/contribs-lib/CLucene/analysis/PorterStemmer.h new file mode 100644 index 0000000..35ff817 --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/analysis/PorterStemmer.h @@ -0,0 +1,151 @@ +/* This is the Porter stemming algorithm, originally written by Martin Porter. + It may be regarded as cononical, in that it follows the + algorithm presented in + + Porter, 1980, An algorithm for suffix stripping, Program, Vol. 14, + no. 3, pp 130-137, + + See also http://www.tartarus.org/~martin/PorterStemmer + + Modified by "Hemant Muthiyan" + email: hemant_muthiyan@yahoo.co.in + + The Porter stemmer should be regarded as �frozen�, that is, strictly defined, + and not amenable to further modification. As a stemmer, it is slightly inferior + to the Snowball English or Porter2 stemmer, which derives from it, and which is + subjected to occasional improvements. For practical work, therefore, the new + Snowball stemmer is recommended. The Porter stemmer is appropriate to IR + research work involving stemming where the experiments need to be exactly + repeatable. + +*/ +#ifndef _lucene_analysis_PorterStemmer_ +#define _lucene_analysis_PorterStemmer_ + +CL_NS_DEF(analysis) + +class CLUCENE_CONTRIBS_EXPORT PorterStemmer +{ +private: + TCHAR *b; + size_t i, /* offset into b */ + j, k, k0; + bool dirty; + //private static final int32_t EXTRA = 1; + + /* cons(i) is true <=> b[i] is a consonant. */ + +private: + bool cons(size_t i); + + /* m() measures the number of consonant sequences between k0 and j. if c is + a consonant sequence and v a vowel sequence, and <..> indicates arbitrary + presence, + + gives 0 + vc gives 1 + vcvc gives 2 + vcvcvc gives 3 + .... + */ + + int32_t m(); + + /* vowelinstem() is true <=> k0,...j contains a vowel */ + + bool vowelinstem(); + + /* doublec(j) is true <=> j,(j-1) contain a double consonant. */ + bool doublec(size_t j); + + /* cvc(i) is true <=> i-2,i-1,i has the form consonant - vowel - consonant + and also if the second c is not w,x or y. this is used when trying to + restore an e at the end of a short word. e.g. + + cav(e), lov(e), hop(e), crim(e), but + snow, box, tray. + + */ + bool cvc(size_t i); + + bool ends(TCHAR *s); + + /* setto(s) sets (j+1),...k to the characters in the string s, readjusting + k. */ + + void setto(const TCHAR *s); + + /* r(s) is used further down. */ + + void r(const TCHAR *s); + + /* step1() gets rid of plurals and -ed or -ing. e.g. + + caresses -> caress + ponies -> poni + ties -> ti + caress -> caress + cats -> cat + + feed -> feed + agreed -> agree + disabled -> disable + + matting -> mat + mating -> mate + meeting -> meet + milling -> mill + messing -> mess + + meetings -> meet + + */ + + void step1(); + + /* step2() turns terminal y to i when there is another vowel in the stem. */ + + void step2(); + + /* step3() maps double suffices to single ones. so -ization ( = -ize plus + -ation) maps to -ize etc. note that the string before the suffix must give + m() > 0. */ + + void step3(); + + /* step4() deals with -ic-, -full, -ness etc. similar strategy to step3. */ + + void step4(); + + /* step5() takes off -ant, -ence etc., in context vcvc. */ + + void step5(); + + /* step6() removes a final -e if m() > 1. */ + + void step6(); + + public: + + PorterStemmer(TCHAR *Text); + ~PorterStemmer(); + + + /** + * Returns the length of the word resulting from the stemming process. + */ + int32_t getResultLength(); + + bool stem(); + + /** + * Returns a reference to a character buffer containing the results of + * the stemming process. You also need to consult getResultLength() + * to determine the length of the result. + */ + const TCHAR* getResultBuffer(); + +}; +CL_NS_END + +#endif diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/analysis/cjk/CJKAnalyzer.cpp b/Pods/BRCLucene/src/contribs-lib/CLucene/analysis/cjk/CJKAnalyzer.cpp new file mode 100644 index 0000000..05a17e5 --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/analysis/cjk/CJKAnalyzer.cpp @@ -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. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "CJKAnalyzer.h" +#include "CLucene/util/CLStreams.h" + +CL_NS_DEF2(analysis,cjk) +CL_NS_USE(analysis) +CL_NS_USE(util) + + +const TCHAR* CJKTokenizer::tokenTypeSingle = _T("single"); +const TCHAR* CJKTokenizer::tokenTypeDouble = _T("double"); + +CJKTokenizer::CJKTokenizer(Reader* in): + Tokenizer(in) +{ + tokenType = Token::getDefaultType(); + offset = 0; + bufferIndex = 0; + dataLen = 0; + preIsTokened = false; + ignoreSurrogates = true; +} + +CL_NS(analysis)::Token* CJKTokenizer::next(Token* token){ + /** how many character(s) has been stored in buffer */ + int32_t length = 0; + + /** the position used to create Token */ + int32_t start = offset; + + while (true) { + /** current character */ + clunichar c; + int charlen = 1; + + offset++; + + if (bufferIndex >= dataLen) { + dataLen = input->read(ioBuffer, 1, LUCENE_IO_BUFFER_SIZE); + bufferIndex = 0; + } + + if (dataLen == -1) { + if (length > 0) { + if (preIsTokened == true) { + length = 0; + preIsTokened = false; + } + + break; + } else { + return NULL; + } + } else { + //get current character + c = ioBuffer[bufferIndex++]; + } + + //to support surrogates, we'll need to convert the incoming utf16 into + //ucs4(c variable). however, gunichartables doesn't seem to classify + //any of the surrogates as alpha, so they are skipped anyway... + //so for now we just convert to ucs4 so that we dont corrupt the input. + if ( c >= 0xd800 || c <= 0xdfff ){ + clunichar c2 = ioBuffer[bufferIndex]; + if ( c2 >= 0xdc00 && c2 <= 0xdfff ){ + bufferIndex++; + offset++; + charlen=2; + + c = (((c & 0x03ffL) << 10) | ((c2 & 0x03ffL) << 0)) + 0x00010000L; + } + } + + //if the current character is ASCII or Extend ASCII + if ((c <= 0xFF) //is BASIC_LATIN + || (c>=0xFF00 && c<=0xFFEF) //ascii >0x74 cast to unsigned... + ) { + if (c >= 0xFF00) { + //todo: test this... only happens on platforms where char is signed, i think... + /** convert HALFWIDTH_AND_FULLWIDTH_FORMS to BASIC_LATIN */ + c -= 0xFEE0; + } + + // if the current character is a letter or "_" "+" "#" + if (_istalnum(c) || ((c == '_') || (c == '+') || (c == '#')) ) { + if (length == 0) { + // "javaC1C2C3C4linux"
+ // ^--: the current character begin to token the ASCII + // letter + start = offset - 1; + } else if (tokenType == tokenTypeDouble) { + // "javaC1C2C3C4linux"
+ // ^--: the previous non-ASCII + // : the current character + offset-=charlen; + bufferIndex-=charlen; + tokenType = tokenTypeSingle; + + if (preIsTokened == true) { + // there is only one non-ASCII has been stored + length = 0; + preIsTokened = false; + + break; + } else { + break; + } + } + + // store the LowerCase(c) in the buffer + buffer[length++] = _totlower((TCHAR)c); + tokenType = tokenTypeSingle; + + // break the procedure if buffer overflowed! + if (length == LUCENE_MAX_WORD_LEN) { + break; + } + } else if (length > 0) { + if (preIsTokened == true) { + length = 0; + preIsTokened = false; + } else { + break; + } + } + } else { + // non-ASCII letter, eg."C1C2C3C4" + if ( _istalpha(c) || (!ignoreSurrogates && c>=0x10000) ) { + if (length == 0) { + start = offset - 1; + + if ( c < 0x00010000L ) + buffer[length++] = (TCHAR)c; + else{ + clunichar ucs4 = c - 0x00010000L; + buffer[length++] = (TCHAR)((ucs4 >> 10) & 0x3ff) | 0xd800; + buffer[length++] = (TCHAR)((ucs4 >> 0) & 0x3ff) | 0xdc00; + } + + tokenType = tokenTypeDouble; + } else { + if (tokenType == tokenTypeSingle) { + offset-=charlen; + bufferIndex-=charlen; + + //return the previous ASCII characters + break; + } else { + if ( c < 0x00010000L ) + buffer[length++] = (TCHAR)c; + else{ + clunichar ucs4 = c - 0x00010000L; + buffer[length++] = (TCHAR)((ucs4 >> 10) & 0x3ff) | 0xd800; + buffer[length++] = (TCHAR)((ucs4 >> 0) & 0x3ff) | 0xdc00; + } + tokenType = tokenTypeDouble; + + if (length >= 2) { + offset-=charlen; + bufferIndex-=charlen; + preIsTokened = true; + + break; + } + } + } + } else if (length > 0) { + if (preIsTokened == true) { + // empty the buffer + length = 0; + preIsTokened = false; + } else { + break; + } + } + } + } + + buffer[length]='\0'; + token->set(buffer,start, start+length, tokenType); + return token; +} + +CL_NS_END2 diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/analysis/cjk/CJKAnalyzer.h b/Pods/BRCLucene/src/contribs-lib/CLucene/analysis/cjk/CJKAnalyzer.h new file mode 100644 index 0000000..8572094 --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/analysis/cjk/CJKAnalyzer.h @@ -0,0 +1,94 @@ +/*------------------------------------------------------------------------------ +* 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_cjk_cjkanalyzer_ +#define _lucene_analysis_cjk_cjkanalyzer_ + +#include "CLucene/analysis/AnalysisHeader.h" + +CL_NS_DEF2(analysis,cjk) + +/** + * CJKTokenizer was modified from StopTokenizer which does a decent job for + * most European languages. It performs other token methods for double-byte + * Characters: the token will return at each two charactors with overlap match.
+ * Example: "java C1C2C3C4" will be segment to: "java" "C1C2" "C2C3" "C3C4" it + * also need filter filter zero length token ""
+ * for Digit: digit, '+', '#' will token as letter
+ * for more info on Asia language(Chinese Japanese Korean) text segmentation: + * please search google + * + * @author Che, Dong + */ +class CLUCENE_CONTRIBS_EXPORT CJKTokenizer: public CL_NS(analysis)::Tokenizer { +private: + /** word offset, used to imply which character(in ) is parsed */ + int32_t offset; + + /** the index used only for ioBuffer */ + int32_t bufferIndex; + + /** data length */ + int32_t dataLen; + + /** + * character buffer, store the characters which are used to compose
+ * the returned Token + */ + TCHAR buffer[LUCENE_MAX_WORD_LEN+1]; + + /** + * I/O buffer, used to store the content of the input(one of the
+ * members of Tokenizer) + */ + const TCHAR* ioBuffer; + + /** word type: single=>ASCII double=>non-ASCII word=>default */ + const TCHAR* tokenType; + + static const TCHAR* tokenTypeSingle; + static const TCHAR* tokenTypeDouble; + + /** + * tag: previous character is a cached double-byte character "C1C2C3C4" + * ----(set the C1 isTokened) C1C2 "C2C3C4" ----(set the C2 isTokened) + * C1C2 C2C3 "C3C4" ----(set the C3 isTokened) "C1C2 C2C3 C3C4" + */ + bool preIsTokened; + + + bool ignoreSurrogates; + +public: + /** + * Construct a token stream processing the given input. + * + * @param in I/O reader + */ + CJKTokenizer(CL_NS(util)::Reader* in); + + /** + * Returns the next token in the stream, or null at EOS. + * See http://java.sun.com/j2se/1.3/docs/api/java/lang/Character.UnicodeBlock.html + * for detail. + * + * @return Token + * + * @throws java.io.IOException - throw IOException when read error
+ * hanppened in the InputStream + * + */ + CL_NS(analysis)::Token* next(CL_NS(analysis)::Token* token); + + bool getIgnoreSurrogates(){ return ignoreSurrogates; }; + void setIgnoreSurrogates(bool ignoreSurrogates){ this->ignoreSurrogates = ignoreSurrogates; }; +}; + + + +CL_NS_END2 +#endif diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/analysis/de/GermanAnalyzer.cpp b/Pods/BRCLucene/src/contribs-lib/CLucene/analysis/de/GermanAnalyzer.cpp new file mode 100644 index 0000000..b2fe172 --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/analysis/de/GermanAnalyzer.cpp @@ -0,0 +1,149 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2010 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/_ApiHeader.h" +#include "CLucene/util/CLStreams.h" +#include "CLucene/analysis/Analyzers.h" +#include "CLucene/analysis/standard/StandardTokenizer.h" +#include "CLucene/analysis/standard/StandardFilter.h" +#include "CLucene/util/StringBuffer.h" +#include "GermanAnalyzer.h" +#include "GermanStemmer.h" +#include "GermanStemFilter.h" + +CL_NS_USE(analysis) +CL_NS_USE2(analysis,de) +CL_NS_USE2(analysis,standard) + + const TCHAR GermanAnalyzer_DASZ[] = { 0x64, 0x61, 0xdf }; + const TCHAR GermanAnalyzer_FUER[] = { 0x66, 0xfc, 0x72 }; + const TCHAR* GermanAnalyzer_GERMAN_STOP_WORDS[] = { + _T("einer"), _T("eine"), _T("eines"), _T("einem"), _T("einen"), + _T("der"), _T("die"), _T("das"), _T("dass"), GermanAnalyzer_DASZ, + _T("du"), _T("er"), _T("sie"), _T("es"), + _T("was"), _T("wer"), _T("wie"), _T("wir"), + _T("und"), _T("oder"), _T("ohne"), _T("mit"), + _T("am"), _T("im"),_T("in"), _T("aus"), _T("auf"), + _T("ist"), _T("sein"), _T("war"), _T("wird"), + _T("ihr"), _T("ihre"), _T("ihres"), + _T("als"), GermanAnalyzer_FUER, _T("von"), _T("mit"), + _T("dich"), _T("dir"), _T("mich"), _T("mir"), + _T("mein"), _T("sein"), _T("kein"), + _T("durch"), _T("wegen"), _T("wird") + }; + + CL_NS(util)::ConstValueArray GermanAnalyzer::GERMAN_STOP_WORDS( GermanAnalyzer_GERMAN_STOP_WORDS, 48 ); + + class GermanAnalyzer::SavedStreams : public TokenStream { + public: + StandardTokenizer* tokenStream; + TokenStream* filteredTokenStream; + + SavedStreams():tokenStream(NULL), filteredTokenStream(NULL) + { + } + + void close(){} + Token* next(Token* token) {return NULL;} + }; + + GermanAnalyzer::GermanAnalyzer() { + exclusionSet = NULL; + stopSet = _CLNEW CLTCSetList; + StopFilter::fillStopTable(stopSet, GERMAN_STOP_WORDS.values); + } + + GermanAnalyzer::GermanAnalyzer(const TCHAR** stopwords) { + exclusionSet = NULL; + stopSet = _CLNEW CLTCSetList; + StopFilter::fillStopTable(stopSet, stopwords); + } + + GermanAnalyzer::GermanAnalyzer(CL_NS(analysis)::CLTCSetList* stopwords) { + exclusionSet = NULL; + stopSet = stopwords; + } + + GermanAnalyzer::GermanAnalyzer(const char* stopwordsFile, const char* enc) { + exclusionSet = NULL; + stopSet = WordlistLoader::getWordSet(stopwordsFile, enc); + } + + GermanAnalyzer::GermanAnalyzer(CL_NS(util)::Reader* stopwordsReader, const bool deleteReader) { + exclusionSet = NULL; + stopSet = WordlistLoader::getWordSet(stopwordsReader, NULL, deleteReader); + } + + GermanAnalyzer::~GermanAnalyzer() { + _CLLDELETE(stopSet); + _CLLDELETE(exclusionSet); + } + + void GermanAnalyzer::setStemExclusionTable(const TCHAR** exclusionlist) { + if (exclusionSet != NULL) { + exclusionSet->clear(); + } else { + exclusionSet = _CLNEW CLTCSetList; + } + + CL_NS(analysis)::StopFilter::fillStopTable(exclusionSet, exclusionlist); + } + + void GermanAnalyzer::setStemExclusionTable(CL_NS(analysis)::CLTCSetList* exclusionlist) { + if (exclusionSet != exclusionlist) { + _CLLDELETE(exclusionSet); + exclusionSet = exclusionlist; + } + } + + void GermanAnalyzer::setStemExclusionTable(const char* exclusionlistFile, const char* enc) { + exclusionSet = WordlistLoader::getWordSet(exclusionlistFile, enc, exclusionSet); + } + + void GermanAnalyzer::setStemExclusionTable(CL_NS(util)::Reader* exclusionlistReader, const bool deleteReader) { + exclusionSet = WordlistLoader::getWordSet(exclusionlistReader, exclusionSet, deleteReader); + } + + TokenStream* GermanAnalyzer::tokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader) { + TokenStream* result; + CL_NS(util)::BufferedReader* bufferedReader = reader->__asBufferedReader(); + + if ( bufferedReader == NULL ) + result = _CLNEW StandardTokenizer( _CLNEW CL_NS(util)::FilteredBufferedReader(reader, false), true ); + else + result = _CLNEW StandardTokenizer(bufferedReader); + + result = _CLNEW StandardFilter(result, true); + result = _CLNEW LowerCaseFilter(result, true); + result = _CLNEW StopFilter(result, true, stopSet); + result = _CLNEW GermanStemFilter(result, true, exclusionSet); + + return result; + } + + TokenStream* GermanAnalyzer::reusableTokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader) + { + SavedStreams* streams = reinterpret_cast(getPreviousTokenStream()); + + if (streams == NULL) { + streams = _CLNEW SavedStreams(); + CL_NS(util)::BufferedReader* bufferedReader = reader->__asBufferedReader(); + + if ( bufferedReader == NULL ) + streams->tokenStream = _CLNEW StandardTokenizer( _CLNEW CL_NS(util)::FilteredBufferedReader(reader, false), true ); + else + streams->tokenStream = _CLNEW StandardTokenizer(bufferedReader); + + streams->filteredTokenStream = _CLNEW StandardFilter(streams->tokenStream, true); + streams->filteredTokenStream = _CLNEW LowerCaseFilter(streams->filteredTokenStream, true); + streams->filteredTokenStream = _CLNEW StopFilter(streams->filteredTokenStream, true, stopSet); + streams->filteredTokenStream = _CLNEW GermanStemFilter(streams->filteredTokenStream, true, exclusionSet); + setPreviousTokenStream(streams); + } else + streams->tokenStream->reset(reader); + + return streams->filteredTokenStream; + } diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/analysis/de/GermanAnalyzer.h b/Pods/BRCLucene/src/contribs-lib/CLucene/analysis/de/GermanAnalyzer.h new file mode 100644 index 0000000..9c02073 --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/analysis/de/GermanAnalyzer.h @@ -0,0 +1,108 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2010 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_de_GermanAnalyzer +#define _lucene_analysis_de_GermanAnalyzer + +CL_NS_DEF2(analysis,de) + +/** + * Analyzer for German language. Supports an external list of stopwords (words that + * will not be indexed at all) and an external list of exclusions (word that will + * not be stemmed, but indexed). + * A default set of stopwords is used unless an alternative list is specified, the + * exclusion list is empty by default. + * + * + * @version $Id: GermanAnalyzer.java 564236 2007-08-09 15:21:19Z gsingers $ + */ +class CLUCENE_CONTRIBS_EXPORT GermanAnalyzer : public CL_NS(analysis)::Analyzer { +public: + + /** + * List of typical german stopwords. + */ + static CL_NS(util)::ConstValueArray GERMAN_STOP_WORDS; + +private: + + class SavedStreams; + + /** + * Contains the stopwords used with the StopFilter. + */ + CL_NS(analysis)::CLTCSetList* stopSet; + + /** + * Contains words that should be indexed but not stemmed. + */ + CL_NS(analysis)::CLTCSetList* exclusionSet; + +public: + + /** + * Builds an analyzer with the default stop words + * (GERMAN_STOP_WORDS). + */ + GermanAnalyzer(); + + /** + * Builds an analyzer with the given stop words. + */ + GermanAnalyzer(const TCHAR** stopWords); + + /** + * Builds an analyzer with the given stop words. + */ + GermanAnalyzer(CL_NS(analysis)::CLTCSetList* stopwords); + + /** + * Builds an analyzer with the given stop words. + */ + GermanAnalyzer(const char* stopwordsFile, const char* enc = NULL); + + /** + * Builds an analyzer with the given stop words. + */ + GermanAnalyzer(CL_NS(util)::Reader* stopwordsReader, const bool deleteReader = false); + + /** + */ + virtual ~GermanAnalyzer(); + + /** + * Builds an exclusionlist from an array of Strings. + */ + void setStemExclusionTable(const TCHAR** exclusionlist); + + /** + * Builds an exclusionlist from a Hashtable. + */ + void setStemExclusionTable(CL_NS(analysis)::CLTCSetList* exclusionlist); + + /** + * Builds an exclusionlist from the words contained in the given file. + */ + void setStemExclusionTable(const char* exclusionlistFile, const char* enc = NULL); + + /** + * Builds an exclusionlist from the words contained in the given file. + */ + void setStemExclusionTable(CL_NS(util)::Reader* exclusionlistReader, const bool deleteReader = false); + + /** + * Creates a TokenStream which tokenizes all the text in the provided Reader. + * + * @return A TokenStream build from a StandardTokenizer filtered with + * StandardFilter, LowerCaseFilter, StopFilter, GermanStemFilter + */ + virtual TokenStream* tokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader); + + virtual TokenStream* reusableTokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader); +}; + +CL_NS_END2 +#endif diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/analysis/de/GermanStemFilter.cpp b/Pods/BRCLucene/src/contribs-lib/CLucene/analysis/de/GermanStemFilter.cpp new file mode 100644 index 0000000..c4fa71b --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/analysis/de/GermanStemFilter.cpp @@ -0,0 +1,66 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2010 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/_ApiHeader.h" +#include "CLucene/analysis/AnalysisHeader.h" +#include "CLucene/util/StringBuffer.h" +#include "GermanStemmer.h" +#include "GermanStemFilter.h" + +CL_NS_USE(analysis) +CL_NS_USE2(analysis,de) + + GermanStemFilter::GermanStemFilter(TokenStream* in, bool deleteTS) : + TokenFilter(in, deleteTS) + { + stemmer = _CLNEW GermanStemmer(); + exclusionSet = NULL; + } + + GermanStemFilter::GermanStemFilter(TokenStream* in, bool deleteTS, CLTCSetList* exclusionSet) : + TokenFilter(in, deleteTS) + { + stemmer = _CLNEW GermanStemmer(); + this->exclusionSet = exclusionSet; + } + + GermanStemFilter::~GermanStemFilter() + { + _CLDELETE(stemmer); + } + + Token* GermanStemFilter::next(Token* t) { + if (input->next(t) == NULL) { + return NULL; + } else if (exclusionSet != NULL && exclusionSet->find(t->termBuffer()) != exclusionSet->end()) { // Check the exclusiontable + return t; + } else { + TCHAR* s = stemmer->stem(t->termBuffer(), t->termLength()); + // If not stemmed, dont waste the time creating a new token + if (_tcscmp(s, t->termBuffer()) != 0) { + t->setText(s); + } + _CLDELETE_ARRAY(s); + return t; + } + } + + void GermanStemFilter::setStemmer(GermanStemmer* stemmer) { + if (stemmer != NULL && this->stemmer != stemmer) { + _CLLDELETE(this->stemmer); + this->stemmer = stemmer; + } + } + + /** + * Set an alternative exclusion list for this filter. + */ + void GermanStemFilter::setExclusionSet(CLTCSetList* exclusionSet) { + if (this->exclusionSet != exclusionSet) { + _CLLDELETE(exclusionSet); + this->exclusionSet = exclusionSet; + } + } diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/analysis/de/GermanStemFilter.h b/Pods/BRCLucene/src/contribs-lib/CLucene/analysis/de/GermanStemFilter.h new file mode 100644 index 0000000..7b70bfd --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/analysis/de/GermanStemFilter.h @@ -0,0 +1,56 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2010 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_de_GermanStemFilter +#define _lucene_analysis_de_GermanStemFilter + +CL_NS_DEF2(analysis,de) + +/** + * A filter that stems German words. It supports a table of words that should + * not be stemmed at all. The stemmer used can be changed at runtime after the + * filter object is created (as long as it is a GermanStemmer). + */ +class CLUCENE_CONTRIBS_EXPORT GermanStemFilter : public CL_NS(analysis)::TokenFilter +{ +private: + + /** + * The actual token in the input stream. + */ + CL_NS(analysis)::Token* token; + GermanStemmer* stemmer; + CL_NS(analysis)::CLTCSetList* exclusionSet; + +public: + + GermanStemFilter(TokenStream* in, bool deleteTS = false); + + /** + * Builds a GermanStemFilter that uses an exclusiontable. + */ + GermanStemFilter(TokenStream* in, bool deleteTS, CL_NS(analysis)::CLTCSetList* exclusionSet); + + virtual ~GermanStemFilter(); + + /** + * @return Returns the next token in the stream, or null at EOS + */ + virtual Token* next(Token* t); + + /** + * Set a alternative/custom GermanStemmer for this filter. + */ + void setStemmer(GermanStemmer* stemmer); + + /** + * Set an alternative exclusion list for this filter. + */ + void setExclusionSet(CL_NS(analysis)::CLTCSetList* exclusionSet); +}; + +CL_NS_END2 +#endif diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/analysis/de/GermanStemmer.cpp b/Pods/BRCLucene/src/contribs-lib/CLucene/analysis/de/GermanStemmer.cpp new file mode 100644 index 0000000..5ddb401 --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/analysis/de/GermanStemmer.cpp @@ -0,0 +1,213 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2010 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/_ApiHeader.h" +#include "CLucene/util/StringBuffer.h" +#include "GermanStemmer.h" + +CL_NS_USE(util) +CL_NS_USE2(analysis,de) + + GermanStemmer::GermanStemmer() : + sb() { + } + + TCHAR* GermanStemmer::stem(const TCHAR* term, size_t length) { + if (length <= 0) { + length = _tcslen(term); + } + + // Reset the StringBuffer. + sb.clear(); + sb.append(term, length); + + if (!isStemmable(sb.getBuffer(), sb.length())) + return sb.giveBuffer(); + + // Stemming starts here... + substitute(sb); + strip(sb); + optimize(sb); + resubstitute(sb); + removeParticleDenotion(sb); + + return sb.giveBuffer(); + } + + bool GermanStemmer::isStemmable(const TCHAR* term, size_t length) const { + if (length <= 0) { + length = _tcslen(term); + } + for (size_t c = 0; c < length; c++) { + if (_istalpha(term[c]) == 0) + return false; + } + return true; + } + + void GermanStemmer::strip(StringBuffer& buffer) + { + bool doMore = true; + while ( doMore && buffer.length() > 3 ) { + if ( ( buffer.length() + substCount > 5 ) && + buffer.substringEquals( buffer.length() - 2, buffer.length(), _T("nd"), 2 ) ) + { + buffer.deleteChars( buffer.length() - 2, buffer.length() ); + } + else if ( ( buffer.length() + substCount > 4 ) && + buffer.substringEquals( buffer.length() - 2, buffer.length(), _T("em"), 2 ) ) { + buffer.deleteChars( buffer.length() - 2, buffer.length() ); + } + else if ( ( buffer.length() + substCount > 4 ) && + buffer.substringEquals( buffer.length() - 2, buffer.length(), _T("er"), 2 ) ) { + buffer.deleteChars( buffer.length() - 2, buffer.length() ); + } + else if ( buffer.charAt( buffer.length() - 1 ) == _T('e') ) { + buffer.deleteCharAt( buffer.length() - 1 ); + } + else if ( buffer.charAt( buffer.length() - 1 ) == _T('s') ) { + buffer.deleteCharAt( buffer.length() - 1 ); + } + else if ( buffer.charAt( buffer.length() - 1 ) == _T('n') ) { + buffer.deleteCharAt( buffer.length() - 1 ); + } + // "t" occurs only as suffix of verbs. + else if ( buffer.charAt( buffer.length() - 1 ) == _T('t') ) { + buffer.deleteCharAt( buffer.length() - 1 ); + } + else { + doMore = false; + } + } + } + + void GermanStemmer::optimize(StringBuffer& buffer) { + // Additional step for female plurals of professions and inhabitants. + if ( buffer.length() > 5 && buffer.substringEquals( buffer.length() - 5, buffer.length(), _T("erin*"), 5 ) ) { + buffer.deleteCharAt( buffer.length() -1 ); + strip( buffer ); + } + // Additional step for irregular plural nouns like "Matrizen -> Matrix". + if ( buffer.charAt( buffer.length() - 1 ) == ( _T('z') ) ) { + buffer.setCharAt( buffer.length() - 1, _T('x') ); + } + } + + void GermanStemmer::removeParticleDenotion(StringBuffer& buffer) { + if ( buffer.length() > 4 ) { + for ( size_t c = 0; c < buffer.length() - 3; c++ ) { + if ( buffer.substringEquals( c, c + 4, _T("gege"), 4 ) ) { + buffer.deleteChars( c, c + 2 ); + return; + } + } + } + } + + void GermanStemmer::substitute(StringBuffer& buffer) { + substCount = 0; + + for ( size_t i = 0; i < buffer.length(); i++ ) { +#ifdef _UCS2 + TCHAR c = buffer.charAt(i); +#else + unsigned char c = buffer.charAt(i); +#endif + // Replace the second char of a pair of the equal characters with an asterisk + if ( i > 0 && c == buffer.charAt ( i - 1 ) ) { + buffer.setCharAt( i, _T('*') ); + } + // Substitute Umlauts. + else if ( c == 0xe4 ) { + buffer.setCharAt( i, _T('a') ); + } + else if ( c == 0xf6 ) { + buffer.setCharAt( i, _T('o') ); + } + else if ( c == 0xfc ) { + buffer.setCharAt( i, _T('u') ); + } + // Fix bug so that 'ß' at the end of a word is replaced. + else if ( c == 0xdf ) { + buffer.setCharAt( i, _T('s') ); + buffer.insert( i + 1, _T('s') ); + substCount++; + } + // Take care that at least one character is left left side from the current one + if ( i < buffer.length() - 1 ) { + // Masking several common character combinations with an token + if ( ( i < buffer.length() - 2 ) && c == _T('s') && + buffer.charAt( i + 1 ) == _T('c') && buffer.charAt( i + 2 ) == _T('h') ) + { + buffer.setCharAt( i, _T('$') ); + buffer.deleteChars( i + 1, i + 3 ); + substCount += 2; + } + else if ( c == _T('c') && buffer.charAt( i + 1 ) == _T('h') ) { + buffer.setCharAt( i, 0xa7 ); // section sign in UTF-16 + buffer.deleteCharAt( i + 1 ); + substCount++; + } + else if ( c == _T('e') && buffer.charAt( i + 1 ) == _T('i') ) { + buffer.setCharAt( i, _T('%') ); + buffer.deleteCharAt( i + 1 ); + substCount++; + } + else if ( c == _T('i') && buffer.charAt( i + 1 ) == _T('e') ) { + buffer.setCharAt( i, _T('&') ); + buffer.deleteCharAt( i + 1 ); + substCount++; + } + else if ( c == _T('i') && buffer.charAt( i + 1 ) == _T('g') ) { + buffer.setCharAt( i, _T('#') ); + buffer.deleteCharAt( i + 1 ); + substCount++; + } + else if ( c == _T('s') && buffer.charAt( i + 1 ) == _T('t') ) { + buffer.setCharAt( i, _T('!') ); + buffer.deleteCharAt( i + 1 ); + substCount++; + } + } + } + } + + void GermanStemmer::resubstitute(StringBuffer& buffer) { + for ( size_t i = 0; i < buffer.length(); i++ ) { +#ifdef _UCS2 + TCHAR c = buffer.charAt(i); +#else + unsigned char c = buffer.charAt(i); +#endif + if ( c == _T('*') ) { + buffer.setCharAt( i, buffer.charAt( i - 1 ) ); + } + else if ( c == _T('$') ) { + buffer.setCharAt( i, 's' ); + buffer.insert( i + 1, _T("ch"), 2 ); + } + else if ( c == 0xa7 ) { // section sign in UTF-16 + buffer.setCharAt( i, _T('c') ); + buffer.insert( i + 1, _T('h') ); + } + else if ( c == _T('%') ) { + buffer.setCharAt( i, _T('e') ); + buffer.insert( i + 1, _T('i') ); + } + else if ( c == _T('&') ) { + buffer.setCharAt( i, _T('i') ); + buffer.insert( i + 1, _T('e') ); + } + else if ( c == _T('#') ) { + buffer.setCharAt( i, _T('i') ); + buffer.insert( i + 1, _T('g') ); + } + else if ( c == _T('!') ) { + buffer.setCharAt( i, _T('s') ); + buffer.insert( i + 1, _T('t') ); + } + } + } diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/analysis/de/GermanStemmer.h b/Pods/BRCLucene/src/contribs-lib/CLucene/analysis/de/GermanStemmer.h new file mode 100644 index 0000000..5743e94 --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/analysis/de/GermanStemmer.h @@ -0,0 +1,98 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2010 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_de_GermanStemmer +#define _lucene_analysis_de_GermanStemmer + +CL_CLASS_DEF(util,StringBuffer) + +CL_NS_DEF2(analysis,de) + +/** + * A stemmer for German words. The algorithm is based on the report + * "A Fast and Simple Stemming Algorithm for German Words" by Jörg + * Caumanns (joerg.caumanns at isst.fhg.de). + */ +class CLUCENE_CONTRIBS_EXPORT GermanStemmer +{ +private: + + /** + * Buffer for the terms while stemming them. + */ + CL_NS(util)::StringBuffer sb; + + /** + * Amount of characters that are removed with substitute() while stemming. + */ + int substCount; + +public: + + /** + */ + GermanStemmer(); + + /** + * Stemms the given term to an unique discriminator. + * + * @param term The term that should be stemmed. + * @return Discriminator for term + */ + TCHAR* stem(const TCHAR* term, size_t length = -1); + +private: + + /** + * Checks if a term could be stemmed. + * + * @return true if, and only if, the given term consists in letters. + */ + bool isStemmable(const TCHAR* term, size_t length = -1) const; + + /** + * suffix stripping (stemming) on the current term. The stripping is reduced + * to the seven "base" suffixes "e", "s", "n", "t", "em", "er" and * "nd", + * from which all regular suffixes are build of. The simplification causes + * some overstemming, and way more irregular stems, but still provides unique. + * discriminators in the most of those cases. + * The algorithm is context free, except of the length restrictions. + */ + void strip(CL_NS(util)::StringBuffer& buffer); + + /** + * Does some optimizations on the term. This optimisations are + * contextual. + */ + void optimize(CL_NS(util)::StringBuffer& buffer); + + /** + * Removes a particle denotion ("ge") from a term. + */ + void removeParticleDenotion(CL_NS(util)::StringBuffer& buffer); + + /** + * Do some substitutions for the term to reduce overstemming: + * + * - Substitute Umlauts with their corresponding vowel: äöü -> aou, + * "ß" is substituted by "ss" + * - Substitute a second char of a pair of equal characters with + * an asterisk: ?? -> ?* + * - Substitute some common character combinations with a token: + * sch/ch/ei/ie/ig/st -> $/§/%/&/#/! + */ + void substitute(CL_NS(util)::StringBuffer& buffer); + + /** + * Undoes the changes made by substitute(). That are character pairs and + * character combinations. Umlauts will remain as their corresponding vowel, + * as "ß" remains as "ss". + */ + void resubstitute(CL_NS(util)::StringBuffer& buffer); +}; + +CL_NS_END2 +#endif diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/Encoder.cpp b/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/Encoder.cpp new file mode 100644 index 0000000..9541c35 --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/Encoder.cpp @@ -0,0 +1,19 @@ +/** + * Copyright 2002-2004 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/_ApiHeader.h" +#include "Encoder.h" + diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/Encoder.h b/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/Encoder.h new file mode 100644 index 0000000..b91ab29 --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/Encoder.h @@ -0,0 +1,56 @@ +/** + * Copyright 2002-2004 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 _lucene_search_highlight_encoder_ +#define _lucene_search_highlight_encoder_ + + +CL_NS_DEF2(search,highlight) + +/** + * Encodes original text. The Encoder works with the Formatter to generate the output. + * + */ +class CLUCENE_CONTRIBS_EXPORT Encoder:LUCENE_BASE +{ +public: + /** Virtual destructor */ + virtual ~Encoder(){ + } + + /** + * @param originalText The section of text being output + */ + virtual TCHAR* encodeText(TCHAR* originalText) = 0; +}; + +/** + * Simple {@link Encoder} implementation that does not modify the output + * @author Nicko Cadell + * + */ +class DefaultEncoder: public Encoder +{ +public: + TCHAR* encodeText(TCHAR* originalText) + { + return STRDUP_TtoT(originalText); + } +}; + + +CL_NS_END2 + +#endif diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/Formatter.cpp b/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/Formatter.cpp new file mode 100644 index 0000000..88b8a0e --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/Formatter.cpp @@ -0,0 +1,18 @@ +/** + * Copyright 2002-2004 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/_ApiHeader.h" +#include "Formatter.h" diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/Formatter.h b/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/Formatter.h new file mode 100644 index 0000000..39c3315 --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/Formatter.h @@ -0,0 +1,49 @@ +/** + * Copyright 2002-2004 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 _lucene_search_highlight_formatter_ +#define _lucene_search_highlight_formatter_ + +CL_NS_DEF2(search,highlight) +class TokenGroup; + +/** + * Processes terms found in the original text, typically by applying some form + * of mark-up to highlight terms in HTML search results pages. + * + */ +class CLUCENE_CONTRIBS_EXPORT Formatter:LUCENE_BASE +{ +public: + + /** Virtual destructor */ + virtual ~Formatter(){ + } + + /** + * @param originalText The section of text being considered for markup + * @param tokenGroup contains one or several overlapping Tokens along with + * their scores and positions. + */ + virtual TCHAR* highlightTerm(const TCHAR* originalTermText, const TokenGroup* tokenGroup) = 0; +}; + +CL_NS_END2 + +#endif + + + diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/Fragmenter.cpp b/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/Fragmenter.cpp new file mode 100644 index 0000000..5d174b4 --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/Fragmenter.cpp @@ -0,0 +1,19 @@ +/** + * Copyright 2002-2004 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/_ApiHeader.h" +#include "Fragmenter.h" + diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/Fragmenter.h b/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/Fragmenter.h new file mode 100644 index 0000000..5a1b8c4 --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/Fragmenter.h @@ -0,0 +1,52 @@ +/** + * Copyright 2002-2004 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 _lucene_search_highlight_fragmenter_ +#define _lucene_search_highlight_fragmenter_ + + +CL_CLASS_DEF(analysis, Token) + +CL_NS_DEF2(search,highlight) + +/** + * Implements the policy for breaking text into multiple fragments for consideration + * by the {@link Highlighter} class. A sophisticated implementation may do this on the basis + * of detecting end of sentences in the text. + */ +class CLUCENE_CONTRIBS_EXPORT Fragmenter:LUCENE_BASE +{ +public: + /** Virtual destructor */ + virtual ~Fragmenter(){ + } + + /** + * Initializes the Fragmenter + * @param originalText + */ + virtual void start(const TCHAR* originalText) = 0; + + /** + * Test to see if this token from the stream should be held in a new TextFragment + * @param nextToken + */ + virtual bool isNewFragment(const CL_NS(analysis)::Token * nextToken) = 0; +}; + +CL_NS_END2 + +#endif diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/HighlightScorer.h b/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/HighlightScorer.h new file mode 100644 index 0000000..ed73998 --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/HighlightScorer.h @@ -0,0 +1,63 @@ +/** + * Copyright 2002-2004 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 _lucene_search_highlight_highlighterscorer_ +#define _lucene_search_highlight_highlighterscorer_ + + +CL_CLASS_DEF(analysis, Token) +//#include "TextFragment.h" + +CL_NS_DEF2(search,highlight) +class TextFragment; + +/** + * Adds to the score for a fragment based on its tokens + */ +class CLUCENE_CONTRIBS_EXPORT HighlightScorer:LUCENE_BASE +{ +public: + virtual ~HighlightScorer(){ + } + + /** + * called when a new fragment is started for consideration + * @param newFragment + */ + virtual void startFragment(TextFragment* newFragment) = 0; + + /** + * Called for each token in the current fragment + * @param token The token to be scored + * @return a score which is passed to the Highlighter class to influence the mark-up of the text + * (this return value is NOT used to score the fragment) + */ + virtual float_t getTokenScore(CL_NS(analysis)::Token* token) = 0; + + + /** + * Called when the highlighter has no more tokens for the current fragment - the scorer returns + * the weighting it has derived for the most recent fragment, typically based on the tokens + * passed to getTokenScore(). + * + */ + virtual float_t getFragmentScore() = 0; +}; + +CL_NS_END2 +#endif + + diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/Highlighter.cpp b/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/Highlighter.cpp new file mode 100644 index 0000000..f8571a5 --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/Highlighter.cpp @@ -0,0 +1,527 @@ +/** + * Copyright 2002-2004 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/_ApiHeader.h" +#include "Highlighter.h" +#include "TokenGroup.h" +#include "Encoder.h" +#include "Scorer.h" +#include "Formatter.h" +#include "HighlightScorer.h" +#include "Fragmenter.h" +#include "TextFragment.h" +#include "SimpleFragmenter.h" +#include "SimpleHTMLFormatter.h" +#include "CLucene/analysis/AnalysisHeader.h" +#include "CLucene/util/PriorityQueue.h" +#include "CLucene/util/StringBuffer.h" +#include "CLucene/util/CLStreams.h" + +CL_NS_DEF2(search,highlight) +CL_NS_USE(analysis) +CL_NS_USE(util) + + class FragmentQueue : public CL_NS(util)::PriorityQueue > + { + public: + FragmentQueue(int32_t size) + { + initialize(size, true); + } + + protected: + bool lessThan(TextFragment * fragA, TextFragment * fragB) + { + if (fragA->getScore() == fragB->getScore()) + return fragA->getFragNum() > fragB->getFragNum(); + else + return fragA->getScore() < fragB->getScore(); + } + }; + + + Highlighter::Highlighter(HighlightScorer * fragmentScorer): + delete_textFragmenter(true), + delete_fragmentScorer(false), + delete_formatter(true), + delete_encoder(true) + { + maxDocBytesToAnalyze = DEFAULT_MAX_DOC_BYTES_TO_ANALYZE; + + _textFragmenter = _CLNEW SimpleFragmenter(); + _fragmentScorer = fragmentScorer; + _formatter = _CLNEW SimpleHTMLFormatter(); + _encoder = _CLNEW DefaultEncoder(); + } + + Highlighter::Highlighter(Formatter * formatter, HighlightScorer * fragmentScorer): + delete_textFragmenter(true), + delete_fragmentScorer(false), + delete_formatter(false), + delete_encoder(true) + { + maxDocBytesToAnalyze = DEFAULT_MAX_DOC_BYTES_TO_ANALYZE; + + _textFragmenter = _CLNEW SimpleFragmenter(); + _fragmentScorer = fragmentScorer; + _formatter = formatter; + _encoder = _CLNEW DefaultEncoder(); + } + + Highlighter::Highlighter(Formatter * formatter, Encoder* encoder, HighlightScorer * fragmentScorer): + delete_textFragmenter(true), + delete_fragmentScorer(false), + delete_formatter(false), + delete_encoder(false) + { + maxDocBytesToAnalyze = DEFAULT_MAX_DOC_BYTES_TO_ANALYZE; + _textFragmenter = _CLNEW SimpleFragmenter(); + _fragmentScorer = fragmentScorer; + _formatter = formatter; + _encoder = encoder; + } + + Highlighter::~Highlighter() + { + if ( delete_textFragmenter ) + _CLDELETE ( _textFragmenter ); + + if ( delete_fragmentScorer ) + _CLDELETE(_fragmentScorer); + + if( delete_formatter ) + _CLDELETE(_formatter); + + if ( delete_encoder ) + _CLDELETE(_encoder); + } + + TCHAR* Highlighter::getBestFragment(TokenStream * tokenStream, const TCHAR* text) + { + TCHAR** results = getBestFragments(tokenStream,text, 1); + TCHAR* result = 0; + + if (results[0] != NULL ) + result = stringDuplicate(results[0]); + + _CLDELETE_CARRAY_ALL(results); + + return result; + } + + /** + * Highlights chosen terms in a text, extracting the most relevant section. + * This is a convenience method that calls + * {@link #getBestFragment(TokenStream, const TCHAR*)} + * + * @param analyzer the analyzer that will be used to split text + * into chunks + * @param text text to highlight terms in + * @param fieldName Name of field used to influence analyzer's tokenization policy + * + * @return highlighted text fragment or NULL if no terms found + */ + TCHAR* Highlighter::getBestFragment(Analyzer* analyzer, const TCHAR* fieldName, const TCHAR* text) + { + TokenStream* tokenStream = analyzer->tokenStream(fieldName, _CLNEW StringReader(text)); + return getBestFragment(tokenStream, text); + } + + TCHAR** Highlighter::getBestFragments( + TokenStream * tokenStream, + const TCHAR* text, + int32_t maxNumFragments) + { + maxNumFragments = cl_max((int32_t)1, maxNumFragments); //sanity check + + StringBuffer buffer; + TextFragment** frags = getBestTextFragments(&buffer,tokenStream,text, true,maxNumFragments); + + //Get text + std::vector fragTexts; + for (uint32_t i=0; frags[i]!=NULL; i++) + { + TextFragment* f = frags[i]; + if ((f != NULL) && (f->getScore() > 0)) + { + fragTexts.push_back(f->toString(&buffer)); + } + _CLDELETE(f); + } + + _CLDELETE_ARRAY(frags); + + size_t l = fragTexts.size(); + TCHAR** ret = _CL_NEWARRAY(TCHAR*,l+1); + for ( size_t j=0;j 0) + { + result.append(separator); + } + result.append(sections[i]); + } + + _CLDELETE_CARRAY_ALL(sections); + return result.toString(); + } + + TextFragment** Highlighter::getBestTextFragments( + StringBuffer* writeTo, + TokenStream * tokenStream, + const TCHAR* text, + bool mergeContiguousFragments, + int32_t maxNumFragments) + { + CLArrayList docFrags(false); + TextFragment* currentFrag = _CLNEW TextFragment(writeTo->length(), docFrags.size()); + _fragmentScorer->startFragment(currentFrag); + docFrags.push_back(currentFrag); + + FragmentQueue fragQueue(maxNumFragments); + + try + { + int32_t startOffset; + int32_t endOffset; + int32_t lastEndOffset = 0; + int len; + _textFragmenter->start(text); + TCHAR substringBuffer[LUCENE_MAX_WORD_LEN+1]; + + TokenGroup* tokenGroup=_CLNEW TokenGroup(); + + TCHAR buffer[LUCENE_MAX_FIELD_LEN+1]; + Token token; + while ( tokenStream->next(&token) ) + { + if((tokenGroup->getNumTokens()>0)&&(tokenGroup->isDistinct(&token))){ + //the current token is distinct from previous tokens - + // markup the cached token group info + startOffset = tokenGroup->getStartOffset(); + endOffset = tokenGroup->getEndOffset(); + + len = cl_min(endOffset-startOffset,LUCENE_MAX_WORD_LEN); + _tcsncpy(substringBuffer,text+startOffset,len); + substringBuffer[len]=_T('\0'); + + TCHAR* encoded = _encoder->encodeText(substringBuffer); + TCHAR* markedUpText=_formatter->highlightTerm(encoded, tokenGroup); + _CLDELETE_CARRAY(encoded); + + //store any whitespace etc from between this and last group + if (startOffset > lastEndOffset){ + len = cl_min(startOffset-lastEndOffset,LUCENE_MAX_FIELD_LEN); + _tcsncpy(buffer,text+lastEndOffset,len); + buffer[len]=_T('\0'); + + TCHAR* encoded = _encoder->encodeText(buffer); + writeTo->append(encoded); + _CLDELETE_CARRAY(encoded); + } + writeTo->append(markedUpText); + lastEndOffset=endOffset; + tokenGroup->clear(); + _CLDELETE_CARRAY(markedUpText); + + //check if current token marks the start of a new fragment + if (_textFragmenter->isNewFragment(&token)) + { + currentFrag->setScore(_fragmentScorer->getFragmentScore()); + //record stats for a new fragment + currentFrag->setTextEndPos( writeTo->length() ); + currentFrag =_CLNEW TextFragment(writeTo->length(), docFrags.size()); + _fragmentScorer->startFragment(currentFrag); + docFrags.push_back(currentFrag); + } + } + + // does query contain current token? + float_t score=_fragmentScorer->getTokenScore(&token); + //TCHAR* highlightedTerm = _formatter->highlightTerm(&substringBuffer, token->termText(), score, startOffset); + //newText->append(highlightedTerm); + //_CLDELETE_CARRAY(highlightedTerm); + //_CLDELETE(token); + + tokenGroup->addToken(&token,_fragmentScorer->getTokenScore(&token)); + + if(lastEndOffset>maxDocBytesToAnalyze) + { + break; + } + } + currentFrag->setScore(_fragmentScorer->getFragmentScore()); + + if(tokenGroup->getNumTokens()>0) + { + //flush the accumulated text (same code as in above loop) + startOffset = tokenGroup->getStartOffset(); + endOffset = tokenGroup->getEndOffset(); + + len = cl_min(endOffset-startOffset,LUCENE_MAX_WORD_LEN); + _tcsncpy(substringBuffer,text+startOffset,len); + substringBuffer[len]=_T('\0'); + + TCHAR* encoded = _encoder->encodeText(substringBuffer); + TCHAR* markedUpText=_formatter->highlightTerm(encoded, tokenGroup); + _CLDELETE_CARRAY(encoded); + + //store any whitespace etc from between this and last group + if (startOffset > lastEndOffset){ + int len = startOffset-lastEndOffset; + if ( len > LUCENE_MAX_FIELD_LEN ) + len = LUCENE_MAX_FIELD_LEN; + _tcsncpy(buffer,text+lastEndOffset,len); + buffer[len]=_T('\0'); + + TCHAR* encoded = _encoder->encodeText(buffer); + writeTo->append(encoded); + _CLDELETE_CARRAY(encoded); + } + writeTo->append(markedUpText); + lastEndOffset=endOffset; + + _CLDELETE_CARRAY(markedUpText); + } + + // append text after end of last token + //if (lastEndOffset < (int32_t)_tcslen(text)) + //newText->append(text+lastEndOffset); + + currentFrag->setTextEndPos(writeTo->length()); + + //sort the most relevant sections of the text + while (docFrags.size() > 0) { + //for (TextFragmentList::iterator i = docFrags.begin(); i != docFrags.end(); i++) + //{ + currentFrag = (TextFragment*) docFrags[0]; + docFrags.remove(0); + + //If you are running with a version of Lucene before 11th Sept 03 + // you do not have PriorityQueue.insert() - so uncomment the code below + + /*if (currentFrag->getScore() >= minScore) + { + fragQueue.put(currentFrag); + if (fragQueue.size() > maxNumFragments) + { // if hit queue overfull + _CLLDELETE(fragQueue.pop()); // remove lowest in hit queue + minScore = ((TextFragment *) fragQueue.top())->getScore(); // reset minScore + } + + + } else { + _CLDELETE(currentFrag); + }*/ + + //The above code caused a problem as a result of Christoph Goller's 11th Sept 03 + //fix to PriorityQueue. The correct method to use here is the new "insert" method + // USE ABOVE CODE IF THIS DOES NOT COMPILE! + if ( !fragQueue.insert(currentFrag) ) + _CLDELETE(currentFrag); + + //todo: check this + } + + //return the most relevant fragments + int32_t fragsLen = fragQueue.size(); + TextFragment** frags = _CL_NEWARRAY(TextFragment*,fragsLen+1); + for ( int32_t i=0;i fragTexts; + for (int32_t i = 0; i < fragsLen; i++) + { + TextFragment* tf = frags[i]; + if ((tf != NULL) && (tf->getScore() > 0)) + fragTexts.push_back(tf); + else + _CLDELETE(tf); + } + _CLDELETE_ARRAY(frags); + frags = _CL_NEWARRAY(TextFragment*,fragTexts.size()+1); + fragTexts.toArray_nullTerminated(frags); + } + + _CLDELETE(tokenGroup); + //_CLDELETE(newText); + return frags; + + } + _CLFINALLY( + if (tokenStream) + { + try + { + tokenStream->close(); + } + catch (...) + { + } + } + ) + return NULL; + } + + + void Highlighter::_mergeContiguousFragments(TextFragment** frag, int32_t fragsLen) + { + bool mergingStillBeingDone; + if ( frag[0] != NULL ) + do + { + mergingStillBeingDone = false; //initialise loop control flag + //for each fragment, scan other frags looking for contiguous blocks + for (int32_t i=0; ifollows(frag[x])) + { + frag1 = frag[x]; + frag1Num = x; + frag2 = frag[i]; + frag2Num = i; + } + else if (frag[x]->follows(frag[i])) + { + frag1 = frag[i]; + frag1Num = i; + frag2 = frag[x]; + frag2Num = x; + } + //merging required.. + if (frag1 != NULL) + { + if (frag1->getScore() > frag2->getScore()) + { + bestScoringFragNum = frag1Num; + worstScoringFragNum = frag2Num; + } + else + { + bestScoringFragNum = frag2Num; + worstScoringFragNum = frag1Num; + } + frag1->merge(frag2); + frag[worstScoringFragNum]= NULL; + mergingStillBeingDone = true; + frag[bestScoringFragNum]=frag1; + _CLDELETE(frag2); + } + } + } + } + while (mergingStillBeingDone); + } + + int32_t Highlighter::getMaxDocBytesToAnalyze() + { + return maxDocBytesToAnalyze; + } + + void Highlighter::setMaxDocBytesToAnalyze(int32_t byteCount) + { + maxDocBytesToAnalyze = byteCount; + } + + Fragmenter * Highlighter::getTextFragmenter() + { + return _textFragmenter; + } + + void Highlighter::setTextFragmenter(Fragmenter * fragmenter) + { + if ( delete_textFragmenter ){ + _CLDELETE(_textFragmenter); + delete_textFragmenter = false; + } + _textFragmenter = fragmenter; + } + + HighlightScorer * Highlighter::getFragmentScorer() + { + return _fragmentScorer; + } + + + void Highlighter::setFragmentScorer(HighlightScorer * scorer) + { + if ( delete_fragmentScorer ){ + delete_fragmentScorer = false; + _CLDELETE(scorer); + } + _fragmentScorer = scorer; + } + + + Encoder* Highlighter::getEncoder() + { + return _encoder; + } + void Highlighter::setEncoder(Encoder* encoder) + { + if ( delete_encoder ){ + _CLDELETE(encoder); + delete_encoder = false; + } + this->_encoder = encoder; + } + + + +CL_NS_END2 diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/Highlighter.h b/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/Highlighter.h new file mode 100644 index 0000000..99f3f8e --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/Highlighter.h @@ -0,0 +1,226 @@ +/** + * Copyright 2002-2004 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 _lucene_search_highlight_highlighter_ +#define _lucene_search_highlight_highlighter_ + + + +CL_CLASS_DEF(util, StringBuffer) +//#include "CLucene/util/VoidList.h" +CL_CLASS_DEF2(search,highlight,Formatter) +CL_CLASS_DEF2(search,highlight,Encoder) +CL_CLASS_DEF2(search,highlight,HighlightScorer) +CL_CLASS_DEF2(search,highlight,Fragmenter) +CL_CLASS_DEF2(search,highlight,TextFragment) +CL_CLASS_DEF(analysis, TokenStream) +CL_CLASS_DEF(analysis, Analyzer) + +//#include "HighlightScorer.h" +//#include "SimpleFragmenter.h" +//#include "TextFragment.h" + +CL_NS_DEF2(search,highlight) + +/** +* Class used to markup highlighted terms found in the best sections of a +* text, using configurable {@link Fragmenter}, {@link Scorer}, {@link Formatter}, +* and tokenizers. +* {@link Encoder} and tokenizers. +*/ +class CLUCENE_CONTRIBS_EXPORT Highlighter :LUCENE_BASE +{ +private: + int32_t maxDocBytesToAnalyze; + + Formatter * _formatter; + bool delete_formatter; + + Encoder* _encoder; + bool delete_encoder; + + Fragmenter * _textFragmenter; + bool delete_textFragmenter; + + HighlightScorer * _fragmentScorer; + bool delete_fragmentScorer; + + /** Improves readability of a score-sorted list of TextFragments by merging any fragments + * that were contiguous in the original text into one larger fragment with the correct order. + * This will leave a "null" in the array entry for the lesser scored fragment. + * + * @param frag An array of document fragments in descending score + */ + void _mergeContiguousFragments(TextFragment** frag, int32_t fragsLen); + +public: + LUCENE_STATIC_CONSTANT(int32_t, DEFAULT_MAX_DOC_BYTES_TO_ANALYZE=50*1024); + + /** + * Constructs a Highlighter object with the provided scorer. The HighlightScorer object is owned + * by the Highlighter object, and it will freed in the destructor. + */ + Highlighter(HighlightScorer * fragmentScorer); + + Highlighter(Formatter * formatter, HighlightScorer * fragmentScorer); + + Highlighter(Formatter * formatter, Encoder* encoder, HighlightScorer * fragmentScorer); + + + /** + * Destructor for Highlighter. It deletes the owned HighlightScorer, formatter and textFragmenter. + */ + ~Highlighter(); + + /** + * Highlights chosen terms in a text, extracting the most relevant section. + * The document text is analysed in chunks to record hit statistics + * across the document. After accumulating stats, the fragment with the highest score + * is returned + * + * @param tokenStream a stream of tokens identified in the text parameter, including offset information. + * This is typically produced by an analyzer re-parsing a document's + * text. Some work may be done on retrieving TokenStreams more efficently + * by adding support for storing original text position data in the Lucene + * index but this support is not currently available (as of Lucene 1.4 rc2). + * @param text text to highlight terms in + * + * @return highlighted text fragment or null if no terms found + */ + TCHAR* getBestFragment(CL_NS(analysis)::TokenStream * tokenStream, const TCHAR* text); + + /** + * Highlights chosen terms in a text, extracting the most relevant section. + * This is a convenience method that calls + * {@link #getBestFragment(TokenStream, const TCHAR*)} + * + * @param analyzer the analyzer that will be used to split text + * into chunks + * @param text text to highlight terms in + * @param fieldName Name of field used to influence analyzer's tokenization policy + * + * @return highlighted text fragment or null if no terms found + */ + TCHAR* getBestFragment(CL_NS(analysis)::Analyzer* analyzer, const TCHAR* fieldName, const TCHAR* text); + + /** + * Highlights chosen terms in a text, extracting the most relevant sections. + * This is a convenience method that calls + * {@link #getBestFragments(TokenStream, const TCHAR*, int)} + * + * @param analyzer the analyzer that will be used to split text + * into chunks + * @param text text to highlight terms in + * @param maxNumFragments the maximum number of fragments. + * + * @return highlighted text fragments (between 0 and maxNumFragments number of fragments) + */ + TCHAR** getBestFragments( + CL_NS(analysis)::Analyzer* analyzer, + const TCHAR* text, + int32_t maxNumFragments); + + /** + * Highlights chosen terms in a text, extracting the most relevant sections. + * The document text is analysed in chunks to record hit statistics + * across the document. After accumulating stats, the fragments with the highest scores + * are returned as an array of strings in order of score (contiguous fragments are merged into + * one in their original order to improve readability) + * + * @param text text to highlight terms in + * @param maxNumFragments the maximum number of fragments. + * + * @return highlighted text fragments (between 0 and maxNumFragments number of fragments) + */ + TCHAR** getBestFragments( + CL_NS(analysis)::TokenStream * tokenStream, + const TCHAR* text, + int32_t maxNumFragments); + + /** + * Low level api to get the most relevant (formatted) sections of the document. + * This method has been made public to allow visibility of score information held in TextFragment objects. + * Thanks to Jason Calabrese for help in redefining the interface. + * @param tokenStream + * @param text + * @param maxNumFragments + * @param mergeContiguousFragments + */ + TextFragment** getBestTextFragments( + CL_NS(util)::StringBuffer* writeTo, + CL_NS(analysis)::TokenStream * tokenStream, + const TCHAR* text, + bool mergeContiguousFragments, + int32_t maxNumFragments); + + /** + * Highlights terms in the text , extracting the most relevant sections + * and concatenating the chosen fragments with a separator (typically "..."). + * The document text is analysed in chunks to record hit statistics + * across the document. After accumulating stats, the fragments with the highest scores + * are returned in order as "separator" delimited strings. + * + * @param text text to highlight terms in + * @param maxNumFragments the maximum number of fragments. + * @param separator the separator used to intersperse the document fragments (typically "...") + * + * @return highlighted text + */ + TCHAR* getBestFragments( + CL_NS(analysis)::TokenStream * tokenStream, + const TCHAR* text, + int32_t maxNumFragments, + const TCHAR* separator); + + /** + * @return the maximum number of bytes to be tokenized per doc + */ + int32_t getMaxDocBytesToAnalyze(); + + /** + * @param byteCount the maximum number of bytes to be tokenized per doc + * (This can improve performance with large documents) + */ + void setMaxDocBytesToAnalyze(int32_t byteCount); + + /** + */ + Fragmenter * getTextFragmenter(); + + /** + * @param fragmenter + */ + void setTextFragmenter(Fragmenter * fragmenter); + + /** + * @return Object used to score each text fragment + */ + HighlightScorer * getFragmentScorer(); + + /** + * @param HighlightScorer + */ + void setFragmentScorer(HighlightScorer * scorer); + + Encoder* getEncoder(); + void setEncoder(Encoder* encoder); +}; + + +CL_NS_END2 + +#endif + diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/QueryScorer.cpp b/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/QueryScorer.cpp new file mode 100644 index 0000000..3ae1722 --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/QueryScorer.cpp @@ -0,0 +1,118 @@ +/** + * Copyright 2002-2004 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/_ApiHeader.h" +#include "QueryScorer.h" +#include "WeightedTerm.h" +#include "QueryTermExtractor.h" +#include "CLucene/analysis/AnalysisHeader.h" + +CL_NS_DEF2(search,highlight) +CL_NS_USE(index) +CL_NS_USE(analysis) + + QueryScorer::QueryScorer(const Query * query): + _termsToFind(false,true), + _uniqueTermsInFragment(true) + { + WeightedTerm** _weighted_terms = QueryTermExtractor::getTerms(query); + initialize(_weighted_terms); + _CLDELETE_ARRAY(_weighted_terms); + } + QueryScorer::~QueryScorer() + { + } + +/* QueryScorer(Query* query, CL_NS(index)::IndexReader* reader, const TCHAR* fieldName) + { + WeightedTerm** _weighted_terms = QueryTermExtractor.getIdfWeightedTerms(query, reader, fieldName); + initialize(_weighted_terms); + }*/ + + + QueryScorer::QueryScorer(WeightedTerm** weightedTerms) + { + initialize(weightedTerms); + } + + void QueryScorer::initialize(WeightedTerm** weightedTerms) + { + _currentTextFragment = NULL; + _totalScore = 0; + _maxTermWeight = 0; + + // Copy external weighted terms + int i=0; + while ( weightedTerms[i] != NULL ){ + const WeightedTerm* existingTerm=_termsToFind.get(weightedTerms[i]->getTerm()); + if( (existingTerm==NULL) ||(existingTerm->getWeight()getWeight()) ) + { + //if a term is defined more than once, always use the highest scoring weight + WeightedTerm* term = weightedTerms[i]; + _termsToFind.put(term->getTerm(), term); + + _maxTermWeight=cl_max(_maxTermWeight,weightedTerms[i]->getWeight()); + }else + _CLDELETE(weightedTerms[i]); + + i++; + } + } + + void QueryScorer::startFragment(TextFragment * newFragment) + { + _uniqueTermsInFragment.clear(); + _currentTextFragment=newFragment; + _totalScore=0; + + } + + float_t QueryScorer::getTokenScore(Token * token) + { + const TCHAR* termText=token->termBuffer(); + + const WeightedTerm* queryTerm = _termsToFind.get(termText); + if(queryTerm==NULL) + { + //not a query term - return + return 0; + } + //found a query term - is it unique in this doc? + if(_uniqueTermsInFragment.find((TCHAR*)termText)==_uniqueTermsInFragment.end()) + { + _totalScore+=queryTerm->getWeight(); + TCHAR* owned_term = stringDuplicate(termText); + _uniqueTermsInFragment.insert(owned_term); + } + return queryTerm->getWeight(); + } + + /** + * + * @return The highest weighted term (useful for passing to GradientFormatter to set + * top end of coloring scale. + */ + float_t QueryScorer::getMaxTermWeight() + { + return _maxTermWeight; + } + + + float_t QueryScorer::getFragmentScore(){ + return _totalScore; + } + +CL_NS_END2 diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/QueryScorer.h b/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/QueryScorer.h new file mode 100644 index 0000000..c89a6cf --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/QueryScorer.h @@ -0,0 +1,114 @@ +/** + * Copyright 2002-2004 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 _lucene_search_highlight_queryscorer_ +#define _lucene_search_highlight_queryscorer_ + + +CL_CLASS_DEF(index, IndexReader) +CL_CLASS_DEF(search, Query) + +//#include "CLucene/search/SearchHeader.h" +//#include "TextFragment.h" + +#include "HighlightScorer.h" + +CL_NS_DEF2(search,highlight) + +class WeightedTerm; +class QueryTermExtractor; +class TextFragment; + +/** + * {@link Scorer} implementation which scores text fragments by the number of unique query terms found. + * This class uses the {@link QueryTermExtractor} class to process determine the query terms and + * their boosts to be used. + */ +//TODO: provide option to boost score of fragments near beginning of document +// based on fragment.getFragNum() +class CLUCENE_CONTRIBS_EXPORT QueryScorer : public HighlightScorer +{ +private: + TextFragment * _currentTextFragment; + CL_NS(util)::CLHashSet _uniqueTermsInFragment; + float_t _totalScore; + float_t _maxTermWeight; + CL_NS(util)::CLHashMap > _termsToFind; + +public: + /** + * + * @param query a Lucene query (ideally rewritten using query.rewrite + * before being passed to this class and the searcher) + */ + QueryScorer(const Query * query); + + /** + * + * @param query a Lucene query (ideally rewritten using query.rewrite + * before being passed to this class and the searcher) + * @param reader used to compute IDF which can be used to a) score selected fragments better + * b) use graded highlights eg set font color intensity + * @param fieldName the field on which Inverse Document Frequency (IDF) calculations are based + */ + QueryScorer(const Query* query, CL_NS(index)::IndexReader* reader, const TCHAR* fieldName); + + QueryScorer(WeightedTerm** weightedTerms); + + ~QueryScorer(); + + /* (non-Javadoc) + * @see org.apache.lucene.search.highlight.FragmentScorer#startFragment(org.apache.lucene.search.highlight.TextFragment) + */ + void startFragment(TextFragment* newFragment); + + /* (non-Javadoc) + * @see org.apache.lucene.search.highlight.FragmentScorer#scoreToken(org.apache.lucene.analysis.Token) + */ + float_t getTokenScore(CL_NS(analysis)::Token * token); + + /* (non-Javadoc) + * @see org.apache.lucene.search.highlight.FragmentScorer#endFragment(org.apache.lucene.search.highlight.TextFragment) + */ + float_t getFragmentScore(); + + /* (non-Javadoc) + * @see org.apache.lucene.search.highlight.FragmentScorer#allFragmentsProcessed() + */ + void allFragmentsProcessed(); + + /** + * + * @return The highest weighted term (useful for passing to GradientFormatter to set + * top end of coloring scale. + */ + float_t getMaxTermWeight(); + +private: + void initialize(WeightedTerm** weightedTerms); + +}; + +CL_NS_END2 + +#endif + diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/QueryTermExtractor.cpp b/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/QueryTermExtractor.cpp new file mode 100644 index 0000000..8c0f3f2 --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/QueryTermExtractor.cpp @@ -0,0 +1,136 @@ +/** + * Copyright 2002-2004 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/_ApiHeader.h" +#include "QueryTermExtractor.h" + +#include "CLucene/search/Query.h" +#include "CLucene/search/BooleanQuery.h" +#include "CLucene/search/TermQuery.h" +#include "CLucene/search/PhraseQuery.h" +#include "CLucene/index/IndexReader.h" +#include "CLucene/index/Term.h" + +CL_NS_DEF2(search,highlight) +CL_NS_USE(index) + + WeightedTerm** QueryTermExtractor::getTerms(const Query * query, bool prohibited, const TCHAR* fieldName) + { + WeightedTermList terms(false); + getTerms(query,&terms,prohibited,fieldName); + + // Return extracted terms + WeightedTerm** ret = _CL_NEWARRAY(WeightedTerm*,terms.size()+1); + terms.toArray_nullTerminated(ret); + + return ret; + } + + void QueryTermExtractor::getTerms(const Query * query, WeightedTermList * terms, bool prohibited, const TCHAR* fieldName) + { + if (query->instanceOf( BooleanQuery::getClassName() )) + { + getTermsFromBooleanQuery((BooleanQuery *) query, terms, prohibited, fieldName); + } +// FilteredQuery not implemented yet +// else if (query->instanceOf( FilteredQuery::getClassName() )) +// getTermsFromFilteredQuery((FilteredQuery *) query, terms); + else + { + TermSet nonWeightedTerms; + query->extractTerms(&nonWeightedTerms); + for (TermSet::iterator iter = nonWeightedTerms.begin(); iter != nonWeightedTerms.end(); iter++) + { + Term * term = (Term *)(*iter); + if ( fieldName == NULL || term->field() == fieldName ) + { + // adapted from mailing list 2014-05-03 ([CLucene-dev] FW: Memory leak in QueryTermExtractor::getTerms) + // optimistic insert, assume most of the case element is not in so prevent searching first + WeightedTerm* pWeigthedTerm = _CLNEW WeightedTerm(query->getBoost(), term->text()); + if ( !terms->insert(pWeigthedTerm).second ) + _CLDELETE(pWeigthedTerm); + } + _CLLDECDELETE( term ); + } + } + } + + /** + * Extracts all terms texts of a given Query into an array of WeightedTerms + * + * @param query Query to extract term texts from + * @param reader used to compute IDF which can be used to a) score selected fragments better + * b) use graded highlights eg chaning intensity of font color + * @param fieldName the field on which Inverse Document Frequency (IDF) calculations are based + * @return an array of the terms used in a query, plus their weights. + */ + WeightedTerm** QueryTermExtractor::getIdfWeightedTerms(const Query* query, IndexReader* reader, const TCHAR* fieldName) + { + WeightedTermList terms(true); + getTerms(query,&terms,false,fieldName); + + int32_t totalNumDocs=reader->numDocs(); + + WeightedTermList::iterator itr = terms.begin(); + while ( itr != terms.end() ) + { + try + { + Term* term = _CLNEW Term(fieldName,(*itr)->getTerm()); + int32_t docFreq=reader->docFreq(term); + _CLDECDELETE(term); + + //IDF algorithm taken from DefaultSimilarity class + float_t idf=(float_t)(log(totalNumDocs/(float_t)(docFreq+1)) + 1.0); + (*itr)->setWeight((*itr)->getWeight() * idf); + }catch (CLuceneError& e){ + if ( e.number()!=CL_ERR_IO ) + throw e; + } + + itr++; + } + + // Return extracted terms + WeightedTerm** ret = _CL_NEWARRAY(WeightedTerm*,terms.size()+1); + terms.toArray_nullTerminated(ret); + + return ret; + } + + void QueryTermExtractor::getTermsFromBooleanQuery(const BooleanQuery * query, WeightedTermList * terms, bool prohibited, const TCHAR* fieldName) + { + uint32_t numClauses = query->getClauseCount(); + BooleanClause** queryClauses = _CL_NEWARRAY(BooleanClause*,numClauses); + query->getClauses(queryClauses); + + for (uint32_t i = 0; i < numClauses; i++) + { + if (prohibited || !queryClauses[i]->prohibited){ + Query* qry = queryClauses[i]->getQuery(); + getTerms(qry, terms, prohibited, fieldName); + } + } + _CLDELETE_ARRAY(queryClauses); + } + +// FilteredQuery not implemented yet +// void QueryTermExtractor::getTermsFromFilteredQuery(const FilteredQuery * query, WeightedTermList * terms, bool prohibited) +// { +// getTerms(query->getQuery(), terms, prohibited); +// } + +CL_NS_END2 diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/QueryTermExtractor.h b/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/QueryTermExtractor.h new file mode 100644 index 0000000..b66b720 --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/QueryTermExtractor.h @@ -0,0 +1,82 @@ +/** + * Copyright 2002-2004 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 _lucene_search_highlight_querytermextractor_ +#define _lucene_search_highlight_querytermextractor_ + +CL_CLASS_DEF(search, Query) +CL_CLASS_DEF(search, BooleanQuery) +CL_CLASS_DEF(search, PhraseQuery) +CL_CLASS_DEF(search, TermQuery) +CL_CLASS_DEF(index, IndexReader) +CL_CLASS_DEF(index, Term) + +#include "WeightedTerm.h" + +CL_NS_DEF2(search,highlight) + +/** + * Utility class used to extract the terms used in a query, plus any weights. + * This class will not find terms for MultiTermQuery, RangeQuery and PrefixQuery classes + * so the caller must pass a rewritten query (see Query.rewrite) to obtain a list of + * expanded terms. + * + */ +class CLUCENE_CONTRIBS_EXPORT QueryTermExtractor +{ + QueryTermExtractor(){ + } +public: + + /** + * Extracts all terms texts of a given Query into an returned array of WeightedTerms + * + * @param query Query to extract term texts from + * @param prohibited true to extract "prohibited" terms, too + * @param fieldName field name used for filtering query terms, MUST be interned prior to this call + * @return an array of the terms used in a query, plus their weights.Memory owned by the caller + */ + static WeightedTerm** getTerms(const Query *query, bool prohibited = false, const TCHAR* fieldName = NULL); + + /** + * Extracts all terms texts of a given Query into an array of WeightedTerms + * + * @param query Query to extract term texts from + * @param reader used to compute IDF which can be used to a) score selected fragments better + * b) use graded highlights eg chaning intensity of font color + * @param fieldName the field on which Inverse Document Frequency (IDF) calculations are based + * @return an array of the terms used in a query, plus their weights. + */ + static WeightedTerm** getIdfWeightedTerms(const Query* query, CL_NS(index)::IndexReader* reader, const TCHAR* fieldName); + + /** + * Extracts all terms texts of a given Query into given array of WeightedTerms + * + * @param query Query to extract term texts from + * @param prohibited true to extract "prohibited" terms, too + * @param fieldName field name used for filtering query terms, MUST be interned prior to this call + * @return an array of the terms used in a query, plus their weights.Memory owned by the caller + */ + static void getTerms(const Query * query, WeightedTermList*, bool prohibited = false, const TCHAR* fieldName = NULL); + + static void getTermsFromBooleanQuery(const BooleanQuery * query, WeightedTermList* terms, bool prohibited, const TCHAR* fieldName); +// static void getTermsFromFilteredQuery(const FilteredQuery * query, WeightedTermList* terms); +}; + +CL_NS_END2 + + + +#endif diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/Scorer.h b/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/Scorer.h new file mode 100644 index 0000000..7d558ca --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/Scorer.h @@ -0,0 +1,61 @@ +#ifndef _lucene_search_highlight_scorer_h_ +#define _lucene_search_highlight_scorer_h_ + +/** + * Copyright 2002-2004 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 + +CL_NS_USE(analysis) + +/** + * Adds to the score for a fragment based on its tokens + */ +namespace lucene { namespace search { namespace highlight { + + class TextFragment; + +class CLUCENE_CONTRIBS_EXPORT Scorer +{ +public: + virtual ~Scorer(){}; + /** + * called when a new fragment is started for consideration + * @param newFragment + */ + virtual void startFragment(TextFragment * newFragment) = 0; + + /** + * Called for each token in the current fragment + * @param token The token to be scored + * @return a score which is passed to the TermHighlighter class to influence the mark-up of the text + * (this return value is NOT used to score the fragment) + */ + virtual float_t getTokenScore(Token * token) = 0; + + + /** + * Called when the highlighter has no more tokens for the current fragment - the scorer will typically + * call setScore() on the fragment passed in startFragment to record total info + * + */ + virtual float_t getFragmentScore() = 0; + +}; + +}}} + +#endif diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/SimpleFragmenter.cpp b/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/SimpleFragmenter.cpp new file mode 100644 index 0000000..e366eba --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/SimpleFragmenter.cpp @@ -0,0 +1,55 @@ +/** + * Copyright 2002-2004 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/_ApiHeader.h" +#include "SimpleFragmenter.h" +#include "CLucene/analysis/AnalysisHeader.h" + +CL_NS_DEF2(search,highlight) +CL_NS_USE(analysis) + +SimpleFragmenter::SimpleFragmenter(int32_t fragmentSize) + : _fragmentSize(fragmentSize), _currentNumFrags(0) +{ +} +SimpleFragmenter::~SimpleFragmenter(){ +} + +void SimpleFragmenter::start(const TCHAR*) +{ + _currentNumFrags=1; +} + +bool SimpleFragmenter::isNewFragment(const Token * token) +{ + bool isNewFrag= token->endOffset()>=(_fragmentSize*_currentNumFrags); + if (isNewFrag) { + _currentNumFrags++; + } + return isNewFrag; +} + +int32_t SimpleFragmenter::getFragmentSize() const +{ + return _fragmentSize; +} + +void SimpleFragmenter::setFragmentSize(int32_t size) +{ + _fragmentSize = size; +} + +CL_NS_END2 diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/SimpleFragmenter.h b/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/SimpleFragmenter.h new file mode 100644 index 0000000..1d3170d --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/SimpleFragmenter.h @@ -0,0 +1,70 @@ +/** + * Copyright 2002-2004 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 _lucene_search_highlight_simplefragmenter_ +#define _lucene_search_highlight_simplefragmenter_ + + +#include "Fragmenter.h" + +CL_NS_DEF2(search,highlight) + +/** + * {@link Fragmenter} implementation which breaks text up into same-size + * fragments with no concerns over spotting sentence boundaries. + */ + +class CLUCENE_CONTRIBS_EXPORT SimpleFragmenter:public Fragmenter +{ +private: + LUCENE_STATIC_CONSTANT(int32_t, DEFAULT_FRAGMENT_SIZE =100 ); + int32_t _currentNumFrags; + int32_t _fragmentSize; + +public: + /** + * + * @param fragmentSize size in bytes of each fragment + */ + SimpleFragmenter(int32_t fragmentSize = DEFAULT_FRAGMENT_SIZE); + + ~SimpleFragmenter(); + + /* (non-Javadoc) + * @see org.apache.lucene.search.highlight.TextFragmenter#start(const TCHAR*) + */ + void start(const TCHAR* originalText); + + /* (non-Javadoc) + * @see org.apache.lucene.search.highlight.TextFragmenter#isNewFragment(org.apache.lucene.analysis.Token) + */ + bool isNewFragment(const CL_NS(analysis)::Token * token); + + /** + * @return size in bytes of each fragment + */ + int32_t getFragmentSize() const; + + /** + * @param size size in bytes of each fragment + */ + void setFragmentSize(int32_t size); + +}; + +CL_NS_END2 + +#endif diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/SimpleHTMLEncoder.cpp b/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/SimpleHTMLEncoder.cpp new file mode 100644 index 0000000..cd684f4 --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/SimpleHTMLEncoder.cpp @@ -0,0 +1,83 @@ +/** + * Copyright 2002-2004 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/_ApiHeader.h" +#include "SimpleHTMLEncoder.h" +#include "Formatter.h" +#include "CLucene/util/StringBuffer.h" + +CL_NS_DEF2(search,highlight) + +SimpleHTMLEncoder::SimpleHTMLEncoder(void) +{ +} + +SimpleHTMLEncoder::~SimpleHTMLEncoder(void) +{ +} + +TCHAR* SimpleHTMLEncoder::encodeText(TCHAR* originalText) +{ + return htmlEncode(originalText); +} + +TCHAR* SimpleHTMLEncoder::htmlEncode(TCHAR* plainText) +{ + size_t plainTextLen = _tcslen(plainText); + if (plainText == NULL || plainTextLen == 0) + { + return STRDUP_TtoT(_T("")); + } + + CL_NS(util)::StringBuffer result(plainTextLen); + + for (int32_t index=0; index': + result.append(_T(">")); + break; + + default: + if (ch < 128) + result.appendChar(ch); + else{ + result.append(_T("&#")); + result.appendInt(ch); + result.append(_T(";")); + } + } + } + + return result.toString(); +} + +CL_NS_END2 diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/SimpleHTMLEncoder.h b/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/SimpleHTMLEncoder.h new file mode 100644 index 0000000..8a6080a --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/SimpleHTMLEncoder.h @@ -0,0 +1,45 @@ +/** + * Copyright 2002-2004 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 _lucene_search_highlight_simplehtmlencoder_ +#define _lucene_search_highlight_simplehtmlencoder_ + + +#include "Encoder.h" + +CL_NS_DEF2(search,highlight) + +/** + * Simple {@link Encoder} implementation to escape text for HTML output + * + */ +class CLUCENE_CONTRIBS_EXPORT SimpleHTMLEncoder:public Encoder +{ +public: + SimpleHTMLEncoder(void); + ~SimpleHTMLEncoder(void); + + TCHAR* encodeText(TCHAR* originalText); + + /** + * Encode string into HTML + */ + static TCHAR* htmlEncode(TCHAR* plainText) ; +}; + +CL_NS_END2 + +#endif diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/SimpleHTMLFormatter.cpp b/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/SimpleHTMLFormatter.cpp new file mode 100644 index 0000000..8c7d089 --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/SimpleHTMLFormatter.cpp @@ -0,0 +1,56 @@ +/** + * Copyright 2002-2004 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/_ApiHeader.h" +#include "SimpleHTMLFormatter.h" +#include "TokenGroup.h" +#include "CLucene/util/StringBuffer.h" + + +CL_NS_DEF2(search,highlight) +CL_NS_USE(util) + +SimpleHTMLFormatter::SimpleHTMLFormatter(const TCHAR* preTag, const TCHAR* postTag): + _preTag(stringDuplicate(preTag)), + _postTag(stringDuplicate(postTag)) +{ +} + +SimpleHTMLFormatter::SimpleHTMLFormatter() +{ + _preTag = stringDuplicate(_T("")); + _postTag = stringDuplicate(_T("")); +} + +SimpleHTMLFormatter::~SimpleHTMLFormatter() +{ + _CLDELETE_CARRAY(_preTag); + _CLDELETE_CARRAY(_postTag); +} + +TCHAR* SimpleHTMLFormatter::highlightTerm(const TCHAR* originalText, const TokenGroup* tokenGroup) +{ + if(tokenGroup->getTotalScore()>0){ + StringBuffer sb; + sb.append(_preTag); + sb.append(originalText); + sb.append(_postTag); + return sb.toString(); + } + return stringDuplicate(originalText); +} + +CL_NS_END2 diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/SimpleHTMLFormatter.h b/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/SimpleHTMLFormatter.h new file mode 100644 index 0000000..69b110d --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/SimpleHTMLFormatter.h @@ -0,0 +1,59 @@ +/** + * Copyright 2002-2004 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 _lucene_search_highlight_simplehtmlformatter_ +#define _lucene_search_highlight_simplehtmlformatter_ + + +#include "Formatter.h" + +CL_NS_DEF2(search,highlight) + +/** + * Simple {@link Formatter} implementation to highlight terms with a pre and post tag + * + */ +class CLUCENE_CONTRIBS_EXPORT SimpleHTMLFormatter :public Formatter +{ +private: + TCHAR* _preTag; + TCHAR* _postTag; + +public: + ~SimpleHTMLFormatter(); + + + SimpleHTMLFormatter(const TCHAR* preTag, const TCHAR* postTag); + + /** + * Default constructor uses HTML: <B> tags to markup terms + * + **/ + SimpleHTMLFormatter(); + + + /** + * Returns the original text enclosed in _preTag and _postTag, if the score is greater + * than 0. Otherwise, it returns the original text. + * It doesn't use the stemmed text nor the startOffset. + * It allocates memory for the returned text, and it has to be freed by the caller. + */ + TCHAR* highlightTerm(const TCHAR* originalText, const TokenGroup* tokenGroup); +}; + +CL_NS_END2 + +#endif diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/TextFragment.cpp b/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/TextFragment.cpp new file mode 100644 index 0000000..306ad22 --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/TextFragment.cpp @@ -0,0 +1,78 @@ +/** + * Copyright 2002-2004 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/_ApiHeader.h" +#include "TextFragment.h" +#include "CLucene/util/StringBuffer.h" + +CL_NS_DEF2(search,highlight) +CL_NS_USE(util) + + TextFragment::TextFragment(int32_t textStartPos, int32_t fragNum) + { + _textStartPos = textStartPos; + _textEndPos=0; + _fragNum = fragNum; + } + TextFragment::~TextFragment(){ + } + + void TextFragment::setScore(float_t score) + { + _score=score; + } + + float_t TextFragment::getScore() const + { + return _score; + } + + /** + * @param frag2 Fragment to be merged into this one + */ + void TextFragment::merge(const TextFragment * frag2) + { + _textEndPos = frag2->_textEndPos; + _score=cl_max(_score,frag2->_score); + } + /** + * @param fragment + * @return true if this fragment follows the one passed + */ + bool TextFragment::follows(const TextFragment * fragment) const + { + return _textStartPos == fragment->_textEndPos; + } + + /** + * @return the fragment sequence number + */ + int32_t TextFragment::getFragNum() const + { + return _fragNum; + } + + /* Returns the marked-up text for this text fragment + */ + TCHAR* TextFragment::toString(StringBuffer* buffer) { + TCHAR* ret = _CL_NEWARRAY(TCHAR,_textEndPos-_textStartPos+1); + _tcsncpy(ret,buffer->getBuffer()+_textStartPos,_textEndPos-_textStartPos); + ret[_textEndPos-_textStartPos]=_T('\0'); + + return ret; + } + +CL_NS_END2 diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/TextFragment.h b/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/TextFragment.h new file mode 100644 index 0000000..9af8634 --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/TextFragment.h @@ -0,0 +1,87 @@ +/** + * Copyright 2002-2004 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 _lucene_search_highlight_textfragment_ +#define _lucene_search_highlight_textfragment_ + + +CL_CLASS_DEF(util, StringBuffer) +//#include "CLucene/util/VoidList.h" + +CL_NS_DEF2(search,highlight) + +/** + * Low-level class used to record information about a section of a document + * with a score. + */ +class CLUCENE_CONTRIBS_EXPORT TextFragment:LUCENE_BASE +{ + int32_t _fragNum; + int32_t _textStartPos; + int32_t _textEndPos; + float_t _score; + +public: + TextFragment(int32_t textStartPos, int32_t fragNum); + ~TextFragment(); + + void setScore(float_t score); + float_t getScore() const; + + int32_t textEndPos(){ return _textEndPos; } + void setTextEndPos(int32_t val){ _textEndPos = val; } + + /** + * @param frag2 Fragment to be merged into this one + */ + void merge(const TextFragment * frag2); + + /** + * @param fragment + * @return true if this fragment follows the one passed + */ + bool follows(const TextFragment * fragment) const; + + /** + * @return the fragment sequence number + */ + int32_t getFragNum() const; + + /* Returns the marked-up text for this text fragment + */ + TCHAR* toString(CL_NS(util)::StringBuffer* buffer); + + /** + * Compare weighted terms, according to the term text. + * @todo Do we have to take boost factors into account + */ + class Compare:LUCENE_BASE, public CL_NS(util)::Compare::_base // + { + public: + //todo: this should be more efficient, but will be using a hash table soon, anyway + bool operator()( TextFragment* t1, TextFragment* t2 ) const; + size_t operator()( TextFragment* t ) const; + }; +}; + +/** + * Text fragment list. + */ +//typedef CL_NS(util)::CLSetList > TextFragmentList; + +CL_NS_END2 + +#endif diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/TokenGroup.cpp b/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/TokenGroup.cpp new file mode 100644 index 0000000..8fa1367 --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/TokenGroup.cpp @@ -0,0 +1,123 @@ +/** + * Copyright 2002-2004 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/_ApiHeader.h" +#include "TokenGroup.h" +#include "CLucene/analysis/AnalysisHeader.h" + +CL_NS_DEF2(search,highlight) +CL_NS_USE(analysis) + +TokenGroup::TokenGroup(void) +{ + numTokens=0; + startOffset=0; + endOffset=0; + tokens = new Token[MAX_NUM_TOKENS_PER_GROUP]; +} + +TokenGroup::~TokenGroup(void) +{ + delete[] tokens; +} + +void TokenGroup::addToken(Token* token, float_t score) +{ + if(numTokens < MAX_NUM_TOKENS_PER_GROUP) + { + if(numTokens==0) + { + startOffset=token->startOffset(); + endOffset=token->endOffset(); + } + else + { + startOffset=cl_min(startOffset,token->startOffset()); + endOffset=cl_max(endOffset,token->endOffset()); + } + tokens[numTokens].set(token->termBuffer(),token->startOffset(),token->endOffset(),token->type());; + scores[numTokens]=score; + numTokens++; + } +} + +CL_NS(analysis)::Token& TokenGroup::getToken(int32_t index) +{ + return tokens[index]; +} + +float_t TokenGroup::getScore(int32_t index) const +{ + return scores[index]; +} + +int32_t TokenGroup::getEndOffset() const +{ + return endOffset; +} + +int32_t TokenGroup::getNumTokens() const +{ + return numTokens; +} + +int32_t TokenGroup::getStartOffset() const +{ + return startOffset; +} + +float_t TokenGroup::getTotalScore() const +{ + float_t total=0; + for (int32_t i = 0; i < numTokens; i++) + { + total+=scores[i]; + } + return total; +} + +/*void addToken(CL_NS(analysis)::Token* token, float_t score) +{ + if(numTokens < MAX_NUM_TOKENS_PER_GROUP) + { + if(numTokens==0) + { + startOffset=token->startOffset(); + endOffset=token->endOffset(); + } + else + { + startOffset=min(startOffset,token->startOffset()); + endOffset=max(endOffset,token->endOffset()); + } + tokens[numTokens]=token; + scores[numTokens]=score; + numTokens++; + } +}*/ + +bool TokenGroup::isDistinct(CL_NS(analysis)::Token* token) const +{ + return token->startOffset() > endOffset; +} + + +void TokenGroup::clear() +{ + numTokens=0; +} + +CL_NS_END2 diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/TokenGroup.h b/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/TokenGroup.h new file mode 100644 index 0000000..3fa82b7 --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/TokenGroup.h @@ -0,0 +1,83 @@ +/** + * Copyright 2002-2004 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 _lucene_search_highlight_tokengroup_ +#define _lucene_search_highlight_tokengroup_ + + +CL_CLASS_DEF(analysis, Token) + +CL_NS_DEF2(search,highlight) + +/** + * One, or several overlapping tokens, along with the score(s) and the + * scope of the original text + */ +class CLUCENE_CONTRIBS_EXPORT TokenGroup: LUCENE_BASE +{ + LUCENE_STATIC_CONSTANT(int32_t,MAX_NUM_TOKENS_PER_GROUP=50); + CL_NS(analysis)::Token* tokens; + float_t scores[MAX_NUM_TOKENS_PER_GROUP]; + int32_t numTokens; + int32_t startOffset; + int32_t endOffset; + +public: + TokenGroup(void); + ~TokenGroup(void); + + void addToken(CL_NS(analysis)::Token* token, float_t score); + + /** + * + * @param index a value between 0 and numTokens -1 + * @return the "n"th token + */ + CL_NS(analysis)::Token& getToken(int32_t index); + + /** + * + * @param index a value between 0 and numTokens -1 + * @return the "n"th score + */ + float_t getScore(int32_t index) const; + + /** + * @return the end position in the original text + */ + int32_t getEndOffset() const; + + /** + * @return the number of tokens in this group + */ + int32_t getNumTokens() const; + + /** + * @return the start position in the original text + */ + int32_t getStartOffset() const; + + /** + * @return all tokens' scores summed up + */ + float_t getTotalScore() const; + + bool isDistinct(CL_NS(analysis)::Token* token) const; + void clear(); +}; + +CL_NS_END2 +#endif diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/TokenSources.cpp b/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/TokenSources.cpp new file mode 100644 index 0000000..18c1f0c --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/TokenSources.cpp @@ -0,0 +1,229 @@ +/** + * Copyright 2002-2004 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/_ApiHeader.h" +#include "TokenSources.h" + +#include "CLucene/util/VoidList.h" +#include "CLucene/util/CLStreams.h" +#include "CLucene/index/IndexReader.h" +#include "CLucene/index/TermVector.h" +#include "CLucene/document/Document.h" + +CL_NS_DEF2(search,highlight) +CL_NS_USE(analysis) +CL_NS_USE(index) +CL_NS_USE(util) + + +///Compares the Token for their order +class TokenOrderCompare:LUCENE_BASE, public CL_NS(util)::Compare::_base // +{ +public: + bool operator()( Token* t1, Token* t2 ) const{ + if(t1->startOffset()>t2->startOffset()) + return false; + if(t1->startOffset()startOffset()) + return true; + return true; +} +}; + +TokenSources::TokenSources(void) +{ +} + +TokenSources::~TokenSources(void) +{ +} + +TokenStream* TokenSources::getAnyTokenStream(IndexReader* reader,int32_t docId, TCHAR* field, Analyzer* analyzer) +{ + TokenStream* ts=NULL; + + TermFreqVector* tfv=reader->getTermFreqVector(docId,field); + if(tfv!=NULL) + { + TermPositionVector* tmp = tfv->__asTermPositionVector(); + if ( tmp != NULL ) + ts=getTokenStream(tmp); + } + //No token info stored so fall back to analyzing raw content + if(ts==NULL) + { + ts=getTokenStream(reader,docId,field,analyzer); + } + return ts; +} + + +TokenStream* TokenSources::getTokenStream(TermPositionVector* tpv) +{ + //assumes the worst and makes no assumptions about token position sequences. + return getTokenStream(tpv,false); +} + +TokenStream* TokenSources::getTokenStream(TermPositionVector* tpv, bool tokenPositionsGuaranteedContiguous) +{ + //an object used to iterate across an array of tokens + /*class StoredTokenStream extends TokenStream + { + Token tokens[]; + int32_t currentToken=0; + StoredTokenStream(Token tokens[]) + { + this.tokens=tokens; + } + public Token next() + { + if(currentToken>=tokens.length) + { + return NULL; + } + return tokens[currentToken++]; + } + } */ + //code to reconstruct the original sequence of Tokens + const ArrayBase* terms = tpv->getTerms(); + const ArrayBase* freq=tpv->getTermFrequencies(); + + size_t totalTokens=0; + for (int32_t i = 0; i < freq->length; i++) + totalTokens+=freq->values[i]; + + Token** tokensInOriginalOrder=NULL; + CLSetList* unsortedTokens = NULL; + for (int32_t t = 0; t < freq->length; t++) + { + const ArrayBase* offsets=tpv->getOffsets(t); + if(offsets==NULL) + return NULL; + + const ArrayBase* pos=NULL; + if(tokenPositionsGuaranteedContiguous) + { + //try get the token position info to speed up assembly of tokens into sorted sequence + pos=tpv->getTermPositions(t); + } + + if ( tokensInOriginalOrder != NULL ) + tokensInOriginalOrder = _CL_NEWARRAY(Token*, totalTokens+1); + + if(pos==NULL) + { + //tokens NOT stored with positions or not guaranteed contiguous - must add to list and sort later + if(unsortedTokens==NULL) + unsortedTokens=_CLNEW CLSetList(false); + for (int32_t tp=0; tp < offsets->length; tp++) + { + unsortedTokens->insert(_CLNEW Token(terms->values[t], + (*offsets)[tp]->getStartOffset(), + (*offsets)[tp]->getEndOffset())); + } + } + else + { + //We have positions stored and a guarantee that the token position information is contiguous + + // This may be fast BUT wont work if Tokenizers used which create >1 token in same position or + // creates jumps in position numbers - this code would fail under those circumstances + + //tokens stored with positions - can use this to index straight into sorted array + for (int32_t tp = 0; tp < pos->length; tp++) + { + tokensInOriginalOrder[(*pos)[tp]]=_CLNEW Token(terms->values[t], + (*offsets)[tp]->getStartOffset(), + (*offsets)[tp]->getEndOffset()); + } + } + } + //If the field has been stored without position data we must perform a sort + if(unsortedTokens!=NULL) + { + if ( totalTokenssize() ){ + _CLDELETE_ARRAY(tokensInOriginalOrder); + tokensInOriginalOrder = _CL_NEWARRAY(Token*,unsortedTokens->size()+1); + } + //the list has already sorted our items //todo:check that this is true... + unsortedTokens->toArray_nullTerminated(tokensInOriginalOrder); + + return _CLNEW StoredTokenStream(tokensInOriginalOrder,unsortedTokens->size()); + }else + return _CLNEW StoredTokenStream(tokensInOriginalOrder,totalTokens); +} + +TokenStream* TokenSources::getTokenStream(IndexReader* reader,int32_t docId, TCHAR* field) +{ + TermFreqVector* tfv=reader->getTermFreqVector(docId,field); + if(tfv==NULL) + { + TCHAR buf[250]; + _sntprintf(buf,250,_T("%s in doc #%d does not have any term position data stored"),field,docId); + _CLTHROWT(CL_ERR_IllegalArgument,buf); + return NULL; + } + + TermPositionVector* tmp = NULL; + tmp = tfv->__asTermPositionVector(); + + if ( tmp != NULL ){ + return getTokenStream(tmp); + }else{ + TCHAR buf[250]; + _sntprintf(buf,250,_T("%s in doc #%d does not have any term position data stored"),field,docId); + _CLTHROWT(CL_ERR_IllegalArgument,buf); + return NULL; + } +} + +//convenience method +TokenStream* TokenSources::getTokenStream(IndexReader* reader,int32_t docId, TCHAR* field,Analyzer* analyzer) +{ + CL_NS(document)::Document doc; + reader->document(docId, doc); + const TCHAR* contents=doc.get(field); + if(contents==NULL) + { + TCHAR buf[250]; + _sntprintf(buf,250,_T("Field %s in document #%d is not stored and cannot be analyzed"),field,docId); + _CLTHROWT(CL_ERR_IllegalArgument,buf); + return NULL; + } + return analyzer->tokenStream(field,_CLNEW StringReader(contents)); +} + +TokenSources::StoredTokenStream::StoredTokenStream(CL_NS(analysis)::Token** tokens, size_t len) +{ + currentToken = 0; + this->tokens=tokens; + this->length = len; +} +CL_NS(analysis)::Token* TokenSources::StoredTokenStream::next(CL_NS(analysis)::Token* token) +{ + if(currentToken>=length) + { + return NULL; + } + Token* t = tokens[currentToken++]; + + token->set(t->termBuffer(),t->startOffset(),t->endOffset(),t->type());; + return token; +} +void TokenSources::StoredTokenStream::close(){ + +} + +CL_NS_END2 diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/TokenSources.h b/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/TokenSources.h new file mode 100644 index 0000000..d1da4d5 --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/TokenSources.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_highlight_tokensources_ +#define _lucene_search_highlight_tokensources_ + +#include "CLucene/analysis/AnalysisHeader.h" +CL_CLASS_DEF(index, IndexReader) +CL_CLASS_DEF(index, TermPositionVector) +//#include "CLucene/index/IndexReader.h" +//#include "CLucene/index/TermVector.h" + +CL_NS_DEF2(search,highlight) + +class CLUCENE_CONTRIBS_EXPORT TokenSources: LUCENE_BASE +{ + //an object used to iterate across an array of tokens + class StoredTokenStream:public CL_NS(analysis)::TokenStream + { + public: + CL_NS(analysis)::Token** tokens; + size_t length; + int32_t currentToken; + StoredTokenStream(CL_NS(analysis)::Token** tokens, size_t len); + CL_NS(analysis)::Token* next(CL_NS(analysis)::Token* token); + void close(); + }; +public: + TokenSources(void); + ~TokenSources(void); + + /** + * A convenience method that tries a number of approaches to getting a token stream. + * The cost of finding there are no termVectors in the index is minimal (1000 invocations still + * registers 0 ms). So this "lazy" (flexible?) approach to coding is probably acceptable + * @param reader + * @param docId + * @param field + * @param analyzer + * @return null if field not stored correctly + * @throws IOException + */ + static CL_NS(analysis)::TokenStream* getAnyTokenStream(CL_NS(index)::IndexReader* reader,int32_t docId, TCHAR* field, CL_NS(analysis)::Analyzer* analyzer); + + static CL_NS(analysis)::TokenStream* getTokenStream(CL_NS(index)::TermPositionVector* tpv); + + /** + * Low level api. + * Returns a token stream or null if no offset info available in index. + * This can be used to feed the highlighter with a pre-parsed token stream + * + * In my tests the speeds to recreate 1000 token streams using this method are: + * - with TermVector offset only data stored - 420 milliseconds + * - with TermVector offset AND position data stored - 271 milliseconds + * (nb timings for TermVector with position data are based on a tokenizer with contiguous + * positions - no overlaps or gaps) + * The cost of not using TermPositionVector to store + * pre-parsed content and using an analyzer to re-parse the original content: + * - reanalyzing the original content - 980 milliseconds + * + * The re-analyze timings will typically vary depending on - + * 1) The complexity of the analyzer code (timings above were using a + * stemmer/lowercaser/stopword combo) + * 2) The number of other fields (Lucene reads ALL fields off the disk + * when accessing just one document field - can cost dear!) + * 3) Use of compression on field storage - could be faster cos of compression (less disk IO) + * or slower (more CPU burn) depending on the content. + * + * @param tpv + * @param tokenPositionsGuaranteedContiguous true if the token position numbers have no overlaps or gaps. If looking + * to eek out the last drops of performance, set to true. If in doubt, set to false. + */ + static CL_NS(analysis)::TokenStream* getTokenStream(CL_NS(index)::TermPositionVector* tpv, bool tokenPositionsGuaranteedContiguous); + + static CL_NS(analysis)::TokenStream* getTokenStream(CL_NS(index)::IndexReader* reader,int32_t docId, TCHAR* field); + + //convenience method + static CL_NS(analysis)::TokenStream* getTokenStream(CL_NS(index)::IndexReader* reader,int32_t docId, TCHAR* field,CL_NS(analysis)::Analyzer* analyzer); +}; + +CL_NS_END2 +#endif diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/WeightedTerm.cpp b/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/WeightedTerm.cpp new file mode 100644 index 0000000..1555469 --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/WeightedTerm.cpp @@ -0,0 +1,101 @@ +/** + * Copyright 2002-2004 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/_ApiHeader.h" +#include "WeightedTerm.h" +#include "CLucene/search/Similarity.h" +#include "CLucene/util/Misc.h" + +CL_NS_DEF2(search,highlight) + + WeightedTerm::WeightedTerm (float_t weight,const TCHAR* term) + { + _weight=weight; + _term = stringDuplicate(term); + cachedHashCode = 0; + } + + WeightedTerm::~WeightedTerm() + { + _CLDELETE_CARRAY(_term); + } + + WeightedTerm::WeightedTerm(const WeightedTerm& other) + { + _weight = other.getWeight(); + _term = STRDUP_TtoT(other.getTerm()); + } + + WeightedTerm* WeightedTerm::clone() const{ + return _CLNEW WeightedTerm(*this); + } + + /** + * @return the term value (stemmed) + */ + const TCHAR* WeightedTerm::getTerm() const + { + return _term; + } + + /** + * @return the weight associated with this term + */ + float_t WeightedTerm::getWeight() const + { + return _weight; + } + + /** + * @param term the term value (stemmed) + */ + void WeightedTerm::setTerm(TCHAR* term) + { + _CLDELETE_CARRAY(this->_term); + this->_term = STRDUP_TtoT(_term); + cachedHashCode = 0; + } + + /** + * @param weight the weight associated with this term + */ + void WeightedTerm::setWeight(float_t weight) { + _weight = weight; + cachedHashCode = 0; + } + + size_t WeightedTerm::hashCode(){ + if ( cachedHashCode == 0 ){ + cachedHashCode = ( CL_NS(util)::Misc::thashCode(this->_term) ^ CL_NS(search)::Similarity::floatToByte(_weight) ); + } + + return cachedHashCode; + } + + bool WeightedTerm::Compare::operator()( WeightedTerm* t1, WeightedTerm* t2 ) const{ + int r = _tcscmp(t1->getTerm(), t2->getTerm()); + if ( r < 0 ) + return true; + else if ( r == 0 ) + return t1->getWeight() < t2->getWeight(); + else + return false; + } + size_t WeightedTerm::Compare::operator()( WeightedTerm* t ) const{ + return t->hashCode(); + } + +CL_NS_END2 diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/WeightedTerm.h b/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/WeightedTerm.h new file mode 100644 index 0000000..0428e50 --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/WeightedTerm.h @@ -0,0 +1,79 @@ +/** + * Copyright 2002-2004 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 _lucene_search_highlight_weightedterm_ +#define _lucene_search_highlight_weightedterm_ + + +//#include "CLucene/util/VoidList.h" + +CL_NS_DEF2(search,highlight) + +/** Lightweight class to hold term and a weight value used for scoring this term + */ +class CLUCENE_CONTRIBS_EXPORT WeightedTerm:LUCENE_BASE +{ +private: + float_t _weight; // multiplier + TCHAR* _term; //stemmed form + size_t cachedHashCode; + WeightedTerm(const WeightedTerm& other); +public: + WeightedTerm (float_t weight,const TCHAR* term); + ~WeightedTerm(); + + /** + * @return the term value (stemmed) + */ + const TCHAR* getTerm() const; + + /** + * @return the weight associated with this term + */ + float_t getWeight() const ; + + /** + * @param term the term value (stemmed) + */ + void setTerm(TCHAR* term); + /** + * @param weight the weight associated with this term + */ + void setWeight(float_t weight); + + size_t hashCode(); + WeightedTerm* clone() const; + + /** + * Compare weighted terms, according to the term text. + * @todo Do we have to take boost factors into account + */ + class Compare:LUCENE_BASE, public CL_NS(util)::Compare::_base // + { + public: + //todo: this should be more efficient, but will be using a hash table soon, anyway + bool operator()( WeightedTerm* t1, WeightedTerm* t2 ) const; + size_t operator()( WeightedTerm* t ) const; + }; +}; + +/** CLHashSet of WeightedTerm */ +typedef CL_NS(util)::CLHashSet > WeightedTermList; + +CL_NS_END2 + +#endif + diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/Snowball.cpp b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/Snowball.cpp new file mode 100644 index 0000000..bef5069 --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/Snowball.cpp @@ -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. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "SnowballAnalyzer.h" +#include "SnowballFilter.h" +#include "CLucene/util/Misc.h" +#include "CLucene/util/CLStreams.h" +#include "CLucene/analysis/Analyzers.h" +#include "CLucene/analysis/standard/StandardTokenizer.h" +#include "CLucene/analysis/standard/StandardFilter.h" + +CL_NS_USE(analysis) +CL_NS_USE(util) +CL_NS_USE2(analysis,standard) + +CL_NS_DEF2(analysis,snowball) + + class SnowballAnalyzer::SavedStreams : public TokenStream { + public: + StandardTokenizer* tokenStream; + TokenStream* filteredTokenStream; + + SavedStreams():tokenStream(NULL), filteredTokenStream(NULL) {} + void close(){} + Token* next(Token* token) {return NULL;} + }; + + /** Builds the named analyzer with no stop words. */ + SnowballAnalyzer::SnowballAnalyzer(const TCHAR* language) { + this->language = STRDUP_TtoT(language); + stopSet = NULL; + } + + SnowballAnalyzer::~SnowballAnalyzer() { + SavedStreams* streams = reinterpret_cast(getPreviousTokenStream()); + if (streams != NULL) { + _CLDELETE(streams->filteredTokenStream); + _CLDELETE(streams); + } + _CLDELETE_CARRAY(language); + if (stopSet != NULL) + _CLDELETE(stopSet); + } + + /** Builds the named analyzer with the given stop words. + */ + SnowballAnalyzer::SnowballAnalyzer(const TCHAR* language, const TCHAR** stopWords) { + this->language = STRDUP_TtoT(language); + + stopSet = _CLNEW CLTCSetList(true); + StopFilter::fillStopTable(stopSet,stopWords); + } + + TokenStream* SnowballAnalyzer::tokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader) { + return this->tokenStream(fieldName,reader,false); + } + + /** Constructs a {@link StandardTokenizer} filtered by a {@link + StandardFilter}, a {@link LowerCaseFilter} and a {@link StopFilter}. */ + TokenStream* SnowballAnalyzer::tokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader, bool deleteReader) { + BufferedReader* bufferedReader = reader->__asBufferedReader(); + TokenStream* result; + + if ( bufferedReader == NULL ) + result = _CLNEW StandardTokenizer( _CLNEW FilteredBufferedReader(reader, deleteReader), true ); + else + result = _CLNEW StandardTokenizer(bufferedReader, deleteReader); + + result = _CLNEW StandardFilter(result, true); + result = _CLNEW CL_NS(analysis)::LowerCaseFilter(result, true); + if (stopSet != NULL) + result = _CLNEW CL_NS(analysis)::StopFilter(result, true, stopSet); + result = _CLNEW SnowballFilter(result, language, true); + return result; + } + + TokenStream* SnowballAnalyzer::reusableTokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader) { + SavedStreams* streams = reinterpret_cast(getPreviousTokenStream()); + + if (streams == NULL) { + streams = _CLNEW SavedStreams(); + BufferedReader* bufferedReader = reader->__asBufferedReader(); + + if (bufferedReader == NULL) + streams->tokenStream = _CLNEW StandardTokenizer(_CLNEW FilteredBufferedReader(reader, false), true); + else + streams->tokenStream = _CLNEW StandardTokenizer(bufferedReader); + + streams->filteredTokenStream = _CLNEW StandardFilter(streams->tokenStream, true); + streams->filteredTokenStream = _CLNEW LowerCaseFilter(streams->filteredTokenStream, true); + if (stopSet != NULL) + streams->filteredTokenStream = _CLNEW StopFilter(streams->filteredTokenStream, true, stopSet); + streams->filteredTokenStream = _CLNEW SnowballFilter(streams->filteredTokenStream, language, true); + setPreviousTokenStream(streams); + } else + streams->tokenStream->reset(reader); + return streams->filteredTokenStream; + } + + /** Construct the named stemming filter. + * + * @param in the input tokens to stem + * @param name the name of a stemmer + */ + SnowballFilter::SnowballFilter(TokenStream* in, const TCHAR* language, bool deleteTS): + TokenFilter(in,deleteTS) + { + TCHAR tlang[50]; + char lang[50]; + _tcsncpy(tlang,language,50); + _tcslwr(tlang); + + STRCPY_TtoA(lang,tlang,50); + stemmer = sb_stemmer_new(lang, NULL); //use utf8 encoding + + if ( stemmer == NULL ){ + _CLTHROWA(CL_ERR_IllegalArgument, "language not available for stemming\n"); //todo: richer error + } + } + + SnowballFilter::~SnowballFilter(){ + sb_stemmer_delete(stemmer); + } + + /** Returns the next input Token, after being stemmed */ + Token* SnowballFilter::next(Token* token){ + if (input->next(token) == NULL) + return NULL; + + unsigned char uctext[LUCENE_MAX_WORD_LEN]; + TCHAR tchartext[LUCENE_MAX_WORD_LEN]; + +#ifdef _UCS2 + char utf8text[LUCENE_MAX_WORD_LEN]; + + size_t len = lucene_wcstoutf8(utf8text,token->termBuffer(),LUCENE_MAX_WORD_LEN); + memcpy(uctext,utf8text,len); + uctext[len]='\0'; +#else + const char* tmp = token->termText(); + int len = token->termTextLength(); + for (int i=0;iset(tchartext,token->startOffset(), token->endOffset(), token->type()); + return token; + } + + +CL_NS_END2 diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/SnowballAnalyzer.h b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/SnowballAnalyzer.h new file mode 100644 index 0000000..5e98f92 --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/SnowballAnalyzer.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_snowball_analyser_ +#define _lucene_analysis_snowball_analyser_ + +#include "CLucene/analysis/AnalysisHeader.h" + +CL_CLASS_DEF(util,BufferedReader) +CL_NS_DEF2(analysis,snowball) + +/** Filters {@link StandardTokenizer} with {@link StandardFilter}, {@link + * LowerCaseFilter}, {@link StopFilter} and {@link SnowballFilter}. + * + * Available stemmers are listed in {@link net.sf.snowball.ext}. The name of a + * stemmer is the part of the class name before "Stemmer", e.g., the stemmer in + * {@link EnglishStemmer} is named "English". + */ +class CLUCENE_CONTRIBS_EXPORT SnowballAnalyzer: public Analyzer { + TCHAR* language; + CLTCSetList* stopSet; + class SavedStreams; + +public: + /** Builds the named analyzer with no stop words. */ + SnowballAnalyzer(const TCHAR* language=_T("english")); + + /** Builds the named analyzer with the given stop words. + */ + SnowballAnalyzer(const TCHAR* language, const TCHAR** stopWords); + + ~SnowballAnalyzer(); + + /** Constructs a {@link StandardTokenizer} filtered by a {@link + StandardFilter}, a {@link LowerCaseFilter} and a {@link StopFilter}. */ + TokenStream* tokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader); + TokenStream* tokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader, bool deleteReader); + + TokenStream* reusableTokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader); +}; + +CL_NS_END2 +#endif + diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/SnowballFilter.h b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/SnowballFilter.h new file mode 100644 index 0000000..40550e6 --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/SnowballFilter.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_analysis_snowball_filter_ +#define _lucene_analysis_snowball_filter_ + +#include "CLucene/analysis/AnalysisHeader.h" +#include "libstemmer.h" + +CL_NS_DEF2(analysis,snowball) + +/** A filter that stems words using a Snowball-generated stemmer. + * + * Available stemmers are listed in {@link net.sf.snowball.ext}. The name of a + * stemmer is the part of the class name before "Stemmer", e.g., the stemmer in + * {@link EnglishStemmer} is named "English". + * + * Note: todo: This is not thread safe... + */ +class CLUCENE_CONTRIBS_EXPORT SnowballFilter: public TokenFilter { + struct sb_stemmer * stemmer; +public: + + /** Construct the named stemming filter. + * + * @param in the input tokens to stem + * @param name the name of a stemmer + */ + SnowballFilter(TokenStream* in, const TCHAR* language, bool deleteTS); + + ~SnowballFilter(); + + /** Returns the next input Token, after being stemmed */ + Token* next(Token* token); +}; + +CL_NS_END2 +#endif diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/include/libstemmer.h b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/include/libstemmer.h new file mode 100644 index 0000000..9ca5e9c --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/include/libstemmer.h @@ -0,0 +1,82 @@ +#ifndef LIBSTEMMER_INCLUDE_LIBSTEMMER_H +#define LIBSTEMMER_INCLUDE_LIBSTEMMER_H + +/* Make header file work when included from C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +struct sb_stemmer; +typedef unsigned char sb_symbol; + +/* FIXME - should be able to get a version number for each stemming + * algorithm (which will be incremented each time the output changes). */ + +/** Returns an array of the names of the available stemming algorithms. + * Note that these are the canonical names - aliases (ie, other names for + * the same algorithm) will not be included in the list. + * The list is terminated with a null pointer. + * + * The list must not be modified in any way. + */ +const char ** sb_stemmer_list(void); + +/** Create a new stemmer object, using the specified algorithm, for the + * specified character encoding. + * + * All algorithms will usually be available in UTF-8, but may also be + * available in other character encodings. + * + * @param algorithm The algorithm name. This is either the english + * name of the algorithm, or the 2 or 3 letter ISO 639 codes for the + * language. Note that case is significant in this parameter - the + * value should be supplied in lower case. + * + * @param charenc The character encoding. NULL may be passed as + * this value, in which case UTF-8 encoding will be assumed. Otherwise, + * the argument may be one of "UTF_8", "ISO_8859_1" (ie, Latin 1), + * "CP850" (ie, MS-DOS Latin 1) or "KOI8_R" (Russian). Note that + * case is significant in this parameter. + * + * @return NULL if the specified algorithm is not recognised, or the + * algorithm is not available for the requested encoding. Otherwise, + * returns a pointer to a newly created stemmer for the requested algorithm. + * The returned pointer must be deleted by calling sb_stemmer_delete(). + * + * @note NULL will also be returned if an out of memory error occurs. + */ +struct sb_stemmer * sb_stemmer_new(const char * algorithm, const char * charenc); + +/** Delete a stemmer object. + * + * This frees all resources allocated for the stemmer. After calling + * this function, the supplied stemmer may no longer be used in any way. + * + * It is safe to pass a null pointer to this function - this will have + * no effect. + */ +void sb_stemmer_delete(struct sb_stemmer * stemmer); + +/** Stem a word. + * + * The return value is owned by the stemmer - it must not be freed or + * modified, and it will become invalid when the stemmer is called again, + * or if the stemmer is freed. + * + * The length of the return value can be obtained using sb_stemmer_length(). + * + * If an out-of-memory error occurs, this will return NULL. + */ +const sb_symbol * sb_stemmer_stem(struct sb_stemmer * stemmer, + const sb_symbol * word, int size); + +/** Get the length of the result of the last stemmed word. + * This should not be called before sb_stemmer_stem() has been called. + */ +int sb_stemmer_length(struct sb_stemmer * stemmer); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/libstemmer.h b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/libstemmer.h new file mode 100644 index 0000000..9d86b85 --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/libstemmer.h @@ -0,0 +1,79 @@ + +/* Make header file work when included from C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +struct sb_stemmer; +typedef unsigned char sb_symbol; + +/* FIXME - should be able to get a version number for each stemming + * algorithm (which will be incremented each time the output changes). */ + +/** Returns an array of the names of the available stemming algorithms. + * Note that these are the canonical names - aliases (ie, other names for + * the same algorithm) will not be included in the list. + * The list is terminated with a null pointer. + * + * The list must not be modified in any way. + */ +const char ** sb_stemmer_list(void); + +/** Create a new stemmer object, using the specified algorithm, for the + * specified character encoding. + * + * All algorithms will usually be available in UTF-8, but may also be + * available in other character encodings. + * + * @param algorithm The algorithm name. This is either the english + * name of the algorithm, or the 2 or 3 letter ISO 639 codes for the + * language. Note that case is significant in this parameter - the + * value should be supplied in lower case. + * + * @param charenc The character encoding. NULL may be passed as + * this value, in which case UTF-8 encoding will be assumed. Otherwise, + * the argument may be one of "UTF_8", "ISO_8859_1" (ie, Latin 1), + * "CP850" (ie, MS-DOS Latin 1) or "KOI8_R" (Russian). Note that + * case is significant in this parameter. + * + * @return NULL if the specified algorithm is not recognised, or the + * algorithm is not available for the requested encoding. Otherwise, + * returns a pointer to a newly created stemmer for the requested algorithm. + * The returned pointer must be deleted by calling sb_stemmer_delete(). + * + * @note NULL will also be returned if an out of memory error occurs. + */ +struct sb_stemmer * sb_stemmer_new(const char * algorithm, const char * charenc); + +/** Delete a stemmer object. + * + * This frees all resources allocated for the stemmer. After calling + * this function, the supplied stemmer may no longer be used in any way. + * + * It is safe to pass a null pointer to this function - this will have + * no effect. + */ +void sb_stemmer_delete(struct sb_stemmer * stemmer); + +/** Stem a word. + * + * The return value is owned by the stemmer - it must not be freed or + * modified, and it will become invalid when the stemmer is called again, + * or if the stemmer is freed. + * + * The length of the return value can be obtained using sb_stemmer_length(). + * + * If an out-of-memory error occurs, this will return NULL. + */ +const sb_symbol * sb_stemmer_stem(struct sb_stemmer * stemmer, + const sb_symbol * word, int size); + +/** Get the length of the result of the last stemmed word. + * This should not be called before sb_stemmer_stem() has been called. + */ +int sb_stemmer_length(struct sb_stemmer * stemmer); + +#ifdef __cplusplus +} +#endif + diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/libstemmer/libstemmer.c b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/libstemmer/libstemmer.c new file mode 100644 index 0000000..e14327f --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/libstemmer/libstemmer.c @@ -0,0 +1,94 @@ + +#include +#include +#include "../include/libstemmer.h" +#include "../runtime/api.h" +#include "modules.h" + +struct sb_stemmer { + struct SN_env * (*create)(void); + void (*close)(struct SN_env *); + int (*stem)(struct SN_env *); + + struct SN_env * env; +}; + +extern const char ** +sb_stemmer_list(void) +{ + return algorithm_names; +} + +static stemmer_encoding sb_getenc(const char * charenc) +{ + struct stemmer_encoding * encoding; + if (charenc == NULL) return ENC_UTF_8; + for (encoding = encodings; encoding->name != 0; encoding++) { + if (strcmp(encoding->name, charenc) == 0) break; + } + if (encoding->name == NULL) return ENC_UNKNOWN; + return encoding->enc; +} + +extern struct sb_stemmer * +sb_stemmer_new(const char * algorithm, const char * charenc) +{ + stemmer_encoding enc; + struct stemmer_modules * module; + struct sb_stemmer * stemmer; + + enc = sb_getenc(charenc); + if (enc == ENC_UNKNOWN) return NULL; + + for (module = modules; module->name != 0; module++) { + if (strcmp(module->name, algorithm) == 0 && module->enc == enc) break; + } + if (module->name == NULL) return NULL; + + stemmer = (struct sb_stemmer *) malloc(sizeof(struct sb_stemmer)); + if (stemmer == NULL) return NULL; + + stemmer->create = module->create; + stemmer->close = module->close; + stemmer->stem = module->stem; + + stemmer->env = stemmer->create(); + if (stemmer->env == NULL) + { + sb_stemmer_delete(stemmer); + return NULL; + } + + return stemmer; +} + +void +sb_stemmer_delete(struct sb_stemmer * stemmer) +{ + if (stemmer == 0) return; + if (stemmer->close == 0) return; + stemmer->close(stemmer->env); + stemmer->close = 0; + free(stemmer); +} + +const sb_symbol * +sb_stemmer_stem(struct sb_stemmer * stemmer, const sb_symbol * word, int size) +{ + int ret; + if (SN_set_current(stemmer->env, size, word)) + { + stemmer->env->l = 0; + return NULL; + } + ret = stemmer->stem(stemmer->env); + if (ret < 0) return NULL; + stemmer->env->p[stemmer->env->l] = 0; + return stemmer->env->p; +} + +int +sb_stemmer_length(struct sb_stemmer * stemmer) +{ + return stemmer->env->l; +} diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/libstemmer/modules.h b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/libstemmer/modules.h new file mode 100644 index 0000000..57df305 --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/libstemmer/modules.h @@ -0,0 +1,166 @@ +#ifndef LIBSTEMMER_MODULES_H +#define LIBSTEMMER_MODULES_H + +/* libstemmer/modules.h: List of stemming modules. + * + * This file is generated by mkmodules.pl from a list of module names. + * Do not edit manually. + * + * Modules included by this file are: danish, dutch, english, finnish, french, + * german, italian, norwegian, porter, portuguese, russian, spanish, swedish + */ + +#include "../src_c/stem_ISO_8859_1_danish.h" +#include "../src_c/stem_UTF_8_danish.h" +#include "../src_c/stem_ISO_8859_1_dutch.h" +#include "../src_c/stem_UTF_8_dutch.h" +#include "../src_c/stem_ISO_8859_1_english.h" +#include "../src_c/stem_UTF_8_english.h" +#include "../src_c/stem_ISO_8859_1_finnish.h" +#include "../src_c/stem_UTF_8_finnish.h" +#include "../src_c/stem_ISO_8859_1_french.h" +#include "../src_c/stem_UTF_8_french.h" +#include "../src_c/stem_ISO_8859_1_german.h" +#include "../src_c/stem_UTF_8_german.h" +#include "../src_c/stem_ISO_8859_1_italian.h" +#include "../src_c/stem_UTF_8_italian.h" +#include "../src_c/stem_ISO_8859_1_norwegian.h" +#include "../src_c/stem_UTF_8_norwegian.h" +#include "../src_c/stem_ISO_8859_1_porter.h" +#include "../src_c/stem_UTF_8_porter.h" +#include "../src_c/stem_ISO_8859_1_portuguese.h" +#include "../src_c/stem_UTF_8_portuguese.h" +#include "../src_c/stem_KOI8_R_russian.h" +#include "../src_c/stem_UTF_8_russian.h" +#include "../src_c/stem_ISO_8859_1_spanish.h" +#include "../src_c/stem_UTF_8_spanish.h" +#include "../src_c/stem_ISO_8859_1_swedish.h" +#include "../src_c/stem_UTF_8_swedish.h" + +typedef enum { + ENC_UNKNOWN, + ENC_ISO_8859_1, + ENC_KOI8_R, + ENC_UTF_8, +} stemmer_encoding; + +struct stemmer_encoding { + const char * name; + stemmer_encoding enc; +}; +static struct stemmer_encoding encodings[] = { + {"ISO_8859_1", ENC_ISO_8859_1}, + {"KOI8_R", ENC_KOI8_R}, + {"UTF_8", ENC_UTF_8}, + {0,0} +}; + +struct stemmer_modules { + const char * name; + stemmer_encoding enc; + struct SN_env * (*create)(void); + void (*close)(struct SN_env *); + int (*stem)(struct SN_env *); +}; +static struct stemmer_modules modules[] = { + {"da", ENC_ISO_8859_1, danish_ISO_8859_1_create_env, danish_ISO_8859_1_close_env, danish_ISO_8859_1_stem}, + {"da", ENC_UTF_8, danish_UTF_8_create_env, danish_UTF_8_close_env, danish_UTF_8_stem}, + {"dan", ENC_ISO_8859_1, danish_ISO_8859_1_create_env, danish_ISO_8859_1_close_env, danish_ISO_8859_1_stem}, + {"dan", ENC_UTF_8, danish_UTF_8_create_env, danish_UTF_8_close_env, danish_UTF_8_stem}, + {"danish", ENC_ISO_8859_1, danish_ISO_8859_1_create_env, danish_ISO_8859_1_close_env, danish_ISO_8859_1_stem}, + {"danish", ENC_UTF_8, danish_UTF_8_create_env, danish_UTF_8_close_env, danish_UTF_8_stem}, + {"de", ENC_ISO_8859_1, german_ISO_8859_1_create_env, german_ISO_8859_1_close_env, german_ISO_8859_1_stem}, + {"de", ENC_UTF_8, german_UTF_8_create_env, german_UTF_8_close_env, german_UTF_8_stem}, + {"deu", ENC_ISO_8859_1, german_ISO_8859_1_create_env, german_ISO_8859_1_close_env, german_ISO_8859_1_stem}, + {"deu", ENC_UTF_8, german_UTF_8_create_env, german_UTF_8_close_env, german_UTF_8_stem}, + {"dut", ENC_ISO_8859_1, dutch_ISO_8859_1_create_env, dutch_ISO_8859_1_close_env, dutch_ISO_8859_1_stem}, + {"dut", ENC_UTF_8, dutch_UTF_8_create_env, dutch_UTF_8_close_env, dutch_UTF_8_stem}, + {"dutch", ENC_ISO_8859_1, dutch_ISO_8859_1_create_env, dutch_ISO_8859_1_close_env, dutch_ISO_8859_1_stem}, + {"dutch", ENC_UTF_8, dutch_UTF_8_create_env, dutch_UTF_8_close_env, dutch_UTF_8_stem}, + {"en", ENC_ISO_8859_1, english_ISO_8859_1_create_env, english_ISO_8859_1_close_env, english_ISO_8859_1_stem}, + {"en", ENC_UTF_8, english_UTF_8_create_env, english_UTF_8_close_env, english_UTF_8_stem}, + {"eng", ENC_ISO_8859_1, english_ISO_8859_1_create_env, english_ISO_8859_1_close_env, english_ISO_8859_1_stem}, + {"eng", ENC_UTF_8, english_UTF_8_create_env, english_UTF_8_close_env, english_UTF_8_stem}, + {"english", ENC_ISO_8859_1, english_ISO_8859_1_create_env, english_ISO_8859_1_close_env, english_ISO_8859_1_stem}, + {"english", ENC_UTF_8, english_UTF_8_create_env, english_UTF_8_close_env, english_UTF_8_stem}, + {"es", ENC_ISO_8859_1, spanish_ISO_8859_1_create_env, spanish_ISO_8859_1_close_env, spanish_ISO_8859_1_stem}, + {"es", ENC_UTF_8, spanish_UTF_8_create_env, spanish_UTF_8_close_env, spanish_UTF_8_stem}, + {"esl", ENC_ISO_8859_1, spanish_ISO_8859_1_create_env, spanish_ISO_8859_1_close_env, spanish_ISO_8859_1_stem}, + {"esl", ENC_UTF_8, spanish_UTF_8_create_env, spanish_UTF_8_close_env, spanish_UTF_8_stem}, + {"fi", ENC_ISO_8859_1, finnish_ISO_8859_1_create_env, finnish_ISO_8859_1_close_env, finnish_ISO_8859_1_stem}, + {"fi", ENC_UTF_8, finnish_UTF_8_create_env, finnish_UTF_8_close_env, finnish_UTF_8_stem}, + {"fin", ENC_ISO_8859_1, finnish_ISO_8859_1_create_env, finnish_ISO_8859_1_close_env, finnish_ISO_8859_1_stem}, + {"fin", ENC_UTF_8, finnish_UTF_8_create_env, finnish_UTF_8_close_env, finnish_UTF_8_stem}, + {"finnish", ENC_ISO_8859_1, finnish_ISO_8859_1_create_env, finnish_ISO_8859_1_close_env, finnish_ISO_8859_1_stem}, + {"finnish", ENC_UTF_8, finnish_UTF_8_create_env, finnish_UTF_8_close_env, finnish_UTF_8_stem}, + {"fr", ENC_ISO_8859_1, french_ISO_8859_1_create_env, french_ISO_8859_1_close_env, french_ISO_8859_1_stem}, + {"fr", ENC_UTF_8, french_UTF_8_create_env, french_UTF_8_close_env, french_UTF_8_stem}, + {"fra", ENC_ISO_8859_1, french_ISO_8859_1_create_env, french_ISO_8859_1_close_env, french_ISO_8859_1_stem}, + {"fra", ENC_UTF_8, french_UTF_8_create_env, french_UTF_8_close_env, french_UTF_8_stem}, + {"fre", ENC_ISO_8859_1, french_ISO_8859_1_create_env, french_ISO_8859_1_close_env, french_ISO_8859_1_stem}, + {"fre", ENC_UTF_8, french_UTF_8_create_env, french_UTF_8_close_env, french_UTF_8_stem}, + {"french", ENC_ISO_8859_1, french_ISO_8859_1_create_env, french_ISO_8859_1_close_env, french_ISO_8859_1_stem}, + {"french", ENC_UTF_8, french_UTF_8_create_env, french_UTF_8_close_env, french_UTF_8_stem}, + {"ger", ENC_ISO_8859_1, german_ISO_8859_1_create_env, german_ISO_8859_1_close_env, german_ISO_8859_1_stem}, + {"ger", ENC_UTF_8, german_UTF_8_create_env, german_UTF_8_close_env, german_UTF_8_stem}, + {"german", ENC_ISO_8859_1, german_ISO_8859_1_create_env, german_ISO_8859_1_close_env, german_ISO_8859_1_stem}, + {"german", ENC_UTF_8, german_UTF_8_create_env, german_UTF_8_close_env, german_UTF_8_stem}, + {"it", ENC_ISO_8859_1, italian_ISO_8859_1_create_env, italian_ISO_8859_1_close_env, italian_ISO_8859_1_stem}, + {"it", ENC_UTF_8, italian_UTF_8_create_env, italian_UTF_8_close_env, italian_UTF_8_stem}, + {"ita", ENC_ISO_8859_1, italian_ISO_8859_1_create_env, italian_ISO_8859_1_close_env, italian_ISO_8859_1_stem}, + {"ita", ENC_UTF_8, italian_UTF_8_create_env, italian_UTF_8_close_env, italian_UTF_8_stem}, + {"italian", ENC_ISO_8859_1, italian_ISO_8859_1_create_env, italian_ISO_8859_1_close_env, italian_ISO_8859_1_stem}, + {"italian", ENC_UTF_8, italian_UTF_8_create_env, italian_UTF_8_close_env, italian_UTF_8_stem}, + {"nl", ENC_ISO_8859_1, dutch_ISO_8859_1_create_env, dutch_ISO_8859_1_close_env, dutch_ISO_8859_1_stem}, + {"nl", ENC_UTF_8, dutch_UTF_8_create_env, dutch_UTF_8_close_env, dutch_UTF_8_stem}, + {"nld", ENC_ISO_8859_1, dutch_ISO_8859_1_create_env, dutch_ISO_8859_1_close_env, dutch_ISO_8859_1_stem}, + {"nld", ENC_UTF_8, dutch_UTF_8_create_env, dutch_UTF_8_close_env, dutch_UTF_8_stem}, + {"no", ENC_ISO_8859_1, norwegian_ISO_8859_1_create_env, norwegian_ISO_8859_1_close_env, norwegian_ISO_8859_1_stem}, + {"no", ENC_UTF_8, norwegian_UTF_8_create_env, norwegian_UTF_8_close_env, norwegian_UTF_8_stem}, + {"nor", ENC_ISO_8859_1, norwegian_ISO_8859_1_create_env, norwegian_ISO_8859_1_close_env, norwegian_ISO_8859_1_stem}, + {"nor", ENC_UTF_8, norwegian_UTF_8_create_env, norwegian_UTF_8_close_env, norwegian_UTF_8_stem}, + {"norwegian", ENC_ISO_8859_1, norwegian_ISO_8859_1_create_env, norwegian_ISO_8859_1_close_env, norwegian_ISO_8859_1_stem}, + {"norwegian", ENC_UTF_8, norwegian_UTF_8_create_env, norwegian_UTF_8_close_env, norwegian_UTF_8_stem}, + {"por", ENC_ISO_8859_1, portuguese_ISO_8859_1_create_env, portuguese_ISO_8859_1_close_env, portuguese_ISO_8859_1_stem}, + {"por", ENC_UTF_8, portuguese_UTF_8_create_env, portuguese_UTF_8_close_env, portuguese_UTF_8_stem}, + {"porter", ENC_ISO_8859_1, porter_ISO_8859_1_create_env, porter_ISO_8859_1_close_env, porter_ISO_8859_1_stem}, + {"porter", ENC_UTF_8, porter_UTF_8_create_env, porter_UTF_8_close_env, porter_UTF_8_stem}, + {"portuguese", ENC_ISO_8859_1, portuguese_ISO_8859_1_create_env, portuguese_ISO_8859_1_close_env, portuguese_ISO_8859_1_stem}, + {"portuguese", ENC_UTF_8, portuguese_UTF_8_create_env, portuguese_UTF_8_close_env, portuguese_UTF_8_stem}, + {"pt", ENC_ISO_8859_1, portuguese_ISO_8859_1_create_env, portuguese_ISO_8859_1_close_env, portuguese_ISO_8859_1_stem}, + {"pt", ENC_UTF_8, portuguese_UTF_8_create_env, portuguese_UTF_8_close_env, portuguese_UTF_8_stem}, + {"ru", ENC_KOI8_R, russian_KOI8_R_create_env, russian_KOI8_R_close_env, russian_KOI8_R_stem}, + {"ru", ENC_UTF_8, russian_UTF_8_create_env, russian_UTF_8_close_env, russian_UTF_8_stem}, + {"rus", ENC_KOI8_R, russian_KOI8_R_create_env, russian_KOI8_R_close_env, russian_KOI8_R_stem}, + {"rus", ENC_UTF_8, russian_UTF_8_create_env, russian_UTF_8_close_env, russian_UTF_8_stem}, + {"russian", ENC_KOI8_R, russian_KOI8_R_create_env, russian_KOI8_R_close_env, russian_KOI8_R_stem}, + {"russian", ENC_UTF_8, russian_UTF_8_create_env, russian_UTF_8_close_env, russian_UTF_8_stem}, + {"spa", ENC_ISO_8859_1, spanish_ISO_8859_1_create_env, spanish_ISO_8859_1_close_env, spanish_ISO_8859_1_stem}, + {"spa", ENC_UTF_8, spanish_UTF_8_create_env, spanish_UTF_8_close_env, spanish_UTF_8_stem}, + {"spanish", ENC_ISO_8859_1, spanish_ISO_8859_1_create_env, spanish_ISO_8859_1_close_env, spanish_ISO_8859_1_stem}, + {"spanish", ENC_UTF_8, spanish_UTF_8_create_env, spanish_UTF_8_close_env, spanish_UTF_8_stem}, + {"sv", ENC_ISO_8859_1, swedish_ISO_8859_1_create_env, swedish_ISO_8859_1_close_env, swedish_ISO_8859_1_stem}, + {"sv", ENC_UTF_8, swedish_UTF_8_create_env, swedish_UTF_8_close_env, swedish_UTF_8_stem}, + {"swe", ENC_ISO_8859_1, swedish_ISO_8859_1_create_env, swedish_ISO_8859_1_close_env, swedish_ISO_8859_1_stem}, + {"swe", ENC_UTF_8, swedish_UTF_8_create_env, swedish_UTF_8_close_env, swedish_UTF_8_stem}, + {"swedish", ENC_ISO_8859_1, swedish_ISO_8859_1_create_env, swedish_ISO_8859_1_close_env, swedish_ISO_8859_1_stem}, + {"swedish", ENC_UTF_8, swedish_UTF_8_create_env, swedish_UTF_8_close_env, swedish_UTF_8_stem}, + {0,0,0,0,0} +}; +static const char * algorithm_names[] = { + "danish", + "dutch", + "english", + "finnish", + "french", + "german", + "italian", + "norwegian", + "porter", + "portuguese", + "russian", + "spanish", + "swedish", + 0 +}; +#endif diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/runtime/api.c b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/runtime/api.c new file mode 100644 index 0000000..9dd5a3b --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/runtime/api.c @@ -0,0 +1,69 @@ + +#include /* for calloc, free */ +#include "header.h" + +extern struct SN_env * SN_create_env(int S_size, int I_size, int B_size) +{ + struct SN_env * z = (struct SN_env *) calloc(1, sizeof(struct SN_env)); + if (z == NULL) return NULL; + z->p = create_s(); + if (z->p == NULL) goto error; + if (S_size) + { + int i; + z->S = (symbol * *) calloc(S_size, sizeof(symbol *)); + if (z->S == NULL) goto error; + + for (i = 0; i < S_size; i++) + { + z->S[i] = create_s(); + if (z->S[i] == NULL) goto error; + } + z->S_size = S_size; + } + + if (I_size) + { + z->I = (int *) calloc(I_size, sizeof(int)); + if (z->I == NULL) goto error; + z->I_size = I_size; + } + + if (B_size) + { + z->B = (symbol *) calloc(B_size, sizeof(symbol)); + if (z->B == NULL) goto error; + z->B_size = B_size; + } + + return z; +error: + SN_close_env(z); + return NULL; +} + +extern void SN_close_env(struct SN_env * z) +{ + if (z == NULL) return; + if (z->S_size) + { + int i; + for (i = 0; i < z->S_size; i++) + { + lose_s(z->S[i]); + } + free(z->S); + } + if (z->I_size) free(z->I); + if (z->B_size) free(z->B); + if (z->p) lose_s(z->p); + free(z); +} + +extern int SN_set_current(struct SN_env * z, int size, const symbol * s) +{ + int err = replace_s(z, 0, z->l, size, s, NULL); + z->c = 0; + return err; +} + diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/runtime/api.h b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/runtime/api.h new file mode 100644 index 0000000..7338dee --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/runtime/api.h @@ -0,0 +1,30 @@ +#ifndef LIBSTEMMER_RUNTIME_API_H +#define LIBSTEMMER_RUNTIME_API_H + +typedef unsigned char symbol; + +/* Or replace 'char' above with 'short' for 16 bit characters. + + More precisely, replace 'char' with whatever type guarantees the + character width you need. Note however that sizeof(symbol) should divide + HEAD, defined in header.h as 2*sizeof(int), without remainder, otherwise + there is an alignment problem. In the unlikely event of a problem here, + consult Martin Porter. + +*/ + +struct SN_env { + symbol * p; + int c; int a; int l; int lb; int bra; int ket; + int S_size; int I_size; int B_size; + symbol * * S; + int * I; + symbol * B; +}; + +extern struct SN_env * SN_create_env(int S_size, int I_size, int B_size); +extern void SN_close_env(struct SN_env * z); + +extern int SN_set_current(struct SN_env * z, int size, const symbol * s); + +#endif diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/runtime/header.h b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/runtime/header.h new file mode 100644 index 0000000..af02b5e --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/runtime/header.h @@ -0,0 +1,61 @@ +#ifndef LIBSTEMMER_RUNTIME_HEADER_H +#define LIBSTEMMER_RUNTIME_HEADER_H + +#include + +#include "api.h" + +#define MAXINT INT_MAX +#define MININT INT_MIN + +#define HEAD 2*sizeof(int) + +#define SIZE(p) ((int *)(p))[-1] +#define SET_SIZE(p, n) ((int *)(p))[-1] = n +#define CAPACITY(p) ((int *)(p))[-2] + +struct among +{ int s_size; /* number of chars in string */ + symbol * s; /* search string */ + int substring_i;/* index to longest matching substring */ + int result; /* result of the lookup */ + int (* function)(struct SN_env *); +}; + +extern symbol * create_s(void); +extern void lose_s(symbol * p); + +extern int skip_utf8(const symbol * p, int c, int lb, int l, int n); + +extern int in_grouping_U(struct SN_env * z, unsigned char * s, int min, int max); +extern int in_grouping_b_U(struct SN_env * z, unsigned char * s, int min, int max); +extern int out_grouping_U(struct SN_env * z, unsigned char * s, int min, int max); +extern int out_grouping_b_U(struct SN_env * z, unsigned char * s, int min, int max); + +extern int in_grouping(struct SN_env * z, unsigned char * s, int min, int max); +extern int in_grouping_b(struct SN_env * z, unsigned char * s, int min, int max); +extern int out_grouping(struct SN_env * z, unsigned char * s, int min, int max); +extern int out_grouping_b(struct SN_env * z, unsigned char * s, int min, int max); + +extern int eq_s(struct SN_env * z, int s_size, symbol * s); +extern int eq_s_b(struct SN_env * z, int s_size, symbol * s); +extern int eq_v(struct SN_env * z, symbol * p); +extern int eq_v_b(struct SN_env * z, symbol * p); + +extern int find_among(struct SN_env * z, struct among * v, int v_size); +extern int find_among_b(struct SN_env * z, struct among * v, int v_size); + +extern int replace_s(struct SN_env * z, int c_bra, int c_ket, int s_size, const symbol * s, int * adjustment); +extern int slice_from_s(struct SN_env * z, int s_size, symbol * s); +extern int slice_from_v(struct SN_env * z, symbol * p); +extern int slice_del(struct SN_env * z); + +extern int insert_s(struct SN_env * z, int bra, int ket, int s_size, symbol * s); +extern int insert_v(struct SN_env * z, int bra, int ket, symbol * p); + +extern symbol * slice_to(struct SN_env * z, symbol * p); +extern symbol * assign_to(struct SN_env * z, symbol * p); + +extern void debug(struct SN_env * z, int number, int line_count); + +#endif diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/runtime/utilities.c b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/runtime/utilities.c new file mode 100644 index 0000000..a6bfa5c --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/runtime/utilities.c @@ -0,0 +1,446 @@ + +#include +#include +#include + +#include "header.h" + +#define unless(C) if(!(C)) + +#define CREATE_SIZE 1 + +extern symbol * create_s(void) { + symbol * p; + void * mem = malloc(HEAD + (CREATE_SIZE + 1) * sizeof(symbol)); + if (mem == NULL) return NULL; + p = (symbol *) (HEAD + (char *) mem); + CAPACITY(p) = CREATE_SIZE; + SET_SIZE(p, CREATE_SIZE); + return p; +} + +extern void lose_s(symbol * p) { + if (p == NULL) return; + free((char *) p - HEAD); +} + +/* + new_p = X_skip_utf8(p, c, lb, l, n); skips n characters forwards from p + c + if n +ve, or n characters backwards from p +c - 1 if n -ve. new_p is the new + position, or 0 on failure. + + -- used to implement hop and next in the utf8 case. +*/ + +extern int skip_utf8(const symbol * p, int c, int lb, int l, int n) { + int b; + if (n >= 0) { + for (; n > 0; n--) { + if (c >= l) return -1; + b = p[c++]; + if (b >= 0xC0) { /* 1100 0000 */ + while (c < l) { + b = p[c]; + if (b >= 0xC0 || b < 0x80) break; + /* break unless b is 10------ */ + c++; + } + } + } + } else { + for (; n < 0; n++) { + if (c <= lb) return -1; + b = p[--c]; + if (b >= 0x80) { /* 1000 0000 */ + while (c > lb) { + b = p[c]; + if (b >= 0xC0) break; /* 1100 0000 */ + c--; + } + } + } + } + return c; +} + +/* Code for character groupings: utf8 cases */ + +static int get_utf8(const symbol * p, int c, int l, int * slot) { + int b0, b1; + if (c >= l) return 0; + b0 = p[c++]; + if (b0 < 0xC0 || c == l) { /* 1100 0000 */ + * slot = b0; return 1; + } + b1 = p[c++]; + if (b0 < 0xE0 || c == l) { /* 1110 0000 */ + * slot = (b0 & 0x1F) << 6 | (b1 & 0x3F); return 2; + } + * slot = (b0 & 0xF) << 12 | (b1 & 0x3F) << 6 | (*p & 0x3F); return 3; +} + +static int get_b_utf8(const symbol * p, int c, int lb, int * slot) { + int b0, b1; + if (c <= lb) return 0; + b0 = p[--c]; + if (b0 < 0x80 || c == lb) { /* 1000 0000 */ + * slot = b0; return 1; + } + b1 = p[--c]; + if (b1 >= 0xC0 || c == lb) { /* 1100 0000 */ + * slot = (b1 & 0x1F) << 6 | (b0 & 0x3F); return 2; + } + * slot = (*p & 0xF) << 12 | (b1 & 0x3F) << 6 | (b0 & 0x3F); return 3; +} + +extern int in_grouping_U(struct SN_env * z, unsigned char * s, int min, int max) { + int ch; + int w = get_utf8(z->p, z->c, z->l, & ch); + unless (w) return 0; + if (ch > max || (ch -= min) < 0 || (s[ch >> 3] & (0X1 << (ch & 0X7))) == 0) return 0; + z->c += w; return 1; +} + +extern int in_grouping_b_U(struct SN_env * z, unsigned char * s, int min, int max) { + int ch; + int w = get_b_utf8(z->p, z->c, z->lb, & ch); + unless (w) return 0; + if (ch > max || (ch -= min) < 0 || (s[ch >> 3] & (0X1 << (ch & 0X7))) == 0) return 0; + z->c -= w; return 1; +} + +extern int out_grouping_U(struct SN_env * z, unsigned char * s, int min, int max) { + int ch; + int w = get_utf8(z->p, z->c, z->l, & ch); + unless (w) return 0; + unless (ch > max || (ch -= min) < 0 || (s[ch >> 3] & (0X1 << (ch & 0X7))) == 0) return 0; + z->c += w; return 1; +} + +extern int out_grouping_b_U(struct SN_env * z, unsigned char * s, int min, int max) { + int ch; + int w = get_b_utf8(z->p, z->c, z->lb, & ch); + unless (w) return 0; + unless (ch > max || (ch -= min) < 0 || (s[ch >> 3] & (0X1 << (ch & 0X7))) == 0) return 0; + z->c -= w; return 1; +} + +/* Code for character groupings: non-utf8 cases */ + +extern int in_grouping(struct SN_env * z, unsigned char * s, int min, int max) { + int ch; + if (z->c >= z->l) return 0; + ch = z->p[z->c]; + if (ch > max || (ch -= min) < 0 || (s[ch >> 3] & (0X1 << (ch & 0X7))) == 0) return 0; + z->c++; return 1; +} + +extern int in_grouping_b(struct SN_env * z, unsigned char * s, int min, int max) { + int ch; + if (z->c <= z->lb) return 0; + ch = z->p[z->c - 1]; + if (ch > max || (ch -= min) < 0 || (s[ch >> 3] & (0X1 << (ch & 0X7))) == 0) return 0; + z->c--; return 1; +} + +extern int out_grouping(struct SN_env * z, unsigned char * s, int min, int max) { + int ch; + if (z->c >= z->l) return 0; + ch = z->p[z->c]; + unless (ch > max || (ch -= min) < 0 || (s[ch >> 3] & (0X1 << (ch & 0X7))) == 0) return 0; + z->c++; return 1; +} + +extern int out_grouping_b(struct SN_env * z, unsigned char * s, int min, int max) { + int ch; + if (z->c <= z->lb) return 0; + ch = z->p[z->c - 1]; + unless (ch > max || (ch -= min) < 0 || (s[ch >> 3] & (0X1 << (ch & 0X7))) == 0) return 0; + z->c--; return 1; +} + +extern int eq_s(struct SN_env * z, int s_size, symbol * s) { + if (z->l - z->c < s_size || memcmp(z->p + z->c, s, s_size * sizeof(symbol)) != 0) return 0; + z->c += s_size; return 1; +} + +extern int eq_s_b(struct SN_env * z, int s_size, symbol * s) { + if (z->c - z->lb < s_size || memcmp(z->p + z->c - s_size, s, s_size * sizeof(symbol)) != 0) return 0; + z->c -= s_size; return 1; +} + +extern int eq_v(struct SN_env * z, symbol * p) { + return eq_s(z, SIZE(p), p); +} + +extern int eq_v_b(struct SN_env * z, symbol * p) { + return eq_s_b(z, SIZE(p), p); +} + +extern int find_among(struct SN_env * z, struct among * v, int v_size) { + + int i = 0; + int j = v_size; + + int c = z->c; int l = z->l; + symbol * q = z->p + c; + + struct among * w; + + int common_i = 0; + int common_j = 0; + + int first_key_inspected = 0; + + while(1) { + int k = i + ((j - i) >> 1); + int diff = 0; + int common = common_i < common_j ? common_i : common_j; /* smaller */ + w = v + k; + { + int i; for (i = common; i < w->s_size; i++) { + if (c + common == l) { diff = -1; break; } + diff = q[common] - w->s[i]; + if (diff != 0) break; + common++; + } + } + if (diff < 0) { j = k; common_j = common; } + else { i = k; common_i = common; } + if (j - i <= 1) { + if (i > 0) break; /* v->s has been inspected */ + if (j == i) break; /* only one item in v */ + + /* - but now we need to go round once more to get + v->s inspected. This looks messy, but is actually + the optimal approach. */ + + if (first_key_inspected) break; + first_key_inspected = 1; + } + } + while(1) { + w = v + i; + if (common_i >= w->s_size) { + z->c = c + w->s_size; + if (w->function == 0) return w->result; + { + int res = w->function(z); + z->c = c + w->s_size; + if (res) return w->result; + } + } + i = w->substring_i; + if (i < 0) return 0; + } +} + +/* find_among_b is for backwards processing. Same comments apply */ + +extern int find_among_b(struct SN_env * z, struct among * v, int v_size) { + + int i = 0; + int j = v_size; + + int c = z->c; int lb = z->lb; + symbol * q = z->p + c - 1; + + struct among * w; + + int common_i = 0; + int common_j = 0; + + int first_key_inspected = 0; + + while(1) { + int k = i + ((j - i) >> 1); + int diff = 0; + int common = common_i < common_j ? common_i : common_j; + w = v + k; + { + int i; for (i = w->s_size - 1 - common; i >= 0; i--) { + if (c - common == lb) { diff = -1; break; } + diff = q[- common] - w->s[i]; + if (diff != 0) break; + common++; + } + } + if (diff < 0) { j = k; common_j = common; } + else { i = k; common_i = common; } + if (j - i <= 1) { + if (i > 0) break; + if (j == i) break; + if (first_key_inspected) break; + first_key_inspected = 1; + } + } + while(1) { + w = v + i; + if (common_i >= w->s_size) { + z->c = c - w->s_size; + if (w->function == 0) return w->result; + { + int res = w->function(z); + z->c = c - w->s_size; + if (res) return w->result; + } + } + i = w->substring_i; + if (i < 0) return 0; + } +} + + +/* Increase the size of the buffer pointed to by p to at least n symbols. + * If insufficient memory, returns NULL and frees the old buffer. + */ +static symbol * increase_size(symbol * p, int n) { + symbol * q; + int new_size = n + 20; + void * mem = realloc((char *) p - HEAD, + HEAD + (new_size + 1) * sizeof(symbol)); + if (mem == NULL) { + lose_s(p); + return NULL; + } + q = (symbol *) (HEAD + (char *)mem); + CAPACITY(q) = new_size; + return q; +} + +/* to replace symbols between c_bra and c_ket in z->p by the + s_size symbols at s. + Returns 0 on success, -1 on error. + Also, frees z->p (and sets it to NULL) on error. +*/ +extern int replace_s(struct SN_env * z, int c_bra, int c_ket, int s_size, const symbol * s, int * adjptr) +{ + int adjustment; + int len; + if (z->p == NULL) { + z->p = create_s(); + if (z->p == NULL) return -1; + } + adjustment = s_size - (c_ket - c_bra); + len = SIZE(z->p); + if (adjustment != 0) { + if (adjustment + len > CAPACITY(z->p)) { + z->p = increase_size(z->p, adjustment + len); + if (z->p == NULL) return -1; + } + memmove(z->p + c_ket + adjustment, + z->p + c_ket, + (len - c_ket) * sizeof(symbol)); + SET_SIZE(z->p, adjustment + len); + z->l += adjustment; + if (z->c >= c_ket) + z->c += adjustment; + else + if (z->c > c_bra) + z->c = c_bra; + } + unless (s_size == 0) memmove(z->p + c_bra, s, s_size * sizeof(symbol)); + if (adjptr != NULL) + *adjptr = adjustment; + return 0; +} + +static int slice_check(struct SN_env * z) { + + if (z->bra < 0 || + z->bra > z->ket || + z->ket > z->l || + z->p == NULL || + z->l > SIZE(z->p)) /* this line could be removed */ + { +#if 0 + fprintf(stderr, "faulty slice operation:\n"); + debug(z, -1, 0); +#endif + return -1; + } + return 0; +} + +extern int slice_from_s(struct SN_env * z, int s_size, symbol * s) { + if (slice_check(z)) return -1; + return replace_s(z, z->bra, z->ket, s_size, s, NULL); +} + +extern int slice_from_v(struct SN_env * z, symbol * p) { + return slice_from_s(z, SIZE(p), p); +} + +extern int slice_del(struct SN_env * z) { + return slice_from_s(z, 0, 0); +} + +extern int insert_s(struct SN_env * z, int bra, int ket, int s_size, symbol * s) { + int adjustment; + if (replace_s(z, bra, ket, s_size, s, &adjustment)) + return -1; + if (bra <= z->bra) z->bra += adjustment; + if (bra <= z->ket) z->ket += adjustment; + return 0; +} + +extern int insert_v(struct SN_env * z, int bra, int ket, symbol * p) { + int adjustment; + if (replace_s(z, bra, ket, SIZE(p), p, &adjustment)) + return -1; + if (bra <= z->bra) z->bra += adjustment; + if (bra <= z->ket) z->ket += adjustment; + return 0; +} + +extern symbol * slice_to(struct SN_env * z, symbol * p) { + if (slice_check(z)) { + lose_s(p); + return NULL; + } + { + int len = z->ket - z->bra; + if (CAPACITY(p) < len) { + p = increase_size(p, len); + if (p == NULL) + return NULL; + } + memmove(p, z->p + z->bra, len * sizeof(symbol)); + SET_SIZE(p, len); + } + return p; +} + +extern symbol * assign_to(struct SN_env * z, symbol * p) { + int len = z->l; + if (CAPACITY(p) < len) { + p = increase_size(p, len); + if (p == NULL) + return NULL; + } + memmove(p, z->p, len * sizeof(symbol)); + SET_SIZE(p, len); + return p; +} + +#if 0 +extern void debug(struct SN_env * z, int number, int line_count) { + int i; + int limit = SIZE(z->p); + /*if (number >= 0) printf("%3d (line %4d): '", number, line_count);*/ + if (number >= 0) printf("%3d (line %4d): [%d]'", number, line_count,limit); + for (i = 0; i <= limit; i++) { + if (z->lb == i) printf("{"); + if (z->bra == i) printf("["); + if (z->c == i) printf("|"); + if (z->ket == i) printf("]"); + if (z->l == i) printf("}"); + if (i < limit) + { int ch = z->p[i]; + if (ch == 0) ch = '#'; + printf("%c", ch); + } + } + printf("'\n"); +} +#endif diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_danish.c b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_danish.c new file mode 100644 index 0000000..fe0fa76 --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_danish.c @@ -0,0 +1,338 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#include "../runtime/header.h" + +extern int danish_ISO_8859_1_stem(struct SN_env * z); +static int r_undouble(struct SN_env * z); +static int r_other_suffix(struct SN_env * z); +static int r_consonant_pair(struct SN_env * z); +static int r_main_suffix(struct SN_env * z); +static int r_mark_regions(struct SN_env * z); + +extern struct SN_env * danish_ISO_8859_1_create_env(void); +extern void danish_ISO_8859_1_close_env(struct SN_env * z); + +static symbol s_0_0[3] = { 'h', 'e', 'd' }; +static symbol s_0_1[5] = { 'e', 't', 'h', 'e', 'd' }; +static symbol s_0_2[4] = { 'e', 'r', 'e', 'd' }; +static symbol s_0_3[1] = { 'e' }; +static symbol s_0_4[5] = { 'e', 'r', 'e', 'd', 'e' }; +static symbol s_0_5[4] = { 'e', 'n', 'd', 'e' }; +static symbol s_0_6[6] = { 'e', 'r', 'e', 'n', 'd', 'e' }; +static symbol s_0_7[3] = { 'e', 'n', 'e' }; +static symbol s_0_8[4] = { 'e', 'r', 'n', 'e' }; +static symbol s_0_9[3] = { 'e', 'r', 'e' }; +static symbol s_0_10[2] = { 'e', 'n' }; +static symbol s_0_11[5] = { 'h', 'e', 'd', 'e', 'n' }; +static symbol s_0_12[4] = { 'e', 'r', 'e', 'n' }; +static symbol s_0_13[2] = { 'e', 'r' }; +static symbol s_0_14[5] = { 'h', 'e', 'd', 'e', 'r' }; +static symbol s_0_15[4] = { 'e', 'r', 'e', 'r' }; +static symbol s_0_16[1] = { 's' }; +static symbol s_0_17[4] = { 'h', 'e', 'd', 's' }; +static symbol s_0_18[2] = { 'e', 's' }; +static symbol s_0_19[5] = { 'e', 'n', 'd', 'e', 's' }; +static symbol s_0_20[7] = { 'e', 'r', 'e', 'n', 'd', 'e', 's' }; +static symbol s_0_21[4] = { 'e', 'n', 'e', 's' }; +static symbol s_0_22[5] = { 'e', 'r', 'n', 'e', 's' }; +static symbol s_0_23[4] = { 'e', 'r', 'e', 's' }; +static symbol s_0_24[3] = { 'e', 'n', 's' }; +static symbol s_0_25[6] = { 'h', 'e', 'd', 'e', 'n', 's' }; +static symbol s_0_26[5] = { 'e', 'r', 'e', 'n', 's' }; +static symbol s_0_27[3] = { 'e', 'r', 's' }; +static symbol s_0_28[3] = { 'e', 't', 's' }; +static symbol s_0_29[5] = { 'e', 'r', 'e', 't', 's' }; +static symbol s_0_30[2] = { 'e', 't' }; +static symbol s_0_31[4] = { 'e', 'r', 'e', 't' }; + +static struct among a_0[32] = +{ +/* 0 */ { 3, s_0_0, -1, 1, 0}, +/* 1 */ { 5, s_0_1, 0, 1, 0}, +/* 2 */ { 4, s_0_2, -1, 1, 0}, +/* 3 */ { 1, s_0_3, -1, 1, 0}, +/* 4 */ { 5, s_0_4, 3, 1, 0}, +/* 5 */ { 4, s_0_5, 3, 1, 0}, +/* 6 */ { 6, s_0_6, 5, 1, 0}, +/* 7 */ { 3, s_0_7, 3, 1, 0}, +/* 8 */ { 4, s_0_8, 3, 1, 0}, +/* 9 */ { 3, s_0_9, 3, 1, 0}, +/* 10 */ { 2, s_0_10, -1, 1, 0}, +/* 11 */ { 5, s_0_11, 10, 1, 0}, +/* 12 */ { 4, s_0_12, 10, 1, 0}, +/* 13 */ { 2, s_0_13, -1, 1, 0}, +/* 14 */ { 5, s_0_14, 13, 1, 0}, +/* 15 */ { 4, s_0_15, 13, 1, 0}, +/* 16 */ { 1, s_0_16, -1, 2, 0}, +/* 17 */ { 4, s_0_17, 16, 1, 0}, +/* 18 */ { 2, s_0_18, 16, 1, 0}, +/* 19 */ { 5, s_0_19, 18, 1, 0}, +/* 20 */ { 7, s_0_20, 19, 1, 0}, +/* 21 */ { 4, s_0_21, 18, 1, 0}, +/* 22 */ { 5, s_0_22, 18, 1, 0}, +/* 23 */ { 4, s_0_23, 18, 1, 0}, +/* 24 */ { 3, s_0_24, 16, 1, 0}, +/* 25 */ { 6, s_0_25, 24, 1, 0}, +/* 26 */ { 5, s_0_26, 24, 1, 0}, +/* 27 */ { 3, s_0_27, 16, 1, 0}, +/* 28 */ { 3, s_0_28, 16, 1, 0}, +/* 29 */ { 5, s_0_29, 28, 1, 0}, +/* 30 */ { 2, s_0_30, -1, 1, 0}, +/* 31 */ { 4, s_0_31, 30, 1, 0} +}; + +static symbol s_1_0[2] = { 'g', 'd' }; +static symbol s_1_1[2] = { 'd', 't' }; +static symbol s_1_2[2] = { 'g', 't' }; +static symbol s_1_3[2] = { 'k', 't' }; + +static struct among a_1[4] = +{ +/* 0 */ { 2, s_1_0, -1, -1, 0}, +/* 1 */ { 2, s_1_1, -1, -1, 0}, +/* 2 */ { 2, s_1_2, -1, -1, 0}, +/* 3 */ { 2, s_1_3, -1, -1, 0} +}; + +static symbol s_2_0[2] = { 'i', 'g' }; +static symbol s_2_1[3] = { 'l', 'i', 'g' }; +static symbol s_2_2[4] = { 'e', 'l', 'i', 'g' }; +static symbol s_2_3[3] = { 'e', 'l', 's' }; +static symbol s_2_4[4] = { 'l', 0xF8, 's', 't' }; + +static struct among a_2[5] = +{ +/* 0 */ { 2, s_2_0, -1, 1, 0}, +/* 1 */ { 3, s_2_1, 0, 1, 0}, +/* 2 */ { 4, s_2_2, 1, 1, 0}, +/* 3 */ { 3, s_2_3, -1, 1, 0}, +/* 4 */ { 4, s_2_4, -1, 2, 0} +}; + +static unsigned char g_v[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 128 }; + +static unsigned char g_s_ending[] = { 239, 254, 42, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16 }; + +static symbol s_0[] = { 's', 't' }; +static symbol s_1[] = { 'i', 'g' }; +static symbol s_2[] = { 'l', 0xF8, 's' }; + +static int r_mark_regions(struct SN_env * z) { + z->I[0] = z->l; + { int c_test = z->c; /* test, line 33 */ + { int c = z->c + 3; + if (0 > c || c > z->l) return 0; + z->c = c; /* hop, line 33 */ + } + z->I[1] = z->c; /* setmark x, line 33 */ + z->c = c_test; + } + while(1) { /* goto, line 34 */ + int c = z->c; + if (!(in_grouping(z, g_v, 97, 248))) goto lab0; + z->c = c; + break; + lab0: + z->c = c; + if (z->c >= z->l) return 0; + z->c++; /* goto, line 34 */ + } + while(1) { /* gopast, line 34 */ + if (!(out_grouping(z, g_v, 97, 248))) goto lab1; + break; + lab1: + if (z->c >= z->l) return 0; + z->c++; /* gopast, line 34 */ + } + z->I[0] = z->c; /* setmark p1, line 34 */ + /* try, line 35 */ + if (!(z->I[0] < z->I[1])) goto lab2; + z->I[0] = z->I[1]; +lab2: + return 1; +} + +static int r_main_suffix(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 41 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 41 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 41 */ + among_var = find_among_b(z, a_0, 32); /* substring, line 41 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 41 */ + z->lb = m3; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 48 */ + if (ret < 0) return ret; + } + break; + case 2: + if (!(in_grouping_b(z, g_s_ending, 97, 229))) return 0; + { int ret; + ret = slice_del(z); /* delete, line 50 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_consonant_pair(struct SN_env * z) { + { int m_test = z->l - z->c; /* test, line 55 */ + { int m3; /* setlimit, line 56 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 56 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 56 */ + if (!(find_among_b(z, a_1, 4))) { z->lb = m3; return 0; } /* substring, line 56 */ + z->bra = z->c; /* ], line 56 */ + z->lb = m3; + } + z->c = z->l - m_test; + } + if (z->c <= z->lb) return 0; + z->c--; /* next, line 62 */ + z->bra = z->c; /* ], line 62 */ + { int ret; + ret = slice_del(z); /* delete, line 62 */ + if (ret < 0) return ret; + } + return 1; +} + +static int r_other_suffix(struct SN_env * z) { + int among_var; + { int m = z->l - z->c; (void) m; /* do, line 66 */ + z->ket = z->c; /* [, line 66 */ + if (!(eq_s_b(z, 2, s_0))) goto lab0; + z->bra = z->c; /* ], line 66 */ + if (!(eq_s_b(z, 2, s_1))) goto lab0; + { int ret; + ret = slice_del(z); /* delete, line 66 */ + if (ret < 0) return ret; + } + lab0: + z->c = z->l - m; + } + { int m3; /* setlimit, line 67 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 67 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 67 */ + among_var = find_among_b(z, a_2, 5); /* substring, line 67 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 67 */ + z->lb = m3; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 70 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* do, line 70 */ + { int ret = r_consonant_pair(z); + if (ret == 0) goto lab1; /* call consonant_pair, line 70 */ + if (ret < 0) return ret; + } + lab1: + z->c = z->l - m; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 3, s_2); /* <-, line 72 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_undouble(struct SN_env * z) { + { int m3; /* setlimit, line 76 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 76 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 76 */ + if (!(out_grouping_b(z, g_v, 97, 248))) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 76 */ + z->S[0] = slice_to(z, z->S[0]); /* -> ch, line 76 */ + if (z->S[0] == 0) return -1; /* -> ch, line 76 */ + z->lb = m3; + } + if (!(eq_v_b(z, z->S[0]))) return 0; /* name ch, line 77 */ + { int ret; + ret = slice_del(z); /* delete, line 78 */ + if (ret < 0) return ret; + } + return 1; +} + +extern int danish_ISO_8859_1_stem(struct SN_env * z) { + { int c = z->c; /* do, line 84 */ + { int ret = r_mark_regions(z); + if (ret == 0) goto lab0; /* call mark_regions, line 84 */ + if (ret < 0) return ret; + } + lab0: + z->c = c; + } + z->lb = z->c; z->c = z->l; /* backwards, line 85 */ + + { int m = z->l - z->c; (void) m; /* do, line 86 */ + { int ret = r_main_suffix(z); + if (ret == 0) goto lab1; /* call main_suffix, line 86 */ + if (ret < 0) return ret; + } + lab1: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 87 */ + { int ret = r_consonant_pair(z); + if (ret == 0) goto lab2; /* call consonant_pair, line 87 */ + if (ret < 0) return ret; + } + lab2: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 88 */ + { int ret = r_other_suffix(z); + if (ret == 0) goto lab3; /* call other_suffix, line 88 */ + if (ret < 0) return ret; + } + lab3: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 89 */ + { int ret = r_undouble(z); + if (ret == 0) goto lab4; /* call undouble, line 89 */ + if (ret < 0) return ret; + } + lab4: + z->c = z->l - m; + } + z->c = z->lb; + return 1; +} + +extern struct SN_env * danish_ISO_8859_1_create_env(void) { return SN_create_env(1, 2, 0); } + +extern void danish_ISO_8859_1_close_env(struct SN_env * z) { SN_close_env(z); } + diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_danish.h b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_danish.h new file mode 100644 index 0000000..49c5559 --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_danish.h @@ -0,0 +1,16 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern struct SN_env * danish_ISO_8859_1_create_env(void); +extern void danish_ISO_8859_1_close_env(struct SN_env * z); + +extern int danish_ISO_8859_1_stem(struct SN_env * z); + +#ifdef __cplusplus +} +#endif + diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_dutch.c b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_dutch.c new file mode 100644 index 0000000..36de3b5 --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_dutch.c @@ -0,0 +1,635 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#include "../runtime/header.h" + +extern int dutch_ISO_8859_1_stem(struct SN_env * z); +static int r_standard_suffix(struct SN_env * z); +static int r_undouble(struct SN_env * z); +static int r_R2(struct SN_env * z); +static int r_R1(struct SN_env * z); +static int r_mark_regions(struct SN_env * z); +static int r_en_ending(struct SN_env * z); +static int r_e_ending(struct SN_env * z); +static int r_postlude(struct SN_env * z); +static int r_prelude(struct SN_env * z); + +extern struct SN_env * dutch_ISO_8859_1_create_env(void); +extern void dutch_ISO_8859_1_close_env(struct SN_env * z); + +static symbol s_0_1[1] = { 0xE1 }; +static symbol s_0_2[1] = { 0xE4 }; +static symbol s_0_3[1] = { 0xE9 }; +static symbol s_0_4[1] = { 0xEB }; +static symbol s_0_5[1] = { 0xED }; +static symbol s_0_6[1] = { 0xEF }; +static symbol s_0_7[1] = { 0xF3 }; +static symbol s_0_8[1] = { 0xF6 }; +static symbol s_0_9[1] = { 0xFA }; +static symbol s_0_10[1] = { 0xFC }; + +static struct among a_0[11] = +{ +/* 0 */ { 0, 0, -1, 6, 0}, +/* 1 */ { 1, s_0_1, 0, 1, 0}, +/* 2 */ { 1, s_0_2, 0, 1, 0}, +/* 3 */ { 1, s_0_3, 0, 2, 0}, +/* 4 */ { 1, s_0_4, 0, 2, 0}, +/* 5 */ { 1, s_0_5, 0, 3, 0}, +/* 6 */ { 1, s_0_6, 0, 3, 0}, +/* 7 */ { 1, s_0_7, 0, 4, 0}, +/* 8 */ { 1, s_0_8, 0, 4, 0}, +/* 9 */ { 1, s_0_9, 0, 5, 0}, +/* 10 */ { 1, s_0_10, 0, 5, 0} +}; + +static symbol s_1_1[1] = { 'I' }; +static symbol s_1_2[1] = { 'Y' }; + +static struct among a_1[3] = +{ +/* 0 */ { 0, 0, -1, 3, 0}, +/* 1 */ { 1, s_1_1, 0, 2, 0}, +/* 2 */ { 1, s_1_2, 0, 1, 0} +}; + +static symbol s_2_0[2] = { 'd', 'd' }; +static symbol s_2_1[2] = { 'k', 'k' }; +static symbol s_2_2[2] = { 't', 't' }; + +static struct among a_2[3] = +{ +/* 0 */ { 2, s_2_0, -1, -1, 0}, +/* 1 */ { 2, s_2_1, -1, -1, 0}, +/* 2 */ { 2, s_2_2, -1, -1, 0} +}; + +static symbol s_3_0[3] = { 'e', 'n', 'e' }; +static symbol s_3_1[2] = { 's', 'e' }; +static symbol s_3_2[2] = { 'e', 'n' }; +static symbol s_3_3[5] = { 'h', 'e', 'd', 'e', 'n' }; +static symbol s_3_4[1] = { 's' }; + +static struct among a_3[5] = +{ +/* 0 */ { 3, s_3_0, -1, 2, 0}, +/* 1 */ { 2, s_3_1, -1, 3, 0}, +/* 2 */ { 2, s_3_2, -1, 2, 0}, +/* 3 */ { 5, s_3_3, 2, 1, 0}, +/* 4 */ { 1, s_3_4, -1, 3, 0} +}; + +static symbol s_4_0[3] = { 'e', 'n', 'd' }; +static symbol s_4_1[2] = { 'i', 'g' }; +static symbol s_4_2[3] = { 'i', 'n', 'g' }; +static symbol s_4_3[4] = { 'l', 'i', 'j', 'k' }; +static symbol s_4_4[4] = { 'b', 'a', 'a', 'r' }; +static symbol s_4_5[3] = { 'b', 'a', 'r' }; + +static struct among a_4[6] = +{ +/* 0 */ { 3, s_4_0, -1, 1, 0}, +/* 1 */ { 2, s_4_1, -1, 2, 0}, +/* 2 */ { 3, s_4_2, -1, 1, 0}, +/* 3 */ { 4, s_4_3, -1, 3, 0}, +/* 4 */ { 4, s_4_4, -1, 4, 0}, +/* 5 */ { 3, s_4_5, -1, 5, 0} +}; + +static symbol s_5_0[2] = { 'a', 'a' }; +static symbol s_5_1[2] = { 'e', 'e' }; +static symbol s_5_2[2] = { 'o', 'o' }; +static symbol s_5_3[2] = { 'u', 'u' }; + +static struct among a_5[4] = +{ +/* 0 */ { 2, s_5_0, -1, -1, 0}, +/* 1 */ { 2, s_5_1, -1, -1, 0}, +/* 2 */ { 2, s_5_2, -1, -1, 0}, +/* 3 */ { 2, s_5_3, -1, -1, 0} +}; + +static unsigned char g_v[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128 }; + +static unsigned char g_v_I[] = { 1, 0, 0, 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128 }; + +static unsigned char g_v_j[] = { 17, 67, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128 }; + +static symbol s_0[] = { 'a' }; +static symbol s_1[] = { 'e' }; +static symbol s_2[] = { 'i' }; +static symbol s_3[] = { 'o' }; +static symbol s_4[] = { 'u' }; +static symbol s_5[] = { 'y' }; +static symbol s_6[] = { 'Y' }; +static symbol s_7[] = { 'i' }; +static symbol s_8[] = { 'I' }; +static symbol s_9[] = { 'y' }; +static symbol s_10[] = { 'Y' }; +static symbol s_11[] = { 'y' }; +static symbol s_12[] = { 'i' }; +static symbol s_13[] = { 'e' }; +static symbol s_14[] = { 'g', 'e', 'm' }; +static symbol s_15[] = { 'h', 'e', 'i', 'd' }; +static symbol s_16[] = { 'h', 'e', 'i', 'd' }; +static symbol s_17[] = { 'c' }; +static symbol s_18[] = { 'e', 'n' }; +static symbol s_19[] = { 'i', 'g' }; +static symbol s_20[] = { 'e' }; +static symbol s_21[] = { 'e' }; + +static int r_prelude(struct SN_env * z) { + int among_var; + { int c_test = z->c; /* test, line 42 */ + while(1) { /* repeat, line 42 */ + int c = z->c; + z->bra = z->c; /* [, line 43 */ + among_var = find_among(z, a_0, 11); /* substring, line 43 */ + if (!(among_var)) goto lab0; + z->ket = z->c; /* ], line 43 */ + switch(among_var) { + case 0: goto lab0; + case 1: + { int ret; + ret = slice_from_s(z, 1, s_0); /* <-, line 45 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 1, s_1); /* <-, line 47 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_from_s(z, 1, s_2); /* <-, line 49 */ + if (ret < 0) return ret; + } + break; + case 4: + { int ret; + ret = slice_from_s(z, 1, s_3); /* <-, line 51 */ + if (ret < 0) return ret; + } + break; + case 5: + { int ret; + ret = slice_from_s(z, 1, s_4); /* <-, line 53 */ + if (ret < 0) return ret; + } + break; + case 6: + if (z->c >= z->l) goto lab0; + z->c++; /* next, line 54 */ + break; + } + continue; + lab0: + z->c = c; + break; + } + z->c = c_test; + } + { int c = z->c; /* try, line 57 */ + z->bra = z->c; /* [, line 57 */ + if (!(eq_s(z, 1, s_5))) { z->c = c; goto lab1; } + z->ket = z->c; /* ], line 57 */ + { int ret; + ret = slice_from_s(z, 1, s_6); /* <-, line 57 */ + if (ret < 0) return ret; + } + lab1: + ; + } + while(1) { /* repeat, line 58 */ + int c = z->c; + while(1) { /* goto, line 58 */ + int c = z->c; + if (!(in_grouping(z, g_v, 97, 232))) goto lab3; + z->bra = z->c; /* [, line 59 */ + { int c = z->c; /* or, line 59 */ + if (!(eq_s(z, 1, s_7))) goto lab5; + z->ket = z->c; /* ], line 59 */ + if (!(in_grouping(z, g_v, 97, 232))) goto lab5; + { int ret; + ret = slice_from_s(z, 1, s_8); /* <-, line 59 */ + if (ret < 0) return ret; + } + goto lab4; + lab5: + z->c = c; + if (!(eq_s(z, 1, s_9))) goto lab3; + z->ket = z->c; /* ], line 60 */ + { int ret; + ret = slice_from_s(z, 1, s_10); /* <-, line 60 */ + if (ret < 0) return ret; + } + } + lab4: + z->c = c; + break; + lab3: + z->c = c; + if (z->c >= z->l) goto lab2; + z->c++; /* goto, line 58 */ + } + continue; + lab2: + z->c = c; + break; + } + return 1; +} + +static int r_mark_regions(struct SN_env * z) { + z->I[0] = z->l; + z->I[1] = z->l; + while(1) { /* gopast, line 69 */ + if (!(in_grouping(z, g_v, 97, 232))) goto lab0; + break; + lab0: + if (z->c >= z->l) return 0; + z->c++; /* gopast, line 69 */ + } + while(1) { /* gopast, line 69 */ + if (!(out_grouping(z, g_v, 97, 232))) goto lab1; + break; + lab1: + if (z->c >= z->l) return 0; + z->c++; /* gopast, line 69 */ + } + z->I[0] = z->c; /* setmark p1, line 69 */ + /* try, line 70 */ + if (!(z->I[0] < 3)) goto lab2; + z->I[0] = 3; +lab2: + while(1) { /* gopast, line 71 */ + if (!(in_grouping(z, g_v, 97, 232))) goto lab3; + break; + lab3: + if (z->c >= z->l) return 0; + z->c++; /* gopast, line 71 */ + } + while(1) { /* gopast, line 71 */ + if (!(out_grouping(z, g_v, 97, 232))) goto lab4; + break; + lab4: + if (z->c >= z->l) return 0; + z->c++; /* gopast, line 71 */ + } + z->I[1] = z->c; /* setmark p2, line 71 */ + return 1; +} + +static int r_postlude(struct SN_env * z) { + int among_var; + while(1) { /* repeat, line 75 */ + int c = z->c; + z->bra = z->c; /* [, line 77 */ + among_var = find_among(z, a_1, 3); /* substring, line 77 */ + if (!(among_var)) goto lab0; + z->ket = z->c; /* ], line 77 */ + switch(among_var) { + case 0: goto lab0; + case 1: + { int ret; + ret = slice_from_s(z, 1, s_11); /* <-, line 78 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 1, s_12); /* <-, line 79 */ + if (ret < 0) return ret; + } + break; + case 3: + if (z->c >= z->l) goto lab0; + z->c++; /* next, line 80 */ + break; + } + continue; + lab0: + z->c = c; + break; + } + return 1; +} + +static int r_R1(struct SN_env * z) { + if (!(z->I[0] <= z->c)) return 0; + return 1; +} + +static int r_R2(struct SN_env * z) { + if (!(z->I[1] <= z->c)) return 0; + return 1; +} + +static int r_undouble(struct SN_env * z) { + { int m_test = z->l - z->c; /* test, line 91 */ + if (!(find_among_b(z, a_2, 3))) return 0; /* among, line 91 */ + z->c = z->l - m_test; + } + z->ket = z->c; /* [, line 91 */ + if (z->c <= z->lb) return 0; + z->c--; /* next, line 91 */ + z->bra = z->c; /* ], line 91 */ + { int ret; + ret = slice_del(z); /* delete, line 91 */ + if (ret < 0) return ret; + } + return 1; +} + +static int r_e_ending(struct SN_env * z) { + z->B[0] = 0; /* unset e_found, line 95 */ + z->ket = z->c; /* [, line 96 */ + if (!(eq_s_b(z, 1, s_13))) return 0; + z->bra = z->c; /* ], line 96 */ + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 96 */ + if (ret < 0) return ret; + } + { int m_test = z->l - z->c; /* test, line 96 */ + if (!(out_grouping_b(z, g_v, 97, 232))) return 0; + z->c = z->l - m_test; + } + { int ret; + ret = slice_del(z); /* delete, line 96 */ + if (ret < 0) return ret; + } + z->B[0] = 1; /* set e_found, line 97 */ + { int ret = r_undouble(z); + if (ret == 0) return 0; /* call undouble, line 98 */ + if (ret < 0) return ret; + } + return 1; +} + +static int r_en_ending(struct SN_env * z) { + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 102 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* and, line 102 */ + if (!(out_grouping_b(z, g_v, 97, 232))) return 0; + z->c = z->l - m; + { int m = z->l - z->c; (void) m; /* not, line 102 */ + if (!(eq_s_b(z, 3, s_14))) goto lab0; + return 0; + lab0: + z->c = z->l - m; + } + } + { int ret; + ret = slice_del(z); /* delete, line 102 */ + if (ret < 0) return ret; + } + { int ret = r_undouble(z); + if (ret == 0) return 0; /* call undouble, line 103 */ + if (ret < 0) return ret; + } + return 1; +} + +static int r_standard_suffix(struct SN_env * z) { + int among_var; + { int m = z->l - z->c; (void) m; /* do, line 107 */ + z->ket = z->c; /* [, line 108 */ + among_var = find_among_b(z, a_3, 5); /* substring, line 108 */ + if (!(among_var)) goto lab0; + z->bra = z->c; /* ], line 108 */ + switch(among_var) { + case 0: goto lab0; + case 1: + { int ret = r_R1(z); + if (ret == 0) goto lab0; /* call R1, line 110 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 4, s_15); /* <-, line 110 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret = r_en_ending(z); + if (ret == 0) goto lab0; /* call en_ending, line 113 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret = r_R1(z); + if (ret == 0) goto lab0; /* call R1, line 116 */ + if (ret < 0) return ret; + } + if (!(out_grouping_b(z, g_v_j, 97, 232))) goto lab0; + { int ret; + ret = slice_del(z); /* delete, line 116 */ + if (ret < 0) return ret; + } + break; + } + lab0: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 120 */ + { int ret = r_e_ending(z); + if (ret == 0) goto lab1; /* call e_ending, line 120 */ + if (ret < 0) return ret; + } + lab1: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 122 */ + z->ket = z->c; /* [, line 122 */ + if (!(eq_s_b(z, 4, s_16))) goto lab2; + z->bra = z->c; /* ], line 122 */ + { int ret = r_R2(z); + if (ret == 0) goto lab2; /* call R2, line 122 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* not, line 122 */ + if (!(eq_s_b(z, 1, s_17))) goto lab3; + goto lab2; + lab3: + z->c = z->l - m; + } + { int ret; + ret = slice_del(z); /* delete, line 122 */ + if (ret < 0) return ret; + } + z->ket = z->c; /* [, line 123 */ + if (!(eq_s_b(z, 2, s_18))) goto lab2; + z->bra = z->c; /* ], line 123 */ + { int ret = r_en_ending(z); + if (ret == 0) goto lab2; /* call en_ending, line 123 */ + if (ret < 0) return ret; + } + lab2: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 126 */ + z->ket = z->c; /* [, line 127 */ + among_var = find_among_b(z, a_4, 6); /* substring, line 127 */ + if (!(among_var)) goto lab4; + z->bra = z->c; /* ], line 127 */ + switch(among_var) { + case 0: goto lab4; + case 1: + { int ret = r_R2(z); + if (ret == 0) goto lab4; /* call R2, line 129 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 129 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* or, line 130 */ + z->ket = z->c; /* [, line 130 */ + if (!(eq_s_b(z, 2, s_19))) goto lab6; + z->bra = z->c; /* ], line 130 */ + { int ret = r_R2(z); + if (ret == 0) goto lab6; /* call R2, line 130 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* not, line 130 */ + if (!(eq_s_b(z, 1, s_20))) goto lab7; + goto lab6; + lab7: + z->c = z->l - m; + } + { int ret; + ret = slice_del(z); /* delete, line 130 */ + if (ret < 0) return ret; + } + goto lab5; + lab6: + z->c = z->l - m; + { int ret = r_undouble(z); + if (ret == 0) goto lab4; /* call undouble, line 130 */ + if (ret < 0) return ret; + } + } + lab5: + break; + case 2: + { int ret = r_R2(z); + if (ret == 0) goto lab4; /* call R2, line 133 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* not, line 133 */ + if (!(eq_s_b(z, 1, s_21))) goto lab8; + goto lab4; + lab8: + z->c = z->l - m; + } + { int ret; + ret = slice_del(z); /* delete, line 133 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret = r_R2(z); + if (ret == 0) goto lab4; /* call R2, line 136 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 136 */ + if (ret < 0) return ret; + } + { int ret = r_e_ending(z); + if (ret == 0) goto lab4; /* call e_ending, line 136 */ + if (ret < 0) return ret; + } + break; + case 4: + { int ret = r_R2(z); + if (ret == 0) goto lab4; /* call R2, line 139 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 139 */ + if (ret < 0) return ret; + } + break; + case 5: + { int ret = r_R2(z); + if (ret == 0) goto lab4; /* call R2, line 142 */ + if (ret < 0) return ret; + } + if (!(z->B[0])) goto lab4; /* Boolean test e_found, line 142 */ + { int ret; + ret = slice_del(z); /* delete, line 142 */ + if (ret < 0) return ret; + } + break; + } + lab4: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 146 */ + if (!(out_grouping_b(z, g_v_I, 73, 232))) goto lab9; + { int m_test = z->l - z->c; /* test, line 148 */ + if (!(find_among_b(z, a_5, 4))) goto lab9; /* among, line 149 */ + if (!(out_grouping_b(z, g_v, 97, 232))) goto lab9; + z->c = z->l - m_test; + } + z->ket = z->c; /* [, line 152 */ + if (z->c <= z->lb) goto lab9; + z->c--; /* next, line 152 */ + z->bra = z->c; /* ], line 152 */ + { int ret; + ret = slice_del(z); /* delete, line 152 */ + if (ret < 0) return ret; + } + lab9: + z->c = z->l - m; + } + return 1; +} + +extern int dutch_ISO_8859_1_stem(struct SN_env * z) { + { int c = z->c; /* do, line 159 */ + { int ret = r_prelude(z); + if (ret == 0) goto lab0; /* call prelude, line 159 */ + if (ret < 0) return ret; + } + lab0: + z->c = c; + } + { int c = z->c; /* do, line 160 */ + { int ret = r_mark_regions(z); + if (ret == 0) goto lab1; /* call mark_regions, line 160 */ + if (ret < 0) return ret; + } + lab1: + z->c = c; + } + z->lb = z->c; z->c = z->l; /* backwards, line 161 */ + + { int m = z->l - z->c; (void) m; /* do, line 162 */ + { int ret = r_standard_suffix(z); + if (ret == 0) goto lab2; /* call standard_suffix, line 162 */ + if (ret < 0) return ret; + } + lab2: + z->c = z->l - m; + } + z->c = z->lb; + { int c = z->c; /* do, line 163 */ + { int ret = r_postlude(z); + if (ret == 0) goto lab3; /* call postlude, line 163 */ + if (ret < 0) return ret; + } + lab3: + z->c = c; + } + return 1; +} + +extern struct SN_env * dutch_ISO_8859_1_create_env(void) { return SN_create_env(0, 2, 1); } + +extern void dutch_ISO_8859_1_close_env(struct SN_env * z) { SN_close_env(z); } + diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_dutch.h b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_dutch.h new file mode 100644 index 0000000..e67d111 --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_dutch.h @@ -0,0 +1,16 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern struct SN_env * dutch_ISO_8859_1_create_env(void); +extern void dutch_ISO_8859_1_close_env(struct SN_env * z); + +extern int dutch_ISO_8859_1_stem(struct SN_env * z); + +#ifdef __cplusplus +} +#endif + diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_english.c b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_english.c new file mode 100644 index 0000000..d862512 --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_english.c @@ -0,0 +1,1156 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#include "../runtime/header.h" + +extern int english_ISO_8859_1_stem(struct SN_env * z); +static int r_exception2(struct SN_env * z); +static int r_exception1(struct SN_env * z); +static int r_Step_5(struct SN_env * z); +static int r_Step_4(struct SN_env * z); +static int r_Step_3(struct SN_env * z); +static int r_Step_2(struct SN_env * z); +static int r_Step_1c(struct SN_env * z); +static int r_Step_1b(struct SN_env * z); +static int r_Step_1a(struct SN_env * z); +static int r_R2(struct SN_env * z); +static int r_R1(struct SN_env * z); +static int r_shortv(struct SN_env * z); +static int r_mark_regions(struct SN_env * z); +static int r_postlude(struct SN_env * z); +static int r_prelude(struct SN_env * z); + +extern struct SN_env * english_ISO_8859_1_create_env(void); +extern void english_ISO_8859_1_close_env(struct SN_env * z); + +static symbol s_0_0[6] = { 'c', 'o', 'm', 'm', 'u', 'n' }; +static symbol s_0_1[5] = { 'g', 'e', 'n', 'e', 'r' }; + +static struct among a_0[2] = +{ +/* 0 */ { 6, s_0_0, -1, -1, 0}, +/* 1 */ { 5, s_0_1, -1, -1, 0} +}; + +static symbol s_1_0[1] = { '\'' }; +static symbol s_1_1[3] = { '\'', 's', '\'' }; +static symbol s_1_2[2] = { '\'', 's' }; + +static struct among a_1[3] = +{ +/* 0 */ { 1, s_1_0, -1, 1, 0}, +/* 1 */ { 3, s_1_1, 0, 1, 0}, +/* 2 */ { 2, s_1_2, -1, 1, 0} +}; + +static symbol s_2_0[3] = { 'i', 'e', 'd' }; +static symbol s_2_1[1] = { 's' }; +static symbol s_2_2[3] = { 'i', 'e', 's' }; +static symbol s_2_3[4] = { 's', 's', 'e', 's' }; +static symbol s_2_4[2] = { 's', 's' }; +static symbol s_2_5[2] = { 'u', 's' }; + +static struct among a_2[6] = +{ +/* 0 */ { 3, s_2_0, -1, 2, 0}, +/* 1 */ { 1, s_2_1, -1, 3, 0}, +/* 2 */ { 3, s_2_2, 1, 2, 0}, +/* 3 */ { 4, s_2_3, 1, 1, 0}, +/* 4 */ { 2, s_2_4, 1, -1, 0}, +/* 5 */ { 2, s_2_5, 1, -1, 0} +}; + +static symbol s_3_1[2] = { 'b', 'b' }; +static symbol s_3_2[2] = { 'd', 'd' }; +static symbol s_3_3[2] = { 'f', 'f' }; +static symbol s_3_4[2] = { 'g', 'g' }; +static symbol s_3_5[2] = { 'b', 'l' }; +static symbol s_3_6[2] = { 'm', 'm' }; +static symbol s_3_7[2] = { 'n', 'n' }; +static symbol s_3_8[2] = { 'p', 'p' }; +static symbol s_3_9[2] = { 'r', 'r' }; +static symbol s_3_10[2] = { 'a', 't' }; +static symbol s_3_11[2] = { 't', 't' }; +static symbol s_3_12[2] = { 'i', 'z' }; + +static struct among a_3[13] = +{ +/* 0 */ { 0, 0, -1, 3, 0}, +/* 1 */ { 2, s_3_1, 0, 2, 0}, +/* 2 */ { 2, s_3_2, 0, 2, 0}, +/* 3 */ { 2, s_3_3, 0, 2, 0}, +/* 4 */ { 2, s_3_4, 0, 2, 0}, +/* 5 */ { 2, s_3_5, 0, 1, 0}, +/* 6 */ { 2, s_3_6, 0, 2, 0}, +/* 7 */ { 2, s_3_7, 0, 2, 0}, +/* 8 */ { 2, s_3_8, 0, 2, 0}, +/* 9 */ { 2, s_3_9, 0, 2, 0}, +/* 10 */ { 2, s_3_10, 0, 1, 0}, +/* 11 */ { 2, s_3_11, 0, 2, 0}, +/* 12 */ { 2, s_3_12, 0, 1, 0} +}; + +static symbol s_4_0[2] = { 'e', 'd' }; +static symbol s_4_1[3] = { 'e', 'e', 'd' }; +static symbol s_4_2[3] = { 'i', 'n', 'g' }; +static symbol s_4_3[4] = { 'e', 'd', 'l', 'y' }; +static symbol s_4_4[5] = { 'e', 'e', 'd', 'l', 'y' }; +static symbol s_4_5[5] = { 'i', 'n', 'g', 'l', 'y' }; + +static struct among a_4[6] = +{ +/* 0 */ { 2, s_4_0, -1, 2, 0}, +/* 1 */ { 3, s_4_1, 0, 1, 0}, +/* 2 */ { 3, s_4_2, -1, 2, 0}, +/* 3 */ { 4, s_4_3, -1, 2, 0}, +/* 4 */ { 5, s_4_4, 3, 1, 0}, +/* 5 */ { 5, s_4_5, -1, 2, 0} +}; + +static symbol s_5_0[4] = { 'a', 'n', 'c', 'i' }; +static symbol s_5_1[4] = { 'e', 'n', 'c', 'i' }; +static symbol s_5_2[3] = { 'o', 'g', 'i' }; +static symbol s_5_3[2] = { 'l', 'i' }; +static symbol s_5_4[3] = { 'b', 'l', 'i' }; +static symbol s_5_5[4] = { 'a', 'b', 'l', 'i' }; +static symbol s_5_6[4] = { 'a', 'l', 'l', 'i' }; +static symbol s_5_7[5] = { 'f', 'u', 'l', 'l', 'i' }; +static symbol s_5_8[6] = { 'l', 'e', 's', 's', 'l', 'i' }; +static symbol s_5_9[5] = { 'o', 'u', 's', 'l', 'i' }; +static symbol s_5_10[5] = { 'e', 'n', 't', 'l', 'i' }; +static symbol s_5_11[5] = { 'a', 'l', 'i', 't', 'i' }; +static symbol s_5_12[6] = { 'b', 'i', 'l', 'i', 't', 'i' }; +static symbol s_5_13[5] = { 'i', 'v', 'i', 't', 'i' }; +static symbol s_5_14[6] = { 't', 'i', 'o', 'n', 'a', 'l' }; +static symbol s_5_15[7] = { 'a', 't', 'i', 'o', 'n', 'a', 'l' }; +static symbol s_5_16[5] = { 'a', 'l', 'i', 's', 'm' }; +static symbol s_5_17[5] = { 'a', 't', 'i', 'o', 'n' }; +static symbol s_5_18[7] = { 'i', 'z', 'a', 't', 'i', 'o', 'n' }; +static symbol s_5_19[4] = { 'i', 'z', 'e', 'r' }; +static symbol s_5_20[4] = { 'a', 't', 'o', 'r' }; +static symbol s_5_21[7] = { 'i', 'v', 'e', 'n', 'e', 's', 's' }; +static symbol s_5_22[7] = { 'f', 'u', 'l', 'n', 'e', 's', 's' }; +static symbol s_5_23[7] = { 'o', 'u', 's', 'n', 'e', 's', 's' }; + +static struct among a_5[24] = +{ +/* 0 */ { 4, s_5_0, -1, 3, 0}, +/* 1 */ { 4, s_5_1, -1, 2, 0}, +/* 2 */ { 3, s_5_2, -1, 13, 0}, +/* 3 */ { 2, s_5_3, -1, 16, 0}, +/* 4 */ { 3, s_5_4, 3, 12, 0}, +/* 5 */ { 4, s_5_5, 4, 4, 0}, +/* 6 */ { 4, s_5_6, 3, 8, 0}, +/* 7 */ { 5, s_5_7, 3, 14, 0}, +/* 8 */ { 6, s_5_8, 3, 15, 0}, +/* 9 */ { 5, s_5_9, 3, 10, 0}, +/* 10 */ { 5, s_5_10, 3, 5, 0}, +/* 11 */ { 5, s_5_11, -1, 8, 0}, +/* 12 */ { 6, s_5_12, -1, 12, 0}, +/* 13 */ { 5, s_5_13, -1, 11, 0}, +/* 14 */ { 6, s_5_14, -1, 1, 0}, +/* 15 */ { 7, s_5_15, 14, 7, 0}, +/* 16 */ { 5, s_5_16, -1, 8, 0}, +/* 17 */ { 5, s_5_17, -1, 7, 0}, +/* 18 */ { 7, s_5_18, 17, 6, 0}, +/* 19 */ { 4, s_5_19, -1, 6, 0}, +/* 20 */ { 4, s_5_20, -1, 7, 0}, +/* 21 */ { 7, s_5_21, -1, 11, 0}, +/* 22 */ { 7, s_5_22, -1, 9, 0}, +/* 23 */ { 7, s_5_23, -1, 10, 0} +}; + +static symbol s_6_0[5] = { 'i', 'c', 'a', 't', 'e' }; +static symbol s_6_1[5] = { 'a', 't', 'i', 'v', 'e' }; +static symbol s_6_2[5] = { 'a', 'l', 'i', 'z', 'e' }; +static symbol s_6_3[5] = { 'i', 'c', 'i', 't', 'i' }; +static symbol s_6_4[4] = { 'i', 'c', 'a', 'l' }; +static symbol s_6_5[6] = { 't', 'i', 'o', 'n', 'a', 'l' }; +static symbol s_6_6[7] = { 'a', 't', 'i', 'o', 'n', 'a', 'l' }; +static symbol s_6_7[3] = { 'f', 'u', 'l' }; +static symbol s_6_8[4] = { 'n', 'e', 's', 's' }; + +static struct among a_6[9] = +{ +/* 0 */ { 5, s_6_0, -1, 4, 0}, +/* 1 */ { 5, s_6_1, -1, 6, 0}, +/* 2 */ { 5, s_6_2, -1, 3, 0}, +/* 3 */ { 5, s_6_3, -1, 4, 0}, +/* 4 */ { 4, s_6_4, -1, 4, 0}, +/* 5 */ { 6, s_6_5, -1, 1, 0}, +/* 6 */ { 7, s_6_6, 5, 2, 0}, +/* 7 */ { 3, s_6_7, -1, 5, 0}, +/* 8 */ { 4, s_6_8, -1, 5, 0} +}; + +static symbol s_7_0[2] = { 'i', 'c' }; +static symbol s_7_1[4] = { 'a', 'n', 'c', 'e' }; +static symbol s_7_2[4] = { 'e', 'n', 'c', 'e' }; +static symbol s_7_3[4] = { 'a', 'b', 'l', 'e' }; +static symbol s_7_4[4] = { 'i', 'b', 'l', 'e' }; +static symbol s_7_5[3] = { 'a', 't', 'e' }; +static symbol s_7_6[3] = { 'i', 'v', 'e' }; +static symbol s_7_7[3] = { 'i', 'z', 'e' }; +static symbol s_7_8[3] = { 'i', 't', 'i' }; +static symbol s_7_9[2] = { 'a', 'l' }; +static symbol s_7_10[3] = { 'i', 's', 'm' }; +static symbol s_7_11[3] = { 'i', 'o', 'n' }; +static symbol s_7_12[2] = { 'e', 'r' }; +static symbol s_7_13[3] = { 'o', 'u', 's' }; +static symbol s_7_14[3] = { 'a', 'n', 't' }; +static symbol s_7_15[3] = { 'e', 'n', 't' }; +static symbol s_7_16[4] = { 'm', 'e', 'n', 't' }; +static symbol s_7_17[5] = { 'e', 'm', 'e', 'n', 't' }; + +static struct among a_7[18] = +{ +/* 0 */ { 2, s_7_0, -1, 1, 0}, +/* 1 */ { 4, s_7_1, -1, 1, 0}, +/* 2 */ { 4, s_7_2, -1, 1, 0}, +/* 3 */ { 4, s_7_3, -1, 1, 0}, +/* 4 */ { 4, s_7_4, -1, 1, 0}, +/* 5 */ { 3, s_7_5, -1, 1, 0}, +/* 6 */ { 3, s_7_6, -1, 1, 0}, +/* 7 */ { 3, s_7_7, -1, 1, 0}, +/* 8 */ { 3, s_7_8, -1, 1, 0}, +/* 9 */ { 2, s_7_9, -1, 1, 0}, +/* 10 */ { 3, s_7_10, -1, 1, 0}, +/* 11 */ { 3, s_7_11, -1, 2, 0}, +/* 12 */ { 2, s_7_12, -1, 1, 0}, +/* 13 */ { 3, s_7_13, -1, 1, 0}, +/* 14 */ { 3, s_7_14, -1, 1, 0}, +/* 15 */ { 3, s_7_15, -1, 1, 0}, +/* 16 */ { 4, s_7_16, 15, 1, 0}, +/* 17 */ { 5, s_7_17, 16, 1, 0} +}; + +static symbol s_8_0[1] = { 'e' }; +static symbol s_8_1[1] = { 'l' }; + +static struct among a_8[2] = +{ +/* 0 */ { 1, s_8_0, -1, 1, 0}, +/* 1 */ { 1, s_8_1, -1, 2, 0} +}; + +static symbol s_9_0[7] = { 's', 'u', 'c', 'c', 'e', 'e', 'd' }; +static symbol s_9_1[7] = { 'p', 'r', 'o', 'c', 'e', 'e', 'd' }; +static symbol s_9_2[6] = { 'e', 'x', 'c', 'e', 'e', 'd' }; +static symbol s_9_3[7] = { 'c', 'a', 'n', 'n', 'i', 'n', 'g' }; +static symbol s_9_4[6] = { 'i', 'n', 'n', 'i', 'n', 'g' }; +static symbol s_9_5[7] = { 'e', 'a', 'r', 'r', 'i', 'n', 'g' }; +static symbol s_9_6[7] = { 'h', 'e', 'r', 'r', 'i', 'n', 'g' }; +static symbol s_9_7[6] = { 'o', 'u', 't', 'i', 'n', 'g' }; + +static struct among a_9[8] = +{ +/* 0 */ { 7, s_9_0, -1, -1, 0}, +/* 1 */ { 7, s_9_1, -1, -1, 0}, +/* 2 */ { 6, s_9_2, -1, -1, 0}, +/* 3 */ { 7, s_9_3, -1, -1, 0}, +/* 4 */ { 6, s_9_4, -1, -1, 0}, +/* 5 */ { 7, s_9_5, -1, -1, 0}, +/* 6 */ { 7, s_9_6, -1, -1, 0}, +/* 7 */ { 6, s_9_7, -1, -1, 0} +}; + +static symbol s_10_0[5] = { 'a', 'n', 'd', 'e', 's' }; +static symbol s_10_1[5] = { 'a', 't', 'l', 'a', 's' }; +static symbol s_10_2[4] = { 'b', 'i', 'a', 's' }; +static symbol s_10_3[6] = { 'c', 'o', 's', 'm', 'o', 's' }; +static symbol s_10_4[5] = { 'd', 'y', 'i', 'n', 'g' }; +static symbol s_10_5[5] = { 'e', 'a', 'r', 'l', 'y' }; +static symbol s_10_6[6] = { 'g', 'e', 'n', 't', 'l', 'y' }; +static symbol s_10_7[4] = { 'h', 'o', 'w', 'e' }; +static symbol s_10_8[4] = { 'i', 'd', 'l', 'y' }; +static symbol s_10_9[5] = { 'l', 'y', 'i', 'n', 'g' }; +static symbol s_10_10[4] = { 'n', 'e', 'w', 's' }; +static symbol s_10_11[4] = { 'o', 'n', 'l', 'y' }; +static symbol s_10_12[6] = { 's', 'i', 'n', 'g', 'l', 'y' }; +static symbol s_10_13[5] = { 's', 'k', 'i', 'e', 's' }; +static symbol s_10_14[4] = { 's', 'k', 'i', 's' }; +static symbol s_10_15[3] = { 's', 'k', 'y' }; +static symbol s_10_16[5] = { 't', 'y', 'i', 'n', 'g' }; +static symbol s_10_17[4] = { 'u', 'g', 'l', 'y' }; + +static struct among a_10[18] = +{ +/* 0 */ { 5, s_10_0, -1, -1, 0}, +/* 1 */ { 5, s_10_1, -1, -1, 0}, +/* 2 */ { 4, s_10_2, -1, -1, 0}, +/* 3 */ { 6, s_10_3, -1, -1, 0}, +/* 4 */ { 5, s_10_4, -1, 3, 0}, +/* 5 */ { 5, s_10_5, -1, 9, 0}, +/* 6 */ { 6, s_10_6, -1, 7, 0}, +/* 7 */ { 4, s_10_7, -1, -1, 0}, +/* 8 */ { 4, s_10_8, -1, 6, 0}, +/* 9 */ { 5, s_10_9, -1, 4, 0}, +/* 10 */ { 4, s_10_10, -1, -1, 0}, +/* 11 */ { 4, s_10_11, -1, 10, 0}, +/* 12 */ { 6, s_10_12, -1, 11, 0}, +/* 13 */ { 5, s_10_13, -1, 2, 0}, +/* 14 */ { 4, s_10_14, -1, 1, 0}, +/* 15 */ { 3, s_10_15, -1, -1, 0}, +/* 16 */ { 5, s_10_16, -1, 5, 0}, +/* 17 */ { 4, s_10_17, -1, 8, 0} +}; + +static unsigned char g_v[] = { 17, 65, 16, 1 }; + +static unsigned char g_v_WXY[] = { 1, 17, 65, 208, 1 }; + +static unsigned char g_valid_LI[] = { 55, 141, 2 }; + +static symbol s_0[] = { '\'' }; +static symbol s_1[] = { 'y' }; +static symbol s_2[] = { 'Y' }; +static symbol s_3[] = { 'y' }; +static symbol s_4[] = { 'Y' }; +static symbol s_5[] = { 's', 's' }; +static symbol s_6[] = { 'i', 'e' }; +static symbol s_7[] = { 'i' }; +static symbol s_8[] = { 'e', 'e' }; +static symbol s_9[] = { 'e' }; +static symbol s_10[] = { 'e' }; +static symbol s_11[] = { 'y' }; +static symbol s_12[] = { 'Y' }; +static symbol s_13[] = { 'i' }; +static symbol s_14[] = { 't', 'i', 'o', 'n' }; +static symbol s_15[] = { 'e', 'n', 'c', 'e' }; +static symbol s_16[] = { 'a', 'n', 'c', 'e' }; +static symbol s_17[] = { 'a', 'b', 'l', 'e' }; +static symbol s_18[] = { 'e', 'n', 't' }; +static symbol s_19[] = { 'i', 'z', 'e' }; +static symbol s_20[] = { 'a', 't', 'e' }; +static symbol s_21[] = { 'a', 'l' }; +static symbol s_22[] = { 'f', 'u', 'l' }; +static symbol s_23[] = { 'o', 'u', 's' }; +static symbol s_24[] = { 'i', 'v', 'e' }; +static symbol s_25[] = { 'b', 'l', 'e' }; +static symbol s_26[] = { 'l' }; +static symbol s_27[] = { 'o', 'g' }; +static symbol s_28[] = { 'f', 'u', 'l' }; +static symbol s_29[] = { 'l', 'e', 's', 's' }; +static symbol s_30[] = { 't', 'i', 'o', 'n' }; +static symbol s_31[] = { 'a', 't', 'e' }; +static symbol s_32[] = { 'a', 'l' }; +static symbol s_33[] = { 'i', 'c' }; +static symbol s_34[] = { 's' }; +static symbol s_35[] = { 't' }; +static symbol s_36[] = { 'l' }; +static symbol s_37[] = { 's', 'k', 'i' }; +static symbol s_38[] = { 's', 'k', 'y' }; +static symbol s_39[] = { 'd', 'i', 'e' }; +static symbol s_40[] = { 'l', 'i', 'e' }; +static symbol s_41[] = { 't', 'i', 'e' }; +static symbol s_42[] = { 'i', 'd', 'l' }; +static symbol s_43[] = { 'g', 'e', 'n', 't', 'l' }; +static symbol s_44[] = { 'u', 'g', 'l', 'i' }; +static symbol s_45[] = { 'e', 'a', 'r', 'l', 'i' }; +static symbol s_46[] = { 'o', 'n', 'l', 'i' }; +static symbol s_47[] = { 's', 'i', 'n', 'g', 'l' }; +static symbol s_48[] = { 'Y' }; +static symbol s_49[] = { 'y' }; + +static int r_prelude(struct SN_env * z) { + z->B[0] = 0; /* unset Y_found, line 26 */ + { int c = z->c; /* do, line 27 */ + z->bra = z->c; /* [, line 27 */ + if (!(eq_s(z, 1, s_0))) goto lab0; + z->ket = z->c; /* ], line 27 */ + { int ret; + ret = slice_del(z); /* delete, line 27 */ + if (ret < 0) return ret; + } + lab0: + z->c = c; + } + { int c = z->c; /* do, line 28 */ + z->bra = z->c; /* [, line 28 */ + if (!(eq_s(z, 1, s_1))) goto lab1; + z->ket = z->c; /* ], line 28 */ + if (!(in_grouping(z, g_v, 97, 121))) goto lab1; + { int ret; + ret = slice_from_s(z, 1, s_2); /* <-, line 28 */ + if (ret < 0) return ret; + } + z->B[0] = 1; /* set Y_found, line 28 */ + lab1: + z->c = c; + } + { int c = z->c; /* do, line 29 */ + while(1) { /* repeat, line 29 */ + int c = z->c; + while(1) { /* goto, line 29 */ + int c = z->c; + if (!(in_grouping(z, g_v, 97, 121))) goto lab4; + z->bra = z->c; /* [, line 29 */ + if (!(eq_s(z, 1, s_3))) goto lab4; + z->ket = z->c; /* ], line 29 */ + z->c = c; + break; + lab4: + z->c = c; + if (z->c >= z->l) goto lab3; + z->c++; /* goto, line 29 */ + } + { int ret; + ret = slice_from_s(z, 1, s_4); /* <-, line 29 */ + if (ret < 0) return ret; + } + z->B[0] = 1; /* set Y_found, line 29 */ + continue; + lab3: + z->c = c; + break; + } + z->c = c; + } + return 1; +} + +static int r_mark_regions(struct SN_env * z) { + z->I[0] = z->l; + z->I[1] = z->l; + { int c = z->c; /* do, line 35 */ + { int c = z->c; /* or, line 40 */ + if (!(find_among(z, a_0, 2))) goto lab2; /* among, line 36 */ + goto lab1; + lab2: + z->c = c; + while(1) { /* gopast, line 40 */ + if (!(in_grouping(z, g_v, 97, 121))) goto lab3; + break; + lab3: + if (z->c >= z->l) goto lab0; + z->c++; /* gopast, line 40 */ + } + while(1) { /* gopast, line 40 */ + if (!(out_grouping(z, g_v, 97, 121))) goto lab4; + break; + lab4: + if (z->c >= z->l) goto lab0; + z->c++; /* gopast, line 40 */ + } + } + lab1: + z->I[0] = z->c; /* setmark p1, line 41 */ + while(1) { /* gopast, line 42 */ + if (!(in_grouping(z, g_v, 97, 121))) goto lab5; + break; + lab5: + if (z->c >= z->l) goto lab0; + z->c++; /* gopast, line 42 */ + } + while(1) { /* gopast, line 42 */ + if (!(out_grouping(z, g_v, 97, 121))) goto lab6; + break; + lab6: + if (z->c >= z->l) goto lab0; + z->c++; /* gopast, line 42 */ + } + z->I[1] = z->c; /* setmark p2, line 42 */ + lab0: + z->c = c; + } + return 1; +} + +static int r_shortv(struct SN_env * z) { + { int m = z->l - z->c; (void) m; /* or, line 50 */ + if (!(out_grouping_b(z, g_v_WXY, 89, 121))) goto lab1; + if (!(in_grouping_b(z, g_v, 97, 121))) goto lab1; + if (!(out_grouping_b(z, g_v, 97, 121))) goto lab1; + goto lab0; + lab1: + z->c = z->l - m; + if (!(out_grouping_b(z, g_v, 97, 121))) return 0; + if (!(in_grouping_b(z, g_v, 97, 121))) return 0; + if (z->c > z->lb) return 0; /* atlimit, line 51 */ + } +lab0: + return 1; +} + +static int r_R1(struct SN_env * z) { + if (!(z->I[0] <= z->c)) return 0; + return 1; +} + +static int r_R2(struct SN_env * z) { + if (!(z->I[1] <= z->c)) return 0; + return 1; +} + +static int r_Step_1a(struct SN_env * z) { + int among_var; + { int m = z->l - z->c; (void) m; /* try, line 58 */ + z->ket = z->c; /* [, line 59 */ + among_var = find_among_b(z, a_1, 3); /* substring, line 59 */ + if (!(among_var)) { z->c = z->l - m; goto lab0; } + z->bra = z->c; /* ], line 59 */ + switch(among_var) { + case 0: { z->c = z->l - m; goto lab0; } + case 1: + { int ret; + ret = slice_del(z); /* delete, line 61 */ + if (ret < 0) return ret; + } + break; + } + lab0: + ; + } + z->ket = z->c; /* [, line 64 */ + among_var = find_among_b(z, a_2, 6); /* substring, line 64 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 64 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_from_s(z, 2, s_5); /* <-, line 65 */ + if (ret < 0) return ret; + } + break; + case 2: + { int m = z->l - z->c; (void) m; /* or, line 67 */ + if (z->c <= z->lb) goto lab2; + z->c--; /* next, line 67 */ + if (z->c > z->lb) goto lab2; /* atlimit, line 67 */ + { int ret; + ret = slice_from_s(z, 2, s_6); /* <-, line 67 */ + if (ret < 0) return ret; + } + goto lab1; + lab2: + z->c = z->l - m; + { int ret; + ret = slice_from_s(z, 1, s_7); /* <-, line 67 */ + if (ret < 0) return ret; + } + } + lab1: + break; + case 3: + if (z->c <= z->lb) return 0; + z->c--; /* next, line 68 */ + while(1) { /* gopast, line 68 */ + if (!(in_grouping_b(z, g_v, 97, 121))) goto lab3; + break; + lab3: + if (z->c <= z->lb) return 0; + z->c--; /* gopast, line 68 */ + } + { int ret; + ret = slice_del(z); /* delete, line 68 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_Step_1b(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 74 */ + among_var = find_among_b(z, a_4, 6); /* substring, line 74 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 74 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 76 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 2, s_8); /* <-, line 76 */ + if (ret < 0) return ret; + } + break; + case 2: + { int m_test = z->l - z->c; /* test, line 79 */ + while(1) { /* gopast, line 79 */ + if (!(in_grouping_b(z, g_v, 97, 121))) goto lab0; + break; + lab0: + if (z->c <= z->lb) return 0; + z->c--; /* gopast, line 79 */ + } + z->c = z->l - m_test; + } + { int ret; + ret = slice_del(z); /* delete, line 79 */ + if (ret < 0) return ret; + } + { int m_test = z->l - z->c; /* test, line 80 */ + among_var = find_among_b(z, a_3, 13); /* substring, line 80 */ + if (!(among_var)) return 0; + z->c = z->l - m_test; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + { int c = z->c; + ret = insert_s(z, z->c, z->c, 1, s_9); /* <+, line 82 */ + z->c = c; + } + if (ret < 0) return ret; + } + break; + case 2: + z->ket = z->c; /* [, line 85 */ + if (z->c <= z->lb) return 0; + z->c--; /* next, line 85 */ + z->bra = z->c; /* ], line 85 */ + { int ret; + ret = slice_del(z); /* delete, line 85 */ + if (ret < 0) return ret; + } + break; + case 3: + if (z->c != z->I[0]) return 0; /* atmark, line 86 */ + { int m_test = z->l - z->c; /* test, line 86 */ + { int ret = r_shortv(z); + if (ret == 0) return 0; /* call shortv, line 86 */ + if (ret < 0) return ret; + } + z->c = z->l - m_test; + } + { int ret; + { int c = z->c; + ret = insert_s(z, z->c, z->c, 1, s_10); /* <+, line 86 */ + z->c = c; + } + if (ret < 0) return ret; + } + break; + } + break; + } + return 1; +} + +static int r_Step_1c(struct SN_env * z) { + z->ket = z->c; /* [, line 93 */ + { int m = z->l - z->c; (void) m; /* or, line 93 */ + if (!(eq_s_b(z, 1, s_11))) goto lab1; + goto lab0; + lab1: + z->c = z->l - m; + if (!(eq_s_b(z, 1, s_12))) return 0; + } +lab0: + z->bra = z->c; /* ], line 93 */ + if (!(out_grouping_b(z, g_v, 97, 121))) return 0; + { int m = z->l - z->c; (void) m; /* not, line 94 */ + if (z->c > z->lb) goto lab2; /* atlimit, line 94 */ + return 0; + lab2: + z->c = z->l - m; + } + { int ret; + ret = slice_from_s(z, 1, s_13); /* <-, line 95 */ + if (ret < 0) return ret; + } + return 1; +} + +static int r_Step_2(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 99 */ + among_var = find_among_b(z, a_5, 24); /* substring, line 99 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 99 */ + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 99 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_from_s(z, 4, s_14); /* <-, line 100 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 4, s_15); /* <-, line 101 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_from_s(z, 4, s_16); /* <-, line 102 */ + if (ret < 0) return ret; + } + break; + case 4: + { int ret; + ret = slice_from_s(z, 4, s_17); /* <-, line 103 */ + if (ret < 0) return ret; + } + break; + case 5: + { int ret; + ret = slice_from_s(z, 3, s_18); /* <-, line 104 */ + if (ret < 0) return ret; + } + break; + case 6: + { int ret; + ret = slice_from_s(z, 3, s_19); /* <-, line 106 */ + if (ret < 0) return ret; + } + break; + case 7: + { int ret; + ret = slice_from_s(z, 3, s_20); /* <-, line 108 */ + if (ret < 0) return ret; + } + break; + case 8: + { int ret; + ret = slice_from_s(z, 2, s_21); /* <-, line 110 */ + if (ret < 0) return ret; + } + break; + case 9: + { int ret; + ret = slice_from_s(z, 3, s_22); /* <-, line 111 */ + if (ret < 0) return ret; + } + break; + case 10: + { int ret; + ret = slice_from_s(z, 3, s_23); /* <-, line 113 */ + if (ret < 0) return ret; + } + break; + case 11: + { int ret; + ret = slice_from_s(z, 3, s_24); /* <-, line 115 */ + if (ret < 0) return ret; + } + break; + case 12: + { int ret; + ret = slice_from_s(z, 3, s_25); /* <-, line 117 */ + if (ret < 0) return ret; + } + break; + case 13: + if (!(eq_s_b(z, 1, s_26))) return 0; + { int ret; + ret = slice_from_s(z, 2, s_27); /* <-, line 118 */ + if (ret < 0) return ret; + } + break; + case 14: + { int ret; + ret = slice_from_s(z, 3, s_28); /* <-, line 119 */ + if (ret < 0) return ret; + } + break; + case 15: + { int ret; + ret = slice_from_s(z, 4, s_29); /* <-, line 120 */ + if (ret < 0) return ret; + } + break; + case 16: + if (!(in_grouping_b(z, g_valid_LI, 99, 116))) return 0; + { int ret; + ret = slice_del(z); /* delete, line 121 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_Step_3(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 126 */ + among_var = find_among_b(z, a_6, 9); /* substring, line 126 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 126 */ + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 126 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_from_s(z, 4, s_30); /* <-, line 127 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 3, s_31); /* <-, line 128 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_from_s(z, 2, s_32); /* <-, line 129 */ + if (ret < 0) return ret; + } + break; + case 4: + { int ret; + ret = slice_from_s(z, 2, s_33); /* <-, line 131 */ + if (ret < 0) return ret; + } + break; + case 5: + { int ret; + ret = slice_del(z); /* delete, line 133 */ + if (ret < 0) return ret; + } + break; + case 6: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 135 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 135 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_Step_4(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 140 */ + among_var = find_among_b(z, a_7, 18); /* substring, line 140 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 140 */ + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 140 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 143 */ + if (ret < 0) return ret; + } + break; + case 2: + { int m = z->l - z->c; (void) m; /* or, line 144 */ + if (!(eq_s_b(z, 1, s_34))) goto lab1; + goto lab0; + lab1: + z->c = z->l - m; + if (!(eq_s_b(z, 1, s_35))) return 0; + } + lab0: + { int ret; + ret = slice_del(z); /* delete, line 144 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_Step_5(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 149 */ + among_var = find_among_b(z, a_8, 2); /* substring, line 149 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 149 */ + switch(among_var) { + case 0: return 0; + case 1: + { int m = z->l - z->c; (void) m; /* or, line 150 */ + { int ret = r_R2(z); + if (ret == 0) goto lab1; /* call R2, line 150 */ + if (ret < 0) return ret; + } + goto lab0; + lab1: + z->c = z->l - m; + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 150 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* not, line 150 */ + { int ret = r_shortv(z); + if (ret == 0) goto lab2; /* call shortv, line 150 */ + if (ret < 0) return ret; + } + return 0; + lab2: + z->c = z->l - m; + } + } + lab0: + { int ret; + ret = slice_del(z); /* delete, line 150 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 151 */ + if (ret < 0) return ret; + } + if (!(eq_s_b(z, 1, s_36))) return 0; + { int ret; + ret = slice_del(z); /* delete, line 151 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_exception2(struct SN_env * z) { + z->ket = z->c; /* [, line 157 */ + if (!(find_among_b(z, a_9, 8))) return 0; /* substring, line 157 */ + z->bra = z->c; /* ], line 157 */ + if (z->c > z->lb) return 0; /* atlimit, line 157 */ + return 1; +} + +static int r_exception1(struct SN_env * z) { + int among_var; + z->bra = z->c; /* [, line 169 */ + among_var = find_among(z, a_10, 18); /* substring, line 169 */ + if (!(among_var)) return 0; + z->ket = z->c; /* ], line 169 */ + if (z->c < z->l) return 0; /* atlimit, line 169 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_from_s(z, 3, s_37); /* <-, line 173 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 3, s_38); /* <-, line 174 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_from_s(z, 3, s_39); /* <-, line 175 */ + if (ret < 0) return ret; + } + break; + case 4: + { int ret; + ret = slice_from_s(z, 3, s_40); /* <-, line 176 */ + if (ret < 0) return ret; + } + break; + case 5: + { int ret; + ret = slice_from_s(z, 3, s_41); /* <-, line 177 */ + if (ret < 0) return ret; + } + break; + case 6: + { int ret; + ret = slice_from_s(z, 3, s_42); /* <-, line 181 */ + if (ret < 0) return ret; + } + break; + case 7: + { int ret; + ret = slice_from_s(z, 5, s_43); /* <-, line 182 */ + if (ret < 0) return ret; + } + break; + case 8: + { int ret; + ret = slice_from_s(z, 4, s_44); /* <-, line 183 */ + if (ret < 0) return ret; + } + break; + case 9: + { int ret; + ret = slice_from_s(z, 5, s_45); /* <-, line 184 */ + if (ret < 0) return ret; + } + break; + case 10: + { int ret; + ret = slice_from_s(z, 4, s_46); /* <-, line 185 */ + if (ret < 0) return ret; + } + break; + case 11: + { int ret; + ret = slice_from_s(z, 5, s_47); /* <-, line 186 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_postlude(struct SN_env * z) { + if (!(z->B[0])) return 0; /* Boolean test Y_found, line 202 */ + while(1) { /* repeat, line 202 */ + int c = z->c; + while(1) { /* goto, line 202 */ + int c = z->c; + z->bra = z->c; /* [, line 202 */ + if (!(eq_s(z, 1, s_48))) goto lab1; + z->ket = z->c; /* ], line 202 */ + z->c = c; + break; + lab1: + z->c = c; + if (z->c >= z->l) goto lab0; + z->c++; /* goto, line 202 */ + } + { int ret; + ret = slice_from_s(z, 1, s_49); /* <-, line 202 */ + if (ret < 0) return ret; + } + continue; + lab0: + z->c = c; + break; + } + return 1; +} + +extern int english_ISO_8859_1_stem(struct SN_env * z) { + { int c = z->c; /* or, line 206 */ + { int ret = r_exception1(z); + if (ret == 0) goto lab1; /* call exception1, line 206 */ + if (ret < 0) return ret; + } + goto lab0; + lab1: + z->c = c; + { int c = z->c; /* not, line 207 */ + { int c = z->c + 3; + if (0 > c || c > z->l) goto lab3; + z->c = c; /* hop, line 207 */ + } + goto lab2; + lab3: + z->c = c; + } + goto lab0; + lab2: + z->c = c; + { int c = z->c; /* do, line 208 */ + { int ret = r_prelude(z); + if (ret == 0) goto lab4; /* call prelude, line 208 */ + if (ret < 0) return ret; + } + lab4: + z->c = c; + } + { int c = z->c; /* do, line 209 */ + { int ret = r_mark_regions(z); + if (ret == 0) goto lab5; /* call mark_regions, line 209 */ + if (ret < 0) return ret; + } + lab5: + z->c = c; + } + z->lb = z->c; z->c = z->l; /* backwards, line 210 */ + + { int m = z->l - z->c; (void) m; /* do, line 212 */ + { int ret = r_Step_1a(z); + if (ret == 0) goto lab6; /* call Step_1a, line 212 */ + if (ret < 0) return ret; + } + lab6: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* or, line 214 */ + { int ret = r_exception2(z); + if (ret == 0) goto lab8; /* call exception2, line 214 */ + if (ret < 0) return ret; + } + goto lab7; + lab8: + z->c = z->l - m; + { int m = z->l - z->c; (void) m; /* do, line 216 */ + { int ret = r_Step_1b(z); + if (ret == 0) goto lab9; /* call Step_1b, line 216 */ + if (ret < 0) return ret; + } + lab9: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 217 */ + { int ret = r_Step_1c(z); + if (ret == 0) goto lab10; /* call Step_1c, line 217 */ + if (ret < 0) return ret; + } + lab10: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 219 */ + { int ret = r_Step_2(z); + if (ret == 0) goto lab11; /* call Step_2, line 219 */ + if (ret < 0) return ret; + } + lab11: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 220 */ + { int ret = r_Step_3(z); + if (ret == 0) goto lab12; /* call Step_3, line 220 */ + if (ret < 0) return ret; + } + lab12: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 221 */ + { int ret = r_Step_4(z); + if (ret == 0) goto lab13; /* call Step_4, line 221 */ + if (ret < 0) return ret; + } + lab13: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 223 */ + { int ret = r_Step_5(z); + if (ret == 0) goto lab14; /* call Step_5, line 223 */ + if (ret < 0) return ret; + } + lab14: + z->c = z->l - m; + } + } + lab7: + z->c = z->lb; + { int c = z->c; /* do, line 226 */ + { int ret = r_postlude(z); + if (ret == 0) goto lab15; /* call postlude, line 226 */ + if (ret < 0) return ret; + } + lab15: + z->c = c; + } + } +lab0: + return 1; +} + +extern struct SN_env * english_ISO_8859_1_create_env(void) { return SN_create_env(0, 2, 1); } + +extern void english_ISO_8859_1_close_env(struct SN_env * z) { SN_close_env(z); } + diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_english.h b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_english.h new file mode 100644 index 0000000..e685dcf --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_english.h @@ -0,0 +1,16 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern struct SN_env * english_ISO_8859_1_create_env(void); +extern void english_ISO_8859_1_close_env(struct SN_env * z); + +extern int english_ISO_8859_1_stem(struct SN_env * z); + +#ifdef __cplusplus +} +#endif + diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_finnish.c b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_finnish.c new file mode 100644 index 0000000..0d851cd --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_finnish.c @@ -0,0 +1,792 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#include "../runtime/header.h" + +extern int finnish_ISO_8859_1_stem(struct SN_env * z); +static int r_tidy(struct SN_env * z); +static int r_other_endings(struct SN_env * z); +static int r_t_plural(struct SN_env * z); +static int r_i_plural(struct SN_env * z); +static int r_case_ending(struct SN_env * z); +static int r_VI(struct SN_env * z); +static int r_LONG(struct SN_env * z); +static int r_possessive(struct SN_env * z); +static int r_particle_etc(struct SN_env * z); +static int r_R2(struct SN_env * z); +static int r_mark_regions(struct SN_env * z); + +extern struct SN_env * finnish_ISO_8859_1_create_env(void); +extern void finnish_ISO_8859_1_close_env(struct SN_env * z); + +static symbol s_0_0[2] = { 'p', 'a' }; +static symbol s_0_1[3] = { 's', 't', 'i' }; +static symbol s_0_2[4] = { 'k', 'a', 'a', 'n' }; +static symbol s_0_3[3] = { 'h', 'a', 'n' }; +static symbol s_0_4[3] = { 'k', 'i', 'n' }; +static symbol s_0_5[3] = { 'h', 0xE4, 'n' }; +static symbol s_0_6[4] = { 'k', 0xE4, 0xE4, 'n' }; +static symbol s_0_7[2] = { 'k', 'o' }; +static symbol s_0_8[2] = { 'p', 0xE4 }; +static symbol s_0_9[2] = { 'k', 0xF6 }; + +static struct among a_0[10] = +{ +/* 0 */ { 2, s_0_0, -1, 1, 0}, +/* 1 */ { 3, s_0_1, -1, 2, 0}, +/* 2 */ { 4, s_0_2, -1, 1, 0}, +/* 3 */ { 3, s_0_3, -1, 1, 0}, +/* 4 */ { 3, s_0_4, -1, 1, 0}, +/* 5 */ { 3, s_0_5, -1, 1, 0}, +/* 6 */ { 4, s_0_6, -1, 1, 0}, +/* 7 */ { 2, s_0_7, -1, 1, 0}, +/* 8 */ { 2, s_0_8, -1, 1, 0}, +/* 9 */ { 2, s_0_9, -1, 1, 0} +}; + +static symbol s_1_0[3] = { 'l', 'l', 'a' }; +static symbol s_1_1[2] = { 'n', 'a' }; +static symbol s_1_2[3] = { 's', 's', 'a' }; +static symbol s_1_3[2] = { 't', 'a' }; +static symbol s_1_4[3] = { 'l', 't', 'a' }; +static symbol s_1_5[3] = { 's', 't', 'a' }; + +static struct among a_1[6] = +{ +/* 0 */ { 3, s_1_0, -1, -1, 0}, +/* 1 */ { 2, s_1_1, -1, -1, 0}, +/* 2 */ { 3, s_1_2, -1, -1, 0}, +/* 3 */ { 2, s_1_3, -1, -1, 0}, +/* 4 */ { 3, s_1_4, 3, -1, 0}, +/* 5 */ { 3, s_1_5, 3, -1, 0} +}; + +static symbol s_2_0[3] = { 'l', 'l', 0xE4 }; +static symbol s_2_1[2] = { 'n', 0xE4 }; +static symbol s_2_2[3] = { 's', 's', 0xE4 }; +static symbol s_2_3[2] = { 't', 0xE4 }; +static symbol s_2_4[3] = { 'l', 't', 0xE4 }; +static symbol s_2_5[3] = { 's', 't', 0xE4 }; + +static struct among a_2[6] = +{ +/* 0 */ { 3, s_2_0, -1, -1, 0}, +/* 1 */ { 2, s_2_1, -1, -1, 0}, +/* 2 */ { 3, s_2_2, -1, -1, 0}, +/* 3 */ { 2, s_2_3, -1, -1, 0}, +/* 4 */ { 3, s_2_4, 3, -1, 0}, +/* 5 */ { 3, s_2_5, 3, -1, 0} +}; + +static symbol s_3_0[3] = { 'l', 'l', 'e' }; +static symbol s_3_1[3] = { 'i', 'n', 'e' }; + +static struct among a_3[2] = +{ +/* 0 */ { 3, s_3_0, -1, -1, 0}, +/* 1 */ { 3, s_3_1, -1, -1, 0} +}; + +static symbol s_4_0[3] = { 'n', 's', 'a' }; +static symbol s_4_1[3] = { 'm', 'm', 'e' }; +static symbol s_4_2[3] = { 'n', 'n', 'e' }; +static symbol s_4_3[2] = { 'n', 'i' }; +static symbol s_4_4[2] = { 's', 'i' }; +static symbol s_4_5[2] = { 'a', 'n' }; +static symbol s_4_6[2] = { 'e', 'n' }; +static symbol s_4_7[2] = { 0xE4, 'n' }; +static symbol s_4_8[3] = { 'n', 's', 0xE4 }; + +static struct among a_4[9] = +{ +/* 0 */ { 3, s_4_0, -1, 3, 0}, +/* 1 */ { 3, s_4_1, -1, 3, 0}, +/* 2 */ { 3, s_4_2, -1, 3, 0}, +/* 3 */ { 2, s_4_3, -1, 2, 0}, +/* 4 */ { 2, s_4_4, -1, 1, 0}, +/* 5 */ { 2, s_4_5, -1, 4, 0}, +/* 6 */ { 2, s_4_6, -1, 6, 0}, +/* 7 */ { 2, s_4_7, -1, 5, 0}, +/* 8 */ { 3, s_4_8, -1, 3, 0} +}; + +static symbol s_5_0[2] = { 'a', 'a' }; +static symbol s_5_1[2] = { 'e', 'e' }; +static symbol s_5_2[2] = { 'i', 'i' }; +static symbol s_5_3[2] = { 'o', 'o' }; +static symbol s_5_4[2] = { 'u', 'u' }; +static symbol s_5_5[2] = { 0xE4, 0xE4 }; +static symbol s_5_6[2] = { 0xF6, 0xF6 }; + +static struct among a_5[7] = +{ +/* 0 */ { 2, s_5_0, -1, -1, 0}, +/* 1 */ { 2, s_5_1, -1, -1, 0}, +/* 2 */ { 2, s_5_2, -1, -1, 0}, +/* 3 */ { 2, s_5_3, -1, -1, 0}, +/* 4 */ { 2, s_5_4, -1, -1, 0}, +/* 5 */ { 2, s_5_5, -1, -1, 0}, +/* 6 */ { 2, s_5_6, -1, -1, 0} +}; + +static symbol s_6_0[1] = { 'a' }; +static symbol s_6_1[3] = { 'l', 'l', 'a' }; +static symbol s_6_2[2] = { 'n', 'a' }; +static symbol s_6_3[3] = { 's', 's', 'a' }; +static symbol s_6_4[2] = { 't', 'a' }; +static symbol s_6_5[3] = { 'l', 't', 'a' }; +static symbol s_6_6[3] = { 's', 't', 'a' }; +static symbol s_6_7[3] = { 't', 't', 'a' }; +static symbol s_6_8[3] = { 'l', 'l', 'e' }; +static symbol s_6_9[3] = { 'i', 'n', 'e' }; +static symbol s_6_10[3] = { 'k', 's', 'i' }; +static symbol s_6_11[1] = { 'n' }; +static symbol s_6_12[3] = { 'h', 'a', 'n' }; +static symbol s_6_13[3] = { 'd', 'e', 'n' }; +static symbol s_6_14[4] = { 's', 'e', 'e', 'n' }; +static symbol s_6_15[3] = { 'h', 'e', 'n' }; +static symbol s_6_16[4] = { 't', 't', 'e', 'n' }; +static symbol s_6_17[3] = { 'h', 'i', 'n' }; +static symbol s_6_18[4] = { 's', 'i', 'i', 'n' }; +static symbol s_6_19[3] = { 'h', 'o', 'n' }; +static symbol s_6_20[3] = { 'h', 0xE4, 'n' }; +static symbol s_6_21[3] = { 'h', 0xF6, 'n' }; +static symbol s_6_22[1] = { 0xE4 }; +static symbol s_6_23[3] = { 'l', 'l', 0xE4 }; +static symbol s_6_24[2] = { 'n', 0xE4 }; +static symbol s_6_25[3] = { 's', 's', 0xE4 }; +static symbol s_6_26[2] = { 't', 0xE4 }; +static symbol s_6_27[3] = { 'l', 't', 0xE4 }; +static symbol s_6_28[3] = { 's', 't', 0xE4 }; +static symbol s_6_29[3] = { 't', 't', 0xE4 }; + +static struct among a_6[30] = +{ +/* 0 */ { 1, s_6_0, -1, 8, 0}, +/* 1 */ { 3, s_6_1, 0, -1, 0}, +/* 2 */ { 2, s_6_2, 0, -1, 0}, +/* 3 */ { 3, s_6_3, 0, -1, 0}, +/* 4 */ { 2, s_6_4, 0, -1, 0}, +/* 5 */ { 3, s_6_5, 4, -1, 0}, +/* 6 */ { 3, s_6_6, 4, -1, 0}, +/* 7 */ { 3, s_6_7, 4, 9, 0}, +/* 8 */ { 3, s_6_8, -1, -1, 0}, +/* 9 */ { 3, s_6_9, -1, -1, 0}, +/* 10 */ { 3, s_6_10, -1, -1, 0}, +/* 11 */ { 1, s_6_11, -1, 7, 0}, +/* 12 */ { 3, s_6_12, 11, 1, 0}, +/* 13 */ { 3, s_6_13, 11, -1, r_VI}, +/* 14 */ { 4, s_6_14, 11, -1, r_LONG}, +/* 15 */ { 3, s_6_15, 11, 2, 0}, +/* 16 */ { 4, s_6_16, 11, -1, r_VI}, +/* 17 */ { 3, s_6_17, 11, 3, 0}, +/* 18 */ { 4, s_6_18, 11, -1, r_VI}, +/* 19 */ { 3, s_6_19, 11, 4, 0}, +/* 20 */ { 3, s_6_20, 11, 5, 0}, +/* 21 */ { 3, s_6_21, 11, 6, 0}, +/* 22 */ { 1, s_6_22, -1, 8, 0}, +/* 23 */ { 3, s_6_23, 22, -1, 0}, +/* 24 */ { 2, s_6_24, 22, -1, 0}, +/* 25 */ { 3, s_6_25, 22, -1, 0}, +/* 26 */ { 2, s_6_26, 22, -1, 0}, +/* 27 */ { 3, s_6_27, 26, -1, 0}, +/* 28 */ { 3, s_6_28, 26, -1, 0}, +/* 29 */ { 3, s_6_29, 26, 9, 0} +}; + +static symbol s_7_0[3] = { 'e', 'j', 'a' }; +static symbol s_7_1[3] = { 'm', 'm', 'a' }; +static symbol s_7_2[4] = { 'i', 'm', 'm', 'a' }; +static symbol s_7_3[3] = { 'm', 'p', 'a' }; +static symbol s_7_4[4] = { 'i', 'm', 'p', 'a' }; +static symbol s_7_5[3] = { 'm', 'm', 'i' }; +static symbol s_7_6[4] = { 'i', 'm', 'm', 'i' }; +static symbol s_7_7[3] = { 'm', 'p', 'i' }; +static symbol s_7_8[4] = { 'i', 'm', 'p', 'i' }; +static symbol s_7_9[3] = { 'e', 'j', 0xE4 }; +static symbol s_7_10[3] = { 'm', 'm', 0xE4 }; +static symbol s_7_11[4] = { 'i', 'm', 'm', 0xE4 }; +static symbol s_7_12[3] = { 'm', 'p', 0xE4 }; +static symbol s_7_13[4] = { 'i', 'm', 'p', 0xE4 }; + +static struct among a_7[14] = +{ +/* 0 */ { 3, s_7_0, -1, -1, 0}, +/* 1 */ { 3, s_7_1, -1, 1, 0}, +/* 2 */ { 4, s_7_2, 1, -1, 0}, +/* 3 */ { 3, s_7_3, -1, 1, 0}, +/* 4 */ { 4, s_7_4, 3, -1, 0}, +/* 5 */ { 3, s_7_5, -1, 1, 0}, +/* 6 */ { 4, s_7_6, 5, -1, 0}, +/* 7 */ { 3, s_7_7, -1, 1, 0}, +/* 8 */ { 4, s_7_8, 7, -1, 0}, +/* 9 */ { 3, s_7_9, -1, -1, 0}, +/* 10 */ { 3, s_7_10, -1, 1, 0}, +/* 11 */ { 4, s_7_11, 10, -1, 0}, +/* 12 */ { 3, s_7_12, -1, 1, 0}, +/* 13 */ { 4, s_7_13, 12, -1, 0} +}; + +static symbol s_8_0[1] = { 'i' }; +static symbol s_8_1[1] = { 'j' }; + +static struct among a_8[2] = +{ +/* 0 */ { 1, s_8_0, -1, -1, 0}, +/* 1 */ { 1, s_8_1, -1, -1, 0} +}; + +static symbol s_9_0[3] = { 'm', 'm', 'a' }; +static symbol s_9_1[4] = { 'i', 'm', 'm', 'a' }; + +static struct among a_9[2] = +{ +/* 0 */ { 3, s_9_0, -1, 1, 0}, +/* 1 */ { 4, s_9_1, 0, -1, 0} +}; + +static unsigned char g_AEI[] = { 17, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8 }; + +static unsigned char g_V1[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 32 }; + +static unsigned char g_V2[] = { 17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 32 }; + +static unsigned char g_particle_end[] = { 17, 97, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 32 }; + +static symbol s_0[] = { 'k' }; +static symbol s_1[] = { 'k', 's', 'e' }; +static symbol s_2[] = { 'k', 's', 'i' }; +static symbol s_3[] = { 'i' }; +static symbol s_4[] = { 'a' }; +static symbol s_5[] = { 'e' }; +static symbol s_6[] = { 'i' }; +static symbol s_7[] = { 'o' }; +static symbol s_8[] = { 0xE4 }; +static symbol s_9[] = { 0xF6 }; +static symbol s_10[] = { 'i', 'e' }; +static symbol s_11[] = { 'e' }; +static symbol s_12[] = { 'p', 'o' }; +static symbol s_13[] = { 't' }; +static symbol s_14[] = { 'p', 'o' }; +static symbol s_15[] = { 'j' }; +static symbol s_16[] = { 'o' }; +static symbol s_17[] = { 'u' }; +static symbol s_18[] = { 'o' }; +static symbol s_19[] = { 'j' }; + +static int r_mark_regions(struct SN_env * z) { + z->I[0] = z->l; + z->I[1] = z->l; + while(1) { /* goto, line 46 */ + int c = z->c; + if (!(in_grouping(z, g_V1, 97, 246))) goto lab0; + z->c = c; + break; + lab0: + z->c = c; + if (z->c >= z->l) return 0; + z->c++; /* goto, line 46 */ + } + while(1) { /* gopast, line 46 */ + if (!(out_grouping(z, g_V1, 97, 246))) goto lab1; + break; + lab1: + if (z->c >= z->l) return 0; + z->c++; /* gopast, line 46 */ + } + z->I[0] = z->c; /* setmark p1, line 46 */ + while(1) { /* goto, line 47 */ + int c = z->c; + if (!(in_grouping(z, g_V1, 97, 246))) goto lab2; + z->c = c; + break; + lab2: + z->c = c; + if (z->c >= z->l) return 0; + z->c++; /* goto, line 47 */ + } + while(1) { /* gopast, line 47 */ + if (!(out_grouping(z, g_V1, 97, 246))) goto lab3; + break; + lab3: + if (z->c >= z->l) return 0; + z->c++; /* gopast, line 47 */ + } + z->I[1] = z->c; /* setmark p2, line 47 */ + return 1; +} + +static int r_R2(struct SN_env * z) { + if (!(z->I[1] <= z->c)) return 0; + return 1; +} + +static int r_particle_etc(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 55 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 55 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 55 */ + among_var = find_among_b(z, a_0, 10); /* substring, line 55 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 55 */ + z->lb = m3; + } + switch(among_var) { + case 0: return 0; + case 1: + if (!(in_grouping_b(z, g_particle_end, 97, 246))) return 0; + break; + case 2: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 64 */ + if (ret < 0) return ret; + } + break; + } + { int ret; + ret = slice_del(z); /* delete, line 66 */ + if (ret < 0) return ret; + } + return 1; +} + +static int r_possessive(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 69 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 69 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 69 */ + among_var = find_among_b(z, a_4, 9); /* substring, line 69 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 69 */ + z->lb = m3; + } + switch(among_var) { + case 0: return 0; + case 1: + { int m = z->l - z->c; (void) m; /* not, line 72 */ + if (!(eq_s_b(z, 1, s_0))) goto lab0; + return 0; + lab0: + z->c = z->l - m; + } + { int ret; + ret = slice_del(z); /* delete, line 72 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_del(z); /* delete, line 74 */ + if (ret < 0) return ret; + } + z->ket = z->c; /* [, line 74 */ + if (!(eq_s_b(z, 3, s_1))) return 0; + z->bra = z->c; /* ], line 74 */ + { int ret; + ret = slice_from_s(z, 3, s_2); /* <-, line 74 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_del(z); /* delete, line 78 */ + if (ret < 0) return ret; + } + break; + case 4: + if (!(find_among_b(z, a_1, 6))) return 0; /* among, line 81 */ + { int ret; + ret = slice_del(z); /* delete, line 81 */ + if (ret < 0) return ret; + } + break; + case 5: + if (!(find_among_b(z, a_2, 6))) return 0; /* among, line 83 */ + { int ret; + ret = slice_del(z); /* delete, line 84 */ + if (ret < 0) return ret; + } + break; + case 6: + if (!(find_among_b(z, a_3, 2))) return 0; /* among, line 86 */ + { int ret; + ret = slice_del(z); /* delete, line 86 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_LONG(struct SN_env * z) { + if (!(find_among_b(z, a_5, 7))) return 0; /* among, line 91 */ + return 1; +} + +static int r_VI(struct SN_env * z) { + if (!(eq_s_b(z, 1, s_3))) return 0; + if (!(in_grouping_b(z, g_V2, 97, 246))) return 0; + return 1; +} + +static int r_case_ending(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 96 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 96 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 96 */ + among_var = find_among_b(z, a_6, 30); /* substring, line 96 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 96 */ + z->lb = m3; + } + switch(among_var) { + case 0: return 0; + case 1: + if (!(eq_s_b(z, 1, s_4))) return 0; + break; + case 2: + if (!(eq_s_b(z, 1, s_5))) return 0; + break; + case 3: + if (!(eq_s_b(z, 1, s_6))) return 0; + break; + case 4: + if (!(eq_s_b(z, 1, s_7))) return 0; + break; + case 5: + if (!(eq_s_b(z, 1, s_8))) return 0; + break; + case 6: + if (!(eq_s_b(z, 1, s_9))) return 0; + break; + case 7: + { int m = z->l - z->c; (void) m; /* try, line 111 */ + { int m = z->l - z->c; (void) m; /* and, line 113 */ + { int m = z->l - z->c; (void) m; /* or, line 112 */ + { int ret = r_LONG(z); + if (ret == 0) goto lab2; /* call LONG, line 111 */ + if (ret < 0) return ret; + } + goto lab1; + lab2: + z->c = z->l - m; + if (!(eq_s_b(z, 2, s_10))) { z->c = z->l - m; goto lab0; } + } + lab1: + z->c = z->l - m; + if (z->c <= z->lb) { z->c = z->l - m; goto lab0; } + z->c--; /* next, line 113 */ + } + z->bra = z->c; /* ], line 113 */ + lab0: + ; + } + break; + case 8: + if (!(in_grouping_b(z, g_V1, 97, 246))) return 0; + if (!(out_grouping_b(z, g_V1, 97, 246))) return 0; + break; + case 9: + if (!(eq_s_b(z, 1, s_11))) return 0; + break; + } + { int ret; + ret = slice_del(z); /* delete, line 138 */ + if (ret < 0) return ret; + } + z->B[0] = 1; /* set ending_removed, line 139 */ + return 1; +} + +static int r_other_endings(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 142 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[1]) return 0; + z->c = z->I[1]; /* tomark, line 142 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 142 */ + among_var = find_among_b(z, a_7, 14); /* substring, line 142 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 142 */ + z->lb = m3; + } + switch(among_var) { + case 0: return 0; + case 1: + { int m = z->l - z->c; (void) m; /* not, line 146 */ + if (!(eq_s_b(z, 2, s_12))) goto lab0; + return 0; + lab0: + z->c = z->l - m; + } + break; + } + { int ret; + ret = slice_del(z); /* delete, line 151 */ + if (ret < 0) return ret; + } + return 1; +} + +static int r_i_plural(struct SN_env * z) { + { int m3; /* setlimit, line 154 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 154 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 154 */ + if (!(find_among_b(z, a_8, 2))) { z->lb = m3; return 0; } /* substring, line 154 */ + z->bra = z->c; /* ], line 154 */ + z->lb = m3; + } + { int ret; + ret = slice_del(z); /* delete, line 158 */ + if (ret < 0) return ret; + } + return 1; +} + +static int r_t_plural(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 161 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 161 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 162 */ + if (!(eq_s_b(z, 1, s_13))) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 162 */ + { int m_test = z->l - z->c; /* test, line 162 */ + if (!(in_grouping_b(z, g_V1, 97, 246))) { z->lb = m3; return 0; } + z->c = z->l - m_test; + } + { int ret; + ret = slice_del(z); /* delete, line 163 */ + if (ret < 0) return ret; + } + z->lb = m3; + } + { int m3; /* setlimit, line 165 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[1]) return 0; + z->c = z->I[1]; /* tomark, line 165 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 165 */ + among_var = find_among_b(z, a_9, 2); /* substring, line 165 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 165 */ + z->lb = m3; + } + switch(among_var) { + case 0: return 0; + case 1: + { int m = z->l - z->c; (void) m; /* not, line 167 */ + if (!(eq_s_b(z, 2, s_14))) goto lab0; + return 0; + lab0: + z->c = z->l - m; + } + break; + } + { int ret; + ret = slice_del(z); /* delete, line 170 */ + if (ret < 0) return ret; + } + return 1; +} + +static int r_tidy(struct SN_env * z) { + { int m3; /* setlimit, line 173 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 173 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + { int m = z->l - z->c; (void) m; /* do, line 174 */ + { int m = z->l - z->c; (void) m; /* and, line 174 */ + { int ret = r_LONG(z); + if (ret == 0) goto lab0; /* call LONG, line 174 */ + if (ret < 0) return ret; + } + z->c = z->l - m; + z->ket = z->c; /* [, line 174 */ + if (z->c <= z->lb) goto lab0; + z->c--; /* next, line 174 */ + z->bra = z->c; /* ], line 174 */ + { int ret; + ret = slice_del(z); /* delete, line 174 */ + if (ret < 0) return ret; + } + } + lab0: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 175 */ + z->ket = z->c; /* [, line 175 */ + if (!(in_grouping_b(z, g_AEI, 97, 228))) goto lab1; + z->bra = z->c; /* ], line 175 */ + if (!(out_grouping_b(z, g_V1, 97, 246))) goto lab1; + { int ret; + ret = slice_del(z); /* delete, line 175 */ + if (ret < 0) return ret; + } + lab1: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 176 */ + z->ket = z->c; /* [, line 176 */ + if (!(eq_s_b(z, 1, s_15))) goto lab2; + z->bra = z->c; /* ], line 176 */ + { int m = z->l - z->c; (void) m; /* or, line 176 */ + if (!(eq_s_b(z, 1, s_16))) goto lab4; + goto lab3; + lab4: + z->c = z->l - m; + if (!(eq_s_b(z, 1, s_17))) goto lab2; + } + lab3: + { int ret; + ret = slice_del(z); /* delete, line 176 */ + if (ret < 0) return ret; + } + lab2: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 177 */ + z->ket = z->c; /* [, line 177 */ + if (!(eq_s_b(z, 1, s_18))) goto lab5; + z->bra = z->c; /* ], line 177 */ + if (!(eq_s_b(z, 1, s_19))) goto lab5; + { int ret; + ret = slice_del(z); /* delete, line 177 */ + if (ret < 0) return ret; + } + lab5: + z->c = z->l - m; + } + z->lb = m3; + } + while(1) { /* goto, line 179 */ + int m = z->l - z->c; (void) m; + if (!(out_grouping_b(z, g_V1, 97, 246))) goto lab6; + z->c = z->l - m; + break; + lab6: + z->c = z->l - m; + if (z->c <= z->lb) return 0; + z->c--; /* goto, line 179 */ + } + z->ket = z->c; /* [, line 179 */ + if (z->c <= z->lb) return 0; + z->c--; /* next, line 179 */ + z->bra = z->c; /* ], line 179 */ + z->S[0] = slice_to(z, z->S[0]); /* -> x, line 179 */ + if (z->S[0] == 0) return -1; /* -> x, line 179 */ + if (!(eq_v_b(z, z->S[0]))) return 0; /* name x, line 179 */ + { int ret; + ret = slice_del(z); /* delete, line 179 */ + if (ret < 0) return ret; + } + return 1; +} + +extern int finnish_ISO_8859_1_stem(struct SN_env * z) { + { int c = z->c; /* do, line 185 */ + { int ret = r_mark_regions(z); + if (ret == 0) goto lab0; /* call mark_regions, line 185 */ + if (ret < 0) return ret; + } + lab0: + z->c = c; + } + z->B[0] = 0; /* unset ending_removed, line 186 */ + z->lb = z->c; z->c = z->l; /* backwards, line 187 */ + + { int m = z->l - z->c; (void) m; /* do, line 188 */ + { int ret = r_particle_etc(z); + if (ret == 0) goto lab1; /* call particle_etc, line 188 */ + if (ret < 0) return ret; + } + lab1: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 189 */ + { int ret = r_possessive(z); + if (ret == 0) goto lab2; /* call possessive, line 189 */ + if (ret < 0) return ret; + } + lab2: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 190 */ + { int ret = r_case_ending(z); + if (ret == 0) goto lab3; /* call case_ending, line 190 */ + if (ret < 0) return ret; + } + lab3: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 191 */ + { int ret = r_other_endings(z); + if (ret == 0) goto lab4; /* call other_endings, line 191 */ + if (ret < 0) return ret; + } + lab4: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* or, line 192 */ + if (!(z->B[0])) goto lab6; /* Boolean test ending_removed, line 192 */ + { int m = z->l - z->c; (void) m; /* do, line 192 */ + { int ret = r_i_plural(z); + if (ret == 0) goto lab7; /* call i_plural, line 192 */ + if (ret < 0) return ret; + } + lab7: + z->c = z->l - m; + } + goto lab5; + lab6: + z->c = z->l - m; + { int m = z->l - z->c; (void) m; /* do, line 192 */ + { int ret = r_t_plural(z); + if (ret == 0) goto lab8; /* call t_plural, line 192 */ + if (ret < 0) return ret; + } + lab8: + z->c = z->l - m; + } + } +lab5: + { int m = z->l - z->c; (void) m; /* do, line 193 */ + { int ret = r_tidy(z); + if (ret == 0) goto lab9; /* call tidy, line 193 */ + if (ret < 0) return ret; + } + lab9: + z->c = z->l - m; + } + z->c = z->lb; + return 1; +} + +extern struct SN_env * finnish_ISO_8859_1_create_env(void) { return SN_create_env(1, 2, 1); } + +extern void finnish_ISO_8859_1_close_env(struct SN_env * z) { SN_close_env(z); } + diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_finnish.h b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_finnish.h new file mode 100644 index 0000000..c67b67b --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_finnish.h @@ -0,0 +1,16 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern struct SN_env * finnish_ISO_8859_1_create_env(void); +extern void finnish_ISO_8859_1_close_env(struct SN_env * z); + +extern int finnish_ISO_8859_1_stem(struct SN_env * z); + +#ifdef __cplusplus +} +#endif + diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_french.c b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_french.c new file mode 100644 index 0000000..e4eb80d --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_french.c @@ -0,0 +1,1276 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#include "../runtime/header.h" + +extern int french_ISO_8859_1_stem(struct SN_env * z); +static int r_un_accent(struct SN_env * z); +static int r_un_double(struct SN_env * z); +static int r_residual_suffix(struct SN_env * z); +static int r_verb_suffix(struct SN_env * z); +static int r_i_verb_suffix(struct SN_env * z); +static int r_standard_suffix(struct SN_env * z); +static int r_R2(struct SN_env * z); +static int r_R1(struct SN_env * z); +static int r_RV(struct SN_env * z); +static int r_mark_regions(struct SN_env * z); +static int r_postlude(struct SN_env * z); +static int r_prelude(struct SN_env * z); + +extern struct SN_env * french_ISO_8859_1_create_env(void); +extern void french_ISO_8859_1_close_env(struct SN_env * z); + +static symbol s_0_1[1] = { 'I' }; +static symbol s_0_2[1] = { 'U' }; +static symbol s_0_3[1] = { 'Y' }; + +static struct among a_0[4] = +{ +/* 0 */ { 0, 0, -1, 4, 0}, +/* 1 */ { 1, s_0_1, 0, 1, 0}, +/* 2 */ { 1, s_0_2, 0, 2, 0}, +/* 3 */ { 1, s_0_3, 0, 3, 0} +}; + +static symbol s_1_0[3] = { 'i', 'q', 'U' }; +static symbol s_1_1[3] = { 'a', 'b', 'l' }; +static symbol s_1_2[3] = { 'I', 0xE8, 'r' }; +static symbol s_1_3[3] = { 'i', 0xE8, 'r' }; +static symbol s_1_4[3] = { 'e', 'u', 's' }; +static symbol s_1_5[2] = { 'i', 'v' }; + +static struct among a_1[6] = +{ +/* 0 */ { 3, s_1_0, -1, 3, 0}, +/* 1 */ { 3, s_1_1, -1, 3, 0}, +/* 2 */ { 3, s_1_2, -1, 4, 0}, +/* 3 */ { 3, s_1_3, -1, 4, 0}, +/* 4 */ { 3, s_1_4, -1, 2, 0}, +/* 5 */ { 2, s_1_5, -1, 1, 0} +}; + +static symbol s_2_0[2] = { 'i', 'c' }; +static symbol s_2_1[4] = { 'a', 'b', 'i', 'l' }; +static symbol s_2_2[2] = { 'i', 'v' }; + +static struct among a_2[3] = +{ +/* 0 */ { 2, s_2_0, -1, 2, 0}, +/* 1 */ { 4, s_2_1, -1, 1, 0}, +/* 2 */ { 2, s_2_2, -1, 3, 0} +}; + +static symbol s_3_0[4] = { 'i', 'q', 'U', 'e' }; +static symbol s_3_1[6] = { 'a', 't', 'r', 'i', 'c', 'e' }; +static symbol s_3_2[4] = { 'a', 'n', 'c', 'e' }; +static symbol s_3_3[4] = { 'e', 'n', 'c', 'e' }; +static symbol s_3_4[5] = { 'l', 'o', 'g', 'i', 'e' }; +static symbol s_3_5[4] = { 'a', 'b', 'l', 'e' }; +static symbol s_3_6[4] = { 'i', 's', 'm', 'e' }; +static symbol s_3_7[4] = { 'e', 'u', 's', 'e' }; +static symbol s_3_8[4] = { 'i', 's', 't', 'e' }; +static symbol s_3_9[3] = { 'i', 'v', 'e' }; +static symbol s_3_10[2] = { 'i', 'f' }; +static symbol s_3_11[5] = { 'u', 's', 'i', 'o', 'n' }; +static symbol s_3_12[5] = { 'a', 't', 'i', 'o', 'n' }; +static symbol s_3_13[5] = { 'u', 't', 'i', 'o', 'n' }; +static symbol s_3_14[5] = { 'a', 't', 'e', 'u', 'r' }; +static symbol s_3_15[5] = { 'i', 'q', 'U', 'e', 's' }; +static symbol s_3_16[7] = { 'a', 't', 'r', 'i', 'c', 'e', 's' }; +static symbol s_3_17[5] = { 'a', 'n', 'c', 'e', 's' }; +static symbol s_3_18[5] = { 'e', 'n', 'c', 'e', 's' }; +static symbol s_3_19[6] = { 'l', 'o', 'g', 'i', 'e', 's' }; +static symbol s_3_20[5] = { 'a', 'b', 'l', 'e', 's' }; +static symbol s_3_21[5] = { 'i', 's', 'm', 'e', 's' }; +static symbol s_3_22[5] = { 'e', 'u', 's', 'e', 's' }; +static symbol s_3_23[5] = { 'i', 's', 't', 'e', 's' }; +static symbol s_3_24[4] = { 'i', 'v', 'e', 's' }; +static symbol s_3_25[3] = { 'i', 'f', 's' }; +static symbol s_3_26[6] = { 'u', 's', 'i', 'o', 'n', 's' }; +static symbol s_3_27[6] = { 'a', 't', 'i', 'o', 'n', 's' }; +static symbol s_3_28[6] = { 'u', 't', 'i', 'o', 'n', 's' }; +static symbol s_3_29[6] = { 'a', 't', 'e', 'u', 'r', 's' }; +static symbol s_3_30[5] = { 'm', 'e', 'n', 't', 's' }; +static symbol s_3_31[6] = { 'e', 'm', 'e', 'n', 't', 's' }; +static symbol s_3_32[9] = { 'i', 's', 's', 'e', 'm', 'e', 'n', 't', 's' }; +static symbol s_3_33[4] = { 'i', 't', 0xE9, 's' }; +static symbol s_3_34[4] = { 'm', 'e', 'n', 't' }; +static symbol s_3_35[5] = { 'e', 'm', 'e', 'n', 't' }; +static symbol s_3_36[8] = { 'i', 's', 's', 'e', 'm', 'e', 'n', 't' }; +static symbol s_3_37[6] = { 'a', 'm', 'm', 'e', 'n', 't' }; +static symbol s_3_38[6] = { 'e', 'm', 'm', 'e', 'n', 't' }; +static symbol s_3_39[3] = { 'a', 'u', 'x' }; +static symbol s_3_40[4] = { 'e', 'a', 'u', 'x' }; +static symbol s_3_41[3] = { 'e', 'u', 'x' }; +static symbol s_3_42[3] = { 'i', 't', 0xE9 }; + +static struct among a_3[43] = +{ +/* 0 */ { 4, s_3_0, -1, 1, 0}, +/* 1 */ { 6, s_3_1, -1, 2, 0}, +/* 2 */ { 4, s_3_2, -1, 1, 0}, +/* 3 */ { 4, s_3_3, -1, 5, 0}, +/* 4 */ { 5, s_3_4, -1, 3, 0}, +/* 5 */ { 4, s_3_5, -1, 1, 0}, +/* 6 */ { 4, s_3_6, -1, 1, 0}, +/* 7 */ { 4, s_3_7, -1, 11, 0}, +/* 8 */ { 4, s_3_8, -1, 1, 0}, +/* 9 */ { 3, s_3_9, -1, 8, 0}, +/* 10 */ { 2, s_3_10, -1, 8, 0}, +/* 11 */ { 5, s_3_11, -1, 4, 0}, +/* 12 */ { 5, s_3_12, -1, 2, 0}, +/* 13 */ { 5, s_3_13, -1, 4, 0}, +/* 14 */ { 5, s_3_14, -1, 2, 0}, +/* 15 */ { 5, s_3_15, -1, 1, 0}, +/* 16 */ { 7, s_3_16, -1, 2, 0}, +/* 17 */ { 5, s_3_17, -1, 1, 0}, +/* 18 */ { 5, s_3_18, -1, 5, 0}, +/* 19 */ { 6, s_3_19, -1, 3, 0}, +/* 20 */ { 5, s_3_20, -1, 1, 0}, +/* 21 */ { 5, s_3_21, -1, 1, 0}, +/* 22 */ { 5, s_3_22, -1, 11, 0}, +/* 23 */ { 5, s_3_23, -1, 1, 0}, +/* 24 */ { 4, s_3_24, -1, 8, 0}, +/* 25 */ { 3, s_3_25, -1, 8, 0}, +/* 26 */ { 6, s_3_26, -1, 4, 0}, +/* 27 */ { 6, s_3_27, -1, 2, 0}, +/* 28 */ { 6, s_3_28, -1, 4, 0}, +/* 29 */ { 6, s_3_29, -1, 2, 0}, +/* 30 */ { 5, s_3_30, -1, 15, 0}, +/* 31 */ { 6, s_3_31, 30, 6, 0}, +/* 32 */ { 9, s_3_32, 31, 12, 0}, +/* 33 */ { 4, s_3_33, -1, 7, 0}, +/* 34 */ { 4, s_3_34, -1, 15, 0}, +/* 35 */ { 5, s_3_35, 34, 6, 0}, +/* 36 */ { 8, s_3_36, 35, 12, 0}, +/* 37 */ { 6, s_3_37, 34, 13, 0}, +/* 38 */ { 6, s_3_38, 34, 14, 0}, +/* 39 */ { 3, s_3_39, -1, 10, 0}, +/* 40 */ { 4, s_3_40, 39, 9, 0}, +/* 41 */ { 3, s_3_41, -1, 1, 0}, +/* 42 */ { 3, s_3_42, -1, 7, 0} +}; + +static symbol s_4_0[3] = { 'i', 'r', 'a' }; +static symbol s_4_1[2] = { 'i', 'e' }; +static symbol s_4_2[4] = { 'i', 's', 's', 'e' }; +static symbol s_4_3[7] = { 'i', 's', 's', 'a', 'n', 't', 'e' }; +static symbol s_4_4[1] = { 'i' }; +static symbol s_4_5[4] = { 'i', 'r', 'a', 'i' }; +static symbol s_4_6[2] = { 'i', 'r' }; +static symbol s_4_7[4] = { 'i', 'r', 'a', 's' }; +static symbol s_4_8[3] = { 'i', 'e', 's' }; +static symbol s_4_9[4] = { 0xEE, 'm', 'e', 's' }; +static symbol s_4_10[5] = { 'i', 's', 's', 'e', 's' }; +static symbol s_4_11[8] = { 'i', 's', 's', 'a', 'n', 't', 'e', 's' }; +static symbol s_4_12[4] = { 0xEE, 't', 'e', 's' }; +static symbol s_4_13[2] = { 'i', 's' }; +static symbol s_4_14[5] = { 'i', 'r', 'a', 'i', 's' }; +static symbol s_4_15[6] = { 'i', 's', 's', 'a', 'i', 's' }; +static symbol s_4_16[6] = { 'i', 'r', 'i', 'o', 'n', 's' }; +static symbol s_4_17[7] = { 'i', 's', 's', 'i', 'o', 'n', 's' }; +static symbol s_4_18[5] = { 'i', 'r', 'o', 'n', 's' }; +static symbol s_4_19[6] = { 'i', 's', 's', 'o', 'n', 's' }; +static symbol s_4_20[7] = { 'i', 's', 's', 'a', 'n', 't', 's' }; +static symbol s_4_21[2] = { 'i', 't' }; +static symbol s_4_22[5] = { 'i', 'r', 'a', 'i', 't' }; +static symbol s_4_23[6] = { 'i', 's', 's', 'a', 'i', 't' }; +static symbol s_4_24[6] = { 'i', 's', 's', 'a', 'n', 't' }; +static symbol s_4_25[7] = { 'i', 'r', 'a', 'I', 'e', 'n', 't' }; +static symbol s_4_26[8] = { 'i', 's', 's', 'a', 'I', 'e', 'n', 't' }; +static symbol s_4_27[5] = { 'i', 'r', 'e', 'n', 't' }; +static symbol s_4_28[6] = { 'i', 's', 's', 'e', 'n', 't' }; +static symbol s_4_29[5] = { 'i', 'r', 'o', 'n', 't' }; +static symbol s_4_30[2] = { 0xEE, 't' }; +static symbol s_4_31[5] = { 'i', 'r', 'i', 'e', 'z' }; +static symbol s_4_32[6] = { 'i', 's', 's', 'i', 'e', 'z' }; +static symbol s_4_33[4] = { 'i', 'r', 'e', 'z' }; +static symbol s_4_34[5] = { 'i', 's', 's', 'e', 'z' }; + +static struct among a_4[35] = +{ +/* 0 */ { 3, s_4_0, -1, 1, 0}, +/* 1 */ { 2, s_4_1, -1, 1, 0}, +/* 2 */ { 4, s_4_2, -1, 1, 0}, +/* 3 */ { 7, s_4_3, -1, 1, 0}, +/* 4 */ { 1, s_4_4, -1, 1, 0}, +/* 5 */ { 4, s_4_5, 4, 1, 0}, +/* 6 */ { 2, s_4_6, -1, 1, 0}, +/* 7 */ { 4, s_4_7, -1, 1, 0}, +/* 8 */ { 3, s_4_8, -1, 1, 0}, +/* 9 */ { 4, s_4_9, -1, 1, 0}, +/* 10 */ { 5, s_4_10, -1, 1, 0}, +/* 11 */ { 8, s_4_11, -1, 1, 0}, +/* 12 */ { 4, s_4_12, -1, 1, 0}, +/* 13 */ { 2, s_4_13, -1, 1, 0}, +/* 14 */ { 5, s_4_14, 13, 1, 0}, +/* 15 */ { 6, s_4_15, 13, 1, 0}, +/* 16 */ { 6, s_4_16, -1, 1, 0}, +/* 17 */ { 7, s_4_17, -1, 1, 0}, +/* 18 */ { 5, s_4_18, -1, 1, 0}, +/* 19 */ { 6, s_4_19, -1, 1, 0}, +/* 20 */ { 7, s_4_20, -1, 1, 0}, +/* 21 */ { 2, s_4_21, -1, 1, 0}, +/* 22 */ { 5, s_4_22, 21, 1, 0}, +/* 23 */ { 6, s_4_23, 21, 1, 0}, +/* 24 */ { 6, s_4_24, -1, 1, 0}, +/* 25 */ { 7, s_4_25, -1, 1, 0}, +/* 26 */ { 8, s_4_26, -1, 1, 0}, +/* 27 */ { 5, s_4_27, -1, 1, 0}, +/* 28 */ { 6, s_4_28, -1, 1, 0}, +/* 29 */ { 5, s_4_29, -1, 1, 0}, +/* 30 */ { 2, s_4_30, -1, 1, 0}, +/* 31 */ { 5, s_4_31, -1, 1, 0}, +/* 32 */ { 6, s_4_32, -1, 1, 0}, +/* 33 */ { 4, s_4_33, -1, 1, 0}, +/* 34 */ { 5, s_4_34, -1, 1, 0} +}; + +static symbol s_5_0[1] = { 'a' }; +static symbol s_5_1[3] = { 'e', 'r', 'a' }; +static symbol s_5_2[4] = { 'a', 's', 's', 'e' }; +static symbol s_5_3[4] = { 'a', 'n', 't', 'e' }; +static symbol s_5_4[2] = { 0xE9, 'e' }; +static symbol s_5_5[2] = { 'a', 'i' }; +static symbol s_5_6[4] = { 'e', 'r', 'a', 'i' }; +static symbol s_5_7[2] = { 'e', 'r' }; +static symbol s_5_8[2] = { 'a', 's' }; +static symbol s_5_9[4] = { 'e', 'r', 'a', 's' }; +static symbol s_5_10[4] = { 0xE2, 'm', 'e', 's' }; +static symbol s_5_11[5] = { 'a', 's', 's', 'e', 's' }; +static symbol s_5_12[5] = { 'a', 'n', 't', 'e', 's' }; +static symbol s_5_13[4] = { 0xE2, 't', 'e', 's' }; +static symbol s_5_14[3] = { 0xE9, 'e', 's' }; +static symbol s_5_15[3] = { 'a', 'i', 's' }; +static symbol s_5_16[5] = { 'e', 'r', 'a', 'i', 's' }; +static symbol s_5_17[4] = { 'i', 'o', 'n', 's' }; +static symbol s_5_18[6] = { 'e', 'r', 'i', 'o', 'n', 's' }; +static symbol s_5_19[7] = { 'a', 's', 's', 'i', 'o', 'n', 's' }; +static symbol s_5_20[5] = { 'e', 'r', 'o', 'n', 's' }; +static symbol s_5_21[4] = { 'a', 'n', 't', 's' }; +static symbol s_5_22[2] = { 0xE9, 's' }; +static symbol s_5_23[3] = { 'a', 'i', 't' }; +static symbol s_5_24[5] = { 'e', 'r', 'a', 'i', 't' }; +static symbol s_5_25[3] = { 'a', 'n', 't' }; +static symbol s_5_26[5] = { 'a', 'I', 'e', 'n', 't' }; +static symbol s_5_27[7] = { 'e', 'r', 'a', 'I', 'e', 'n', 't' }; +static symbol s_5_28[5] = { 0xE8, 'r', 'e', 'n', 't' }; +static symbol s_5_29[6] = { 'a', 's', 's', 'e', 'n', 't' }; +static symbol s_5_30[5] = { 'e', 'r', 'o', 'n', 't' }; +static symbol s_5_31[2] = { 0xE2, 't' }; +static symbol s_5_32[2] = { 'e', 'z' }; +static symbol s_5_33[3] = { 'i', 'e', 'z' }; +static symbol s_5_34[5] = { 'e', 'r', 'i', 'e', 'z' }; +static symbol s_5_35[6] = { 'a', 's', 's', 'i', 'e', 'z' }; +static symbol s_5_36[4] = { 'e', 'r', 'e', 'z' }; +static symbol s_5_37[1] = { 0xE9 }; + +static struct among a_5[38] = +{ +/* 0 */ { 1, s_5_0, -1, 3, 0}, +/* 1 */ { 3, s_5_1, 0, 2, 0}, +/* 2 */ { 4, s_5_2, -1, 3, 0}, +/* 3 */ { 4, s_5_3, -1, 3, 0}, +/* 4 */ { 2, s_5_4, -1, 2, 0}, +/* 5 */ { 2, s_5_5, -1, 3, 0}, +/* 6 */ { 4, s_5_6, 5, 2, 0}, +/* 7 */ { 2, s_5_7, -1, 2, 0}, +/* 8 */ { 2, s_5_8, -1, 3, 0}, +/* 9 */ { 4, s_5_9, 8, 2, 0}, +/* 10 */ { 4, s_5_10, -1, 3, 0}, +/* 11 */ { 5, s_5_11, -1, 3, 0}, +/* 12 */ { 5, s_5_12, -1, 3, 0}, +/* 13 */ { 4, s_5_13, -1, 3, 0}, +/* 14 */ { 3, s_5_14, -1, 2, 0}, +/* 15 */ { 3, s_5_15, -1, 3, 0}, +/* 16 */ { 5, s_5_16, 15, 2, 0}, +/* 17 */ { 4, s_5_17, -1, 1, 0}, +/* 18 */ { 6, s_5_18, 17, 2, 0}, +/* 19 */ { 7, s_5_19, 17, 3, 0}, +/* 20 */ { 5, s_5_20, -1, 2, 0}, +/* 21 */ { 4, s_5_21, -1, 3, 0}, +/* 22 */ { 2, s_5_22, -1, 2, 0}, +/* 23 */ { 3, s_5_23, -1, 3, 0}, +/* 24 */ { 5, s_5_24, 23, 2, 0}, +/* 25 */ { 3, s_5_25, -1, 3, 0}, +/* 26 */ { 5, s_5_26, -1, 3, 0}, +/* 27 */ { 7, s_5_27, 26, 2, 0}, +/* 28 */ { 5, s_5_28, -1, 2, 0}, +/* 29 */ { 6, s_5_29, -1, 3, 0}, +/* 30 */ { 5, s_5_30, -1, 2, 0}, +/* 31 */ { 2, s_5_31, -1, 3, 0}, +/* 32 */ { 2, s_5_32, -1, 2, 0}, +/* 33 */ { 3, s_5_33, 32, 2, 0}, +/* 34 */ { 5, s_5_34, 33, 2, 0}, +/* 35 */ { 6, s_5_35, 33, 3, 0}, +/* 36 */ { 4, s_5_36, 32, 2, 0}, +/* 37 */ { 1, s_5_37, -1, 2, 0} +}; + +static symbol s_6_0[1] = { 'e' }; +static symbol s_6_1[4] = { 'I', 0xE8, 'r', 'e' }; +static symbol s_6_2[4] = { 'i', 0xE8, 'r', 'e' }; +static symbol s_6_3[3] = { 'i', 'o', 'n' }; +static symbol s_6_4[3] = { 'I', 'e', 'r' }; +static symbol s_6_5[3] = { 'i', 'e', 'r' }; +static symbol s_6_6[1] = { 0xEB }; + +static struct among a_6[7] = +{ +/* 0 */ { 1, s_6_0, -1, 3, 0}, +/* 1 */ { 4, s_6_1, 0, 2, 0}, +/* 2 */ { 4, s_6_2, 0, 2, 0}, +/* 3 */ { 3, s_6_3, -1, 1, 0}, +/* 4 */ { 3, s_6_4, -1, 2, 0}, +/* 5 */ { 3, s_6_5, -1, 2, 0}, +/* 6 */ { 1, s_6_6, -1, 4, 0} +}; + +static symbol s_7_0[3] = { 'e', 'l', 'l' }; +static symbol s_7_1[4] = { 'e', 'i', 'l', 'l' }; +static symbol s_7_2[3] = { 'e', 'n', 'n' }; +static symbol s_7_3[3] = { 'o', 'n', 'n' }; +static symbol s_7_4[3] = { 'e', 't', 't' }; + +static struct among a_7[5] = +{ +/* 0 */ { 3, s_7_0, -1, -1, 0}, +/* 1 */ { 4, s_7_1, -1, -1, 0}, +/* 2 */ { 3, s_7_2, -1, -1, 0}, +/* 3 */ { 3, s_7_3, -1, -1, 0}, +/* 4 */ { 3, s_7_4, -1, -1, 0} +}; + +static unsigned char g_v[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 130, 103, 8, 5 }; + +static unsigned char g_keep_with_s[] = { 1, 65, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128 }; + +static symbol s_0[] = { 'u' }; +static symbol s_1[] = { 'U' }; +static symbol s_2[] = { 'i' }; +static symbol s_3[] = { 'I' }; +static symbol s_4[] = { 'y' }; +static symbol s_5[] = { 'Y' }; +static symbol s_6[] = { 'y' }; +static symbol s_7[] = { 'Y' }; +static symbol s_8[] = { 'q' }; +static symbol s_9[] = { 'u' }; +static symbol s_10[] = { 'U' }; +static symbol s_11[] = { 'i' }; +static symbol s_12[] = { 'u' }; +static symbol s_13[] = { 'y' }; +static symbol s_14[] = { 'i', 'c' }; +static symbol s_15[] = { 'i', 'q', 'U' }; +static symbol s_16[] = { 'l', 'o', 'g' }; +static symbol s_17[] = { 'u' }; +static symbol s_18[] = { 'e', 'n', 't' }; +static symbol s_19[] = { 'a', 't' }; +static symbol s_20[] = { 'e', 'u', 'x' }; +static symbol s_21[] = { 'i' }; +static symbol s_22[] = { 'a', 'b', 'l' }; +static symbol s_23[] = { 'i', 'q', 'U' }; +static symbol s_24[] = { 'a', 't' }; +static symbol s_25[] = { 'i', 'c' }; +static symbol s_26[] = { 'i', 'q', 'U' }; +static symbol s_27[] = { 'e', 'a', 'u' }; +static symbol s_28[] = { 'a', 'l' }; +static symbol s_29[] = { 'e', 'u', 'x' }; +static symbol s_30[] = { 'a', 'n', 't' }; +static symbol s_31[] = { 'e', 'n', 't' }; +static symbol s_32[] = { 'e' }; +static symbol s_33[] = { 's' }; +static symbol s_34[] = { 's' }; +static symbol s_35[] = { 't' }; +static symbol s_36[] = { 'i' }; +static symbol s_37[] = { 'g', 'u' }; +static symbol s_38[] = { 0xE9 }; +static symbol s_39[] = { 0xE8 }; +static symbol s_40[] = { 'e' }; +static symbol s_41[] = { 'Y' }; +static symbol s_42[] = { 'i' }; +static symbol s_43[] = { 0xE7 }; +static symbol s_44[] = { 'c' }; + +static int r_prelude(struct SN_env * z) { + while(1) { /* repeat, line 38 */ + int c = z->c; + while(1) { /* goto, line 38 */ + int c = z->c; + { int c = z->c; /* or, line 44 */ + if (!(in_grouping(z, g_v, 97, 251))) goto lab3; + z->bra = z->c; /* [, line 40 */ + { int c = z->c; /* or, line 40 */ + if (!(eq_s(z, 1, s_0))) goto lab5; + z->ket = z->c; /* ], line 40 */ + if (!(in_grouping(z, g_v, 97, 251))) goto lab5; + { int ret; + ret = slice_from_s(z, 1, s_1); /* <-, line 40 */ + if (ret < 0) return ret; + } + goto lab4; + lab5: + z->c = c; + if (!(eq_s(z, 1, s_2))) goto lab6; + z->ket = z->c; /* ], line 41 */ + if (!(in_grouping(z, g_v, 97, 251))) goto lab6; + { int ret; + ret = slice_from_s(z, 1, s_3); /* <-, line 41 */ + if (ret < 0) return ret; + } + goto lab4; + lab6: + z->c = c; + if (!(eq_s(z, 1, s_4))) goto lab3; + z->ket = z->c; /* ], line 42 */ + { int ret; + ret = slice_from_s(z, 1, s_5); /* <-, line 42 */ + if (ret < 0) return ret; + } + } + lab4: + goto lab2; + lab3: + z->c = c; + z->bra = z->c; /* [, line 45 */ + if (!(eq_s(z, 1, s_6))) goto lab7; + z->ket = z->c; /* ], line 45 */ + if (!(in_grouping(z, g_v, 97, 251))) goto lab7; + { int ret; + ret = slice_from_s(z, 1, s_7); /* <-, line 45 */ + if (ret < 0) return ret; + } + goto lab2; + lab7: + z->c = c; + if (!(eq_s(z, 1, s_8))) goto lab1; + z->bra = z->c; /* [, line 47 */ + if (!(eq_s(z, 1, s_9))) goto lab1; + z->ket = z->c; /* ], line 47 */ + { int ret; + ret = slice_from_s(z, 1, s_10); /* <-, line 47 */ + if (ret < 0) return ret; + } + } + lab2: + z->c = c; + break; + lab1: + z->c = c; + if (z->c >= z->l) goto lab0; + z->c++; /* goto, line 38 */ + } + continue; + lab0: + z->c = c; + break; + } + return 1; +} + +static int r_mark_regions(struct SN_env * z) { + z->I[0] = z->l; + z->I[1] = z->l; + z->I[2] = z->l; + { int c = z->c; /* do, line 56 */ + { int c = z->c; /* or, line 57 */ + if (!(in_grouping(z, g_v, 97, 251))) goto lab2; + if (!(in_grouping(z, g_v, 97, 251))) goto lab2; + if (z->c >= z->l) goto lab2; + z->c++; /* next, line 57 */ + goto lab1; + lab2: + z->c = c; + if (z->c >= z->l) goto lab0; + z->c++; /* next, line 57 */ + while(1) { /* gopast, line 57 */ + if (!(in_grouping(z, g_v, 97, 251))) goto lab3; + break; + lab3: + if (z->c >= z->l) goto lab0; + z->c++; /* gopast, line 57 */ + } + } + lab1: + z->I[0] = z->c; /* setmark pV, line 58 */ + lab0: + z->c = c; + } + { int c = z->c; /* do, line 60 */ + while(1) { /* gopast, line 61 */ + if (!(in_grouping(z, g_v, 97, 251))) goto lab5; + break; + lab5: + if (z->c >= z->l) goto lab4; + z->c++; /* gopast, line 61 */ + } + while(1) { /* gopast, line 61 */ + if (!(out_grouping(z, g_v, 97, 251))) goto lab6; + break; + lab6: + if (z->c >= z->l) goto lab4; + z->c++; /* gopast, line 61 */ + } + z->I[1] = z->c; /* setmark p1, line 61 */ + while(1) { /* gopast, line 62 */ + if (!(in_grouping(z, g_v, 97, 251))) goto lab7; + break; + lab7: + if (z->c >= z->l) goto lab4; + z->c++; /* gopast, line 62 */ + } + while(1) { /* gopast, line 62 */ + if (!(out_grouping(z, g_v, 97, 251))) goto lab8; + break; + lab8: + if (z->c >= z->l) goto lab4; + z->c++; /* gopast, line 62 */ + } + z->I[2] = z->c; /* setmark p2, line 62 */ + lab4: + z->c = c; + } + return 1; +} + +static int r_postlude(struct SN_env * z) { + int among_var; + while(1) { /* repeat, line 66 */ + int c = z->c; + z->bra = z->c; /* [, line 68 */ + among_var = find_among(z, a_0, 4); /* substring, line 68 */ + if (!(among_var)) goto lab0; + z->ket = z->c; /* ], line 68 */ + switch(among_var) { + case 0: goto lab0; + case 1: + { int ret; + ret = slice_from_s(z, 1, s_11); /* <-, line 69 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 1, s_12); /* <-, line 70 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_from_s(z, 1, s_13); /* <-, line 71 */ + if (ret < 0) return ret; + } + break; + case 4: + if (z->c >= z->l) goto lab0; + z->c++; /* next, line 72 */ + break; + } + continue; + lab0: + z->c = c; + break; + } + return 1; +} + +static int r_RV(struct SN_env * z) { + if (!(z->I[0] <= z->c)) return 0; + return 1; +} + +static int r_R1(struct SN_env * z) { + if (!(z->I[1] <= z->c)) return 0; + return 1; +} + +static int r_R2(struct SN_env * z) { + if (!(z->I[2] <= z->c)) return 0; + return 1; +} + +static int r_standard_suffix(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 83 */ + among_var = find_among_b(z, a_3, 43); /* substring, line 83 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 83 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 87 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 87 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 90 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 90 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 91 */ + z->ket = z->c; /* [, line 91 */ + if (!(eq_s_b(z, 2, s_14))) { z->c = z->l - m; goto lab0; } + z->bra = z->c; /* ], line 91 */ + { int m = z->l - z->c; (void) m; /* or, line 91 */ + { int ret = r_R2(z); + if (ret == 0) goto lab2; /* call R2, line 91 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 91 */ + if (ret < 0) return ret; + } + goto lab1; + lab2: + z->c = z->l - m; + { int ret; + ret = slice_from_s(z, 3, s_15); /* <-, line 91 */ + if (ret < 0) return ret; + } + } + lab1: + lab0: + ; + } + break; + case 3: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 95 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 3, s_16); /* <-, line 95 */ + if (ret < 0) return ret; + } + break; + case 4: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 98 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 1, s_17); /* <-, line 98 */ + if (ret < 0) return ret; + } + break; + case 5: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 101 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 3, s_18); /* <-, line 101 */ + if (ret < 0) return ret; + } + break; + case 6: + { int ret = r_RV(z); + if (ret == 0) return 0; /* call RV, line 105 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 105 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 106 */ + z->ket = z->c; /* [, line 107 */ + among_var = find_among_b(z, a_1, 6); /* substring, line 107 */ + if (!(among_var)) { z->c = z->l - m; goto lab3; } + z->bra = z->c; /* ], line 107 */ + switch(among_var) { + case 0: { z->c = z->l - m; goto lab3; } + case 1: + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab3; } /* call R2, line 108 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 108 */ + if (ret < 0) return ret; + } + z->ket = z->c; /* [, line 108 */ + if (!(eq_s_b(z, 2, s_19))) { z->c = z->l - m; goto lab3; } + z->bra = z->c; /* ], line 108 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab3; } /* call R2, line 108 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 108 */ + if (ret < 0) return ret; + } + break; + case 2: + { int m = z->l - z->c; (void) m; /* or, line 109 */ + { int ret = r_R2(z); + if (ret == 0) goto lab5; /* call R2, line 109 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 109 */ + if (ret < 0) return ret; + } + goto lab4; + lab5: + z->c = z->l - m; + { int ret = r_R1(z); + if (ret == 0) { z->c = z->l - m; goto lab3; } /* call R1, line 109 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 3, s_20); /* <-, line 109 */ + if (ret < 0) return ret; + } + } + lab4: + break; + case 3: + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab3; } /* call R2, line 111 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 111 */ + if (ret < 0) return ret; + } + break; + case 4: + { int ret = r_RV(z); + if (ret == 0) { z->c = z->l - m; goto lab3; } /* call RV, line 113 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 1, s_21); /* <-, line 113 */ + if (ret < 0) return ret; + } + break; + } + lab3: + ; + } + break; + case 7: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 120 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 120 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 121 */ + z->ket = z->c; /* [, line 122 */ + among_var = find_among_b(z, a_2, 3); /* substring, line 122 */ + if (!(among_var)) { z->c = z->l - m; goto lab6; } + z->bra = z->c; /* ], line 122 */ + switch(among_var) { + case 0: { z->c = z->l - m; goto lab6; } + case 1: + { int m = z->l - z->c; (void) m; /* or, line 123 */ + { int ret = r_R2(z); + if (ret == 0) goto lab8; /* call R2, line 123 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 123 */ + if (ret < 0) return ret; + } + goto lab7; + lab8: + z->c = z->l - m; + { int ret; + ret = slice_from_s(z, 3, s_22); /* <-, line 123 */ + if (ret < 0) return ret; + } + } + lab7: + break; + case 2: + { int m = z->l - z->c; (void) m; /* or, line 124 */ + { int ret = r_R2(z); + if (ret == 0) goto lab10; /* call R2, line 124 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 124 */ + if (ret < 0) return ret; + } + goto lab9; + lab10: + z->c = z->l - m; + { int ret; + ret = slice_from_s(z, 3, s_23); /* <-, line 124 */ + if (ret < 0) return ret; + } + } + lab9: + break; + case 3: + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab6; } /* call R2, line 125 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 125 */ + if (ret < 0) return ret; + } + break; + } + lab6: + ; + } + break; + case 8: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 132 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 132 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 133 */ + z->ket = z->c; /* [, line 133 */ + if (!(eq_s_b(z, 2, s_24))) { z->c = z->l - m; goto lab11; } + z->bra = z->c; /* ], line 133 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab11; } /* call R2, line 133 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 133 */ + if (ret < 0) return ret; + } + z->ket = z->c; /* [, line 133 */ + if (!(eq_s_b(z, 2, s_25))) { z->c = z->l - m; goto lab11; } + z->bra = z->c; /* ], line 133 */ + { int m = z->l - z->c; (void) m; /* or, line 133 */ + { int ret = r_R2(z); + if (ret == 0) goto lab13; /* call R2, line 133 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 133 */ + if (ret < 0) return ret; + } + goto lab12; + lab13: + z->c = z->l - m; + { int ret; + ret = slice_from_s(z, 3, s_26); /* <-, line 133 */ + if (ret < 0) return ret; + } + } + lab12: + lab11: + ; + } + break; + case 9: + { int ret; + ret = slice_from_s(z, 3, s_27); /* <-, line 135 */ + if (ret < 0) return ret; + } + break; + case 10: + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 136 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 2, s_28); /* <-, line 136 */ + if (ret < 0) return ret; + } + break; + case 11: + { int m = z->l - z->c; (void) m; /* or, line 138 */ + { int ret = r_R2(z); + if (ret == 0) goto lab15; /* call R2, line 138 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 138 */ + if (ret < 0) return ret; + } + goto lab14; + lab15: + z->c = z->l - m; + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 138 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 3, s_29); /* <-, line 138 */ + if (ret < 0) return ret; + } + } + lab14: + break; + case 12: + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 141 */ + if (ret < 0) return ret; + } + if (!(out_grouping_b(z, g_v, 97, 251))) return 0; + { int ret; + ret = slice_del(z); /* delete, line 141 */ + if (ret < 0) return ret; + } + break; + case 13: + { int ret = r_RV(z); + if (ret == 0) return 0; /* call RV, line 146 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 3, s_30); /* <-, line 146 */ + if (ret < 0) return ret; + } + return 0; /* fail, line 146 */ + break; + case 14: + { int ret = r_RV(z); + if (ret == 0) return 0; /* call RV, line 147 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 3, s_31); /* <-, line 147 */ + if (ret < 0) return ret; + } + return 0; /* fail, line 147 */ + break; + case 15: + { int m_test = z->l - z->c; /* test, line 149 */ + if (!(in_grouping_b(z, g_v, 97, 251))) return 0; + { int ret = r_RV(z); + if (ret == 0) return 0; /* call RV, line 149 */ + if (ret < 0) return ret; + } + z->c = z->l - m_test; + } + { int ret; + ret = slice_del(z); /* delete, line 149 */ + if (ret < 0) return ret; + } + return 0; /* fail, line 149 */ + break; + } + return 1; +} + +static int r_i_verb_suffix(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 154 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 154 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 155 */ + among_var = find_among_b(z, a_4, 35); /* substring, line 155 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 155 */ + switch(among_var) { + case 0: { z->lb = m3; return 0; } + case 1: + if (!(out_grouping_b(z, g_v, 97, 251))) { z->lb = m3; return 0; } + { int ret; + ret = slice_del(z); /* delete, line 161 */ + if (ret < 0) return ret; + } + break; + } + z->lb = m3; + } + return 1; +} + +static int r_verb_suffix(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 165 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 165 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 166 */ + among_var = find_among_b(z, a_5, 38); /* substring, line 166 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 166 */ + switch(among_var) { + case 0: { z->lb = m3; return 0; } + case 1: + { int ret = r_R2(z); + if (ret == 0) { z->lb = m3; return 0; } /* call R2, line 168 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 168 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_del(z); /* delete, line 176 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_del(z); /* delete, line 181 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 182 */ + z->ket = z->c; /* [, line 182 */ + if (!(eq_s_b(z, 1, s_32))) { z->c = z->l - m; goto lab0; } + z->bra = z->c; /* ], line 182 */ + { int ret; + ret = slice_del(z); /* delete, line 182 */ + if (ret < 0) return ret; + } + lab0: + ; + } + break; + } + z->lb = m3; + } + return 1; +} + +static int r_residual_suffix(struct SN_env * z) { + int among_var; + { int m = z->l - z->c; (void) m; /* try, line 190 */ + z->ket = z->c; /* [, line 190 */ + if (!(eq_s_b(z, 1, s_33))) { z->c = z->l - m; goto lab0; } + z->bra = z->c; /* ], line 190 */ + { int m_test = z->l - z->c; /* test, line 190 */ + if (!(out_grouping_b(z, g_keep_with_s, 97, 232))) { z->c = z->l - m; goto lab0; } + z->c = z->l - m_test; + } + { int ret; + ret = slice_del(z); /* delete, line 190 */ + if (ret < 0) return ret; + } + lab0: + ; + } + { int m3; /* setlimit, line 191 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 191 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 192 */ + among_var = find_among_b(z, a_6, 7); /* substring, line 192 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 192 */ + switch(among_var) { + case 0: { z->lb = m3; return 0; } + case 1: + { int ret = r_R2(z); + if (ret == 0) { z->lb = m3; return 0; } /* call R2, line 193 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* or, line 193 */ + if (!(eq_s_b(z, 1, s_34))) goto lab2; + goto lab1; + lab2: + z->c = z->l - m; + if (!(eq_s_b(z, 1, s_35))) { z->lb = m3; return 0; } + } + lab1: + { int ret; + ret = slice_del(z); /* delete, line 193 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 1, s_36); /* <-, line 195 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_del(z); /* delete, line 196 */ + if (ret < 0) return ret; + } + break; + case 4: + if (!(eq_s_b(z, 2, s_37))) { z->lb = m3; return 0; } + { int ret; + ret = slice_del(z); /* delete, line 197 */ + if (ret < 0) return ret; + } + break; + } + z->lb = m3; + } + return 1; +} + +static int r_un_double(struct SN_env * z) { + { int m_test = z->l - z->c; /* test, line 203 */ + if (!(find_among_b(z, a_7, 5))) return 0; /* among, line 203 */ + z->c = z->l - m_test; + } + z->ket = z->c; /* [, line 203 */ + if (z->c <= z->lb) return 0; + z->c--; /* next, line 203 */ + z->bra = z->c; /* ], line 203 */ + { int ret; + ret = slice_del(z); /* delete, line 203 */ + if (ret < 0) return ret; + } + return 1; +} + +static int r_un_accent(struct SN_env * z) { + { int i = 1; + while(1) { /* atleast, line 207 */ + if (!(out_grouping_b(z, g_v, 97, 251))) goto lab0; + i--; + continue; + lab0: + break; + } + if (i > 0) return 0; + } + z->ket = z->c; /* [, line 208 */ + { int m = z->l - z->c; (void) m; /* or, line 208 */ + if (!(eq_s_b(z, 1, s_38))) goto lab2; + goto lab1; + lab2: + z->c = z->l - m; + if (!(eq_s_b(z, 1, s_39))) return 0; + } +lab1: + z->bra = z->c; /* ], line 208 */ + { int ret; + ret = slice_from_s(z, 1, s_40); /* <-, line 208 */ + if (ret < 0) return ret; + } + return 1; +} + +extern int french_ISO_8859_1_stem(struct SN_env * z) { + { int c = z->c; /* do, line 214 */ + { int ret = r_prelude(z); + if (ret == 0) goto lab0; /* call prelude, line 214 */ + if (ret < 0) return ret; + } + lab0: + z->c = c; + } + { int c = z->c; /* do, line 215 */ + { int ret = r_mark_regions(z); + if (ret == 0) goto lab1; /* call mark_regions, line 215 */ + if (ret < 0) return ret; + } + lab1: + z->c = c; + } + z->lb = z->c; z->c = z->l; /* backwards, line 216 */ + + { int m = z->l - z->c; (void) m; /* do, line 218 */ + { int m = z->l - z->c; (void) m; /* or, line 228 */ + { int m = z->l - z->c; (void) m; /* and, line 224 */ + { int m = z->l - z->c; (void) m; /* or, line 220 */ + { int ret = r_standard_suffix(z); + if (ret == 0) goto lab6; /* call standard_suffix, line 220 */ + if (ret < 0) return ret; + } + goto lab5; + lab6: + z->c = z->l - m; + { int ret = r_i_verb_suffix(z); + if (ret == 0) goto lab7; /* call i_verb_suffix, line 221 */ + if (ret < 0) return ret; + } + goto lab5; + lab7: + z->c = z->l - m; + { int ret = r_verb_suffix(z); + if (ret == 0) goto lab4; /* call verb_suffix, line 222 */ + if (ret < 0) return ret; + } + } + lab5: + z->c = z->l - m; + { int m = z->l - z->c; (void) m; /* try, line 225 */ + z->ket = z->c; /* [, line 225 */ + { int m = z->l - z->c; (void) m; /* or, line 225 */ + if (!(eq_s_b(z, 1, s_41))) goto lab10; + z->bra = z->c; /* ], line 225 */ + { int ret; + ret = slice_from_s(z, 1, s_42); /* <-, line 225 */ + if (ret < 0) return ret; + } + goto lab9; + lab10: + z->c = z->l - m; + if (!(eq_s_b(z, 1, s_43))) { z->c = z->l - m; goto lab8; } + z->bra = z->c; /* ], line 226 */ + { int ret; + ret = slice_from_s(z, 1, s_44); /* <-, line 226 */ + if (ret < 0) return ret; + } + } + lab9: + lab8: + ; + } + } + goto lab3; + lab4: + z->c = z->l - m; + { int ret = r_residual_suffix(z); + if (ret == 0) goto lab2; /* call residual_suffix, line 229 */ + if (ret < 0) return ret; + } + } + lab3: + lab2: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 234 */ + { int ret = r_un_double(z); + if (ret == 0) goto lab11; /* call un_double, line 234 */ + if (ret < 0) return ret; + } + lab11: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 235 */ + { int ret = r_un_accent(z); + if (ret == 0) goto lab12; /* call un_accent, line 235 */ + if (ret < 0) return ret; + } + lab12: + z->c = z->l - m; + } + z->c = z->lb; + { int c = z->c; /* do, line 237 */ + { int ret = r_postlude(z); + if (ret == 0) goto lab13; /* call postlude, line 237 */ + if (ret < 0) return ret; + } + lab13: + z->c = c; + } + return 1; +} + +extern struct SN_env * french_ISO_8859_1_create_env(void) { return SN_create_env(0, 3, 0); } + +extern void french_ISO_8859_1_close_env(struct SN_env * z) { SN_close_env(z); } + diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_french.h b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_french.h new file mode 100644 index 0000000..21244d6 --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_french.h @@ -0,0 +1,16 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern struct SN_env * french_ISO_8859_1_create_env(void); +extern void french_ISO_8859_1_close_env(struct SN_env * z); + +extern int french_ISO_8859_1_stem(struct SN_env * z); + +#ifdef __cplusplus +} +#endif + diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_german.c b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_german.c new file mode 100644 index 0000000..633bf03 --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_german.c @@ -0,0 +1,512 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#include "../runtime/header.h" + +extern int german_ISO_8859_1_stem(struct SN_env * z); +static int r_standard_suffix(struct SN_env * z); +static int r_R2(struct SN_env * z); +static int r_R1(struct SN_env * z); +static int r_mark_regions(struct SN_env * z); +static int r_postlude(struct SN_env * z); +static int r_prelude(struct SN_env * z); + +extern struct SN_env * german_ISO_8859_1_create_env(void); +extern void german_ISO_8859_1_close_env(struct SN_env * z); + +static symbol s_0_1[1] = { 'U' }; +static symbol s_0_2[1] = { 'Y' }; +static symbol s_0_3[1] = { 0xE4 }; +static symbol s_0_4[1] = { 0xF6 }; +static symbol s_0_5[1] = { 0xFC }; + +static struct among a_0[6] = +{ +/* 0 */ { 0, 0, -1, 6, 0}, +/* 1 */ { 1, s_0_1, 0, 2, 0}, +/* 2 */ { 1, s_0_2, 0, 1, 0}, +/* 3 */ { 1, s_0_3, 0, 3, 0}, +/* 4 */ { 1, s_0_4, 0, 4, 0}, +/* 5 */ { 1, s_0_5, 0, 5, 0} +}; + +static symbol s_1_0[1] = { 'e' }; +static symbol s_1_1[2] = { 'e', 'm' }; +static symbol s_1_2[2] = { 'e', 'n' }; +static symbol s_1_3[3] = { 'e', 'r', 'n' }; +static symbol s_1_4[2] = { 'e', 'r' }; +static symbol s_1_5[1] = { 's' }; +static symbol s_1_6[2] = { 'e', 's' }; + +static struct among a_1[7] = +{ +/* 0 */ { 1, s_1_0, -1, 1, 0}, +/* 1 */ { 2, s_1_1, -1, 1, 0}, +/* 2 */ { 2, s_1_2, -1, 1, 0}, +/* 3 */ { 3, s_1_3, -1, 1, 0}, +/* 4 */ { 2, s_1_4, -1, 1, 0}, +/* 5 */ { 1, s_1_5, -1, 2, 0}, +/* 6 */ { 2, s_1_6, 5, 1, 0} +}; + +static symbol s_2_0[2] = { 'e', 'n' }; +static symbol s_2_1[2] = { 'e', 'r' }; +static symbol s_2_2[2] = { 's', 't' }; +static symbol s_2_3[3] = { 'e', 's', 't' }; + +static struct among a_2[4] = +{ +/* 0 */ { 2, s_2_0, -1, 1, 0}, +/* 1 */ { 2, s_2_1, -1, 1, 0}, +/* 2 */ { 2, s_2_2, -1, 2, 0}, +/* 3 */ { 3, s_2_3, 2, 1, 0} +}; + +static symbol s_3_0[2] = { 'i', 'g' }; +static symbol s_3_1[4] = { 'l', 'i', 'c', 'h' }; + +static struct among a_3[2] = +{ +/* 0 */ { 2, s_3_0, -1, 1, 0}, +/* 1 */ { 4, s_3_1, -1, 1, 0} +}; + +static symbol s_4_0[3] = { 'e', 'n', 'd' }; +static symbol s_4_1[2] = { 'i', 'g' }; +static symbol s_4_2[3] = { 'u', 'n', 'g' }; +static symbol s_4_3[4] = { 'l', 'i', 'c', 'h' }; +static symbol s_4_4[4] = { 'i', 's', 'c', 'h' }; +static symbol s_4_5[2] = { 'i', 'k' }; +static symbol s_4_6[4] = { 'h', 'e', 'i', 't' }; +static symbol s_4_7[4] = { 'k', 'e', 'i', 't' }; + +static struct among a_4[8] = +{ +/* 0 */ { 3, s_4_0, -1, 1, 0}, +/* 1 */ { 2, s_4_1, -1, 2, 0}, +/* 2 */ { 3, s_4_2, -1, 1, 0}, +/* 3 */ { 4, s_4_3, -1, 3, 0}, +/* 4 */ { 4, s_4_4, -1, 2, 0}, +/* 5 */ { 2, s_4_5, -1, 2, 0}, +/* 6 */ { 4, s_4_6, -1, 3, 0}, +/* 7 */ { 4, s_4_7, -1, 4, 0} +}; + +static unsigned char g_v[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 32, 8 }; + +static unsigned char g_s_ending[] = { 117, 30, 5 }; + +static unsigned char g_st_ending[] = { 117, 30, 4 }; + +static symbol s_0[] = { 0xDF }; +static symbol s_1[] = { 's', 's' }; +static symbol s_2[] = { 'u' }; +static symbol s_3[] = { 'U' }; +static symbol s_4[] = { 'y' }; +static symbol s_5[] = { 'Y' }; +static symbol s_6[] = { 'y' }; +static symbol s_7[] = { 'u' }; +static symbol s_8[] = { 'a' }; +static symbol s_9[] = { 'o' }; +static symbol s_10[] = { 'u' }; +static symbol s_11[] = { 'i', 'g' }; +static symbol s_12[] = { 'e' }; +static symbol s_13[] = { 'e' }; +static symbol s_14[] = { 'e', 'r' }; +static symbol s_15[] = { 'e', 'n' }; + +static int r_prelude(struct SN_env * z) { + { int c_test = z->c; /* test, line 30 */ + while(1) { /* repeat, line 30 */ + int c = z->c; + { int c = z->c; /* or, line 33 */ + z->bra = z->c; /* [, line 32 */ + if (!(eq_s(z, 1, s_0))) goto lab2; + z->ket = z->c; /* ], line 32 */ + { int ret; + ret = slice_from_s(z, 2, s_1); /* <-, line 32 */ + if (ret < 0) return ret; + } + goto lab1; + lab2: + z->c = c; + if (z->c >= z->l) goto lab0; + z->c++; /* next, line 33 */ + } + lab1: + continue; + lab0: + z->c = c; + break; + } + z->c = c_test; + } + while(1) { /* repeat, line 36 */ + int c = z->c; + while(1) { /* goto, line 36 */ + int c = z->c; + if (!(in_grouping(z, g_v, 97, 252))) goto lab4; + z->bra = z->c; /* [, line 37 */ + { int c = z->c; /* or, line 37 */ + if (!(eq_s(z, 1, s_2))) goto lab6; + z->ket = z->c; /* ], line 37 */ + if (!(in_grouping(z, g_v, 97, 252))) goto lab6; + { int ret; + ret = slice_from_s(z, 1, s_3); /* <-, line 37 */ + if (ret < 0) return ret; + } + goto lab5; + lab6: + z->c = c; + if (!(eq_s(z, 1, s_4))) goto lab4; + z->ket = z->c; /* ], line 38 */ + if (!(in_grouping(z, g_v, 97, 252))) goto lab4; + { int ret; + ret = slice_from_s(z, 1, s_5); /* <-, line 38 */ + if (ret < 0) return ret; + } + } + lab5: + z->c = c; + break; + lab4: + z->c = c; + if (z->c >= z->l) goto lab3; + z->c++; /* goto, line 36 */ + } + continue; + lab3: + z->c = c; + break; + } + return 1; +} + +static int r_mark_regions(struct SN_env * z) { + z->I[0] = z->l; + z->I[1] = z->l; + { int c_test = z->c; /* test, line 47 */ + { int c = z->c + 3; + if (0 > c || c > z->l) return 0; + z->c = c; /* hop, line 47 */ + } + z->I[2] = z->c; /* setmark x, line 47 */ + z->c = c_test; + } + while(1) { /* gopast, line 49 */ + if (!(in_grouping(z, g_v, 97, 252))) goto lab0; + break; + lab0: + if (z->c >= z->l) return 0; + z->c++; /* gopast, line 49 */ + } + while(1) { /* gopast, line 49 */ + if (!(out_grouping(z, g_v, 97, 252))) goto lab1; + break; + lab1: + if (z->c >= z->l) return 0; + z->c++; /* gopast, line 49 */ + } + z->I[0] = z->c; /* setmark p1, line 49 */ + /* try, line 50 */ + if (!(z->I[0] < z->I[2])) goto lab2; + z->I[0] = z->I[2]; +lab2: + while(1) { /* gopast, line 51 */ + if (!(in_grouping(z, g_v, 97, 252))) goto lab3; + break; + lab3: + if (z->c >= z->l) return 0; + z->c++; /* gopast, line 51 */ + } + while(1) { /* gopast, line 51 */ + if (!(out_grouping(z, g_v, 97, 252))) goto lab4; + break; + lab4: + if (z->c >= z->l) return 0; + z->c++; /* gopast, line 51 */ + } + z->I[1] = z->c; /* setmark p2, line 51 */ + return 1; +} + +static int r_postlude(struct SN_env * z) { + int among_var; + while(1) { /* repeat, line 55 */ + int c = z->c; + z->bra = z->c; /* [, line 57 */ + among_var = find_among(z, a_0, 6); /* substring, line 57 */ + if (!(among_var)) goto lab0; + z->ket = z->c; /* ], line 57 */ + switch(among_var) { + case 0: goto lab0; + case 1: + { int ret; + ret = slice_from_s(z, 1, s_6); /* <-, line 58 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 1, s_7); /* <-, line 59 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_from_s(z, 1, s_8); /* <-, line 60 */ + if (ret < 0) return ret; + } + break; + case 4: + { int ret; + ret = slice_from_s(z, 1, s_9); /* <-, line 61 */ + if (ret < 0) return ret; + } + break; + case 5: + { int ret; + ret = slice_from_s(z, 1, s_10); /* <-, line 62 */ + if (ret < 0) return ret; + } + break; + case 6: + if (z->c >= z->l) goto lab0; + z->c++; /* next, line 63 */ + break; + } + continue; + lab0: + z->c = c; + break; + } + return 1; +} + +static int r_R1(struct SN_env * z) { + if (!(z->I[0] <= z->c)) return 0; + return 1; +} + +static int r_R2(struct SN_env * z) { + if (!(z->I[1] <= z->c)) return 0; + return 1; +} + +static int r_standard_suffix(struct SN_env * z) { + int among_var; + { int m = z->l - z->c; (void) m; /* do, line 74 */ + z->ket = z->c; /* [, line 75 */ + among_var = find_among_b(z, a_1, 7); /* substring, line 75 */ + if (!(among_var)) goto lab0; + z->bra = z->c; /* ], line 75 */ + { int ret = r_R1(z); + if (ret == 0) goto lab0; /* call R1, line 75 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: goto lab0; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 77 */ + if (ret < 0) return ret; + } + break; + case 2: + if (!(in_grouping_b(z, g_s_ending, 98, 116))) goto lab0; + { int ret; + ret = slice_del(z); /* delete, line 80 */ + if (ret < 0) return ret; + } + break; + } + lab0: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 84 */ + z->ket = z->c; /* [, line 85 */ + among_var = find_among_b(z, a_2, 4); /* substring, line 85 */ + if (!(among_var)) goto lab1; + z->bra = z->c; /* ], line 85 */ + { int ret = r_R1(z); + if (ret == 0) goto lab1; /* call R1, line 85 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: goto lab1; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 87 */ + if (ret < 0) return ret; + } + break; + case 2: + if (!(in_grouping_b(z, g_st_ending, 98, 116))) goto lab1; + { int c = z->c - 3; + if (z->lb > c || c > z->l) goto lab1; + z->c = c; /* hop, line 90 */ + } + { int ret; + ret = slice_del(z); /* delete, line 90 */ + if (ret < 0) return ret; + } + break; + } + lab1: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 94 */ + z->ket = z->c; /* [, line 95 */ + among_var = find_among_b(z, a_4, 8); /* substring, line 95 */ + if (!(among_var)) goto lab2; + z->bra = z->c; /* ], line 95 */ + { int ret = r_R2(z); + if (ret == 0) goto lab2; /* call R2, line 95 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: goto lab2; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 97 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 98 */ + z->ket = z->c; /* [, line 98 */ + if (!(eq_s_b(z, 2, s_11))) { z->c = z->l - m; goto lab3; } + z->bra = z->c; /* ], line 98 */ + { int m = z->l - z->c; (void) m; /* not, line 98 */ + if (!(eq_s_b(z, 1, s_12))) goto lab4; + { z->c = z->l - m; goto lab3; } + lab4: + z->c = z->l - m; + } + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab3; } /* call R2, line 98 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 98 */ + if (ret < 0) return ret; + } + lab3: + ; + } + break; + case 2: + { int m = z->l - z->c; (void) m; /* not, line 101 */ + if (!(eq_s_b(z, 1, s_13))) goto lab5; + goto lab2; + lab5: + z->c = z->l - m; + } + { int ret; + ret = slice_del(z); /* delete, line 101 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_del(z); /* delete, line 104 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 105 */ + z->ket = z->c; /* [, line 106 */ + { int m = z->l - z->c; (void) m; /* or, line 106 */ + if (!(eq_s_b(z, 2, s_14))) goto lab8; + goto lab7; + lab8: + z->c = z->l - m; + if (!(eq_s_b(z, 2, s_15))) { z->c = z->l - m; goto lab6; } + } + lab7: + z->bra = z->c; /* ], line 106 */ + { int ret = r_R1(z); + if (ret == 0) { z->c = z->l - m; goto lab6; } /* call R1, line 106 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 106 */ + if (ret < 0) return ret; + } + lab6: + ; + } + break; + case 4: + { int ret; + ret = slice_del(z); /* delete, line 110 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 111 */ + z->ket = z->c; /* [, line 112 */ + among_var = find_among_b(z, a_3, 2); /* substring, line 112 */ + if (!(among_var)) { z->c = z->l - m; goto lab9; } + z->bra = z->c; /* ], line 112 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab9; } /* call R2, line 112 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: { z->c = z->l - m; goto lab9; } + case 1: + { int ret; + ret = slice_del(z); /* delete, line 114 */ + if (ret < 0) return ret; + } + break; + } + lab9: + ; + } + break; + } + lab2: + z->c = z->l - m; + } + return 1; +} + +extern int german_ISO_8859_1_stem(struct SN_env * z) { + { int c = z->c; /* do, line 125 */ + { int ret = r_prelude(z); + if (ret == 0) goto lab0; /* call prelude, line 125 */ + if (ret < 0) return ret; + } + lab0: + z->c = c; + } + { int c = z->c; /* do, line 126 */ + { int ret = r_mark_regions(z); + if (ret == 0) goto lab1; /* call mark_regions, line 126 */ + if (ret < 0) return ret; + } + lab1: + z->c = c; + } + z->lb = z->c; z->c = z->l; /* backwards, line 127 */ + + { int m = z->l - z->c; (void) m; /* do, line 128 */ + { int ret = r_standard_suffix(z); + if (ret == 0) goto lab2; /* call standard_suffix, line 128 */ + if (ret < 0) return ret; + } + lab2: + z->c = z->l - m; + } + z->c = z->lb; + { int c = z->c; /* do, line 129 */ + { int ret = r_postlude(z); + if (ret == 0) goto lab3; /* call postlude, line 129 */ + if (ret < 0) return ret; + } + lab3: + z->c = c; + } + return 1; +} + +extern struct SN_env * german_ISO_8859_1_create_env(void) { return SN_create_env(0, 3, 0); } + +extern void german_ISO_8859_1_close_env(struct SN_env * z) { SN_close_env(z); } + diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_german.h b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_german.h new file mode 100644 index 0000000..8525389 --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_german.h @@ -0,0 +1,16 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern struct SN_env * german_ISO_8859_1_create_env(void); +extern void german_ISO_8859_1_close_env(struct SN_env * z); + +extern int german_ISO_8859_1_stem(struct SN_env * z); + +#ifdef __cplusplus +} +#endif + diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_italian.c b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_italian.c new file mode 100644 index 0000000..9fe9776 --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_italian.c @@ -0,0 +1,1091 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#include "../runtime/header.h" + +extern int italian_ISO_8859_1_stem(struct SN_env * z); +static int r_vowel_suffix(struct SN_env * z); +static int r_verb_suffix(struct SN_env * z); +static int r_standard_suffix(struct SN_env * z); +static int r_attached_pronoun(struct SN_env * z); +static int r_R2(struct SN_env * z); +static int r_R1(struct SN_env * z); +static int r_RV(struct SN_env * z); +static int r_mark_regions(struct SN_env * z); +static int r_postlude(struct SN_env * z); +static int r_prelude(struct SN_env * z); + +extern struct SN_env * italian_ISO_8859_1_create_env(void); +extern void italian_ISO_8859_1_close_env(struct SN_env * z); + +static symbol s_0_1[2] = { 'q', 'u' }; +static symbol s_0_2[1] = { 0xE1 }; +static symbol s_0_3[1] = { 0xE9 }; +static symbol s_0_4[1] = { 0xED }; +static symbol s_0_5[1] = { 0xF3 }; +static symbol s_0_6[1] = { 0xFA }; + +static struct among a_0[7] = +{ +/* 0 */ { 0, 0, -1, 7, 0}, +/* 1 */ { 2, s_0_1, 0, 6, 0}, +/* 2 */ { 1, s_0_2, 0, 1, 0}, +/* 3 */ { 1, s_0_3, 0, 2, 0}, +/* 4 */ { 1, s_0_4, 0, 3, 0}, +/* 5 */ { 1, s_0_5, 0, 4, 0}, +/* 6 */ { 1, s_0_6, 0, 5, 0} +}; + +static symbol s_1_1[1] = { 'I' }; +static symbol s_1_2[1] = { 'U' }; + +static struct among a_1[3] = +{ +/* 0 */ { 0, 0, -1, 3, 0}, +/* 1 */ { 1, s_1_1, 0, 1, 0}, +/* 2 */ { 1, s_1_2, 0, 2, 0} +}; + +static symbol s_2_0[2] = { 'l', 'a' }; +static symbol s_2_1[4] = { 'c', 'e', 'l', 'a' }; +static symbol s_2_2[6] = { 'g', 'l', 'i', 'e', 'l', 'a' }; +static symbol s_2_3[4] = { 'm', 'e', 'l', 'a' }; +static symbol s_2_4[4] = { 't', 'e', 'l', 'a' }; +static symbol s_2_5[4] = { 'v', 'e', 'l', 'a' }; +static symbol s_2_6[2] = { 'l', 'e' }; +static symbol s_2_7[4] = { 'c', 'e', 'l', 'e' }; +static symbol s_2_8[6] = { 'g', 'l', 'i', 'e', 'l', 'e' }; +static symbol s_2_9[4] = { 'm', 'e', 'l', 'e' }; +static symbol s_2_10[4] = { 't', 'e', 'l', 'e' }; +static symbol s_2_11[4] = { 'v', 'e', 'l', 'e' }; +static symbol s_2_12[2] = { 'n', 'e' }; +static symbol s_2_13[4] = { 'c', 'e', 'n', 'e' }; +static symbol s_2_14[6] = { 'g', 'l', 'i', 'e', 'n', 'e' }; +static symbol s_2_15[4] = { 'm', 'e', 'n', 'e' }; +static symbol s_2_16[4] = { 's', 'e', 'n', 'e' }; +static symbol s_2_17[4] = { 't', 'e', 'n', 'e' }; +static symbol s_2_18[4] = { 'v', 'e', 'n', 'e' }; +static symbol s_2_19[2] = { 'c', 'i' }; +static symbol s_2_20[2] = { 'l', 'i' }; +static symbol s_2_21[4] = { 'c', 'e', 'l', 'i' }; +static symbol s_2_22[6] = { 'g', 'l', 'i', 'e', 'l', 'i' }; +static symbol s_2_23[4] = { 'm', 'e', 'l', 'i' }; +static symbol s_2_24[4] = { 't', 'e', 'l', 'i' }; +static symbol s_2_25[4] = { 'v', 'e', 'l', 'i' }; +static symbol s_2_26[3] = { 'g', 'l', 'i' }; +static symbol s_2_27[2] = { 'm', 'i' }; +static symbol s_2_28[2] = { 's', 'i' }; +static symbol s_2_29[2] = { 't', 'i' }; +static symbol s_2_30[2] = { 'v', 'i' }; +static symbol s_2_31[2] = { 'l', 'o' }; +static symbol s_2_32[4] = { 'c', 'e', 'l', 'o' }; +static symbol s_2_33[6] = { 'g', 'l', 'i', 'e', 'l', 'o' }; +static symbol s_2_34[4] = { 'm', 'e', 'l', 'o' }; +static symbol s_2_35[4] = { 't', 'e', 'l', 'o' }; +static symbol s_2_36[4] = { 'v', 'e', 'l', 'o' }; + +static struct among a_2[37] = +{ +/* 0 */ { 2, s_2_0, -1, -1, 0}, +/* 1 */ { 4, s_2_1, 0, -1, 0}, +/* 2 */ { 6, s_2_2, 0, -1, 0}, +/* 3 */ { 4, s_2_3, 0, -1, 0}, +/* 4 */ { 4, s_2_4, 0, -1, 0}, +/* 5 */ { 4, s_2_5, 0, -1, 0}, +/* 6 */ { 2, s_2_6, -1, -1, 0}, +/* 7 */ { 4, s_2_7, 6, -1, 0}, +/* 8 */ { 6, s_2_8, 6, -1, 0}, +/* 9 */ { 4, s_2_9, 6, -1, 0}, +/* 10 */ { 4, s_2_10, 6, -1, 0}, +/* 11 */ { 4, s_2_11, 6, -1, 0}, +/* 12 */ { 2, s_2_12, -1, -1, 0}, +/* 13 */ { 4, s_2_13, 12, -1, 0}, +/* 14 */ { 6, s_2_14, 12, -1, 0}, +/* 15 */ { 4, s_2_15, 12, -1, 0}, +/* 16 */ { 4, s_2_16, 12, -1, 0}, +/* 17 */ { 4, s_2_17, 12, -1, 0}, +/* 18 */ { 4, s_2_18, 12, -1, 0}, +/* 19 */ { 2, s_2_19, -1, -1, 0}, +/* 20 */ { 2, s_2_20, -1, -1, 0}, +/* 21 */ { 4, s_2_21, 20, -1, 0}, +/* 22 */ { 6, s_2_22, 20, -1, 0}, +/* 23 */ { 4, s_2_23, 20, -1, 0}, +/* 24 */ { 4, s_2_24, 20, -1, 0}, +/* 25 */ { 4, s_2_25, 20, -1, 0}, +/* 26 */ { 3, s_2_26, 20, -1, 0}, +/* 27 */ { 2, s_2_27, -1, -1, 0}, +/* 28 */ { 2, s_2_28, -1, -1, 0}, +/* 29 */ { 2, s_2_29, -1, -1, 0}, +/* 30 */ { 2, s_2_30, -1, -1, 0}, +/* 31 */ { 2, s_2_31, -1, -1, 0}, +/* 32 */ { 4, s_2_32, 31, -1, 0}, +/* 33 */ { 6, s_2_33, 31, -1, 0}, +/* 34 */ { 4, s_2_34, 31, -1, 0}, +/* 35 */ { 4, s_2_35, 31, -1, 0}, +/* 36 */ { 4, s_2_36, 31, -1, 0} +}; + +static symbol s_3_0[4] = { 'a', 'n', 'd', 'o' }; +static symbol s_3_1[4] = { 'e', 'n', 'd', 'o' }; +static symbol s_3_2[2] = { 'a', 'r' }; +static symbol s_3_3[2] = { 'e', 'r' }; +static symbol s_3_4[2] = { 'i', 'r' }; + +static struct among a_3[5] = +{ +/* 0 */ { 4, s_3_0, -1, 1, 0}, +/* 1 */ { 4, s_3_1, -1, 1, 0}, +/* 2 */ { 2, s_3_2, -1, 2, 0}, +/* 3 */ { 2, s_3_3, -1, 2, 0}, +/* 4 */ { 2, s_3_4, -1, 2, 0} +}; + +static symbol s_4_0[2] = { 'i', 'c' }; +static symbol s_4_1[4] = { 'a', 'b', 'i', 'l' }; +static symbol s_4_2[2] = { 'o', 's' }; +static symbol s_4_3[2] = { 'i', 'v' }; + +static struct among a_4[4] = +{ +/* 0 */ { 2, s_4_0, -1, -1, 0}, +/* 1 */ { 4, s_4_1, -1, -1, 0}, +/* 2 */ { 2, s_4_2, -1, -1, 0}, +/* 3 */ { 2, s_4_3, -1, 1, 0} +}; + +static symbol s_5_0[2] = { 'i', 'c' }; +static symbol s_5_1[4] = { 'a', 'b', 'i', 'l' }; +static symbol s_5_2[2] = { 'i', 'v' }; + +static struct among a_5[3] = +{ +/* 0 */ { 2, s_5_0, -1, 1, 0}, +/* 1 */ { 4, s_5_1, -1, 1, 0}, +/* 2 */ { 2, s_5_2, -1, 1, 0} +}; + +static symbol s_6_0[3] = { 'i', 'c', 'a' }; +static symbol s_6_1[5] = { 'l', 'o', 'g', 'i', 'a' }; +static symbol s_6_2[3] = { 'o', 's', 'a' }; +static symbol s_6_3[4] = { 'i', 's', 't', 'a' }; +static symbol s_6_4[3] = { 'i', 'v', 'a' }; +static symbol s_6_5[4] = { 'a', 'n', 'z', 'a' }; +static symbol s_6_6[4] = { 'e', 'n', 'z', 'a' }; +static symbol s_6_7[3] = { 'i', 'c', 'e' }; +static symbol s_6_8[6] = { 'a', 't', 'r', 'i', 'c', 'e' }; +static symbol s_6_9[4] = { 'i', 'c', 'h', 'e' }; +static symbol s_6_10[5] = { 'l', 'o', 'g', 'i', 'e' }; +static symbol s_6_11[5] = { 'a', 'b', 'i', 'l', 'e' }; +static symbol s_6_12[5] = { 'i', 'b', 'i', 'l', 'e' }; +static symbol s_6_13[6] = { 'u', 's', 'i', 'o', 'n', 'e' }; +static symbol s_6_14[6] = { 'a', 'z', 'i', 'o', 'n', 'e' }; +static symbol s_6_15[6] = { 'u', 'z', 'i', 'o', 'n', 'e' }; +static symbol s_6_16[5] = { 'a', 't', 'o', 'r', 'e' }; +static symbol s_6_17[3] = { 'o', 's', 'e' }; +static symbol s_6_18[4] = { 'a', 'n', 't', 'e' }; +static symbol s_6_19[5] = { 'm', 'e', 'n', 't', 'e' }; +static symbol s_6_20[6] = { 'a', 'm', 'e', 'n', 't', 'e' }; +static symbol s_6_21[4] = { 'i', 's', 't', 'e' }; +static symbol s_6_22[3] = { 'i', 'v', 'e' }; +static symbol s_6_23[4] = { 'a', 'n', 'z', 'e' }; +static symbol s_6_24[4] = { 'e', 'n', 'z', 'e' }; +static symbol s_6_25[3] = { 'i', 'c', 'i' }; +static symbol s_6_26[6] = { 'a', 't', 'r', 'i', 'c', 'i' }; +static symbol s_6_27[4] = { 'i', 'c', 'h', 'i' }; +static symbol s_6_28[5] = { 'a', 'b', 'i', 'l', 'i' }; +static symbol s_6_29[5] = { 'i', 'b', 'i', 'l', 'i' }; +static symbol s_6_30[4] = { 'i', 's', 'm', 'i' }; +static symbol s_6_31[6] = { 'u', 's', 'i', 'o', 'n', 'i' }; +static symbol s_6_32[6] = { 'a', 'z', 'i', 'o', 'n', 'i' }; +static symbol s_6_33[6] = { 'u', 'z', 'i', 'o', 'n', 'i' }; +static symbol s_6_34[5] = { 'a', 't', 'o', 'r', 'i' }; +static symbol s_6_35[3] = { 'o', 's', 'i' }; +static symbol s_6_36[4] = { 'a', 'n', 't', 'i' }; +static symbol s_6_37[6] = { 'a', 'm', 'e', 'n', 't', 'i' }; +static symbol s_6_38[6] = { 'i', 'm', 'e', 'n', 't', 'i' }; +static symbol s_6_39[4] = { 'i', 's', 't', 'i' }; +static symbol s_6_40[3] = { 'i', 'v', 'i' }; +static symbol s_6_41[3] = { 'i', 'c', 'o' }; +static symbol s_6_42[4] = { 'i', 's', 'm', 'o' }; +static symbol s_6_43[3] = { 'o', 's', 'o' }; +static symbol s_6_44[6] = { 'a', 'm', 'e', 'n', 't', 'o' }; +static symbol s_6_45[6] = { 'i', 'm', 'e', 'n', 't', 'o' }; +static symbol s_6_46[3] = { 'i', 'v', 'o' }; +static symbol s_6_47[3] = { 'i', 't', 0xE0 }; +static symbol s_6_48[4] = { 'i', 's', 't', 0xE0 }; +static symbol s_6_49[4] = { 'i', 's', 't', 0xE8 }; +static symbol s_6_50[4] = { 'i', 's', 't', 0xEC }; + +static struct among a_6[51] = +{ +/* 0 */ { 3, s_6_0, -1, 1, 0}, +/* 1 */ { 5, s_6_1, -1, 3, 0}, +/* 2 */ { 3, s_6_2, -1, 1, 0}, +/* 3 */ { 4, s_6_3, -1, 1, 0}, +/* 4 */ { 3, s_6_4, -1, 9, 0}, +/* 5 */ { 4, s_6_5, -1, 1, 0}, +/* 6 */ { 4, s_6_6, -1, 5, 0}, +/* 7 */ { 3, s_6_7, -1, 1, 0}, +/* 8 */ { 6, s_6_8, 7, 1, 0}, +/* 9 */ { 4, s_6_9, -1, 1, 0}, +/* 10 */ { 5, s_6_10, -1, 3, 0}, +/* 11 */ { 5, s_6_11, -1, 1, 0}, +/* 12 */ { 5, s_6_12, -1, 1, 0}, +/* 13 */ { 6, s_6_13, -1, 4, 0}, +/* 14 */ { 6, s_6_14, -1, 2, 0}, +/* 15 */ { 6, s_6_15, -1, 4, 0}, +/* 16 */ { 5, s_6_16, -1, 2, 0}, +/* 17 */ { 3, s_6_17, -1, 1, 0}, +/* 18 */ { 4, s_6_18, -1, 1, 0}, +/* 19 */ { 5, s_6_19, -1, 1, 0}, +/* 20 */ { 6, s_6_20, 19, 7, 0}, +/* 21 */ { 4, s_6_21, -1, 1, 0}, +/* 22 */ { 3, s_6_22, -1, 9, 0}, +/* 23 */ { 4, s_6_23, -1, 1, 0}, +/* 24 */ { 4, s_6_24, -1, 5, 0}, +/* 25 */ { 3, s_6_25, -1, 1, 0}, +/* 26 */ { 6, s_6_26, 25, 1, 0}, +/* 27 */ { 4, s_6_27, -1, 1, 0}, +/* 28 */ { 5, s_6_28, -1, 1, 0}, +/* 29 */ { 5, s_6_29, -1, 1, 0}, +/* 30 */ { 4, s_6_30, -1, 1, 0}, +/* 31 */ { 6, s_6_31, -1, 4, 0}, +/* 32 */ { 6, s_6_32, -1, 2, 0}, +/* 33 */ { 6, s_6_33, -1, 4, 0}, +/* 34 */ { 5, s_6_34, -1, 2, 0}, +/* 35 */ { 3, s_6_35, -1, 1, 0}, +/* 36 */ { 4, s_6_36, -1, 1, 0}, +/* 37 */ { 6, s_6_37, -1, 6, 0}, +/* 38 */ { 6, s_6_38, -1, 6, 0}, +/* 39 */ { 4, s_6_39, -1, 1, 0}, +/* 40 */ { 3, s_6_40, -1, 9, 0}, +/* 41 */ { 3, s_6_41, -1, 1, 0}, +/* 42 */ { 4, s_6_42, -1, 1, 0}, +/* 43 */ { 3, s_6_43, -1, 1, 0}, +/* 44 */ { 6, s_6_44, -1, 6, 0}, +/* 45 */ { 6, s_6_45, -1, 6, 0}, +/* 46 */ { 3, s_6_46, -1, 9, 0}, +/* 47 */ { 3, s_6_47, -1, 8, 0}, +/* 48 */ { 4, s_6_48, -1, 1, 0}, +/* 49 */ { 4, s_6_49, -1, 1, 0}, +/* 50 */ { 4, s_6_50, -1, 1, 0} +}; + +static symbol s_7_0[4] = { 'i', 's', 'c', 'a' }; +static symbol s_7_1[4] = { 'e', 'n', 'd', 'a' }; +static symbol s_7_2[3] = { 'a', 't', 'a' }; +static symbol s_7_3[3] = { 'i', 't', 'a' }; +static symbol s_7_4[3] = { 'u', 't', 'a' }; +static symbol s_7_5[3] = { 'a', 'v', 'a' }; +static symbol s_7_6[3] = { 'e', 'v', 'a' }; +static symbol s_7_7[3] = { 'i', 'v', 'a' }; +static symbol s_7_8[6] = { 'e', 'r', 'e', 'b', 'b', 'e' }; +static symbol s_7_9[6] = { 'i', 'r', 'e', 'b', 'b', 'e' }; +static symbol s_7_10[4] = { 'i', 's', 'c', 'e' }; +static symbol s_7_11[4] = { 'e', 'n', 'd', 'e' }; +static symbol s_7_12[3] = { 'a', 'r', 'e' }; +static symbol s_7_13[3] = { 'e', 'r', 'e' }; +static symbol s_7_14[3] = { 'i', 'r', 'e' }; +static symbol s_7_15[4] = { 'a', 's', 's', 'e' }; +static symbol s_7_16[3] = { 'a', 't', 'e' }; +static symbol s_7_17[5] = { 'a', 'v', 'a', 't', 'e' }; +static symbol s_7_18[5] = { 'e', 'v', 'a', 't', 'e' }; +static symbol s_7_19[5] = { 'i', 'v', 'a', 't', 'e' }; +static symbol s_7_20[3] = { 'e', 't', 'e' }; +static symbol s_7_21[5] = { 'e', 'r', 'e', 't', 'e' }; +static symbol s_7_22[5] = { 'i', 'r', 'e', 't', 'e' }; +static symbol s_7_23[3] = { 'i', 't', 'e' }; +static symbol s_7_24[6] = { 'e', 'r', 'e', 's', 't', 'e' }; +static symbol s_7_25[6] = { 'i', 'r', 'e', 's', 't', 'e' }; +static symbol s_7_26[3] = { 'u', 't', 'e' }; +static symbol s_7_27[4] = { 'e', 'r', 'a', 'i' }; +static symbol s_7_28[4] = { 'i', 'r', 'a', 'i' }; +static symbol s_7_29[4] = { 'i', 's', 'c', 'i' }; +static symbol s_7_30[4] = { 'e', 'n', 'd', 'i' }; +static symbol s_7_31[4] = { 'e', 'r', 'e', 'i' }; +static symbol s_7_32[4] = { 'i', 'r', 'e', 'i' }; +static symbol s_7_33[4] = { 'a', 's', 's', 'i' }; +static symbol s_7_34[3] = { 'a', 't', 'i' }; +static symbol s_7_35[3] = { 'i', 't', 'i' }; +static symbol s_7_36[6] = { 'e', 'r', 'e', 's', 't', 'i' }; +static symbol s_7_37[6] = { 'i', 'r', 'e', 's', 't', 'i' }; +static symbol s_7_38[3] = { 'u', 't', 'i' }; +static symbol s_7_39[3] = { 'a', 'v', 'i' }; +static symbol s_7_40[3] = { 'e', 'v', 'i' }; +static symbol s_7_41[3] = { 'i', 'v', 'i' }; +static symbol s_7_42[4] = { 'i', 's', 'c', 'o' }; +static symbol s_7_43[4] = { 'a', 'n', 'd', 'o' }; +static symbol s_7_44[4] = { 'e', 'n', 'd', 'o' }; +static symbol s_7_45[4] = { 'Y', 'a', 'm', 'o' }; +static symbol s_7_46[4] = { 'i', 'a', 'm', 'o' }; +static symbol s_7_47[5] = { 'a', 'v', 'a', 'm', 'o' }; +static symbol s_7_48[5] = { 'e', 'v', 'a', 'm', 'o' }; +static symbol s_7_49[5] = { 'i', 'v', 'a', 'm', 'o' }; +static symbol s_7_50[5] = { 'e', 'r', 'e', 'm', 'o' }; +static symbol s_7_51[5] = { 'i', 'r', 'e', 'm', 'o' }; +static symbol s_7_52[6] = { 'a', 's', 's', 'i', 'm', 'o' }; +static symbol s_7_53[4] = { 'a', 'm', 'm', 'o' }; +static symbol s_7_54[4] = { 'e', 'm', 'm', 'o' }; +static symbol s_7_55[6] = { 'e', 'r', 'e', 'm', 'm', 'o' }; +static symbol s_7_56[6] = { 'i', 'r', 'e', 'm', 'm', 'o' }; +static symbol s_7_57[4] = { 'i', 'm', 'm', 'o' }; +static symbol s_7_58[3] = { 'a', 'n', 'o' }; +static symbol s_7_59[6] = { 'i', 's', 'c', 'a', 'n', 'o' }; +static symbol s_7_60[5] = { 'a', 'v', 'a', 'n', 'o' }; +static symbol s_7_61[5] = { 'e', 'v', 'a', 'n', 'o' }; +static symbol s_7_62[5] = { 'i', 'v', 'a', 'n', 'o' }; +static symbol s_7_63[6] = { 'e', 'r', 'a', 'n', 'n', 'o' }; +static symbol s_7_64[6] = { 'i', 'r', 'a', 'n', 'n', 'o' }; +static symbol s_7_65[3] = { 'o', 'n', 'o' }; +static symbol s_7_66[6] = { 'i', 's', 'c', 'o', 'n', 'o' }; +static symbol s_7_67[5] = { 'a', 'r', 'o', 'n', 'o' }; +static symbol s_7_68[5] = { 'e', 'r', 'o', 'n', 'o' }; +static symbol s_7_69[5] = { 'i', 'r', 'o', 'n', 'o' }; +static symbol s_7_70[8] = { 'e', 'r', 'e', 'b', 'b', 'e', 'r', 'o' }; +static symbol s_7_71[8] = { 'i', 'r', 'e', 'b', 'b', 'e', 'r', 'o' }; +static symbol s_7_72[6] = { 'a', 's', 's', 'e', 'r', 'o' }; +static symbol s_7_73[6] = { 'e', 's', 's', 'e', 'r', 'o' }; +static symbol s_7_74[6] = { 'i', 's', 's', 'e', 'r', 'o' }; +static symbol s_7_75[3] = { 'a', 't', 'o' }; +static symbol s_7_76[3] = { 'i', 't', 'o' }; +static symbol s_7_77[3] = { 'u', 't', 'o' }; +static symbol s_7_78[3] = { 'a', 'v', 'o' }; +static symbol s_7_79[3] = { 'e', 'v', 'o' }; +static symbol s_7_80[3] = { 'i', 'v', 'o' }; +static symbol s_7_81[2] = { 'a', 'r' }; +static symbol s_7_82[2] = { 'i', 'r' }; +static symbol s_7_83[3] = { 'e', 'r', 0xE0 }; +static symbol s_7_84[3] = { 'i', 'r', 0xE0 }; +static symbol s_7_85[3] = { 'e', 'r', 0xF2 }; +static symbol s_7_86[3] = { 'i', 'r', 0xF2 }; + +static struct among a_7[87] = +{ +/* 0 */ { 4, s_7_0, -1, 1, 0}, +/* 1 */ { 4, s_7_1, -1, 1, 0}, +/* 2 */ { 3, s_7_2, -1, 1, 0}, +/* 3 */ { 3, s_7_3, -1, 1, 0}, +/* 4 */ { 3, s_7_4, -1, 1, 0}, +/* 5 */ { 3, s_7_5, -1, 1, 0}, +/* 6 */ { 3, s_7_6, -1, 1, 0}, +/* 7 */ { 3, s_7_7, -1, 1, 0}, +/* 8 */ { 6, s_7_8, -1, 1, 0}, +/* 9 */ { 6, s_7_9, -1, 1, 0}, +/* 10 */ { 4, s_7_10, -1, 1, 0}, +/* 11 */ { 4, s_7_11, -1, 1, 0}, +/* 12 */ { 3, s_7_12, -1, 1, 0}, +/* 13 */ { 3, s_7_13, -1, 1, 0}, +/* 14 */ { 3, s_7_14, -1, 1, 0}, +/* 15 */ { 4, s_7_15, -1, 1, 0}, +/* 16 */ { 3, s_7_16, -1, 1, 0}, +/* 17 */ { 5, s_7_17, 16, 1, 0}, +/* 18 */ { 5, s_7_18, 16, 1, 0}, +/* 19 */ { 5, s_7_19, 16, 1, 0}, +/* 20 */ { 3, s_7_20, -1, 1, 0}, +/* 21 */ { 5, s_7_21, 20, 1, 0}, +/* 22 */ { 5, s_7_22, 20, 1, 0}, +/* 23 */ { 3, s_7_23, -1, 1, 0}, +/* 24 */ { 6, s_7_24, -1, 1, 0}, +/* 25 */ { 6, s_7_25, -1, 1, 0}, +/* 26 */ { 3, s_7_26, -1, 1, 0}, +/* 27 */ { 4, s_7_27, -1, 1, 0}, +/* 28 */ { 4, s_7_28, -1, 1, 0}, +/* 29 */ { 4, s_7_29, -1, 1, 0}, +/* 30 */ { 4, s_7_30, -1, 1, 0}, +/* 31 */ { 4, s_7_31, -1, 1, 0}, +/* 32 */ { 4, s_7_32, -1, 1, 0}, +/* 33 */ { 4, s_7_33, -1, 1, 0}, +/* 34 */ { 3, s_7_34, -1, 1, 0}, +/* 35 */ { 3, s_7_35, -1, 1, 0}, +/* 36 */ { 6, s_7_36, -1, 1, 0}, +/* 37 */ { 6, s_7_37, -1, 1, 0}, +/* 38 */ { 3, s_7_38, -1, 1, 0}, +/* 39 */ { 3, s_7_39, -1, 1, 0}, +/* 40 */ { 3, s_7_40, -1, 1, 0}, +/* 41 */ { 3, s_7_41, -1, 1, 0}, +/* 42 */ { 4, s_7_42, -1, 1, 0}, +/* 43 */ { 4, s_7_43, -1, 1, 0}, +/* 44 */ { 4, s_7_44, -1, 1, 0}, +/* 45 */ { 4, s_7_45, -1, 1, 0}, +/* 46 */ { 4, s_7_46, -1, 1, 0}, +/* 47 */ { 5, s_7_47, -1, 1, 0}, +/* 48 */ { 5, s_7_48, -1, 1, 0}, +/* 49 */ { 5, s_7_49, -1, 1, 0}, +/* 50 */ { 5, s_7_50, -1, 1, 0}, +/* 51 */ { 5, s_7_51, -1, 1, 0}, +/* 52 */ { 6, s_7_52, -1, 1, 0}, +/* 53 */ { 4, s_7_53, -1, 1, 0}, +/* 54 */ { 4, s_7_54, -1, 1, 0}, +/* 55 */ { 6, s_7_55, 54, 1, 0}, +/* 56 */ { 6, s_7_56, 54, 1, 0}, +/* 57 */ { 4, s_7_57, -1, 1, 0}, +/* 58 */ { 3, s_7_58, -1, 1, 0}, +/* 59 */ { 6, s_7_59, 58, 1, 0}, +/* 60 */ { 5, s_7_60, 58, 1, 0}, +/* 61 */ { 5, s_7_61, 58, 1, 0}, +/* 62 */ { 5, s_7_62, 58, 1, 0}, +/* 63 */ { 6, s_7_63, -1, 1, 0}, +/* 64 */ { 6, s_7_64, -1, 1, 0}, +/* 65 */ { 3, s_7_65, -1, 1, 0}, +/* 66 */ { 6, s_7_66, 65, 1, 0}, +/* 67 */ { 5, s_7_67, 65, 1, 0}, +/* 68 */ { 5, s_7_68, 65, 1, 0}, +/* 69 */ { 5, s_7_69, 65, 1, 0}, +/* 70 */ { 8, s_7_70, -1, 1, 0}, +/* 71 */ { 8, s_7_71, -1, 1, 0}, +/* 72 */ { 6, s_7_72, -1, 1, 0}, +/* 73 */ { 6, s_7_73, -1, 1, 0}, +/* 74 */ { 6, s_7_74, -1, 1, 0}, +/* 75 */ { 3, s_7_75, -1, 1, 0}, +/* 76 */ { 3, s_7_76, -1, 1, 0}, +/* 77 */ { 3, s_7_77, -1, 1, 0}, +/* 78 */ { 3, s_7_78, -1, 1, 0}, +/* 79 */ { 3, s_7_79, -1, 1, 0}, +/* 80 */ { 3, s_7_80, -1, 1, 0}, +/* 81 */ { 2, s_7_81, -1, 1, 0}, +/* 82 */ { 2, s_7_82, -1, 1, 0}, +/* 83 */ { 3, s_7_83, -1, 1, 0}, +/* 84 */ { 3, s_7_84, -1, 1, 0}, +/* 85 */ { 3, s_7_85, -1, 1, 0}, +/* 86 */ { 3, s_7_86, -1, 1, 0} +}; + +static unsigned char g_v[] = { 17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 8, 2, 1 }; + +static unsigned char g_AEIO[] = { 17, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 8, 2 }; + +static unsigned char g_CG[] = { 17 }; + +static symbol s_0[] = { 0xE0 }; +static symbol s_1[] = { 0xE8 }; +static symbol s_2[] = { 0xEC }; +static symbol s_3[] = { 0xF2 }; +static symbol s_4[] = { 0xF9 }; +static symbol s_5[] = { 'q', 'U' }; +static symbol s_6[] = { 'u' }; +static symbol s_7[] = { 'U' }; +static symbol s_8[] = { 'i' }; +static symbol s_9[] = { 'I' }; +static symbol s_10[] = { 'i' }; +static symbol s_11[] = { 'u' }; +static symbol s_12[] = { 'e' }; +static symbol s_13[] = { 'i', 'c' }; +static symbol s_14[] = { 'l', 'o', 'g' }; +static symbol s_15[] = { 'u' }; +static symbol s_16[] = { 'e', 'n', 't', 'e' }; +static symbol s_17[] = { 'a', 't' }; +static symbol s_18[] = { 'a', 't' }; +static symbol s_19[] = { 'i', 'c' }; +static symbol s_20[] = { 'i' }; +static symbol s_21[] = { 'h' }; + +static int r_prelude(struct SN_env * z) { + int among_var; + { int c_test = z->c; /* test, line 35 */ + while(1) { /* repeat, line 35 */ + int c = z->c; + z->bra = z->c; /* [, line 36 */ + among_var = find_among(z, a_0, 7); /* substring, line 36 */ + if (!(among_var)) goto lab0; + z->ket = z->c; /* ], line 36 */ + switch(among_var) { + case 0: goto lab0; + case 1: + { int ret; + ret = slice_from_s(z, 1, s_0); /* <-, line 37 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 1, s_1); /* <-, line 38 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_from_s(z, 1, s_2); /* <-, line 39 */ + if (ret < 0) return ret; + } + break; + case 4: + { int ret; + ret = slice_from_s(z, 1, s_3); /* <-, line 40 */ + if (ret < 0) return ret; + } + break; + case 5: + { int ret; + ret = slice_from_s(z, 1, s_4); /* <-, line 41 */ + if (ret < 0) return ret; + } + break; + case 6: + { int ret; + ret = slice_from_s(z, 2, s_5); /* <-, line 42 */ + if (ret < 0) return ret; + } + break; + case 7: + if (z->c >= z->l) goto lab0; + z->c++; /* next, line 43 */ + break; + } + continue; + lab0: + z->c = c; + break; + } + z->c = c_test; + } + while(1) { /* repeat, line 46 */ + int c = z->c; + while(1) { /* goto, line 46 */ + int c = z->c; + if (!(in_grouping(z, g_v, 97, 249))) goto lab2; + z->bra = z->c; /* [, line 47 */ + { int c = z->c; /* or, line 47 */ + if (!(eq_s(z, 1, s_6))) goto lab4; + z->ket = z->c; /* ], line 47 */ + if (!(in_grouping(z, g_v, 97, 249))) goto lab4; + { int ret; + ret = slice_from_s(z, 1, s_7); /* <-, line 47 */ + if (ret < 0) return ret; + } + goto lab3; + lab4: + z->c = c; + if (!(eq_s(z, 1, s_8))) goto lab2; + z->ket = z->c; /* ], line 48 */ + if (!(in_grouping(z, g_v, 97, 249))) goto lab2; + { int ret; + ret = slice_from_s(z, 1, s_9); /* <-, line 48 */ + if (ret < 0) return ret; + } + } + lab3: + z->c = c; + break; + lab2: + z->c = c; + if (z->c >= z->l) goto lab1; + z->c++; /* goto, line 46 */ + } + continue; + lab1: + z->c = c; + break; + } + return 1; +} + +static int r_mark_regions(struct SN_env * z) { + z->I[0] = z->l; + z->I[1] = z->l; + z->I[2] = z->l; + { int c = z->c; /* do, line 58 */ + { int c = z->c; /* or, line 60 */ + if (!(in_grouping(z, g_v, 97, 249))) goto lab2; + { int c = z->c; /* or, line 59 */ + if (!(out_grouping(z, g_v, 97, 249))) goto lab4; + while(1) { /* gopast, line 59 */ + if (!(in_grouping(z, g_v, 97, 249))) goto lab5; + break; + lab5: + if (z->c >= z->l) goto lab4; + z->c++; /* gopast, line 59 */ + } + goto lab3; + lab4: + z->c = c; + if (!(in_grouping(z, g_v, 97, 249))) goto lab2; + while(1) { /* gopast, line 59 */ + if (!(out_grouping(z, g_v, 97, 249))) goto lab6; + break; + lab6: + if (z->c >= z->l) goto lab2; + z->c++; /* gopast, line 59 */ + } + } + lab3: + goto lab1; + lab2: + z->c = c; + if (!(out_grouping(z, g_v, 97, 249))) goto lab0; + { int c = z->c; /* or, line 61 */ + if (!(out_grouping(z, g_v, 97, 249))) goto lab8; + while(1) { /* gopast, line 61 */ + if (!(in_grouping(z, g_v, 97, 249))) goto lab9; + break; + lab9: + if (z->c >= z->l) goto lab8; + z->c++; /* gopast, line 61 */ + } + goto lab7; + lab8: + z->c = c; + if (!(in_grouping(z, g_v, 97, 249))) goto lab0; + if (z->c >= z->l) goto lab0; + z->c++; /* next, line 61 */ + } + lab7: + ; + } + lab1: + z->I[0] = z->c; /* setmark pV, line 62 */ + lab0: + z->c = c; + } + { int c = z->c; /* do, line 64 */ + while(1) { /* gopast, line 65 */ + if (!(in_grouping(z, g_v, 97, 249))) goto lab11; + break; + lab11: + if (z->c >= z->l) goto lab10; + z->c++; /* gopast, line 65 */ + } + while(1) { /* gopast, line 65 */ + if (!(out_grouping(z, g_v, 97, 249))) goto lab12; + break; + lab12: + if (z->c >= z->l) goto lab10; + z->c++; /* gopast, line 65 */ + } + z->I[1] = z->c; /* setmark p1, line 65 */ + while(1) { /* gopast, line 66 */ + if (!(in_grouping(z, g_v, 97, 249))) goto lab13; + break; + lab13: + if (z->c >= z->l) goto lab10; + z->c++; /* gopast, line 66 */ + } + while(1) { /* gopast, line 66 */ + if (!(out_grouping(z, g_v, 97, 249))) goto lab14; + break; + lab14: + if (z->c >= z->l) goto lab10; + z->c++; /* gopast, line 66 */ + } + z->I[2] = z->c; /* setmark p2, line 66 */ + lab10: + z->c = c; + } + return 1; +} + +static int r_postlude(struct SN_env * z) { + int among_var; + while(1) { /* repeat, line 70 */ + int c = z->c; + z->bra = z->c; /* [, line 72 */ + among_var = find_among(z, a_1, 3); /* substring, line 72 */ + if (!(among_var)) goto lab0; + z->ket = z->c; /* ], line 72 */ + switch(among_var) { + case 0: goto lab0; + case 1: + { int ret; + ret = slice_from_s(z, 1, s_10); /* <-, line 73 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 1, s_11); /* <-, line 74 */ + if (ret < 0) return ret; + } + break; + case 3: + if (z->c >= z->l) goto lab0; + z->c++; /* next, line 75 */ + break; + } + continue; + lab0: + z->c = c; + break; + } + return 1; +} + +static int r_RV(struct SN_env * z) { + if (!(z->I[0] <= z->c)) return 0; + return 1; +} + +static int r_R1(struct SN_env * z) { + if (!(z->I[1] <= z->c)) return 0; + return 1; +} + +static int r_R2(struct SN_env * z) { + if (!(z->I[2] <= z->c)) return 0; + return 1; +} + +static int r_attached_pronoun(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 87 */ + if (!(find_among_b(z, a_2, 37))) return 0; /* substring, line 87 */ + z->bra = z->c; /* ], line 87 */ + among_var = find_among_b(z, a_3, 5); /* among, line 97 */ + if (!(among_var)) return 0; + { int ret = r_RV(z); + if (ret == 0) return 0; /* call RV, line 97 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 98 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 1, s_12); /* <-, line 99 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_standard_suffix(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 104 */ + among_var = find_among_b(z, a_6, 51); /* substring, line 104 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 104 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 111 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 111 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 113 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 113 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 114 */ + z->ket = z->c; /* [, line 114 */ + if (!(eq_s_b(z, 2, s_13))) { z->c = z->l - m; goto lab0; } + z->bra = z->c; /* ], line 114 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab0; } /* call R2, line 114 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 114 */ + if (ret < 0) return ret; + } + lab0: + ; + } + break; + case 3: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 117 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 3, s_14); /* <-, line 117 */ + if (ret < 0) return ret; + } + break; + case 4: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 119 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 1, s_15); /* <-, line 119 */ + if (ret < 0) return ret; + } + break; + case 5: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 121 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 4, s_16); /* <-, line 121 */ + if (ret < 0) return ret; + } + break; + case 6: + { int ret = r_RV(z); + if (ret == 0) return 0; /* call RV, line 123 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 123 */ + if (ret < 0) return ret; + } + break; + case 7: + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 125 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 125 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 126 */ + z->ket = z->c; /* [, line 127 */ + among_var = find_among_b(z, a_4, 4); /* substring, line 127 */ + if (!(among_var)) { z->c = z->l - m; goto lab1; } + z->bra = z->c; /* ], line 127 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab1; } /* call R2, line 127 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 127 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: { z->c = z->l - m; goto lab1; } + case 1: + z->ket = z->c; /* [, line 128 */ + if (!(eq_s_b(z, 2, s_17))) { z->c = z->l - m; goto lab1; } + z->bra = z->c; /* ], line 128 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab1; } /* call R2, line 128 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 128 */ + if (ret < 0) return ret; + } + break; + } + lab1: + ; + } + break; + case 8: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 134 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 134 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 135 */ + z->ket = z->c; /* [, line 136 */ + among_var = find_among_b(z, a_5, 3); /* substring, line 136 */ + if (!(among_var)) { z->c = z->l - m; goto lab2; } + z->bra = z->c; /* ], line 136 */ + switch(among_var) { + case 0: { z->c = z->l - m; goto lab2; } + case 1: + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab2; } /* call R2, line 137 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 137 */ + if (ret < 0) return ret; + } + break; + } + lab2: + ; + } + break; + case 9: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 142 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 142 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 143 */ + z->ket = z->c; /* [, line 143 */ + if (!(eq_s_b(z, 2, s_18))) { z->c = z->l - m; goto lab3; } + z->bra = z->c; /* ], line 143 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab3; } /* call R2, line 143 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 143 */ + if (ret < 0) return ret; + } + z->ket = z->c; /* [, line 143 */ + if (!(eq_s_b(z, 2, s_19))) { z->c = z->l - m; goto lab3; } + z->bra = z->c; /* ], line 143 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab3; } /* call R2, line 143 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 143 */ + if (ret < 0) return ret; + } + lab3: + ; + } + break; + } + return 1; +} + +static int r_verb_suffix(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 148 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 148 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 149 */ + among_var = find_among_b(z, a_7, 87); /* substring, line 149 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 149 */ + switch(among_var) { + case 0: { z->lb = m3; return 0; } + case 1: + { int ret; + ret = slice_del(z); /* delete, line 163 */ + if (ret < 0) return ret; + } + break; + } + z->lb = m3; + } + return 1; +} + +static int r_vowel_suffix(struct SN_env * z) { + { int m = z->l - z->c; (void) m; /* try, line 171 */ + z->ket = z->c; /* [, line 172 */ + if (!(in_grouping_b(z, g_AEIO, 97, 242))) { z->c = z->l - m; goto lab0; } + z->bra = z->c; /* ], line 172 */ + { int ret = r_RV(z); + if (ret == 0) { z->c = z->l - m; goto lab0; } /* call RV, line 172 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 172 */ + if (ret < 0) return ret; + } + z->ket = z->c; /* [, line 173 */ + if (!(eq_s_b(z, 1, s_20))) { z->c = z->l - m; goto lab0; } + z->bra = z->c; /* ], line 173 */ + { int ret = r_RV(z); + if (ret == 0) { z->c = z->l - m; goto lab0; } /* call RV, line 173 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 173 */ + if (ret < 0) return ret; + } + lab0: + ; + } + { int m = z->l - z->c; (void) m; /* try, line 175 */ + z->ket = z->c; /* [, line 176 */ + if (!(eq_s_b(z, 1, s_21))) { z->c = z->l - m; goto lab1; } + z->bra = z->c; /* ], line 176 */ + if (!(in_grouping_b(z, g_CG, 99, 103))) { z->c = z->l - m; goto lab1; } + { int ret = r_RV(z); + if (ret == 0) { z->c = z->l - m; goto lab1; } /* call RV, line 176 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 176 */ + if (ret < 0) return ret; + } + lab1: + ; + } + return 1; +} + +extern int italian_ISO_8859_1_stem(struct SN_env * z) { + { int c = z->c; /* do, line 182 */ + { int ret = r_prelude(z); + if (ret == 0) goto lab0; /* call prelude, line 182 */ + if (ret < 0) return ret; + } + lab0: + z->c = c; + } + { int c = z->c; /* do, line 183 */ + { int ret = r_mark_regions(z); + if (ret == 0) goto lab1; /* call mark_regions, line 183 */ + if (ret < 0) return ret; + } + lab1: + z->c = c; + } + z->lb = z->c; z->c = z->l; /* backwards, line 184 */ + + { int m = z->l - z->c; (void) m; /* do, line 185 */ + { int ret = r_attached_pronoun(z); + if (ret == 0) goto lab2; /* call attached_pronoun, line 185 */ + if (ret < 0) return ret; + } + lab2: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 186 */ + { int m = z->l - z->c; (void) m; /* or, line 186 */ + { int ret = r_standard_suffix(z); + if (ret == 0) goto lab5; /* call standard_suffix, line 186 */ + if (ret < 0) return ret; + } + goto lab4; + lab5: + z->c = z->l - m; + { int ret = r_verb_suffix(z); + if (ret == 0) goto lab3; /* call verb_suffix, line 186 */ + if (ret < 0) return ret; + } + } + lab4: + lab3: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 187 */ + { int ret = r_vowel_suffix(z); + if (ret == 0) goto lab6; /* call vowel_suffix, line 187 */ + if (ret < 0) return ret; + } + lab6: + z->c = z->l - m; + } + z->c = z->lb; + { int c = z->c; /* do, line 189 */ + { int ret = r_postlude(z); + if (ret == 0) goto lab7; /* call postlude, line 189 */ + if (ret < 0) return ret; + } + lab7: + z->c = c; + } + return 1; +} + +extern struct SN_env * italian_ISO_8859_1_create_env(void) { return SN_create_env(0, 3, 0); } + +extern void italian_ISO_8859_1_close_env(struct SN_env * z) { SN_close_env(z); } + diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_italian.h b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_italian.h new file mode 100644 index 0000000..dccbfd5 --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_italian.h @@ -0,0 +1,16 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern struct SN_env * italian_ISO_8859_1_create_env(void); +extern void italian_ISO_8859_1_close_env(struct SN_env * z); + +extern int italian_ISO_8859_1_stem(struct SN_env * z); + +#ifdef __cplusplus +} +#endif + diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_norwegian.c b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_norwegian.c new file mode 100644 index 0000000..c28e2f0 --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_norwegian.c @@ -0,0 +1,296 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#include "../runtime/header.h" + +extern int norwegian_ISO_8859_1_stem(struct SN_env * z); +static int r_other_suffix(struct SN_env * z); +static int r_consonant_pair(struct SN_env * z); +static int r_main_suffix(struct SN_env * z); +static int r_mark_regions(struct SN_env * z); + +extern struct SN_env * norwegian_ISO_8859_1_create_env(void); +extern void norwegian_ISO_8859_1_close_env(struct SN_env * z); + +static symbol s_0_0[1] = { 'a' }; +static symbol s_0_1[1] = { 'e' }; +static symbol s_0_2[3] = { 'e', 'd', 'e' }; +static symbol s_0_3[4] = { 'a', 'n', 'd', 'e' }; +static symbol s_0_4[4] = { 'e', 'n', 'd', 'e' }; +static symbol s_0_5[3] = { 'a', 'n', 'e' }; +static symbol s_0_6[3] = { 'e', 'n', 'e' }; +static symbol s_0_7[6] = { 'h', 'e', 't', 'e', 'n', 'e' }; +static symbol s_0_8[4] = { 'e', 'r', 't', 'e' }; +static symbol s_0_9[2] = { 'e', 'n' }; +static symbol s_0_10[5] = { 'h', 'e', 't', 'e', 'n' }; +static symbol s_0_11[2] = { 'a', 'r' }; +static symbol s_0_12[2] = { 'e', 'r' }; +static symbol s_0_13[5] = { 'h', 'e', 't', 'e', 'r' }; +static symbol s_0_14[1] = { 's' }; +static symbol s_0_15[2] = { 'a', 's' }; +static symbol s_0_16[2] = { 'e', 's' }; +static symbol s_0_17[4] = { 'e', 'd', 'e', 's' }; +static symbol s_0_18[5] = { 'e', 'n', 'd', 'e', 's' }; +static symbol s_0_19[4] = { 'e', 'n', 'e', 's' }; +static symbol s_0_20[7] = { 'h', 'e', 't', 'e', 'n', 'e', 's' }; +static symbol s_0_21[3] = { 'e', 'n', 's' }; +static symbol s_0_22[6] = { 'h', 'e', 't', 'e', 'n', 's' }; +static symbol s_0_23[3] = { 'e', 'r', 's' }; +static symbol s_0_24[3] = { 'e', 't', 's' }; +static symbol s_0_25[2] = { 'e', 't' }; +static symbol s_0_26[3] = { 'h', 'e', 't' }; +static symbol s_0_27[3] = { 'e', 'r', 't' }; +static symbol s_0_28[3] = { 'a', 's', 't' }; + +static struct among a_0[29] = +{ +/* 0 */ { 1, s_0_0, -1, 1, 0}, +/* 1 */ { 1, s_0_1, -1, 1, 0}, +/* 2 */ { 3, s_0_2, 1, 1, 0}, +/* 3 */ { 4, s_0_3, 1, 1, 0}, +/* 4 */ { 4, s_0_4, 1, 1, 0}, +/* 5 */ { 3, s_0_5, 1, 1, 0}, +/* 6 */ { 3, s_0_6, 1, 1, 0}, +/* 7 */ { 6, s_0_7, 6, 1, 0}, +/* 8 */ { 4, s_0_8, 1, 3, 0}, +/* 9 */ { 2, s_0_9, -1, 1, 0}, +/* 10 */ { 5, s_0_10, 9, 1, 0}, +/* 11 */ { 2, s_0_11, -1, 1, 0}, +/* 12 */ { 2, s_0_12, -1, 1, 0}, +/* 13 */ { 5, s_0_13, 12, 1, 0}, +/* 14 */ { 1, s_0_14, -1, 2, 0}, +/* 15 */ { 2, s_0_15, 14, 1, 0}, +/* 16 */ { 2, s_0_16, 14, 1, 0}, +/* 17 */ { 4, s_0_17, 16, 1, 0}, +/* 18 */ { 5, s_0_18, 16, 1, 0}, +/* 19 */ { 4, s_0_19, 16, 1, 0}, +/* 20 */ { 7, s_0_20, 19, 1, 0}, +/* 21 */ { 3, s_0_21, 14, 1, 0}, +/* 22 */ { 6, s_0_22, 21, 1, 0}, +/* 23 */ { 3, s_0_23, 14, 1, 0}, +/* 24 */ { 3, s_0_24, 14, 1, 0}, +/* 25 */ { 2, s_0_25, -1, 1, 0}, +/* 26 */ { 3, s_0_26, 25, 1, 0}, +/* 27 */ { 3, s_0_27, -1, 3, 0}, +/* 28 */ { 3, s_0_28, -1, 1, 0} +}; + +static symbol s_1_0[2] = { 'd', 't' }; +static symbol s_1_1[2] = { 'v', 't' }; + +static struct among a_1[2] = +{ +/* 0 */ { 2, s_1_0, -1, -1, 0}, +/* 1 */ { 2, s_1_1, -1, -1, 0} +}; + +static symbol s_2_0[3] = { 'l', 'e', 'g' }; +static symbol s_2_1[4] = { 'e', 'l', 'e', 'g' }; +static symbol s_2_2[2] = { 'i', 'g' }; +static symbol s_2_3[3] = { 'e', 'i', 'g' }; +static symbol s_2_4[3] = { 'l', 'i', 'g' }; +static symbol s_2_5[4] = { 'e', 'l', 'i', 'g' }; +static symbol s_2_6[3] = { 'e', 'l', 's' }; +static symbol s_2_7[3] = { 'l', 'o', 'v' }; +static symbol s_2_8[4] = { 'e', 'l', 'o', 'v' }; +static symbol s_2_9[4] = { 's', 'l', 'o', 'v' }; +static symbol s_2_10[7] = { 'h', 'e', 't', 's', 'l', 'o', 'v' }; + +static struct among a_2[11] = +{ +/* 0 */ { 3, s_2_0, -1, 1, 0}, +/* 1 */ { 4, s_2_1, 0, 1, 0}, +/* 2 */ { 2, s_2_2, -1, 1, 0}, +/* 3 */ { 3, s_2_3, 2, 1, 0}, +/* 4 */ { 3, s_2_4, 2, 1, 0}, +/* 5 */ { 4, s_2_5, 4, 1, 0}, +/* 6 */ { 3, s_2_6, -1, 1, 0}, +/* 7 */ { 3, s_2_7, -1, 1, 0}, +/* 8 */ { 4, s_2_8, 7, 1, 0}, +/* 9 */ { 4, s_2_9, 7, 1, 0}, +/* 10 */ { 7, s_2_10, 9, 1, 0} +}; + +static unsigned char g_v[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 128 }; + +static unsigned char g_s_ending[] = { 119, 125, 149, 1 }; + +static symbol s_0[] = { 'k' }; +static symbol s_1[] = { 'e', 'r' }; + +static int r_mark_regions(struct SN_env * z) { + z->I[0] = z->l; + { int c_test = z->c; /* test, line 30 */ + { int c = z->c + 3; + if (0 > c || c > z->l) return 0; + z->c = c; /* hop, line 30 */ + } + z->I[1] = z->c; /* setmark x, line 30 */ + z->c = c_test; + } + while(1) { /* goto, line 31 */ + int c = z->c; + if (!(in_grouping(z, g_v, 97, 248))) goto lab0; + z->c = c; + break; + lab0: + z->c = c; + if (z->c >= z->l) return 0; + z->c++; /* goto, line 31 */ + } + while(1) { /* gopast, line 31 */ + if (!(out_grouping(z, g_v, 97, 248))) goto lab1; + break; + lab1: + if (z->c >= z->l) return 0; + z->c++; /* gopast, line 31 */ + } + z->I[0] = z->c; /* setmark p1, line 31 */ + /* try, line 32 */ + if (!(z->I[0] < z->I[1])) goto lab2; + z->I[0] = z->I[1]; +lab2: + return 1; +} + +static int r_main_suffix(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 38 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 38 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 38 */ + among_var = find_among_b(z, a_0, 29); /* substring, line 38 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 38 */ + z->lb = m3; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 44 */ + if (ret < 0) return ret; + } + break; + case 2: + { int m = z->l - z->c; (void) m; /* or, line 46 */ + if (!(in_grouping_b(z, g_s_ending, 98, 122))) goto lab1; + goto lab0; + lab1: + z->c = z->l - m; + if (!(eq_s_b(z, 1, s_0))) return 0; + if (!(out_grouping_b(z, g_v, 97, 248))) return 0; + } + lab0: + { int ret; + ret = slice_del(z); /* delete, line 46 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_from_s(z, 2, s_1); /* <-, line 48 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_consonant_pair(struct SN_env * z) { + { int m_test = z->l - z->c; /* test, line 53 */ + { int m3; /* setlimit, line 54 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 54 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 54 */ + if (!(find_among_b(z, a_1, 2))) { z->lb = m3; return 0; } /* substring, line 54 */ + z->bra = z->c; /* ], line 54 */ + z->lb = m3; + } + z->c = z->l - m_test; + } + if (z->c <= z->lb) return 0; + z->c--; /* next, line 59 */ + z->bra = z->c; /* ], line 59 */ + { int ret; + ret = slice_del(z); /* delete, line 59 */ + if (ret < 0) return ret; + } + return 1; +} + +static int r_other_suffix(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 63 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 63 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 63 */ + among_var = find_among_b(z, a_2, 11); /* substring, line 63 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 63 */ + z->lb = m3; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 67 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +extern int norwegian_ISO_8859_1_stem(struct SN_env * z) { + { int c = z->c; /* do, line 74 */ + { int ret = r_mark_regions(z); + if (ret == 0) goto lab0; /* call mark_regions, line 74 */ + if (ret < 0) return ret; + } + lab0: + z->c = c; + } + z->lb = z->c; z->c = z->l; /* backwards, line 75 */ + + { int m = z->l - z->c; (void) m; /* do, line 76 */ + { int ret = r_main_suffix(z); + if (ret == 0) goto lab1; /* call main_suffix, line 76 */ + if (ret < 0) return ret; + } + lab1: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 77 */ + { int ret = r_consonant_pair(z); + if (ret == 0) goto lab2; /* call consonant_pair, line 77 */ + if (ret < 0) return ret; + } + lab2: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 78 */ + { int ret = r_other_suffix(z); + if (ret == 0) goto lab3; /* call other_suffix, line 78 */ + if (ret < 0) return ret; + } + lab3: + z->c = z->l - m; + } + z->c = z->lb; + return 1; +} + +extern struct SN_env * norwegian_ISO_8859_1_create_env(void) { return SN_create_env(0, 2, 0); } + +extern void norwegian_ISO_8859_1_close_env(struct SN_env * z) { SN_close_env(z); } + diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_norwegian.h b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_norwegian.h new file mode 100644 index 0000000..e09e34e --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_norwegian.h @@ -0,0 +1,16 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern struct SN_env * norwegian_ISO_8859_1_create_env(void); +extern void norwegian_ISO_8859_1_close_env(struct SN_env * z); + +extern int norwegian_ISO_8859_1_stem(struct SN_env * z); + +#ifdef __cplusplus +} +#endif + diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_porter.c b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_porter.c new file mode 100644 index 0000000..b2c6ad0 --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_porter.c @@ -0,0 +1,776 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#include "../runtime/header.h" + +extern int porter_ISO_8859_1_stem(struct SN_env * z); +static int r_Step_5b(struct SN_env * z); +static int r_Step_5a(struct SN_env * z); +static int r_Step_4(struct SN_env * z); +static int r_Step_3(struct SN_env * z); +static int r_Step_2(struct SN_env * z); +static int r_Step_1c(struct SN_env * z); +static int r_Step_1b(struct SN_env * z); +static int r_Step_1a(struct SN_env * z); +static int r_R2(struct SN_env * z); +static int r_R1(struct SN_env * z); +static int r_shortv(struct SN_env * z); + +extern struct SN_env * porter_ISO_8859_1_create_env(void); +extern void porter_ISO_8859_1_close_env(struct SN_env * z); + +static symbol s_0_0[1] = { 's' }; +static symbol s_0_1[3] = { 'i', 'e', 's' }; +static symbol s_0_2[4] = { 's', 's', 'e', 's' }; +static symbol s_0_3[2] = { 's', 's' }; + +static struct among a_0[4] = +{ +/* 0 */ { 1, s_0_0, -1, 3, 0}, +/* 1 */ { 3, s_0_1, 0, 2, 0}, +/* 2 */ { 4, s_0_2, 0, 1, 0}, +/* 3 */ { 2, s_0_3, 0, -1, 0} +}; + +static symbol s_1_1[2] = { 'b', 'b' }; +static symbol s_1_2[2] = { 'd', 'd' }; +static symbol s_1_3[2] = { 'f', 'f' }; +static symbol s_1_4[2] = { 'g', 'g' }; +static symbol s_1_5[2] = { 'b', 'l' }; +static symbol s_1_6[2] = { 'm', 'm' }; +static symbol s_1_7[2] = { 'n', 'n' }; +static symbol s_1_8[2] = { 'p', 'p' }; +static symbol s_1_9[2] = { 'r', 'r' }; +static symbol s_1_10[2] = { 'a', 't' }; +static symbol s_1_11[2] = { 't', 't' }; +static symbol s_1_12[2] = { 'i', 'z' }; + +static struct among a_1[13] = +{ +/* 0 */ { 0, 0, -1, 3, 0}, +/* 1 */ { 2, s_1_1, 0, 2, 0}, +/* 2 */ { 2, s_1_2, 0, 2, 0}, +/* 3 */ { 2, s_1_3, 0, 2, 0}, +/* 4 */ { 2, s_1_4, 0, 2, 0}, +/* 5 */ { 2, s_1_5, 0, 1, 0}, +/* 6 */ { 2, s_1_6, 0, 2, 0}, +/* 7 */ { 2, s_1_7, 0, 2, 0}, +/* 8 */ { 2, s_1_8, 0, 2, 0}, +/* 9 */ { 2, s_1_9, 0, 2, 0}, +/* 10 */ { 2, s_1_10, 0, 1, 0}, +/* 11 */ { 2, s_1_11, 0, 2, 0}, +/* 12 */ { 2, s_1_12, 0, 1, 0} +}; + +static symbol s_2_0[2] = { 'e', 'd' }; +static symbol s_2_1[3] = { 'e', 'e', 'd' }; +static symbol s_2_2[3] = { 'i', 'n', 'g' }; + +static struct among a_2[3] = +{ +/* 0 */ { 2, s_2_0, -1, 2, 0}, +/* 1 */ { 3, s_2_1, 0, 1, 0}, +/* 2 */ { 3, s_2_2, -1, 2, 0} +}; + +static symbol s_3_0[4] = { 'a', 'n', 'c', 'i' }; +static symbol s_3_1[4] = { 'e', 'n', 'c', 'i' }; +static symbol s_3_2[4] = { 'a', 'b', 'l', 'i' }; +static symbol s_3_3[3] = { 'e', 'l', 'i' }; +static symbol s_3_4[4] = { 'a', 'l', 'l', 'i' }; +static symbol s_3_5[5] = { 'o', 'u', 's', 'l', 'i' }; +static symbol s_3_6[5] = { 'e', 'n', 't', 'l', 'i' }; +static symbol s_3_7[5] = { 'a', 'l', 'i', 't', 'i' }; +static symbol s_3_8[6] = { 'b', 'i', 'l', 'i', 't', 'i' }; +static symbol s_3_9[5] = { 'i', 'v', 'i', 't', 'i' }; +static symbol s_3_10[6] = { 't', 'i', 'o', 'n', 'a', 'l' }; +static symbol s_3_11[7] = { 'a', 't', 'i', 'o', 'n', 'a', 'l' }; +static symbol s_3_12[5] = { 'a', 'l', 'i', 's', 'm' }; +static symbol s_3_13[5] = { 'a', 't', 'i', 'o', 'n' }; +static symbol s_3_14[7] = { 'i', 'z', 'a', 't', 'i', 'o', 'n' }; +static symbol s_3_15[4] = { 'i', 'z', 'e', 'r' }; +static symbol s_3_16[4] = { 'a', 't', 'o', 'r' }; +static symbol s_3_17[7] = { 'i', 'v', 'e', 'n', 'e', 's', 's' }; +static symbol s_3_18[7] = { 'f', 'u', 'l', 'n', 'e', 's', 's' }; +static symbol s_3_19[7] = { 'o', 'u', 's', 'n', 'e', 's', 's' }; + +static struct among a_3[20] = +{ +/* 0 */ { 4, s_3_0, -1, 3, 0}, +/* 1 */ { 4, s_3_1, -1, 2, 0}, +/* 2 */ { 4, s_3_2, -1, 4, 0}, +/* 3 */ { 3, s_3_3, -1, 6, 0}, +/* 4 */ { 4, s_3_4, -1, 9, 0}, +/* 5 */ { 5, s_3_5, -1, 12, 0}, +/* 6 */ { 5, s_3_6, -1, 5, 0}, +/* 7 */ { 5, s_3_7, -1, 10, 0}, +/* 8 */ { 6, s_3_8, -1, 14, 0}, +/* 9 */ { 5, s_3_9, -1, 13, 0}, +/* 10 */ { 6, s_3_10, -1, 1, 0}, +/* 11 */ { 7, s_3_11, 10, 8, 0}, +/* 12 */ { 5, s_3_12, -1, 10, 0}, +/* 13 */ { 5, s_3_13, -1, 8, 0}, +/* 14 */ { 7, s_3_14, 13, 7, 0}, +/* 15 */ { 4, s_3_15, -1, 7, 0}, +/* 16 */ { 4, s_3_16, -1, 8, 0}, +/* 17 */ { 7, s_3_17, -1, 13, 0}, +/* 18 */ { 7, s_3_18, -1, 11, 0}, +/* 19 */ { 7, s_3_19, -1, 12, 0} +}; + +static symbol s_4_0[5] = { 'i', 'c', 'a', 't', 'e' }; +static symbol s_4_1[5] = { 'a', 't', 'i', 'v', 'e' }; +static symbol s_4_2[5] = { 'a', 'l', 'i', 'z', 'e' }; +static symbol s_4_3[5] = { 'i', 'c', 'i', 't', 'i' }; +static symbol s_4_4[4] = { 'i', 'c', 'a', 'l' }; +static symbol s_4_5[3] = { 'f', 'u', 'l' }; +static symbol s_4_6[4] = { 'n', 'e', 's', 's' }; + +static struct among a_4[7] = +{ +/* 0 */ { 5, s_4_0, -1, 2, 0}, +/* 1 */ { 5, s_4_1, -1, 3, 0}, +/* 2 */ { 5, s_4_2, -1, 1, 0}, +/* 3 */ { 5, s_4_3, -1, 2, 0}, +/* 4 */ { 4, s_4_4, -1, 2, 0}, +/* 5 */ { 3, s_4_5, -1, 3, 0}, +/* 6 */ { 4, s_4_6, -1, 3, 0} +}; + +static symbol s_5_0[2] = { 'i', 'c' }; +static symbol s_5_1[4] = { 'a', 'n', 'c', 'e' }; +static symbol s_5_2[4] = { 'e', 'n', 'c', 'e' }; +static symbol s_5_3[4] = { 'a', 'b', 'l', 'e' }; +static symbol s_5_4[4] = { 'i', 'b', 'l', 'e' }; +static symbol s_5_5[3] = { 'a', 't', 'e' }; +static symbol s_5_6[3] = { 'i', 'v', 'e' }; +static symbol s_5_7[3] = { 'i', 'z', 'e' }; +static symbol s_5_8[3] = { 'i', 't', 'i' }; +static symbol s_5_9[2] = { 'a', 'l' }; +static symbol s_5_10[3] = { 'i', 's', 'm' }; +static symbol s_5_11[3] = { 'i', 'o', 'n' }; +static symbol s_5_12[2] = { 'e', 'r' }; +static symbol s_5_13[3] = { 'o', 'u', 's' }; +static symbol s_5_14[3] = { 'a', 'n', 't' }; +static symbol s_5_15[3] = { 'e', 'n', 't' }; +static symbol s_5_16[4] = { 'm', 'e', 'n', 't' }; +static symbol s_5_17[5] = { 'e', 'm', 'e', 'n', 't' }; +static symbol s_5_18[2] = { 'o', 'u' }; + +static struct among a_5[19] = +{ +/* 0 */ { 2, s_5_0, -1, 1, 0}, +/* 1 */ { 4, s_5_1, -1, 1, 0}, +/* 2 */ { 4, s_5_2, -1, 1, 0}, +/* 3 */ { 4, s_5_3, -1, 1, 0}, +/* 4 */ { 4, s_5_4, -1, 1, 0}, +/* 5 */ { 3, s_5_5, -1, 1, 0}, +/* 6 */ { 3, s_5_6, -1, 1, 0}, +/* 7 */ { 3, s_5_7, -1, 1, 0}, +/* 8 */ { 3, s_5_8, -1, 1, 0}, +/* 9 */ { 2, s_5_9, -1, 1, 0}, +/* 10 */ { 3, s_5_10, -1, 1, 0}, +/* 11 */ { 3, s_5_11, -1, 2, 0}, +/* 12 */ { 2, s_5_12, -1, 1, 0}, +/* 13 */ { 3, s_5_13, -1, 1, 0}, +/* 14 */ { 3, s_5_14, -1, 1, 0}, +/* 15 */ { 3, s_5_15, -1, 1, 0}, +/* 16 */ { 4, s_5_16, 15, 1, 0}, +/* 17 */ { 5, s_5_17, 16, 1, 0}, +/* 18 */ { 2, s_5_18, -1, 1, 0} +}; + +static unsigned char g_v[] = { 17, 65, 16, 1 }; + +static unsigned char g_v_WXY[] = { 1, 17, 65, 208, 1 }; + +static symbol s_0[] = { 's', 's' }; +static symbol s_1[] = { 'i' }; +static symbol s_2[] = { 'e', 'e' }; +static symbol s_3[] = { 'e' }; +static symbol s_4[] = { 'e' }; +static symbol s_5[] = { 'y' }; +static symbol s_6[] = { 'Y' }; +static symbol s_7[] = { 'i' }; +static symbol s_8[] = { 't', 'i', 'o', 'n' }; +static symbol s_9[] = { 'e', 'n', 'c', 'e' }; +static symbol s_10[] = { 'a', 'n', 'c', 'e' }; +static symbol s_11[] = { 'a', 'b', 'l', 'e' }; +static symbol s_12[] = { 'e', 'n', 't' }; +static symbol s_13[] = { 'e' }; +static symbol s_14[] = { 'i', 'z', 'e' }; +static symbol s_15[] = { 'a', 't', 'e' }; +static symbol s_16[] = { 'a', 'l' }; +static symbol s_17[] = { 'a', 'l' }; +static symbol s_18[] = { 'f', 'u', 'l' }; +static symbol s_19[] = { 'o', 'u', 's' }; +static symbol s_20[] = { 'i', 'v', 'e' }; +static symbol s_21[] = { 'b', 'l', 'e' }; +static symbol s_22[] = { 'a', 'l' }; +static symbol s_23[] = { 'i', 'c' }; +static symbol s_24[] = { 's' }; +static symbol s_25[] = { 't' }; +static symbol s_26[] = { 'e' }; +static symbol s_27[] = { 'l' }; +static symbol s_28[] = { 'l' }; +static symbol s_29[] = { 'y' }; +static symbol s_30[] = { 'Y' }; +static symbol s_31[] = { 'y' }; +static symbol s_32[] = { 'Y' }; +static symbol s_33[] = { 'Y' }; +static symbol s_34[] = { 'y' }; + +static int r_shortv(struct SN_env * z) { + if (!(out_grouping_b(z, g_v_WXY, 89, 121))) return 0; + if (!(in_grouping_b(z, g_v, 97, 121))) return 0; + if (!(out_grouping_b(z, g_v, 97, 121))) return 0; + return 1; +} + +static int r_R1(struct SN_env * z) { + if (!(z->I[0] <= z->c)) return 0; + return 1; +} + +static int r_R2(struct SN_env * z) { + if (!(z->I[1] <= z->c)) return 0; + return 1; +} + +static int r_Step_1a(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 25 */ + among_var = find_among_b(z, a_0, 4); /* substring, line 25 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 25 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_from_s(z, 2, s_0); /* <-, line 26 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 1, s_1); /* <-, line 27 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_del(z); /* delete, line 29 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_Step_1b(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 34 */ + among_var = find_among_b(z, a_2, 3); /* substring, line 34 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 34 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 35 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 2, s_2); /* <-, line 35 */ + if (ret < 0) return ret; + } + break; + case 2: + { int m_test = z->l - z->c; /* test, line 38 */ + while(1) { /* gopast, line 38 */ + if (!(in_grouping_b(z, g_v, 97, 121))) goto lab0; + break; + lab0: + if (z->c <= z->lb) return 0; + z->c--; /* gopast, line 38 */ + } + z->c = z->l - m_test; + } + { int ret; + ret = slice_del(z); /* delete, line 38 */ + if (ret < 0) return ret; + } + { int m_test = z->l - z->c; /* test, line 39 */ + among_var = find_among_b(z, a_1, 13); /* substring, line 39 */ + if (!(among_var)) return 0; + z->c = z->l - m_test; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + { int c = z->c; + ret = insert_s(z, z->c, z->c, 1, s_3); /* <+, line 41 */ + z->c = c; + } + if (ret < 0) return ret; + } + break; + case 2: + z->ket = z->c; /* [, line 44 */ + if (z->c <= z->lb) return 0; + z->c--; /* next, line 44 */ + z->bra = z->c; /* ], line 44 */ + { int ret; + ret = slice_del(z); /* delete, line 44 */ + if (ret < 0) return ret; + } + break; + case 3: + if (z->c != z->I[0]) return 0; /* atmark, line 45 */ + { int m_test = z->l - z->c; /* test, line 45 */ + { int ret = r_shortv(z); + if (ret == 0) return 0; /* call shortv, line 45 */ + if (ret < 0) return ret; + } + z->c = z->l - m_test; + } + { int ret; + { int c = z->c; + ret = insert_s(z, z->c, z->c, 1, s_4); /* <+, line 45 */ + z->c = c; + } + if (ret < 0) return ret; + } + break; + } + break; + } + return 1; +} + +static int r_Step_1c(struct SN_env * z) { + z->ket = z->c; /* [, line 52 */ + { int m = z->l - z->c; (void) m; /* or, line 52 */ + if (!(eq_s_b(z, 1, s_5))) goto lab1; + goto lab0; + lab1: + z->c = z->l - m; + if (!(eq_s_b(z, 1, s_6))) return 0; + } +lab0: + z->bra = z->c; /* ], line 52 */ + while(1) { /* gopast, line 53 */ + if (!(in_grouping_b(z, g_v, 97, 121))) goto lab2; + break; + lab2: + if (z->c <= z->lb) return 0; + z->c--; /* gopast, line 53 */ + } + { int ret; + ret = slice_from_s(z, 1, s_7); /* <-, line 54 */ + if (ret < 0) return ret; + } + return 1; +} + +static int r_Step_2(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 58 */ + among_var = find_among_b(z, a_3, 20); /* substring, line 58 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 58 */ + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 58 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_from_s(z, 4, s_8); /* <-, line 59 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 4, s_9); /* <-, line 60 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_from_s(z, 4, s_10); /* <-, line 61 */ + if (ret < 0) return ret; + } + break; + case 4: + { int ret; + ret = slice_from_s(z, 4, s_11); /* <-, line 62 */ + if (ret < 0) return ret; + } + break; + case 5: + { int ret; + ret = slice_from_s(z, 3, s_12); /* <-, line 63 */ + if (ret < 0) return ret; + } + break; + case 6: + { int ret; + ret = slice_from_s(z, 1, s_13); /* <-, line 64 */ + if (ret < 0) return ret; + } + break; + case 7: + { int ret; + ret = slice_from_s(z, 3, s_14); /* <-, line 66 */ + if (ret < 0) return ret; + } + break; + case 8: + { int ret; + ret = slice_from_s(z, 3, s_15); /* <-, line 68 */ + if (ret < 0) return ret; + } + break; + case 9: + { int ret; + ret = slice_from_s(z, 2, s_16); /* <-, line 69 */ + if (ret < 0) return ret; + } + break; + case 10: + { int ret; + ret = slice_from_s(z, 2, s_17); /* <-, line 71 */ + if (ret < 0) return ret; + } + break; + case 11: + { int ret; + ret = slice_from_s(z, 3, s_18); /* <-, line 72 */ + if (ret < 0) return ret; + } + break; + case 12: + { int ret; + ret = slice_from_s(z, 3, s_19); /* <-, line 74 */ + if (ret < 0) return ret; + } + break; + case 13: + { int ret; + ret = slice_from_s(z, 3, s_20); /* <-, line 76 */ + if (ret < 0) return ret; + } + break; + case 14: + { int ret; + ret = slice_from_s(z, 3, s_21); /* <-, line 77 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_Step_3(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 82 */ + among_var = find_among_b(z, a_4, 7); /* substring, line 82 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 82 */ + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 82 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_from_s(z, 2, s_22); /* <-, line 83 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 2, s_23); /* <-, line 85 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_del(z); /* delete, line 87 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_Step_4(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 92 */ + among_var = find_among_b(z, a_5, 19); /* substring, line 92 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 92 */ + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 92 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 95 */ + if (ret < 0) return ret; + } + break; + case 2: + { int m = z->l - z->c; (void) m; /* or, line 96 */ + if (!(eq_s_b(z, 1, s_24))) goto lab1; + goto lab0; + lab1: + z->c = z->l - m; + if (!(eq_s_b(z, 1, s_25))) return 0; + } + lab0: + { int ret; + ret = slice_del(z); /* delete, line 96 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_Step_5a(struct SN_env * z) { + z->ket = z->c; /* [, line 101 */ + if (!(eq_s_b(z, 1, s_26))) return 0; + z->bra = z->c; /* ], line 101 */ + { int m = z->l - z->c; (void) m; /* or, line 102 */ + { int ret = r_R2(z); + if (ret == 0) goto lab1; /* call R2, line 102 */ + if (ret < 0) return ret; + } + goto lab0; + lab1: + z->c = z->l - m; + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 102 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* not, line 102 */ + { int ret = r_shortv(z); + if (ret == 0) goto lab2; /* call shortv, line 102 */ + if (ret < 0) return ret; + } + return 0; + lab2: + z->c = z->l - m; + } + } +lab0: + { int ret; + ret = slice_del(z); /* delete, line 103 */ + if (ret < 0) return ret; + } + return 1; +} + +static int r_Step_5b(struct SN_env * z) { + z->ket = z->c; /* [, line 107 */ + if (!(eq_s_b(z, 1, s_27))) return 0; + z->bra = z->c; /* ], line 107 */ + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 108 */ + if (ret < 0) return ret; + } + if (!(eq_s_b(z, 1, s_28))) return 0; + { int ret; + ret = slice_del(z); /* delete, line 109 */ + if (ret < 0) return ret; + } + return 1; +} + +extern int porter_ISO_8859_1_stem(struct SN_env * z) { + z->B[0] = 0; /* unset Y_found, line 115 */ + { int c = z->c; /* do, line 116 */ + z->bra = z->c; /* [, line 116 */ + if (!(eq_s(z, 1, s_29))) goto lab0; + z->ket = z->c; /* ], line 116 */ + { int ret; + ret = slice_from_s(z, 1, s_30); /* <-, line 116 */ + if (ret < 0) return ret; + } + z->B[0] = 1; /* set Y_found, line 116 */ + lab0: + z->c = c; + } + { int c = z->c; /* do, line 117 */ + while(1) { /* repeat, line 117 */ + int c = z->c; + while(1) { /* goto, line 117 */ + int c = z->c; + if (!(in_grouping(z, g_v, 97, 121))) goto lab3; + z->bra = z->c; /* [, line 117 */ + if (!(eq_s(z, 1, s_31))) goto lab3; + z->ket = z->c; /* ], line 117 */ + z->c = c; + break; + lab3: + z->c = c; + if (z->c >= z->l) goto lab2; + z->c++; /* goto, line 117 */ + } + { int ret; + ret = slice_from_s(z, 1, s_32); /* <-, line 117 */ + if (ret < 0) return ret; + } + z->B[0] = 1; /* set Y_found, line 117 */ + continue; + lab2: + z->c = c; + break; + } + z->c = c; + } + z->I[0] = z->l; + z->I[1] = z->l; + { int c = z->c; /* do, line 121 */ + while(1) { /* gopast, line 122 */ + if (!(in_grouping(z, g_v, 97, 121))) goto lab5; + break; + lab5: + if (z->c >= z->l) goto lab4; + z->c++; /* gopast, line 122 */ + } + while(1) { /* gopast, line 122 */ + if (!(out_grouping(z, g_v, 97, 121))) goto lab6; + break; + lab6: + if (z->c >= z->l) goto lab4; + z->c++; /* gopast, line 122 */ + } + z->I[0] = z->c; /* setmark p1, line 122 */ + while(1) { /* gopast, line 123 */ + if (!(in_grouping(z, g_v, 97, 121))) goto lab7; + break; + lab7: + if (z->c >= z->l) goto lab4; + z->c++; /* gopast, line 123 */ + } + while(1) { /* gopast, line 123 */ + if (!(out_grouping(z, g_v, 97, 121))) goto lab8; + break; + lab8: + if (z->c >= z->l) goto lab4; + z->c++; /* gopast, line 123 */ + } + z->I[1] = z->c; /* setmark p2, line 123 */ + lab4: + z->c = c; + } + z->lb = z->c; z->c = z->l; /* backwards, line 126 */ + + { int m = z->l - z->c; (void) m; /* do, line 127 */ + { int ret = r_Step_1a(z); + if (ret == 0) goto lab9; /* call Step_1a, line 127 */ + if (ret < 0) return ret; + } + lab9: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 128 */ + { int ret = r_Step_1b(z); + if (ret == 0) goto lab10; /* call Step_1b, line 128 */ + if (ret < 0) return ret; + } + lab10: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 129 */ + { int ret = r_Step_1c(z); + if (ret == 0) goto lab11; /* call Step_1c, line 129 */ + if (ret < 0) return ret; + } + lab11: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 130 */ + { int ret = r_Step_2(z); + if (ret == 0) goto lab12; /* call Step_2, line 130 */ + if (ret < 0) return ret; + } + lab12: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 131 */ + { int ret = r_Step_3(z); + if (ret == 0) goto lab13; /* call Step_3, line 131 */ + if (ret < 0) return ret; + } + lab13: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 132 */ + { int ret = r_Step_4(z); + if (ret == 0) goto lab14; /* call Step_4, line 132 */ + if (ret < 0) return ret; + } + lab14: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 133 */ + { int ret = r_Step_5a(z); + if (ret == 0) goto lab15; /* call Step_5a, line 133 */ + if (ret < 0) return ret; + } + lab15: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 134 */ + { int ret = r_Step_5b(z); + if (ret == 0) goto lab16; /* call Step_5b, line 134 */ + if (ret < 0) return ret; + } + lab16: + z->c = z->l - m; + } + z->c = z->lb; + { int c = z->c; /* do, line 137 */ + if (!(z->B[0])) goto lab17; /* Boolean test Y_found, line 137 */ + while(1) { /* repeat, line 137 */ + int c = z->c; + while(1) { /* goto, line 137 */ + int c = z->c; + z->bra = z->c; /* [, line 137 */ + if (!(eq_s(z, 1, s_33))) goto lab19; + z->ket = z->c; /* ], line 137 */ + z->c = c; + break; + lab19: + z->c = c; + if (z->c >= z->l) goto lab18; + z->c++; /* goto, line 137 */ + } + { int ret; + ret = slice_from_s(z, 1, s_34); /* <-, line 137 */ + if (ret < 0) return ret; + } + continue; + lab18: + z->c = c; + break; + } + lab17: + z->c = c; + } + return 1; +} + +extern struct SN_env * porter_ISO_8859_1_create_env(void) { return SN_create_env(0, 2, 1); } + +extern void porter_ISO_8859_1_close_env(struct SN_env * z) { SN_close_env(z); } + diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_porter.h b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_porter.h new file mode 100644 index 0000000..5c8fd01 --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_porter.h @@ -0,0 +1,16 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern struct SN_env * porter_ISO_8859_1_create_env(void); +extern void porter_ISO_8859_1_close_env(struct SN_env * z); + +extern int porter_ISO_8859_1_stem(struct SN_env * z); + +#ifdef __cplusplus +} +#endif + diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_portuguese.c b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_portuguese.c new file mode 100644 index 0000000..d586909 --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_portuguese.c @@ -0,0 +1,1035 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#include "../runtime/header.h" + +extern int portuguese_ISO_8859_1_stem(struct SN_env * z); +static int r_residual_form(struct SN_env * z); +static int r_residual_suffix(struct SN_env * z); +static int r_verb_suffix(struct SN_env * z); +static int r_standard_suffix(struct SN_env * z); +static int r_R2(struct SN_env * z); +static int r_R1(struct SN_env * z); +static int r_RV(struct SN_env * z); +static int r_mark_regions(struct SN_env * z); +static int r_postlude(struct SN_env * z); +static int r_prelude(struct SN_env * z); + +extern struct SN_env * portuguese_ISO_8859_1_create_env(void); +extern void portuguese_ISO_8859_1_close_env(struct SN_env * z); + +static symbol s_0_1[1] = { 0xE3 }; +static symbol s_0_2[1] = { 0xF5 }; + +static struct among a_0[3] = +{ +/* 0 */ { 0, 0, -1, 3, 0}, +/* 1 */ { 1, s_0_1, 0, 1, 0}, +/* 2 */ { 1, s_0_2, 0, 2, 0} +}; + +static symbol s_1_1[2] = { 'a', '~' }; +static symbol s_1_2[2] = { 'o', '~' }; + +static struct among a_1[3] = +{ +/* 0 */ { 0, 0, -1, 3, 0}, +/* 1 */ { 2, s_1_1, 0, 1, 0}, +/* 2 */ { 2, s_1_2, 0, 2, 0} +}; + +static symbol s_2_0[2] = { 'i', 'c' }; +static symbol s_2_1[2] = { 'a', 'd' }; +static symbol s_2_2[2] = { 'o', 's' }; +static symbol s_2_3[2] = { 'i', 'v' }; + +static struct among a_2[4] = +{ +/* 0 */ { 2, s_2_0, -1, -1, 0}, +/* 1 */ { 2, s_2_1, -1, -1, 0}, +/* 2 */ { 2, s_2_2, -1, -1, 0}, +/* 3 */ { 2, s_2_3, -1, 1, 0} +}; + +static symbol s_3_0[4] = { 'a', 'n', 't', 'e' }; +static symbol s_3_1[4] = { 'a', 'v', 'e', 'l' }; +static symbol s_3_2[4] = { 0xED, 'v', 'e', 'l' }; + +static struct among a_3[3] = +{ +/* 0 */ { 4, s_3_0, -1, 1, 0}, +/* 1 */ { 4, s_3_1, -1, 1, 0}, +/* 2 */ { 4, s_3_2, -1, 1, 0} +}; + +static symbol s_4_0[2] = { 'i', 'c' }; +static symbol s_4_1[4] = { 'a', 'b', 'i', 'l' }; +static symbol s_4_2[2] = { 'i', 'v' }; + +static struct among a_4[3] = +{ +/* 0 */ { 2, s_4_0, -1, 1, 0}, +/* 1 */ { 4, s_4_1, -1, 1, 0}, +/* 2 */ { 2, s_4_2, -1, 1, 0} +}; + +static symbol s_5_0[3] = { 'i', 'c', 'a' }; +static symbol s_5_1[5] = { 0xE2, 'n', 'c', 'i', 'a' }; +static symbol s_5_2[5] = { 0xEA, 'n', 'c', 'i', 'a' }; +static symbol s_5_3[3] = { 'i', 'r', 'a' }; +static symbol s_5_4[5] = { 'a', 'd', 'o', 'r', 'a' }; +static symbol s_5_5[3] = { 'o', 's', 'a' }; +static symbol s_5_6[4] = { 'i', 's', 't', 'a' }; +static symbol s_5_7[3] = { 'i', 'v', 'a' }; +static symbol s_5_8[3] = { 'e', 'z', 'a' }; +static symbol s_5_9[5] = { 'l', 'o', 'g', 0xED, 'a' }; +static symbol s_5_10[5] = { 'i', 'd', 'a', 'd', 'e' }; +static symbol s_5_11[4] = { 'a', 'n', 't', 'e' }; +static symbol s_5_12[5] = { 'm', 'e', 'n', 't', 'e' }; +static symbol s_5_13[6] = { 'a', 'm', 'e', 'n', 't', 'e' }; +static symbol s_5_14[4] = { 0xE1, 'v', 'e', 'l' }; +static symbol s_5_15[4] = { 0xED, 'v', 'e', 'l' }; +static symbol s_5_16[5] = { 'u', 'c', 'i', 0xF3, 'n' }; +static symbol s_5_17[3] = { 'i', 'c', 'o' }; +static symbol s_5_18[4] = { 'i', 's', 'm', 'o' }; +static symbol s_5_19[3] = { 'o', 's', 'o' }; +static symbol s_5_20[6] = { 'a', 'm', 'e', 'n', 't', 'o' }; +static symbol s_5_21[6] = { 'i', 'm', 'e', 'n', 't', 'o' }; +static symbol s_5_22[3] = { 'i', 'v', 'o' }; +static symbol s_5_23[5] = { 'a', 0xE7, 'a', '~', 'o' }; +static symbol s_5_24[4] = { 'a', 'd', 'o', 'r' }; +static symbol s_5_25[4] = { 'i', 'c', 'a', 's' }; +static symbol s_5_26[6] = { 0xEA, 'n', 'c', 'i', 'a', 's' }; +static symbol s_5_27[4] = { 'i', 'r', 'a', 's' }; +static symbol s_5_28[6] = { 'a', 'd', 'o', 'r', 'a', 's' }; +static symbol s_5_29[4] = { 'o', 's', 'a', 's' }; +static symbol s_5_30[5] = { 'i', 's', 't', 'a', 's' }; +static symbol s_5_31[4] = { 'i', 'v', 'a', 's' }; +static symbol s_5_32[4] = { 'e', 'z', 'a', 's' }; +static symbol s_5_33[6] = { 'l', 'o', 'g', 0xED, 'a', 's' }; +static symbol s_5_34[6] = { 'i', 'd', 'a', 'd', 'e', 's' }; +static symbol s_5_35[7] = { 'u', 'c', 'i', 'o', 'n', 'e', 's' }; +static symbol s_5_36[6] = { 'a', 'd', 'o', 'r', 'e', 's' }; +static symbol s_5_37[5] = { 'a', 'n', 't', 'e', 's' }; +static symbol s_5_38[6] = { 'a', 0xE7, 'o', '~', 'e', 's' }; +static symbol s_5_39[4] = { 'i', 'c', 'o', 's' }; +static symbol s_5_40[5] = { 'i', 's', 'm', 'o', 's' }; +static symbol s_5_41[4] = { 'o', 's', 'o', 's' }; +static symbol s_5_42[7] = { 'a', 'm', 'e', 'n', 't', 'o', 's' }; +static symbol s_5_43[7] = { 'i', 'm', 'e', 'n', 't', 'o', 's' }; +static symbol s_5_44[4] = { 'i', 'v', 'o', 's' }; + +static struct among a_5[45] = +{ +/* 0 */ { 3, s_5_0, -1, 1, 0}, +/* 1 */ { 5, s_5_1, -1, 1, 0}, +/* 2 */ { 5, s_5_2, -1, 4, 0}, +/* 3 */ { 3, s_5_3, -1, 9, 0}, +/* 4 */ { 5, s_5_4, -1, 1, 0}, +/* 5 */ { 3, s_5_5, -1, 1, 0}, +/* 6 */ { 4, s_5_6, -1, 1, 0}, +/* 7 */ { 3, s_5_7, -1, 8, 0}, +/* 8 */ { 3, s_5_8, -1, 1, 0}, +/* 9 */ { 5, s_5_9, -1, 2, 0}, +/* 10 */ { 5, s_5_10, -1, 7, 0}, +/* 11 */ { 4, s_5_11, -1, 1, 0}, +/* 12 */ { 5, s_5_12, -1, 6, 0}, +/* 13 */ { 6, s_5_13, 12, 5, 0}, +/* 14 */ { 4, s_5_14, -1, 1, 0}, +/* 15 */ { 4, s_5_15, -1, 1, 0}, +/* 16 */ { 5, s_5_16, -1, 3, 0}, +/* 17 */ { 3, s_5_17, -1, 1, 0}, +/* 18 */ { 4, s_5_18, -1, 1, 0}, +/* 19 */ { 3, s_5_19, -1, 1, 0}, +/* 20 */ { 6, s_5_20, -1, 1, 0}, +/* 21 */ { 6, s_5_21, -1, 1, 0}, +/* 22 */ { 3, s_5_22, -1, 8, 0}, +/* 23 */ { 5, s_5_23, -1, 1, 0}, +/* 24 */ { 4, s_5_24, -1, 1, 0}, +/* 25 */ { 4, s_5_25, -1, 1, 0}, +/* 26 */ { 6, s_5_26, -1, 4, 0}, +/* 27 */ { 4, s_5_27, -1, 9, 0}, +/* 28 */ { 6, s_5_28, -1, 1, 0}, +/* 29 */ { 4, s_5_29, -1, 1, 0}, +/* 30 */ { 5, s_5_30, -1, 1, 0}, +/* 31 */ { 4, s_5_31, -1, 8, 0}, +/* 32 */ { 4, s_5_32, -1, 1, 0}, +/* 33 */ { 6, s_5_33, -1, 2, 0}, +/* 34 */ { 6, s_5_34, -1, 7, 0}, +/* 35 */ { 7, s_5_35, -1, 3, 0}, +/* 36 */ { 6, s_5_36, -1, 1, 0}, +/* 37 */ { 5, s_5_37, -1, 1, 0}, +/* 38 */ { 6, s_5_38, -1, 1, 0}, +/* 39 */ { 4, s_5_39, -1, 1, 0}, +/* 40 */ { 5, s_5_40, -1, 1, 0}, +/* 41 */ { 4, s_5_41, -1, 1, 0}, +/* 42 */ { 7, s_5_42, -1, 1, 0}, +/* 43 */ { 7, s_5_43, -1, 1, 0}, +/* 44 */ { 4, s_5_44, -1, 8, 0} +}; + +static symbol s_6_0[3] = { 'a', 'd', 'a' }; +static symbol s_6_1[3] = { 'i', 'd', 'a' }; +static symbol s_6_2[2] = { 'i', 'a' }; +static symbol s_6_3[4] = { 'a', 'r', 'i', 'a' }; +static symbol s_6_4[4] = { 'e', 'r', 'i', 'a' }; +static symbol s_6_5[4] = { 'i', 'r', 'i', 'a' }; +static symbol s_6_6[3] = { 'a', 'r', 'a' }; +static symbol s_6_7[3] = { 'e', 'r', 'a' }; +static symbol s_6_8[3] = { 'i', 'r', 'a' }; +static symbol s_6_9[3] = { 'a', 'v', 'a' }; +static symbol s_6_10[4] = { 'a', 's', 's', 'e' }; +static symbol s_6_11[4] = { 'e', 's', 's', 'e' }; +static symbol s_6_12[4] = { 'i', 's', 's', 'e' }; +static symbol s_6_13[4] = { 'a', 's', 't', 'e' }; +static symbol s_6_14[4] = { 'e', 's', 't', 'e' }; +static symbol s_6_15[4] = { 'i', 's', 't', 'e' }; +static symbol s_6_16[2] = { 'e', 'i' }; +static symbol s_6_17[4] = { 'a', 'r', 'e', 'i' }; +static symbol s_6_18[4] = { 'e', 'r', 'e', 'i' }; +static symbol s_6_19[4] = { 'i', 'r', 'e', 'i' }; +static symbol s_6_20[2] = { 'a', 'm' }; +static symbol s_6_21[3] = { 'i', 'a', 'm' }; +static symbol s_6_22[5] = { 'a', 'r', 'i', 'a', 'm' }; +static symbol s_6_23[5] = { 'e', 'r', 'i', 'a', 'm' }; +static symbol s_6_24[5] = { 'i', 'r', 'i', 'a', 'm' }; +static symbol s_6_25[4] = { 'a', 'r', 'a', 'm' }; +static symbol s_6_26[4] = { 'e', 'r', 'a', 'm' }; +static symbol s_6_27[4] = { 'i', 'r', 'a', 'm' }; +static symbol s_6_28[4] = { 'a', 'v', 'a', 'm' }; +static symbol s_6_29[2] = { 'e', 'm' }; +static symbol s_6_30[4] = { 'a', 'r', 'e', 'm' }; +static symbol s_6_31[4] = { 'e', 'r', 'e', 'm' }; +static symbol s_6_32[4] = { 'i', 'r', 'e', 'm' }; +static symbol s_6_33[5] = { 'a', 's', 's', 'e', 'm' }; +static symbol s_6_34[5] = { 'e', 's', 's', 'e', 'm' }; +static symbol s_6_35[5] = { 'i', 's', 's', 'e', 'm' }; +static symbol s_6_36[3] = { 'a', 'd', 'o' }; +static symbol s_6_37[3] = { 'i', 'd', 'o' }; +static symbol s_6_38[4] = { 'a', 'n', 'd', 'o' }; +static symbol s_6_39[4] = { 'e', 'n', 'd', 'o' }; +static symbol s_6_40[4] = { 'i', 'n', 'd', 'o' }; +static symbol s_6_41[5] = { 'a', 'r', 'a', '~', 'o' }; +static symbol s_6_42[5] = { 'e', 'r', 'a', '~', 'o' }; +static symbol s_6_43[5] = { 'i', 'r', 'a', '~', 'o' }; +static symbol s_6_44[2] = { 'a', 'r' }; +static symbol s_6_45[2] = { 'e', 'r' }; +static symbol s_6_46[2] = { 'i', 'r' }; +static symbol s_6_47[2] = { 'a', 's' }; +static symbol s_6_48[4] = { 'a', 'd', 'a', 's' }; +static symbol s_6_49[4] = { 'i', 'd', 'a', 's' }; +static symbol s_6_50[3] = { 'i', 'a', 's' }; +static symbol s_6_51[5] = { 'a', 'r', 'i', 'a', 's' }; +static symbol s_6_52[5] = { 'e', 'r', 'i', 'a', 's' }; +static symbol s_6_53[5] = { 'i', 'r', 'i', 'a', 's' }; +static symbol s_6_54[4] = { 'a', 'r', 'a', 's' }; +static symbol s_6_55[4] = { 'e', 'r', 'a', 's' }; +static symbol s_6_56[4] = { 'i', 'r', 'a', 's' }; +static symbol s_6_57[4] = { 'a', 'v', 'a', 's' }; +static symbol s_6_58[2] = { 'e', 's' }; +static symbol s_6_59[5] = { 'a', 'r', 'd', 'e', 's' }; +static symbol s_6_60[5] = { 'e', 'r', 'd', 'e', 's' }; +static symbol s_6_61[5] = { 'i', 'r', 'd', 'e', 's' }; +static symbol s_6_62[4] = { 'a', 'r', 'e', 's' }; +static symbol s_6_63[4] = { 'e', 'r', 'e', 's' }; +static symbol s_6_64[4] = { 'i', 'r', 'e', 's' }; +static symbol s_6_65[5] = { 'a', 's', 's', 'e', 's' }; +static symbol s_6_66[5] = { 'e', 's', 's', 'e', 's' }; +static symbol s_6_67[5] = { 'i', 's', 's', 'e', 's' }; +static symbol s_6_68[5] = { 'a', 's', 't', 'e', 's' }; +static symbol s_6_69[5] = { 'e', 's', 't', 'e', 's' }; +static symbol s_6_70[5] = { 'i', 's', 't', 'e', 's' }; +static symbol s_6_71[2] = { 'i', 's' }; +static symbol s_6_72[3] = { 'a', 'i', 's' }; +static symbol s_6_73[3] = { 'e', 'i', 's' }; +static symbol s_6_74[5] = { 'a', 'r', 'e', 'i', 's' }; +static symbol s_6_75[5] = { 'e', 'r', 'e', 'i', 's' }; +static symbol s_6_76[5] = { 'i', 'r', 'e', 'i', 's' }; +static symbol s_6_77[5] = { 0xE1, 'r', 'e', 'i', 's' }; +static symbol s_6_78[5] = { 0xE9, 'r', 'e', 'i', 's' }; +static symbol s_6_79[5] = { 0xED, 'r', 'e', 'i', 's' }; +static symbol s_6_80[6] = { 0xE1, 's', 's', 'e', 'i', 's' }; +static symbol s_6_81[6] = { 0xE9, 's', 's', 'e', 'i', 's' }; +static symbol s_6_82[6] = { 0xED, 's', 's', 'e', 'i', 's' }; +static symbol s_6_83[5] = { 0xE1, 'v', 'e', 'i', 's' }; +static symbol s_6_84[4] = { 0xED, 'e', 'i', 's' }; +static symbol s_6_85[6] = { 'a', 'r', 0xED, 'e', 'i', 's' }; +static symbol s_6_86[6] = { 'e', 'r', 0xED, 'e', 'i', 's' }; +static symbol s_6_87[6] = { 'i', 'r', 0xED, 'e', 'i', 's' }; +static symbol s_6_88[4] = { 'a', 'd', 'o', 's' }; +static symbol s_6_89[4] = { 'i', 'd', 'o', 's' }; +static symbol s_6_90[4] = { 'a', 'm', 'o', 's' }; +static symbol s_6_91[6] = { 0xE1, 'r', 'a', 'm', 'o', 's' }; +static symbol s_6_92[6] = { 0xE9, 'r', 'a', 'm', 'o', 's' }; +static symbol s_6_93[6] = { 0xED, 'r', 'a', 'm', 'o', 's' }; +static symbol s_6_94[6] = { 0xE1, 'v', 'a', 'm', 'o', 's' }; +static symbol s_6_95[5] = { 0xED, 'a', 'm', 'o', 's' }; +static symbol s_6_96[7] = { 'a', 'r', 0xED, 'a', 'm', 'o', 's' }; +static symbol s_6_97[7] = { 'e', 'r', 0xED, 'a', 'm', 'o', 's' }; +static symbol s_6_98[7] = { 'i', 'r', 0xED, 'a', 'm', 'o', 's' }; +static symbol s_6_99[4] = { 'e', 'm', 'o', 's' }; +static symbol s_6_100[6] = { 'a', 'r', 'e', 'm', 'o', 's' }; +static symbol s_6_101[6] = { 'e', 'r', 'e', 'm', 'o', 's' }; +static symbol s_6_102[6] = { 'i', 'r', 'e', 'm', 'o', 's' }; +static symbol s_6_103[7] = { 0xE1, 's', 's', 'e', 'm', 'o', 's' }; +static symbol s_6_104[7] = { 0xEA, 's', 's', 'e', 'm', 'o', 's' }; +static symbol s_6_105[7] = { 0xED, 's', 's', 'e', 'm', 'o', 's' }; +static symbol s_6_106[4] = { 'i', 'm', 'o', 's' }; +static symbol s_6_107[5] = { 'a', 'r', 'm', 'o', 's' }; +static symbol s_6_108[5] = { 'e', 'r', 'm', 'o', 's' }; +static symbol s_6_109[5] = { 'i', 'r', 'm', 'o', 's' }; +static symbol s_6_110[4] = { 0xE1, 'm', 'o', 's' }; +static symbol s_6_111[4] = { 'a', 'r', 0xE1, 's' }; +static symbol s_6_112[4] = { 'e', 'r', 0xE1, 's' }; +static symbol s_6_113[4] = { 'i', 'r', 0xE1, 's' }; +static symbol s_6_114[2] = { 'e', 'u' }; +static symbol s_6_115[2] = { 'i', 'u' }; +static symbol s_6_116[2] = { 'o', 'u' }; +static symbol s_6_117[3] = { 'a', 'r', 0xE1 }; +static symbol s_6_118[3] = { 'e', 'r', 0xE1 }; +static symbol s_6_119[3] = { 'i', 'r', 0xE1 }; + +static struct among a_6[120] = +{ +/* 0 */ { 3, s_6_0, -1, 1, 0}, +/* 1 */ { 3, s_6_1, -1, 1, 0}, +/* 2 */ { 2, s_6_2, -1, 1, 0}, +/* 3 */ { 4, s_6_3, 2, 1, 0}, +/* 4 */ { 4, s_6_4, 2, 1, 0}, +/* 5 */ { 4, s_6_5, 2, 1, 0}, +/* 6 */ { 3, s_6_6, -1, 1, 0}, +/* 7 */ { 3, s_6_7, -1, 1, 0}, +/* 8 */ { 3, s_6_8, -1, 1, 0}, +/* 9 */ { 3, s_6_9, -1, 1, 0}, +/* 10 */ { 4, s_6_10, -1, 1, 0}, +/* 11 */ { 4, s_6_11, -1, 1, 0}, +/* 12 */ { 4, s_6_12, -1, 1, 0}, +/* 13 */ { 4, s_6_13, -1, 1, 0}, +/* 14 */ { 4, s_6_14, -1, 1, 0}, +/* 15 */ { 4, s_6_15, -1, 1, 0}, +/* 16 */ { 2, s_6_16, -1, 1, 0}, +/* 17 */ { 4, s_6_17, 16, 1, 0}, +/* 18 */ { 4, s_6_18, 16, 1, 0}, +/* 19 */ { 4, s_6_19, 16, 1, 0}, +/* 20 */ { 2, s_6_20, -1, 1, 0}, +/* 21 */ { 3, s_6_21, 20, 1, 0}, +/* 22 */ { 5, s_6_22, 21, 1, 0}, +/* 23 */ { 5, s_6_23, 21, 1, 0}, +/* 24 */ { 5, s_6_24, 21, 1, 0}, +/* 25 */ { 4, s_6_25, 20, 1, 0}, +/* 26 */ { 4, s_6_26, 20, 1, 0}, +/* 27 */ { 4, s_6_27, 20, 1, 0}, +/* 28 */ { 4, s_6_28, 20, 1, 0}, +/* 29 */ { 2, s_6_29, -1, 1, 0}, +/* 30 */ { 4, s_6_30, 29, 1, 0}, +/* 31 */ { 4, s_6_31, 29, 1, 0}, +/* 32 */ { 4, s_6_32, 29, 1, 0}, +/* 33 */ { 5, s_6_33, 29, 1, 0}, +/* 34 */ { 5, s_6_34, 29, 1, 0}, +/* 35 */ { 5, s_6_35, 29, 1, 0}, +/* 36 */ { 3, s_6_36, -1, 1, 0}, +/* 37 */ { 3, s_6_37, -1, 1, 0}, +/* 38 */ { 4, s_6_38, -1, 1, 0}, +/* 39 */ { 4, s_6_39, -1, 1, 0}, +/* 40 */ { 4, s_6_40, -1, 1, 0}, +/* 41 */ { 5, s_6_41, -1, 1, 0}, +/* 42 */ { 5, s_6_42, -1, 1, 0}, +/* 43 */ { 5, s_6_43, -1, 1, 0}, +/* 44 */ { 2, s_6_44, -1, 1, 0}, +/* 45 */ { 2, s_6_45, -1, 1, 0}, +/* 46 */ { 2, s_6_46, -1, 1, 0}, +/* 47 */ { 2, s_6_47, -1, 1, 0}, +/* 48 */ { 4, s_6_48, 47, 1, 0}, +/* 49 */ { 4, s_6_49, 47, 1, 0}, +/* 50 */ { 3, s_6_50, 47, 1, 0}, +/* 51 */ { 5, s_6_51, 50, 1, 0}, +/* 52 */ { 5, s_6_52, 50, 1, 0}, +/* 53 */ { 5, s_6_53, 50, 1, 0}, +/* 54 */ { 4, s_6_54, 47, 1, 0}, +/* 55 */ { 4, s_6_55, 47, 1, 0}, +/* 56 */ { 4, s_6_56, 47, 1, 0}, +/* 57 */ { 4, s_6_57, 47, 1, 0}, +/* 58 */ { 2, s_6_58, -1, 1, 0}, +/* 59 */ { 5, s_6_59, 58, 1, 0}, +/* 60 */ { 5, s_6_60, 58, 1, 0}, +/* 61 */ { 5, s_6_61, 58, 1, 0}, +/* 62 */ { 4, s_6_62, 58, 1, 0}, +/* 63 */ { 4, s_6_63, 58, 1, 0}, +/* 64 */ { 4, s_6_64, 58, 1, 0}, +/* 65 */ { 5, s_6_65, 58, 1, 0}, +/* 66 */ { 5, s_6_66, 58, 1, 0}, +/* 67 */ { 5, s_6_67, 58, 1, 0}, +/* 68 */ { 5, s_6_68, 58, 1, 0}, +/* 69 */ { 5, s_6_69, 58, 1, 0}, +/* 70 */ { 5, s_6_70, 58, 1, 0}, +/* 71 */ { 2, s_6_71, -1, 1, 0}, +/* 72 */ { 3, s_6_72, 71, 1, 0}, +/* 73 */ { 3, s_6_73, 71, 1, 0}, +/* 74 */ { 5, s_6_74, 73, 1, 0}, +/* 75 */ { 5, s_6_75, 73, 1, 0}, +/* 76 */ { 5, s_6_76, 73, 1, 0}, +/* 77 */ { 5, s_6_77, 73, 1, 0}, +/* 78 */ { 5, s_6_78, 73, 1, 0}, +/* 79 */ { 5, s_6_79, 73, 1, 0}, +/* 80 */ { 6, s_6_80, 73, 1, 0}, +/* 81 */ { 6, s_6_81, 73, 1, 0}, +/* 82 */ { 6, s_6_82, 73, 1, 0}, +/* 83 */ { 5, s_6_83, 73, 1, 0}, +/* 84 */ { 4, s_6_84, 73, 1, 0}, +/* 85 */ { 6, s_6_85, 84, 1, 0}, +/* 86 */ { 6, s_6_86, 84, 1, 0}, +/* 87 */ { 6, s_6_87, 84, 1, 0}, +/* 88 */ { 4, s_6_88, -1, 1, 0}, +/* 89 */ { 4, s_6_89, -1, 1, 0}, +/* 90 */ { 4, s_6_90, -1, 1, 0}, +/* 91 */ { 6, s_6_91, 90, 1, 0}, +/* 92 */ { 6, s_6_92, 90, 1, 0}, +/* 93 */ { 6, s_6_93, 90, 1, 0}, +/* 94 */ { 6, s_6_94, 90, 1, 0}, +/* 95 */ { 5, s_6_95, 90, 1, 0}, +/* 96 */ { 7, s_6_96, 95, 1, 0}, +/* 97 */ { 7, s_6_97, 95, 1, 0}, +/* 98 */ { 7, s_6_98, 95, 1, 0}, +/* 99 */ { 4, s_6_99, -1, 1, 0}, +/*100 */ { 6, s_6_100, 99, 1, 0}, +/*101 */ { 6, s_6_101, 99, 1, 0}, +/*102 */ { 6, s_6_102, 99, 1, 0}, +/*103 */ { 7, s_6_103, 99, 1, 0}, +/*104 */ { 7, s_6_104, 99, 1, 0}, +/*105 */ { 7, s_6_105, 99, 1, 0}, +/*106 */ { 4, s_6_106, -1, 1, 0}, +/*107 */ { 5, s_6_107, -1, 1, 0}, +/*108 */ { 5, s_6_108, -1, 1, 0}, +/*109 */ { 5, s_6_109, -1, 1, 0}, +/*110 */ { 4, s_6_110, -1, 1, 0}, +/*111 */ { 4, s_6_111, -1, 1, 0}, +/*112 */ { 4, s_6_112, -1, 1, 0}, +/*113 */ { 4, s_6_113, -1, 1, 0}, +/*114 */ { 2, s_6_114, -1, 1, 0}, +/*115 */ { 2, s_6_115, -1, 1, 0}, +/*116 */ { 2, s_6_116, -1, 1, 0}, +/*117 */ { 3, s_6_117, -1, 1, 0}, +/*118 */ { 3, s_6_118, -1, 1, 0}, +/*119 */ { 3, s_6_119, -1, 1, 0} +}; + +static symbol s_7_0[1] = { 'a' }; +static symbol s_7_1[1] = { 'i' }; +static symbol s_7_2[1] = { 'o' }; +static symbol s_7_3[2] = { 'o', 's' }; +static symbol s_7_4[1] = { 0xE1 }; +static symbol s_7_5[1] = { 0xED }; +static symbol s_7_6[1] = { 0xF3 }; + +static struct among a_7[7] = +{ +/* 0 */ { 1, s_7_0, -1, 1, 0}, +/* 1 */ { 1, s_7_1, -1, 1, 0}, +/* 2 */ { 1, s_7_2, -1, 1, 0}, +/* 3 */ { 2, s_7_3, -1, 1, 0}, +/* 4 */ { 1, s_7_4, -1, 1, 0}, +/* 5 */ { 1, s_7_5, -1, 1, 0}, +/* 6 */ { 1, s_7_6, -1, 1, 0} +}; + +static symbol s_8_0[1] = { 'e' }; +static symbol s_8_1[1] = { 0xE7 }; +static symbol s_8_2[1] = { 0xE9 }; +static symbol s_8_3[1] = { 0xEA }; + +static struct among a_8[4] = +{ +/* 0 */ { 1, s_8_0, -1, 1, 0}, +/* 1 */ { 1, s_8_1, -1, 2, 0}, +/* 2 */ { 1, s_8_2, -1, 1, 0}, +/* 3 */ { 1, s_8_3, -1, 1, 0} +}; + +static unsigned char g_v[] = { 17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 19, 12, 2 }; + +static symbol s_0[] = { 'a', '~' }; +static symbol s_1[] = { 'o', '~' }; +static symbol s_2[] = { 0xE3 }; +static symbol s_3[] = { 0xF5 }; +static symbol s_4[] = { 'l', 'o', 'g' }; +static symbol s_5[] = { 'u' }; +static symbol s_6[] = { 'e', 'n', 't', 'e' }; +static symbol s_7[] = { 'a', 't' }; +static symbol s_8[] = { 'a', 't' }; +static symbol s_9[] = { 'e' }; +static symbol s_10[] = { 'i', 'r' }; +static symbol s_11[] = { 'u' }; +static symbol s_12[] = { 'g' }; +static symbol s_13[] = { 'i' }; +static symbol s_14[] = { 'c' }; +static symbol s_15[] = { 'c' }; +static symbol s_16[] = { 'i' }; +static symbol s_17[] = { 'c' }; + +static int r_prelude(struct SN_env * z) { + int among_var; + while(1) { /* repeat, line 36 */ + int c = z->c; + z->bra = z->c; /* [, line 37 */ + among_var = find_among(z, a_0, 3); /* substring, line 37 */ + if (!(among_var)) goto lab0; + z->ket = z->c; /* ], line 37 */ + switch(among_var) { + case 0: goto lab0; + case 1: + { int ret; + ret = slice_from_s(z, 2, s_0); /* <-, line 38 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 2, s_1); /* <-, line 39 */ + if (ret < 0) return ret; + } + break; + case 3: + if (z->c >= z->l) goto lab0; + z->c++; /* next, line 40 */ + break; + } + continue; + lab0: + z->c = c; + break; + } + return 1; +} + +static int r_mark_regions(struct SN_env * z) { + z->I[0] = z->l; + z->I[1] = z->l; + z->I[2] = z->l; + { int c = z->c; /* do, line 50 */ + { int c = z->c; /* or, line 52 */ + if (!(in_grouping(z, g_v, 97, 250))) goto lab2; + { int c = z->c; /* or, line 51 */ + if (!(out_grouping(z, g_v, 97, 250))) goto lab4; + while(1) { /* gopast, line 51 */ + if (!(in_grouping(z, g_v, 97, 250))) goto lab5; + break; + lab5: + if (z->c >= z->l) goto lab4; + z->c++; /* gopast, line 51 */ + } + goto lab3; + lab4: + z->c = c; + if (!(in_grouping(z, g_v, 97, 250))) goto lab2; + while(1) { /* gopast, line 51 */ + if (!(out_grouping(z, g_v, 97, 250))) goto lab6; + break; + lab6: + if (z->c >= z->l) goto lab2; + z->c++; /* gopast, line 51 */ + } + } + lab3: + goto lab1; + lab2: + z->c = c; + if (!(out_grouping(z, g_v, 97, 250))) goto lab0; + { int c = z->c; /* or, line 53 */ + if (!(out_grouping(z, g_v, 97, 250))) goto lab8; + while(1) { /* gopast, line 53 */ + if (!(in_grouping(z, g_v, 97, 250))) goto lab9; + break; + lab9: + if (z->c >= z->l) goto lab8; + z->c++; /* gopast, line 53 */ + } + goto lab7; + lab8: + z->c = c; + if (!(in_grouping(z, g_v, 97, 250))) goto lab0; + if (z->c >= z->l) goto lab0; + z->c++; /* next, line 53 */ + } + lab7: + ; + } + lab1: + z->I[0] = z->c; /* setmark pV, line 54 */ + lab0: + z->c = c; + } + { int c = z->c; /* do, line 56 */ + while(1) { /* gopast, line 57 */ + if (!(in_grouping(z, g_v, 97, 250))) goto lab11; + break; + lab11: + if (z->c >= z->l) goto lab10; + z->c++; /* gopast, line 57 */ + } + while(1) { /* gopast, line 57 */ + if (!(out_grouping(z, g_v, 97, 250))) goto lab12; + break; + lab12: + if (z->c >= z->l) goto lab10; + z->c++; /* gopast, line 57 */ + } + z->I[1] = z->c; /* setmark p1, line 57 */ + while(1) { /* gopast, line 58 */ + if (!(in_grouping(z, g_v, 97, 250))) goto lab13; + break; + lab13: + if (z->c >= z->l) goto lab10; + z->c++; /* gopast, line 58 */ + } + while(1) { /* gopast, line 58 */ + if (!(out_grouping(z, g_v, 97, 250))) goto lab14; + break; + lab14: + if (z->c >= z->l) goto lab10; + z->c++; /* gopast, line 58 */ + } + z->I[2] = z->c; /* setmark p2, line 58 */ + lab10: + z->c = c; + } + return 1; +} + +static int r_postlude(struct SN_env * z) { + int among_var; + while(1) { /* repeat, line 62 */ + int c = z->c; + z->bra = z->c; /* [, line 63 */ + among_var = find_among(z, a_1, 3); /* substring, line 63 */ + if (!(among_var)) goto lab0; + z->ket = z->c; /* ], line 63 */ + switch(among_var) { + case 0: goto lab0; + case 1: + { int ret; + ret = slice_from_s(z, 1, s_2); /* <-, line 64 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 1, s_3); /* <-, line 65 */ + if (ret < 0) return ret; + } + break; + case 3: + if (z->c >= z->l) goto lab0; + z->c++; /* next, line 66 */ + break; + } + continue; + lab0: + z->c = c; + break; + } + return 1; +} + +static int r_RV(struct SN_env * z) { + if (!(z->I[0] <= z->c)) return 0; + return 1; +} + +static int r_R1(struct SN_env * z) { + if (!(z->I[1] <= z->c)) return 0; + return 1; +} + +static int r_R2(struct SN_env * z) { + if (!(z->I[2] <= z->c)) return 0; + return 1; +} + +static int r_standard_suffix(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 77 */ + among_var = find_among_b(z, a_5, 45); /* substring, line 77 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 77 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 93 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 93 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 98 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 3, s_4); /* <-, line 98 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 102 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 1, s_5); /* <-, line 102 */ + if (ret < 0) return ret; + } + break; + case 4: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 106 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 4, s_6); /* <-, line 106 */ + if (ret < 0) return ret; + } + break; + case 5: + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 110 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 110 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 111 */ + z->ket = z->c; /* [, line 112 */ + among_var = find_among_b(z, a_2, 4); /* substring, line 112 */ + if (!(among_var)) { z->c = z->l - m; goto lab0; } + z->bra = z->c; /* ], line 112 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab0; } /* call R2, line 112 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 112 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: { z->c = z->l - m; goto lab0; } + case 1: + z->ket = z->c; /* [, line 113 */ + if (!(eq_s_b(z, 2, s_7))) { z->c = z->l - m; goto lab0; } + z->bra = z->c; /* ], line 113 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab0; } /* call R2, line 113 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 113 */ + if (ret < 0) return ret; + } + break; + } + lab0: + ; + } + break; + case 6: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 122 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 122 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 123 */ + z->ket = z->c; /* [, line 124 */ + among_var = find_among_b(z, a_3, 3); /* substring, line 124 */ + if (!(among_var)) { z->c = z->l - m; goto lab1; } + z->bra = z->c; /* ], line 124 */ + switch(among_var) { + case 0: { z->c = z->l - m; goto lab1; } + case 1: + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab1; } /* call R2, line 127 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 127 */ + if (ret < 0) return ret; + } + break; + } + lab1: + ; + } + break; + case 7: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 134 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 134 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 135 */ + z->ket = z->c; /* [, line 136 */ + among_var = find_among_b(z, a_4, 3); /* substring, line 136 */ + if (!(among_var)) { z->c = z->l - m; goto lab2; } + z->bra = z->c; /* ], line 136 */ + switch(among_var) { + case 0: { z->c = z->l - m; goto lab2; } + case 1: + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab2; } /* call R2, line 139 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 139 */ + if (ret < 0) return ret; + } + break; + } + lab2: + ; + } + break; + case 8: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 146 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 146 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 147 */ + z->ket = z->c; /* [, line 148 */ + if (!(eq_s_b(z, 2, s_8))) { z->c = z->l - m; goto lab3; } + z->bra = z->c; /* ], line 148 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab3; } /* call R2, line 148 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 148 */ + if (ret < 0) return ret; + } + lab3: + ; + } + break; + case 9: + { int ret = r_RV(z); + if (ret == 0) return 0; /* call RV, line 153 */ + if (ret < 0) return ret; + } + if (!(eq_s_b(z, 1, s_9))) return 0; + { int ret; + ret = slice_from_s(z, 2, s_10); /* <-, line 154 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_verb_suffix(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 159 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 159 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 160 */ + among_var = find_among_b(z, a_6, 120); /* substring, line 160 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 160 */ + switch(among_var) { + case 0: { z->lb = m3; return 0; } + case 1: + { int ret; + ret = slice_del(z); /* delete, line 179 */ + if (ret < 0) return ret; + } + break; + } + z->lb = m3; + } + return 1; +} + +static int r_residual_suffix(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 184 */ + among_var = find_among_b(z, a_7, 7); /* substring, line 184 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 184 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret = r_RV(z); + if (ret == 0) return 0; /* call RV, line 187 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 187 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_residual_form(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 192 */ + among_var = find_among_b(z, a_8, 4); /* substring, line 192 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 192 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret = r_RV(z); + if (ret == 0) return 0; /* call RV, line 194 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 194 */ + if (ret < 0) return ret; + } + z->ket = z->c; /* [, line 194 */ + { int m = z->l - z->c; (void) m; /* or, line 194 */ + if (!(eq_s_b(z, 1, s_11))) goto lab1; + z->bra = z->c; /* ], line 194 */ + { int m_test = z->l - z->c; /* test, line 194 */ + if (!(eq_s_b(z, 1, s_12))) goto lab1; + z->c = z->l - m_test; + } + goto lab0; + lab1: + z->c = z->l - m; + if (!(eq_s_b(z, 1, s_13))) return 0; + z->bra = z->c; /* ], line 195 */ + { int m_test = z->l - z->c; /* test, line 195 */ + if (!(eq_s_b(z, 1, s_14))) return 0; + z->c = z->l - m_test; + } + } + lab0: + { int ret = r_RV(z); + if (ret == 0) return 0; /* call RV, line 195 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 195 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 1, s_15); /* <-, line 196 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +extern int portuguese_ISO_8859_1_stem(struct SN_env * z) { + { int c = z->c; /* do, line 202 */ + { int ret = r_prelude(z); + if (ret == 0) goto lab0; /* call prelude, line 202 */ + if (ret < 0) return ret; + } + lab0: + z->c = c; + } + { int c = z->c; /* do, line 203 */ + { int ret = r_mark_regions(z); + if (ret == 0) goto lab1; /* call mark_regions, line 203 */ + if (ret < 0) return ret; + } + lab1: + z->c = c; + } + z->lb = z->c; z->c = z->l; /* backwards, line 204 */ + + { int m = z->l - z->c; (void) m; /* do, line 205 */ + { int m = z->l - z->c; (void) m; /* or, line 209 */ + { int m = z->l - z->c; (void) m; /* and, line 207 */ + { int m = z->l - z->c; (void) m; /* or, line 206 */ + { int ret = r_standard_suffix(z); + if (ret == 0) goto lab6; /* call standard_suffix, line 206 */ + if (ret < 0) return ret; + } + goto lab5; + lab6: + z->c = z->l - m; + { int ret = r_verb_suffix(z); + if (ret == 0) goto lab4; /* call verb_suffix, line 206 */ + if (ret < 0) return ret; + } + } + lab5: + z->c = z->l - m; + { int m = z->l - z->c; (void) m; /* do, line 207 */ + z->ket = z->c; /* [, line 207 */ + if (!(eq_s_b(z, 1, s_16))) goto lab7; + z->bra = z->c; /* ], line 207 */ + { int m_test = z->l - z->c; /* test, line 207 */ + if (!(eq_s_b(z, 1, s_17))) goto lab7; + z->c = z->l - m_test; + } + { int ret = r_RV(z); + if (ret == 0) goto lab7; /* call RV, line 207 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 207 */ + if (ret < 0) return ret; + } + lab7: + z->c = z->l - m; + } + } + goto lab3; + lab4: + z->c = z->l - m; + { int ret = r_residual_suffix(z); + if (ret == 0) goto lab2; /* call residual_suffix, line 209 */ + if (ret < 0) return ret; + } + } + lab3: + lab2: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 211 */ + { int ret = r_residual_form(z); + if (ret == 0) goto lab8; /* call residual_form, line 211 */ + if (ret < 0) return ret; + } + lab8: + z->c = z->l - m; + } + z->c = z->lb; + { int c = z->c; /* do, line 213 */ + { int ret = r_postlude(z); + if (ret == 0) goto lab9; /* call postlude, line 213 */ + if (ret < 0) return ret; + } + lab9: + z->c = c; + } + return 1; +} + +extern struct SN_env * portuguese_ISO_8859_1_create_env(void) { return SN_create_env(0, 3, 0); } + +extern void portuguese_ISO_8859_1_close_env(struct SN_env * z) { SN_close_env(z); } + diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_portuguese.h b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_portuguese.h new file mode 100644 index 0000000..0279bc9 --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_portuguese.h @@ -0,0 +1,16 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern struct SN_env * portuguese_ISO_8859_1_create_env(void); +extern void portuguese_ISO_8859_1_close_env(struct SN_env * z); + +extern int portuguese_ISO_8859_1_stem(struct SN_env * z); + +#ifdef __cplusplus +} +#endif + diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_spanish.c b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_spanish.c new file mode 100644 index 0000000..acc4fa9 --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_spanish.c @@ -0,0 +1,1119 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#include "../runtime/header.h" + +extern int spanish_ISO_8859_1_stem(struct SN_env * z); +static int r_residual_suffix(struct SN_env * z); +static int r_verb_suffix(struct SN_env * z); +static int r_y_verb_suffix(struct SN_env * z); +static int r_standard_suffix(struct SN_env * z); +static int r_attached_pronoun(struct SN_env * z); +static int r_R2(struct SN_env * z); +static int r_R1(struct SN_env * z); +static int r_RV(struct SN_env * z); +static int r_mark_regions(struct SN_env * z); +static int r_postlude(struct SN_env * z); + +extern struct SN_env * spanish_ISO_8859_1_create_env(void); +extern void spanish_ISO_8859_1_close_env(struct SN_env * z); + +static symbol s_0_1[1] = { 0xE1 }; +static symbol s_0_2[1] = { 0xE9 }; +static symbol s_0_3[1] = { 0xED }; +static symbol s_0_4[1] = { 0xF3 }; +static symbol s_0_5[1] = { 0xFA }; + +static struct among a_0[6] = +{ +/* 0 */ { 0, 0, -1, 6, 0}, +/* 1 */ { 1, s_0_1, 0, 1, 0}, +/* 2 */ { 1, s_0_2, 0, 2, 0}, +/* 3 */ { 1, s_0_3, 0, 3, 0}, +/* 4 */ { 1, s_0_4, 0, 4, 0}, +/* 5 */ { 1, s_0_5, 0, 5, 0} +}; + +static symbol s_1_0[2] = { 'l', 'a' }; +static symbol s_1_1[4] = { 's', 'e', 'l', 'a' }; +static symbol s_1_2[2] = { 'l', 'e' }; +static symbol s_1_3[2] = { 'm', 'e' }; +static symbol s_1_4[2] = { 's', 'e' }; +static symbol s_1_5[2] = { 'l', 'o' }; +static symbol s_1_6[4] = { 's', 'e', 'l', 'o' }; +static symbol s_1_7[3] = { 'l', 'a', 's' }; +static symbol s_1_8[5] = { 's', 'e', 'l', 'a', 's' }; +static symbol s_1_9[3] = { 'l', 'e', 's' }; +static symbol s_1_10[3] = { 'l', 'o', 's' }; +static symbol s_1_11[5] = { 's', 'e', 'l', 'o', 's' }; +static symbol s_1_12[3] = { 'n', 'o', 's' }; + +static struct among a_1[13] = +{ +/* 0 */ { 2, s_1_0, -1, -1, 0}, +/* 1 */ { 4, s_1_1, 0, -1, 0}, +/* 2 */ { 2, s_1_2, -1, -1, 0}, +/* 3 */ { 2, s_1_3, -1, -1, 0}, +/* 4 */ { 2, s_1_4, -1, -1, 0}, +/* 5 */ { 2, s_1_5, -1, -1, 0}, +/* 6 */ { 4, s_1_6, 5, -1, 0}, +/* 7 */ { 3, s_1_7, -1, -1, 0}, +/* 8 */ { 5, s_1_8, 7, -1, 0}, +/* 9 */ { 3, s_1_9, -1, -1, 0}, +/* 10 */ { 3, s_1_10, -1, -1, 0}, +/* 11 */ { 5, s_1_11, 10, -1, 0}, +/* 12 */ { 3, s_1_12, -1, -1, 0} +}; + +static symbol s_2_0[4] = { 'a', 'n', 'd', 'o' }; +static symbol s_2_1[5] = { 'i', 'e', 'n', 'd', 'o' }; +static symbol s_2_2[5] = { 'y', 'e', 'n', 'd', 'o' }; +static symbol s_2_3[4] = { 0xE1, 'n', 'd', 'o' }; +static symbol s_2_4[5] = { 'i', 0xE9, 'n', 'd', 'o' }; +static symbol s_2_5[2] = { 'a', 'r' }; +static symbol s_2_6[2] = { 'e', 'r' }; +static symbol s_2_7[2] = { 'i', 'r' }; +static symbol s_2_8[2] = { 0xE1, 'r' }; +static symbol s_2_9[2] = { 0xE9, 'r' }; +static symbol s_2_10[2] = { 0xED, 'r' }; + +static struct among a_2[11] = +{ +/* 0 */ { 4, s_2_0, -1, 6, 0}, +/* 1 */ { 5, s_2_1, -1, 6, 0}, +/* 2 */ { 5, s_2_2, -1, 7, 0}, +/* 3 */ { 4, s_2_3, -1, 2, 0}, +/* 4 */ { 5, s_2_4, -1, 1, 0}, +/* 5 */ { 2, s_2_5, -1, 6, 0}, +/* 6 */ { 2, s_2_6, -1, 6, 0}, +/* 7 */ { 2, s_2_7, -1, 6, 0}, +/* 8 */ { 2, s_2_8, -1, 3, 0}, +/* 9 */ { 2, s_2_9, -1, 4, 0}, +/* 10 */ { 2, s_2_10, -1, 5, 0} +}; + +static symbol s_3_0[2] = { 'i', 'c' }; +static symbol s_3_1[2] = { 'a', 'd' }; +static symbol s_3_2[2] = { 'o', 's' }; +static symbol s_3_3[2] = { 'i', 'v' }; + +static struct among a_3[4] = +{ +/* 0 */ { 2, s_3_0, -1, -1, 0}, +/* 1 */ { 2, s_3_1, -1, -1, 0}, +/* 2 */ { 2, s_3_2, -1, -1, 0}, +/* 3 */ { 2, s_3_3, -1, 1, 0} +}; + +static symbol s_4_0[4] = { 'a', 'b', 'l', 'e' }; +static symbol s_4_1[4] = { 'i', 'b', 'l', 'e' }; +static symbol s_4_2[4] = { 'a', 'n', 't', 'e' }; + +static struct among a_4[3] = +{ +/* 0 */ { 4, s_4_0, -1, 1, 0}, +/* 1 */ { 4, s_4_1, -1, 1, 0}, +/* 2 */ { 4, s_4_2, -1, 1, 0} +}; + +static symbol s_5_0[2] = { 'i', 'c' }; +static symbol s_5_1[4] = { 'a', 'b', 'i', 'l' }; +static symbol s_5_2[2] = { 'i', 'v' }; + +static struct among a_5[3] = +{ +/* 0 */ { 2, s_5_0, -1, 1, 0}, +/* 1 */ { 4, s_5_1, -1, 1, 0}, +/* 2 */ { 2, s_5_2, -1, 1, 0} +}; + +static symbol s_6_0[3] = { 'i', 'c', 'a' }; +static symbol s_6_1[5] = { 'a', 'n', 'c', 'i', 'a' }; +static symbol s_6_2[5] = { 'e', 'n', 'c', 'i', 'a' }; +static symbol s_6_3[5] = { 'a', 'd', 'o', 'r', 'a' }; +static symbol s_6_4[3] = { 'o', 's', 'a' }; +static symbol s_6_5[4] = { 'i', 's', 't', 'a' }; +static symbol s_6_6[3] = { 'i', 'v', 'a' }; +static symbol s_6_7[4] = { 'a', 'n', 'z', 'a' }; +static symbol s_6_8[5] = { 'l', 'o', 'g', 0xED, 'a' }; +static symbol s_6_9[4] = { 'i', 'd', 'a', 'd' }; +static symbol s_6_10[4] = { 'a', 'b', 'l', 'e' }; +static symbol s_6_11[4] = { 'i', 'b', 'l', 'e' }; +static symbol s_6_12[4] = { 'a', 'n', 't', 'e' }; +static symbol s_6_13[5] = { 'm', 'e', 'n', 't', 'e' }; +static symbol s_6_14[6] = { 'a', 'm', 'e', 'n', 't', 'e' }; +static symbol s_6_15[5] = { 'a', 'c', 'i', 0xF3, 'n' }; +static symbol s_6_16[5] = { 'u', 'c', 'i', 0xF3, 'n' }; +static symbol s_6_17[3] = { 'i', 'c', 'o' }; +static symbol s_6_18[4] = { 'i', 's', 'm', 'o' }; +static symbol s_6_19[3] = { 'o', 's', 'o' }; +static symbol s_6_20[7] = { 'a', 'm', 'i', 'e', 'n', 't', 'o' }; +static symbol s_6_21[7] = { 'i', 'm', 'i', 'e', 'n', 't', 'o' }; +static symbol s_6_22[3] = { 'i', 'v', 'o' }; +static symbol s_6_23[4] = { 'a', 'd', 'o', 'r' }; +static symbol s_6_24[4] = { 'i', 'c', 'a', 's' }; +static symbol s_6_25[6] = { 'a', 'n', 'c', 'i', 'a', 's' }; +static symbol s_6_26[6] = { 'e', 'n', 'c', 'i', 'a', 's' }; +static symbol s_6_27[6] = { 'a', 'd', 'o', 'r', 'a', 's' }; +static symbol s_6_28[4] = { 'o', 's', 'a', 's' }; +static symbol s_6_29[5] = { 'i', 's', 't', 'a', 's' }; +static symbol s_6_30[4] = { 'i', 'v', 'a', 's' }; +static symbol s_6_31[5] = { 'a', 'n', 'z', 'a', 's' }; +static symbol s_6_32[6] = { 'l', 'o', 'g', 0xED, 'a', 's' }; +static symbol s_6_33[6] = { 'i', 'd', 'a', 'd', 'e', 's' }; +static symbol s_6_34[5] = { 'a', 'b', 'l', 'e', 's' }; +static symbol s_6_35[5] = { 'i', 'b', 'l', 'e', 's' }; +static symbol s_6_36[7] = { 'a', 'c', 'i', 'o', 'n', 'e', 's' }; +static symbol s_6_37[7] = { 'u', 'c', 'i', 'o', 'n', 'e', 's' }; +static symbol s_6_38[6] = { 'a', 'd', 'o', 'r', 'e', 's' }; +static symbol s_6_39[5] = { 'a', 'n', 't', 'e', 's' }; +static symbol s_6_40[4] = { 'i', 'c', 'o', 's' }; +static symbol s_6_41[5] = { 'i', 's', 'm', 'o', 's' }; +static symbol s_6_42[4] = { 'o', 's', 'o', 's' }; +static symbol s_6_43[8] = { 'a', 'm', 'i', 'e', 'n', 't', 'o', 's' }; +static symbol s_6_44[8] = { 'i', 'm', 'i', 'e', 'n', 't', 'o', 's' }; +static symbol s_6_45[4] = { 'i', 'v', 'o', 's' }; + +static struct among a_6[46] = +{ +/* 0 */ { 3, s_6_0, -1, 1, 0}, +/* 1 */ { 5, s_6_1, -1, 2, 0}, +/* 2 */ { 5, s_6_2, -1, 5, 0}, +/* 3 */ { 5, s_6_3, -1, 2, 0}, +/* 4 */ { 3, s_6_4, -1, 1, 0}, +/* 5 */ { 4, s_6_5, -1, 1, 0}, +/* 6 */ { 3, s_6_6, -1, 9, 0}, +/* 7 */ { 4, s_6_7, -1, 1, 0}, +/* 8 */ { 5, s_6_8, -1, 3, 0}, +/* 9 */ { 4, s_6_9, -1, 8, 0}, +/* 10 */ { 4, s_6_10, -1, 1, 0}, +/* 11 */ { 4, s_6_11, -1, 1, 0}, +/* 12 */ { 4, s_6_12, -1, 2, 0}, +/* 13 */ { 5, s_6_13, -1, 7, 0}, +/* 14 */ { 6, s_6_14, 13, 6, 0}, +/* 15 */ { 5, s_6_15, -1, 2, 0}, +/* 16 */ { 5, s_6_16, -1, 4, 0}, +/* 17 */ { 3, s_6_17, -1, 1, 0}, +/* 18 */ { 4, s_6_18, -1, 1, 0}, +/* 19 */ { 3, s_6_19, -1, 1, 0}, +/* 20 */ { 7, s_6_20, -1, 1, 0}, +/* 21 */ { 7, s_6_21, -1, 1, 0}, +/* 22 */ { 3, s_6_22, -1, 9, 0}, +/* 23 */ { 4, s_6_23, -1, 2, 0}, +/* 24 */ { 4, s_6_24, -1, 1, 0}, +/* 25 */ { 6, s_6_25, -1, 2, 0}, +/* 26 */ { 6, s_6_26, -1, 5, 0}, +/* 27 */ { 6, s_6_27, -1, 2, 0}, +/* 28 */ { 4, s_6_28, -1, 1, 0}, +/* 29 */ { 5, s_6_29, -1, 1, 0}, +/* 30 */ { 4, s_6_30, -1, 9, 0}, +/* 31 */ { 5, s_6_31, -1, 1, 0}, +/* 32 */ { 6, s_6_32, -1, 3, 0}, +/* 33 */ { 6, s_6_33, -1, 8, 0}, +/* 34 */ { 5, s_6_34, -1, 1, 0}, +/* 35 */ { 5, s_6_35, -1, 1, 0}, +/* 36 */ { 7, s_6_36, -1, 2, 0}, +/* 37 */ { 7, s_6_37, -1, 4, 0}, +/* 38 */ { 6, s_6_38, -1, 2, 0}, +/* 39 */ { 5, s_6_39, -1, 2, 0}, +/* 40 */ { 4, s_6_40, -1, 1, 0}, +/* 41 */ { 5, s_6_41, -1, 1, 0}, +/* 42 */ { 4, s_6_42, -1, 1, 0}, +/* 43 */ { 8, s_6_43, -1, 1, 0}, +/* 44 */ { 8, s_6_44, -1, 1, 0}, +/* 45 */ { 4, s_6_45, -1, 9, 0} +}; + +static symbol s_7_0[2] = { 'y', 'a' }; +static symbol s_7_1[2] = { 'y', 'e' }; +static symbol s_7_2[3] = { 'y', 'a', 'n' }; +static symbol s_7_3[3] = { 'y', 'e', 'n' }; +static symbol s_7_4[5] = { 'y', 'e', 'r', 'o', 'n' }; +static symbol s_7_5[5] = { 'y', 'e', 'n', 'd', 'o' }; +static symbol s_7_6[2] = { 'y', 'o' }; +static symbol s_7_7[3] = { 'y', 'a', 's' }; +static symbol s_7_8[3] = { 'y', 'e', 's' }; +static symbol s_7_9[4] = { 'y', 'a', 'i', 's' }; +static symbol s_7_10[5] = { 'y', 'a', 'm', 'o', 's' }; +static symbol s_7_11[2] = { 'y', 0xF3 }; + +static struct among a_7[12] = +{ +/* 0 */ { 2, s_7_0, -1, 1, 0}, +/* 1 */ { 2, s_7_1, -1, 1, 0}, +/* 2 */ { 3, s_7_2, -1, 1, 0}, +/* 3 */ { 3, s_7_3, -1, 1, 0}, +/* 4 */ { 5, s_7_4, -1, 1, 0}, +/* 5 */ { 5, s_7_5, -1, 1, 0}, +/* 6 */ { 2, s_7_6, -1, 1, 0}, +/* 7 */ { 3, s_7_7, -1, 1, 0}, +/* 8 */ { 3, s_7_8, -1, 1, 0}, +/* 9 */ { 4, s_7_9, -1, 1, 0}, +/* 10 */ { 5, s_7_10, -1, 1, 0}, +/* 11 */ { 2, s_7_11, -1, 1, 0} +}; + +static symbol s_8_0[3] = { 'a', 'b', 'a' }; +static symbol s_8_1[3] = { 'a', 'd', 'a' }; +static symbol s_8_2[3] = { 'i', 'd', 'a' }; +static symbol s_8_3[3] = { 'a', 'r', 'a' }; +static symbol s_8_4[4] = { 'i', 'e', 'r', 'a' }; +static symbol s_8_5[2] = { 0xED, 'a' }; +static symbol s_8_6[4] = { 'a', 'r', 0xED, 'a' }; +static symbol s_8_7[4] = { 'e', 'r', 0xED, 'a' }; +static symbol s_8_8[4] = { 'i', 'r', 0xED, 'a' }; +static symbol s_8_9[2] = { 'a', 'd' }; +static symbol s_8_10[2] = { 'e', 'd' }; +static symbol s_8_11[2] = { 'i', 'd' }; +static symbol s_8_12[3] = { 'a', 's', 'e' }; +static symbol s_8_13[4] = { 'i', 'e', 's', 'e' }; +static symbol s_8_14[4] = { 'a', 's', 't', 'e' }; +static symbol s_8_15[4] = { 'i', 's', 't', 'e' }; +static symbol s_8_16[2] = { 'a', 'n' }; +static symbol s_8_17[4] = { 'a', 'b', 'a', 'n' }; +static symbol s_8_18[4] = { 'a', 'r', 'a', 'n' }; +static symbol s_8_19[5] = { 'i', 'e', 'r', 'a', 'n' }; +static symbol s_8_20[3] = { 0xED, 'a', 'n' }; +static symbol s_8_21[5] = { 'a', 'r', 0xED, 'a', 'n' }; +static symbol s_8_22[5] = { 'e', 'r', 0xED, 'a', 'n' }; +static symbol s_8_23[5] = { 'i', 'r', 0xED, 'a', 'n' }; +static symbol s_8_24[2] = { 'e', 'n' }; +static symbol s_8_25[4] = { 'a', 's', 'e', 'n' }; +static symbol s_8_26[5] = { 'i', 'e', 's', 'e', 'n' }; +static symbol s_8_27[4] = { 'a', 'r', 'o', 'n' }; +static symbol s_8_28[5] = { 'i', 'e', 'r', 'o', 'n' }; +static symbol s_8_29[4] = { 'a', 'r', 0xE1, 'n' }; +static symbol s_8_30[4] = { 'e', 'r', 0xE1, 'n' }; +static symbol s_8_31[4] = { 'i', 'r', 0xE1, 'n' }; +static symbol s_8_32[3] = { 'a', 'd', 'o' }; +static symbol s_8_33[3] = { 'i', 'd', 'o' }; +static symbol s_8_34[4] = { 'a', 'n', 'd', 'o' }; +static symbol s_8_35[5] = { 'i', 'e', 'n', 'd', 'o' }; +static symbol s_8_36[2] = { 'a', 'r' }; +static symbol s_8_37[2] = { 'e', 'r' }; +static symbol s_8_38[2] = { 'i', 'r' }; +static symbol s_8_39[2] = { 'a', 's' }; +static symbol s_8_40[4] = { 'a', 'b', 'a', 's' }; +static symbol s_8_41[4] = { 'a', 'd', 'a', 's' }; +static symbol s_8_42[4] = { 'i', 'd', 'a', 's' }; +static symbol s_8_43[4] = { 'a', 'r', 'a', 's' }; +static symbol s_8_44[5] = { 'i', 'e', 'r', 'a', 's' }; +static symbol s_8_45[3] = { 0xED, 'a', 's' }; +static symbol s_8_46[5] = { 'a', 'r', 0xED, 'a', 's' }; +static symbol s_8_47[5] = { 'e', 'r', 0xED, 'a', 's' }; +static symbol s_8_48[5] = { 'i', 'r', 0xED, 'a', 's' }; +static symbol s_8_49[2] = { 'e', 's' }; +static symbol s_8_50[4] = { 'a', 's', 'e', 's' }; +static symbol s_8_51[5] = { 'i', 'e', 's', 'e', 's' }; +static symbol s_8_52[5] = { 'a', 'b', 'a', 'i', 's' }; +static symbol s_8_53[5] = { 'a', 'r', 'a', 'i', 's' }; +static symbol s_8_54[6] = { 'i', 'e', 'r', 'a', 'i', 's' }; +static symbol s_8_55[4] = { 0xED, 'a', 'i', 's' }; +static symbol s_8_56[6] = { 'a', 'r', 0xED, 'a', 'i', 's' }; +static symbol s_8_57[6] = { 'e', 'r', 0xED, 'a', 'i', 's' }; +static symbol s_8_58[6] = { 'i', 'r', 0xED, 'a', 'i', 's' }; +static symbol s_8_59[5] = { 'a', 's', 'e', 'i', 's' }; +static symbol s_8_60[6] = { 'i', 'e', 's', 'e', 'i', 's' }; +static symbol s_8_61[6] = { 'a', 's', 't', 'e', 'i', 's' }; +static symbol s_8_62[6] = { 'i', 's', 't', 'e', 'i', 's' }; +static symbol s_8_63[3] = { 0xE1, 'i', 's' }; +static symbol s_8_64[3] = { 0xE9, 'i', 's' }; +static symbol s_8_65[5] = { 'a', 'r', 0xE9, 'i', 's' }; +static symbol s_8_66[5] = { 'e', 'r', 0xE9, 'i', 's' }; +static symbol s_8_67[5] = { 'i', 'r', 0xE9, 'i', 's' }; +static symbol s_8_68[4] = { 'a', 'd', 'o', 's' }; +static symbol s_8_69[4] = { 'i', 'd', 'o', 's' }; +static symbol s_8_70[4] = { 'a', 'm', 'o', 's' }; +static symbol s_8_71[6] = { 0xE1, 'b', 'a', 'm', 'o', 's' }; +static symbol s_8_72[6] = { 0xE1, 'r', 'a', 'm', 'o', 's' }; +static symbol s_8_73[7] = { 'i', 0xE9, 'r', 'a', 'm', 'o', 's' }; +static symbol s_8_74[5] = { 0xED, 'a', 'm', 'o', 's' }; +static symbol s_8_75[7] = { 'a', 'r', 0xED, 'a', 'm', 'o', 's' }; +static symbol s_8_76[7] = { 'e', 'r', 0xED, 'a', 'm', 'o', 's' }; +static symbol s_8_77[7] = { 'i', 'r', 0xED, 'a', 'm', 'o', 's' }; +static symbol s_8_78[4] = { 'e', 'm', 'o', 's' }; +static symbol s_8_79[6] = { 'a', 'r', 'e', 'm', 'o', 's' }; +static symbol s_8_80[6] = { 'e', 'r', 'e', 'm', 'o', 's' }; +static symbol s_8_81[6] = { 'i', 'r', 'e', 'm', 'o', 's' }; +static symbol s_8_82[6] = { 0xE1, 's', 'e', 'm', 'o', 's' }; +static symbol s_8_83[7] = { 'i', 0xE9, 's', 'e', 'm', 'o', 's' }; +static symbol s_8_84[4] = { 'i', 'm', 'o', 's' }; +static symbol s_8_85[4] = { 'a', 'r', 0xE1, 's' }; +static symbol s_8_86[4] = { 'e', 'r', 0xE1, 's' }; +static symbol s_8_87[4] = { 'i', 'r', 0xE1, 's' }; +static symbol s_8_88[2] = { 0xED, 's' }; +static symbol s_8_89[3] = { 'a', 'r', 0xE1 }; +static symbol s_8_90[3] = { 'e', 'r', 0xE1 }; +static symbol s_8_91[3] = { 'i', 'r', 0xE1 }; +static symbol s_8_92[3] = { 'a', 'r', 0xE9 }; +static symbol s_8_93[3] = { 'e', 'r', 0xE9 }; +static symbol s_8_94[3] = { 'i', 'r', 0xE9 }; +static symbol s_8_95[2] = { 'i', 0xF3 }; + +static struct among a_8[96] = +{ +/* 0 */ { 3, s_8_0, -1, 2, 0}, +/* 1 */ { 3, s_8_1, -1, 2, 0}, +/* 2 */ { 3, s_8_2, -1, 2, 0}, +/* 3 */ { 3, s_8_3, -1, 2, 0}, +/* 4 */ { 4, s_8_4, -1, 2, 0}, +/* 5 */ { 2, s_8_5, -1, 2, 0}, +/* 6 */ { 4, s_8_6, 5, 2, 0}, +/* 7 */ { 4, s_8_7, 5, 2, 0}, +/* 8 */ { 4, s_8_8, 5, 2, 0}, +/* 9 */ { 2, s_8_9, -1, 2, 0}, +/* 10 */ { 2, s_8_10, -1, 2, 0}, +/* 11 */ { 2, s_8_11, -1, 2, 0}, +/* 12 */ { 3, s_8_12, -1, 2, 0}, +/* 13 */ { 4, s_8_13, -1, 2, 0}, +/* 14 */ { 4, s_8_14, -1, 2, 0}, +/* 15 */ { 4, s_8_15, -1, 2, 0}, +/* 16 */ { 2, s_8_16, -1, 2, 0}, +/* 17 */ { 4, s_8_17, 16, 2, 0}, +/* 18 */ { 4, s_8_18, 16, 2, 0}, +/* 19 */ { 5, s_8_19, 16, 2, 0}, +/* 20 */ { 3, s_8_20, 16, 2, 0}, +/* 21 */ { 5, s_8_21, 20, 2, 0}, +/* 22 */ { 5, s_8_22, 20, 2, 0}, +/* 23 */ { 5, s_8_23, 20, 2, 0}, +/* 24 */ { 2, s_8_24, -1, 1, 0}, +/* 25 */ { 4, s_8_25, 24, 2, 0}, +/* 26 */ { 5, s_8_26, 24, 2, 0}, +/* 27 */ { 4, s_8_27, -1, 2, 0}, +/* 28 */ { 5, s_8_28, -1, 2, 0}, +/* 29 */ { 4, s_8_29, -1, 2, 0}, +/* 30 */ { 4, s_8_30, -1, 2, 0}, +/* 31 */ { 4, s_8_31, -1, 2, 0}, +/* 32 */ { 3, s_8_32, -1, 2, 0}, +/* 33 */ { 3, s_8_33, -1, 2, 0}, +/* 34 */ { 4, s_8_34, -1, 2, 0}, +/* 35 */ { 5, s_8_35, -1, 2, 0}, +/* 36 */ { 2, s_8_36, -1, 2, 0}, +/* 37 */ { 2, s_8_37, -1, 2, 0}, +/* 38 */ { 2, s_8_38, -1, 2, 0}, +/* 39 */ { 2, s_8_39, -1, 2, 0}, +/* 40 */ { 4, s_8_40, 39, 2, 0}, +/* 41 */ { 4, s_8_41, 39, 2, 0}, +/* 42 */ { 4, s_8_42, 39, 2, 0}, +/* 43 */ { 4, s_8_43, 39, 2, 0}, +/* 44 */ { 5, s_8_44, 39, 2, 0}, +/* 45 */ { 3, s_8_45, 39, 2, 0}, +/* 46 */ { 5, s_8_46, 45, 2, 0}, +/* 47 */ { 5, s_8_47, 45, 2, 0}, +/* 48 */ { 5, s_8_48, 45, 2, 0}, +/* 49 */ { 2, s_8_49, -1, 1, 0}, +/* 50 */ { 4, s_8_50, 49, 2, 0}, +/* 51 */ { 5, s_8_51, 49, 2, 0}, +/* 52 */ { 5, s_8_52, -1, 2, 0}, +/* 53 */ { 5, s_8_53, -1, 2, 0}, +/* 54 */ { 6, s_8_54, -1, 2, 0}, +/* 55 */ { 4, s_8_55, -1, 2, 0}, +/* 56 */ { 6, s_8_56, 55, 2, 0}, +/* 57 */ { 6, s_8_57, 55, 2, 0}, +/* 58 */ { 6, s_8_58, 55, 2, 0}, +/* 59 */ { 5, s_8_59, -1, 2, 0}, +/* 60 */ { 6, s_8_60, -1, 2, 0}, +/* 61 */ { 6, s_8_61, -1, 2, 0}, +/* 62 */ { 6, s_8_62, -1, 2, 0}, +/* 63 */ { 3, s_8_63, -1, 2, 0}, +/* 64 */ { 3, s_8_64, -1, 1, 0}, +/* 65 */ { 5, s_8_65, 64, 2, 0}, +/* 66 */ { 5, s_8_66, 64, 2, 0}, +/* 67 */ { 5, s_8_67, 64, 2, 0}, +/* 68 */ { 4, s_8_68, -1, 2, 0}, +/* 69 */ { 4, s_8_69, -1, 2, 0}, +/* 70 */ { 4, s_8_70, -1, 2, 0}, +/* 71 */ { 6, s_8_71, 70, 2, 0}, +/* 72 */ { 6, s_8_72, 70, 2, 0}, +/* 73 */ { 7, s_8_73, 70, 2, 0}, +/* 74 */ { 5, s_8_74, 70, 2, 0}, +/* 75 */ { 7, s_8_75, 74, 2, 0}, +/* 76 */ { 7, s_8_76, 74, 2, 0}, +/* 77 */ { 7, s_8_77, 74, 2, 0}, +/* 78 */ { 4, s_8_78, -1, 1, 0}, +/* 79 */ { 6, s_8_79, 78, 2, 0}, +/* 80 */ { 6, s_8_80, 78, 2, 0}, +/* 81 */ { 6, s_8_81, 78, 2, 0}, +/* 82 */ { 6, s_8_82, 78, 2, 0}, +/* 83 */ { 7, s_8_83, 78, 2, 0}, +/* 84 */ { 4, s_8_84, -1, 2, 0}, +/* 85 */ { 4, s_8_85, -1, 2, 0}, +/* 86 */ { 4, s_8_86, -1, 2, 0}, +/* 87 */ { 4, s_8_87, -1, 2, 0}, +/* 88 */ { 2, s_8_88, -1, 2, 0}, +/* 89 */ { 3, s_8_89, -1, 2, 0}, +/* 90 */ { 3, s_8_90, -1, 2, 0}, +/* 91 */ { 3, s_8_91, -1, 2, 0}, +/* 92 */ { 3, s_8_92, -1, 2, 0}, +/* 93 */ { 3, s_8_93, -1, 2, 0}, +/* 94 */ { 3, s_8_94, -1, 2, 0}, +/* 95 */ { 2, s_8_95, -1, 2, 0} +}; + +static symbol s_9_0[1] = { 'a' }; +static symbol s_9_1[1] = { 'e' }; +static symbol s_9_2[1] = { 'o' }; +static symbol s_9_3[2] = { 'o', 's' }; +static symbol s_9_4[1] = { 0xE1 }; +static symbol s_9_5[1] = { 0xE9 }; +static symbol s_9_6[1] = { 0xED }; +static symbol s_9_7[1] = { 0xF3 }; + +static struct among a_9[8] = +{ +/* 0 */ { 1, s_9_0, -1, 1, 0}, +/* 1 */ { 1, s_9_1, -1, 2, 0}, +/* 2 */ { 1, s_9_2, -1, 1, 0}, +/* 3 */ { 2, s_9_3, -1, 1, 0}, +/* 4 */ { 1, s_9_4, -1, 1, 0}, +/* 5 */ { 1, s_9_5, -1, 2, 0}, +/* 6 */ { 1, s_9_6, -1, 1, 0}, +/* 7 */ { 1, s_9_7, -1, 1, 0} +}; + +static unsigned char g_v[] = { 17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 4, 10 }; + +static symbol s_0[] = { 'a' }; +static symbol s_1[] = { 'e' }; +static symbol s_2[] = { 'i' }; +static symbol s_3[] = { 'o' }; +static symbol s_4[] = { 'u' }; +static symbol s_5[] = { 'i', 'e', 'n', 'd', 'o' }; +static symbol s_6[] = { 'a', 'n', 'd', 'o' }; +static symbol s_7[] = { 'a', 'r' }; +static symbol s_8[] = { 'e', 'r' }; +static symbol s_9[] = { 'i', 'r' }; +static symbol s_10[] = { 'u' }; +static symbol s_11[] = { 'i', 'c' }; +static symbol s_12[] = { 'l', 'o', 'g' }; +static symbol s_13[] = { 'u' }; +static symbol s_14[] = { 'e', 'n', 't', 'e' }; +static symbol s_15[] = { 'a', 't' }; +static symbol s_16[] = { 'a', 't' }; +static symbol s_17[] = { 'u' }; +static symbol s_18[] = { 'u' }; +static symbol s_19[] = { 'g' }; +static symbol s_20[] = { 'u' }; +static symbol s_21[] = { 'g' }; + +static int r_mark_regions(struct SN_env * z) { + z->I[0] = z->l; + z->I[1] = z->l; + z->I[2] = z->l; + { int c = z->c; /* do, line 37 */ + { int c = z->c; /* or, line 39 */ + if (!(in_grouping(z, g_v, 97, 252))) goto lab2; + { int c = z->c; /* or, line 38 */ + if (!(out_grouping(z, g_v, 97, 252))) goto lab4; + while(1) { /* gopast, line 38 */ + if (!(in_grouping(z, g_v, 97, 252))) goto lab5; + break; + lab5: + if (z->c >= z->l) goto lab4; + z->c++; /* gopast, line 38 */ + } + goto lab3; + lab4: + z->c = c; + if (!(in_grouping(z, g_v, 97, 252))) goto lab2; + while(1) { /* gopast, line 38 */ + if (!(out_grouping(z, g_v, 97, 252))) goto lab6; + break; + lab6: + if (z->c >= z->l) goto lab2; + z->c++; /* gopast, line 38 */ + } + } + lab3: + goto lab1; + lab2: + z->c = c; + if (!(out_grouping(z, g_v, 97, 252))) goto lab0; + { int c = z->c; /* or, line 40 */ + if (!(out_grouping(z, g_v, 97, 252))) goto lab8; + while(1) { /* gopast, line 40 */ + if (!(in_grouping(z, g_v, 97, 252))) goto lab9; + break; + lab9: + if (z->c >= z->l) goto lab8; + z->c++; /* gopast, line 40 */ + } + goto lab7; + lab8: + z->c = c; + if (!(in_grouping(z, g_v, 97, 252))) goto lab0; + if (z->c >= z->l) goto lab0; + z->c++; /* next, line 40 */ + } + lab7: + ; + } + lab1: + z->I[0] = z->c; /* setmark pV, line 41 */ + lab0: + z->c = c; + } + { int c = z->c; /* do, line 43 */ + while(1) { /* gopast, line 44 */ + if (!(in_grouping(z, g_v, 97, 252))) goto lab11; + break; + lab11: + if (z->c >= z->l) goto lab10; + z->c++; /* gopast, line 44 */ + } + while(1) { /* gopast, line 44 */ + if (!(out_grouping(z, g_v, 97, 252))) goto lab12; + break; + lab12: + if (z->c >= z->l) goto lab10; + z->c++; /* gopast, line 44 */ + } + z->I[1] = z->c; /* setmark p1, line 44 */ + while(1) { /* gopast, line 45 */ + if (!(in_grouping(z, g_v, 97, 252))) goto lab13; + break; + lab13: + if (z->c >= z->l) goto lab10; + z->c++; /* gopast, line 45 */ + } + while(1) { /* gopast, line 45 */ + if (!(out_grouping(z, g_v, 97, 252))) goto lab14; + break; + lab14: + if (z->c >= z->l) goto lab10; + z->c++; /* gopast, line 45 */ + } + z->I[2] = z->c; /* setmark p2, line 45 */ + lab10: + z->c = c; + } + return 1; +} + +static int r_postlude(struct SN_env * z) { + int among_var; + while(1) { /* repeat, line 49 */ + int c = z->c; + z->bra = z->c; /* [, line 50 */ + among_var = find_among(z, a_0, 6); /* substring, line 50 */ + if (!(among_var)) goto lab0; + z->ket = z->c; /* ], line 50 */ + switch(among_var) { + case 0: goto lab0; + case 1: + { int ret; + ret = slice_from_s(z, 1, s_0); /* <-, line 51 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 1, s_1); /* <-, line 52 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_from_s(z, 1, s_2); /* <-, line 53 */ + if (ret < 0) return ret; + } + break; + case 4: + { int ret; + ret = slice_from_s(z, 1, s_3); /* <-, line 54 */ + if (ret < 0) return ret; + } + break; + case 5: + { int ret; + ret = slice_from_s(z, 1, s_4); /* <-, line 55 */ + if (ret < 0) return ret; + } + break; + case 6: + if (z->c >= z->l) goto lab0; + z->c++; /* next, line 57 */ + break; + } + continue; + lab0: + z->c = c; + break; + } + return 1; +} + +static int r_RV(struct SN_env * z) { + if (!(z->I[0] <= z->c)) return 0; + return 1; +} + +static int r_R1(struct SN_env * z) { + if (!(z->I[1] <= z->c)) return 0; + return 1; +} + +static int r_R2(struct SN_env * z) { + if (!(z->I[2] <= z->c)) return 0; + return 1; +} + +static int r_attached_pronoun(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 68 */ + if (!(find_among_b(z, a_1, 13))) return 0; /* substring, line 68 */ + z->bra = z->c; /* ], line 68 */ + among_var = find_among_b(z, a_2, 11); /* substring, line 72 */ + if (!(among_var)) return 0; + { int ret = r_RV(z); + if (ret == 0) return 0; /* call RV, line 72 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: return 0; + case 1: + z->bra = z->c; /* ], line 73 */ + { int ret; + ret = slice_from_s(z, 5, s_5); /* <-, line 73 */ + if (ret < 0) return ret; + } + break; + case 2: + z->bra = z->c; /* ], line 74 */ + { int ret; + ret = slice_from_s(z, 4, s_6); /* <-, line 74 */ + if (ret < 0) return ret; + } + break; + case 3: + z->bra = z->c; /* ], line 75 */ + { int ret; + ret = slice_from_s(z, 2, s_7); /* <-, line 75 */ + if (ret < 0) return ret; + } + break; + case 4: + z->bra = z->c; /* ], line 76 */ + { int ret; + ret = slice_from_s(z, 2, s_8); /* <-, line 76 */ + if (ret < 0) return ret; + } + break; + case 5: + z->bra = z->c; /* ], line 77 */ + { int ret; + ret = slice_from_s(z, 2, s_9); /* <-, line 77 */ + if (ret < 0) return ret; + } + break; + case 6: + { int ret; + ret = slice_del(z); /* delete, line 81 */ + if (ret < 0) return ret; + } + break; + case 7: + if (!(eq_s_b(z, 1, s_10))) return 0; + { int ret; + ret = slice_del(z); /* delete, line 82 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_standard_suffix(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 87 */ + among_var = find_among_b(z, a_6, 46); /* substring, line 87 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 87 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 99 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 99 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 105 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 105 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 106 */ + z->ket = z->c; /* [, line 106 */ + if (!(eq_s_b(z, 2, s_11))) { z->c = z->l - m; goto lab0; } + z->bra = z->c; /* ], line 106 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab0; } /* call R2, line 106 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 106 */ + if (ret < 0) return ret; + } + lab0: + ; + } + break; + case 3: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 111 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 3, s_12); /* <-, line 111 */ + if (ret < 0) return ret; + } + break; + case 4: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 115 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 1, s_13); /* <-, line 115 */ + if (ret < 0) return ret; + } + break; + case 5: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 119 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 4, s_14); /* <-, line 119 */ + if (ret < 0) return ret; + } + break; + case 6: + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 123 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 123 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 124 */ + z->ket = z->c; /* [, line 125 */ + among_var = find_among_b(z, a_3, 4); /* substring, line 125 */ + if (!(among_var)) { z->c = z->l - m; goto lab1; } + z->bra = z->c; /* ], line 125 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab1; } /* call R2, line 125 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 125 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: { z->c = z->l - m; goto lab1; } + case 1: + z->ket = z->c; /* [, line 126 */ + if (!(eq_s_b(z, 2, s_15))) { z->c = z->l - m; goto lab1; } + z->bra = z->c; /* ], line 126 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab1; } /* call R2, line 126 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 126 */ + if (ret < 0) return ret; + } + break; + } + lab1: + ; + } + break; + case 7: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 135 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 135 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 136 */ + z->ket = z->c; /* [, line 137 */ + among_var = find_among_b(z, a_4, 3); /* substring, line 137 */ + if (!(among_var)) { z->c = z->l - m; goto lab2; } + z->bra = z->c; /* ], line 137 */ + switch(among_var) { + case 0: { z->c = z->l - m; goto lab2; } + case 1: + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab2; } /* call R2, line 140 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 140 */ + if (ret < 0) return ret; + } + break; + } + lab2: + ; + } + break; + case 8: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 147 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 147 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 148 */ + z->ket = z->c; /* [, line 149 */ + among_var = find_among_b(z, a_5, 3); /* substring, line 149 */ + if (!(among_var)) { z->c = z->l - m; goto lab3; } + z->bra = z->c; /* ], line 149 */ + switch(among_var) { + case 0: { z->c = z->l - m; goto lab3; } + case 1: + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab3; } /* call R2, line 152 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 152 */ + if (ret < 0) return ret; + } + break; + } + lab3: + ; + } + break; + case 9: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 159 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 159 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 160 */ + z->ket = z->c; /* [, line 161 */ + if (!(eq_s_b(z, 2, s_16))) { z->c = z->l - m; goto lab4; } + z->bra = z->c; /* ], line 161 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab4; } /* call R2, line 161 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 161 */ + if (ret < 0) return ret; + } + lab4: + ; + } + break; + } + return 1; +} + +static int r_y_verb_suffix(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 168 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 168 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 168 */ + among_var = find_among_b(z, a_7, 12); /* substring, line 168 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 168 */ + z->lb = m3; + } + switch(among_var) { + case 0: return 0; + case 1: + if (!(eq_s_b(z, 1, s_17))) return 0; + { int ret; + ret = slice_del(z); /* delete, line 171 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_verb_suffix(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 176 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 176 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 176 */ + among_var = find_among_b(z, a_8, 96); /* substring, line 176 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 176 */ + z->lb = m3; + } + switch(among_var) { + case 0: return 0; + case 1: + { int m = z->l - z->c; (void) m; /* try, line 179 */ + if (!(eq_s_b(z, 1, s_18))) { z->c = z->l - m; goto lab0; } + { int m_test = z->l - z->c; /* test, line 179 */ + if (!(eq_s_b(z, 1, s_19))) { z->c = z->l - m; goto lab0; } + z->c = z->l - m_test; + } + lab0: + ; + } + z->bra = z->c; /* ], line 179 */ + { int ret; + ret = slice_del(z); /* delete, line 179 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_del(z); /* delete, line 200 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_residual_suffix(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 205 */ + among_var = find_among_b(z, a_9, 8); /* substring, line 205 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 205 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret = r_RV(z); + if (ret == 0) return 0; /* call RV, line 208 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 208 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret = r_RV(z); + if (ret == 0) return 0; /* call RV, line 210 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 210 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 210 */ + z->ket = z->c; /* [, line 210 */ + if (!(eq_s_b(z, 1, s_20))) { z->c = z->l - m; goto lab0; } + z->bra = z->c; /* ], line 210 */ + { int m_test = z->l - z->c; /* test, line 210 */ + if (!(eq_s_b(z, 1, s_21))) { z->c = z->l - m; goto lab0; } + z->c = z->l - m_test; + } + { int ret = r_RV(z); + if (ret == 0) { z->c = z->l - m; goto lab0; } /* call RV, line 210 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 210 */ + if (ret < 0) return ret; + } + lab0: + ; + } + break; + } + return 1; +} + +extern int spanish_ISO_8859_1_stem(struct SN_env * z) { + { int c = z->c; /* do, line 216 */ + { int ret = r_mark_regions(z); + if (ret == 0) goto lab0; /* call mark_regions, line 216 */ + if (ret < 0) return ret; + } + lab0: + z->c = c; + } + z->lb = z->c; z->c = z->l; /* backwards, line 217 */ + + { int m = z->l - z->c; (void) m; /* do, line 218 */ + { int ret = r_attached_pronoun(z); + if (ret == 0) goto lab1; /* call attached_pronoun, line 218 */ + if (ret < 0) return ret; + } + lab1: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 219 */ + { int m = z->l - z->c; (void) m; /* or, line 219 */ + { int ret = r_standard_suffix(z); + if (ret == 0) goto lab4; /* call standard_suffix, line 219 */ + if (ret < 0) return ret; + } + goto lab3; + lab4: + z->c = z->l - m; + { int ret = r_y_verb_suffix(z); + if (ret == 0) goto lab5; /* call y_verb_suffix, line 220 */ + if (ret < 0) return ret; + } + goto lab3; + lab5: + z->c = z->l - m; + { int ret = r_verb_suffix(z); + if (ret == 0) goto lab2; /* call verb_suffix, line 221 */ + if (ret < 0) return ret; + } + } + lab3: + lab2: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 223 */ + { int ret = r_residual_suffix(z); + if (ret == 0) goto lab6; /* call residual_suffix, line 223 */ + if (ret < 0) return ret; + } + lab6: + z->c = z->l - m; + } + z->c = z->lb; + { int c = z->c; /* do, line 225 */ + { int ret = r_postlude(z); + if (ret == 0) goto lab7; /* call postlude, line 225 */ + if (ret < 0) return ret; + } + lab7: + z->c = c; + } + return 1; +} + +extern struct SN_env * spanish_ISO_8859_1_create_env(void) { return SN_create_env(0, 3, 0); } + +extern void spanish_ISO_8859_1_close_env(struct SN_env * z) { SN_close_env(z); } + diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_spanish.h b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_spanish.h new file mode 100644 index 0000000..83f1498 --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_spanish.h @@ -0,0 +1,16 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern struct SN_env * spanish_ISO_8859_1_create_env(void); +extern void spanish_ISO_8859_1_close_env(struct SN_env * z); + +extern int spanish_ISO_8859_1_stem(struct SN_env * z); + +#ifdef __cplusplus +} +#endif + diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_swedish.c b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_swedish.c new file mode 100644 index 0000000..c571fd9 --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_swedish.c @@ -0,0 +1,307 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#include "../runtime/header.h" + +extern int swedish_ISO_8859_1_stem(struct SN_env * z); +static int r_other_suffix(struct SN_env * z); +static int r_consonant_pair(struct SN_env * z); +static int r_main_suffix(struct SN_env * z); +static int r_mark_regions(struct SN_env * z); + +extern struct SN_env * swedish_ISO_8859_1_create_env(void); +extern void swedish_ISO_8859_1_close_env(struct SN_env * z); + +static symbol s_0_0[1] = { 'a' }; +static symbol s_0_1[4] = { 'a', 'r', 'n', 'a' }; +static symbol s_0_2[4] = { 'e', 'r', 'n', 'a' }; +static symbol s_0_3[7] = { 'h', 'e', 't', 'e', 'r', 'n', 'a' }; +static symbol s_0_4[4] = { 'o', 'r', 'n', 'a' }; +static symbol s_0_5[2] = { 'a', 'd' }; +static symbol s_0_6[1] = { 'e' }; +static symbol s_0_7[3] = { 'a', 'd', 'e' }; +static symbol s_0_8[4] = { 'a', 'n', 'd', 'e' }; +static symbol s_0_9[4] = { 'a', 'r', 'n', 'e' }; +static symbol s_0_10[3] = { 'a', 'r', 'e' }; +static symbol s_0_11[4] = { 'a', 's', 't', 'e' }; +static symbol s_0_12[2] = { 'e', 'n' }; +static symbol s_0_13[5] = { 'a', 'n', 'd', 'e', 'n' }; +static symbol s_0_14[4] = { 'a', 'r', 'e', 'n' }; +static symbol s_0_15[5] = { 'h', 'e', 't', 'e', 'n' }; +static symbol s_0_16[3] = { 'e', 'r', 'n' }; +static symbol s_0_17[2] = { 'a', 'r' }; +static symbol s_0_18[2] = { 'e', 'r' }; +static symbol s_0_19[5] = { 'h', 'e', 't', 'e', 'r' }; +static symbol s_0_20[2] = { 'o', 'r' }; +static symbol s_0_21[1] = { 's' }; +static symbol s_0_22[2] = { 'a', 's' }; +static symbol s_0_23[5] = { 'a', 'r', 'n', 'a', 's' }; +static symbol s_0_24[5] = { 'e', 'r', 'n', 'a', 's' }; +static symbol s_0_25[5] = { 'o', 'r', 'n', 'a', 's' }; +static symbol s_0_26[2] = { 'e', 's' }; +static symbol s_0_27[4] = { 'a', 'd', 'e', 's' }; +static symbol s_0_28[5] = { 'a', 'n', 'd', 'e', 's' }; +static symbol s_0_29[3] = { 'e', 'n', 's' }; +static symbol s_0_30[5] = { 'a', 'r', 'e', 'n', 's' }; +static symbol s_0_31[6] = { 'h', 'e', 't', 'e', 'n', 's' }; +static symbol s_0_32[4] = { 'e', 'r', 'n', 's' }; +static symbol s_0_33[2] = { 'a', 't' }; +static symbol s_0_34[5] = { 'a', 'n', 'd', 'e', 't' }; +static symbol s_0_35[3] = { 'h', 'e', 't' }; +static symbol s_0_36[3] = { 'a', 's', 't' }; + +static struct among a_0[37] = +{ +/* 0 */ { 1, s_0_0, -1, 1, 0}, +/* 1 */ { 4, s_0_1, 0, 1, 0}, +/* 2 */ { 4, s_0_2, 0, 1, 0}, +/* 3 */ { 7, s_0_3, 2, 1, 0}, +/* 4 */ { 4, s_0_4, 0, 1, 0}, +/* 5 */ { 2, s_0_5, -1, 1, 0}, +/* 6 */ { 1, s_0_6, -1, 1, 0}, +/* 7 */ { 3, s_0_7, 6, 1, 0}, +/* 8 */ { 4, s_0_8, 6, 1, 0}, +/* 9 */ { 4, s_0_9, 6, 1, 0}, +/* 10 */ { 3, s_0_10, 6, 1, 0}, +/* 11 */ { 4, s_0_11, 6, 1, 0}, +/* 12 */ { 2, s_0_12, -1, 1, 0}, +/* 13 */ { 5, s_0_13, 12, 1, 0}, +/* 14 */ { 4, s_0_14, 12, 1, 0}, +/* 15 */ { 5, s_0_15, 12, 1, 0}, +/* 16 */ { 3, s_0_16, -1, 1, 0}, +/* 17 */ { 2, s_0_17, -1, 1, 0}, +/* 18 */ { 2, s_0_18, -1, 1, 0}, +/* 19 */ { 5, s_0_19, 18, 1, 0}, +/* 20 */ { 2, s_0_20, -1, 1, 0}, +/* 21 */ { 1, s_0_21, -1, 2, 0}, +/* 22 */ { 2, s_0_22, 21, 1, 0}, +/* 23 */ { 5, s_0_23, 22, 1, 0}, +/* 24 */ { 5, s_0_24, 22, 1, 0}, +/* 25 */ { 5, s_0_25, 22, 1, 0}, +/* 26 */ { 2, s_0_26, 21, 1, 0}, +/* 27 */ { 4, s_0_27, 26, 1, 0}, +/* 28 */ { 5, s_0_28, 26, 1, 0}, +/* 29 */ { 3, s_0_29, 21, 1, 0}, +/* 30 */ { 5, s_0_30, 29, 1, 0}, +/* 31 */ { 6, s_0_31, 29, 1, 0}, +/* 32 */ { 4, s_0_32, 21, 1, 0}, +/* 33 */ { 2, s_0_33, -1, 1, 0}, +/* 34 */ { 5, s_0_34, -1, 1, 0}, +/* 35 */ { 3, s_0_35, -1, 1, 0}, +/* 36 */ { 3, s_0_36, -1, 1, 0} +}; + +static symbol s_1_0[2] = { 'd', 'd' }; +static symbol s_1_1[2] = { 'g', 'd' }; +static symbol s_1_2[2] = { 'n', 'n' }; +static symbol s_1_3[2] = { 'd', 't' }; +static symbol s_1_4[2] = { 'g', 't' }; +static symbol s_1_5[2] = { 'k', 't' }; +static symbol s_1_6[2] = { 't', 't' }; + +static struct among a_1[7] = +{ +/* 0 */ { 2, s_1_0, -1, -1, 0}, +/* 1 */ { 2, s_1_1, -1, -1, 0}, +/* 2 */ { 2, s_1_2, -1, -1, 0}, +/* 3 */ { 2, s_1_3, -1, -1, 0}, +/* 4 */ { 2, s_1_4, -1, -1, 0}, +/* 5 */ { 2, s_1_5, -1, -1, 0}, +/* 6 */ { 2, s_1_6, -1, -1, 0} +}; + +static symbol s_2_0[2] = { 'i', 'g' }; +static symbol s_2_1[3] = { 'l', 'i', 'g' }; +static symbol s_2_2[3] = { 'e', 'l', 's' }; +static symbol s_2_3[5] = { 'f', 'u', 'l', 'l', 't' }; +static symbol s_2_4[4] = { 'l', 0xF6, 's', 't' }; + +static struct among a_2[5] = +{ +/* 0 */ { 2, s_2_0, -1, 1, 0}, +/* 1 */ { 3, s_2_1, 0, 1, 0}, +/* 2 */ { 3, s_2_2, -1, 1, 0}, +/* 3 */ { 5, s_2_3, -1, 3, 0}, +/* 4 */ { 4, s_2_4, -1, 2, 0} +}; + +static unsigned char g_v[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 32 }; + +static unsigned char g_s_ending[] = { 119, 127, 149 }; + +static symbol s_0[] = { 'l', 0xF6, 's' }; +static symbol s_1[] = { 'f', 'u', 'l', 'l' }; + +static int r_mark_regions(struct SN_env * z) { + z->I[0] = z->l; + { int c_test = z->c; /* test, line 29 */ + { int c = z->c + 3; + if (0 > c || c > z->l) return 0; + z->c = c; /* hop, line 29 */ + } + z->I[1] = z->c; /* setmark x, line 29 */ + z->c = c_test; + } + while(1) { /* goto, line 30 */ + int c = z->c; + if (!(in_grouping(z, g_v, 97, 246))) goto lab0; + z->c = c; + break; + lab0: + z->c = c; + if (z->c >= z->l) return 0; + z->c++; /* goto, line 30 */ + } + while(1) { /* gopast, line 30 */ + if (!(out_grouping(z, g_v, 97, 246))) goto lab1; + break; + lab1: + if (z->c >= z->l) return 0; + z->c++; /* gopast, line 30 */ + } + z->I[0] = z->c; /* setmark p1, line 30 */ + /* try, line 31 */ + if (!(z->I[0] < z->I[1])) goto lab2; + z->I[0] = z->I[1]; +lab2: + return 1; +} + +static int r_main_suffix(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 37 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 37 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 37 */ + among_var = find_among_b(z, a_0, 37); /* substring, line 37 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 37 */ + z->lb = m3; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 44 */ + if (ret < 0) return ret; + } + break; + case 2: + if (!(in_grouping_b(z, g_s_ending, 98, 121))) return 0; + { int ret; + ret = slice_del(z); /* delete, line 46 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_consonant_pair(struct SN_env * z) { + { int m3; /* setlimit, line 50 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 50 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + { int m = z->l - z->c; (void) m; /* and, line 52 */ + if (!(find_among_b(z, a_1, 7))) { z->lb = m3; return 0; } /* among, line 51 */ + z->c = z->l - m; + z->ket = z->c; /* [, line 52 */ + if (z->c <= z->lb) { z->lb = m3; return 0; } + z->c--; /* next, line 52 */ + z->bra = z->c; /* ], line 52 */ + { int ret; + ret = slice_del(z); /* delete, line 52 */ + if (ret < 0) return ret; + } + } + z->lb = m3; + } + return 1; +} + +static int r_other_suffix(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 55 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 55 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 56 */ + among_var = find_among_b(z, a_2, 5); /* substring, line 56 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 56 */ + switch(among_var) { + case 0: { z->lb = m3; return 0; } + case 1: + { int ret; + ret = slice_del(z); /* delete, line 57 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 3, s_0); /* <-, line 58 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_from_s(z, 4, s_1); /* <-, line 59 */ + if (ret < 0) return ret; + } + break; + } + z->lb = m3; + } + return 1; +} + +extern int swedish_ISO_8859_1_stem(struct SN_env * z) { + { int c = z->c; /* do, line 66 */ + { int ret = r_mark_regions(z); + if (ret == 0) goto lab0; /* call mark_regions, line 66 */ + if (ret < 0) return ret; + } + lab0: + z->c = c; + } + z->lb = z->c; z->c = z->l; /* backwards, line 67 */ + + { int m = z->l - z->c; (void) m; /* do, line 68 */ + { int ret = r_main_suffix(z); + if (ret == 0) goto lab1; /* call main_suffix, line 68 */ + if (ret < 0) return ret; + } + lab1: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 69 */ + { int ret = r_consonant_pair(z); + if (ret == 0) goto lab2; /* call consonant_pair, line 69 */ + if (ret < 0) return ret; + } + lab2: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 70 */ + { int ret = r_other_suffix(z); + if (ret == 0) goto lab3; /* call other_suffix, line 70 */ + if (ret < 0) return ret; + } + lab3: + z->c = z->l - m; + } + z->c = z->lb; + return 1; +} + +extern struct SN_env * swedish_ISO_8859_1_create_env(void) { return SN_create_env(0, 2, 0); } + +extern void swedish_ISO_8859_1_close_env(struct SN_env * z) { SN_close_env(z); } + diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_swedish.h b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_swedish.h new file mode 100644 index 0000000..4184e5c --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_swedish.h @@ -0,0 +1,16 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern struct SN_env * swedish_ISO_8859_1_create_env(void); +extern void swedish_ISO_8859_1_close_env(struct SN_env * z); + +extern int swedish_ISO_8859_1_stem(struct SN_env * z); + +#ifdef __cplusplus +} +#endif + diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_KOI8_R_russian.c b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_KOI8_R_russian.c new file mode 100644 index 0000000..0a68a3b --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_KOI8_R_russian.c @@ -0,0 +1,701 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#include "../runtime/header.h" + +extern int russian_KOI8_R_stem(struct SN_env * z); +static int r_tidy_up(struct SN_env * z); +static int r_derivational(struct SN_env * z); +static int r_noun(struct SN_env * z); +static int r_verb(struct SN_env * z); +static int r_reflexive(struct SN_env * z); +static int r_adjectival(struct SN_env * z); +static int r_adjective(struct SN_env * z); +static int r_perfective_gerund(struct SN_env * z); +static int r_R2(struct SN_env * z); +static int r_mark_regions(struct SN_env * z); + +extern struct SN_env * russian_KOI8_R_create_env(void); +extern void russian_KOI8_R_close_env(struct SN_env * z); + +static symbol s_0_0[3] = { 0xD7, 0xDB, 0xC9 }; +static symbol s_0_1[4] = { 0xC9, 0xD7, 0xDB, 0xC9 }; +static symbol s_0_2[4] = { 0xD9, 0xD7, 0xDB, 0xC9 }; +static symbol s_0_3[1] = { 0xD7 }; +static symbol s_0_4[2] = { 0xC9, 0xD7 }; +static symbol s_0_5[2] = { 0xD9, 0xD7 }; +static symbol s_0_6[5] = { 0xD7, 0xDB, 0xC9, 0xD3, 0xD8 }; +static symbol s_0_7[6] = { 0xC9, 0xD7, 0xDB, 0xC9, 0xD3, 0xD8 }; +static symbol s_0_8[6] = { 0xD9, 0xD7, 0xDB, 0xC9, 0xD3, 0xD8 }; + +static struct among a_0[9] = +{ +/* 0 */ { 3, s_0_0, -1, 1, 0}, +/* 1 */ { 4, s_0_1, 0, 2, 0}, +/* 2 */ { 4, s_0_2, 0, 2, 0}, +/* 3 */ { 1, s_0_3, -1, 1, 0}, +/* 4 */ { 2, s_0_4, 3, 2, 0}, +/* 5 */ { 2, s_0_5, 3, 2, 0}, +/* 6 */ { 5, s_0_6, -1, 1, 0}, +/* 7 */ { 6, s_0_7, 6, 2, 0}, +/* 8 */ { 6, s_0_8, 6, 2, 0} +}; + +static symbol s_1_0[2] = { 0xC0, 0xC0 }; +static symbol s_1_1[2] = { 0xC5, 0xC0 }; +static symbol s_1_2[2] = { 0xCF, 0xC0 }; +static symbol s_1_3[2] = { 0xD5, 0xC0 }; +static symbol s_1_4[2] = { 0xC5, 0xC5 }; +static symbol s_1_5[2] = { 0xC9, 0xC5 }; +static symbol s_1_6[2] = { 0xCF, 0xC5 }; +static symbol s_1_7[2] = { 0xD9, 0xC5 }; +static symbol s_1_8[2] = { 0xC9, 0xC8 }; +static symbol s_1_9[2] = { 0xD9, 0xC8 }; +static symbol s_1_10[3] = { 0xC9, 0xCD, 0xC9 }; +static symbol s_1_11[3] = { 0xD9, 0xCD, 0xC9 }; +static symbol s_1_12[2] = { 0xC5, 0xCA }; +static symbol s_1_13[2] = { 0xC9, 0xCA }; +static symbol s_1_14[2] = { 0xCF, 0xCA }; +static symbol s_1_15[2] = { 0xD9, 0xCA }; +static symbol s_1_16[2] = { 0xC5, 0xCD }; +static symbol s_1_17[2] = { 0xC9, 0xCD }; +static symbol s_1_18[2] = { 0xCF, 0xCD }; +static symbol s_1_19[2] = { 0xD9, 0xCD }; +static symbol s_1_20[3] = { 0xC5, 0xC7, 0xCF }; +static symbol s_1_21[3] = { 0xCF, 0xC7, 0xCF }; +static symbol s_1_22[2] = { 0xC1, 0xD1 }; +static symbol s_1_23[2] = { 0xD1, 0xD1 }; +static symbol s_1_24[3] = { 0xC5, 0xCD, 0xD5 }; +static symbol s_1_25[3] = { 0xCF, 0xCD, 0xD5 }; + +static struct among a_1[26] = +{ +/* 0 */ { 2, s_1_0, -1, 1, 0}, +/* 1 */ { 2, s_1_1, -1, 1, 0}, +/* 2 */ { 2, s_1_2, -1, 1, 0}, +/* 3 */ { 2, s_1_3, -1, 1, 0}, +/* 4 */ { 2, s_1_4, -1, 1, 0}, +/* 5 */ { 2, s_1_5, -1, 1, 0}, +/* 6 */ { 2, s_1_6, -1, 1, 0}, +/* 7 */ { 2, s_1_7, -1, 1, 0}, +/* 8 */ { 2, s_1_8, -1, 1, 0}, +/* 9 */ { 2, s_1_9, -1, 1, 0}, +/* 10 */ { 3, s_1_10, -1, 1, 0}, +/* 11 */ { 3, s_1_11, -1, 1, 0}, +/* 12 */ { 2, s_1_12, -1, 1, 0}, +/* 13 */ { 2, s_1_13, -1, 1, 0}, +/* 14 */ { 2, s_1_14, -1, 1, 0}, +/* 15 */ { 2, s_1_15, -1, 1, 0}, +/* 16 */ { 2, s_1_16, -1, 1, 0}, +/* 17 */ { 2, s_1_17, -1, 1, 0}, +/* 18 */ { 2, s_1_18, -1, 1, 0}, +/* 19 */ { 2, s_1_19, -1, 1, 0}, +/* 20 */ { 3, s_1_20, -1, 1, 0}, +/* 21 */ { 3, s_1_21, -1, 1, 0}, +/* 22 */ { 2, s_1_22, -1, 1, 0}, +/* 23 */ { 2, s_1_23, -1, 1, 0}, +/* 24 */ { 3, s_1_24, -1, 1, 0}, +/* 25 */ { 3, s_1_25, -1, 1, 0} +}; + +static symbol s_2_0[2] = { 0xC5, 0xCD }; +static symbol s_2_1[2] = { 0xCE, 0xCE }; +static symbol s_2_2[2] = { 0xD7, 0xDB }; +static symbol s_2_3[3] = { 0xC9, 0xD7, 0xDB }; +static symbol s_2_4[3] = { 0xD9, 0xD7, 0xDB }; +static symbol s_2_5[1] = { 0xDD }; +static symbol s_2_6[2] = { 0xC0, 0xDD }; +static symbol s_2_7[3] = { 0xD5, 0xC0, 0xDD }; + +static struct among a_2[8] = +{ +/* 0 */ { 2, s_2_0, -1, 1, 0}, +/* 1 */ { 2, s_2_1, -1, 1, 0}, +/* 2 */ { 2, s_2_2, -1, 1, 0}, +/* 3 */ { 3, s_2_3, 2, 2, 0}, +/* 4 */ { 3, s_2_4, 2, 2, 0}, +/* 5 */ { 1, s_2_5, -1, 1, 0}, +/* 6 */ { 2, s_2_6, 5, 1, 0}, +/* 7 */ { 3, s_2_7, 6, 2, 0} +}; + +static symbol s_3_0[2] = { 0xD3, 0xD1 }; +static symbol s_3_1[2] = { 0xD3, 0xD8 }; + +static struct among a_3[2] = +{ +/* 0 */ { 2, s_3_0, -1, 1, 0}, +/* 1 */ { 2, s_3_1, -1, 1, 0} +}; + +static symbol s_4_0[1] = { 0xC0 }; +static symbol s_4_1[2] = { 0xD5, 0xC0 }; +static symbol s_4_2[2] = { 0xCC, 0xC1 }; +static symbol s_4_3[3] = { 0xC9, 0xCC, 0xC1 }; +static symbol s_4_4[3] = { 0xD9, 0xCC, 0xC1 }; +static symbol s_4_5[2] = { 0xCE, 0xC1 }; +static symbol s_4_6[3] = { 0xC5, 0xCE, 0xC1 }; +static symbol s_4_7[3] = { 0xC5, 0xD4, 0xC5 }; +static symbol s_4_8[3] = { 0xC9, 0xD4, 0xC5 }; +static symbol s_4_9[3] = { 0xCA, 0xD4, 0xC5 }; +static symbol s_4_10[4] = { 0xC5, 0xCA, 0xD4, 0xC5 }; +static symbol s_4_11[4] = { 0xD5, 0xCA, 0xD4, 0xC5 }; +static symbol s_4_12[2] = { 0xCC, 0xC9 }; +static symbol s_4_13[3] = { 0xC9, 0xCC, 0xC9 }; +static symbol s_4_14[3] = { 0xD9, 0xCC, 0xC9 }; +static symbol s_4_15[1] = { 0xCA }; +static symbol s_4_16[2] = { 0xC5, 0xCA }; +static symbol s_4_17[2] = { 0xD5, 0xCA }; +static symbol s_4_18[1] = { 0xCC }; +static symbol s_4_19[2] = { 0xC9, 0xCC }; +static symbol s_4_20[2] = { 0xD9, 0xCC }; +static symbol s_4_21[2] = { 0xC5, 0xCD }; +static symbol s_4_22[2] = { 0xC9, 0xCD }; +static symbol s_4_23[2] = { 0xD9, 0xCD }; +static symbol s_4_24[1] = { 0xCE }; +static symbol s_4_25[2] = { 0xC5, 0xCE }; +static symbol s_4_26[2] = { 0xCC, 0xCF }; +static symbol s_4_27[3] = { 0xC9, 0xCC, 0xCF }; +static symbol s_4_28[3] = { 0xD9, 0xCC, 0xCF }; +static symbol s_4_29[2] = { 0xCE, 0xCF }; +static symbol s_4_30[3] = { 0xC5, 0xCE, 0xCF }; +static symbol s_4_31[3] = { 0xCE, 0xCE, 0xCF }; +static symbol s_4_32[2] = { 0xC0, 0xD4 }; +static symbol s_4_33[3] = { 0xD5, 0xC0, 0xD4 }; +static symbol s_4_34[2] = { 0xC5, 0xD4 }; +static symbol s_4_35[3] = { 0xD5, 0xC5, 0xD4 }; +static symbol s_4_36[2] = { 0xC9, 0xD4 }; +static symbol s_4_37[2] = { 0xD1, 0xD4 }; +static symbol s_4_38[2] = { 0xD9, 0xD4 }; +static symbol s_4_39[2] = { 0xD4, 0xD8 }; +static symbol s_4_40[3] = { 0xC9, 0xD4, 0xD8 }; +static symbol s_4_41[3] = { 0xD9, 0xD4, 0xD8 }; +static symbol s_4_42[3] = { 0xC5, 0xDB, 0xD8 }; +static symbol s_4_43[3] = { 0xC9, 0xDB, 0xD8 }; +static symbol s_4_44[2] = { 0xCE, 0xD9 }; +static symbol s_4_45[3] = { 0xC5, 0xCE, 0xD9 }; + +static struct among a_4[46] = +{ +/* 0 */ { 1, s_4_0, -1, 2, 0}, +/* 1 */ { 2, s_4_1, 0, 2, 0}, +/* 2 */ { 2, s_4_2, -1, 1, 0}, +/* 3 */ { 3, s_4_3, 2, 2, 0}, +/* 4 */ { 3, s_4_4, 2, 2, 0}, +/* 5 */ { 2, s_4_5, -1, 1, 0}, +/* 6 */ { 3, s_4_6, 5, 2, 0}, +/* 7 */ { 3, s_4_7, -1, 1, 0}, +/* 8 */ { 3, s_4_8, -1, 2, 0}, +/* 9 */ { 3, s_4_9, -1, 1, 0}, +/* 10 */ { 4, s_4_10, 9, 2, 0}, +/* 11 */ { 4, s_4_11, 9, 2, 0}, +/* 12 */ { 2, s_4_12, -1, 1, 0}, +/* 13 */ { 3, s_4_13, 12, 2, 0}, +/* 14 */ { 3, s_4_14, 12, 2, 0}, +/* 15 */ { 1, s_4_15, -1, 1, 0}, +/* 16 */ { 2, s_4_16, 15, 2, 0}, +/* 17 */ { 2, s_4_17, 15, 2, 0}, +/* 18 */ { 1, s_4_18, -1, 1, 0}, +/* 19 */ { 2, s_4_19, 18, 2, 0}, +/* 20 */ { 2, s_4_20, 18, 2, 0}, +/* 21 */ { 2, s_4_21, -1, 1, 0}, +/* 22 */ { 2, s_4_22, -1, 2, 0}, +/* 23 */ { 2, s_4_23, -1, 2, 0}, +/* 24 */ { 1, s_4_24, -1, 1, 0}, +/* 25 */ { 2, s_4_25, 24, 2, 0}, +/* 26 */ { 2, s_4_26, -1, 1, 0}, +/* 27 */ { 3, s_4_27, 26, 2, 0}, +/* 28 */ { 3, s_4_28, 26, 2, 0}, +/* 29 */ { 2, s_4_29, -1, 1, 0}, +/* 30 */ { 3, s_4_30, 29, 2, 0}, +/* 31 */ { 3, s_4_31, 29, 1, 0}, +/* 32 */ { 2, s_4_32, -1, 1, 0}, +/* 33 */ { 3, s_4_33, 32, 2, 0}, +/* 34 */ { 2, s_4_34, -1, 1, 0}, +/* 35 */ { 3, s_4_35, 34, 2, 0}, +/* 36 */ { 2, s_4_36, -1, 2, 0}, +/* 37 */ { 2, s_4_37, -1, 2, 0}, +/* 38 */ { 2, s_4_38, -1, 2, 0}, +/* 39 */ { 2, s_4_39, -1, 1, 0}, +/* 40 */ { 3, s_4_40, 39, 2, 0}, +/* 41 */ { 3, s_4_41, 39, 2, 0}, +/* 42 */ { 3, s_4_42, -1, 1, 0}, +/* 43 */ { 3, s_4_43, -1, 2, 0}, +/* 44 */ { 2, s_4_44, -1, 1, 0}, +/* 45 */ { 3, s_4_45, 44, 2, 0} +}; + +static symbol s_5_0[1] = { 0xC0 }; +static symbol s_5_1[2] = { 0xC9, 0xC0 }; +static symbol s_5_2[2] = { 0xD8, 0xC0 }; +static symbol s_5_3[1] = { 0xC1 }; +static symbol s_5_4[1] = { 0xC5 }; +static symbol s_5_5[2] = { 0xC9, 0xC5 }; +static symbol s_5_6[2] = { 0xD8, 0xC5 }; +static symbol s_5_7[2] = { 0xC1, 0xC8 }; +static symbol s_5_8[2] = { 0xD1, 0xC8 }; +static symbol s_5_9[3] = { 0xC9, 0xD1, 0xC8 }; +static symbol s_5_10[1] = { 0xC9 }; +static symbol s_5_11[2] = { 0xC5, 0xC9 }; +static symbol s_5_12[2] = { 0xC9, 0xC9 }; +static symbol s_5_13[3] = { 0xC1, 0xCD, 0xC9 }; +static symbol s_5_14[3] = { 0xD1, 0xCD, 0xC9 }; +static symbol s_5_15[4] = { 0xC9, 0xD1, 0xCD, 0xC9 }; +static symbol s_5_16[1] = { 0xCA }; +static symbol s_5_17[2] = { 0xC5, 0xCA }; +static symbol s_5_18[3] = { 0xC9, 0xC5, 0xCA }; +static symbol s_5_19[2] = { 0xC9, 0xCA }; +static symbol s_5_20[2] = { 0xCF, 0xCA }; +static symbol s_5_21[2] = { 0xC1, 0xCD }; +static symbol s_5_22[2] = { 0xC5, 0xCD }; +static symbol s_5_23[3] = { 0xC9, 0xC5, 0xCD }; +static symbol s_5_24[2] = { 0xCF, 0xCD }; +static symbol s_5_25[2] = { 0xD1, 0xCD }; +static symbol s_5_26[3] = { 0xC9, 0xD1, 0xCD }; +static symbol s_5_27[1] = { 0xCF }; +static symbol s_5_28[1] = { 0xD1 }; +static symbol s_5_29[2] = { 0xC9, 0xD1 }; +static symbol s_5_30[2] = { 0xD8, 0xD1 }; +static symbol s_5_31[1] = { 0xD5 }; +static symbol s_5_32[2] = { 0xC5, 0xD7 }; +static symbol s_5_33[2] = { 0xCF, 0xD7 }; +static symbol s_5_34[1] = { 0xD8 }; +static symbol s_5_35[1] = { 0xD9 }; + +static struct among a_5[36] = +{ +/* 0 */ { 1, s_5_0, -1, 1, 0}, +/* 1 */ { 2, s_5_1, 0, 1, 0}, +/* 2 */ { 2, s_5_2, 0, 1, 0}, +/* 3 */ { 1, s_5_3, -1, 1, 0}, +/* 4 */ { 1, s_5_4, -1, 1, 0}, +/* 5 */ { 2, s_5_5, 4, 1, 0}, +/* 6 */ { 2, s_5_6, 4, 1, 0}, +/* 7 */ { 2, s_5_7, -1, 1, 0}, +/* 8 */ { 2, s_5_8, -1, 1, 0}, +/* 9 */ { 3, s_5_9, 8, 1, 0}, +/* 10 */ { 1, s_5_10, -1, 1, 0}, +/* 11 */ { 2, s_5_11, 10, 1, 0}, +/* 12 */ { 2, s_5_12, 10, 1, 0}, +/* 13 */ { 3, s_5_13, 10, 1, 0}, +/* 14 */ { 3, s_5_14, 10, 1, 0}, +/* 15 */ { 4, s_5_15, 14, 1, 0}, +/* 16 */ { 1, s_5_16, -1, 1, 0}, +/* 17 */ { 2, s_5_17, 16, 1, 0}, +/* 18 */ { 3, s_5_18, 17, 1, 0}, +/* 19 */ { 2, s_5_19, 16, 1, 0}, +/* 20 */ { 2, s_5_20, 16, 1, 0}, +/* 21 */ { 2, s_5_21, -1, 1, 0}, +/* 22 */ { 2, s_5_22, -1, 1, 0}, +/* 23 */ { 3, s_5_23, 22, 1, 0}, +/* 24 */ { 2, s_5_24, -1, 1, 0}, +/* 25 */ { 2, s_5_25, -1, 1, 0}, +/* 26 */ { 3, s_5_26, 25, 1, 0}, +/* 27 */ { 1, s_5_27, -1, 1, 0}, +/* 28 */ { 1, s_5_28, -1, 1, 0}, +/* 29 */ { 2, s_5_29, 28, 1, 0}, +/* 30 */ { 2, s_5_30, 28, 1, 0}, +/* 31 */ { 1, s_5_31, -1, 1, 0}, +/* 32 */ { 2, s_5_32, -1, 1, 0}, +/* 33 */ { 2, s_5_33, -1, 1, 0}, +/* 34 */ { 1, s_5_34, -1, 1, 0}, +/* 35 */ { 1, s_5_35, -1, 1, 0} +}; + +static symbol s_6_0[3] = { 0xCF, 0xD3, 0xD4 }; +static symbol s_6_1[4] = { 0xCF, 0xD3, 0xD4, 0xD8 }; + +static struct among a_6[2] = +{ +/* 0 */ { 3, s_6_0, -1, 1, 0}, +/* 1 */ { 4, s_6_1, -1, 1, 0} +}; + +static symbol s_7_0[4] = { 0xC5, 0xCA, 0xDB, 0xC5 }; +static symbol s_7_1[1] = { 0xCE }; +static symbol s_7_2[1] = { 0xD8 }; +static symbol s_7_3[3] = { 0xC5, 0xCA, 0xDB }; + +static struct among a_7[4] = +{ +/* 0 */ { 4, s_7_0, -1, 1, 0}, +/* 1 */ { 1, s_7_1, -1, 2, 0}, +/* 2 */ { 1, s_7_2, -1, 3, 0}, +/* 3 */ { 3, s_7_3, -1, 1, 0} +}; + +static unsigned char g_v[] = { 35, 130, 34, 18 }; + +static symbol s_0[] = { 0xC1 }; +static symbol s_1[] = { 0xD1 }; +static symbol s_2[] = { 0xC1 }; +static symbol s_3[] = { 0xD1 }; +static symbol s_4[] = { 0xC1 }; +static symbol s_5[] = { 0xD1 }; +static symbol s_6[] = { 0xCE }; +static symbol s_7[] = { 0xCE }; +static symbol s_8[] = { 0xCE }; +static symbol s_9[] = { 0xC9 }; + +static int r_mark_regions(struct SN_env * z) { + z->I[0] = z->l; + z->I[1] = z->l; + { int c = z->c; /* do, line 63 */ + while(1) { /* gopast, line 64 */ + if (!(in_grouping(z, g_v, 192, 220))) goto lab1; + break; + lab1: + if (z->c >= z->l) goto lab0; + z->c++; /* gopast, line 64 */ + } + z->I[0] = z->c; /* setmark pV, line 64 */ + while(1) { /* gopast, line 64 */ + if (!(out_grouping(z, g_v, 192, 220))) goto lab2; + break; + lab2: + if (z->c >= z->l) goto lab0; + z->c++; /* gopast, line 64 */ + } + while(1) { /* gopast, line 65 */ + if (!(in_grouping(z, g_v, 192, 220))) goto lab3; + break; + lab3: + if (z->c >= z->l) goto lab0; + z->c++; /* gopast, line 65 */ + } + while(1) { /* gopast, line 65 */ + if (!(out_grouping(z, g_v, 192, 220))) goto lab4; + break; + lab4: + if (z->c >= z->l) goto lab0; + z->c++; /* gopast, line 65 */ + } + z->I[1] = z->c; /* setmark p2, line 65 */ + lab0: + z->c = c; + } + return 1; +} + +static int r_R2(struct SN_env * z) { + if (!(z->I[1] <= z->c)) return 0; + return 1; +} + +static int r_perfective_gerund(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 74 */ + among_var = find_among_b(z, a_0, 9); /* substring, line 74 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 74 */ + switch(among_var) { + case 0: return 0; + case 1: + { int m = z->l - z->c; (void) m; /* or, line 78 */ + if (!(eq_s_b(z, 1, s_0))) goto lab1; + goto lab0; + lab1: + z->c = z->l - m; + if (!(eq_s_b(z, 1, s_1))) return 0; + } + lab0: + { int ret; + ret = slice_del(z); /* delete, line 78 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_del(z); /* delete, line 85 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_adjective(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 90 */ + among_var = find_among_b(z, a_1, 26); /* substring, line 90 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 90 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 99 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_adjectival(struct SN_env * z) { + int among_var; + { int ret = r_adjective(z); + if (ret == 0) return 0; /* call adjective, line 104 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 111 */ + z->ket = z->c; /* [, line 112 */ + among_var = find_among_b(z, a_2, 8); /* substring, line 112 */ + if (!(among_var)) { z->c = z->l - m; goto lab0; } + z->bra = z->c; /* ], line 112 */ + switch(among_var) { + case 0: { z->c = z->l - m; goto lab0; } + case 1: + { int m = z->l - z->c; (void) m; /* or, line 117 */ + if (!(eq_s_b(z, 1, s_2))) goto lab2; + goto lab1; + lab2: + z->c = z->l - m; + if (!(eq_s_b(z, 1, s_3))) { z->c = z->l - m; goto lab0; } + } + lab1: + { int ret; + ret = slice_del(z); /* delete, line 117 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_del(z); /* delete, line 124 */ + if (ret < 0) return ret; + } + break; + } + lab0: + ; + } + return 1; +} + +static int r_reflexive(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 131 */ + among_var = find_among_b(z, a_3, 2); /* substring, line 131 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 131 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 134 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_verb(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 139 */ + among_var = find_among_b(z, a_4, 46); /* substring, line 139 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 139 */ + switch(among_var) { + case 0: return 0; + case 1: + { int m = z->l - z->c; (void) m; /* or, line 145 */ + if (!(eq_s_b(z, 1, s_4))) goto lab1; + goto lab0; + lab1: + z->c = z->l - m; + if (!(eq_s_b(z, 1, s_5))) return 0; + } + lab0: + { int ret; + ret = slice_del(z); /* delete, line 145 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_del(z); /* delete, line 153 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_noun(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 162 */ + among_var = find_among_b(z, a_5, 36); /* substring, line 162 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 162 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 169 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_derivational(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 178 */ + among_var = find_among_b(z, a_6, 2); /* substring, line 178 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 178 */ + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 178 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 181 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_tidy_up(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 186 */ + among_var = find_among_b(z, a_7, 4); /* substring, line 186 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 186 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 190 */ + if (ret < 0) return ret; + } + z->ket = z->c; /* [, line 191 */ + if (!(eq_s_b(z, 1, s_6))) return 0; + z->bra = z->c; /* ], line 191 */ + if (!(eq_s_b(z, 1, s_7))) return 0; + { int ret; + ret = slice_del(z); /* delete, line 191 */ + if (ret < 0) return ret; + } + break; + case 2: + if (!(eq_s_b(z, 1, s_8))) return 0; + { int ret; + ret = slice_del(z); /* delete, line 194 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_del(z); /* delete, line 196 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +extern int russian_KOI8_R_stem(struct SN_env * z) { + { int c = z->c; /* do, line 203 */ + { int ret = r_mark_regions(z); + if (ret == 0) goto lab0; /* call mark_regions, line 203 */ + if (ret < 0) return ret; + } + lab0: + z->c = c; + } + z->lb = z->c; z->c = z->l; /* backwards, line 204 */ + + { int m3; /* setlimit, line 204 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 204 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + { int m = z->l - z->c; (void) m; /* do, line 205 */ + { int m = z->l - z->c; (void) m; /* or, line 206 */ + { int ret = r_perfective_gerund(z); + if (ret == 0) goto lab3; /* call perfective_gerund, line 206 */ + if (ret < 0) return ret; + } + goto lab2; + lab3: + z->c = z->l - m; + { int m = z->l - z->c; (void) m; /* try, line 207 */ + { int ret = r_reflexive(z); + if (ret == 0) { z->c = z->l - m; goto lab4; } /* call reflexive, line 207 */ + if (ret < 0) return ret; + } + lab4: + ; + } + { int m = z->l - z->c; (void) m; /* or, line 208 */ + { int ret = r_adjectival(z); + if (ret == 0) goto lab6; /* call adjectival, line 208 */ + if (ret < 0) return ret; + } + goto lab5; + lab6: + z->c = z->l - m; + { int ret = r_verb(z); + if (ret == 0) goto lab7; /* call verb, line 208 */ + if (ret < 0) return ret; + } + goto lab5; + lab7: + z->c = z->l - m; + { int ret = r_noun(z); + if (ret == 0) goto lab1; /* call noun, line 208 */ + if (ret < 0) return ret; + } + } + lab5: + ; + } + lab2: + lab1: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* try, line 211 */ + z->ket = z->c; /* [, line 211 */ + if (!(eq_s_b(z, 1, s_9))) { z->c = z->l - m; goto lab8; } + z->bra = z->c; /* ], line 211 */ + { int ret; + ret = slice_del(z); /* delete, line 211 */ + if (ret < 0) return ret; + } + lab8: + ; + } + { int m = z->l - z->c; (void) m; /* do, line 214 */ + { int ret = r_derivational(z); + if (ret == 0) goto lab9; /* call derivational, line 214 */ + if (ret < 0) return ret; + } + lab9: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 215 */ + { int ret = r_tidy_up(z); + if (ret == 0) goto lab10; /* call tidy_up, line 215 */ + if (ret < 0) return ret; + } + lab10: + z->c = z->l - m; + } + z->lb = m3; + } + z->c = z->lb; + return 1; +} + +extern struct SN_env * russian_KOI8_R_create_env(void) { return SN_create_env(0, 2, 0); } + +extern void russian_KOI8_R_close_env(struct SN_env * z) { SN_close_env(z); } + diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_KOI8_R_russian.h b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_KOI8_R_russian.h new file mode 100644 index 0000000..de2179d --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_KOI8_R_russian.h @@ -0,0 +1,16 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern struct SN_env * russian_KOI8_R_create_env(void); +extern void russian_KOI8_R_close_env(struct SN_env * z); + +extern int russian_KOI8_R_stem(struct SN_env * z); + +#ifdef __cplusplus +} +#endif + diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_danish.c b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_danish.c new file mode 100644 index 0000000..bb98298 --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_danish.c @@ -0,0 +1,344 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#include "../runtime/header.h" + +extern int danish_UTF_8_stem(struct SN_env * z); +static int r_undouble(struct SN_env * z); +static int r_other_suffix(struct SN_env * z); +static int r_consonant_pair(struct SN_env * z); +static int r_main_suffix(struct SN_env * z); +static int r_mark_regions(struct SN_env * z); + +extern struct SN_env * danish_UTF_8_create_env(void); +extern void danish_UTF_8_close_env(struct SN_env * z); + +static symbol s_0_0[3] = { 'h', 'e', 'd' }; +static symbol s_0_1[5] = { 'e', 't', 'h', 'e', 'd' }; +static symbol s_0_2[4] = { 'e', 'r', 'e', 'd' }; +static symbol s_0_3[1] = { 'e' }; +static symbol s_0_4[5] = { 'e', 'r', 'e', 'd', 'e' }; +static symbol s_0_5[4] = { 'e', 'n', 'd', 'e' }; +static symbol s_0_6[6] = { 'e', 'r', 'e', 'n', 'd', 'e' }; +static symbol s_0_7[3] = { 'e', 'n', 'e' }; +static symbol s_0_8[4] = { 'e', 'r', 'n', 'e' }; +static symbol s_0_9[3] = { 'e', 'r', 'e' }; +static symbol s_0_10[2] = { 'e', 'n' }; +static symbol s_0_11[5] = { 'h', 'e', 'd', 'e', 'n' }; +static symbol s_0_12[4] = { 'e', 'r', 'e', 'n' }; +static symbol s_0_13[2] = { 'e', 'r' }; +static symbol s_0_14[5] = { 'h', 'e', 'd', 'e', 'r' }; +static symbol s_0_15[4] = { 'e', 'r', 'e', 'r' }; +static symbol s_0_16[1] = { 's' }; +static symbol s_0_17[4] = { 'h', 'e', 'd', 's' }; +static symbol s_0_18[2] = { 'e', 's' }; +static symbol s_0_19[5] = { 'e', 'n', 'd', 'e', 's' }; +static symbol s_0_20[7] = { 'e', 'r', 'e', 'n', 'd', 'e', 's' }; +static symbol s_0_21[4] = { 'e', 'n', 'e', 's' }; +static symbol s_0_22[5] = { 'e', 'r', 'n', 'e', 's' }; +static symbol s_0_23[4] = { 'e', 'r', 'e', 's' }; +static symbol s_0_24[3] = { 'e', 'n', 's' }; +static symbol s_0_25[6] = { 'h', 'e', 'd', 'e', 'n', 's' }; +static symbol s_0_26[5] = { 'e', 'r', 'e', 'n', 's' }; +static symbol s_0_27[3] = { 'e', 'r', 's' }; +static symbol s_0_28[3] = { 'e', 't', 's' }; +static symbol s_0_29[5] = { 'e', 'r', 'e', 't', 's' }; +static symbol s_0_30[2] = { 'e', 't' }; +static symbol s_0_31[4] = { 'e', 'r', 'e', 't' }; + +static struct among a_0[32] = +{ +/* 0 */ { 3, s_0_0, -1, 1, 0}, +/* 1 */ { 5, s_0_1, 0, 1, 0}, +/* 2 */ { 4, s_0_2, -1, 1, 0}, +/* 3 */ { 1, s_0_3, -1, 1, 0}, +/* 4 */ { 5, s_0_4, 3, 1, 0}, +/* 5 */ { 4, s_0_5, 3, 1, 0}, +/* 6 */ { 6, s_0_6, 5, 1, 0}, +/* 7 */ { 3, s_0_7, 3, 1, 0}, +/* 8 */ { 4, s_0_8, 3, 1, 0}, +/* 9 */ { 3, s_0_9, 3, 1, 0}, +/* 10 */ { 2, s_0_10, -1, 1, 0}, +/* 11 */ { 5, s_0_11, 10, 1, 0}, +/* 12 */ { 4, s_0_12, 10, 1, 0}, +/* 13 */ { 2, s_0_13, -1, 1, 0}, +/* 14 */ { 5, s_0_14, 13, 1, 0}, +/* 15 */ { 4, s_0_15, 13, 1, 0}, +/* 16 */ { 1, s_0_16, -1, 2, 0}, +/* 17 */ { 4, s_0_17, 16, 1, 0}, +/* 18 */ { 2, s_0_18, 16, 1, 0}, +/* 19 */ { 5, s_0_19, 18, 1, 0}, +/* 20 */ { 7, s_0_20, 19, 1, 0}, +/* 21 */ { 4, s_0_21, 18, 1, 0}, +/* 22 */ { 5, s_0_22, 18, 1, 0}, +/* 23 */ { 4, s_0_23, 18, 1, 0}, +/* 24 */ { 3, s_0_24, 16, 1, 0}, +/* 25 */ { 6, s_0_25, 24, 1, 0}, +/* 26 */ { 5, s_0_26, 24, 1, 0}, +/* 27 */ { 3, s_0_27, 16, 1, 0}, +/* 28 */ { 3, s_0_28, 16, 1, 0}, +/* 29 */ { 5, s_0_29, 28, 1, 0}, +/* 30 */ { 2, s_0_30, -1, 1, 0}, +/* 31 */ { 4, s_0_31, 30, 1, 0} +}; + +static symbol s_1_0[2] = { 'g', 'd' }; +static symbol s_1_1[2] = { 'd', 't' }; +static symbol s_1_2[2] = { 'g', 't' }; +static symbol s_1_3[2] = { 'k', 't' }; + +static struct among a_1[4] = +{ +/* 0 */ { 2, s_1_0, -1, -1, 0}, +/* 1 */ { 2, s_1_1, -1, -1, 0}, +/* 2 */ { 2, s_1_2, -1, -1, 0}, +/* 3 */ { 2, s_1_3, -1, -1, 0} +}; + +static symbol s_2_0[2] = { 'i', 'g' }; +static symbol s_2_1[3] = { 'l', 'i', 'g' }; +static symbol s_2_2[4] = { 'e', 'l', 'i', 'g' }; +static symbol s_2_3[3] = { 'e', 'l', 's' }; +static symbol s_2_4[5] = { 'l', 0xC3, 0xB8, 's', 't' }; + +static struct among a_2[5] = +{ +/* 0 */ { 2, s_2_0, -1, 1, 0}, +/* 1 */ { 3, s_2_1, 0, 1, 0}, +/* 2 */ { 4, s_2_2, 1, 1, 0}, +/* 3 */ { 3, s_2_3, -1, 1, 0}, +/* 4 */ { 5, s_2_4, -1, 2, 0} +}; + +static unsigned char g_v[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 128 }; + +static unsigned char g_s_ending[] = { 239, 254, 42, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16 }; + +static symbol s_0[] = { 's', 't' }; +static symbol s_1[] = { 'i', 'g' }; +static symbol s_2[] = { 'l', 0xC3, 0xB8, 's' }; + +static int r_mark_regions(struct SN_env * z) { + z->I[0] = z->l; + { int c_test = z->c; /* test, line 33 */ + { int c = skip_utf8(z->p, z->c, 0, z->l, + 3); + if (c < 0) return 0; + z->c = c; /* hop, line 33 */ + } + z->I[1] = z->c; /* setmark x, line 33 */ + z->c = c_test; + } + while(1) { /* goto, line 34 */ + int c = z->c; + if (!(in_grouping_U(z, g_v, 97, 248))) goto lab0; + z->c = c; + break; + lab0: + z->c = c; + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) return 0; + z->c = c; /* goto, line 34 */ + } + } + while(1) { /* gopast, line 34 */ + if (!(out_grouping_U(z, g_v, 97, 248))) goto lab1; + break; + lab1: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) return 0; + z->c = c; /* gopast, line 34 */ + } + } + z->I[0] = z->c; /* setmark p1, line 34 */ + /* try, line 35 */ + if (!(z->I[0] < z->I[1])) goto lab2; + z->I[0] = z->I[1]; +lab2: + return 1; +} + +static int r_main_suffix(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 41 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 41 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 41 */ + among_var = find_among_b(z, a_0, 32); /* substring, line 41 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 41 */ + z->lb = m3; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 48 */ + if (ret < 0) return ret; + } + break; + case 2: + if (!(in_grouping_b_U(z, g_s_ending, 97, 229))) return 0; + { int ret; + ret = slice_del(z); /* delete, line 50 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_consonant_pair(struct SN_env * z) { + { int m_test = z->l - z->c; /* test, line 55 */ + { int m3; /* setlimit, line 56 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 56 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 56 */ + if (!(find_among_b(z, a_1, 4))) { z->lb = m3; return 0; } /* substring, line 56 */ + z->bra = z->c; /* ], line 56 */ + z->lb = m3; + } + z->c = z->l - m_test; + } + { int c = skip_utf8(z->p, z->c, z->lb, 0, -1); + if (c < 0) return 0; + z->c = c; /* next, line 62 */ + } + z->bra = z->c; /* ], line 62 */ + { int ret; + ret = slice_del(z); /* delete, line 62 */ + if (ret < 0) return ret; + } + return 1; +} + +static int r_other_suffix(struct SN_env * z) { + int among_var; + { int m = z->l - z->c; (void) m; /* do, line 66 */ + z->ket = z->c; /* [, line 66 */ + if (!(eq_s_b(z, 2, s_0))) goto lab0; + z->bra = z->c; /* ], line 66 */ + if (!(eq_s_b(z, 2, s_1))) goto lab0; + { int ret; + ret = slice_del(z); /* delete, line 66 */ + if (ret < 0) return ret; + } + lab0: + z->c = z->l - m; + } + { int m3; /* setlimit, line 67 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 67 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 67 */ + among_var = find_among_b(z, a_2, 5); /* substring, line 67 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 67 */ + z->lb = m3; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 70 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* do, line 70 */ + { int ret = r_consonant_pair(z); + if (ret == 0) goto lab1; /* call consonant_pair, line 70 */ + if (ret < 0) return ret; + } + lab1: + z->c = z->l - m; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 4, s_2); /* <-, line 72 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_undouble(struct SN_env * z) { + { int m3; /* setlimit, line 76 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 76 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 76 */ + if (!(out_grouping_b_U(z, g_v, 97, 248))) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 76 */ + z->S[0] = slice_to(z, z->S[0]); /* -> ch, line 76 */ + if (z->S[0] == 0) return -1; /* -> ch, line 76 */ + z->lb = m3; + } + if (!(eq_v_b(z, z->S[0]))) return 0; /* name ch, line 77 */ + { int ret; + ret = slice_del(z); /* delete, line 78 */ + if (ret < 0) return ret; + } + return 1; +} + +extern int danish_UTF_8_stem(struct SN_env * z) { + { int c = z->c; /* do, line 84 */ + { int ret = r_mark_regions(z); + if (ret == 0) goto lab0; /* call mark_regions, line 84 */ + if (ret < 0) return ret; + } + lab0: + z->c = c; + } + z->lb = z->c; z->c = z->l; /* backwards, line 85 */ + + { int m = z->l - z->c; (void) m; /* do, line 86 */ + { int ret = r_main_suffix(z); + if (ret == 0) goto lab1; /* call main_suffix, line 86 */ + if (ret < 0) return ret; + } + lab1: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 87 */ + { int ret = r_consonant_pair(z); + if (ret == 0) goto lab2; /* call consonant_pair, line 87 */ + if (ret < 0) return ret; + } + lab2: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 88 */ + { int ret = r_other_suffix(z); + if (ret == 0) goto lab3; /* call other_suffix, line 88 */ + if (ret < 0) return ret; + } + lab3: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 89 */ + { int ret = r_undouble(z); + if (ret == 0) goto lab4; /* call undouble, line 89 */ + if (ret < 0) return ret; + } + lab4: + z->c = z->l - m; + } + z->c = z->lb; + return 1; +} + +extern struct SN_env * danish_UTF_8_create_env(void) { return SN_create_env(1, 2, 0); } + +extern void danish_UTF_8_close_env(struct SN_env * z) { SN_close_env(z); } + diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_danish.h b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_danish.h new file mode 100644 index 0000000..ed744d4 --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_danish.h @@ -0,0 +1,16 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern struct SN_env * danish_UTF_8_create_env(void); +extern void danish_UTF_8_close_env(struct SN_env * z); + +extern int danish_UTF_8_stem(struct SN_env * z); + +#ifdef __cplusplus +} +#endif + diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_dutch.c b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_dutch.c new file mode 100644 index 0000000..3de469b --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_dutch.c @@ -0,0 +1,653 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#include "../runtime/header.h" + +extern int dutch_UTF_8_stem(struct SN_env * z); +static int r_standard_suffix(struct SN_env * z); +static int r_undouble(struct SN_env * z); +static int r_R2(struct SN_env * z); +static int r_R1(struct SN_env * z); +static int r_mark_regions(struct SN_env * z); +static int r_en_ending(struct SN_env * z); +static int r_e_ending(struct SN_env * z); +static int r_postlude(struct SN_env * z); +static int r_prelude(struct SN_env * z); + +extern struct SN_env * dutch_UTF_8_create_env(void); +extern void dutch_UTF_8_close_env(struct SN_env * z); + +static symbol s_0_1[2] = { 0xC3, 0xA1 }; +static symbol s_0_2[2] = { 0xC3, 0xA4 }; +static symbol s_0_3[2] = { 0xC3, 0xA9 }; +static symbol s_0_4[2] = { 0xC3, 0xAB }; +static symbol s_0_5[2] = { 0xC3, 0xAD }; +static symbol s_0_6[2] = { 0xC3, 0xAF }; +static symbol s_0_7[2] = { 0xC3, 0xB3 }; +static symbol s_0_8[2] = { 0xC3, 0xB6 }; +static symbol s_0_9[2] = { 0xC3, 0xBA }; +static symbol s_0_10[2] = { 0xC3, 0xBC }; + +static struct among a_0[11] = +{ +/* 0 */ { 0, 0, -1, 6, 0}, +/* 1 */ { 2, s_0_1, 0, 1, 0}, +/* 2 */ { 2, s_0_2, 0, 1, 0}, +/* 3 */ { 2, s_0_3, 0, 2, 0}, +/* 4 */ { 2, s_0_4, 0, 2, 0}, +/* 5 */ { 2, s_0_5, 0, 3, 0}, +/* 6 */ { 2, s_0_6, 0, 3, 0}, +/* 7 */ { 2, s_0_7, 0, 4, 0}, +/* 8 */ { 2, s_0_8, 0, 4, 0}, +/* 9 */ { 2, s_0_9, 0, 5, 0}, +/* 10 */ { 2, s_0_10, 0, 5, 0} +}; + +static symbol s_1_1[1] = { 'I' }; +static symbol s_1_2[1] = { 'Y' }; + +static struct among a_1[3] = +{ +/* 0 */ { 0, 0, -1, 3, 0}, +/* 1 */ { 1, s_1_1, 0, 2, 0}, +/* 2 */ { 1, s_1_2, 0, 1, 0} +}; + +static symbol s_2_0[2] = { 'd', 'd' }; +static symbol s_2_1[2] = { 'k', 'k' }; +static symbol s_2_2[2] = { 't', 't' }; + +static struct among a_2[3] = +{ +/* 0 */ { 2, s_2_0, -1, -1, 0}, +/* 1 */ { 2, s_2_1, -1, -1, 0}, +/* 2 */ { 2, s_2_2, -1, -1, 0} +}; + +static symbol s_3_0[3] = { 'e', 'n', 'e' }; +static symbol s_3_1[2] = { 's', 'e' }; +static symbol s_3_2[2] = { 'e', 'n' }; +static symbol s_3_3[5] = { 'h', 'e', 'd', 'e', 'n' }; +static symbol s_3_4[1] = { 's' }; + +static struct among a_3[5] = +{ +/* 0 */ { 3, s_3_0, -1, 2, 0}, +/* 1 */ { 2, s_3_1, -1, 3, 0}, +/* 2 */ { 2, s_3_2, -1, 2, 0}, +/* 3 */ { 5, s_3_3, 2, 1, 0}, +/* 4 */ { 1, s_3_4, -1, 3, 0} +}; + +static symbol s_4_0[3] = { 'e', 'n', 'd' }; +static symbol s_4_1[2] = { 'i', 'g' }; +static symbol s_4_2[3] = { 'i', 'n', 'g' }; +static symbol s_4_3[4] = { 'l', 'i', 'j', 'k' }; +static symbol s_4_4[4] = { 'b', 'a', 'a', 'r' }; +static symbol s_4_5[3] = { 'b', 'a', 'r' }; + +static struct among a_4[6] = +{ +/* 0 */ { 3, s_4_0, -1, 1, 0}, +/* 1 */ { 2, s_4_1, -1, 2, 0}, +/* 2 */ { 3, s_4_2, -1, 1, 0}, +/* 3 */ { 4, s_4_3, -1, 3, 0}, +/* 4 */ { 4, s_4_4, -1, 4, 0}, +/* 5 */ { 3, s_4_5, -1, 5, 0} +}; + +static symbol s_5_0[2] = { 'a', 'a' }; +static symbol s_5_1[2] = { 'e', 'e' }; +static symbol s_5_2[2] = { 'o', 'o' }; +static symbol s_5_3[2] = { 'u', 'u' }; + +static struct among a_5[4] = +{ +/* 0 */ { 2, s_5_0, -1, -1, 0}, +/* 1 */ { 2, s_5_1, -1, -1, 0}, +/* 2 */ { 2, s_5_2, -1, -1, 0}, +/* 3 */ { 2, s_5_3, -1, -1, 0} +}; + +static unsigned char g_v[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128 }; + +static unsigned char g_v_I[] = { 1, 0, 0, 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128 }; + +static unsigned char g_v_j[] = { 17, 67, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128 }; + +static symbol s_0[] = { 'a' }; +static symbol s_1[] = { 'e' }; +static symbol s_2[] = { 'i' }; +static symbol s_3[] = { 'o' }; +static symbol s_4[] = { 'u' }; +static symbol s_5[] = { 'y' }; +static symbol s_6[] = { 'Y' }; +static symbol s_7[] = { 'i' }; +static symbol s_8[] = { 'I' }; +static symbol s_9[] = { 'y' }; +static symbol s_10[] = { 'Y' }; +static symbol s_11[] = { 'y' }; +static symbol s_12[] = { 'i' }; +static symbol s_13[] = { 'e' }; +static symbol s_14[] = { 'g', 'e', 'm' }; +static symbol s_15[] = { 'h', 'e', 'i', 'd' }; +static symbol s_16[] = { 'h', 'e', 'i', 'd' }; +static symbol s_17[] = { 'c' }; +static symbol s_18[] = { 'e', 'n' }; +static symbol s_19[] = { 'i', 'g' }; +static symbol s_20[] = { 'e' }; +static symbol s_21[] = { 'e' }; + +static int r_prelude(struct SN_env * z) { + int among_var; + { int c_test = z->c; /* test, line 42 */ + while(1) { /* repeat, line 42 */ + int c = z->c; + z->bra = z->c; /* [, line 43 */ + among_var = find_among(z, a_0, 11); /* substring, line 43 */ + if (!(among_var)) goto lab0; + z->ket = z->c; /* ], line 43 */ + switch(among_var) { + case 0: goto lab0; + case 1: + { int ret; + ret = slice_from_s(z, 1, s_0); /* <-, line 45 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 1, s_1); /* <-, line 47 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_from_s(z, 1, s_2); /* <-, line 49 */ + if (ret < 0) return ret; + } + break; + case 4: + { int ret; + ret = slice_from_s(z, 1, s_3); /* <-, line 51 */ + if (ret < 0) return ret; + } + break; + case 5: + { int ret; + ret = slice_from_s(z, 1, s_4); /* <-, line 53 */ + if (ret < 0) return ret; + } + break; + case 6: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab0; + z->c = c; /* next, line 54 */ + } + break; + } + continue; + lab0: + z->c = c; + break; + } + z->c = c_test; + } + { int c = z->c; /* try, line 57 */ + z->bra = z->c; /* [, line 57 */ + if (!(eq_s(z, 1, s_5))) { z->c = c; goto lab1; } + z->ket = z->c; /* ], line 57 */ + { int ret; + ret = slice_from_s(z, 1, s_6); /* <-, line 57 */ + if (ret < 0) return ret; + } + lab1: + ; + } + while(1) { /* repeat, line 58 */ + int c = z->c; + while(1) { /* goto, line 58 */ + int c = z->c; + if (!(in_grouping_U(z, g_v, 97, 232))) goto lab3; + z->bra = z->c; /* [, line 59 */ + { int c = z->c; /* or, line 59 */ + if (!(eq_s(z, 1, s_7))) goto lab5; + z->ket = z->c; /* ], line 59 */ + if (!(in_grouping_U(z, g_v, 97, 232))) goto lab5; + { int ret; + ret = slice_from_s(z, 1, s_8); /* <-, line 59 */ + if (ret < 0) return ret; + } + goto lab4; + lab5: + z->c = c; + if (!(eq_s(z, 1, s_9))) goto lab3; + z->ket = z->c; /* ], line 60 */ + { int ret; + ret = slice_from_s(z, 1, s_10); /* <-, line 60 */ + if (ret < 0) return ret; + } + } + lab4: + z->c = c; + break; + lab3: + z->c = c; + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab2; + z->c = c; /* goto, line 58 */ + } + } + continue; + lab2: + z->c = c; + break; + } + return 1; +} + +static int r_mark_regions(struct SN_env * z) { + z->I[0] = z->l; + z->I[1] = z->l; + while(1) { /* gopast, line 69 */ + if (!(in_grouping_U(z, g_v, 97, 232))) goto lab0; + break; + lab0: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) return 0; + z->c = c; /* gopast, line 69 */ + } + } + while(1) { /* gopast, line 69 */ + if (!(out_grouping_U(z, g_v, 97, 232))) goto lab1; + break; + lab1: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) return 0; + z->c = c; /* gopast, line 69 */ + } + } + z->I[0] = z->c; /* setmark p1, line 69 */ + /* try, line 70 */ + if (!(z->I[0] < 3)) goto lab2; + z->I[0] = 3; +lab2: + while(1) { /* gopast, line 71 */ + if (!(in_grouping_U(z, g_v, 97, 232))) goto lab3; + break; + lab3: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) return 0; + z->c = c; /* gopast, line 71 */ + } + } + while(1) { /* gopast, line 71 */ + if (!(out_grouping_U(z, g_v, 97, 232))) goto lab4; + break; + lab4: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) return 0; + z->c = c; /* gopast, line 71 */ + } + } + z->I[1] = z->c; /* setmark p2, line 71 */ + return 1; +} + +static int r_postlude(struct SN_env * z) { + int among_var; + while(1) { /* repeat, line 75 */ + int c = z->c; + z->bra = z->c; /* [, line 77 */ + among_var = find_among(z, a_1, 3); /* substring, line 77 */ + if (!(among_var)) goto lab0; + z->ket = z->c; /* ], line 77 */ + switch(among_var) { + case 0: goto lab0; + case 1: + { int ret; + ret = slice_from_s(z, 1, s_11); /* <-, line 78 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 1, s_12); /* <-, line 79 */ + if (ret < 0) return ret; + } + break; + case 3: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab0; + z->c = c; /* next, line 80 */ + } + break; + } + continue; + lab0: + z->c = c; + break; + } + return 1; +} + +static int r_R1(struct SN_env * z) { + if (!(z->I[0] <= z->c)) return 0; + return 1; +} + +static int r_R2(struct SN_env * z) { + if (!(z->I[1] <= z->c)) return 0; + return 1; +} + +static int r_undouble(struct SN_env * z) { + { int m_test = z->l - z->c; /* test, line 91 */ + if (!(find_among_b(z, a_2, 3))) return 0; /* among, line 91 */ + z->c = z->l - m_test; + } + z->ket = z->c; /* [, line 91 */ + { int c = skip_utf8(z->p, z->c, z->lb, 0, -1); + if (c < 0) return 0; + z->c = c; /* next, line 91 */ + } + z->bra = z->c; /* ], line 91 */ + { int ret; + ret = slice_del(z); /* delete, line 91 */ + if (ret < 0) return ret; + } + return 1; +} + +static int r_e_ending(struct SN_env * z) { + z->B[0] = 0; /* unset e_found, line 95 */ + z->ket = z->c; /* [, line 96 */ + if (!(eq_s_b(z, 1, s_13))) return 0; + z->bra = z->c; /* ], line 96 */ + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 96 */ + if (ret < 0) return ret; + } + { int m_test = z->l - z->c; /* test, line 96 */ + if (!(out_grouping_b_U(z, g_v, 97, 232))) return 0; + z->c = z->l - m_test; + } + { int ret; + ret = slice_del(z); /* delete, line 96 */ + if (ret < 0) return ret; + } + z->B[0] = 1; /* set e_found, line 97 */ + { int ret = r_undouble(z); + if (ret == 0) return 0; /* call undouble, line 98 */ + if (ret < 0) return ret; + } + return 1; +} + +static int r_en_ending(struct SN_env * z) { + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 102 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* and, line 102 */ + if (!(out_grouping_b_U(z, g_v, 97, 232))) return 0; + z->c = z->l - m; + { int m = z->l - z->c; (void) m; /* not, line 102 */ + if (!(eq_s_b(z, 3, s_14))) goto lab0; + return 0; + lab0: + z->c = z->l - m; + } + } + { int ret; + ret = slice_del(z); /* delete, line 102 */ + if (ret < 0) return ret; + } + { int ret = r_undouble(z); + if (ret == 0) return 0; /* call undouble, line 103 */ + if (ret < 0) return ret; + } + return 1; +} + +static int r_standard_suffix(struct SN_env * z) { + int among_var; + { int m = z->l - z->c; (void) m; /* do, line 107 */ + z->ket = z->c; /* [, line 108 */ + among_var = find_among_b(z, a_3, 5); /* substring, line 108 */ + if (!(among_var)) goto lab0; + z->bra = z->c; /* ], line 108 */ + switch(among_var) { + case 0: goto lab0; + case 1: + { int ret = r_R1(z); + if (ret == 0) goto lab0; /* call R1, line 110 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 4, s_15); /* <-, line 110 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret = r_en_ending(z); + if (ret == 0) goto lab0; /* call en_ending, line 113 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret = r_R1(z); + if (ret == 0) goto lab0; /* call R1, line 116 */ + if (ret < 0) return ret; + } + if (!(out_grouping_b_U(z, g_v_j, 97, 232))) goto lab0; + { int ret; + ret = slice_del(z); /* delete, line 116 */ + if (ret < 0) return ret; + } + break; + } + lab0: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 120 */ + { int ret = r_e_ending(z); + if (ret == 0) goto lab1; /* call e_ending, line 120 */ + if (ret < 0) return ret; + } + lab1: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 122 */ + z->ket = z->c; /* [, line 122 */ + if (!(eq_s_b(z, 4, s_16))) goto lab2; + z->bra = z->c; /* ], line 122 */ + { int ret = r_R2(z); + if (ret == 0) goto lab2; /* call R2, line 122 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* not, line 122 */ + if (!(eq_s_b(z, 1, s_17))) goto lab3; + goto lab2; + lab3: + z->c = z->l - m; + } + { int ret; + ret = slice_del(z); /* delete, line 122 */ + if (ret < 0) return ret; + } + z->ket = z->c; /* [, line 123 */ + if (!(eq_s_b(z, 2, s_18))) goto lab2; + z->bra = z->c; /* ], line 123 */ + { int ret = r_en_ending(z); + if (ret == 0) goto lab2; /* call en_ending, line 123 */ + if (ret < 0) return ret; + } + lab2: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 126 */ + z->ket = z->c; /* [, line 127 */ + among_var = find_among_b(z, a_4, 6); /* substring, line 127 */ + if (!(among_var)) goto lab4; + z->bra = z->c; /* ], line 127 */ + switch(among_var) { + case 0: goto lab4; + case 1: + { int ret = r_R2(z); + if (ret == 0) goto lab4; /* call R2, line 129 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 129 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* or, line 130 */ + z->ket = z->c; /* [, line 130 */ + if (!(eq_s_b(z, 2, s_19))) goto lab6; + z->bra = z->c; /* ], line 130 */ + { int ret = r_R2(z); + if (ret == 0) goto lab6; /* call R2, line 130 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* not, line 130 */ + if (!(eq_s_b(z, 1, s_20))) goto lab7; + goto lab6; + lab7: + z->c = z->l - m; + } + { int ret; + ret = slice_del(z); /* delete, line 130 */ + if (ret < 0) return ret; + } + goto lab5; + lab6: + z->c = z->l - m; + { int ret = r_undouble(z); + if (ret == 0) goto lab4; /* call undouble, line 130 */ + if (ret < 0) return ret; + } + } + lab5: + break; + case 2: + { int ret = r_R2(z); + if (ret == 0) goto lab4; /* call R2, line 133 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* not, line 133 */ + if (!(eq_s_b(z, 1, s_21))) goto lab8; + goto lab4; + lab8: + z->c = z->l - m; + } + { int ret; + ret = slice_del(z); /* delete, line 133 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret = r_R2(z); + if (ret == 0) goto lab4; /* call R2, line 136 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 136 */ + if (ret < 0) return ret; + } + { int ret = r_e_ending(z); + if (ret == 0) goto lab4; /* call e_ending, line 136 */ + if (ret < 0) return ret; + } + break; + case 4: + { int ret = r_R2(z); + if (ret == 0) goto lab4; /* call R2, line 139 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 139 */ + if (ret < 0) return ret; + } + break; + case 5: + { int ret = r_R2(z); + if (ret == 0) goto lab4; /* call R2, line 142 */ + if (ret < 0) return ret; + } + if (!(z->B[0])) goto lab4; /* Boolean test e_found, line 142 */ + { int ret; + ret = slice_del(z); /* delete, line 142 */ + if (ret < 0) return ret; + } + break; + } + lab4: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 146 */ + if (!(out_grouping_b_U(z, g_v_I, 73, 232))) goto lab9; + { int m_test = z->l - z->c; /* test, line 148 */ + if (!(find_among_b(z, a_5, 4))) goto lab9; /* among, line 149 */ + if (!(out_grouping_b_U(z, g_v, 97, 232))) goto lab9; + z->c = z->l - m_test; + } + z->ket = z->c; /* [, line 152 */ + { int c = skip_utf8(z->p, z->c, z->lb, 0, -1); + if (c < 0) goto lab9; + z->c = c; /* next, line 152 */ + } + z->bra = z->c; /* ], line 152 */ + { int ret; + ret = slice_del(z); /* delete, line 152 */ + if (ret < 0) return ret; + } + lab9: + z->c = z->l - m; + } + return 1; +} + +extern int dutch_UTF_8_stem(struct SN_env * z) { + { int c = z->c; /* do, line 159 */ + { int ret = r_prelude(z); + if (ret == 0) goto lab0; /* call prelude, line 159 */ + if (ret < 0) return ret; + } + lab0: + z->c = c; + } + { int c = z->c; /* do, line 160 */ + { int ret = r_mark_regions(z); + if (ret == 0) goto lab1; /* call mark_regions, line 160 */ + if (ret < 0) return ret; + } + lab1: + z->c = c; + } + z->lb = z->c; z->c = z->l; /* backwards, line 161 */ + + { int m = z->l - z->c; (void) m; /* do, line 162 */ + { int ret = r_standard_suffix(z); + if (ret == 0) goto lab2; /* call standard_suffix, line 162 */ + if (ret < 0) return ret; + } + lab2: + z->c = z->l - m; + } + z->c = z->lb; + { int c = z->c; /* do, line 163 */ + { int ret = r_postlude(z); + if (ret == 0) goto lab3; /* call postlude, line 163 */ + if (ret < 0) return ret; + } + lab3: + z->c = c; + } + return 1; +} + +extern struct SN_env * dutch_UTF_8_create_env(void) { return SN_create_env(0, 2, 1); } + +extern void dutch_UTF_8_close_env(struct SN_env * z) { SN_close_env(z); } + diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_dutch.h b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_dutch.h new file mode 100644 index 0000000..a996464 --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_dutch.h @@ -0,0 +1,16 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern struct SN_env * dutch_UTF_8_create_env(void); +extern void dutch_UTF_8_close_env(struct SN_env * z); + +extern int dutch_UTF_8_stem(struct SN_env * z); + +#ifdef __cplusplus +} +#endif + diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_english.c b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_english.c new file mode 100644 index 0000000..e825cb7 --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_english.c @@ -0,0 +1,1178 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#include "../runtime/header.h" + +extern int english_UTF_8_stem(struct SN_env * z); +static int r_exception2(struct SN_env * z); +static int r_exception1(struct SN_env * z); +static int r_Step_5(struct SN_env * z); +static int r_Step_4(struct SN_env * z); +static int r_Step_3(struct SN_env * z); +static int r_Step_2(struct SN_env * z); +static int r_Step_1c(struct SN_env * z); +static int r_Step_1b(struct SN_env * z); +static int r_Step_1a(struct SN_env * z); +static int r_R2(struct SN_env * z); +static int r_R1(struct SN_env * z); +static int r_shortv(struct SN_env * z); +static int r_mark_regions(struct SN_env * z); +static int r_postlude(struct SN_env * z); +static int r_prelude(struct SN_env * z); + +extern struct SN_env * english_UTF_8_create_env(void); +extern void english_UTF_8_close_env(struct SN_env * z); + +static symbol s_0_0[6] = { 'c', 'o', 'm', 'm', 'u', 'n' }; +static symbol s_0_1[5] = { 'g', 'e', 'n', 'e', 'r' }; + +static struct among a_0[2] = +{ +/* 0 */ { 6, s_0_0, -1, -1, 0}, +/* 1 */ { 5, s_0_1, -1, -1, 0} +}; + +static symbol s_1_0[1] = { '\'' }; +static symbol s_1_1[3] = { '\'', 's', '\'' }; +static symbol s_1_2[2] = { '\'', 's' }; + +static struct among a_1[3] = +{ +/* 0 */ { 1, s_1_0, -1, 1, 0}, +/* 1 */ { 3, s_1_1, 0, 1, 0}, +/* 2 */ { 2, s_1_2, -1, 1, 0} +}; + +static symbol s_2_0[3] = { 'i', 'e', 'd' }; +static symbol s_2_1[1] = { 's' }; +static symbol s_2_2[3] = { 'i', 'e', 's' }; +static symbol s_2_3[4] = { 's', 's', 'e', 's' }; +static symbol s_2_4[2] = { 's', 's' }; +static symbol s_2_5[2] = { 'u', 's' }; + +static struct among a_2[6] = +{ +/* 0 */ { 3, s_2_0, -1, 2, 0}, +/* 1 */ { 1, s_2_1, -1, 3, 0}, +/* 2 */ { 3, s_2_2, 1, 2, 0}, +/* 3 */ { 4, s_2_3, 1, 1, 0}, +/* 4 */ { 2, s_2_4, 1, -1, 0}, +/* 5 */ { 2, s_2_5, 1, -1, 0} +}; + +static symbol s_3_1[2] = { 'b', 'b' }; +static symbol s_3_2[2] = { 'd', 'd' }; +static symbol s_3_3[2] = { 'f', 'f' }; +static symbol s_3_4[2] = { 'g', 'g' }; +static symbol s_3_5[2] = { 'b', 'l' }; +static symbol s_3_6[2] = { 'm', 'm' }; +static symbol s_3_7[2] = { 'n', 'n' }; +static symbol s_3_8[2] = { 'p', 'p' }; +static symbol s_3_9[2] = { 'r', 'r' }; +static symbol s_3_10[2] = { 'a', 't' }; +static symbol s_3_11[2] = { 't', 't' }; +static symbol s_3_12[2] = { 'i', 'z' }; + +static struct among a_3[13] = +{ +/* 0 */ { 0, 0, -1, 3, 0}, +/* 1 */ { 2, s_3_1, 0, 2, 0}, +/* 2 */ { 2, s_3_2, 0, 2, 0}, +/* 3 */ { 2, s_3_3, 0, 2, 0}, +/* 4 */ { 2, s_3_4, 0, 2, 0}, +/* 5 */ { 2, s_3_5, 0, 1, 0}, +/* 6 */ { 2, s_3_6, 0, 2, 0}, +/* 7 */ { 2, s_3_7, 0, 2, 0}, +/* 8 */ { 2, s_3_8, 0, 2, 0}, +/* 9 */ { 2, s_3_9, 0, 2, 0}, +/* 10 */ { 2, s_3_10, 0, 1, 0}, +/* 11 */ { 2, s_3_11, 0, 2, 0}, +/* 12 */ { 2, s_3_12, 0, 1, 0} +}; + +static symbol s_4_0[2] = { 'e', 'd' }; +static symbol s_4_1[3] = { 'e', 'e', 'd' }; +static symbol s_4_2[3] = { 'i', 'n', 'g' }; +static symbol s_4_3[4] = { 'e', 'd', 'l', 'y' }; +static symbol s_4_4[5] = { 'e', 'e', 'd', 'l', 'y' }; +static symbol s_4_5[5] = { 'i', 'n', 'g', 'l', 'y' }; + +static struct among a_4[6] = +{ +/* 0 */ { 2, s_4_0, -1, 2, 0}, +/* 1 */ { 3, s_4_1, 0, 1, 0}, +/* 2 */ { 3, s_4_2, -1, 2, 0}, +/* 3 */ { 4, s_4_3, -1, 2, 0}, +/* 4 */ { 5, s_4_4, 3, 1, 0}, +/* 5 */ { 5, s_4_5, -1, 2, 0} +}; + +static symbol s_5_0[4] = { 'a', 'n', 'c', 'i' }; +static symbol s_5_1[4] = { 'e', 'n', 'c', 'i' }; +static symbol s_5_2[3] = { 'o', 'g', 'i' }; +static symbol s_5_3[2] = { 'l', 'i' }; +static symbol s_5_4[3] = { 'b', 'l', 'i' }; +static symbol s_5_5[4] = { 'a', 'b', 'l', 'i' }; +static symbol s_5_6[4] = { 'a', 'l', 'l', 'i' }; +static symbol s_5_7[5] = { 'f', 'u', 'l', 'l', 'i' }; +static symbol s_5_8[6] = { 'l', 'e', 's', 's', 'l', 'i' }; +static symbol s_5_9[5] = { 'o', 'u', 's', 'l', 'i' }; +static symbol s_5_10[5] = { 'e', 'n', 't', 'l', 'i' }; +static symbol s_5_11[5] = { 'a', 'l', 'i', 't', 'i' }; +static symbol s_5_12[6] = { 'b', 'i', 'l', 'i', 't', 'i' }; +static symbol s_5_13[5] = { 'i', 'v', 'i', 't', 'i' }; +static symbol s_5_14[6] = { 't', 'i', 'o', 'n', 'a', 'l' }; +static symbol s_5_15[7] = { 'a', 't', 'i', 'o', 'n', 'a', 'l' }; +static symbol s_5_16[5] = { 'a', 'l', 'i', 's', 'm' }; +static symbol s_5_17[5] = { 'a', 't', 'i', 'o', 'n' }; +static symbol s_5_18[7] = { 'i', 'z', 'a', 't', 'i', 'o', 'n' }; +static symbol s_5_19[4] = { 'i', 'z', 'e', 'r' }; +static symbol s_5_20[4] = { 'a', 't', 'o', 'r' }; +static symbol s_5_21[7] = { 'i', 'v', 'e', 'n', 'e', 's', 's' }; +static symbol s_5_22[7] = { 'f', 'u', 'l', 'n', 'e', 's', 's' }; +static symbol s_5_23[7] = { 'o', 'u', 's', 'n', 'e', 's', 's' }; + +static struct among a_5[24] = +{ +/* 0 */ { 4, s_5_0, -1, 3, 0}, +/* 1 */ { 4, s_5_1, -1, 2, 0}, +/* 2 */ { 3, s_5_2, -1, 13, 0}, +/* 3 */ { 2, s_5_3, -1, 16, 0}, +/* 4 */ { 3, s_5_4, 3, 12, 0}, +/* 5 */ { 4, s_5_5, 4, 4, 0}, +/* 6 */ { 4, s_5_6, 3, 8, 0}, +/* 7 */ { 5, s_5_7, 3, 14, 0}, +/* 8 */ { 6, s_5_8, 3, 15, 0}, +/* 9 */ { 5, s_5_9, 3, 10, 0}, +/* 10 */ { 5, s_5_10, 3, 5, 0}, +/* 11 */ { 5, s_5_11, -1, 8, 0}, +/* 12 */ { 6, s_5_12, -1, 12, 0}, +/* 13 */ { 5, s_5_13, -1, 11, 0}, +/* 14 */ { 6, s_5_14, -1, 1, 0}, +/* 15 */ { 7, s_5_15, 14, 7, 0}, +/* 16 */ { 5, s_5_16, -1, 8, 0}, +/* 17 */ { 5, s_5_17, -1, 7, 0}, +/* 18 */ { 7, s_5_18, 17, 6, 0}, +/* 19 */ { 4, s_5_19, -1, 6, 0}, +/* 20 */ { 4, s_5_20, -1, 7, 0}, +/* 21 */ { 7, s_5_21, -1, 11, 0}, +/* 22 */ { 7, s_5_22, -1, 9, 0}, +/* 23 */ { 7, s_5_23, -1, 10, 0} +}; + +static symbol s_6_0[5] = { 'i', 'c', 'a', 't', 'e' }; +static symbol s_6_1[5] = { 'a', 't', 'i', 'v', 'e' }; +static symbol s_6_2[5] = { 'a', 'l', 'i', 'z', 'e' }; +static symbol s_6_3[5] = { 'i', 'c', 'i', 't', 'i' }; +static symbol s_6_4[4] = { 'i', 'c', 'a', 'l' }; +static symbol s_6_5[6] = { 't', 'i', 'o', 'n', 'a', 'l' }; +static symbol s_6_6[7] = { 'a', 't', 'i', 'o', 'n', 'a', 'l' }; +static symbol s_6_7[3] = { 'f', 'u', 'l' }; +static symbol s_6_8[4] = { 'n', 'e', 's', 's' }; + +static struct among a_6[9] = +{ +/* 0 */ { 5, s_6_0, -1, 4, 0}, +/* 1 */ { 5, s_6_1, -1, 6, 0}, +/* 2 */ { 5, s_6_2, -1, 3, 0}, +/* 3 */ { 5, s_6_3, -1, 4, 0}, +/* 4 */ { 4, s_6_4, -1, 4, 0}, +/* 5 */ { 6, s_6_5, -1, 1, 0}, +/* 6 */ { 7, s_6_6, 5, 2, 0}, +/* 7 */ { 3, s_6_7, -1, 5, 0}, +/* 8 */ { 4, s_6_8, -1, 5, 0} +}; + +static symbol s_7_0[2] = { 'i', 'c' }; +static symbol s_7_1[4] = { 'a', 'n', 'c', 'e' }; +static symbol s_7_2[4] = { 'e', 'n', 'c', 'e' }; +static symbol s_7_3[4] = { 'a', 'b', 'l', 'e' }; +static symbol s_7_4[4] = { 'i', 'b', 'l', 'e' }; +static symbol s_7_5[3] = { 'a', 't', 'e' }; +static symbol s_7_6[3] = { 'i', 'v', 'e' }; +static symbol s_7_7[3] = { 'i', 'z', 'e' }; +static symbol s_7_8[3] = { 'i', 't', 'i' }; +static symbol s_7_9[2] = { 'a', 'l' }; +static symbol s_7_10[3] = { 'i', 's', 'm' }; +static symbol s_7_11[3] = { 'i', 'o', 'n' }; +static symbol s_7_12[2] = { 'e', 'r' }; +static symbol s_7_13[3] = { 'o', 'u', 's' }; +static symbol s_7_14[3] = { 'a', 'n', 't' }; +static symbol s_7_15[3] = { 'e', 'n', 't' }; +static symbol s_7_16[4] = { 'm', 'e', 'n', 't' }; +static symbol s_7_17[5] = { 'e', 'm', 'e', 'n', 't' }; + +static struct among a_7[18] = +{ +/* 0 */ { 2, s_7_0, -1, 1, 0}, +/* 1 */ { 4, s_7_1, -1, 1, 0}, +/* 2 */ { 4, s_7_2, -1, 1, 0}, +/* 3 */ { 4, s_7_3, -1, 1, 0}, +/* 4 */ { 4, s_7_4, -1, 1, 0}, +/* 5 */ { 3, s_7_5, -1, 1, 0}, +/* 6 */ { 3, s_7_6, -1, 1, 0}, +/* 7 */ { 3, s_7_7, -1, 1, 0}, +/* 8 */ { 3, s_7_8, -1, 1, 0}, +/* 9 */ { 2, s_7_9, -1, 1, 0}, +/* 10 */ { 3, s_7_10, -1, 1, 0}, +/* 11 */ { 3, s_7_11, -1, 2, 0}, +/* 12 */ { 2, s_7_12, -1, 1, 0}, +/* 13 */ { 3, s_7_13, -1, 1, 0}, +/* 14 */ { 3, s_7_14, -1, 1, 0}, +/* 15 */ { 3, s_7_15, -1, 1, 0}, +/* 16 */ { 4, s_7_16, 15, 1, 0}, +/* 17 */ { 5, s_7_17, 16, 1, 0} +}; + +static symbol s_8_0[1] = { 'e' }; +static symbol s_8_1[1] = { 'l' }; + +static struct among a_8[2] = +{ +/* 0 */ { 1, s_8_0, -1, 1, 0}, +/* 1 */ { 1, s_8_1, -1, 2, 0} +}; + +static symbol s_9_0[7] = { 's', 'u', 'c', 'c', 'e', 'e', 'd' }; +static symbol s_9_1[7] = { 'p', 'r', 'o', 'c', 'e', 'e', 'd' }; +static symbol s_9_2[6] = { 'e', 'x', 'c', 'e', 'e', 'd' }; +static symbol s_9_3[7] = { 'c', 'a', 'n', 'n', 'i', 'n', 'g' }; +static symbol s_9_4[6] = { 'i', 'n', 'n', 'i', 'n', 'g' }; +static symbol s_9_5[7] = { 'e', 'a', 'r', 'r', 'i', 'n', 'g' }; +static symbol s_9_6[7] = { 'h', 'e', 'r', 'r', 'i', 'n', 'g' }; +static symbol s_9_7[6] = { 'o', 'u', 't', 'i', 'n', 'g' }; + +static struct among a_9[8] = +{ +/* 0 */ { 7, s_9_0, -1, -1, 0}, +/* 1 */ { 7, s_9_1, -1, -1, 0}, +/* 2 */ { 6, s_9_2, -1, -1, 0}, +/* 3 */ { 7, s_9_3, -1, -1, 0}, +/* 4 */ { 6, s_9_4, -1, -1, 0}, +/* 5 */ { 7, s_9_5, -1, -1, 0}, +/* 6 */ { 7, s_9_6, -1, -1, 0}, +/* 7 */ { 6, s_9_7, -1, -1, 0} +}; + +static symbol s_10_0[5] = { 'a', 'n', 'd', 'e', 's' }; +static symbol s_10_1[5] = { 'a', 't', 'l', 'a', 's' }; +static symbol s_10_2[4] = { 'b', 'i', 'a', 's' }; +static symbol s_10_3[6] = { 'c', 'o', 's', 'm', 'o', 's' }; +static symbol s_10_4[5] = { 'd', 'y', 'i', 'n', 'g' }; +static symbol s_10_5[5] = { 'e', 'a', 'r', 'l', 'y' }; +static symbol s_10_6[6] = { 'g', 'e', 'n', 't', 'l', 'y' }; +static symbol s_10_7[4] = { 'h', 'o', 'w', 'e' }; +static symbol s_10_8[4] = { 'i', 'd', 'l', 'y' }; +static symbol s_10_9[5] = { 'l', 'y', 'i', 'n', 'g' }; +static symbol s_10_10[4] = { 'n', 'e', 'w', 's' }; +static symbol s_10_11[4] = { 'o', 'n', 'l', 'y' }; +static symbol s_10_12[6] = { 's', 'i', 'n', 'g', 'l', 'y' }; +static symbol s_10_13[5] = { 's', 'k', 'i', 'e', 's' }; +static symbol s_10_14[4] = { 's', 'k', 'i', 's' }; +static symbol s_10_15[3] = { 's', 'k', 'y' }; +static symbol s_10_16[5] = { 't', 'y', 'i', 'n', 'g' }; +static symbol s_10_17[4] = { 'u', 'g', 'l', 'y' }; + +static struct among a_10[18] = +{ +/* 0 */ { 5, s_10_0, -1, -1, 0}, +/* 1 */ { 5, s_10_1, -1, -1, 0}, +/* 2 */ { 4, s_10_2, -1, -1, 0}, +/* 3 */ { 6, s_10_3, -1, -1, 0}, +/* 4 */ { 5, s_10_4, -1, 3, 0}, +/* 5 */ { 5, s_10_5, -1, 9, 0}, +/* 6 */ { 6, s_10_6, -1, 7, 0}, +/* 7 */ { 4, s_10_7, -1, -1, 0}, +/* 8 */ { 4, s_10_8, -1, 6, 0}, +/* 9 */ { 5, s_10_9, -1, 4, 0}, +/* 10 */ { 4, s_10_10, -1, -1, 0}, +/* 11 */ { 4, s_10_11, -1, 10, 0}, +/* 12 */ { 6, s_10_12, -1, 11, 0}, +/* 13 */ { 5, s_10_13, -1, 2, 0}, +/* 14 */ { 4, s_10_14, -1, 1, 0}, +/* 15 */ { 3, s_10_15, -1, -1, 0}, +/* 16 */ { 5, s_10_16, -1, 5, 0}, +/* 17 */ { 4, s_10_17, -1, 8, 0} +}; + +static unsigned char g_v[] = { 17, 65, 16, 1 }; + +static unsigned char g_v_WXY[] = { 1, 17, 65, 208, 1 }; + +static unsigned char g_valid_LI[] = { 55, 141, 2 }; + +static symbol s_0[] = { '\'' }; +static symbol s_1[] = { 'y' }; +static symbol s_2[] = { 'Y' }; +static symbol s_3[] = { 'y' }; +static symbol s_4[] = { 'Y' }; +static symbol s_5[] = { 's', 's' }; +static symbol s_6[] = { 'i', 'e' }; +static symbol s_7[] = { 'i' }; +static symbol s_8[] = { 'e', 'e' }; +static symbol s_9[] = { 'e' }; +static symbol s_10[] = { 'e' }; +static symbol s_11[] = { 'y' }; +static symbol s_12[] = { 'Y' }; +static symbol s_13[] = { 'i' }; +static symbol s_14[] = { 't', 'i', 'o', 'n' }; +static symbol s_15[] = { 'e', 'n', 'c', 'e' }; +static symbol s_16[] = { 'a', 'n', 'c', 'e' }; +static symbol s_17[] = { 'a', 'b', 'l', 'e' }; +static symbol s_18[] = { 'e', 'n', 't' }; +static symbol s_19[] = { 'i', 'z', 'e' }; +static symbol s_20[] = { 'a', 't', 'e' }; +static symbol s_21[] = { 'a', 'l' }; +static symbol s_22[] = { 'f', 'u', 'l' }; +static symbol s_23[] = { 'o', 'u', 's' }; +static symbol s_24[] = { 'i', 'v', 'e' }; +static symbol s_25[] = { 'b', 'l', 'e' }; +static symbol s_26[] = { 'l' }; +static symbol s_27[] = { 'o', 'g' }; +static symbol s_28[] = { 'f', 'u', 'l' }; +static symbol s_29[] = { 'l', 'e', 's', 's' }; +static symbol s_30[] = { 't', 'i', 'o', 'n' }; +static symbol s_31[] = { 'a', 't', 'e' }; +static symbol s_32[] = { 'a', 'l' }; +static symbol s_33[] = { 'i', 'c' }; +static symbol s_34[] = { 's' }; +static symbol s_35[] = { 't' }; +static symbol s_36[] = { 'l' }; +static symbol s_37[] = { 's', 'k', 'i' }; +static symbol s_38[] = { 's', 'k', 'y' }; +static symbol s_39[] = { 'd', 'i', 'e' }; +static symbol s_40[] = { 'l', 'i', 'e' }; +static symbol s_41[] = { 't', 'i', 'e' }; +static symbol s_42[] = { 'i', 'd', 'l' }; +static symbol s_43[] = { 'g', 'e', 'n', 't', 'l' }; +static symbol s_44[] = { 'u', 'g', 'l', 'i' }; +static symbol s_45[] = { 'e', 'a', 'r', 'l', 'i' }; +static symbol s_46[] = { 'o', 'n', 'l', 'i' }; +static symbol s_47[] = { 's', 'i', 'n', 'g', 'l' }; +static symbol s_48[] = { 'Y' }; +static symbol s_49[] = { 'y' }; + +static int r_prelude(struct SN_env * z) { + z->B[0] = 0; /* unset Y_found, line 26 */ + { int c = z->c; /* do, line 27 */ + z->bra = z->c; /* [, line 27 */ + if (!(eq_s(z, 1, s_0))) goto lab0; + z->ket = z->c; /* ], line 27 */ + { int ret; + ret = slice_del(z); /* delete, line 27 */ + if (ret < 0) return ret; + } + lab0: + z->c = c; + } + { int c = z->c; /* do, line 28 */ + z->bra = z->c; /* [, line 28 */ + if (!(eq_s(z, 1, s_1))) goto lab1; + z->ket = z->c; /* ], line 28 */ + if (!(in_grouping_U(z, g_v, 97, 121))) goto lab1; + { int ret; + ret = slice_from_s(z, 1, s_2); /* <-, line 28 */ + if (ret < 0) return ret; + } + z->B[0] = 1; /* set Y_found, line 28 */ + lab1: + z->c = c; + } + { int c = z->c; /* do, line 29 */ + while(1) { /* repeat, line 29 */ + int c = z->c; + while(1) { /* goto, line 29 */ + int c = z->c; + if (!(in_grouping_U(z, g_v, 97, 121))) goto lab4; + z->bra = z->c; /* [, line 29 */ + if (!(eq_s(z, 1, s_3))) goto lab4; + z->ket = z->c; /* ], line 29 */ + z->c = c; + break; + lab4: + z->c = c; + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab3; + z->c = c; /* goto, line 29 */ + } + } + { int ret; + ret = slice_from_s(z, 1, s_4); /* <-, line 29 */ + if (ret < 0) return ret; + } + z->B[0] = 1; /* set Y_found, line 29 */ + continue; + lab3: + z->c = c; + break; + } + z->c = c; + } + return 1; +} + +static int r_mark_regions(struct SN_env * z) { + z->I[0] = z->l; + z->I[1] = z->l; + { int c = z->c; /* do, line 35 */ + { int c = z->c; /* or, line 40 */ + if (!(find_among(z, a_0, 2))) goto lab2; /* among, line 36 */ + goto lab1; + lab2: + z->c = c; + while(1) { /* gopast, line 40 */ + if (!(in_grouping_U(z, g_v, 97, 121))) goto lab3; + break; + lab3: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab0; + z->c = c; /* gopast, line 40 */ + } + } + while(1) { /* gopast, line 40 */ + if (!(out_grouping_U(z, g_v, 97, 121))) goto lab4; + break; + lab4: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab0; + z->c = c; /* gopast, line 40 */ + } + } + } + lab1: + z->I[0] = z->c; /* setmark p1, line 41 */ + while(1) { /* gopast, line 42 */ + if (!(in_grouping_U(z, g_v, 97, 121))) goto lab5; + break; + lab5: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab0; + z->c = c; /* gopast, line 42 */ + } + } + while(1) { /* gopast, line 42 */ + if (!(out_grouping_U(z, g_v, 97, 121))) goto lab6; + break; + lab6: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab0; + z->c = c; /* gopast, line 42 */ + } + } + z->I[1] = z->c; /* setmark p2, line 42 */ + lab0: + z->c = c; + } + return 1; +} + +static int r_shortv(struct SN_env * z) { + { int m = z->l - z->c; (void) m; /* or, line 50 */ + if (!(out_grouping_b_U(z, g_v_WXY, 89, 121))) goto lab1; + if (!(in_grouping_b_U(z, g_v, 97, 121))) goto lab1; + if (!(out_grouping_b_U(z, g_v, 97, 121))) goto lab1; + goto lab0; + lab1: + z->c = z->l - m; + if (!(out_grouping_b_U(z, g_v, 97, 121))) return 0; + if (!(in_grouping_b_U(z, g_v, 97, 121))) return 0; + if (z->c > z->lb) return 0; /* atlimit, line 51 */ + } +lab0: + return 1; +} + +static int r_R1(struct SN_env * z) { + if (!(z->I[0] <= z->c)) return 0; + return 1; +} + +static int r_R2(struct SN_env * z) { + if (!(z->I[1] <= z->c)) return 0; + return 1; +} + +static int r_Step_1a(struct SN_env * z) { + int among_var; + { int m = z->l - z->c; (void) m; /* try, line 58 */ + z->ket = z->c; /* [, line 59 */ + among_var = find_among_b(z, a_1, 3); /* substring, line 59 */ + if (!(among_var)) { z->c = z->l - m; goto lab0; } + z->bra = z->c; /* ], line 59 */ + switch(among_var) { + case 0: { z->c = z->l - m; goto lab0; } + case 1: + { int ret; + ret = slice_del(z); /* delete, line 61 */ + if (ret < 0) return ret; + } + break; + } + lab0: + ; + } + z->ket = z->c; /* [, line 64 */ + among_var = find_among_b(z, a_2, 6); /* substring, line 64 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 64 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_from_s(z, 2, s_5); /* <-, line 65 */ + if (ret < 0) return ret; + } + break; + case 2: + { int m = z->l - z->c; (void) m; /* or, line 67 */ + { int c = skip_utf8(z->p, z->c, z->lb, 0, -1); + if (c < 0) goto lab2; + z->c = c; /* next, line 67 */ + } + if (z->c > z->lb) goto lab2; /* atlimit, line 67 */ + { int ret; + ret = slice_from_s(z, 2, s_6); /* <-, line 67 */ + if (ret < 0) return ret; + } + goto lab1; + lab2: + z->c = z->l - m; + { int ret; + ret = slice_from_s(z, 1, s_7); /* <-, line 67 */ + if (ret < 0) return ret; + } + } + lab1: + break; + case 3: + { int c = skip_utf8(z->p, z->c, z->lb, 0, -1); + if (c < 0) return 0; + z->c = c; /* next, line 68 */ + } + while(1) { /* gopast, line 68 */ + if (!(in_grouping_b_U(z, g_v, 97, 121))) goto lab3; + break; + lab3: + { int c = skip_utf8(z->p, z->c, z->lb, 0, -1); + if (c < 0) return 0; + z->c = c; /* gopast, line 68 */ + } + } + { int ret; + ret = slice_del(z); /* delete, line 68 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_Step_1b(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 74 */ + among_var = find_among_b(z, a_4, 6); /* substring, line 74 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 74 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 76 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 2, s_8); /* <-, line 76 */ + if (ret < 0) return ret; + } + break; + case 2: + { int m_test = z->l - z->c; /* test, line 79 */ + while(1) { /* gopast, line 79 */ + if (!(in_grouping_b_U(z, g_v, 97, 121))) goto lab0; + break; + lab0: + { int c = skip_utf8(z->p, z->c, z->lb, 0, -1); + if (c < 0) return 0; + z->c = c; /* gopast, line 79 */ + } + } + z->c = z->l - m_test; + } + { int ret; + ret = slice_del(z); /* delete, line 79 */ + if (ret < 0) return ret; + } + { int m_test = z->l - z->c; /* test, line 80 */ + among_var = find_among_b(z, a_3, 13); /* substring, line 80 */ + if (!(among_var)) return 0; + z->c = z->l - m_test; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + { int c = z->c; + ret = insert_s(z, z->c, z->c, 1, s_9); /* <+, line 82 */ + z->c = c; + } + if (ret < 0) return ret; + } + break; + case 2: + z->ket = z->c; /* [, line 85 */ + { int c = skip_utf8(z->p, z->c, z->lb, 0, -1); + if (c < 0) return 0; + z->c = c; /* next, line 85 */ + } + z->bra = z->c; /* ], line 85 */ + { int ret; + ret = slice_del(z); /* delete, line 85 */ + if (ret < 0) return ret; + } + break; + case 3: + if (z->c != z->I[0]) return 0; /* atmark, line 86 */ + { int m_test = z->l - z->c; /* test, line 86 */ + { int ret = r_shortv(z); + if (ret == 0) return 0; /* call shortv, line 86 */ + if (ret < 0) return ret; + } + z->c = z->l - m_test; + } + { int ret; + { int c = z->c; + ret = insert_s(z, z->c, z->c, 1, s_10); /* <+, line 86 */ + z->c = c; + } + if (ret < 0) return ret; + } + break; + } + break; + } + return 1; +} + +static int r_Step_1c(struct SN_env * z) { + z->ket = z->c; /* [, line 93 */ + { int m = z->l - z->c; (void) m; /* or, line 93 */ + if (!(eq_s_b(z, 1, s_11))) goto lab1; + goto lab0; + lab1: + z->c = z->l - m; + if (!(eq_s_b(z, 1, s_12))) return 0; + } +lab0: + z->bra = z->c; /* ], line 93 */ + if (!(out_grouping_b_U(z, g_v, 97, 121))) return 0; + { int m = z->l - z->c; (void) m; /* not, line 94 */ + if (z->c > z->lb) goto lab2; /* atlimit, line 94 */ + return 0; + lab2: + z->c = z->l - m; + } + { int ret; + ret = slice_from_s(z, 1, s_13); /* <-, line 95 */ + if (ret < 0) return ret; + } + return 1; +} + +static int r_Step_2(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 99 */ + among_var = find_among_b(z, a_5, 24); /* substring, line 99 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 99 */ + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 99 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_from_s(z, 4, s_14); /* <-, line 100 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 4, s_15); /* <-, line 101 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_from_s(z, 4, s_16); /* <-, line 102 */ + if (ret < 0) return ret; + } + break; + case 4: + { int ret; + ret = slice_from_s(z, 4, s_17); /* <-, line 103 */ + if (ret < 0) return ret; + } + break; + case 5: + { int ret; + ret = slice_from_s(z, 3, s_18); /* <-, line 104 */ + if (ret < 0) return ret; + } + break; + case 6: + { int ret; + ret = slice_from_s(z, 3, s_19); /* <-, line 106 */ + if (ret < 0) return ret; + } + break; + case 7: + { int ret; + ret = slice_from_s(z, 3, s_20); /* <-, line 108 */ + if (ret < 0) return ret; + } + break; + case 8: + { int ret; + ret = slice_from_s(z, 2, s_21); /* <-, line 110 */ + if (ret < 0) return ret; + } + break; + case 9: + { int ret; + ret = slice_from_s(z, 3, s_22); /* <-, line 111 */ + if (ret < 0) return ret; + } + break; + case 10: + { int ret; + ret = slice_from_s(z, 3, s_23); /* <-, line 113 */ + if (ret < 0) return ret; + } + break; + case 11: + { int ret; + ret = slice_from_s(z, 3, s_24); /* <-, line 115 */ + if (ret < 0) return ret; + } + break; + case 12: + { int ret; + ret = slice_from_s(z, 3, s_25); /* <-, line 117 */ + if (ret < 0) return ret; + } + break; + case 13: + if (!(eq_s_b(z, 1, s_26))) return 0; + { int ret; + ret = slice_from_s(z, 2, s_27); /* <-, line 118 */ + if (ret < 0) return ret; + } + break; + case 14: + { int ret; + ret = slice_from_s(z, 3, s_28); /* <-, line 119 */ + if (ret < 0) return ret; + } + break; + case 15: + { int ret; + ret = slice_from_s(z, 4, s_29); /* <-, line 120 */ + if (ret < 0) return ret; + } + break; + case 16: + if (!(in_grouping_b_U(z, g_valid_LI, 99, 116))) return 0; + { int ret; + ret = slice_del(z); /* delete, line 121 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_Step_3(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 126 */ + among_var = find_among_b(z, a_6, 9); /* substring, line 126 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 126 */ + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 126 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_from_s(z, 4, s_30); /* <-, line 127 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 3, s_31); /* <-, line 128 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_from_s(z, 2, s_32); /* <-, line 129 */ + if (ret < 0) return ret; + } + break; + case 4: + { int ret; + ret = slice_from_s(z, 2, s_33); /* <-, line 131 */ + if (ret < 0) return ret; + } + break; + case 5: + { int ret; + ret = slice_del(z); /* delete, line 133 */ + if (ret < 0) return ret; + } + break; + case 6: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 135 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 135 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_Step_4(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 140 */ + among_var = find_among_b(z, a_7, 18); /* substring, line 140 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 140 */ + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 140 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 143 */ + if (ret < 0) return ret; + } + break; + case 2: + { int m = z->l - z->c; (void) m; /* or, line 144 */ + if (!(eq_s_b(z, 1, s_34))) goto lab1; + goto lab0; + lab1: + z->c = z->l - m; + if (!(eq_s_b(z, 1, s_35))) return 0; + } + lab0: + { int ret; + ret = slice_del(z); /* delete, line 144 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_Step_5(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 149 */ + among_var = find_among_b(z, a_8, 2); /* substring, line 149 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 149 */ + switch(among_var) { + case 0: return 0; + case 1: + { int m = z->l - z->c; (void) m; /* or, line 150 */ + { int ret = r_R2(z); + if (ret == 0) goto lab1; /* call R2, line 150 */ + if (ret < 0) return ret; + } + goto lab0; + lab1: + z->c = z->l - m; + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 150 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* not, line 150 */ + { int ret = r_shortv(z); + if (ret == 0) goto lab2; /* call shortv, line 150 */ + if (ret < 0) return ret; + } + return 0; + lab2: + z->c = z->l - m; + } + } + lab0: + { int ret; + ret = slice_del(z); /* delete, line 150 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 151 */ + if (ret < 0) return ret; + } + if (!(eq_s_b(z, 1, s_36))) return 0; + { int ret; + ret = slice_del(z); /* delete, line 151 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_exception2(struct SN_env * z) { + z->ket = z->c; /* [, line 157 */ + if (!(find_among_b(z, a_9, 8))) return 0; /* substring, line 157 */ + z->bra = z->c; /* ], line 157 */ + if (z->c > z->lb) return 0; /* atlimit, line 157 */ + return 1; +} + +static int r_exception1(struct SN_env * z) { + int among_var; + z->bra = z->c; /* [, line 169 */ + among_var = find_among(z, a_10, 18); /* substring, line 169 */ + if (!(among_var)) return 0; + z->ket = z->c; /* ], line 169 */ + if (z->c < z->l) return 0; /* atlimit, line 169 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_from_s(z, 3, s_37); /* <-, line 173 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 3, s_38); /* <-, line 174 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_from_s(z, 3, s_39); /* <-, line 175 */ + if (ret < 0) return ret; + } + break; + case 4: + { int ret; + ret = slice_from_s(z, 3, s_40); /* <-, line 176 */ + if (ret < 0) return ret; + } + break; + case 5: + { int ret; + ret = slice_from_s(z, 3, s_41); /* <-, line 177 */ + if (ret < 0) return ret; + } + break; + case 6: + { int ret; + ret = slice_from_s(z, 3, s_42); /* <-, line 181 */ + if (ret < 0) return ret; + } + break; + case 7: + { int ret; + ret = slice_from_s(z, 5, s_43); /* <-, line 182 */ + if (ret < 0) return ret; + } + break; + case 8: + { int ret; + ret = slice_from_s(z, 4, s_44); /* <-, line 183 */ + if (ret < 0) return ret; + } + break; + case 9: + { int ret; + ret = slice_from_s(z, 5, s_45); /* <-, line 184 */ + if (ret < 0) return ret; + } + break; + case 10: + { int ret; + ret = slice_from_s(z, 4, s_46); /* <-, line 185 */ + if (ret < 0) return ret; + } + break; + case 11: + { int ret; + ret = slice_from_s(z, 5, s_47); /* <-, line 186 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_postlude(struct SN_env * z) { + if (!(z->B[0])) return 0; /* Boolean test Y_found, line 202 */ + while(1) { /* repeat, line 202 */ + int c = z->c; + while(1) { /* goto, line 202 */ + int c = z->c; + z->bra = z->c; /* [, line 202 */ + if (!(eq_s(z, 1, s_48))) goto lab1; + z->ket = z->c; /* ], line 202 */ + z->c = c; + break; + lab1: + z->c = c; + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab0; + z->c = c; /* goto, line 202 */ + } + } + { int ret; + ret = slice_from_s(z, 1, s_49); /* <-, line 202 */ + if (ret < 0) return ret; + } + continue; + lab0: + z->c = c; + break; + } + return 1; +} + +extern int english_UTF_8_stem(struct SN_env * z) { + { int c = z->c; /* or, line 206 */ + { int ret = r_exception1(z); + if (ret == 0) goto lab1; /* call exception1, line 206 */ + if (ret < 0) return ret; + } + goto lab0; + lab1: + z->c = c; + { int c = z->c; /* not, line 207 */ + { int c = skip_utf8(z->p, z->c, 0, z->l, + 3); + if (c < 0) goto lab3; + z->c = c; /* hop, line 207 */ + } + goto lab2; + lab3: + z->c = c; + } + goto lab0; + lab2: + z->c = c; + { int c = z->c; /* do, line 208 */ + { int ret = r_prelude(z); + if (ret == 0) goto lab4; /* call prelude, line 208 */ + if (ret < 0) return ret; + } + lab4: + z->c = c; + } + { int c = z->c; /* do, line 209 */ + { int ret = r_mark_regions(z); + if (ret == 0) goto lab5; /* call mark_regions, line 209 */ + if (ret < 0) return ret; + } + lab5: + z->c = c; + } + z->lb = z->c; z->c = z->l; /* backwards, line 210 */ + + { int m = z->l - z->c; (void) m; /* do, line 212 */ + { int ret = r_Step_1a(z); + if (ret == 0) goto lab6; /* call Step_1a, line 212 */ + if (ret < 0) return ret; + } + lab6: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* or, line 214 */ + { int ret = r_exception2(z); + if (ret == 0) goto lab8; /* call exception2, line 214 */ + if (ret < 0) return ret; + } + goto lab7; + lab8: + z->c = z->l - m; + { int m = z->l - z->c; (void) m; /* do, line 216 */ + { int ret = r_Step_1b(z); + if (ret == 0) goto lab9; /* call Step_1b, line 216 */ + if (ret < 0) return ret; + } + lab9: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 217 */ + { int ret = r_Step_1c(z); + if (ret == 0) goto lab10; /* call Step_1c, line 217 */ + if (ret < 0) return ret; + } + lab10: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 219 */ + { int ret = r_Step_2(z); + if (ret == 0) goto lab11; /* call Step_2, line 219 */ + if (ret < 0) return ret; + } + lab11: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 220 */ + { int ret = r_Step_3(z); + if (ret == 0) goto lab12; /* call Step_3, line 220 */ + if (ret < 0) return ret; + } + lab12: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 221 */ + { int ret = r_Step_4(z); + if (ret == 0) goto lab13; /* call Step_4, line 221 */ + if (ret < 0) return ret; + } + lab13: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 223 */ + { int ret = r_Step_5(z); + if (ret == 0) goto lab14; /* call Step_5, line 223 */ + if (ret < 0) return ret; + } + lab14: + z->c = z->l - m; + } + } + lab7: + z->c = z->lb; + { int c = z->c; /* do, line 226 */ + { int ret = r_postlude(z); + if (ret == 0) goto lab15; /* call postlude, line 226 */ + if (ret < 0) return ret; + } + lab15: + z->c = c; + } + } +lab0: + return 1; +} + +extern struct SN_env * english_UTF_8_create_env(void) { return SN_create_env(0, 2, 1); } + +extern void english_UTF_8_close_env(struct SN_env * z) { SN_close_env(z); } + diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_english.h b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_english.h new file mode 100644 index 0000000..619a8bc --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_english.h @@ -0,0 +1,16 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern struct SN_env * english_UTF_8_create_env(void); +extern void english_UTF_8_close_env(struct SN_env * z); + +extern int english_UTF_8_stem(struct SN_env * z); + +#ifdef __cplusplus +} +#endif + diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_finnish.c b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_finnish.c new file mode 100644 index 0000000..a221be6 --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_finnish.c @@ -0,0 +1,808 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#include "../runtime/header.h" + +extern int finnish_UTF_8_stem(struct SN_env * z); +static int r_tidy(struct SN_env * z); +static int r_other_endings(struct SN_env * z); +static int r_t_plural(struct SN_env * z); +static int r_i_plural(struct SN_env * z); +static int r_case_ending(struct SN_env * z); +static int r_VI(struct SN_env * z); +static int r_LONG(struct SN_env * z); +static int r_possessive(struct SN_env * z); +static int r_particle_etc(struct SN_env * z); +static int r_R2(struct SN_env * z); +static int r_mark_regions(struct SN_env * z); + +extern struct SN_env * finnish_UTF_8_create_env(void); +extern void finnish_UTF_8_close_env(struct SN_env * z); + +static symbol s_0_0[2] = { 'p', 'a' }; +static symbol s_0_1[3] = { 's', 't', 'i' }; +static symbol s_0_2[4] = { 'k', 'a', 'a', 'n' }; +static symbol s_0_3[3] = { 'h', 'a', 'n' }; +static symbol s_0_4[3] = { 'k', 'i', 'n' }; +static symbol s_0_5[4] = { 'h', 0xC3, 0xA4, 'n' }; +static symbol s_0_6[6] = { 'k', 0xC3, 0xA4, 0xC3, 0xA4, 'n' }; +static symbol s_0_7[2] = { 'k', 'o' }; +static symbol s_0_8[3] = { 'p', 0xC3, 0xA4 }; +static symbol s_0_9[3] = { 'k', 0xC3, 0xB6 }; + +static struct among a_0[10] = +{ +/* 0 */ { 2, s_0_0, -1, 1, 0}, +/* 1 */ { 3, s_0_1, -1, 2, 0}, +/* 2 */ { 4, s_0_2, -1, 1, 0}, +/* 3 */ { 3, s_0_3, -1, 1, 0}, +/* 4 */ { 3, s_0_4, -1, 1, 0}, +/* 5 */ { 4, s_0_5, -1, 1, 0}, +/* 6 */ { 6, s_0_6, -1, 1, 0}, +/* 7 */ { 2, s_0_7, -1, 1, 0}, +/* 8 */ { 3, s_0_8, -1, 1, 0}, +/* 9 */ { 3, s_0_9, -1, 1, 0} +}; + +static symbol s_1_0[3] = { 'l', 'l', 'a' }; +static symbol s_1_1[2] = { 'n', 'a' }; +static symbol s_1_2[3] = { 's', 's', 'a' }; +static symbol s_1_3[2] = { 't', 'a' }; +static symbol s_1_4[3] = { 'l', 't', 'a' }; +static symbol s_1_5[3] = { 's', 't', 'a' }; + +static struct among a_1[6] = +{ +/* 0 */ { 3, s_1_0, -1, -1, 0}, +/* 1 */ { 2, s_1_1, -1, -1, 0}, +/* 2 */ { 3, s_1_2, -1, -1, 0}, +/* 3 */ { 2, s_1_3, -1, -1, 0}, +/* 4 */ { 3, s_1_4, 3, -1, 0}, +/* 5 */ { 3, s_1_5, 3, -1, 0} +}; + +static symbol s_2_0[4] = { 'l', 'l', 0xC3, 0xA4 }; +static symbol s_2_1[3] = { 'n', 0xC3, 0xA4 }; +static symbol s_2_2[4] = { 's', 's', 0xC3, 0xA4 }; +static symbol s_2_3[3] = { 't', 0xC3, 0xA4 }; +static symbol s_2_4[4] = { 'l', 't', 0xC3, 0xA4 }; +static symbol s_2_5[4] = { 's', 't', 0xC3, 0xA4 }; + +static struct among a_2[6] = +{ +/* 0 */ { 4, s_2_0, -1, -1, 0}, +/* 1 */ { 3, s_2_1, -1, -1, 0}, +/* 2 */ { 4, s_2_2, -1, -1, 0}, +/* 3 */ { 3, s_2_3, -1, -1, 0}, +/* 4 */ { 4, s_2_4, 3, -1, 0}, +/* 5 */ { 4, s_2_5, 3, -1, 0} +}; + +static symbol s_3_0[3] = { 'l', 'l', 'e' }; +static symbol s_3_1[3] = { 'i', 'n', 'e' }; + +static struct among a_3[2] = +{ +/* 0 */ { 3, s_3_0, -1, -1, 0}, +/* 1 */ { 3, s_3_1, -1, -1, 0} +}; + +static symbol s_4_0[3] = { 'n', 's', 'a' }; +static symbol s_4_1[3] = { 'm', 'm', 'e' }; +static symbol s_4_2[3] = { 'n', 'n', 'e' }; +static symbol s_4_3[2] = { 'n', 'i' }; +static symbol s_4_4[2] = { 's', 'i' }; +static symbol s_4_5[2] = { 'a', 'n' }; +static symbol s_4_6[2] = { 'e', 'n' }; +static symbol s_4_7[3] = { 0xC3, 0xA4, 'n' }; +static symbol s_4_8[4] = { 'n', 's', 0xC3, 0xA4 }; + +static struct among a_4[9] = +{ +/* 0 */ { 3, s_4_0, -1, 3, 0}, +/* 1 */ { 3, s_4_1, -1, 3, 0}, +/* 2 */ { 3, s_4_2, -1, 3, 0}, +/* 3 */ { 2, s_4_3, -1, 2, 0}, +/* 4 */ { 2, s_4_4, -1, 1, 0}, +/* 5 */ { 2, s_4_5, -1, 4, 0}, +/* 6 */ { 2, s_4_6, -1, 6, 0}, +/* 7 */ { 3, s_4_7, -1, 5, 0}, +/* 8 */ { 4, s_4_8, -1, 3, 0} +}; + +static symbol s_5_0[2] = { 'a', 'a' }; +static symbol s_5_1[2] = { 'e', 'e' }; +static symbol s_5_2[2] = { 'i', 'i' }; +static symbol s_5_3[2] = { 'o', 'o' }; +static symbol s_5_4[2] = { 'u', 'u' }; +static symbol s_5_5[4] = { 0xC3, 0xA4, 0xC3, 0xA4 }; +static symbol s_5_6[4] = { 0xC3, 0xB6, 0xC3, 0xB6 }; + +static struct among a_5[7] = +{ +/* 0 */ { 2, s_5_0, -1, -1, 0}, +/* 1 */ { 2, s_5_1, -1, -1, 0}, +/* 2 */ { 2, s_5_2, -1, -1, 0}, +/* 3 */ { 2, s_5_3, -1, -1, 0}, +/* 4 */ { 2, s_5_4, -1, -1, 0}, +/* 5 */ { 4, s_5_5, -1, -1, 0}, +/* 6 */ { 4, s_5_6, -1, -1, 0} +}; + +static symbol s_6_0[1] = { 'a' }; +static symbol s_6_1[3] = { 'l', 'l', 'a' }; +static symbol s_6_2[2] = { 'n', 'a' }; +static symbol s_6_3[3] = { 's', 's', 'a' }; +static symbol s_6_4[2] = { 't', 'a' }; +static symbol s_6_5[3] = { 'l', 't', 'a' }; +static symbol s_6_6[3] = { 's', 't', 'a' }; +static symbol s_6_7[3] = { 't', 't', 'a' }; +static symbol s_6_8[3] = { 'l', 'l', 'e' }; +static symbol s_6_9[3] = { 'i', 'n', 'e' }; +static symbol s_6_10[3] = { 'k', 's', 'i' }; +static symbol s_6_11[1] = { 'n' }; +static symbol s_6_12[3] = { 'h', 'a', 'n' }; +static symbol s_6_13[3] = { 'd', 'e', 'n' }; +static symbol s_6_14[4] = { 's', 'e', 'e', 'n' }; +static symbol s_6_15[3] = { 'h', 'e', 'n' }; +static symbol s_6_16[4] = { 't', 't', 'e', 'n' }; +static symbol s_6_17[3] = { 'h', 'i', 'n' }; +static symbol s_6_18[4] = { 's', 'i', 'i', 'n' }; +static symbol s_6_19[3] = { 'h', 'o', 'n' }; +static symbol s_6_20[4] = { 'h', 0xC3, 0xA4, 'n' }; +static symbol s_6_21[4] = { 'h', 0xC3, 0xB6, 'n' }; +static symbol s_6_22[2] = { 0xC3, 0xA4 }; +static symbol s_6_23[4] = { 'l', 'l', 0xC3, 0xA4 }; +static symbol s_6_24[3] = { 'n', 0xC3, 0xA4 }; +static symbol s_6_25[4] = { 's', 's', 0xC3, 0xA4 }; +static symbol s_6_26[3] = { 't', 0xC3, 0xA4 }; +static symbol s_6_27[4] = { 'l', 't', 0xC3, 0xA4 }; +static symbol s_6_28[4] = { 's', 't', 0xC3, 0xA4 }; +static symbol s_6_29[4] = { 't', 't', 0xC3, 0xA4 }; + +static struct among a_6[30] = +{ +/* 0 */ { 1, s_6_0, -1, 8, 0}, +/* 1 */ { 3, s_6_1, 0, -1, 0}, +/* 2 */ { 2, s_6_2, 0, -1, 0}, +/* 3 */ { 3, s_6_3, 0, -1, 0}, +/* 4 */ { 2, s_6_4, 0, -1, 0}, +/* 5 */ { 3, s_6_5, 4, -1, 0}, +/* 6 */ { 3, s_6_6, 4, -1, 0}, +/* 7 */ { 3, s_6_7, 4, 9, 0}, +/* 8 */ { 3, s_6_8, -1, -1, 0}, +/* 9 */ { 3, s_6_9, -1, -1, 0}, +/* 10 */ { 3, s_6_10, -1, -1, 0}, +/* 11 */ { 1, s_6_11, -1, 7, 0}, +/* 12 */ { 3, s_6_12, 11, 1, 0}, +/* 13 */ { 3, s_6_13, 11, -1, r_VI}, +/* 14 */ { 4, s_6_14, 11, -1, r_LONG}, +/* 15 */ { 3, s_6_15, 11, 2, 0}, +/* 16 */ { 4, s_6_16, 11, -1, r_VI}, +/* 17 */ { 3, s_6_17, 11, 3, 0}, +/* 18 */ { 4, s_6_18, 11, -1, r_VI}, +/* 19 */ { 3, s_6_19, 11, 4, 0}, +/* 20 */ { 4, s_6_20, 11, 5, 0}, +/* 21 */ { 4, s_6_21, 11, 6, 0}, +/* 22 */ { 2, s_6_22, -1, 8, 0}, +/* 23 */ { 4, s_6_23, 22, -1, 0}, +/* 24 */ { 3, s_6_24, 22, -1, 0}, +/* 25 */ { 4, s_6_25, 22, -1, 0}, +/* 26 */ { 3, s_6_26, 22, -1, 0}, +/* 27 */ { 4, s_6_27, 26, -1, 0}, +/* 28 */ { 4, s_6_28, 26, -1, 0}, +/* 29 */ { 4, s_6_29, 26, 9, 0} +}; + +static symbol s_7_0[3] = { 'e', 'j', 'a' }; +static symbol s_7_1[3] = { 'm', 'm', 'a' }; +static symbol s_7_2[4] = { 'i', 'm', 'm', 'a' }; +static symbol s_7_3[3] = { 'm', 'p', 'a' }; +static symbol s_7_4[4] = { 'i', 'm', 'p', 'a' }; +static symbol s_7_5[3] = { 'm', 'm', 'i' }; +static symbol s_7_6[4] = { 'i', 'm', 'm', 'i' }; +static symbol s_7_7[3] = { 'm', 'p', 'i' }; +static symbol s_7_8[4] = { 'i', 'm', 'p', 'i' }; +static symbol s_7_9[4] = { 'e', 'j', 0xC3, 0xA4 }; +static symbol s_7_10[4] = { 'm', 'm', 0xC3, 0xA4 }; +static symbol s_7_11[5] = { 'i', 'm', 'm', 0xC3, 0xA4 }; +static symbol s_7_12[4] = { 'm', 'p', 0xC3, 0xA4 }; +static symbol s_7_13[5] = { 'i', 'm', 'p', 0xC3, 0xA4 }; + +static struct among a_7[14] = +{ +/* 0 */ { 3, s_7_0, -1, -1, 0}, +/* 1 */ { 3, s_7_1, -1, 1, 0}, +/* 2 */ { 4, s_7_2, 1, -1, 0}, +/* 3 */ { 3, s_7_3, -1, 1, 0}, +/* 4 */ { 4, s_7_4, 3, -1, 0}, +/* 5 */ { 3, s_7_5, -1, 1, 0}, +/* 6 */ { 4, s_7_6, 5, -1, 0}, +/* 7 */ { 3, s_7_7, -1, 1, 0}, +/* 8 */ { 4, s_7_8, 7, -1, 0}, +/* 9 */ { 4, s_7_9, -1, -1, 0}, +/* 10 */ { 4, s_7_10, -1, 1, 0}, +/* 11 */ { 5, s_7_11, 10, -1, 0}, +/* 12 */ { 4, s_7_12, -1, 1, 0}, +/* 13 */ { 5, s_7_13, 12, -1, 0} +}; + +static symbol s_8_0[1] = { 'i' }; +static symbol s_8_1[1] = { 'j' }; + +static struct among a_8[2] = +{ +/* 0 */ { 1, s_8_0, -1, -1, 0}, +/* 1 */ { 1, s_8_1, -1, -1, 0} +}; + +static symbol s_9_0[3] = { 'm', 'm', 'a' }; +static symbol s_9_1[4] = { 'i', 'm', 'm', 'a' }; + +static struct among a_9[2] = +{ +/* 0 */ { 3, s_9_0, -1, 1, 0}, +/* 1 */ { 4, s_9_1, 0, -1, 0} +}; + +static unsigned char g_AEI[] = { 17, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8 }; + +static unsigned char g_V1[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 32 }; + +static unsigned char g_V2[] = { 17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 32 }; + +static unsigned char g_particle_end[] = { 17, 97, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 32 }; + +static symbol s_0[] = { 'k' }; +static symbol s_1[] = { 'k', 's', 'e' }; +static symbol s_2[] = { 'k', 's', 'i' }; +static symbol s_3[] = { 'i' }; +static symbol s_4[] = { 'a' }; +static symbol s_5[] = { 'e' }; +static symbol s_6[] = { 'i' }; +static symbol s_7[] = { 'o' }; +static symbol s_8[] = { 0xC3, 0xA4 }; +static symbol s_9[] = { 0xC3, 0xB6 }; +static symbol s_10[] = { 'i', 'e' }; +static symbol s_11[] = { 'e' }; +static symbol s_12[] = { 'p', 'o' }; +static symbol s_13[] = { 't' }; +static symbol s_14[] = { 'p', 'o' }; +static symbol s_15[] = { 'j' }; +static symbol s_16[] = { 'o' }; +static symbol s_17[] = { 'u' }; +static symbol s_18[] = { 'o' }; +static symbol s_19[] = { 'j' }; + +static int r_mark_regions(struct SN_env * z) { + z->I[0] = z->l; + z->I[1] = z->l; + while(1) { /* goto, line 46 */ + int c = z->c; + if (!(in_grouping_U(z, g_V1, 97, 246))) goto lab0; + z->c = c; + break; + lab0: + z->c = c; + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) return 0; + z->c = c; /* goto, line 46 */ + } + } + while(1) { /* gopast, line 46 */ + if (!(out_grouping_U(z, g_V1, 97, 246))) goto lab1; + break; + lab1: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) return 0; + z->c = c; /* gopast, line 46 */ + } + } + z->I[0] = z->c; /* setmark p1, line 46 */ + while(1) { /* goto, line 47 */ + int c = z->c; + if (!(in_grouping_U(z, g_V1, 97, 246))) goto lab2; + z->c = c; + break; + lab2: + z->c = c; + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) return 0; + z->c = c; /* goto, line 47 */ + } + } + while(1) { /* gopast, line 47 */ + if (!(out_grouping_U(z, g_V1, 97, 246))) goto lab3; + break; + lab3: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) return 0; + z->c = c; /* gopast, line 47 */ + } + } + z->I[1] = z->c; /* setmark p2, line 47 */ + return 1; +} + +static int r_R2(struct SN_env * z) { + if (!(z->I[1] <= z->c)) return 0; + return 1; +} + +static int r_particle_etc(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 55 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 55 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 55 */ + among_var = find_among_b(z, a_0, 10); /* substring, line 55 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 55 */ + z->lb = m3; + } + switch(among_var) { + case 0: return 0; + case 1: + if (!(in_grouping_b_U(z, g_particle_end, 97, 246))) return 0; + break; + case 2: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 64 */ + if (ret < 0) return ret; + } + break; + } + { int ret; + ret = slice_del(z); /* delete, line 66 */ + if (ret < 0) return ret; + } + return 1; +} + +static int r_possessive(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 69 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 69 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 69 */ + among_var = find_among_b(z, a_4, 9); /* substring, line 69 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 69 */ + z->lb = m3; + } + switch(among_var) { + case 0: return 0; + case 1: + { int m = z->l - z->c; (void) m; /* not, line 72 */ + if (!(eq_s_b(z, 1, s_0))) goto lab0; + return 0; + lab0: + z->c = z->l - m; + } + { int ret; + ret = slice_del(z); /* delete, line 72 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_del(z); /* delete, line 74 */ + if (ret < 0) return ret; + } + z->ket = z->c; /* [, line 74 */ + if (!(eq_s_b(z, 3, s_1))) return 0; + z->bra = z->c; /* ], line 74 */ + { int ret; + ret = slice_from_s(z, 3, s_2); /* <-, line 74 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_del(z); /* delete, line 78 */ + if (ret < 0) return ret; + } + break; + case 4: + if (!(find_among_b(z, a_1, 6))) return 0; /* among, line 81 */ + { int ret; + ret = slice_del(z); /* delete, line 81 */ + if (ret < 0) return ret; + } + break; + case 5: + if (!(find_among_b(z, a_2, 6))) return 0; /* among, line 83 */ + { int ret; + ret = slice_del(z); /* delete, line 84 */ + if (ret < 0) return ret; + } + break; + case 6: + if (!(find_among_b(z, a_3, 2))) return 0; /* among, line 86 */ + { int ret; + ret = slice_del(z); /* delete, line 86 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_LONG(struct SN_env * z) { + if (!(find_among_b(z, a_5, 7))) return 0; /* among, line 91 */ + return 1; +} + +static int r_VI(struct SN_env * z) { + if (!(eq_s_b(z, 1, s_3))) return 0; + if (!(in_grouping_b_U(z, g_V2, 97, 246))) return 0; + return 1; +} + +static int r_case_ending(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 96 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 96 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 96 */ + among_var = find_among_b(z, a_6, 30); /* substring, line 96 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 96 */ + z->lb = m3; + } + switch(among_var) { + case 0: return 0; + case 1: + if (!(eq_s_b(z, 1, s_4))) return 0; + break; + case 2: + if (!(eq_s_b(z, 1, s_5))) return 0; + break; + case 3: + if (!(eq_s_b(z, 1, s_6))) return 0; + break; + case 4: + if (!(eq_s_b(z, 1, s_7))) return 0; + break; + case 5: + if (!(eq_s_b(z, 2, s_8))) return 0; + break; + case 6: + if (!(eq_s_b(z, 2, s_9))) return 0; + break; + case 7: + { int m = z->l - z->c; (void) m; /* try, line 111 */ + { int m = z->l - z->c; (void) m; /* and, line 113 */ + { int m = z->l - z->c; (void) m; /* or, line 112 */ + { int ret = r_LONG(z); + if (ret == 0) goto lab2; /* call LONG, line 111 */ + if (ret < 0) return ret; + } + goto lab1; + lab2: + z->c = z->l - m; + if (!(eq_s_b(z, 2, s_10))) { z->c = z->l - m; goto lab0; } + } + lab1: + z->c = z->l - m; + { int c = skip_utf8(z->p, z->c, z->lb, 0, -1); + if (c < 0) { z->c = z->l - m; goto lab0; } + z->c = c; /* next, line 113 */ + } + } + z->bra = z->c; /* ], line 113 */ + lab0: + ; + } + break; + case 8: + if (!(in_grouping_b_U(z, g_V1, 97, 246))) return 0; + if (!(out_grouping_b_U(z, g_V1, 97, 246))) return 0; + break; + case 9: + if (!(eq_s_b(z, 1, s_11))) return 0; + break; + } + { int ret; + ret = slice_del(z); /* delete, line 138 */ + if (ret < 0) return ret; + } + z->B[0] = 1; /* set ending_removed, line 139 */ + return 1; +} + +static int r_other_endings(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 142 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[1]) return 0; + z->c = z->I[1]; /* tomark, line 142 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 142 */ + among_var = find_among_b(z, a_7, 14); /* substring, line 142 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 142 */ + z->lb = m3; + } + switch(among_var) { + case 0: return 0; + case 1: + { int m = z->l - z->c; (void) m; /* not, line 146 */ + if (!(eq_s_b(z, 2, s_12))) goto lab0; + return 0; + lab0: + z->c = z->l - m; + } + break; + } + { int ret; + ret = slice_del(z); /* delete, line 151 */ + if (ret < 0) return ret; + } + return 1; +} + +static int r_i_plural(struct SN_env * z) { + { int m3; /* setlimit, line 154 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 154 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 154 */ + if (!(find_among_b(z, a_8, 2))) { z->lb = m3; return 0; } /* substring, line 154 */ + z->bra = z->c; /* ], line 154 */ + z->lb = m3; + } + { int ret; + ret = slice_del(z); /* delete, line 158 */ + if (ret < 0) return ret; + } + return 1; +} + +static int r_t_plural(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 161 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 161 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 162 */ + if (!(eq_s_b(z, 1, s_13))) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 162 */ + { int m_test = z->l - z->c; /* test, line 162 */ + if (!(in_grouping_b_U(z, g_V1, 97, 246))) { z->lb = m3; return 0; } + z->c = z->l - m_test; + } + { int ret; + ret = slice_del(z); /* delete, line 163 */ + if (ret < 0) return ret; + } + z->lb = m3; + } + { int m3; /* setlimit, line 165 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[1]) return 0; + z->c = z->I[1]; /* tomark, line 165 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 165 */ + among_var = find_among_b(z, a_9, 2); /* substring, line 165 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 165 */ + z->lb = m3; + } + switch(among_var) { + case 0: return 0; + case 1: + { int m = z->l - z->c; (void) m; /* not, line 167 */ + if (!(eq_s_b(z, 2, s_14))) goto lab0; + return 0; + lab0: + z->c = z->l - m; + } + break; + } + { int ret; + ret = slice_del(z); /* delete, line 170 */ + if (ret < 0) return ret; + } + return 1; +} + +static int r_tidy(struct SN_env * z) { + { int m3; /* setlimit, line 173 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 173 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + { int m = z->l - z->c; (void) m; /* do, line 174 */ + { int m = z->l - z->c; (void) m; /* and, line 174 */ + { int ret = r_LONG(z); + if (ret == 0) goto lab0; /* call LONG, line 174 */ + if (ret < 0) return ret; + } + z->c = z->l - m; + z->ket = z->c; /* [, line 174 */ + { int c = skip_utf8(z->p, z->c, z->lb, 0, -1); + if (c < 0) goto lab0; + z->c = c; /* next, line 174 */ + } + z->bra = z->c; /* ], line 174 */ + { int ret; + ret = slice_del(z); /* delete, line 174 */ + if (ret < 0) return ret; + } + } + lab0: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 175 */ + z->ket = z->c; /* [, line 175 */ + if (!(in_grouping_b_U(z, g_AEI, 97, 228))) goto lab1; + z->bra = z->c; /* ], line 175 */ + if (!(out_grouping_b_U(z, g_V1, 97, 246))) goto lab1; + { int ret; + ret = slice_del(z); /* delete, line 175 */ + if (ret < 0) return ret; + } + lab1: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 176 */ + z->ket = z->c; /* [, line 176 */ + if (!(eq_s_b(z, 1, s_15))) goto lab2; + z->bra = z->c; /* ], line 176 */ + { int m = z->l - z->c; (void) m; /* or, line 176 */ + if (!(eq_s_b(z, 1, s_16))) goto lab4; + goto lab3; + lab4: + z->c = z->l - m; + if (!(eq_s_b(z, 1, s_17))) goto lab2; + } + lab3: + { int ret; + ret = slice_del(z); /* delete, line 176 */ + if (ret < 0) return ret; + } + lab2: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 177 */ + z->ket = z->c; /* [, line 177 */ + if (!(eq_s_b(z, 1, s_18))) goto lab5; + z->bra = z->c; /* ], line 177 */ + if (!(eq_s_b(z, 1, s_19))) goto lab5; + { int ret; + ret = slice_del(z); /* delete, line 177 */ + if (ret < 0) return ret; + } + lab5: + z->c = z->l - m; + } + z->lb = m3; + } + while(1) { /* goto, line 179 */ + int m = z->l - z->c; (void) m; + if (!(out_grouping_b_U(z, g_V1, 97, 246))) goto lab6; + z->c = z->l - m; + break; + lab6: + z->c = z->l - m; + { int c = skip_utf8(z->p, z->c, z->lb, 0, -1); + if (c < 0) return 0; + z->c = c; /* goto, line 179 */ + } + } + z->ket = z->c; /* [, line 179 */ + { int c = skip_utf8(z->p, z->c, z->lb, 0, -1); + if (c < 0) return 0; + z->c = c; /* next, line 179 */ + } + z->bra = z->c; /* ], line 179 */ + z->S[0] = slice_to(z, z->S[0]); /* -> x, line 179 */ + if (z->S[0] == 0) return -1; /* -> x, line 179 */ + if (!(eq_v_b(z, z->S[0]))) return 0; /* name x, line 179 */ + { int ret; + ret = slice_del(z); /* delete, line 179 */ + if (ret < 0) return ret; + } + return 1; +} + +extern int finnish_UTF_8_stem(struct SN_env * z) { + { int c = z->c; /* do, line 185 */ + { int ret = r_mark_regions(z); + if (ret == 0) goto lab0; /* call mark_regions, line 185 */ + if (ret < 0) return ret; + } + lab0: + z->c = c; + } + z->B[0] = 0; /* unset ending_removed, line 186 */ + z->lb = z->c; z->c = z->l; /* backwards, line 187 */ + + { int m = z->l - z->c; (void) m; /* do, line 188 */ + { int ret = r_particle_etc(z); + if (ret == 0) goto lab1; /* call particle_etc, line 188 */ + if (ret < 0) return ret; + } + lab1: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 189 */ + { int ret = r_possessive(z); + if (ret == 0) goto lab2; /* call possessive, line 189 */ + if (ret < 0) return ret; + } + lab2: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 190 */ + { int ret = r_case_ending(z); + if (ret == 0) goto lab3; /* call case_ending, line 190 */ + if (ret < 0) return ret; + } + lab3: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 191 */ + { int ret = r_other_endings(z); + if (ret == 0) goto lab4; /* call other_endings, line 191 */ + if (ret < 0) return ret; + } + lab4: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* or, line 192 */ + if (!(z->B[0])) goto lab6; /* Boolean test ending_removed, line 192 */ + { int m = z->l - z->c; (void) m; /* do, line 192 */ + { int ret = r_i_plural(z); + if (ret == 0) goto lab7; /* call i_plural, line 192 */ + if (ret < 0) return ret; + } + lab7: + z->c = z->l - m; + } + goto lab5; + lab6: + z->c = z->l - m; + { int m = z->l - z->c; (void) m; /* do, line 192 */ + { int ret = r_t_plural(z); + if (ret == 0) goto lab8; /* call t_plural, line 192 */ + if (ret < 0) return ret; + } + lab8: + z->c = z->l - m; + } + } +lab5: + { int m = z->l - z->c; (void) m; /* do, line 193 */ + { int ret = r_tidy(z); + if (ret == 0) goto lab9; /* call tidy, line 193 */ + if (ret < 0) return ret; + } + lab9: + z->c = z->l - m; + } + z->c = z->lb; + return 1; +} + +extern struct SN_env * finnish_UTF_8_create_env(void) { return SN_create_env(1, 2, 1); } + +extern void finnish_UTF_8_close_env(struct SN_env * z) { SN_close_env(z); } + diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_finnish.h b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_finnish.h new file mode 100644 index 0000000..d2f2fd9 --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_finnish.h @@ -0,0 +1,16 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern struct SN_env * finnish_UTF_8_create_env(void); +extern void finnish_UTF_8_close_env(struct SN_env * z); + +extern int finnish_UTF_8_stem(struct SN_env * z); + +#ifdef __cplusplus +} +#endif + diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_french.c b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_french.c new file mode 100644 index 0000000..1f95c7c --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_french.c @@ -0,0 +1,1296 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#include "../runtime/header.h" + +extern int french_UTF_8_stem(struct SN_env * z); +static int r_un_accent(struct SN_env * z); +static int r_un_double(struct SN_env * z); +static int r_residual_suffix(struct SN_env * z); +static int r_verb_suffix(struct SN_env * z); +static int r_i_verb_suffix(struct SN_env * z); +static int r_standard_suffix(struct SN_env * z); +static int r_R2(struct SN_env * z); +static int r_R1(struct SN_env * z); +static int r_RV(struct SN_env * z); +static int r_mark_regions(struct SN_env * z); +static int r_postlude(struct SN_env * z); +static int r_prelude(struct SN_env * z); + +extern struct SN_env * french_UTF_8_create_env(void); +extern void french_UTF_8_close_env(struct SN_env * z); + +static symbol s_0_1[1] = { 'I' }; +static symbol s_0_2[1] = { 'U' }; +static symbol s_0_3[1] = { 'Y' }; + +static struct among a_0[4] = +{ +/* 0 */ { 0, 0, -1, 4, 0}, +/* 1 */ { 1, s_0_1, 0, 1, 0}, +/* 2 */ { 1, s_0_2, 0, 2, 0}, +/* 3 */ { 1, s_0_3, 0, 3, 0} +}; + +static symbol s_1_0[3] = { 'i', 'q', 'U' }; +static symbol s_1_1[3] = { 'a', 'b', 'l' }; +static symbol s_1_2[4] = { 'I', 0xC3, 0xA8, 'r' }; +static symbol s_1_3[4] = { 'i', 0xC3, 0xA8, 'r' }; +static symbol s_1_4[3] = { 'e', 'u', 's' }; +static symbol s_1_5[2] = { 'i', 'v' }; + +static struct among a_1[6] = +{ +/* 0 */ { 3, s_1_0, -1, 3, 0}, +/* 1 */ { 3, s_1_1, -1, 3, 0}, +/* 2 */ { 4, s_1_2, -1, 4, 0}, +/* 3 */ { 4, s_1_3, -1, 4, 0}, +/* 4 */ { 3, s_1_4, -1, 2, 0}, +/* 5 */ { 2, s_1_5, -1, 1, 0} +}; + +static symbol s_2_0[2] = { 'i', 'c' }; +static symbol s_2_1[4] = { 'a', 'b', 'i', 'l' }; +static symbol s_2_2[2] = { 'i', 'v' }; + +static struct among a_2[3] = +{ +/* 0 */ { 2, s_2_0, -1, 2, 0}, +/* 1 */ { 4, s_2_1, -1, 1, 0}, +/* 2 */ { 2, s_2_2, -1, 3, 0} +}; + +static symbol s_3_0[4] = { 'i', 'q', 'U', 'e' }; +static symbol s_3_1[6] = { 'a', 't', 'r', 'i', 'c', 'e' }; +static symbol s_3_2[4] = { 'a', 'n', 'c', 'e' }; +static symbol s_3_3[4] = { 'e', 'n', 'c', 'e' }; +static symbol s_3_4[5] = { 'l', 'o', 'g', 'i', 'e' }; +static symbol s_3_5[4] = { 'a', 'b', 'l', 'e' }; +static symbol s_3_6[4] = { 'i', 's', 'm', 'e' }; +static symbol s_3_7[4] = { 'e', 'u', 's', 'e' }; +static symbol s_3_8[4] = { 'i', 's', 't', 'e' }; +static symbol s_3_9[3] = { 'i', 'v', 'e' }; +static symbol s_3_10[2] = { 'i', 'f' }; +static symbol s_3_11[5] = { 'u', 's', 'i', 'o', 'n' }; +static symbol s_3_12[5] = { 'a', 't', 'i', 'o', 'n' }; +static symbol s_3_13[5] = { 'u', 't', 'i', 'o', 'n' }; +static symbol s_3_14[5] = { 'a', 't', 'e', 'u', 'r' }; +static symbol s_3_15[5] = { 'i', 'q', 'U', 'e', 's' }; +static symbol s_3_16[7] = { 'a', 't', 'r', 'i', 'c', 'e', 's' }; +static symbol s_3_17[5] = { 'a', 'n', 'c', 'e', 's' }; +static symbol s_3_18[5] = { 'e', 'n', 'c', 'e', 's' }; +static symbol s_3_19[6] = { 'l', 'o', 'g', 'i', 'e', 's' }; +static symbol s_3_20[5] = { 'a', 'b', 'l', 'e', 's' }; +static symbol s_3_21[5] = { 'i', 's', 'm', 'e', 's' }; +static symbol s_3_22[5] = { 'e', 'u', 's', 'e', 's' }; +static symbol s_3_23[5] = { 'i', 's', 't', 'e', 's' }; +static symbol s_3_24[4] = { 'i', 'v', 'e', 's' }; +static symbol s_3_25[3] = { 'i', 'f', 's' }; +static symbol s_3_26[6] = { 'u', 's', 'i', 'o', 'n', 's' }; +static symbol s_3_27[6] = { 'a', 't', 'i', 'o', 'n', 's' }; +static symbol s_3_28[6] = { 'u', 't', 'i', 'o', 'n', 's' }; +static symbol s_3_29[6] = { 'a', 't', 'e', 'u', 'r', 's' }; +static symbol s_3_30[5] = { 'm', 'e', 'n', 't', 's' }; +static symbol s_3_31[6] = { 'e', 'm', 'e', 'n', 't', 's' }; +static symbol s_3_32[9] = { 'i', 's', 's', 'e', 'm', 'e', 'n', 't', 's' }; +static symbol s_3_33[5] = { 'i', 't', 0xC3, 0xA9, 's' }; +static symbol s_3_34[4] = { 'm', 'e', 'n', 't' }; +static symbol s_3_35[5] = { 'e', 'm', 'e', 'n', 't' }; +static symbol s_3_36[8] = { 'i', 's', 's', 'e', 'm', 'e', 'n', 't' }; +static symbol s_3_37[6] = { 'a', 'm', 'm', 'e', 'n', 't' }; +static symbol s_3_38[6] = { 'e', 'm', 'm', 'e', 'n', 't' }; +static symbol s_3_39[3] = { 'a', 'u', 'x' }; +static symbol s_3_40[4] = { 'e', 'a', 'u', 'x' }; +static symbol s_3_41[3] = { 'e', 'u', 'x' }; +static symbol s_3_42[4] = { 'i', 't', 0xC3, 0xA9 }; + +static struct among a_3[43] = +{ +/* 0 */ { 4, s_3_0, -1, 1, 0}, +/* 1 */ { 6, s_3_1, -1, 2, 0}, +/* 2 */ { 4, s_3_2, -1, 1, 0}, +/* 3 */ { 4, s_3_3, -1, 5, 0}, +/* 4 */ { 5, s_3_4, -1, 3, 0}, +/* 5 */ { 4, s_3_5, -1, 1, 0}, +/* 6 */ { 4, s_3_6, -1, 1, 0}, +/* 7 */ { 4, s_3_7, -1, 11, 0}, +/* 8 */ { 4, s_3_8, -1, 1, 0}, +/* 9 */ { 3, s_3_9, -1, 8, 0}, +/* 10 */ { 2, s_3_10, -1, 8, 0}, +/* 11 */ { 5, s_3_11, -1, 4, 0}, +/* 12 */ { 5, s_3_12, -1, 2, 0}, +/* 13 */ { 5, s_3_13, -1, 4, 0}, +/* 14 */ { 5, s_3_14, -1, 2, 0}, +/* 15 */ { 5, s_3_15, -1, 1, 0}, +/* 16 */ { 7, s_3_16, -1, 2, 0}, +/* 17 */ { 5, s_3_17, -1, 1, 0}, +/* 18 */ { 5, s_3_18, -1, 5, 0}, +/* 19 */ { 6, s_3_19, -1, 3, 0}, +/* 20 */ { 5, s_3_20, -1, 1, 0}, +/* 21 */ { 5, s_3_21, -1, 1, 0}, +/* 22 */ { 5, s_3_22, -1, 11, 0}, +/* 23 */ { 5, s_3_23, -1, 1, 0}, +/* 24 */ { 4, s_3_24, -1, 8, 0}, +/* 25 */ { 3, s_3_25, -1, 8, 0}, +/* 26 */ { 6, s_3_26, -1, 4, 0}, +/* 27 */ { 6, s_3_27, -1, 2, 0}, +/* 28 */ { 6, s_3_28, -1, 4, 0}, +/* 29 */ { 6, s_3_29, -1, 2, 0}, +/* 30 */ { 5, s_3_30, -1, 15, 0}, +/* 31 */ { 6, s_3_31, 30, 6, 0}, +/* 32 */ { 9, s_3_32, 31, 12, 0}, +/* 33 */ { 5, s_3_33, -1, 7, 0}, +/* 34 */ { 4, s_3_34, -1, 15, 0}, +/* 35 */ { 5, s_3_35, 34, 6, 0}, +/* 36 */ { 8, s_3_36, 35, 12, 0}, +/* 37 */ { 6, s_3_37, 34, 13, 0}, +/* 38 */ { 6, s_3_38, 34, 14, 0}, +/* 39 */ { 3, s_3_39, -1, 10, 0}, +/* 40 */ { 4, s_3_40, 39, 9, 0}, +/* 41 */ { 3, s_3_41, -1, 1, 0}, +/* 42 */ { 4, s_3_42, -1, 7, 0} +}; + +static symbol s_4_0[3] = { 'i', 'r', 'a' }; +static symbol s_4_1[2] = { 'i', 'e' }; +static symbol s_4_2[4] = { 'i', 's', 's', 'e' }; +static symbol s_4_3[7] = { 'i', 's', 's', 'a', 'n', 't', 'e' }; +static symbol s_4_4[1] = { 'i' }; +static symbol s_4_5[4] = { 'i', 'r', 'a', 'i' }; +static symbol s_4_6[2] = { 'i', 'r' }; +static symbol s_4_7[4] = { 'i', 'r', 'a', 's' }; +static symbol s_4_8[3] = { 'i', 'e', 's' }; +static symbol s_4_9[5] = { 0xC3, 0xAE, 'm', 'e', 's' }; +static symbol s_4_10[5] = { 'i', 's', 's', 'e', 's' }; +static symbol s_4_11[8] = { 'i', 's', 's', 'a', 'n', 't', 'e', 's' }; +static symbol s_4_12[5] = { 0xC3, 0xAE, 't', 'e', 's' }; +static symbol s_4_13[2] = { 'i', 's' }; +static symbol s_4_14[5] = { 'i', 'r', 'a', 'i', 's' }; +static symbol s_4_15[6] = { 'i', 's', 's', 'a', 'i', 's' }; +static symbol s_4_16[6] = { 'i', 'r', 'i', 'o', 'n', 's' }; +static symbol s_4_17[7] = { 'i', 's', 's', 'i', 'o', 'n', 's' }; +static symbol s_4_18[5] = { 'i', 'r', 'o', 'n', 's' }; +static symbol s_4_19[6] = { 'i', 's', 's', 'o', 'n', 's' }; +static symbol s_4_20[7] = { 'i', 's', 's', 'a', 'n', 't', 's' }; +static symbol s_4_21[2] = { 'i', 't' }; +static symbol s_4_22[5] = { 'i', 'r', 'a', 'i', 't' }; +static symbol s_4_23[6] = { 'i', 's', 's', 'a', 'i', 't' }; +static symbol s_4_24[6] = { 'i', 's', 's', 'a', 'n', 't' }; +static symbol s_4_25[7] = { 'i', 'r', 'a', 'I', 'e', 'n', 't' }; +static symbol s_4_26[8] = { 'i', 's', 's', 'a', 'I', 'e', 'n', 't' }; +static symbol s_4_27[5] = { 'i', 'r', 'e', 'n', 't' }; +static symbol s_4_28[6] = { 'i', 's', 's', 'e', 'n', 't' }; +static symbol s_4_29[5] = { 'i', 'r', 'o', 'n', 't' }; +static symbol s_4_30[3] = { 0xC3, 0xAE, 't' }; +static symbol s_4_31[5] = { 'i', 'r', 'i', 'e', 'z' }; +static symbol s_4_32[6] = { 'i', 's', 's', 'i', 'e', 'z' }; +static symbol s_4_33[4] = { 'i', 'r', 'e', 'z' }; +static symbol s_4_34[5] = { 'i', 's', 's', 'e', 'z' }; + +static struct among a_4[35] = +{ +/* 0 */ { 3, s_4_0, -1, 1, 0}, +/* 1 */ { 2, s_4_1, -1, 1, 0}, +/* 2 */ { 4, s_4_2, -1, 1, 0}, +/* 3 */ { 7, s_4_3, -1, 1, 0}, +/* 4 */ { 1, s_4_4, -1, 1, 0}, +/* 5 */ { 4, s_4_5, 4, 1, 0}, +/* 6 */ { 2, s_4_6, -1, 1, 0}, +/* 7 */ { 4, s_4_7, -1, 1, 0}, +/* 8 */ { 3, s_4_8, -1, 1, 0}, +/* 9 */ { 5, s_4_9, -1, 1, 0}, +/* 10 */ { 5, s_4_10, -1, 1, 0}, +/* 11 */ { 8, s_4_11, -1, 1, 0}, +/* 12 */ { 5, s_4_12, -1, 1, 0}, +/* 13 */ { 2, s_4_13, -1, 1, 0}, +/* 14 */ { 5, s_4_14, 13, 1, 0}, +/* 15 */ { 6, s_4_15, 13, 1, 0}, +/* 16 */ { 6, s_4_16, -1, 1, 0}, +/* 17 */ { 7, s_4_17, -1, 1, 0}, +/* 18 */ { 5, s_4_18, -1, 1, 0}, +/* 19 */ { 6, s_4_19, -1, 1, 0}, +/* 20 */ { 7, s_4_20, -1, 1, 0}, +/* 21 */ { 2, s_4_21, -1, 1, 0}, +/* 22 */ { 5, s_4_22, 21, 1, 0}, +/* 23 */ { 6, s_4_23, 21, 1, 0}, +/* 24 */ { 6, s_4_24, -1, 1, 0}, +/* 25 */ { 7, s_4_25, -1, 1, 0}, +/* 26 */ { 8, s_4_26, -1, 1, 0}, +/* 27 */ { 5, s_4_27, -1, 1, 0}, +/* 28 */ { 6, s_4_28, -1, 1, 0}, +/* 29 */ { 5, s_4_29, -1, 1, 0}, +/* 30 */ { 3, s_4_30, -1, 1, 0}, +/* 31 */ { 5, s_4_31, -1, 1, 0}, +/* 32 */ { 6, s_4_32, -1, 1, 0}, +/* 33 */ { 4, s_4_33, -1, 1, 0}, +/* 34 */ { 5, s_4_34, -1, 1, 0} +}; + +static symbol s_5_0[1] = { 'a' }; +static symbol s_5_1[3] = { 'e', 'r', 'a' }; +static symbol s_5_2[4] = { 'a', 's', 's', 'e' }; +static symbol s_5_3[4] = { 'a', 'n', 't', 'e' }; +static symbol s_5_4[3] = { 0xC3, 0xA9, 'e' }; +static symbol s_5_5[2] = { 'a', 'i' }; +static symbol s_5_6[4] = { 'e', 'r', 'a', 'i' }; +static symbol s_5_7[2] = { 'e', 'r' }; +static symbol s_5_8[2] = { 'a', 's' }; +static symbol s_5_9[4] = { 'e', 'r', 'a', 's' }; +static symbol s_5_10[5] = { 0xC3, 0xA2, 'm', 'e', 's' }; +static symbol s_5_11[5] = { 'a', 's', 's', 'e', 's' }; +static symbol s_5_12[5] = { 'a', 'n', 't', 'e', 's' }; +static symbol s_5_13[5] = { 0xC3, 0xA2, 't', 'e', 's' }; +static symbol s_5_14[4] = { 0xC3, 0xA9, 'e', 's' }; +static symbol s_5_15[3] = { 'a', 'i', 's' }; +static symbol s_5_16[5] = { 'e', 'r', 'a', 'i', 's' }; +static symbol s_5_17[4] = { 'i', 'o', 'n', 's' }; +static symbol s_5_18[6] = { 'e', 'r', 'i', 'o', 'n', 's' }; +static symbol s_5_19[7] = { 'a', 's', 's', 'i', 'o', 'n', 's' }; +static symbol s_5_20[5] = { 'e', 'r', 'o', 'n', 's' }; +static symbol s_5_21[4] = { 'a', 'n', 't', 's' }; +static symbol s_5_22[3] = { 0xC3, 0xA9, 's' }; +static symbol s_5_23[3] = { 'a', 'i', 't' }; +static symbol s_5_24[5] = { 'e', 'r', 'a', 'i', 't' }; +static symbol s_5_25[3] = { 'a', 'n', 't' }; +static symbol s_5_26[5] = { 'a', 'I', 'e', 'n', 't' }; +static symbol s_5_27[7] = { 'e', 'r', 'a', 'I', 'e', 'n', 't' }; +static symbol s_5_28[6] = { 0xC3, 0xA8, 'r', 'e', 'n', 't' }; +static symbol s_5_29[6] = { 'a', 's', 's', 'e', 'n', 't' }; +static symbol s_5_30[5] = { 'e', 'r', 'o', 'n', 't' }; +static symbol s_5_31[3] = { 0xC3, 0xA2, 't' }; +static symbol s_5_32[2] = { 'e', 'z' }; +static symbol s_5_33[3] = { 'i', 'e', 'z' }; +static symbol s_5_34[5] = { 'e', 'r', 'i', 'e', 'z' }; +static symbol s_5_35[6] = { 'a', 's', 's', 'i', 'e', 'z' }; +static symbol s_5_36[4] = { 'e', 'r', 'e', 'z' }; +static symbol s_5_37[2] = { 0xC3, 0xA9 }; + +static struct among a_5[38] = +{ +/* 0 */ { 1, s_5_0, -1, 3, 0}, +/* 1 */ { 3, s_5_1, 0, 2, 0}, +/* 2 */ { 4, s_5_2, -1, 3, 0}, +/* 3 */ { 4, s_5_3, -1, 3, 0}, +/* 4 */ { 3, s_5_4, -1, 2, 0}, +/* 5 */ { 2, s_5_5, -1, 3, 0}, +/* 6 */ { 4, s_5_6, 5, 2, 0}, +/* 7 */ { 2, s_5_7, -1, 2, 0}, +/* 8 */ { 2, s_5_8, -1, 3, 0}, +/* 9 */ { 4, s_5_9, 8, 2, 0}, +/* 10 */ { 5, s_5_10, -1, 3, 0}, +/* 11 */ { 5, s_5_11, -1, 3, 0}, +/* 12 */ { 5, s_5_12, -1, 3, 0}, +/* 13 */ { 5, s_5_13, -1, 3, 0}, +/* 14 */ { 4, s_5_14, -1, 2, 0}, +/* 15 */ { 3, s_5_15, -1, 3, 0}, +/* 16 */ { 5, s_5_16, 15, 2, 0}, +/* 17 */ { 4, s_5_17, -1, 1, 0}, +/* 18 */ { 6, s_5_18, 17, 2, 0}, +/* 19 */ { 7, s_5_19, 17, 3, 0}, +/* 20 */ { 5, s_5_20, -1, 2, 0}, +/* 21 */ { 4, s_5_21, -1, 3, 0}, +/* 22 */ { 3, s_5_22, -1, 2, 0}, +/* 23 */ { 3, s_5_23, -1, 3, 0}, +/* 24 */ { 5, s_5_24, 23, 2, 0}, +/* 25 */ { 3, s_5_25, -1, 3, 0}, +/* 26 */ { 5, s_5_26, -1, 3, 0}, +/* 27 */ { 7, s_5_27, 26, 2, 0}, +/* 28 */ { 6, s_5_28, -1, 2, 0}, +/* 29 */ { 6, s_5_29, -1, 3, 0}, +/* 30 */ { 5, s_5_30, -1, 2, 0}, +/* 31 */ { 3, s_5_31, -1, 3, 0}, +/* 32 */ { 2, s_5_32, -1, 2, 0}, +/* 33 */ { 3, s_5_33, 32, 2, 0}, +/* 34 */ { 5, s_5_34, 33, 2, 0}, +/* 35 */ { 6, s_5_35, 33, 3, 0}, +/* 36 */ { 4, s_5_36, 32, 2, 0}, +/* 37 */ { 2, s_5_37, -1, 2, 0} +}; + +static symbol s_6_0[1] = { 'e' }; +static symbol s_6_1[5] = { 'I', 0xC3, 0xA8, 'r', 'e' }; +static symbol s_6_2[5] = { 'i', 0xC3, 0xA8, 'r', 'e' }; +static symbol s_6_3[3] = { 'i', 'o', 'n' }; +static symbol s_6_4[3] = { 'I', 'e', 'r' }; +static symbol s_6_5[3] = { 'i', 'e', 'r' }; +static symbol s_6_6[2] = { 0xC3, 0xAB }; + +static struct among a_6[7] = +{ +/* 0 */ { 1, s_6_0, -1, 3, 0}, +/* 1 */ { 5, s_6_1, 0, 2, 0}, +/* 2 */ { 5, s_6_2, 0, 2, 0}, +/* 3 */ { 3, s_6_3, -1, 1, 0}, +/* 4 */ { 3, s_6_4, -1, 2, 0}, +/* 5 */ { 3, s_6_5, -1, 2, 0}, +/* 6 */ { 2, s_6_6, -1, 4, 0} +}; + +static symbol s_7_0[3] = { 'e', 'l', 'l' }; +static symbol s_7_1[4] = { 'e', 'i', 'l', 'l' }; +static symbol s_7_2[3] = { 'e', 'n', 'n' }; +static symbol s_7_3[3] = { 'o', 'n', 'n' }; +static symbol s_7_4[3] = { 'e', 't', 't' }; + +static struct among a_7[5] = +{ +/* 0 */ { 3, s_7_0, -1, -1, 0}, +/* 1 */ { 4, s_7_1, -1, -1, 0}, +/* 2 */ { 3, s_7_2, -1, -1, 0}, +/* 3 */ { 3, s_7_3, -1, -1, 0}, +/* 4 */ { 3, s_7_4, -1, -1, 0} +}; + +static unsigned char g_v[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 130, 103, 8, 5 }; + +static unsigned char g_keep_with_s[] = { 1, 65, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128 }; + +static symbol s_0[] = { 'u' }; +static symbol s_1[] = { 'U' }; +static symbol s_2[] = { 'i' }; +static symbol s_3[] = { 'I' }; +static symbol s_4[] = { 'y' }; +static symbol s_5[] = { 'Y' }; +static symbol s_6[] = { 'y' }; +static symbol s_7[] = { 'Y' }; +static symbol s_8[] = { 'q' }; +static symbol s_9[] = { 'u' }; +static symbol s_10[] = { 'U' }; +static symbol s_11[] = { 'i' }; +static symbol s_12[] = { 'u' }; +static symbol s_13[] = { 'y' }; +static symbol s_14[] = { 'i', 'c' }; +static symbol s_15[] = { 'i', 'q', 'U' }; +static symbol s_16[] = { 'l', 'o', 'g' }; +static symbol s_17[] = { 'u' }; +static symbol s_18[] = { 'e', 'n', 't' }; +static symbol s_19[] = { 'a', 't' }; +static symbol s_20[] = { 'e', 'u', 'x' }; +static symbol s_21[] = { 'i' }; +static symbol s_22[] = { 'a', 'b', 'l' }; +static symbol s_23[] = { 'i', 'q', 'U' }; +static symbol s_24[] = { 'a', 't' }; +static symbol s_25[] = { 'i', 'c' }; +static symbol s_26[] = { 'i', 'q', 'U' }; +static symbol s_27[] = { 'e', 'a', 'u' }; +static symbol s_28[] = { 'a', 'l' }; +static symbol s_29[] = { 'e', 'u', 'x' }; +static symbol s_30[] = { 'a', 'n', 't' }; +static symbol s_31[] = { 'e', 'n', 't' }; +static symbol s_32[] = { 'e' }; +static symbol s_33[] = { 's' }; +static symbol s_34[] = { 's' }; +static symbol s_35[] = { 't' }; +static symbol s_36[] = { 'i' }; +static symbol s_37[] = { 'g', 'u' }; +static symbol s_38[] = { 0xC3, 0xA9 }; +static symbol s_39[] = { 0xC3, 0xA8 }; +static symbol s_40[] = { 'e' }; +static symbol s_41[] = { 'Y' }; +static symbol s_42[] = { 'i' }; +static symbol s_43[] = { 0xC3, 0xA7 }; +static symbol s_44[] = { 'c' }; + +static int r_prelude(struct SN_env * z) { + while(1) { /* repeat, line 38 */ + int c = z->c; + while(1) { /* goto, line 38 */ + int c = z->c; + { int c = z->c; /* or, line 44 */ + if (!(in_grouping_U(z, g_v, 97, 251))) goto lab3; + z->bra = z->c; /* [, line 40 */ + { int c = z->c; /* or, line 40 */ + if (!(eq_s(z, 1, s_0))) goto lab5; + z->ket = z->c; /* ], line 40 */ + if (!(in_grouping_U(z, g_v, 97, 251))) goto lab5; + { int ret; + ret = slice_from_s(z, 1, s_1); /* <-, line 40 */ + if (ret < 0) return ret; + } + goto lab4; + lab5: + z->c = c; + if (!(eq_s(z, 1, s_2))) goto lab6; + z->ket = z->c; /* ], line 41 */ + if (!(in_grouping_U(z, g_v, 97, 251))) goto lab6; + { int ret; + ret = slice_from_s(z, 1, s_3); /* <-, line 41 */ + if (ret < 0) return ret; + } + goto lab4; + lab6: + z->c = c; + if (!(eq_s(z, 1, s_4))) goto lab3; + z->ket = z->c; /* ], line 42 */ + { int ret; + ret = slice_from_s(z, 1, s_5); /* <-, line 42 */ + if (ret < 0) return ret; + } + } + lab4: + goto lab2; + lab3: + z->c = c; + z->bra = z->c; /* [, line 45 */ + if (!(eq_s(z, 1, s_6))) goto lab7; + z->ket = z->c; /* ], line 45 */ + if (!(in_grouping_U(z, g_v, 97, 251))) goto lab7; + { int ret; + ret = slice_from_s(z, 1, s_7); /* <-, line 45 */ + if (ret < 0) return ret; + } + goto lab2; + lab7: + z->c = c; + if (!(eq_s(z, 1, s_8))) goto lab1; + z->bra = z->c; /* [, line 47 */ + if (!(eq_s(z, 1, s_9))) goto lab1; + z->ket = z->c; /* ], line 47 */ + { int ret; + ret = slice_from_s(z, 1, s_10); /* <-, line 47 */ + if (ret < 0) return ret; + } + } + lab2: + z->c = c; + break; + lab1: + z->c = c; + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab0; + z->c = c; /* goto, line 38 */ + } + } + continue; + lab0: + z->c = c; + break; + } + return 1; +} + +static int r_mark_regions(struct SN_env * z) { + z->I[0] = z->l; + z->I[1] = z->l; + z->I[2] = z->l; + { int c = z->c; /* do, line 56 */ + { int c = z->c; /* or, line 57 */ + if (!(in_grouping_U(z, g_v, 97, 251))) goto lab2; + if (!(in_grouping_U(z, g_v, 97, 251))) goto lab2; + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab2; + z->c = c; /* next, line 57 */ + } + goto lab1; + lab2: + z->c = c; + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab0; + z->c = c; /* next, line 57 */ + } + while(1) { /* gopast, line 57 */ + if (!(in_grouping_U(z, g_v, 97, 251))) goto lab3; + break; + lab3: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab0; + z->c = c; /* gopast, line 57 */ + } + } + } + lab1: + z->I[0] = z->c; /* setmark pV, line 58 */ + lab0: + z->c = c; + } + { int c = z->c; /* do, line 60 */ + while(1) { /* gopast, line 61 */ + if (!(in_grouping_U(z, g_v, 97, 251))) goto lab5; + break; + lab5: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab4; + z->c = c; /* gopast, line 61 */ + } + } + while(1) { /* gopast, line 61 */ + if (!(out_grouping_U(z, g_v, 97, 251))) goto lab6; + break; + lab6: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab4; + z->c = c; /* gopast, line 61 */ + } + } + z->I[1] = z->c; /* setmark p1, line 61 */ + while(1) { /* gopast, line 62 */ + if (!(in_grouping_U(z, g_v, 97, 251))) goto lab7; + break; + lab7: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab4; + z->c = c; /* gopast, line 62 */ + } + } + while(1) { /* gopast, line 62 */ + if (!(out_grouping_U(z, g_v, 97, 251))) goto lab8; + break; + lab8: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab4; + z->c = c; /* gopast, line 62 */ + } + } + z->I[2] = z->c; /* setmark p2, line 62 */ + lab4: + z->c = c; + } + return 1; +} + +static int r_postlude(struct SN_env * z) { + int among_var; + while(1) { /* repeat, line 66 */ + int c = z->c; + z->bra = z->c; /* [, line 68 */ + among_var = find_among(z, a_0, 4); /* substring, line 68 */ + if (!(among_var)) goto lab0; + z->ket = z->c; /* ], line 68 */ + switch(among_var) { + case 0: goto lab0; + case 1: + { int ret; + ret = slice_from_s(z, 1, s_11); /* <-, line 69 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 1, s_12); /* <-, line 70 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_from_s(z, 1, s_13); /* <-, line 71 */ + if (ret < 0) return ret; + } + break; + case 4: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab0; + z->c = c; /* next, line 72 */ + } + break; + } + continue; + lab0: + z->c = c; + break; + } + return 1; +} + +static int r_RV(struct SN_env * z) { + if (!(z->I[0] <= z->c)) return 0; + return 1; +} + +static int r_R1(struct SN_env * z) { + if (!(z->I[1] <= z->c)) return 0; + return 1; +} + +static int r_R2(struct SN_env * z) { + if (!(z->I[2] <= z->c)) return 0; + return 1; +} + +static int r_standard_suffix(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 83 */ + among_var = find_among_b(z, a_3, 43); /* substring, line 83 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 83 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 87 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 87 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 90 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 90 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 91 */ + z->ket = z->c; /* [, line 91 */ + if (!(eq_s_b(z, 2, s_14))) { z->c = z->l - m; goto lab0; } + z->bra = z->c; /* ], line 91 */ + { int m = z->l - z->c; (void) m; /* or, line 91 */ + { int ret = r_R2(z); + if (ret == 0) goto lab2; /* call R2, line 91 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 91 */ + if (ret < 0) return ret; + } + goto lab1; + lab2: + z->c = z->l - m; + { int ret; + ret = slice_from_s(z, 3, s_15); /* <-, line 91 */ + if (ret < 0) return ret; + } + } + lab1: + lab0: + ; + } + break; + case 3: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 95 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 3, s_16); /* <-, line 95 */ + if (ret < 0) return ret; + } + break; + case 4: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 98 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 1, s_17); /* <-, line 98 */ + if (ret < 0) return ret; + } + break; + case 5: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 101 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 3, s_18); /* <-, line 101 */ + if (ret < 0) return ret; + } + break; + case 6: + { int ret = r_RV(z); + if (ret == 0) return 0; /* call RV, line 105 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 105 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 106 */ + z->ket = z->c; /* [, line 107 */ + among_var = find_among_b(z, a_1, 6); /* substring, line 107 */ + if (!(among_var)) { z->c = z->l - m; goto lab3; } + z->bra = z->c; /* ], line 107 */ + switch(among_var) { + case 0: { z->c = z->l - m; goto lab3; } + case 1: + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab3; } /* call R2, line 108 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 108 */ + if (ret < 0) return ret; + } + z->ket = z->c; /* [, line 108 */ + if (!(eq_s_b(z, 2, s_19))) { z->c = z->l - m; goto lab3; } + z->bra = z->c; /* ], line 108 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab3; } /* call R2, line 108 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 108 */ + if (ret < 0) return ret; + } + break; + case 2: + { int m = z->l - z->c; (void) m; /* or, line 109 */ + { int ret = r_R2(z); + if (ret == 0) goto lab5; /* call R2, line 109 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 109 */ + if (ret < 0) return ret; + } + goto lab4; + lab5: + z->c = z->l - m; + { int ret = r_R1(z); + if (ret == 0) { z->c = z->l - m; goto lab3; } /* call R1, line 109 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 3, s_20); /* <-, line 109 */ + if (ret < 0) return ret; + } + } + lab4: + break; + case 3: + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab3; } /* call R2, line 111 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 111 */ + if (ret < 0) return ret; + } + break; + case 4: + { int ret = r_RV(z); + if (ret == 0) { z->c = z->l - m; goto lab3; } /* call RV, line 113 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 1, s_21); /* <-, line 113 */ + if (ret < 0) return ret; + } + break; + } + lab3: + ; + } + break; + case 7: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 120 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 120 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 121 */ + z->ket = z->c; /* [, line 122 */ + among_var = find_among_b(z, a_2, 3); /* substring, line 122 */ + if (!(among_var)) { z->c = z->l - m; goto lab6; } + z->bra = z->c; /* ], line 122 */ + switch(among_var) { + case 0: { z->c = z->l - m; goto lab6; } + case 1: + { int m = z->l - z->c; (void) m; /* or, line 123 */ + { int ret = r_R2(z); + if (ret == 0) goto lab8; /* call R2, line 123 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 123 */ + if (ret < 0) return ret; + } + goto lab7; + lab8: + z->c = z->l - m; + { int ret; + ret = slice_from_s(z, 3, s_22); /* <-, line 123 */ + if (ret < 0) return ret; + } + } + lab7: + break; + case 2: + { int m = z->l - z->c; (void) m; /* or, line 124 */ + { int ret = r_R2(z); + if (ret == 0) goto lab10; /* call R2, line 124 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 124 */ + if (ret < 0) return ret; + } + goto lab9; + lab10: + z->c = z->l - m; + { int ret; + ret = slice_from_s(z, 3, s_23); /* <-, line 124 */ + if (ret < 0) return ret; + } + } + lab9: + break; + case 3: + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab6; } /* call R2, line 125 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 125 */ + if (ret < 0) return ret; + } + break; + } + lab6: + ; + } + break; + case 8: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 132 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 132 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 133 */ + z->ket = z->c; /* [, line 133 */ + if (!(eq_s_b(z, 2, s_24))) { z->c = z->l - m; goto lab11; } + z->bra = z->c; /* ], line 133 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab11; } /* call R2, line 133 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 133 */ + if (ret < 0) return ret; + } + z->ket = z->c; /* [, line 133 */ + if (!(eq_s_b(z, 2, s_25))) { z->c = z->l - m; goto lab11; } + z->bra = z->c; /* ], line 133 */ + { int m = z->l - z->c; (void) m; /* or, line 133 */ + { int ret = r_R2(z); + if (ret == 0) goto lab13; /* call R2, line 133 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 133 */ + if (ret < 0) return ret; + } + goto lab12; + lab13: + z->c = z->l - m; + { int ret; + ret = slice_from_s(z, 3, s_26); /* <-, line 133 */ + if (ret < 0) return ret; + } + } + lab12: + lab11: + ; + } + break; + case 9: + { int ret; + ret = slice_from_s(z, 3, s_27); /* <-, line 135 */ + if (ret < 0) return ret; + } + break; + case 10: + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 136 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 2, s_28); /* <-, line 136 */ + if (ret < 0) return ret; + } + break; + case 11: + { int m = z->l - z->c; (void) m; /* or, line 138 */ + { int ret = r_R2(z); + if (ret == 0) goto lab15; /* call R2, line 138 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 138 */ + if (ret < 0) return ret; + } + goto lab14; + lab15: + z->c = z->l - m; + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 138 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 3, s_29); /* <-, line 138 */ + if (ret < 0) return ret; + } + } + lab14: + break; + case 12: + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 141 */ + if (ret < 0) return ret; + } + if (!(out_grouping_b_U(z, g_v, 97, 251))) return 0; + { int ret; + ret = slice_del(z); /* delete, line 141 */ + if (ret < 0) return ret; + } + break; + case 13: + { int ret = r_RV(z); + if (ret == 0) return 0; /* call RV, line 146 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 3, s_30); /* <-, line 146 */ + if (ret < 0) return ret; + } + return 0; /* fail, line 146 */ + break; + case 14: + { int ret = r_RV(z); + if (ret == 0) return 0; /* call RV, line 147 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 3, s_31); /* <-, line 147 */ + if (ret < 0) return ret; + } + return 0; /* fail, line 147 */ + break; + case 15: + { int m_test = z->l - z->c; /* test, line 149 */ + if (!(in_grouping_b_U(z, g_v, 97, 251))) return 0; + { int ret = r_RV(z); + if (ret == 0) return 0; /* call RV, line 149 */ + if (ret < 0) return ret; + } + z->c = z->l - m_test; + } + { int ret; + ret = slice_del(z); /* delete, line 149 */ + if (ret < 0) return ret; + } + return 0; /* fail, line 149 */ + break; + } + return 1; +} + +static int r_i_verb_suffix(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 154 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 154 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 155 */ + among_var = find_among_b(z, a_4, 35); /* substring, line 155 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 155 */ + switch(among_var) { + case 0: { z->lb = m3; return 0; } + case 1: + if (!(out_grouping_b_U(z, g_v, 97, 251))) { z->lb = m3; return 0; } + { int ret; + ret = slice_del(z); /* delete, line 161 */ + if (ret < 0) return ret; + } + break; + } + z->lb = m3; + } + return 1; +} + +static int r_verb_suffix(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 165 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 165 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 166 */ + among_var = find_among_b(z, a_5, 38); /* substring, line 166 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 166 */ + switch(among_var) { + case 0: { z->lb = m3; return 0; } + case 1: + { int ret = r_R2(z); + if (ret == 0) { z->lb = m3; return 0; } /* call R2, line 168 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 168 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_del(z); /* delete, line 176 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_del(z); /* delete, line 181 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 182 */ + z->ket = z->c; /* [, line 182 */ + if (!(eq_s_b(z, 1, s_32))) { z->c = z->l - m; goto lab0; } + z->bra = z->c; /* ], line 182 */ + { int ret; + ret = slice_del(z); /* delete, line 182 */ + if (ret < 0) return ret; + } + lab0: + ; + } + break; + } + z->lb = m3; + } + return 1; +} + +static int r_residual_suffix(struct SN_env * z) { + int among_var; + { int m = z->l - z->c; (void) m; /* try, line 190 */ + z->ket = z->c; /* [, line 190 */ + if (!(eq_s_b(z, 1, s_33))) { z->c = z->l - m; goto lab0; } + z->bra = z->c; /* ], line 190 */ + { int m_test = z->l - z->c; /* test, line 190 */ + if (!(out_grouping_b_U(z, g_keep_with_s, 97, 232))) { z->c = z->l - m; goto lab0; } + z->c = z->l - m_test; + } + { int ret; + ret = slice_del(z); /* delete, line 190 */ + if (ret < 0) return ret; + } + lab0: + ; + } + { int m3; /* setlimit, line 191 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 191 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 192 */ + among_var = find_among_b(z, a_6, 7); /* substring, line 192 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 192 */ + switch(among_var) { + case 0: { z->lb = m3; return 0; } + case 1: + { int ret = r_R2(z); + if (ret == 0) { z->lb = m3; return 0; } /* call R2, line 193 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* or, line 193 */ + if (!(eq_s_b(z, 1, s_34))) goto lab2; + goto lab1; + lab2: + z->c = z->l - m; + if (!(eq_s_b(z, 1, s_35))) { z->lb = m3; return 0; } + } + lab1: + { int ret; + ret = slice_del(z); /* delete, line 193 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 1, s_36); /* <-, line 195 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_del(z); /* delete, line 196 */ + if (ret < 0) return ret; + } + break; + case 4: + if (!(eq_s_b(z, 2, s_37))) { z->lb = m3; return 0; } + { int ret; + ret = slice_del(z); /* delete, line 197 */ + if (ret < 0) return ret; + } + break; + } + z->lb = m3; + } + return 1; +} + +static int r_un_double(struct SN_env * z) { + { int m_test = z->l - z->c; /* test, line 203 */ + if (!(find_among_b(z, a_7, 5))) return 0; /* among, line 203 */ + z->c = z->l - m_test; + } + z->ket = z->c; /* [, line 203 */ + { int c = skip_utf8(z->p, z->c, z->lb, 0, -1); + if (c < 0) return 0; + z->c = c; /* next, line 203 */ + } + z->bra = z->c; /* ], line 203 */ + { int ret; + ret = slice_del(z); /* delete, line 203 */ + if (ret < 0) return ret; + } + return 1; +} + +static int r_un_accent(struct SN_env * z) { + { int i = 1; + while(1) { /* atleast, line 207 */ + if (!(out_grouping_b_U(z, g_v, 97, 251))) goto lab0; + i--; + continue; + lab0: + break; + } + if (i > 0) return 0; + } + z->ket = z->c; /* [, line 208 */ + { int m = z->l - z->c; (void) m; /* or, line 208 */ + if (!(eq_s_b(z, 2, s_38))) goto lab2; + goto lab1; + lab2: + z->c = z->l - m; + if (!(eq_s_b(z, 2, s_39))) return 0; + } +lab1: + z->bra = z->c; /* ], line 208 */ + { int ret; + ret = slice_from_s(z, 1, s_40); /* <-, line 208 */ + if (ret < 0) return ret; + } + return 1; +} + +extern int french_UTF_8_stem(struct SN_env * z) { + { int c = z->c; /* do, line 214 */ + { int ret = r_prelude(z); + if (ret == 0) goto lab0; /* call prelude, line 214 */ + if (ret < 0) return ret; + } + lab0: + z->c = c; + } + { int c = z->c; /* do, line 215 */ + { int ret = r_mark_regions(z); + if (ret == 0) goto lab1; /* call mark_regions, line 215 */ + if (ret < 0) return ret; + } + lab1: + z->c = c; + } + z->lb = z->c; z->c = z->l; /* backwards, line 216 */ + + { int m = z->l - z->c; (void) m; /* do, line 218 */ + { int m = z->l - z->c; (void) m; /* or, line 228 */ + { int m = z->l - z->c; (void) m; /* and, line 224 */ + { int m = z->l - z->c; (void) m; /* or, line 220 */ + { int ret = r_standard_suffix(z); + if (ret == 0) goto lab6; /* call standard_suffix, line 220 */ + if (ret < 0) return ret; + } + goto lab5; + lab6: + z->c = z->l - m; + { int ret = r_i_verb_suffix(z); + if (ret == 0) goto lab7; /* call i_verb_suffix, line 221 */ + if (ret < 0) return ret; + } + goto lab5; + lab7: + z->c = z->l - m; + { int ret = r_verb_suffix(z); + if (ret == 0) goto lab4; /* call verb_suffix, line 222 */ + if (ret < 0) return ret; + } + } + lab5: + z->c = z->l - m; + { int m = z->l - z->c; (void) m; /* try, line 225 */ + z->ket = z->c; /* [, line 225 */ + { int m = z->l - z->c; (void) m; /* or, line 225 */ + if (!(eq_s_b(z, 1, s_41))) goto lab10; + z->bra = z->c; /* ], line 225 */ + { int ret; + ret = slice_from_s(z, 1, s_42); /* <-, line 225 */ + if (ret < 0) return ret; + } + goto lab9; + lab10: + z->c = z->l - m; + if (!(eq_s_b(z, 2, s_43))) { z->c = z->l - m; goto lab8; } + z->bra = z->c; /* ], line 226 */ + { int ret; + ret = slice_from_s(z, 1, s_44); /* <-, line 226 */ + if (ret < 0) return ret; + } + } + lab9: + lab8: + ; + } + } + goto lab3; + lab4: + z->c = z->l - m; + { int ret = r_residual_suffix(z); + if (ret == 0) goto lab2; /* call residual_suffix, line 229 */ + if (ret < 0) return ret; + } + } + lab3: + lab2: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 234 */ + { int ret = r_un_double(z); + if (ret == 0) goto lab11; /* call un_double, line 234 */ + if (ret < 0) return ret; + } + lab11: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 235 */ + { int ret = r_un_accent(z); + if (ret == 0) goto lab12; /* call un_accent, line 235 */ + if (ret < 0) return ret; + } + lab12: + z->c = z->l - m; + } + z->c = z->lb; + { int c = z->c; /* do, line 237 */ + { int ret = r_postlude(z); + if (ret == 0) goto lab13; /* call postlude, line 237 */ + if (ret < 0) return ret; + } + lab13: + z->c = c; + } + return 1; +} + +extern struct SN_env * french_UTF_8_create_env(void) { return SN_create_env(0, 3, 0); } + +extern void french_UTF_8_close_env(struct SN_env * z) { SN_close_env(z); } + diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_french.h b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_french.h new file mode 100644 index 0000000..08e3418 --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_french.h @@ -0,0 +1,16 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern struct SN_env * french_UTF_8_create_env(void); +extern void french_UTF_8_close_env(struct SN_env * z); + +extern int french_UTF_8_stem(struct SN_env * z); + +#ifdef __cplusplus +} +#endif + diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_german.c b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_german.c new file mode 100644 index 0000000..d66a137 --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_german.c @@ -0,0 +1,526 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#include "../runtime/header.h" + +extern int german_UTF_8_stem(struct SN_env * z); +static int r_standard_suffix(struct SN_env * z); +static int r_R2(struct SN_env * z); +static int r_R1(struct SN_env * z); +static int r_mark_regions(struct SN_env * z); +static int r_postlude(struct SN_env * z); +static int r_prelude(struct SN_env * z); + +extern struct SN_env * german_UTF_8_create_env(void); +extern void german_UTF_8_close_env(struct SN_env * z); + +static symbol s_0_1[1] = { 'U' }; +static symbol s_0_2[1] = { 'Y' }; +static symbol s_0_3[2] = { 0xC3, 0xA4 }; +static symbol s_0_4[2] = { 0xC3, 0xB6 }; +static symbol s_0_5[2] = { 0xC3, 0xBC }; + +static struct among a_0[6] = +{ +/* 0 */ { 0, 0, -1, 6, 0}, +/* 1 */ { 1, s_0_1, 0, 2, 0}, +/* 2 */ { 1, s_0_2, 0, 1, 0}, +/* 3 */ { 2, s_0_3, 0, 3, 0}, +/* 4 */ { 2, s_0_4, 0, 4, 0}, +/* 5 */ { 2, s_0_5, 0, 5, 0} +}; + +static symbol s_1_0[1] = { 'e' }; +static symbol s_1_1[2] = { 'e', 'm' }; +static symbol s_1_2[2] = { 'e', 'n' }; +static symbol s_1_3[3] = { 'e', 'r', 'n' }; +static symbol s_1_4[2] = { 'e', 'r' }; +static symbol s_1_5[1] = { 's' }; +static symbol s_1_6[2] = { 'e', 's' }; + +static struct among a_1[7] = +{ +/* 0 */ { 1, s_1_0, -1, 1, 0}, +/* 1 */ { 2, s_1_1, -1, 1, 0}, +/* 2 */ { 2, s_1_2, -1, 1, 0}, +/* 3 */ { 3, s_1_3, -1, 1, 0}, +/* 4 */ { 2, s_1_4, -1, 1, 0}, +/* 5 */ { 1, s_1_5, -1, 2, 0}, +/* 6 */ { 2, s_1_6, 5, 1, 0} +}; + +static symbol s_2_0[2] = { 'e', 'n' }; +static symbol s_2_1[2] = { 'e', 'r' }; +static symbol s_2_2[2] = { 's', 't' }; +static symbol s_2_3[3] = { 'e', 's', 't' }; + +static struct among a_2[4] = +{ +/* 0 */ { 2, s_2_0, -1, 1, 0}, +/* 1 */ { 2, s_2_1, -1, 1, 0}, +/* 2 */ { 2, s_2_2, -1, 2, 0}, +/* 3 */ { 3, s_2_3, 2, 1, 0} +}; + +static symbol s_3_0[2] = { 'i', 'g' }; +static symbol s_3_1[4] = { 'l', 'i', 'c', 'h' }; + +static struct among a_3[2] = +{ +/* 0 */ { 2, s_3_0, -1, 1, 0}, +/* 1 */ { 4, s_3_1, -1, 1, 0} +}; + +static symbol s_4_0[3] = { 'e', 'n', 'd' }; +static symbol s_4_1[2] = { 'i', 'g' }; +static symbol s_4_2[3] = { 'u', 'n', 'g' }; +static symbol s_4_3[4] = { 'l', 'i', 'c', 'h' }; +static symbol s_4_4[4] = { 'i', 's', 'c', 'h' }; +static symbol s_4_5[2] = { 'i', 'k' }; +static symbol s_4_6[4] = { 'h', 'e', 'i', 't' }; +static symbol s_4_7[4] = { 'k', 'e', 'i', 't' }; + +static struct among a_4[8] = +{ +/* 0 */ { 3, s_4_0, -1, 1, 0}, +/* 1 */ { 2, s_4_1, -1, 2, 0}, +/* 2 */ { 3, s_4_2, -1, 1, 0}, +/* 3 */ { 4, s_4_3, -1, 3, 0}, +/* 4 */ { 4, s_4_4, -1, 2, 0}, +/* 5 */ { 2, s_4_5, -1, 2, 0}, +/* 6 */ { 4, s_4_6, -1, 3, 0}, +/* 7 */ { 4, s_4_7, -1, 4, 0} +}; + +static unsigned char g_v[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 32, 8 }; + +static unsigned char g_s_ending[] = { 117, 30, 5 }; + +static unsigned char g_st_ending[] = { 117, 30, 4 }; + +static symbol s_0[] = { 0xC3, 0x9F }; +static symbol s_1[] = { 's', 's' }; +static symbol s_2[] = { 'u' }; +static symbol s_3[] = { 'U' }; +static symbol s_4[] = { 'y' }; +static symbol s_5[] = { 'Y' }; +static symbol s_6[] = { 'y' }; +static symbol s_7[] = { 'u' }; +static symbol s_8[] = { 'a' }; +static symbol s_9[] = { 'o' }; +static symbol s_10[] = { 'u' }; +static symbol s_11[] = { 'i', 'g' }; +static symbol s_12[] = { 'e' }; +static symbol s_13[] = { 'e' }; +static symbol s_14[] = { 'e', 'r' }; +static symbol s_15[] = { 'e', 'n' }; + +static int r_prelude(struct SN_env * z) { + { int c_test = z->c; /* test, line 30 */ + while(1) { /* repeat, line 30 */ + int c = z->c; + { int c = z->c; /* or, line 33 */ + z->bra = z->c; /* [, line 32 */ + if (!(eq_s(z, 2, s_0))) goto lab2; + z->ket = z->c; /* ], line 32 */ + { int ret; + ret = slice_from_s(z, 2, s_1); /* <-, line 32 */ + if (ret < 0) return ret; + } + goto lab1; + lab2: + z->c = c; + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab0; + z->c = c; /* next, line 33 */ + } + } + lab1: + continue; + lab0: + z->c = c; + break; + } + z->c = c_test; + } + while(1) { /* repeat, line 36 */ + int c = z->c; + while(1) { /* goto, line 36 */ + int c = z->c; + if (!(in_grouping_U(z, g_v, 97, 252))) goto lab4; + z->bra = z->c; /* [, line 37 */ + { int c = z->c; /* or, line 37 */ + if (!(eq_s(z, 1, s_2))) goto lab6; + z->ket = z->c; /* ], line 37 */ + if (!(in_grouping_U(z, g_v, 97, 252))) goto lab6; + { int ret; + ret = slice_from_s(z, 1, s_3); /* <-, line 37 */ + if (ret < 0) return ret; + } + goto lab5; + lab6: + z->c = c; + if (!(eq_s(z, 1, s_4))) goto lab4; + z->ket = z->c; /* ], line 38 */ + if (!(in_grouping_U(z, g_v, 97, 252))) goto lab4; + { int ret; + ret = slice_from_s(z, 1, s_5); /* <-, line 38 */ + if (ret < 0) return ret; + } + } + lab5: + z->c = c; + break; + lab4: + z->c = c; + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab3; + z->c = c; /* goto, line 36 */ + } + } + continue; + lab3: + z->c = c; + break; + } + return 1; +} + +static int r_mark_regions(struct SN_env * z) { + z->I[0] = z->l; + z->I[1] = z->l; + { int c_test = z->c; /* test, line 47 */ + { int c = skip_utf8(z->p, z->c, 0, z->l, + 3); + if (c < 0) return 0; + z->c = c; /* hop, line 47 */ + } + z->I[2] = z->c; /* setmark x, line 47 */ + z->c = c_test; + } + while(1) { /* gopast, line 49 */ + if (!(in_grouping_U(z, g_v, 97, 252))) goto lab0; + break; + lab0: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) return 0; + z->c = c; /* gopast, line 49 */ + } + } + while(1) { /* gopast, line 49 */ + if (!(out_grouping_U(z, g_v, 97, 252))) goto lab1; + break; + lab1: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) return 0; + z->c = c; /* gopast, line 49 */ + } + } + z->I[0] = z->c; /* setmark p1, line 49 */ + /* try, line 50 */ + if (!(z->I[0] < z->I[2])) goto lab2; + z->I[0] = z->I[2]; +lab2: + while(1) { /* gopast, line 51 */ + if (!(in_grouping_U(z, g_v, 97, 252))) goto lab3; + break; + lab3: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) return 0; + z->c = c; /* gopast, line 51 */ + } + } + while(1) { /* gopast, line 51 */ + if (!(out_grouping_U(z, g_v, 97, 252))) goto lab4; + break; + lab4: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) return 0; + z->c = c; /* gopast, line 51 */ + } + } + z->I[1] = z->c; /* setmark p2, line 51 */ + return 1; +} + +static int r_postlude(struct SN_env * z) { + int among_var; + while(1) { /* repeat, line 55 */ + int c = z->c; + z->bra = z->c; /* [, line 57 */ + among_var = find_among(z, a_0, 6); /* substring, line 57 */ + if (!(among_var)) goto lab0; + z->ket = z->c; /* ], line 57 */ + switch(among_var) { + case 0: goto lab0; + case 1: + { int ret; + ret = slice_from_s(z, 1, s_6); /* <-, line 58 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 1, s_7); /* <-, line 59 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_from_s(z, 1, s_8); /* <-, line 60 */ + if (ret < 0) return ret; + } + break; + case 4: + { int ret; + ret = slice_from_s(z, 1, s_9); /* <-, line 61 */ + if (ret < 0) return ret; + } + break; + case 5: + { int ret; + ret = slice_from_s(z, 1, s_10); /* <-, line 62 */ + if (ret < 0) return ret; + } + break; + case 6: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab0; + z->c = c; /* next, line 63 */ + } + break; + } + continue; + lab0: + z->c = c; + break; + } + return 1; +} + +static int r_R1(struct SN_env * z) { + if (!(z->I[0] <= z->c)) return 0; + return 1; +} + +static int r_R2(struct SN_env * z) { + if (!(z->I[1] <= z->c)) return 0; + return 1; +} + +static int r_standard_suffix(struct SN_env * z) { + int among_var; + { int m = z->l - z->c; (void) m; /* do, line 74 */ + z->ket = z->c; /* [, line 75 */ + among_var = find_among_b(z, a_1, 7); /* substring, line 75 */ + if (!(among_var)) goto lab0; + z->bra = z->c; /* ], line 75 */ + { int ret = r_R1(z); + if (ret == 0) goto lab0; /* call R1, line 75 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: goto lab0; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 77 */ + if (ret < 0) return ret; + } + break; + case 2: + if (!(in_grouping_b_U(z, g_s_ending, 98, 116))) goto lab0; + { int ret; + ret = slice_del(z); /* delete, line 80 */ + if (ret < 0) return ret; + } + break; + } + lab0: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 84 */ + z->ket = z->c; /* [, line 85 */ + among_var = find_among_b(z, a_2, 4); /* substring, line 85 */ + if (!(among_var)) goto lab1; + z->bra = z->c; /* ], line 85 */ + { int ret = r_R1(z); + if (ret == 0) goto lab1; /* call R1, line 85 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: goto lab1; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 87 */ + if (ret < 0) return ret; + } + break; + case 2: + if (!(in_grouping_b_U(z, g_st_ending, 98, 116))) goto lab1; + { int c = skip_utf8(z->p, z->c, z->lb, z->l, - 3); + if (c < 0) goto lab1; + z->c = c; /* hop, line 90 */ + } + { int ret; + ret = slice_del(z); /* delete, line 90 */ + if (ret < 0) return ret; + } + break; + } + lab1: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 94 */ + z->ket = z->c; /* [, line 95 */ + among_var = find_among_b(z, a_4, 8); /* substring, line 95 */ + if (!(among_var)) goto lab2; + z->bra = z->c; /* ], line 95 */ + { int ret = r_R2(z); + if (ret == 0) goto lab2; /* call R2, line 95 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: goto lab2; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 97 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 98 */ + z->ket = z->c; /* [, line 98 */ + if (!(eq_s_b(z, 2, s_11))) { z->c = z->l - m; goto lab3; } + z->bra = z->c; /* ], line 98 */ + { int m = z->l - z->c; (void) m; /* not, line 98 */ + if (!(eq_s_b(z, 1, s_12))) goto lab4; + { z->c = z->l - m; goto lab3; } + lab4: + z->c = z->l - m; + } + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab3; } /* call R2, line 98 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 98 */ + if (ret < 0) return ret; + } + lab3: + ; + } + break; + case 2: + { int m = z->l - z->c; (void) m; /* not, line 101 */ + if (!(eq_s_b(z, 1, s_13))) goto lab5; + goto lab2; + lab5: + z->c = z->l - m; + } + { int ret; + ret = slice_del(z); /* delete, line 101 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_del(z); /* delete, line 104 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 105 */ + z->ket = z->c; /* [, line 106 */ + { int m = z->l - z->c; (void) m; /* or, line 106 */ + if (!(eq_s_b(z, 2, s_14))) goto lab8; + goto lab7; + lab8: + z->c = z->l - m; + if (!(eq_s_b(z, 2, s_15))) { z->c = z->l - m; goto lab6; } + } + lab7: + z->bra = z->c; /* ], line 106 */ + { int ret = r_R1(z); + if (ret == 0) { z->c = z->l - m; goto lab6; } /* call R1, line 106 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 106 */ + if (ret < 0) return ret; + } + lab6: + ; + } + break; + case 4: + { int ret; + ret = slice_del(z); /* delete, line 110 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 111 */ + z->ket = z->c; /* [, line 112 */ + among_var = find_among_b(z, a_3, 2); /* substring, line 112 */ + if (!(among_var)) { z->c = z->l - m; goto lab9; } + z->bra = z->c; /* ], line 112 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab9; } /* call R2, line 112 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: { z->c = z->l - m; goto lab9; } + case 1: + { int ret; + ret = slice_del(z); /* delete, line 114 */ + if (ret < 0) return ret; + } + break; + } + lab9: + ; + } + break; + } + lab2: + z->c = z->l - m; + } + return 1; +} + +extern int german_UTF_8_stem(struct SN_env * z) { + { int c = z->c; /* do, line 125 */ + { int ret = r_prelude(z); + if (ret == 0) goto lab0; /* call prelude, line 125 */ + if (ret < 0) return ret; + } + lab0: + z->c = c; + } + { int c = z->c; /* do, line 126 */ + { int ret = r_mark_regions(z); + if (ret == 0) goto lab1; /* call mark_regions, line 126 */ + if (ret < 0) return ret; + } + lab1: + z->c = c; + } + z->lb = z->c; z->c = z->l; /* backwards, line 127 */ + + { int m = z->l - z->c; (void) m; /* do, line 128 */ + { int ret = r_standard_suffix(z); + if (ret == 0) goto lab2; /* call standard_suffix, line 128 */ + if (ret < 0) return ret; + } + lab2: + z->c = z->l - m; + } + z->c = z->lb; + { int c = z->c; /* do, line 129 */ + { int ret = r_postlude(z); + if (ret == 0) goto lab3; /* call postlude, line 129 */ + if (ret < 0) return ret; + } + lab3: + z->c = c; + } + return 1; +} + +extern struct SN_env * german_UTF_8_create_env(void) { return SN_create_env(0, 3, 0); } + +extern void german_UTF_8_close_env(struct SN_env * z) { SN_close_env(z); } + diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_german.h b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_german.h new file mode 100644 index 0000000..5bd84d4 --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_german.h @@ -0,0 +1,16 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern struct SN_env * german_UTF_8_create_env(void); +extern void german_UTF_8_close_env(struct SN_env * z); + +extern int german_UTF_8_stem(struct SN_env * z); + +#ifdef __cplusplus +} +#endif + diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_italian.c b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_italian.c new file mode 100644 index 0000000..5639b1c --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_italian.c @@ -0,0 +1,1113 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#include "../runtime/header.h" + +extern int italian_UTF_8_stem(struct SN_env * z); +static int r_vowel_suffix(struct SN_env * z); +static int r_verb_suffix(struct SN_env * z); +static int r_standard_suffix(struct SN_env * z); +static int r_attached_pronoun(struct SN_env * z); +static int r_R2(struct SN_env * z); +static int r_R1(struct SN_env * z); +static int r_RV(struct SN_env * z); +static int r_mark_regions(struct SN_env * z); +static int r_postlude(struct SN_env * z); +static int r_prelude(struct SN_env * z); + +extern struct SN_env * italian_UTF_8_create_env(void); +extern void italian_UTF_8_close_env(struct SN_env * z); + +static symbol s_0_1[2] = { 'q', 'u' }; +static symbol s_0_2[2] = { 0xC3, 0xA1 }; +static symbol s_0_3[2] = { 0xC3, 0xA9 }; +static symbol s_0_4[2] = { 0xC3, 0xAD }; +static symbol s_0_5[2] = { 0xC3, 0xB3 }; +static symbol s_0_6[2] = { 0xC3, 0xBA }; + +static struct among a_0[7] = +{ +/* 0 */ { 0, 0, -1, 7, 0}, +/* 1 */ { 2, s_0_1, 0, 6, 0}, +/* 2 */ { 2, s_0_2, 0, 1, 0}, +/* 3 */ { 2, s_0_3, 0, 2, 0}, +/* 4 */ { 2, s_0_4, 0, 3, 0}, +/* 5 */ { 2, s_0_5, 0, 4, 0}, +/* 6 */ { 2, s_0_6, 0, 5, 0} +}; + +static symbol s_1_1[1] = { 'I' }; +static symbol s_1_2[1] = { 'U' }; + +static struct among a_1[3] = +{ +/* 0 */ { 0, 0, -1, 3, 0}, +/* 1 */ { 1, s_1_1, 0, 1, 0}, +/* 2 */ { 1, s_1_2, 0, 2, 0} +}; + +static symbol s_2_0[2] = { 'l', 'a' }; +static symbol s_2_1[4] = { 'c', 'e', 'l', 'a' }; +static symbol s_2_2[6] = { 'g', 'l', 'i', 'e', 'l', 'a' }; +static symbol s_2_3[4] = { 'm', 'e', 'l', 'a' }; +static symbol s_2_4[4] = { 't', 'e', 'l', 'a' }; +static symbol s_2_5[4] = { 'v', 'e', 'l', 'a' }; +static symbol s_2_6[2] = { 'l', 'e' }; +static symbol s_2_7[4] = { 'c', 'e', 'l', 'e' }; +static symbol s_2_8[6] = { 'g', 'l', 'i', 'e', 'l', 'e' }; +static symbol s_2_9[4] = { 'm', 'e', 'l', 'e' }; +static symbol s_2_10[4] = { 't', 'e', 'l', 'e' }; +static symbol s_2_11[4] = { 'v', 'e', 'l', 'e' }; +static symbol s_2_12[2] = { 'n', 'e' }; +static symbol s_2_13[4] = { 'c', 'e', 'n', 'e' }; +static symbol s_2_14[6] = { 'g', 'l', 'i', 'e', 'n', 'e' }; +static symbol s_2_15[4] = { 'm', 'e', 'n', 'e' }; +static symbol s_2_16[4] = { 's', 'e', 'n', 'e' }; +static symbol s_2_17[4] = { 't', 'e', 'n', 'e' }; +static symbol s_2_18[4] = { 'v', 'e', 'n', 'e' }; +static symbol s_2_19[2] = { 'c', 'i' }; +static symbol s_2_20[2] = { 'l', 'i' }; +static symbol s_2_21[4] = { 'c', 'e', 'l', 'i' }; +static symbol s_2_22[6] = { 'g', 'l', 'i', 'e', 'l', 'i' }; +static symbol s_2_23[4] = { 'm', 'e', 'l', 'i' }; +static symbol s_2_24[4] = { 't', 'e', 'l', 'i' }; +static symbol s_2_25[4] = { 'v', 'e', 'l', 'i' }; +static symbol s_2_26[3] = { 'g', 'l', 'i' }; +static symbol s_2_27[2] = { 'm', 'i' }; +static symbol s_2_28[2] = { 's', 'i' }; +static symbol s_2_29[2] = { 't', 'i' }; +static symbol s_2_30[2] = { 'v', 'i' }; +static symbol s_2_31[2] = { 'l', 'o' }; +static symbol s_2_32[4] = { 'c', 'e', 'l', 'o' }; +static symbol s_2_33[6] = { 'g', 'l', 'i', 'e', 'l', 'o' }; +static symbol s_2_34[4] = { 'm', 'e', 'l', 'o' }; +static symbol s_2_35[4] = { 't', 'e', 'l', 'o' }; +static symbol s_2_36[4] = { 'v', 'e', 'l', 'o' }; + +static struct among a_2[37] = +{ +/* 0 */ { 2, s_2_0, -1, -1, 0}, +/* 1 */ { 4, s_2_1, 0, -1, 0}, +/* 2 */ { 6, s_2_2, 0, -1, 0}, +/* 3 */ { 4, s_2_3, 0, -1, 0}, +/* 4 */ { 4, s_2_4, 0, -1, 0}, +/* 5 */ { 4, s_2_5, 0, -1, 0}, +/* 6 */ { 2, s_2_6, -1, -1, 0}, +/* 7 */ { 4, s_2_7, 6, -1, 0}, +/* 8 */ { 6, s_2_8, 6, -1, 0}, +/* 9 */ { 4, s_2_9, 6, -1, 0}, +/* 10 */ { 4, s_2_10, 6, -1, 0}, +/* 11 */ { 4, s_2_11, 6, -1, 0}, +/* 12 */ { 2, s_2_12, -1, -1, 0}, +/* 13 */ { 4, s_2_13, 12, -1, 0}, +/* 14 */ { 6, s_2_14, 12, -1, 0}, +/* 15 */ { 4, s_2_15, 12, -1, 0}, +/* 16 */ { 4, s_2_16, 12, -1, 0}, +/* 17 */ { 4, s_2_17, 12, -1, 0}, +/* 18 */ { 4, s_2_18, 12, -1, 0}, +/* 19 */ { 2, s_2_19, -1, -1, 0}, +/* 20 */ { 2, s_2_20, -1, -1, 0}, +/* 21 */ { 4, s_2_21, 20, -1, 0}, +/* 22 */ { 6, s_2_22, 20, -1, 0}, +/* 23 */ { 4, s_2_23, 20, -1, 0}, +/* 24 */ { 4, s_2_24, 20, -1, 0}, +/* 25 */ { 4, s_2_25, 20, -1, 0}, +/* 26 */ { 3, s_2_26, 20, -1, 0}, +/* 27 */ { 2, s_2_27, -1, -1, 0}, +/* 28 */ { 2, s_2_28, -1, -1, 0}, +/* 29 */ { 2, s_2_29, -1, -1, 0}, +/* 30 */ { 2, s_2_30, -1, -1, 0}, +/* 31 */ { 2, s_2_31, -1, -1, 0}, +/* 32 */ { 4, s_2_32, 31, -1, 0}, +/* 33 */ { 6, s_2_33, 31, -1, 0}, +/* 34 */ { 4, s_2_34, 31, -1, 0}, +/* 35 */ { 4, s_2_35, 31, -1, 0}, +/* 36 */ { 4, s_2_36, 31, -1, 0} +}; + +static symbol s_3_0[4] = { 'a', 'n', 'd', 'o' }; +static symbol s_3_1[4] = { 'e', 'n', 'd', 'o' }; +static symbol s_3_2[2] = { 'a', 'r' }; +static symbol s_3_3[2] = { 'e', 'r' }; +static symbol s_3_4[2] = { 'i', 'r' }; + +static struct among a_3[5] = +{ +/* 0 */ { 4, s_3_0, -1, 1, 0}, +/* 1 */ { 4, s_3_1, -1, 1, 0}, +/* 2 */ { 2, s_3_2, -1, 2, 0}, +/* 3 */ { 2, s_3_3, -1, 2, 0}, +/* 4 */ { 2, s_3_4, -1, 2, 0} +}; + +static symbol s_4_0[2] = { 'i', 'c' }; +static symbol s_4_1[4] = { 'a', 'b', 'i', 'l' }; +static symbol s_4_2[2] = { 'o', 's' }; +static symbol s_4_3[2] = { 'i', 'v' }; + +static struct among a_4[4] = +{ +/* 0 */ { 2, s_4_0, -1, -1, 0}, +/* 1 */ { 4, s_4_1, -1, -1, 0}, +/* 2 */ { 2, s_4_2, -1, -1, 0}, +/* 3 */ { 2, s_4_3, -1, 1, 0} +}; + +static symbol s_5_0[2] = { 'i', 'c' }; +static symbol s_5_1[4] = { 'a', 'b', 'i', 'l' }; +static symbol s_5_2[2] = { 'i', 'v' }; + +static struct among a_5[3] = +{ +/* 0 */ { 2, s_5_0, -1, 1, 0}, +/* 1 */ { 4, s_5_1, -1, 1, 0}, +/* 2 */ { 2, s_5_2, -1, 1, 0} +}; + +static symbol s_6_0[3] = { 'i', 'c', 'a' }; +static symbol s_6_1[5] = { 'l', 'o', 'g', 'i', 'a' }; +static symbol s_6_2[3] = { 'o', 's', 'a' }; +static symbol s_6_3[4] = { 'i', 's', 't', 'a' }; +static symbol s_6_4[3] = { 'i', 'v', 'a' }; +static symbol s_6_5[4] = { 'a', 'n', 'z', 'a' }; +static symbol s_6_6[4] = { 'e', 'n', 'z', 'a' }; +static symbol s_6_7[3] = { 'i', 'c', 'e' }; +static symbol s_6_8[6] = { 'a', 't', 'r', 'i', 'c', 'e' }; +static symbol s_6_9[4] = { 'i', 'c', 'h', 'e' }; +static symbol s_6_10[5] = { 'l', 'o', 'g', 'i', 'e' }; +static symbol s_6_11[5] = { 'a', 'b', 'i', 'l', 'e' }; +static symbol s_6_12[5] = { 'i', 'b', 'i', 'l', 'e' }; +static symbol s_6_13[6] = { 'u', 's', 'i', 'o', 'n', 'e' }; +static symbol s_6_14[6] = { 'a', 'z', 'i', 'o', 'n', 'e' }; +static symbol s_6_15[6] = { 'u', 'z', 'i', 'o', 'n', 'e' }; +static symbol s_6_16[5] = { 'a', 't', 'o', 'r', 'e' }; +static symbol s_6_17[3] = { 'o', 's', 'e' }; +static symbol s_6_18[4] = { 'a', 'n', 't', 'e' }; +static symbol s_6_19[5] = { 'm', 'e', 'n', 't', 'e' }; +static symbol s_6_20[6] = { 'a', 'm', 'e', 'n', 't', 'e' }; +static symbol s_6_21[4] = { 'i', 's', 't', 'e' }; +static symbol s_6_22[3] = { 'i', 'v', 'e' }; +static symbol s_6_23[4] = { 'a', 'n', 'z', 'e' }; +static symbol s_6_24[4] = { 'e', 'n', 'z', 'e' }; +static symbol s_6_25[3] = { 'i', 'c', 'i' }; +static symbol s_6_26[6] = { 'a', 't', 'r', 'i', 'c', 'i' }; +static symbol s_6_27[4] = { 'i', 'c', 'h', 'i' }; +static symbol s_6_28[5] = { 'a', 'b', 'i', 'l', 'i' }; +static symbol s_6_29[5] = { 'i', 'b', 'i', 'l', 'i' }; +static symbol s_6_30[4] = { 'i', 's', 'm', 'i' }; +static symbol s_6_31[6] = { 'u', 's', 'i', 'o', 'n', 'i' }; +static symbol s_6_32[6] = { 'a', 'z', 'i', 'o', 'n', 'i' }; +static symbol s_6_33[6] = { 'u', 'z', 'i', 'o', 'n', 'i' }; +static symbol s_6_34[5] = { 'a', 't', 'o', 'r', 'i' }; +static symbol s_6_35[3] = { 'o', 's', 'i' }; +static symbol s_6_36[4] = { 'a', 'n', 't', 'i' }; +static symbol s_6_37[6] = { 'a', 'm', 'e', 'n', 't', 'i' }; +static symbol s_6_38[6] = { 'i', 'm', 'e', 'n', 't', 'i' }; +static symbol s_6_39[4] = { 'i', 's', 't', 'i' }; +static symbol s_6_40[3] = { 'i', 'v', 'i' }; +static symbol s_6_41[3] = { 'i', 'c', 'o' }; +static symbol s_6_42[4] = { 'i', 's', 'm', 'o' }; +static symbol s_6_43[3] = { 'o', 's', 'o' }; +static symbol s_6_44[6] = { 'a', 'm', 'e', 'n', 't', 'o' }; +static symbol s_6_45[6] = { 'i', 'm', 'e', 'n', 't', 'o' }; +static symbol s_6_46[3] = { 'i', 'v', 'o' }; +static symbol s_6_47[4] = { 'i', 't', 0xC3, 0xA0 }; +static symbol s_6_48[5] = { 'i', 's', 't', 0xC3, 0xA0 }; +static symbol s_6_49[5] = { 'i', 's', 't', 0xC3, 0xA8 }; +static symbol s_6_50[5] = { 'i', 's', 't', 0xC3, 0xAC }; + +static struct among a_6[51] = +{ +/* 0 */ { 3, s_6_0, -1, 1, 0}, +/* 1 */ { 5, s_6_1, -1, 3, 0}, +/* 2 */ { 3, s_6_2, -1, 1, 0}, +/* 3 */ { 4, s_6_3, -1, 1, 0}, +/* 4 */ { 3, s_6_4, -1, 9, 0}, +/* 5 */ { 4, s_6_5, -1, 1, 0}, +/* 6 */ { 4, s_6_6, -1, 5, 0}, +/* 7 */ { 3, s_6_7, -1, 1, 0}, +/* 8 */ { 6, s_6_8, 7, 1, 0}, +/* 9 */ { 4, s_6_9, -1, 1, 0}, +/* 10 */ { 5, s_6_10, -1, 3, 0}, +/* 11 */ { 5, s_6_11, -1, 1, 0}, +/* 12 */ { 5, s_6_12, -1, 1, 0}, +/* 13 */ { 6, s_6_13, -1, 4, 0}, +/* 14 */ { 6, s_6_14, -1, 2, 0}, +/* 15 */ { 6, s_6_15, -1, 4, 0}, +/* 16 */ { 5, s_6_16, -1, 2, 0}, +/* 17 */ { 3, s_6_17, -1, 1, 0}, +/* 18 */ { 4, s_6_18, -1, 1, 0}, +/* 19 */ { 5, s_6_19, -1, 1, 0}, +/* 20 */ { 6, s_6_20, 19, 7, 0}, +/* 21 */ { 4, s_6_21, -1, 1, 0}, +/* 22 */ { 3, s_6_22, -1, 9, 0}, +/* 23 */ { 4, s_6_23, -1, 1, 0}, +/* 24 */ { 4, s_6_24, -1, 5, 0}, +/* 25 */ { 3, s_6_25, -1, 1, 0}, +/* 26 */ { 6, s_6_26, 25, 1, 0}, +/* 27 */ { 4, s_6_27, -1, 1, 0}, +/* 28 */ { 5, s_6_28, -1, 1, 0}, +/* 29 */ { 5, s_6_29, -1, 1, 0}, +/* 30 */ { 4, s_6_30, -1, 1, 0}, +/* 31 */ { 6, s_6_31, -1, 4, 0}, +/* 32 */ { 6, s_6_32, -1, 2, 0}, +/* 33 */ { 6, s_6_33, -1, 4, 0}, +/* 34 */ { 5, s_6_34, -1, 2, 0}, +/* 35 */ { 3, s_6_35, -1, 1, 0}, +/* 36 */ { 4, s_6_36, -1, 1, 0}, +/* 37 */ { 6, s_6_37, -1, 6, 0}, +/* 38 */ { 6, s_6_38, -1, 6, 0}, +/* 39 */ { 4, s_6_39, -1, 1, 0}, +/* 40 */ { 3, s_6_40, -1, 9, 0}, +/* 41 */ { 3, s_6_41, -1, 1, 0}, +/* 42 */ { 4, s_6_42, -1, 1, 0}, +/* 43 */ { 3, s_6_43, -1, 1, 0}, +/* 44 */ { 6, s_6_44, -1, 6, 0}, +/* 45 */ { 6, s_6_45, -1, 6, 0}, +/* 46 */ { 3, s_6_46, -1, 9, 0}, +/* 47 */ { 4, s_6_47, -1, 8, 0}, +/* 48 */ { 5, s_6_48, -1, 1, 0}, +/* 49 */ { 5, s_6_49, -1, 1, 0}, +/* 50 */ { 5, s_6_50, -1, 1, 0} +}; + +static symbol s_7_0[4] = { 'i', 's', 'c', 'a' }; +static symbol s_7_1[4] = { 'e', 'n', 'd', 'a' }; +static symbol s_7_2[3] = { 'a', 't', 'a' }; +static symbol s_7_3[3] = { 'i', 't', 'a' }; +static symbol s_7_4[3] = { 'u', 't', 'a' }; +static symbol s_7_5[3] = { 'a', 'v', 'a' }; +static symbol s_7_6[3] = { 'e', 'v', 'a' }; +static symbol s_7_7[3] = { 'i', 'v', 'a' }; +static symbol s_7_8[6] = { 'e', 'r', 'e', 'b', 'b', 'e' }; +static symbol s_7_9[6] = { 'i', 'r', 'e', 'b', 'b', 'e' }; +static symbol s_7_10[4] = { 'i', 's', 'c', 'e' }; +static symbol s_7_11[4] = { 'e', 'n', 'd', 'e' }; +static symbol s_7_12[3] = { 'a', 'r', 'e' }; +static symbol s_7_13[3] = { 'e', 'r', 'e' }; +static symbol s_7_14[3] = { 'i', 'r', 'e' }; +static symbol s_7_15[4] = { 'a', 's', 's', 'e' }; +static symbol s_7_16[3] = { 'a', 't', 'e' }; +static symbol s_7_17[5] = { 'a', 'v', 'a', 't', 'e' }; +static symbol s_7_18[5] = { 'e', 'v', 'a', 't', 'e' }; +static symbol s_7_19[5] = { 'i', 'v', 'a', 't', 'e' }; +static symbol s_7_20[3] = { 'e', 't', 'e' }; +static symbol s_7_21[5] = { 'e', 'r', 'e', 't', 'e' }; +static symbol s_7_22[5] = { 'i', 'r', 'e', 't', 'e' }; +static symbol s_7_23[3] = { 'i', 't', 'e' }; +static symbol s_7_24[6] = { 'e', 'r', 'e', 's', 't', 'e' }; +static symbol s_7_25[6] = { 'i', 'r', 'e', 's', 't', 'e' }; +static symbol s_7_26[3] = { 'u', 't', 'e' }; +static symbol s_7_27[4] = { 'e', 'r', 'a', 'i' }; +static symbol s_7_28[4] = { 'i', 'r', 'a', 'i' }; +static symbol s_7_29[4] = { 'i', 's', 'c', 'i' }; +static symbol s_7_30[4] = { 'e', 'n', 'd', 'i' }; +static symbol s_7_31[4] = { 'e', 'r', 'e', 'i' }; +static symbol s_7_32[4] = { 'i', 'r', 'e', 'i' }; +static symbol s_7_33[4] = { 'a', 's', 's', 'i' }; +static symbol s_7_34[3] = { 'a', 't', 'i' }; +static symbol s_7_35[3] = { 'i', 't', 'i' }; +static symbol s_7_36[6] = { 'e', 'r', 'e', 's', 't', 'i' }; +static symbol s_7_37[6] = { 'i', 'r', 'e', 's', 't', 'i' }; +static symbol s_7_38[3] = { 'u', 't', 'i' }; +static symbol s_7_39[3] = { 'a', 'v', 'i' }; +static symbol s_7_40[3] = { 'e', 'v', 'i' }; +static symbol s_7_41[3] = { 'i', 'v', 'i' }; +static symbol s_7_42[4] = { 'i', 's', 'c', 'o' }; +static symbol s_7_43[4] = { 'a', 'n', 'd', 'o' }; +static symbol s_7_44[4] = { 'e', 'n', 'd', 'o' }; +static symbol s_7_45[4] = { 'Y', 'a', 'm', 'o' }; +static symbol s_7_46[4] = { 'i', 'a', 'm', 'o' }; +static symbol s_7_47[5] = { 'a', 'v', 'a', 'm', 'o' }; +static symbol s_7_48[5] = { 'e', 'v', 'a', 'm', 'o' }; +static symbol s_7_49[5] = { 'i', 'v', 'a', 'm', 'o' }; +static symbol s_7_50[5] = { 'e', 'r', 'e', 'm', 'o' }; +static symbol s_7_51[5] = { 'i', 'r', 'e', 'm', 'o' }; +static symbol s_7_52[6] = { 'a', 's', 's', 'i', 'm', 'o' }; +static symbol s_7_53[4] = { 'a', 'm', 'm', 'o' }; +static symbol s_7_54[4] = { 'e', 'm', 'm', 'o' }; +static symbol s_7_55[6] = { 'e', 'r', 'e', 'm', 'm', 'o' }; +static symbol s_7_56[6] = { 'i', 'r', 'e', 'm', 'm', 'o' }; +static symbol s_7_57[4] = { 'i', 'm', 'm', 'o' }; +static symbol s_7_58[3] = { 'a', 'n', 'o' }; +static symbol s_7_59[6] = { 'i', 's', 'c', 'a', 'n', 'o' }; +static symbol s_7_60[5] = { 'a', 'v', 'a', 'n', 'o' }; +static symbol s_7_61[5] = { 'e', 'v', 'a', 'n', 'o' }; +static symbol s_7_62[5] = { 'i', 'v', 'a', 'n', 'o' }; +static symbol s_7_63[6] = { 'e', 'r', 'a', 'n', 'n', 'o' }; +static symbol s_7_64[6] = { 'i', 'r', 'a', 'n', 'n', 'o' }; +static symbol s_7_65[3] = { 'o', 'n', 'o' }; +static symbol s_7_66[6] = { 'i', 's', 'c', 'o', 'n', 'o' }; +static symbol s_7_67[5] = { 'a', 'r', 'o', 'n', 'o' }; +static symbol s_7_68[5] = { 'e', 'r', 'o', 'n', 'o' }; +static symbol s_7_69[5] = { 'i', 'r', 'o', 'n', 'o' }; +static symbol s_7_70[8] = { 'e', 'r', 'e', 'b', 'b', 'e', 'r', 'o' }; +static symbol s_7_71[8] = { 'i', 'r', 'e', 'b', 'b', 'e', 'r', 'o' }; +static symbol s_7_72[6] = { 'a', 's', 's', 'e', 'r', 'o' }; +static symbol s_7_73[6] = { 'e', 's', 's', 'e', 'r', 'o' }; +static symbol s_7_74[6] = { 'i', 's', 's', 'e', 'r', 'o' }; +static symbol s_7_75[3] = { 'a', 't', 'o' }; +static symbol s_7_76[3] = { 'i', 't', 'o' }; +static symbol s_7_77[3] = { 'u', 't', 'o' }; +static symbol s_7_78[3] = { 'a', 'v', 'o' }; +static symbol s_7_79[3] = { 'e', 'v', 'o' }; +static symbol s_7_80[3] = { 'i', 'v', 'o' }; +static symbol s_7_81[2] = { 'a', 'r' }; +static symbol s_7_82[2] = { 'i', 'r' }; +static symbol s_7_83[4] = { 'e', 'r', 0xC3, 0xA0 }; +static symbol s_7_84[4] = { 'i', 'r', 0xC3, 0xA0 }; +static symbol s_7_85[4] = { 'e', 'r', 0xC3, 0xB2 }; +static symbol s_7_86[4] = { 'i', 'r', 0xC3, 0xB2 }; + +static struct among a_7[87] = +{ +/* 0 */ { 4, s_7_0, -1, 1, 0}, +/* 1 */ { 4, s_7_1, -1, 1, 0}, +/* 2 */ { 3, s_7_2, -1, 1, 0}, +/* 3 */ { 3, s_7_3, -1, 1, 0}, +/* 4 */ { 3, s_7_4, -1, 1, 0}, +/* 5 */ { 3, s_7_5, -1, 1, 0}, +/* 6 */ { 3, s_7_6, -1, 1, 0}, +/* 7 */ { 3, s_7_7, -1, 1, 0}, +/* 8 */ { 6, s_7_8, -1, 1, 0}, +/* 9 */ { 6, s_7_9, -1, 1, 0}, +/* 10 */ { 4, s_7_10, -1, 1, 0}, +/* 11 */ { 4, s_7_11, -1, 1, 0}, +/* 12 */ { 3, s_7_12, -1, 1, 0}, +/* 13 */ { 3, s_7_13, -1, 1, 0}, +/* 14 */ { 3, s_7_14, -1, 1, 0}, +/* 15 */ { 4, s_7_15, -1, 1, 0}, +/* 16 */ { 3, s_7_16, -1, 1, 0}, +/* 17 */ { 5, s_7_17, 16, 1, 0}, +/* 18 */ { 5, s_7_18, 16, 1, 0}, +/* 19 */ { 5, s_7_19, 16, 1, 0}, +/* 20 */ { 3, s_7_20, -1, 1, 0}, +/* 21 */ { 5, s_7_21, 20, 1, 0}, +/* 22 */ { 5, s_7_22, 20, 1, 0}, +/* 23 */ { 3, s_7_23, -1, 1, 0}, +/* 24 */ { 6, s_7_24, -1, 1, 0}, +/* 25 */ { 6, s_7_25, -1, 1, 0}, +/* 26 */ { 3, s_7_26, -1, 1, 0}, +/* 27 */ { 4, s_7_27, -1, 1, 0}, +/* 28 */ { 4, s_7_28, -1, 1, 0}, +/* 29 */ { 4, s_7_29, -1, 1, 0}, +/* 30 */ { 4, s_7_30, -1, 1, 0}, +/* 31 */ { 4, s_7_31, -1, 1, 0}, +/* 32 */ { 4, s_7_32, -1, 1, 0}, +/* 33 */ { 4, s_7_33, -1, 1, 0}, +/* 34 */ { 3, s_7_34, -1, 1, 0}, +/* 35 */ { 3, s_7_35, -1, 1, 0}, +/* 36 */ { 6, s_7_36, -1, 1, 0}, +/* 37 */ { 6, s_7_37, -1, 1, 0}, +/* 38 */ { 3, s_7_38, -1, 1, 0}, +/* 39 */ { 3, s_7_39, -1, 1, 0}, +/* 40 */ { 3, s_7_40, -1, 1, 0}, +/* 41 */ { 3, s_7_41, -1, 1, 0}, +/* 42 */ { 4, s_7_42, -1, 1, 0}, +/* 43 */ { 4, s_7_43, -1, 1, 0}, +/* 44 */ { 4, s_7_44, -1, 1, 0}, +/* 45 */ { 4, s_7_45, -1, 1, 0}, +/* 46 */ { 4, s_7_46, -1, 1, 0}, +/* 47 */ { 5, s_7_47, -1, 1, 0}, +/* 48 */ { 5, s_7_48, -1, 1, 0}, +/* 49 */ { 5, s_7_49, -1, 1, 0}, +/* 50 */ { 5, s_7_50, -1, 1, 0}, +/* 51 */ { 5, s_7_51, -1, 1, 0}, +/* 52 */ { 6, s_7_52, -1, 1, 0}, +/* 53 */ { 4, s_7_53, -1, 1, 0}, +/* 54 */ { 4, s_7_54, -1, 1, 0}, +/* 55 */ { 6, s_7_55, 54, 1, 0}, +/* 56 */ { 6, s_7_56, 54, 1, 0}, +/* 57 */ { 4, s_7_57, -1, 1, 0}, +/* 58 */ { 3, s_7_58, -1, 1, 0}, +/* 59 */ { 6, s_7_59, 58, 1, 0}, +/* 60 */ { 5, s_7_60, 58, 1, 0}, +/* 61 */ { 5, s_7_61, 58, 1, 0}, +/* 62 */ { 5, s_7_62, 58, 1, 0}, +/* 63 */ { 6, s_7_63, -1, 1, 0}, +/* 64 */ { 6, s_7_64, -1, 1, 0}, +/* 65 */ { 3, s_7_65, -1, 1, 0}, +/* 66 */ { 6, s_7_66, 65, 1, 0}, +/* 67 */ { 5, s_7_67, 65, 1, 0}, +/* 68 */ { 5, s_7_68, 65, 1, 0}, +/* 69 */ { 5, s_7_69, 65, 1, 0}, +/* 70 */ { 8, s_7_70, -1, 1, 0}, +/* 71 */ { 8, s_7_71, -1, 1, 0}, +/* 72 */ { 6, s_7_72, -1, 1, 0}, +/* 73 */ { 6, s_7_73, -1, 1, 0}, +/* 74 */ { 6, s_7_74, -1, 1, 0}, +/* 75 */ { 3, s_7_75, -1, 1, 0}, +/* 76 */ { 3, s_7_76, -1, 1, 0}, +/* 77 */ { 3, s_7_77, -1, 1, 0}, +/* 78 */ { 3, s_7_78, -1, 1, 0}, +/* 79 */ { 3, s_7_79, -1, 1, 0}, +/* 80 */ { 3, s_7_80, -1, 1, 0}, +/* 81 */ { 2, s_7_81, -1, 1, 0}, +/* 82 */ { 2, s_7_82, -1, 1, 0}, +/* 83 */ { 4, s_7_83, -1, 1, 0}, +/* 84 */ { 4, s_7_84, -1, 1, 0}, +/* 85 */ { 4, s_7_85, -1, 1, 0}, +/* 86 */ { 4, s_7_86, -1, 1, 0} +}; + +static unsigned char g_v[] = { 17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 8, 2, 1 }; + +static unsigned char g_AEIO[] = { 17, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 8, 2 }; + +static unsigned char g_CG[] = { 17 }; + +static symbol s_0[] = { 0xC3, 0xA0 }; +static symbol s_1[] = { 0xC3, 0xA8 }; +static symbol s_2[] = { 0xC3, 0xAC }; +static symbol s_3[] = { 0xC3, 0xB2 }; +static symbol s_4[] = { 0xC3, 0xB9 }; +static symbol s_5[] = { 'q', 'U' }; +static symbol s_6[] = { 'u' }; +static symbol s_7[] = { 'U' }; +static symbol s_8[] = { 'i' }; +static symbol s_9[] = { 'I' }; +static symbol s_10[] = { 'i' }; +static symbol s_11[] = { 'u' }; +static symbol s_12[] = { 'e' }; +static symbol s_13[] = { 'i', 'c' }; +static symbol s_14[] = { 'l', 'o', 'g' }; +static symbol s_15[] = { 'u' }; +static symbol s_16[] = { 'e', 'n', 't', 'e' }; +static symbol s_17[] = { 'a', 't' }; +static symbol s_18[] = { 'a', 't' }; +static symbol s_19[] = { 'i', 'c' }; +static symbol s_20[] = { 'i' }; +static symbol s_21[] = { 'h' }; + +static int r_prelude(struct SN_env * z) { + int among_var; + { int c_test = z->c; /* test, line 35 */ + while(1) { /* repeat, line 35 */ + int c = z->c; + z->bra = z->c; /* [, line 36 */ + among_var = find_among(z, a_0, 7); /* substring, line 36 */ + if (!(among_var)) goto lab0; + z->ket = z->c; /* ], line 36 */ + switch(among_var) { + case 0: goto lab0; + case 1: + { int ret; + ret = slice_from_s(z, 2, s_0); /* <-, line 37 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 2, s_1); /* <-, line 38 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_from_s(z, 2, s_2); /* <-, line 39 */ + if (ret < 0) return ret; + } + break; + case 4: + { int ret; + ret = slice_from_s(z, 2, s_3); /* <-, line 40 */ + if (ret < 0) return ret; + } + break; + case 5: + { int ret; + ret = slice_from_s(z, 2, s_4); /* <-, line 41 */ + if (ret < 0) return ret; + } + break; + case 6: + { int ret; + ret = slice_from_s(z, 2, s_5); /* <-, line 42 */ + if (ret < 0) return ret; + } + break; + case 7: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab0; + z->c = c; /* next, line 43 */ + } + break; + } + continue; + lab0: + z->c = c; + break; + } + z->c = c_test; + } + while(1) { /* repeat, line 46 */ + int c = z->c; + while(1) { /* goto, line 46 */ + int c = z->c; + if (!(in_grouping_U(z, g_v, 97, 249))) goto lab2; + z->bra = z->c; /* [, line 47 */ + { int c = z->c; /* or, line 47 */ + if (!(eq_s(z, 1, s_6))) goto lab4; + z->ket = z->c; /* ], line 47 */ + if (!(in_grouping_U(z, g_v, 97, 249))) goto lab4; + { int ret; + ret = slice_from_s(z, 1, s_7); /* <-, line 47 */ + if (ret < 0) return ret; + } + goto lab3; + lab4: + z->c = c; + if (!(eq_s(z, 1, s_8))) goto lab2; + z->ket = z->c; /* ], line 48 */ + if (!(in_grouping_U(z, g_v, 97, 249))) goto lab2; + { int ret; + ret = slice_from_s(z, 1, s_9); /* <-, line 48 */ + if (ret < 0) return ret; + } + } + lab3: + z->c = c; + break; + lab2: + z->c = c; + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab1; + z->c = c; /* goto, line 46 */ + } + } + continue; + lab1: + z->c = c; + break; + } + return 1; +} + +static int r_mark_regions(struct SN_env * z) { + z->I[0] = z->l; + z->I[1] = z->l; + z->I[2] = z->l; + { int c = z->c; /* do, line 58 */ + { int c = z->c; /* or, line 60 */ + if (!(in_grouping_U(z, g_v, 97, 249))) goto lab2; + { int c = z->c; /* or, line 59 */ + if (!(out_grouping_U(z, g_v, 97, 249))) goto lab4; + while(1) { /* gopast, line 59 */ + if (!(in_grouping_U(z, g_v, 97, 249))) goto lab5; + break; + lab5: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab4; + z->c = c; /* gopast, line 59 */ + } + } + goto lab3; + lab4: + z->c = c; + if (!(in_grouping_U(z, g_v, 97, 249))) goto lab2; + while(1) { /* gopast, line 59 */ + if (!(out_grouping_U(z, g_v, 97, 249))) goto lab6; + break; + lab6: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab2; + z->c = c; /* gopast, line 59 */ + } + } + } + lab3: + goto lab1; + lab2: + z->c = c; + if (!(out_grouping_U(z, g_v, 97, 249))) goto lab0; + { int c = z->c; /* or, line 61 */ + if (!(out_grouping_U(z, g_v, 97, 249))) goto lab8; + while(1) { /* gopast, line 61 */ + if (!(in_grouping_U(z, g_v, 97, 249))) goto lab9; + break; + lab9: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab8; + z->c = c; /* gopast, line 61 */ + } + } + goto lab7; + lab8: + z->c = c; + if (!(in_grouping_U(z, g_v, 97, 249))) goto lab0; + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab0; + z->c = c; /* next, line 61 */ + } + } + lab7: + ; + } + lab1: + z->I[0] = z->c; /* setmark pV, line 62 */ + lab0: + z->c = c; + } + { int c = z->c; /* do, line 64 */ + while(1) { /* gopast, line 65 */ + if (!(in_grouping_U(z, g_v, 97, 249))) goto lab11; + break; + lab11: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab10; + z->c = c; /* gopast, line 65 */ + } + } + while(1) { /* gopast, line 65 */ + if (!(out_grouping_U(z, g_v, 97, 249))) goto lab12; + break; + lab12: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab10; + z->c = c; /* gopast, line 65 */ + } + } + z->I[1] = z->c; /* setmark p1, line 65 */ + while(1) { /* gopast, line 66 */ + if (!(in_grouping_U(z, g_v, 97, 249))) goto lab13; + break; + lab13: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab10; + z->c = c; /* gopast, line 66 */ + } + } + while(1) { /* gopast, line 66 */ + if (!(out_grouping_U(z, g_v, 97, 249))) goto lab14; + break; + lab14: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab10; + z->c = c; /* gopast, line 66 */ + } + } + z->I[2] = z->c; /* setmark p2, line 66 */ + lab10: + z->c = c; + } + return 1; +} + +static int r_postlude(struct SN_env * z) { + int among_var; + while(1) { /* repeat, line 70 */ + int c = z->c; + z->bra = z->c; /* [, line 72 */ + among_var = find_among(z, a_1, 3); /* substring, line 72 */ + if (!(among_var)) goto lab0; + z->ket = z->c; /* ], line 72 */ + switch(among_var) { + case 0: goto lab0; + case 1: + { int ret; + ret = slice_from_s(z, 1, s_10); /* <-, line 73 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 1, s_11); /* <-, line 74 */ + if (ret < 0) return ret; + } + break; + case 3: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab0; + z->c = c; /* next, line 75 */ + } + break; + } + continue; + lab0: + z->c = c; + break; + } + return 1; +} + +static int r_RV(struct SN_env * z) { + if (!(z->I[0] <= z->c)) return 0; + return 1; +} + +static int r_R1(struct SN_env * z) { + if (!(z->I[1] <= z->c)) return 0; + return 1; +} + +static int r_R2(struct SN_env * z) { + if (!(z->I[2] <= z->c)) return 0; + return 1; +} + +static int r_attached_pronoun(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 87 */ + if (!(find_among_b(z, a_2, 37))) return 0; /* substring, line 87 */ + z->bra = z->c; /* ], line 87 */ + among_var = find_among_b(z, a_3, 5); /* among, line 97 */ + if (!(among_var)) return 0; + { int ret = r_RV(z); + if (ret == 0) return 0; /* call RV, line 97 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 98 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 1, s_12); /* <-, line 99 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_standard_suffix(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 104 */ + among_var = find_among_b(z, a_6, 51); /* substring, line 104 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 104 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 111 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 111 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 113 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 113 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 114 */ + z->ket = z->c; /* [, line 114 */ + if (!(eq_s_b(z, 2, s_13))) { z->c = z->l - m; goto lab0; } + z->bra = z->c; /* ], line 114 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab0; } /* call R2, line 114 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 114 */ + if (ret < 0) return ret; + } + lab0: + ; + } + break; + case 3: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 117 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 3, s_14); /* <-, line 117 */ + if (ret < 0) return ret; + } + break; + case 4: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 119 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 1, s_15); /* <-, line 119 */ + if (ret < 0) return ret; + } + break; + case 5: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 121 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 4, s_16); /* <-, line 121 */ + if (ret < 0) return ret; + } + break; + case 6: + { int ret = r_RV(z); + if (ret == 0) return 0; /* call RV, line 123 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 123 */ + if (ret < 0) return ret; + } + break; + case 7: + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 125 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 125 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 126 */ + z->ket = z->c; /* [, line 127 */ + among_var = find_among_b(z, a_4, 4); /* substring, line 127 */ + if (!(among_var)) { z->c = z->l - m; goto lab1; } + z->bra = z->c; /* ], line 127 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab1; } /* call R2, line 127 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 127 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: { z->c = z->l - m; goto lab1; } + case 1: + z->ket = z->c; /* [, line 128 */ + if (!(eq_s_b(z, 2, s_17))) { z->c = z->l - m; goto lab1; } + z->bra = z->c; /* ], line 128 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab1; } /* call R2, line 128 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 128 */ + if (ret < 0) return ret; + } + break; + } + lab1: + ; + } + break; + case 8: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 134 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 134 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 135 */ + z->ket = z->c; /* [, line 136 */ + among_var = find_among_b(z, a_5, 3); /* substring, line 136 */ + if (!(among_var)) { z->c = z->l - m; goto lab2; } + z->bra = z->c; /* ], line 136 */ + switch(among_var) { + case 0: { z->c = z->l - m; goto lab2; } + case 1: + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab2; } /* call R2, line 137 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 137 */ + if (ret < 0) return ret; + } + break; + } + lab2: + ; + } + break; + case 9: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 142 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 142 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 143 */ + z->ket = z->c; /* [, line 143 */ + if (!(eq_s_b(z, 2, s_18))) { z->c = z->l - m; goto lab3; } + z->bra = z->c; /* ], line 143 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab3; } /* call R2, line 143 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 143 */ + if (ret < 0) return ret; + } + z->ket = z->c; /* [, line 143 */ + if (!(eq_s_b(z, 2, s_19))) { z->c = z->l - m; goto lab3; } + z->bra = z->c; /* ], line 143 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab3; } /* call R2, line 143 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 143 */ + if (ret < 0) return ret; + } + lab3: + ; + } + break; + } + return 1; +} + +static int r_verb_suffix(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 148 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 148 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 149 */ + among_var = find_among_b(z, a_7, 87); /* substring, line 149 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 149 */ + switch(among_var) { + case 0: { z->lb = m3; return 0; } + case 1: + { int ret; + ret = slice_del(z); /* delete, line 163 */ + if (ret < 0) return ret; + } + break; + } + z->lb = m3; + } + return 1; +} + +static int r_vowel_suffix(struct SN_env * z) { + { int m = z->l - z->c; (void) m; /* try, line 171 */ + z->ket = z->c; /* [, line 172 */ + if (!(in_grouping_b_U(z, g_AEIO, 97, 242))) { z->c = z->l - m; goto lab0; } + z->bra = z->c; /* ], line 172 */ + { int ret = r_RV(z); + if (ret == 0) { z->c = z->l - m; goto lab0; } /* call RV, line 172 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 172 */ + if (ret < 0) return ret; + } + z->ket = z->c; /* [, line 173 */ + if (!(eq_s_b(z, 1, s_20))) { z->c = z->l - m; goto lab0; } + z->bra = z->c; /* ], line 173 */ + { int ret = r_RV(z); + if (ret == 0) { z->c = z->l - m; goto lab0; } /* call RV, line 173 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 173 */ + if (ret < 0) return ret; + } + lab0: + ; + } + { int m = z->l - z->c; (void) m; /* try, line 175 */ + z->ket = z->c; /* [, line 176 */ + if (!(eq_s_b(z, 1, s_21))) { z->c = z->l - m; goto lab1; } + z->bra = z->c; /* ], line 176 */ + if (!(in_grouping_b_U(z, g_CG, 99, 103))) { z->c = z->l - m; goto lab1; } + { int ret = r_RV(z); + if (ret == 0) { z->c = z->l - m; goto lab1; } /* call RV, line 176 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 176 */ + if (ret < 0) return ret; + } + lab1: + ; + } + return 1; +} + +extern int italian_UTF_8_stem(struct SN_env * z) { + { int c = z->c; /* do, line 182 */ + { int ret = r_prelude(z); + if (ret == 0) goto lab0; /* call prelude, line 182 */ + if (ret < 0) return ret; + } + lab0: + z->c = c; + } + { int c = z->c; /* do, line 183 */ + { int ret = r_mark_regions(z); + if (ret == 0) goto lab1; /* call mark_regions, line 183 */ + if (ret < 0) return ret; + } + lab1: + z->c = c; + } + z->lb = z->c; z->c = z->l; /* backwards, line 184 */ + + { int m = z->l - z->c; (void) m; /* do, line 185 */ + { int ret = r_attached_pronoun(z); + if (ret == 0) goto lab2; /* call attached_pronoun, line 185 */ + if (ret < 0) return ret; + } + lab2: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 186 */ + { int m = z->l - z->c; (void) m; /* or, line 186 */ + { int ret = r_standard_suffix(z); + if (ret == 0) goto lab5; /* call standard_suffix, line 186 */ + if (ret < 0) return ret; + } + goto lab4; + lab5: + z->c = z->l - m; + { int ret = r_verb_suffix(z); + if (ret == 0) goto lab3; /* call verb_suffix, line 186 */ + if (ret < 0) return ret; + } + } + lab4: + lab3: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 187 */ + { int ret = r_vowel_suffix(z); + if (ret == 0) goto lab6; /* call vowel_suffix, line 187 */ + if (ret < 0) return ret; + } + lab6: + z->c = z->l - m; + } + z->c = z->lb; + { int c = z->c; /* do, line 189 */ + { int ret = r_postlude(z); + if (ret == 0) goto lab7; /* call postlude, line 189 */ + if (ret < 0) return ret; + } + lab7: + z->c = c; + } + return 1; +} + +extern struct SN_env * italian_UTF_8_create_env(void) { return SN_create_env(0, 3, 0); } + +extern void italian_UTF_8_close_env(struct SN_env * z) { SN_close_env(z); } + diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_italian.h b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_italian.h new file mode 100644 index 0000000..3bee080 --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_italian.h @@ -0,0 +1,16 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern struct SN_env * italian_UTF_8_create_env(void); +extern void italian_UTF_8_close_env(struct SN_env * z); + +extern int italian_UTF_8_stem(struct SN_env * z); + +#ifdef __cplusplus +} +#endif + diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_norwegian.c b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_norwegian.c new file mode 100644 index 0000000..6a5ea99 --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_norwegian.c @@ -0,0 +1,302 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#include "../runtime/header.h" + +extern int norwegian_UTF_8_stem(struct SN_env * z); +static int r_other_suffix(struct SN_env * z); +static int r_consonant_pair(struct SN_env * z); +static int r_main_suffix(struct SN_env * z); +static int r_mark_regions(struct SN_env * z); + +extern struct SN_env * norwegian_UTF_8_create_env(void); +extern void norwegian_UTF_8_close_env(struct SN_env * z); + +static symbol s_0_0[1] = { 'a' }; +static symbol s_0_1[1] = { 'e' }; +static symbol s_0_2[3] = { 'e', 'd', 'e' }; +static symbol s_0_3[4] = { 'a', 'n', 'd', 'e' }; +static symbol s_0_4[4] = { 'e', 'n', 'd', 'e' }; +static symbol s_0_5[3] = { 'a', 'n', 'e' }; +static symbol s_0_6[3] = { 'e', 'n', 'e' }; +static symbol s_0_7[6] = { 'h', 'e', 't', 'e', 'n', 'e' }; +static symbol s_0_8[4] = { 'e', 'r', 't', 'e' }; +static symbol s_0_9[2] = { 'e', 'n' }; +static symbol s_0_10[5] = { 'h', 'e', 't', 'e', 'n' }; +static symbol s_0_11[2] = { 'a', 'r' }; +static symbol s_0_12[2] = { 'e', 'r' }; +static symbol s_0_13[5] = { 'h', 'e', 't', 'e', 'r' }; +static symbol s_0_14[1] = { 's' }; +static symbol s_0_15[2] = { 'a', 's' }; +static symbol s_0_16[2] = { 'e', 's' }; +static symbol s_0_17[4] = { 'e', 'd', 'e', 's' }; +static symbol s_0_18[5] = { 'e', 'n', 'd', 'e', 's' }; +static symbol s_0_19[4] = { 'e', 'n', 'e', 's' }; +static symbol s_0_20[7] = { 'h', 'e', 't', 'e', 'n', 'e', 's' }; +static symbol s_0_21[3] = { 'e', 'n', 's' }; +static symbol s_0_22[6] = { 'h', 'e', 't', 'e', 'n', 's' }; +static symbol s_0_23[3] = { 'e', 'r', 's' }; +static symbol s_0_24[3] = { 'e', 't', 's' }; +static symbol s_0_25[2] = { 'e', 't' }; +static symbol s_0_26[3] = { 'h', 'e', 't' }; +static symbol s_0_27[3] = { 'e', 'r', 't' }; +static symbol s_0_28[3] = { 'a', 's', 't' }; + +static struct among a_0[29] = +{ +/* 0 */ { 1, s_0_0, -1, 1, 0}, +/* 1 */ { 1, s_0_1, -1, 1, 0}, +/* 2 */ { 3, s_0_2, 1, 1, 0}, +/* 3 */ { 4, s_0_3, 1, 1, 0}, +/* 4 */ { 4, s_0_4, 1, 1, 0}, +/* 5 */ { 3, s_0_5, 1, 1, 0}, +/* 6 */ { 3, s_0_6, 1, 1, 0}, +/* 7 */ { 6, s_0_7, 6, 1, 0}, +/* 8 */ { 4, s_0_8, 1, 3, 0}, +/* 9 */ { 2, s_0_9, -1, 1, 0}, +/* 10 */ { 5, s_0_10, 9, 1, 0}, +/* 11 */ { 2, s_0_11, -1, 1, 0}, +/* 12 */ { 2, s_0_12, -1, 1, 0}, +/* 13 */ { 5, s_0_13, 12, 1, 0}, +/* 14 */ { 1, s_0_14, -1, 2, 0}, +/* 15 */ { 2, s_0_15, 14, 1, 0}, +/* 16 */ { 2, s_0_16, 14, 1, 0}, +/* 17 */ { 4, s_0_17, 16, 1, 0}, +/* 18 */ { 5, s_0_18, 16, 1, 0}, +/* 19 */ { 4, s_0_19, 16, 1, 0}, +/* 20 */ { 7, s_0_20, 19, 1, 0}, +/* 21 */ { 3, s_0_21, 14, 1, 0}, +/* 22 */ { 6, s_0_22, 21, 1, 0}, +/* 23 */ { 3, s_0_23, 14, 1, 0}, +/* 24 */ { 3, s_0_24, 14, 1, 0}, +/* 25 */ { 2, s_0_25, -1, 1, 0}, +/* 26 */ { 3, s_0_26, 25, 1, 0}, +/* 27 */ { 3, s_0_27, -1, 3, 0}, +/* 28 */ { 3, s_0_28, -1, 1, 0} +}; + +static symbol s_1_0[2] = { 'd', 't' }; +static symbol s_1_1[2] = { 'v', 't' }; + +static struct among a_1[2] = +{ +/* 0 */ { 2, s_1_0, -1, -1, 0}, +/* 1 */ { 2, s_1_1, -1, -1, 0} +}; + +static symbol s_2_0[3] = { 'l', 'e', 'g' }; +static symbol s_2_1[4] = { 'e', 'l', 'e', 'g' }; +static symbol s_2_2[2] = { 'i', 'g' }; +static symbol s_2_3[3] = { 'e', 'i', 'g' }; +static symbol s_2_4[3] = { 'l', 'i', 'g' }; +static symbol s_2_5[4] = { 'e', 'l', 'i', 'g' }; +static symbol s_2_6[3] = { 'e', 'l', 's' }; +static symbol s_2_7[3] = { 'l', 'o', 'v' }; +static symbol s_2_8[4] = { 'e', 'l', 'o', 'v' }; +static symbol s_2_9[4] = { 's', 'l', 'o', 'v' }; +static symbol s_2_10[7] = { 'h', 'e', 't', 's', 'l', 'o', 'v' }; + +static struct among a_2[11] = +{ +/* 0 */ { 3, s_2_0, -1, 1, 0}, +/* 1 */ { 4, s_2_1, 0, 1, 0}, +/* 2 */ { 2, s_2_2, -1, 1, 0}, +/* 3 */ { 3, s_2_3, 2, 1, 0}, +/* 4 */ { 3, s_2_4, 2, 1, 0}, +/* 5 */ { 4, s_2_5, 4, 1, 0}, +/* 6 */ { 3, s_2_6, -1, 1, 0}, +/* 7 */ { 3, s_2_7, -1, 1, 0}, +/* 8 */ { 4, s_2_8, 7, 1, 0}, +/* 9 */ { 4, s_2_9, 7, 1, 0}, +/* 10 */ { 7, s_2_10, 9, 1, 0} +}; + +static unsigned char g_v[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 128 }; + +static unsigned char g_s_ending[] = { 119, 125, 149, 1 }; + +static symbol s_0[] = { 'k' }; +static symbol s_1[] = { 'e', 'r' }; + +static int r_mark_regions(struct SN_env * z) { + z->I[0] = z->l; + { int c_test = z->c; /* test, line 30 */ + { int c = skip_utf8(z->p, z->c, 0, z->l, + 3); + if (c < 0) return 0; + z->c = c; /* hop, line 30 */ + } + z->I[1] = z->c; /* setmark x, line 30 */ + z->c = c_test; + } + while(1) { /* goto, line 31 */ + int c = z->c; + if (!(in_grouping_U(z, g_v, 97, 248))) goto lab0; + z->c = c; + break; + lab0: + z->c = c; + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) return 0; + z->c = c; /* goto, line 31 */ + } + } + while(1) { /* gopast, line 31 */ + if (!(out_grouping_U(z, g_v, 97, 248))) goto lab1; + break; + lab1: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) return 0; + z->c = c; /* gopast, line 31 */ + } + } + z->I[0] = z->c; /* setmark p1, line 31 */ + /* try, line 32 */ + if (!(z->I[0] < z->I[1])) goto lab2; + z->I[0] = z->I[1]; +lab2: + return 1; +} + +static int r_main_suffix(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 38 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 38 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 38 */ + among_var = find_among_b(z, a_0, 29); /* substring, line 38 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 38 */ + z->lb = m3; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 44 */ + if (ret < 0) return ret; + } + break; + case 2: + { int m = z->l - z->c; (void) m; /* or, line 46 */ + if (!(in_grouping_b_U(z, g_s_ending, 98, 122))) goto lab1; + goto lab0; + lab1: + z->c = z->l - m; + if (!(eq_s_b(z, 1, s_0))) return 0; + if (!(out_grouping_b_U(z, g_v, 97, 248))) return 0; + } + lab0: + { int ret; + ret = slice_del(z); /* delete, line 46 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_from_s(z, 2, s_1); /* <-, line 48 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_consonant_pair(struct SN_env * z) { + { int m_test = z->l - z->c; /* test, line 53 */ + { int m3; /* setlimit, line 54 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 54 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 54 */ + if (!(find_among_b(z, a_1, 2))) { z->lb = m3; return 0; } /* substring, line 54 */ + z->bra = z->c; /* ], line 54 */ + z->lb = m3; + } + z->c = z->l - m_test; + } + { int c = skip_utf8(z->p, z->c, z->lb, 0, -1); + if (c < 0) return 0; + z->c = c; /* next, line 59 */ + } + z->bra = z->c; /* ], line 59 */ + { int ret; + ret = slice_del(z); /* delete, line 59 */ + if (ret < 0) return ret; + } + return 1; +} + +static int r_other_suffix(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 63 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 63 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 63 */ + among_var = find_among_b(z, a_2, 11); /* substring, line 63 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 63 */ + z->lb = m3; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 67 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +extern int norwegian_UTF_8_stem(struct SN_env * z) { + { int c = z->c; /* do, line 74 */ + { int ret = r_mark_regions(z); + if (ret == 0) goto lab0; /* call mark_regions, line 74 */ + if (ret < 0) return ret; + } + lab0: + z->c = c; + } + z->lb = z->c; z->c = z->l; /* backwards, line 75 */ + + { int m = z->l - z->c; (void) m; /* do, line 76 */ + { int ret = r_main_suffix(z); + if (ret == 0) goto lab1; /* call main_suffix, line 76 */ + if (ret < 0) return ret; + } + lab1: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 77 */ + { int ret = r_consonant_pair(z); + if (ret == 0) goto lab2; /* call consonant_pair, line 77 */ + if (ret < 0) return ret; + } + lab2: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 78 */ + { int ret = r_other_suffix(z); + if (ret == 0) goto lab3; /* call other_suffix, line 78 */ + if (ret < 0) return ret; + } + lab3: + z->c = z->l - m; + } + z->c = z->lb; + return 1; +} + +extern struct SN_env * norwegian_UTF_8_create_env(void) { return SN_create_env(0, 2, 0); } + +extern void norwegian_UTF_8_close_env(struct SN_env * z) { SN_close_env(z); } + diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_norwegian.h b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_norwegian.h new file mode 100644 index 0000000..c75444b --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_norwegian.h @@ -0,0 +1,16 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern struct SN_env * norwegian_UTF_8_create_env(void); +extern void norwegian_UTF_8_close_env(struct SN_env * z); + +extern int norwegian_UTF_8_stem(struct SN_env * z); + +#ifdef __cplusplus +} +#endif + diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_porter.c b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_porter.c new file mode 100644 index 0000000..1d22e71 --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_porter.c @@ -0,0 +1,794 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#include "../runtime/header.h" + +extern int porter_UTF_8_stem(struct SN_env * z); +static int r_Step_5b(struct SN_env * z); +static int r_Step_5a(struct SN_env * z); +static int r_Step_4(struct SN_env * z); +static int r_Step_3(struct SN_env * z); +static int r_Step_2(struct SN_env * z); +static int r_Step_1c(struct SN_env * z); +static int r_Step_1b(struct SN_env * z); +static int r_Step_1a(struct SN_env * z); +static int r_R2(struct SN_env * z); +static int r_R1(struct SN_env * z); +static int r_shortv(struct SN_env * z); + +extern struct SN_env * porter_UTF_8_create_env(void); +extern void porter_UTF_8_close_env(struct SN_env * z); + +static symbol s_0_0[1] = { 's' }; +static symbol s_0_1[3] = { 'i', 'e', 's' }; +static symbol s_0_2[4] = { 's', 's', 'e', 's' }; +static symbol s_0_3[2] = { 's', 's' }; + +static struct among a_0[4] = +{ +/* 0 */ { 1, s_0_0, -1, 3, 0}, +/* 1 */ { 3, s_0_1, 0, 2, 0}, +/* 2 */ { 4, s_0_2, 0, 1, 0}, +/* 3 */ { 2, s_0_3, 0, -1, 0} +}; + +static symbol s_1_1[2] = { 'b', 'b' }; +static symbol s_1_2[2] = { 'd', 'd' }; +static symbol s_1_3[2] = { 'f', 'f' }; +static symbol s_1_4[2] = { 'g', 'g' }; +static symbol s_1_5[2] = { 'b', 'l' }; +static symbol s_1_6[2] = { 'm', 'm' }; +static symbol s_1_7[2] = { 'n', 'n' }; +static symbol s_1_8[2] = { 'p', 'p' }; +static symbol s_1_9[2] = { 'r', 'r' }; +static symbol s_1_10[2] = { 'a', 't' }; +static symbol s_1_11[2] = { 't', 't' }; +static symbol s_1_12[2] = { 'i', 'z' }; + +static struct among a_1[13] = +{ +/* 0 */ { 0, 0, -1, 3, 0}, +/* 1 */ { 2, s_1_1, 0, 2, 0}, +/* 2 */ { 2, s_1_2, 0, 2, 0}, +/* 3 */ { 2, s_1_3, 0, 2, 0}, +/* 4 */ { 2, s_1_4, 0, 2, 0}, +/* 5 */ { 2, s_1_5, 0, 1, 0}, +/* 6 */ { 2, s_1_6, 0, 2, 0}, +/* 7 */ { 2, s_1_7, 0, 2, 0}, +/* 8 */ { 2, s_1_8, 0, 2, 0}, +/* 9 */ { 2, s_1_9, 0, 2, 0}, +/* 10 */ { 2, s_1_10, 0, 1, 0}, +/* 11 */ { 2, s_1_11, 0, 2, 0}, +/* 12 */ { 2, s_1_12, 0, 1, 0} +}; + +static symbol s_2_0[2] = { 'e', 'd' }; +static symbol s_2_1[3] = { 'e', 'e', 'd' }; +static symbol s_2_2[3] = { 'i', 'n', 'g' }; + +static struct among a_2[3] = +{ +/* 0 */ { 2, s_2_0, -1, 2, 0}, +/* 1 */ { 3, s_2_1, 0, 1, 0}, +/* 2 */ { 3, s_2_2, -1, 2, 0} +}; + +static symbol s_3_0[4] = { 'a', 'n', 'c', 'i' }; +static symbol s_3_1[4] = { 'e', 'n', 'c', 'i' }; +static symbol s_3_2[4] = { 'a', 'b', 'l', 'i' }; +static symbol s_3_3[3] = { 'e', 'l', 'i' }; +static symbol s_3_4[4] = { 'a', 'l', 'l', 'i' }; +static symbol s_3_5[5] = { 'o', 'u', 's', 'l', 'i' }; +static symbol s_3_6[5] = { 'e', 'n', 't', 'l', 'i' }; +static symbol s_3_7[5] = { 'a', 'l', 'i', 't', 'i' }; +static symbol s_3_8[6] = { 'b', 'i', 'l', 'i', 't', 'i' }; +static symbol s_3_9[5] = { 'i', 'v', 'i', 't', 'i' }; +static symbol s_3_10[6] = { 't', 'i', 'o', 'n', 'a', 'l' }; +static symbol s_3_11[7] = { 'a', 't', 'i', 'o', 'n', 'a', 'l' }; +static symbol s_3_12[5] = { 'a', 'l', 'i', 's', 'm' }; +static symbol s_3_13[5] = { 'a', 't', 'i', 'o', 'n' }; +static symbol s_3_14[7] = { 'i', 'z', 'a', 't', 'i', 'o', 'n' }; +static symbol s_3_15[4] = { 'i', 'z', 'e', 'r' }; +static symbol s_3_16[4] = { 'a', 't', 'o', 'r' }; +static symbol s_3_17[7] = { 'i', 'v', 'e', 'n', 'e', 's', 's' }; +static symbol s_3_18[7] = { 'f', 'u', 'l', 'n', 'e', 's', 's' }; +static symbol s_3_19[7] = { 'o', 'u', 's', 'n', 'e', 's', 's' }; + +static struct among a_3[20] = +{ +/* 0 */ { 4, s_3_0, -1, 3, 0}, +/* 1 */ { 4, s_3_1, -1, 2, 0}, +/* 2 */ { 4, s_3_2, -1, 4, 0}, +/* 3 */ { 3, s_3_3, -1, 6, 0}, +/* 4 */ { 4, s_3_4, -1, 9, 0}, +/* 5 */ { 5, s_3_5, -1, 12, 0}, +/* 6 */ { 5, s_3_6, -1, 5, 0}, +/* 7 */ { 5, s_3_7, -1, 10, 0}, +/* 8 */ { 6, s_3_8, -1, 14, 0}, +/* 9 */ { 5, s_3_9, -1, 13, 0}, +/* 10 */ { 6, s_3_10, -1, 1, 0}, +/* 11 */ { 7, s_3_11, 10, 8, 0}, +/* 12 */ { 5, s_3_12, -1, 10, 0}, +/* 13 */ { 5, s_3_13, -1, 8, 0}, +/* 14 */ { 7, s_3_14, 13, 7, 0}, +/* 15 */ { 4, s_3_15, -1, 7, 0}, +/* 16 */ { 4, s_3_16, -1, 8, 0}, +/* 17 */ { 7, s_3_17, -1, 13, 0}, +/* 18 */ { 7, s_3_18, -1, 11, 0}, +/* 19 */ { 7, s_3_19, -1, 12, 0} +}; + +static symbol s_4_0[5] = { 'i', 'c', 'a', 't', 'e' }; +static symbol s_4_1[5] = { 'a', 't', 'i', 'v', 'e' }; +static symbol s_4_2[5] = { 'a', 'l', 'i', 'z', 'e' }; +static symbol s_4_3[5] = { 'i', 'c', 'i', 't', 'i' }; +static symbol s_4_4[4] = { 'i', 'c', 'a', 'l' }; +static symbol s_4_5[3] = { 'f', 'u', 'l' }; +static symbol s_4_6[4] = { 'n', 'e', 's', 's' }; + +static struct among a_4[7] = +{ +/* 0 */ { 5, s_4_0, -1, 2, 0}, +/* 1 */ { 5, s_4_1, -1, 3, 0}, +/* 2 */ { 5, s_4_2, -1, 1, 0}, +/* 3 */ { 5, s_4_3, -1, 2, 0}, +/* 4 */ { 4, s_4_4, -1, 2, 0}, +/* 5 */ { 3, s_4_5, -1, 3, 0}, +/* 6 */ { 4, s_4_6, -1, 3, 0} +}; + +static symbol s_5_0[2] = { 'i', 'c' }; +static symbol s_5_1[4] = { 'a', 'n', 'c', 'e' }; +static symbol s_5_2[4] = { 'e', 'n', 'c', 'e' }; +static symbol s_5_3[4] = { 'a', 'b', 'l', 'e' }; +static symbol s_5_4[4] = { 'i', 'b', 'l', 'e' }; +static symbol s_5_5[3] = { 'a', 't', 'e' }; +static symbol s_5_6[3] = { 'i', 'v', 'e' }; +static symbol s_5_7[3] = { 'i', 'z', 'e' }; +static symbol s_5_8[3] = { 'i', 't', 'i' }; +static symbol s_5_9[2] = { 'a', 'l' }; +static symbol s_5_10[3] = { 'i', 's', 'm' }; +static symbol s_5_11[3] = { 'i', 'o', 'n' }; +static symbol s_5_12[2] = { 'e', 'r' }; +static symbol s_5_13[3] = { 'o', 'u', 's' }; +static symbol s_5_14[3] = { 'a', 'n', 't' }; +static symbol s_5_15[3] = { 'e', 'n', 't' }; +static symbol s_5_16[4] = { 'm', 'e', 'n', 't' }; +static symbol s_5_17[5] = { 'e', 'm', 'e', 'n', 't' }; +static symbol s_5_18[2] = { 'o', 'u' }; + +static struct among a_5[19] = +{ +/* 0 */ { 2, s_5_0, -1, 1, 0}, +/* 1 */ { 4, s_5_1, -1, 1, 0}, +/* 2 */ { 4, s_5_2, -1, 1, 0}, +/* 3 */ { 4, s_5_3, -1, 1, 0}, +/* 4 */ { 4, s_5_4, -1, 1, 0}, +/* 5 */ { 3, s_5_5, -1, 1, 0}, +/* 6 */ { 3, s_5_6, -1, 1, 0}, +/* 7 */ { 3, s_5_7, -1, 1, 0}, +/* 8 */ { 3, s_5_8, -1, 1, 0}, +/* 9 */ { 2, s_5_9, -1, 1, 0}, +/* 10 */ { 3, s_5_10, -1, 1, 0}, +/* 11 */ { 3, s_5_11, -1, 2, 0}, +/* 12 */ { 2, s_5_12, -1, 1, 0}, +/* 13 */ { 3, s_5_13, -1, 1, 0}, +/* 14 */ { 3, s_5_14, -1, 1, 0}, +/* 15 */ { 3, s_5_15, -1, 1, 0}, +/* 16 */ { 4, s_5_16, 15, 1, 0}, +/* 17 */ { 5, s_5_17, 16, 1, 0}, +/* 18 */ { 2, s_5_18, -1, 1, 0} +}; + +static unsigned char g_v[] = { 17, 65, 16, 1 }; + +static unsigned char g_v_WXY[] = { 1, 17, 65, 208, 1 }; + +static symbol s_0[] = { 's', 's' }; +static symbol s_1[] = { 'i' }; +static symbol s_2[] = { 'e', 'e' }; +static symbol s_3[] = { 'e' }; +static symbol s_4[] = { 'e' }; +static symbol s_5[] = { 'y' }; +static symbol s_6[] = { 'Y' }; +static symbol s_7[] = { 'i' }; +static symbol s_8[] = { 't', 'i', 'o', 'n' }; +static symbol s_9[] = { 'e', 'n', 'c', 'e' }; +static symbol s_10[] = { 'a', 'n', 'c', 'e' }; +static symbol s_11[] = { 'a', 'b', 'l', 'e' }; +static symbol s_12[] = { 'e', 'n', 't' }; +static symbol s_13[] = { 'e' }; +static symbol s_14[] = { 'i', 'z', 'e' }; +static symbol s_15[] = { 'a', 't', 'e' }; +static symbol s_16[] = { 'a', 'l' }; +static symbol s_17[] = { 'a', 'l' }; +static symbol s_18[] = { 'f', 'u', 'l' }; +static symbol s_19[] = { 'o', 'u', 's' }; +static symbol s_20[] = { 'i', 'v', 'e' }; +static symbol s_21[] = { 'b', 'l', 'e' }; +static symbol s_22[] = { 'a', 'l' }; +static symbol s_23[] = { 'i', 'c' }; +static symbol s_24[] = { 's' }; +static symbol s_25[] = { 't' }; +static symbol s_26[] = { 'e' }; +static symbol s_27[] = { 'l' }; +static symbol s_28[] = { 'l' }; +static symbol s_29[] = { 'y' }; +static symbol s_30[] = { 'Y' }; +static symbol s_31[] = { 'y' }; +static symbol s_32[] = { 'Y' }; +static symbol s_33[] = { 'Y' }; +static symbol s_34[] = { 'y' }; + +static int r_shortv(struct SN_env * z) { + if (!(out_grouping_b_U(z, g_v_WXY, 89, 121))) return 0; + if (!(in_grouping_b_U(z, g_v, 97, 121))) return 0; + if (!(out_grouping_b_U(z, g_v, 97, 121))) return 0; + return 1; +} + +static int r_R1(struct SN_env * z) { + if (!(z->I[0] <= z->c)) return 0; + return 1; +} + +static int r_R2(struct SN_env * z) { + if (!(z->I[1] <= z->c)) return 0; + return 1; +} + +static int r_Step_1a(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 25 */ + among_var = find_among_b(z, a_0, 4); /* substring, line 25 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 25 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_from_s(z, 2, s_0); /* <-, line 26 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 1, s_1); /* <-, line 27 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_del(z); /* delete, line 29 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_Step_1b(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 34 */ + among_var = find_among_b(z, a_2, 3); /* substring, line 34 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 34 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 35 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 2, s_2); /* <-, line 35 */ + if (ret < 0) return ret; + } + break; + case 2: + { int m_test = z->l - z->c; /* test, line 38 */ + while(1) { /* gopast, line 38 */ + if (!(in_grouping_b_U(z, g_v, 97, 121))) goto lab0; + break; + lab0: + { int c = skip_utf8(z->p, z->c, z->lb, 0, -1); + if (c < 0) return 0; + z->c = c; /* gopast, line 38 */ + } + } + z->c = z->l - m_test; + } + { int ret; + ret = slice_del(z); /* delete, line 38 */ + if (ret < 0) return ret; + } + { int m_test = z->l - z->c; /* test, line 39 */ + among_var = find_among_b(z, a_1, 13); /* substring, line 39 */ + if (!(among_var)) return 0; + z->c = z->l - m_test; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + { int c = z->c; + ret = insert_s(z, z->c, z->c, 1, s_3); /* <+, line 41 */ + z->c = c; + } + if (ret < 0) return ret; + } + break; + case 2: + z->ket = z->c; /* [, line 44 */ + { int c = skip_utf8(z->p, z->c, z->lb, 0, -1); + if (c < 0) return 0; + z->c = c; /* next, line 44 */ + } + z->bra = z->c; /* ], line 44 */ + { int ret; + ret = slice_del(z); /* delete, line 44 */ + if (ret < 0) return ret; + } + break; + case 3: + if (z->c != z->I[0]) return 0; /* atmark, line 45 */ + { int m_test = z->l - z->c; /* test, line 45 */ + { int ret = r_shortv(z); + if (ret == 0) return 0; /* call shortv, line 45 */ + if (ret < 0) return ret; + } + z->c = z->l - m_test; + } + { int ret; + { int c = z->c; + ret = insert_s(z, z->c, z->c, 1, s_4); /* <+, line 45 */ + z->c = c; + } + if (ret < 0) return ret; + } + break; + } + break; + } + return 1; +} + +static int r_Step_1c(struct SN_env * z) { + z->ket = z->c; /* [, line 52 */ + { int m = z->l - z->c; (void) m; /* or, line 52 */ + if (!(eq_s_b(z, 1, s_5))) goto lab1; + goto lab0; + lab1: + z->c = z->l - m; + if (!(eq_s_b(z, 1, s_6))) return 0; + } +lab0: + z->bra = z->c; /* ], line 52 */ + while(1) { /* gopast, line 53 */ + if (!(in_grouping_b_U(z, g_v, 97, 121))) goto lab2; + break; + lab2: + { int c = skip_utf8(z->p, z->c, z->lb, 0, -1); + if (c < 0) return 0; + z->c = c; /* gopast, line 53 */ + } + } + { int ret; + ret = slice_from_s(z, 1, s_7); /* <-, line 54 */ + if (ret < 0) return ret; + } + return 1; +} + +static int r_Step_2(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 58 */ + among_var = find_among_b(z, a_3, 20); /* substring, line 58 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 58 */ + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 58 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_from_s(z, 4, s_8); /* <-, line 59 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 4, s_9); /* <-, line 60 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_from_s(z, 4, s_10); /* <-, line 61 */ + if (ret < 0) return ret; + } + break; + case 4: + { int ret; + ret = slice_from_s(z, 4, s_11); /* <-, line 62 */ + if (ret < 0) return ret; + } + break; + case 5: + { int ret; + ret = slice_from_s(z, 3, s_12); /* <-, line 63 */ + if (ret < 0) return ret; + } + break; + case 6: + { int ret; + ret = slice_from_s(z, 1, s_13); /* <-, line 64 */ + if (ret < 0) return ret; + } + break; + case 7: + { int ret; + ret = slice_from_s(z, 3, s_14); /* <-, line 66 */ + if (ret < 0) return ret; + } + break; + case 8: + { int ret; + ret = slice_from_s(z, 3, s_15); /* <-, line 68 */ + if (ret < 0) return ret; + } + break; + case 9: + { int ret; + ret = slice_from_s(z, 2, s_16); /* <-, line 69 */ + if (ret < 0) return ret; + } + break; + case 10: + { int ret; + ret = slice_from_s(z, 2, s_17); /* <-, line 71 */ + if (ret < 0) return ret; + } + break; + case 11: + { int ret; + ret = slice_from_s(z, 3, s_18); /* <-, line 72 */ + if (ret < 0) return ret; + } + break; + case 12: + { int ret; + ret = slice_from_s(z, 3, s_19); /* <-, line 74 */ + if (ret < 0) return ret; + } + break; + case 13: + { int ret; + ret = slice_from_s(z, 3, s_20); /* <-, line 76 */ + if (ret < 0) return ret; + } + break; + case 14: + { int ret; + ret = slice_from_s(z, 3, s_21); /* <-, line 77 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_Step_3(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 82 */ + among_var = find_among_b(z, a_4, 7); /* substring, line 82 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 82 */ + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 82 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_from_s(z, 2, s_22); /* <-, line 83 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 2, s_23); /* <-, line 85 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_del(z); /* delete, line 87 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_Step_4(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 92 */ + among_var = find_among_b(z, a_5, 19); /* substring, line 92 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 92 */ + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 92 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 95 */ + if (ret < 0) return ret; + } + break; + case 2: + { int m = z->l - z->c; (void) m; /* or, line 96 */ + if (!(eq_s_b(z, 1, s_24))) goto lab1; + goto lab0; + lab1: + z->c = z->l - m; + if (!(eq_s_b(z, 1, s_25))) return 0; + } + lab0: + { int ret; + ret = slice_del(z); /* delete, line 96 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_Step_5a(struct SN_env * z) { + z->ket = z->c; /* [, line 101 */ + if (!(eq_s_b(z, 1, s_26))) return 0; + z->bra = z->c; /* ], line 101 */ + { int m = z->l - z->c; (void) m; /* or, line 102 */ + { int ret = r_R2(z); + if (ret == 0) goto lab1; /* call R2, line 102 */ + if (ret < 0) return ret; + } + goto lab0; + lab1: + z->c = z->l - m; + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 102 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* not, line 102 */ + { int ret = r_shortv(z); + if (ret == 0) goto lab2; /* call shortv, line 102 */ + if (ret < 0) return ret; + } + return 0; + lab2: + z->c = z->l - m; + } + } +lab0: + { int ret; + ret = slice_del(z); /* delete, line 103 */ + if (ret < 0) return ret; + } + return 1; +} + +static int r_Step_5b(struct SN_env * z) { + z->ket = z->c; /* [, line 107 */ + if (!(eq_s_b(z, 1, s_27))) return 0; + z->bra = z->c; /* ], line 107 */ + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 108 */ + if (ret < 0) return ret; + } + if (!(eq_s_b(z, 1, s_28))) return 0; + { int ret; + ret = slice_del(z); /* delete, line 109 */ + if (ret < 0) return ret; + } + return 1; +} + +extern int porter_UTF_8_stem(struct SN_env * z) { + z->B[0] = 0; /* unset Y_found, line 115 */ + { int c = z->c; /* do, line 116 */ + z->bra = z->c; /* [, line 116 */ + if (!(eq_s(z, 1, s_29))) goto lab0; + z->ket = z->c; /* ], line 116 */ + { int ret; + ret = slice_from_s(z, 1, s_30); /* <-, line 116 */ + if (ret < 0) return ret; + } + z->B[0] = 1; /* set Y_found, line 116 */ + lab0: + z->c = c; + } + { int c = z->c; /* do, line 117 */ + while(1) { /* repeat, line 117 */ + int c = z->c; + while(1) { /* goto, line 117 */ + int c = z->c; + if (!(in_grouping_U(z, g_v, 97, 121))) goto lab3; + z->bra = z->c; /* [, line 117 */ + if (!(eq_s(z, 1, s_31))) goto lab3; + z->ket = z->c; /* ], line 117 */ + z->c = c; + break; + lab3: + z->c = c; + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab2; + z->c = c; /* goto, line 117 */ + } + } + { int ret; + ret = slice_from_s(z, 1, s_32); /* <-, line 117 */ + if (ret < 0) return ret; + } + z->B[0] = 1; /* set Y_found, line 117 */ + continue; + lab2: + z->c = c; + break; + } + z->c = c; + } + z->I[0] = z->l; + z->I[1] = z->l; + { int c = z->c; /* do, line 121 */ + while(1) { /* gopast, line 122 */ + if (!(in_grouping_U(z, g_v, 97, 121))) goto lab5; + break; + lab5: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab4; + z->c = c; /* gopast, line 122 */ + } + } + while(1) { /* gopast, line 122 */ + if (!(out_grouping_U(z, g_v, 97, 121))) goto lab6; + break; + lab6: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab4; + z->c = c; /* gopast, line 122 */ + } + } + z->I[0] = z->c; /* setmark p1, line 122 */ + while(1) { /* gopast, line 123 */ + if (!(in_grouping_U(z, g_v, 97, 121))) goto lab7; + break; + lab7: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab4; + z->c = c; /* gopast, line 123 */ + } + } + while(1) { /* gopast, line 123 */ + if (!(out_grouping_U(z, g_v, 97, 121))) goto lab8; + break; + lab8: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab4; + z->c = c; /* gopast, line 123 */ + } + } + z->I[1] = z->c; /* setmark p2, line 123 */ + lab4: + z->c = c; + } + z->lb = z->c; z->c = z->l; /* backwards, line 126 */ + + { int m = z->l - z->c; (void) m; /* do, line 127 */ + { int ret = r_Step_1a(z); + if (ret == 0) goto lab9; /* call Step_1a, line 127 */ + if (ret < 0) return ret; + } + lab9: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 128 */ + { int ret = r_Step_1b(z); + if (ret == 0) goto lab10; /* call Step_1b, line 128 */ + if (ret < 0) return ret; + } + lab10: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 129 */ + { int ret = r_Step_1c(z); + if (ret == 0) goto lab11; /* call Step_1c, line 129 */ + if (ret < 0) return ret; + } + lab11: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 130 */ + { int ret = r_Step_2(z); + if (ret == 0) goto lab12; /* call Step_2, line 130 */ + if (ret < 0) return ret; + } + lab12: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 131 */ + { int ret = r_Step_3(z); + if (ret == 0) goto lab13; /* call Step_3, line 131 */ + if (ret < 0) return ret; + } + lab13: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 132 */ + { int ret = r_Step_4(z); + if (ret == 0) goto lab14; /* call Step_4, line 132 */ + if (ret < 0) return ret; + } + lab14: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 133 */ + { int ret = r_Step_5a(z); + if (ret == 0) goto lab15; /* call Step_5a, line 133 */ + if (ret < 0) return ret; + } + lab15: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 134 */ + { int ret = r_Step_5b(z); + if (ret == 0) goto lab16; /* call Step_5b, line 134 */ + if (ret < 0) return ret; + } + lab16: + z->c = z->l - m; + } + z->c = z->lb; + { int c = z->c; /* do, line 137 */ + if (!(z->B[0])) goto lab17; /* Boolean test Y_found, line 137 */ + while(1) { /* repeat, line 137 */ + int c = z->c; + while(1) { /* goto, line 137 */ + int c = z->c; + z->bra = z->c; /* [, line 137 */ + if (!(eq_s(z, 1, s_33))) goto lab19; + z->ket = z->c; /* ], line 137 */ + z->c = c; + break; + lab19: + z->c = c; + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab18; + z->c = c; /* goto, line 137 */ + } + } + { int ret; + ret = slice_from_s(z, 1, s_34); /* <-, line 137 */ + if (ret < 0) return ret; + } + continue; + lab18: + z->c = c; + break; + } + lab17: + z->c = c; + } + return 1; +} + +extern struct SN_env * porter_UTF_8_create_env(void) { return SN_create_env(0, 2, 1); } + +extern void porter_UTF_8_close_env(struct SN_env * z) { SN_close_env(z); } + diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_porter.h b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_porter.h new file mode 100644 index 0000000..82d469a --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_porter.h @@ -0,0 +1,16 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern struct SN_env * porter_UTF_8_create_env(void); +extern void porter_UTF_8_close_env(struct SN_env * z); + +extern int porter_UTF_8_stem(struct SN_env * z); + +#ifdef __cplusplus +} +#endif + diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_portuguese.c b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_portuguese.c new file mode 100644 index 0000000..e288544 --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_portuguese.c @@ -0,0 +1,1055 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#include "../runtime/header.h" + +extern int portuguese_UTF_8_stem(struct SN_env * z); +static int r_residual_form(struct SN_env * z); +static int r_residual_suffix(struct SN_env * z); +static int r_verb_suffix(struct SN_env * z); +static int r_standard_suffix(struct SN_env * z); +static int r_R2(struct SN_env * z); +static int r_R1(struct SN_env * z); +static int r_RV(struct SN_env * z); +static int r_mark_regions(struct SN_env * z); +static int r_postlude(struct SN_env * z); +static int r_prelude(struct SN_env * z); + +extern struct SN_env * portuguese_UTF_8_create_env(void); +extern void portuguese_UTF_8_close_env(struct SN_env * z); + +static symbol s_0_1[2] = { 0xC3, 0xA3 }; +static symbol s_0_2[2] = { 0xC3, 0xB5 }; + +static struct among a_0[3] = +{ +/* 0 */ { 0, 0, -1, 3, 0}, +/* 1 */ { 2, s_0_1, 0, 1, 0}, +/* 2 */ { 2, s_0_2, 0, 2, 0} +}; + +static symbol s_1_1[2] = { 'a', '~' }; +static symbol s_1_2[2] = { 'o', '~' }; + +static struct among a_1[3] = +{ +/* 0 */ { 0, 0, -1, 3, 0}, +/* 1 */ { 2, s_1_1, 0, 1, 0}, +/* 2 */ { 2, s_1_2, 0, 2, 0} +}; + +static symbol s_2_0[2] = { 'i', 'c' }; +static symbol s_2_1[2] = { 'a', 'd' }; +static symbol s_2_2[2] = { 'o', 's' }; +static symbol s_2_3[2] = { 'i', 'v' }; + +static struct among a_2[4] = +{ +/* 0 */ { 2, s_2_0, -1, -1, 0}, +/* 1 */ { 2, s_2_1, -1, -1, 0}, +/* 2 */ { 2, s_2_2, -1, -1, 0}, +/* 3 */ { 2, s_2_3, -1, 1, 0} +}; + +static symbol s_3_0[4] = { 'a', 'n', 't', 'e' }; +static symbol s_3_1[4] = { 'a', 'v', 'e', 'l' }; +static symbol s_3_2[5] = { 0xC3, 0xAD, 'v', 'e', 'l' }; + +static struct among a_3[3] = +{ +/* 0 */ { 4, s_3_0, -1, 1, 0}, +/* 1 */ { 4, s_3_1, -1, 1, 0}, +/* 2 */ { 5, s_3_2, -1, 1, 0} +}; + +static symbol s_4_0[2] = { 'i', 'c' }; +static symbol s_4_1[4] = { 'a', 'b', 'i', 'l' }; +static symbol s_4_2[2] = { 'i', 'v' }; + +static struct among a_4[3] = +{ +/* 0 */ { 2, s_4_0, -1, 1, 0}, +/* 1 */ { 4, s_4_1, -1, 1, 0}, +/* 2 */ { 2, s_4_2, -1, 1, 0} +}; + +static symbol s_5_0[3] = { 'i', 'c', 'a' }; +static symbol s_5_1[6] = { 0xC3, 0xA2, 'n', 'c', 'i', 'a' }; +static symbol s_5_2[6] = { 0xC3, 0xAA, 'n', 'c', 'i', 'a' }; +static symbol s_5_3[3] = { 'i', 'r', 'a' }; +static symbol s_5_4[5] = { 'a', 'd', 'o', 'r', 'a' }; +static symbol s_5_5[3] = { 'o', 's', 'a' }; +static symbol s_5_6[4] = { 'i', 's', 't', 'a' }; +static symbol s_5_7[3] = { 'i', 'v', 'a' }; +static symbol s_5_8[3] = { 'e', 'z', 'a' }; +static symbol s_5_9[6] = { 'l', 'o', 'g', 0xC3, 0xAD, 'a' }; +static symbol s_5_10[5] = { 'i', 'd', 'a', 'd', 'e' }; +static symbol s_5_11[4] = { 'a', 'n', 't', 'e' }; +static symbol s_5_12[5] = { 'm', 'e', 'n', 't', 'e' }; +static symbol s_5_13[6] = { 'a', 'm', 'e', 'n', 't', 'e' }; +static symbol s_5_14[5] = { 0xC3, 0xA1, 'v', 'e', 'l' }; +static symbol s_5_15[5] = { 0xC3, 0xAD, 'v', 'e', 'l' }; +static symbol s_5_16[6] = { 'u', 'c', 'i', 0xC3, 0xB3, 'n' }; +static symbol s_5_17[3] = { 'i', 'c', 'o' }; +static symbol s_5_18[4] = { 'i', 's', 'm', 'o' }; +static symbol s_5_19[3] = { 'o', 's', 'o' }; +static symbol s_5_20[6] = { 'a', 'm', 'e', 'n', 't', 'o' }; +static symbol s_5_21[6] = { 'i', 'm', 'e', 'n', 't', 'o' }; +static symbol s_5_22[3] = { 'i', 'v', 'o' }; +static symbol s_5_23[6] = { 'a', 0xC3, 0xA7, 'a', '~', 'o' }; +static symbol s_5_24[4] = { 'a', 'd', 'o', 'r' }; +static symbol s_5_25[4] = { 'i', 'c', 'a', 's' }; +static symbol s_5_26[7] = { 0xC3, 0xAA, 'n', 'c', 'i', 'a', 's' }; +static symbol s_5_27[4] = { 'i', 'r', 'a', 's' }; +static symbol s_5_28[6] = { 'a', 'd', 'o', 'r', 'a', 's' }; +static symbol s_5_29[4] = { 'o', 's', 'a', 's' }; +static symbol s_5_30[5] = { 'i', 's', 't', 'a', 's' }; +static symbol s_5_31[4] = { 'i', 'v', 'a', 's' }; +static symbol s_5_32[4] = { 'e', 'z', 'a', 's' }; +static symbol s_5_33[7] = { 'l', 'o', 'g', 0xC3, 0xAD, 'a', 's' }; +static symbol s_5_34[6] = { 'i', 'd', 'a', 'd', 'e', 's' }; +static symbol s_5_35[7] = { 'u', 'c', 'i', 'o', 'n', 'e', 's' }; +static symbol s_5_36[6] = { 'a', 'd', 'o', 'r', 'e', 's' }; +static symbol s_5_37[5] = { 'a', 'n', 't', 'e', 's' }; +static symbol s_5_38[7] = { 'a', 0xC3, 0xA7, 'o', '~', 'e', 's' }; +static symbol s_5_39[4] = { 'i', 'c', 'o', 's' }; +static symbol s_5_40[5] = { 'i', 's', 'm', 'o', 's' }; +static symbol s_5_41[4] = { 'o', 's', 'o', 's' }; +static symbol s_5_42[7] = { 'a', 'm', 'e', 'n', 't', 'o', 's' }; +static symbol s_5_43[7] = { 'i', 'm', 'e', 'n', 't', 'o', 's' }; +static symbol s_5_44[4] = { 'i', 'v', 'o', 's' }; + +static struct among a_5[45] = +{ +/* 0 */ { 3, s_5_0, -1, 1, 0}, +/* 1 */ { 6, s_5_1, -1, 1, 0}, +/* 2 */ { 6, s_5_2, -1, 4, 0}, +/* 3 */ { 3, s_5_3, -1, 9, 0}, +/* 4 */ { 5, s_5_4, -1, 1, 0}, +/* 5 */ { 3, s_5_5, -1, 1, 0}, +/* 6 */ { 4, s_5_6, -1, 1, 0}, +/* 7 */ { 3, s_5_7, -1, 8, 0}, +/* 8 */ { 3, s_5_8, -1, 1, 0}, +/* 9 */ { 6, s_5_9, -1, 2, 0}, +/* 10 */ { 5, s_5_10, -1, 7, 0}, +/* 11 */ { 4, s_5_11, -1, 1, 0}, +/* 12 */ { 5, s_5_12, -1, 6, 0}, +/* 13 */ { 6, s_5_13, 12, 5, 0}, +/* 14 */ { 5, s_5_14, -1, 1, 0}, +/* 15 */ { 5, s_5_15, -1, 1, 0}, +/* 16 */ { 6, s_5_16, -1, 3, 0}, +/* 17 */ { 3, s_5_17, -1, 1, 0}, +/* 18 */ { 4, s_5_18, -1, 1, 0}, +/* 19 */ { 3, s_5_19, -1, 1, 0}, +/* 20 */ { 6, s_5_20, -1, 1, 0}, +/* 21 */ { 6, s_5_21, -1, 1, 0}, +/* 22 */ { 3, s_5_22, -1, 8, 0}, +/* 23 */ { 6, s_5_23, -1, 1, 0}, +/* 24 */ { 4, s_5_24, -1, 1, 0}, +/* 25 */ { 4, s_5_25, -1, 1, 0}, +/* 26 */ { 7, s_5_26, -1, 4, 0}, +/* 27 */ { 4, s_5_27, -1, 9, 0}, +/* 28 */ { 6, s_5_28, -1, 1, 0}, +/* 29 */ { 4, s_5_29, -1, 1, 0}, +/* 30 */ { 5, s_5_30, -1, 1, 0}, +/* 31 */ { 4, s_5_31, -1, 8, 0}, +/* 32 */ { 4, s_5_32, -1, 1, 0}, +/* 33 */ { 7, s_5_33, -1, 2, 0}, +/* 34 */ { 6, s_5_34, -1, 7, 0}, +/* 35 */ { 7, s_5_35, -1, 3, 0}, +/* 36 */ { 6, s_5_36, -1, 1, 0}, +/* 37 */ { 5, s_5_37, -1, 1, 0}, +/* 38 */ { 7, s_5_38, -1, 1, 0}, +/* 39 */ { 4, s_5_39, -1, 1, 0}, +/* 40 */ { 5, s_5_40, -1, 1, 0}, +/* 41 */ { 4, s_5_41, -1, 1, 0}, +/* 42 */ { 7, s_5_42, -1, 1, 0}, +/* 43 */ { 7, s_5_43, -1, 1, 0}, +/* 44 */ { 4, s_5_44, -1, 8, 0} +}; + +static symbol s_6_0[3] = { 'a', 'd', 'a' }; +static symbol s_6_1[3] = { 'i', 'd', 'a' }; +static symbol s_6_2[2] = { 'i', 'a' }; +static symbol s_6_3[4] = { 'a', 'r', 'i', 'a' }; +static symbol s_6_4[4] = { 'e', 'r', 'i', 'a' }; +static symbol s_6_5[4] = { 'i', 'r', 'i', 'a' }; +static symbol s_6_6[3] = { 'a', 'r', 'a' }; +static symbol s_6_7[3] = { 'e', 'r', 'a' }; +static symbol s_6_8[3] = { 'i', 'r', 'a' }; +static symbol s_6_9[3] = { 'a', 'v', 'a' }; +static symbol s_6_10[4] = { 'a', 's', 's', 'e' }; +static symbol s_6_11[4] = { 'e', 's', 's', 'e' }; +static symbol s_6_12[4] = { 'i', 's', 's', 'e' }; +static symbol s_6_13[4] = { 'a', 's', 't', 'e' }; +static symbol s_6_14[4] = { 'e', 's', 't', 'e' }; +static symbol s_6_15[4] = { 'i', 's', 't', 'e' }; +static symbol s_6_16[2] = { 'e', 'i' }; +static symbol s_6_17[4] = { 'a', 'r', 'e', 'i' }; +static symbol s_6_18[4] = { 'e', 'r', 'e', 'i' }; +static symbol s_6_19[4] = { 'i', 'r', 'e', 'i' }; +static symbol s_6_20[2] = { 'a', 'm' }; +static symbol s_6_21[3] = { 'i', 'a', 'm' }; +static symbol s_6_22[5] = { 'a', 'r', 'i', 'a', 'm' }; +static symbol s_6_23[5] = { 'e', 'r', 'i', 'a', 'm' }; +static symbol s_6_24[5] = { 'i', 'r', 'i', 'a', 'm' }; +static symbol s_6_25[4] = { 'a', 'r', 'a', 'm' }; +static symbol s_6_26[4] = { 'e', 'r', 'a', 'm' }; +static symbol s_6_27[4] = { 'i', 'r', 'a', 'm' }; +static symbol s_6_28[4] = { 'a', 'v', 'a', 'm' }; +static symbol s_6_29[2] = { 'e', 'm' }; +static symbol s_6_30[4] = { 'a', 'r', 'e', 'm' }; +static symbol s_6_31[4] = { 'e', 'r', 'e', 'm' }; +static symbol s_6_32[4] = { 'i', 'r', 'e', 'm' }; +static symbol s_6_33[5] = { 'a', 's', 's', 'e', 'm' }; +static symbol s_6_34[5] = { 'e', 's', 's', 'e', 'm' }; +static symbol s_6_35[5] = { 'i', 's', 's', 'e', 'm' }; +static symbol s_6_36[3] = { 'a', 'd', 'o' }; +static symbol s_6_37[3] = { 'i', 'd', 'o' }; +static symbol s_6_38[4] = { 'a', 'n', 'd', 'o' }; +static symbol s_6_39[4] = { 'e', 'n', 'd', 'o' }; +static symbol s_6_40[4] = { 'i', 'n', 'd', 'o' }; +static symbol s_6_41[5] = { 'a', 'r', 'a', '~', 'o' }; +static symbol s_6_42[5] = { 'e', 'r', 'a', '~', 'o' }; +static symbol s_6_43[5] = { 'i', 'r', 'a', '~', 'o' }; +static symbol s_6_44[2] = { 'a', 'r' }; +static symbol s_6_45[2] = { 'e', 'r' }; +static symbol s_6_46[2] = { 'i', 'r' }; +static symbol s_6_47[2] = { 'a', 's' }; +static symbol s_6_48[4] = { 'a', 'd', 'a', 's' }; +static symbol s_6_49[4] = { 'i', 'd', 'a', 's' }; +static symbol s_6_50[3] = { 'i', 'a', 's' }; +static symbol s_6_51[5] = { 'a', 'r', 'i', 'a', 's' }; +static symbol s_6_52[5] = { 'e', 'r', 'i', 'a', 's' }; +static symbol s_6_53[5] = { 'i', 'r', 'i', 'a', 's' }; +static symbol s_6_54[4] = { 'a', 'r', 'a', 's' }; +static symbol s_6_55[4] = { 'e', 'r', 'a', 's' }; +static symbol s_6_56[4] = { 'i', 'r', 'a', 's' }; +static symbol s_6_57[4] = { 'a', 'v', 'a', 's' }; +static symbol s_6_58[2] = { 'e', 's' }; +static symbol s_6_59[5] = { 'a', 'r', 'd', 'e', 's' }; +static symbol s_6_60[5] = { 'e', 'r', 'd', 'e', 's' }; +static symbol s_6_61[5] = { 'i', 'r', 'd', 'e', 's' }; +static symbol s_6_62[4] = { 'a', 'r', 'e', 's' }; +static symbol s_6_63[4] = { 'e', 'r', 'e', 's' }; +static symbol s_6_64[4] = { 'i', 'r', 'e', 's' }; +static symbol s_6_65[5] = { 'a', 's', 's', 'e', 's' }; +static symbol s_6_66[5] = { 'e', 's', 's', 'e', 's' }; +static symbol s_6_67[5] = { 'i', 's', 's', 'e', 's' }; +static symbol s_6_68[5] = { 'a', 's', 't', 'e', 's' }; +static symbol s_6_69[5] = { 'e', 's', 't', 'e', 's' }; +static symbol s_6_70[5] = { 'i', 's', 't', 'e', 's' }; +static symbol s_6_71[2] = { 'i', 's' }; +static symbol s_6_72[3] = { 'a', 'i', 's' }; +static symbol s_6_73[3] = { 'e', 'i', 's' }; +static symbol s_6_74[5] = { 'a', 'r', 'e', 'i', 's' }; +static symbol s_6_75[5] = { 'e', 'r', 'e', 'i', 's' }; +static symbol s_6_76[5] = { 'i', 'r', 'e', 'i', 's' }; +static symbol s_6_77[6] = { 0xC3, 0xA1, 'r', 'e', 'i', 's' }; +static symbol s_6_78[6] = { 0xC3, 0xA9, 'r', 'e', 'i', 's' }; +static symbol s_6_79[6] = { 0xC3, 0xAD, 'r', 'e', 'i', 's' }; +static symbol s_6_80[7] = { 0xC3, 0xA1, 's', 's', 'e', 'i', 's' }; +static symbol s_6_81[7] = { 0xC3, 0xA9, 's', 's', 'e', 'i', 's' }; +static symbol s_6_82[7] = { 0xC3, 0xAD, 's', 's', 'e', 'i', 's' }; +static symbol s_6_83[6] = { 0xC3, 0xA1, 'v', 'e', 'i', 's' }; +static symbol s_6_84[5] = { 0xC3, 0xAD, 'e', 'i', 's' }; +static symbol s_6_85[7] = { 'a', 'r', 0xC3, 0xAD, 'e', 'i', 's' }; +static symbol s_6_86[7] = { 'e', 'r', 0xC3, 0xAD, 'e', 'i', 's' }; +static symbol s_6_87[7] = { 'i', 'r', 0xC3, 0xAD, 'e', 'i', 's' }; +static symbol s_6_88[4] = { 'a', 'd', 'o', 's' }; +static symbol s_6_89[4] = { 'i', 'd', 'o', 's' }; +static symbol s_6_90[4] = { 'a', 'm', 'o', 's' }; +static symbol s_6_91[7] = { 0xC3, 0xA1, 'r', 'a', 'm', 'o', 's' }; +static symbol s_6_92[7] = { 0xC3, 0xA9, 'r', 'a', 'm', 'o', 's' }; +static symbol s_6_93[7] = { 0xC3, 0xAD, 'r', 'a', 'm', 'o', 's' }; +static symbol s_6_94[7] = { 0xC3, 0xA1, 'v', 'a', 'm', 'o', 's' }; +static symbol s_6_95[6] = { 0xC3, 0xAD, 'a', 'm', 'o', 's' }; +static symbol s_6_96[8] = { 'a', 'r', 0xC3, 0xAD, 'a', 'm', 'o', 's' }; +static symbol s_6_97[8] = { 'e', 'r', 0xC3, 0xAD, 'a', 'm', 'o', 's' }; +static symbol s_6_98[8] = { 'i', 'r', 0xC3, 0xAD, 'a', 'm', 'o', 's' }; +static symbol s_6_99[4] = { 'e', 'm', 'o', 's' }; +static symbol s_6_100[6] = { 'a', 'r', 'e', 'm', 'o', 's' }; +static symbol s_6_101[6] = { 'e', 'r', 'e', 'm', 'o', 's' }; +static symbol s_6_102[6] = { 'i', 'r', 'e', 'm', 'o', 's' }; +static symbol s_6_103[8] = { 0xC3, 0xA1, 's', 's', 'e', 'm', 'o', 's' }; +static symbol s_6_104[8] = { 0xC3, 0xAA, 's', 's', 'e', 'm', 'o', 's' }; +static symbol s_6_105[8] = { 0xC3, 0xAD, 's', 's', 'e', 'm', 'o', 's' }; +static symbol s_6_106[4] = { 'i', 'm', 'o', 's' }; +static symbol s_6_107[5] = { 'a', 'r', 'm', 'o', 's' }; +static symbol s_6_108[5] = { 'e', 'r', 'm', 'o', 's' }; +static symbol s_6_109[5] = { 'i', 'r', 'm', 'o', 's' }; +static symbol s_6_110[5] = { 0xC3, 0xA1, 'm', 'o', 's' }; +static symbol s_6_111[5] = { 'a', 'r', 0xC3, 0xA1, 's' }; +static symbol s_6_112[5] = { 'e', 'r', 0xC3, 0xA1, 's' }; +static symbol s_6_113[5] = { 'i', 'r', 0xC3, 0xA1, 's' }; +static symbol s_6_114[2] = { 'e', 'u' }; +static symbol s_6_115[2] = { 'i', 'u' }; +static symbol s_6_116[2] = { 'o', 'u' }; +static symbol s_6_117[4] = { 'a', 'r', 0xC3, 0xA1 }; +static symbol s_6_118[4] = { 'e', 'r', 0xC3, 0xA1 }; +static symbol s_6_119[4] = { 'i', 'r', 0xC3, 0xA1 }; + +static struct among a_6[120] = +{ +/* 0 */ { 3, s_6_0, -1, 1, 0}, +/* 1 */ { 3, s_6_1, -1, 1, 0}, +/* 2 */ { 2, s_6_2, -1, 1, 0}, +/* 3 */ { 4, s_6_3, 2, 1, 0}, +/* 4 */ { 4, s_6_4, 2, 1, 0}, +/* 5 */ { 4, s_6_5, 2, 1, 0}, +/* 6 */ { 3, s_6_6, -1, 1, 0}, +/* 7 */ { 3, s_6_7, -1, 1, 0}, +/* 8 */ { 3, s_6_8, -1, 1, 0}, +/* 9 */ { 3, s_6_9, -1, 1, 0}, +/* 10 */ { 4, s_6_10, -1, 1, 0}, +/* 11 */ { 4, s_6_11, -1, 1, 0}, +/* 12 */ { 4, s_6_12, -1, 1, 0}, +/* 13 */ { 4, s_6_13, -1, 1, 0}, +/* 14 */ { 4, s_6_14, -1, 1, 0}, +/* 15 */ { 4, s_6_15, -1, 1, 0}, +/* 16 */ { 2, s_6_16, -1, 1, 0}, +/* 17 */ { 4, s_6_17, 16, 1, 0}, +/* 18 */ { 4, s_6_18, 16, 1, 0}, +/* 19 */ { 4, s_6_19, 16, 1, 0}, +/* 20 */ { 2, s_6_20, -1, 1, 0}, +/* 21 */ { 3, s_6_21, 20, 1, 0}, +/* 22 */ { 5, s_6_22, 21, 1, 0}, +/* 23 */ { 5, s_6_23, 21, 1, 0}, +/* 24 */ { 5, s_6_24, 21, 1, 0}, +/* 25 */ { 4, s_6_25, 20, 1, 0}, +/* 26 */ { 4, s_6_26, 20, 1, 0}, +/* 27 */ { 4, s_6_27, 20, 1, 0}, +/* 28 */ { 4, s_6_28, 20, 1, 0}, +/* 29 */ { 2, s_6_29, -1, 1, 0}, +/* 30 */ { 4, s_6_30, 29, 1, 0}, +/* 31 */ { 4, s_6_31, 29, 1, 0}, +/* 32 */ { 4, s_6_32, 29, 1, 0}, +/* 33 */ { 5, s_6_33, 29, 1, 0}, +/* 34 */ { 5, s_6_34, 29, 1, 0}, +/* 35 */ { 5, s_6_35, 29, 1, 0}, +/* 36 */ { 3, s_6_36, -1, 1, 0}, +/* 37 */ { 3, s_6_37, -1, 1, 0}, +/* 38 */ { 4, s_6_38, -1, 1, 0}, +/* 39 */ { 4, s_6_39, -1, 1, 0}, +/* 40 */ { 4, s_6_40, -1, 1, 0}, +/* 41 */ { 5, s_6_41, -1, 1, 0}, +/* 42 */ { 5, s_6_42, -1, 1, 0}, +/* 43 */ { 5, s_6_43, -1, 1, 0}, +/* 44 */ { 2, s_6_44, -1, 1, 0}, +/* 45 */ { 2, s_6_45, -1, 1, 0}, +/* 46 */ { 2, s_6_46, -1, 1, 0}, +/* 47 */ { 2, s_6_47, -1, 1, 0}, +/* 48 */ { 4, s_6_48, 47, 1, 0}, +/* 49 */ { 4, s_6_49, 47, 1, 0}, +/* 50 */ { 3, s_6_50, 47, 1, 0}, +/* 51 */ { 5, s_6_51, 50, 1, 0}, +/* 52 */ { 5, s_6_52, 50, 1, 0}, +/* 53 */ { 5, s_6_53, 50, 1, 0}, +/* 54 */ { 4, s_6_54, 47, 1, 0}, +/* 55 */ { 4, s_6_55, 47, 1, 0}, +/* 56 */ { 4, s_6_56, 47, 1, 0}, +/* 57 */ { 4, s_6_57, 47, 1, 0}, +/* 58 */ { 2, s_6_58, -1, 1, 0}, +/* 59 */ { 5, s_6_59, 58, 1, 0}, +/* 60 */ { 5, s_6_60, 58, 1, 0}, +/* 61 */ { 5, s_6_61, 58, 1, 0}, +/* 62 */ { 4, s_6_62, 58, 1, 0}, +/* 63 */ { 4, s_6_63, 58, 1, 0}, +/* 64 */ { 4, s_6_64, 58, 1, 0}, +/* 65 */ { 5, s_6_65, 58, 1, 0}, +/* 66 */ { 5, s_6_66, 58, 1, 0}, +/* 67 */ { 5, s_6_67, 58, 1, 0}, +/* 68 */ { 5, s_6_68, 58, 1, 0}, +/* 69 */ { 5, s_6_69, 58, 1, 0}, +/* 70 */ { 5, s_6_70, 58, 1, 0}, +/* 71 */ { 2, s_6_71, -1, 1, 0}, +/* 72 */ { 3, s_6_72, 71, 1, 0}, +/* 73 */ { 3, s_6_73, 71, 1, 0}, +/* 74 */ { 5, s_6_74, 73, 1, 0}, +/* 75 */ { 5, s_6_75, 73, 1, 0}, +/* 76 */ { 5, s_6_76, 73, 1, 0}, +/* 77 */ { 6, s_6_77, 73, 1, 0}, +/* 78 */ { 6, s_6_78, 73, 1, 0}, +/* 79 */ { 6, s_6_79, 73, 1, 0}, +/* 80 */ { 7, s_6_80, 73, 1, 0}, +/* 81 */ { 7, s_6_81, 73, 1, 0}, +/* 82 */ { 7, s_6_82, 73, 1, 0}, +/* 83 */ { 6, s_6_83, 73, 1, 0}, +/* 84 */ { 5, s_6_84, 73, 1, 0}, +/* 85 */ { 7, s_6_85, 84, 1, 0}, +/* 86 */ { 7, s_6_86, 84, 1, 0}, +/* 87 */ { 7, s_6_87, 84, 1, 0}, +/* 88 */ { 4, s_6_88, -1, 1, 0}, +/* 89 */ { 4, s_6_89, -1, 1, 0}, +/* 90 */ { 4, s_6_90, -1, 1, 0}, +/* 91 */ { 7, s_6_91, 90, 1, 0}, +/* 92 */ { 7, s_6_92, 90, 1, 0}, +/* 93 */ { 7, s_6_93, 90, 1, 0}, +/* 94 */ { 7, s_6_94, 90, 1, 0}, +/* 95 */ { 6, s_6_95, 90, 1, 0}, +/* 96 */ { 8, s_6_96, 95, 1, 0}, +/* 97 */ { 8, s_6_97, 95, 1, 0}, +/* 98 */ { 8, s_6_98, 95, 1, 0}, +/* 99 */ { 4, s_6_99, -1, 1, 0}, +/*100 */ { 6, s_6_100, 99, 1, 0}, +/*101 */ { 6, s_6_101, 99, 1, 0}, +/*102 */ { 6, s_6_102, 99, 1, 0}, +/*103 */ { 8, s_6_103, 99, 1, 0}, +/*104 */ { 8, s_6_104, 99, 1, 0}, +/*105 */ { 8, s_6_105, 99, 1, 0}, +/*106 */ { 4, s_6_106, -1, 1, 0}, +/*107 */ { 5, s_6_107, -1, 1, 0}, +/*108 */ { 5, s_6_108, -1, 1, 0}, +/*109 */ { 5, s_6_109, -1, 1, 0}, +/*110 */ { 5, s_6_110, -1, 1, 0}, +/*111 */ { 5, s_6_111, -1, 1, 0}, +/*112 */ { 5, s_6_112, -1, 1, 0}, +/*113 */ { 5, s_6_113, -1, 1, 0}, +/*114 */ { 2, s_6_114, -1, 1, 0}, +/*115 */ { 2, s_6_115, -1, 1, 0}, +/*116 */ { 2, s_6_116, -1, 1, 0}, +/*117 */ { 4, s_6_117, -1, 1, 0}, +/*118 */ { 4, s_6_118, -1, 1, 0}, +/*119 */ { 4, s_6_119, -1, 1, 0} +}; + +static symbol s_7_0[1] = { 'a' }; +static symbol s_7_1[1] = { 'i' }; +static symbol s_7_2[1] = { 'o' }; +static symbol s_7_3[2] = { 'o', 's' }; +static symbol s_7_4[2] = { 0xC3, 0xA1 }; +static symbol s_7_5[2] = { 0xC3, 0xAD }; +static symbol s_7_6[2] = { 0xC3, 0xB3 }; + +static struct among a_7[7] = +{ +/* 0 */ { 1, s_7_0, -1, 1, 0}, +/* 1 */ { 1, s_7_1, -1, 1, 0}, +/* 2 */ { 1, s_7_2, -1, 1, 0}, +/* 3 */ { 2, s_7_3, -1, 1, 0}, +/* 4 */ { 2, s_7_4, -1, 1, 0}, +/* 5 */ { 2, s_7_5, -1, 1, 0}, +/* 6 */ { 2, s_7_6, -1, 1, 0} +}; + +static symbol s_8_0[1] = { 'e' }; +static symbol s_8_1[2] = { 0xC3, 0xA7 }; +static symbol s_8_2[2] = { 0xC3, 0xA9 }; +static symbol s_8_3[2] = { 0xC3, 0xAA }; + +static struct among a_8[4] = +{ +/* 0 */ { 1, s_8_0, -1, 1, 0}, +/* 1 */ { 2, s_8_1, -1, 2, 0}, +/* 2 */ { 2, s_8_2, -1, 1, 0}, +/* 3 */ { 2, s_8_3, -1, 1, 0} +}; + +static unsigned char g_v[] = { 17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 19, 12, 2 }; + +static symbol s_0[] = { 'a', '~' }; +static symbol s_1[] = { 'o', '~' }; +static symbol s_2[] = { 0xC3, 0xA3 }; +static symbol s_3[] = { 0xC3, 0xB5 }; +static symbol s_4[] = { 'l', 'o', 'g' }; +static symbol s_5[] = { 'u' }; +static symbol s_6[] = { 'e', 'n', 't', 'e' }; +static symbol s_7[] = { 'a', 't' }; +static symbol s_8[] = { 'a', 't' }; +static symbol s_9[] = { 'e' }; +static symbol s_10[] = { 'i', 'r' }; +static symbol s_11[] = { 'u' }; +static symbol s_12[] = { 'g' }; +static symbol s_13[] = { 'i' }; +static symbol s_14[] = { 'c' }; +static symbol s_15[] = { 'c' }; +static symbol s_16[] = { 'i' }; +static symbol s_17[] = { 'c' }; + +static int r_prelude(struct SN_env * z) { + int among_var; + while(1) { /* repeat, line 36 */ + int c = z->c; + z->bra = z->c; /* [, line 37 */ + among_var = find_among(z, a_0, 3); /* substring, line 37 */ + if (!(among_var)) goto lab0; + z->ket = z->c; /* ], line 37 */ + switch(among_var) { + case 0: goto lab0; + case 1: + { int ret; + ret = slice_from_s(z, 2, s_0); /* <-, line 38 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 2, s_1); /* <-, line 39 */ + if (ret < 0) return ret; + } + break; + case 3: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab0; + z->c = c; /* next, line 40 */ + } + break; + } + continue; + lab0: + z->c = c; + break; + } + return 1; +} + +static int r_mark_regions(struct SN_env * z) { + z->I[0] = z->l; + z->I[1] = z->l; + z->I[2] = z->l; + { int c = z->c; /* do, line 50 */ + { int c = z->c; /* or, line 52 */ + if (!(in_grouping_U(z, g_v, 97, 250))) goto lab2; + { int c = z->c; /* or, line 51 */ + if (!(out_grouping_U(z, g_v, 97, 250))) goto lab4; + while(1) { /* gopast, line 51 */ + if (!(in_grouping_U(z, g_v, 97, 250))) goto lab5; + break; + lab5: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab4; + z->c = c; /* gopast, line 51 */ + } + } + goto lab3; + lab4: + z->c = c; + if (!(in_grouping_U(z, g_v, 97, 250))) goto lab2; + while(1) { /* gopast, line 51 */ + if (!(out_grouping_U(z, g_v, 97, 250))) goto lab6; + break; + lab6: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab2; + z->c = c; /* gopast, line 51 */ + } + } + } + lab3: + goto lab1; + lab2: + z->c = c; + if (!(out_grouping_U(z, g_v, 97, 250))) goto lab0; + { int c = z->c; /* or, line 53 */ + if (!(out_grouping_U(z, g_v, 97, 250))) goto lab8; + while(1) { /* gopast, line 53 */ + if (!(in_grouping_U(z, g_v, 97, 250))) goto lab9; + break; + lab9: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab8; + z->c = c; /* gopast, line 53 */ + } + } + goto lab7; + lab8: + z->c = c; + if (!(in_grouping_U(z, g_v, 97, 250))) goto lab0; + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab0; + z->c = c; /* next, line 53 */ + } + } + lab7: + ; + } + lab1: + z->I[0] = z->c; /* setmark pV, line 54 */ + lab0: + z->c = c; + } + { int c = z->c; /* do, line 56 */ + while(1) { /* gopast, line 57 */ + if (!(in_grouping_U(z, g_v, 97, 250))) goto lab11; + break; + lab11: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab10; + z->c = c; /* gopast, line 57 */ + } + } + while(1) { /* gopast, line 57 */ + if (!(out_grouping_U(z, g_v, 97, 250))) goto lab12; + break; + lab12: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab10; + z->c = c; /* gopast, line 57 */ + } + } + z->I[1] = z->c; /* setmark p1, line 57 */ + while(1) { /* gopast, line 58 */ + if (!(in_grouping_U(z, g_v, 97, 250))) goto lab13; + break; + lab13: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab10; + z->c = c; /* gopast, line 58 */ + } + } + while(1) { /* gopast, line 58 */ + if (!(out_grouping_U(z, g_v, 97, 250))) goto lab14; + break; + lab14: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab10; + z->c = c; /* gopast, line 58 */ + } + } + z->I[2] = z->c; /* setmark p2, line 58 */ + lab10: + z->c = c; + } + return 1; +} + +static int r_postlude(struct SN_env * z) { + int among_var; + while(1) { /* repeat, line 62 */ + int c = z->c; + z->bra = z->c; /* [, line 63 */ + among_var = find_among(z, a_1, 3); /* substring, line 63 */ + if (!(among_var)) goto lab0; + z->ket = z->c; /* ], line 63 */ + switch(among_var) { + case 0: goto lab0; + case 1: + { int ret; + ret = slice_from_s(z, 2, s_2); /* <-, line 64 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 2, s_3); /* <-, line 65 */ + if (ret < 0) return ret; + } + break; + case 3: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab0; + z->c = c; /* next, line 66 */ + } + break; + } + continue; + lab0: + z->c = c; + break; + } + return 1; +} + +static int r_RV(struct SN_env * z) { + if (!(z->I[0] <= z->c)) return 0; + return 1; +} + +static int r_R1(struct SN_env * z) { + if (!(z->I[1] <= z->c)) return 0; + return 1; +} + +static int r_R2(struct SN_env * z) { + if (!(z->I[2] <= z->c)) return 0; + return 1; +} + +static int r_standard_suffix(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 77 */ + among_var = find_among_b(z, a_5, 45); /* substring, line 77 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 77 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 93 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 93 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 98 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 3, s_4); /* <-, line 98 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 102 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 1, s_5); /* <-, line 102 */ + if (ret < 0) return ret; + } + break; + case 4: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 106 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 4, s_6); /* <-, line 106 */ + if (ret < 0) return ret; + } + break; + case 5: + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 110 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 110 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 111 */ + z->ket = z->c; /* [, line 112 */ + among_var = find_among_b(z, a_2, 4); /* substring, line 112 */ + if (!(among_var)) { z->c = z->l - m; goto lab0; } + z->bra = z->c; /* ], line 112 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab0; } /* call R2, line 112 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 112 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: { z->c = z->l - m; goto lab0; } + case 1: + z->ket = z->c; /* [, line 113 */ + if (!(eq_s_b(z, 2, s_7))) { z->c = z->l - m; goto lab0; } + z->bra = z->c; /* ], line 113 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab0; } /* call R2, line 113 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 113 */ + if (ret < 0) return ret; + } + break; + } + lab0: + ; + } + break; + case 6: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 122 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 122 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 123 */ + z->ket = z->c; /* [, line 124 */ + among_var = find_among_b(z, a_3, 3); /* substring, line 124 */ + if (!(among_var)) { z->c = z->l - m; goto lab1; } + z->bra = z->c; /* ], line 124 */ + switch(among_var) { + case 0: { z->c = z->l - m; goto lab1; } + case 1: + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab1; } /* call R2, line 127 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 127 */ + if (ret < 0) return ret; + } + break; + } + lab1: + ; + } + break; + case 7: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 134 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 134 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 135 */ + z->ket = z->c; /* [, line 136 */ + among_var = find_among_b(z, a_4, 3); /* substring, line 136 */ + if (!(among_var)) { z->c = z->l - m; goto lab2; } + z->bra = z->c; /* ], line 136 */ + switch(among_var) { + case 0: { z->c = z->l - m; goto lab2; } + case 1: + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab2; } /* call R2, line 139 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 139 */ + if (ret < 0) return ret; + } + break; + } + lab2: + ; + } + break; + case 8: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 146 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 146 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 147 */ + z->ket = z->c; /* [, line 148 */ + if (!(eq_s_b(z, 2, s_8))) { z->c = z->l - m; goto lab3; } + z->bra = z->c; /* ], line 148 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab3; } /* call R2, line 148 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 148 */ + if (ret < 0) return ret; + } + lab3: + ; + } + break; + case 9: + { int ret = r_RV(z); + if (ret == 0) return 0; /* call RV, line 153 */ + if (ret < 0) return ret; + } + if (!(eq_s_b(z, 1, s_9))) return 0; + { int ret; + ret = slice_from_s(z, 2, s_10); /* <-, line 154 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_verb_suffix(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 159 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 159 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 160 */ + among_var = find_among_b(z, a_6, 120); /* substring, line 160 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 160 */ + switch(among_var) { + case 0: { z->lb = m3; return 0; } + case 1: + { int ret; + ret = slice_del(z); /* delete, line 179 */ + if (ret < 0) return ret; + } + break; + } + z->lb = m3; + } + return 1; +} + +static int r_residual_suffix(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 184 */ + among_var = find_among_b(z, a_7, 7); /* substring, line 184 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 184 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret = r_RV(z); + if (ret == 0) return 0; /* call RV, line 187 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 187 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_residual_form(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 192 */ + among_var = find_among_b(z, a_8, 4); /* substring, line 192 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 192 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret = r_RV(z); + if (ret == 0) return 0; /* call RV, line 194 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 194 */ + if (ret < 0) return ret; + } + z->ket = z->c; /* [, line 194 */ + { int m = z->l - z->c; (void) m; /* or, line 194 */ + if (!(eq_s_b(z, 1, s_11))) goto lab1; + z->bra = z->c; /* ], line 194 */ + { int m_test = z->l - z->c; /* test, line 194 */ + if (!(eq_s_b(z, 1, s_12))) goto lab1; + z->c = z->l - m_test; + } + goto lab0; + lab1: + z->c = z->l - m; + if (!(eq_s_b(z, 1, s_13))) return 0; + z->bra = z->c; /* ], line 195 */ + { int m_test = z->l - z->c; /* test, line 195 */ + if (!(eq_s_b(z, 1, s_14))) return 0; + z->c = z->l - m_test; + } + } + lab0: + { int ret = r_RV(z); + if (ret == 0) return 0; /* call RV, line 195 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 195 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 1, s_15); /* <-, line 196 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +extern int portuguese_UTF_8_stem(struct SN_env * z) { + { int c = z->c; /* do, line 202 */ + { int ret = r_prelude(z); + if (ret == 0) goto lab0; /* call prelude, line 202 */ + if (ret < 0) return ret; + } + lab0: + z->c = c; + } + { int c = z->c; /* do, line 203 */ + { int ret = r_mark_regions(z); + if (ret == 0) goto lab1; /* call mark_regions, line 203 */ + if (ret < 0) return ret; + } + lab1: + z->c = c; + } + z->lb = z->c; z->c = z->l; /* backwards, line 204 */ + + { int m = z->l - z->c; (void) m; /* do, line 205 */ + { int m = z->l - z->c; (void) m; /* or, line 209 */ + { int m = z->l - z->c; (void) m; /* and, line 207 */ + { int m = z->l - z->c; (void) m; /* or, line 206 */ + { int ret = r_standard_suffix(z); + if (ret == 0) goto lab6; /* call standard_suffix, line 206 */ + if (ret < 0) return ret; + } + goto lab5; + lab6: + z->c = z->l - m; + { int ret = r_verb_suffix(z); + if (ret == 0) goto lab4; /* call verb_suffix, line 206 */ + if (ret < 0) return ret; + } + } + lab5: + z->c = z->l - m; + { int m = z->l - z->c; (void) m; /* do, line 207 */ + z->ket = z->c; /* [, line 207 */ + if (!(eq_s_b(z, 1, s_16))) goto lab7; + z->bra = z->c; /* ], line 207 */ + { int m_test = z->l - z->c; /* test, line 207 */ + if (!(eq_s_b(z, 1, s_17))) goto lab7; + z->c = z->l - m_test; + } + { int ret = r_RV(z); + if (ret == 0) goto lab7; /* call RV, line 207 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 207 */ + if (ret < 0) return ret; + } + lab7: + z->c = z->l - m; + } + } + goto lab3; + lab4: + z->c = z->l - m; + { int ret = r_residual_suffix(z); + if (ret == 0) goto lab2; /* call residual_suffix, line 209 */ + if (ret < 0) return ret; + } + } + lab3: + lab2: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 211 */ + { int ret = r_residual_form(z); + if (ret == 0) goto lab8; /* call residual_form, line 211 */ + if (ret < 0) return ret; + } + lab8: + z->c = z->l - m; + } + z->c = z->lb; + { int c = z->c; /* do, line 213 */ + { int ret = r_postlude(z); + if (ret == 0) goto lab9; /* call postlude, line 213 */ + if (ret < 0) return ret; + } + lab9: + z->c = c; + } + return 1; +} + +extern struct SN_env * portuguese_UTF_8_create_env(void) { return SN_create_env(0, 3, 0); } + +extern void portuguese_UTF_8_close_env(struct SN_env * z) { SN_close_env(z); } + diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_portuguese.h b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_portuguese.h new file mode 100644 index 0000000..9fe7f9a --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_portuguese.h @@ -0,0 +1,16 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern struct SN_env * portuguese_UTF_8_create_env(void); +extern void portuguese_UTF_8_close_env(struct SN_env * z); + +extern int portuguese_UTF_8_stem(struct SN_env * z); + +#ifdef __cplusplus +} +#endif + diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_russian.c b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_russian.c new file mode 100644 index 0000000..19581dd --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_russian.c @@ -0,0 +1,709 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#include "../runtime/header.h" + +extern int russian_UTF_8_stem(struct SN_env * z); +static int r_tidy_up(struct SN_env * z); +static int r_derivational(struct SN_env * z); +static int r_noun(struct SN_env * z); +static int r_verb(struct SN_env * z); +static int r_reflexive(struct SN_env * z); +static int r_adjectival(struct SN_env * z); +static int r_adjective(struct SN_env * z); +static int r_perfective_gerund(struct SN_env * z); +static int r_R2(struct SN_env * z); +static int r_mark_regions(struct SN_env * z); + +extern struct SN_env * russian_UTF_8_create_env(void); +extern void russian_UTF_8_close_env(struct SN_env * z); + +static symbol s_0_0[10] = { 0xD0, 0xB2, 0xD1, 0x88, 0xD0, 0xB8, 0xD1, 0x81, 0xD1, 0x8C }; +static symbol s_0_1[12] = { 0xD1, 0x8B, 0xD0, 0xB2, 0xD1, 0x88, 0xD0, 0xB8, 0xD1, 0x81, 0xD1, 0x8C }; +static symbol s_0_2[12] = { 0xD0, 0xB8, 0xD0, 0xB2, 0xD1, 0x88, 0xD0, 0xB8, 0xD1, 0x81, 0xD1, 0x8C }; +static symbol s_0_3[2] = { 0xD0, 0xB2 }; +static symbol s_0_4[4] = { 0xD1, 0x8B, 0xD0, 0xB2 }; +static symbol s_0_5[4] = { 0xD0, 0xB8, 0xD0, 0xB2 }; +static symbol s_0_6[6] = { 0xD0, 0xB2, 0xD1, 0x88, 0xD0, 0xB8 }; +static symbol s_0_7[8] = { 0xD1, 0x8B, 0xD0, 0xB2, 0xD1, 0x88, 0xD0, 0xB8 }; +static symbol s_0_8[8] = { 0xD0, 0xB8, 0xD0, 0xB2, 0xD1, 0x88, 0xD0, 0xB8 }; + +static struct among a_0[9] = +{ +/* 0 */ { 10, s_0_0, -1, 1, 0}, +/* 1 */ { 12, s_0_1, 0, 2, 0}, +/* 2 */ { 12, s_0_2, 0, 2, 0}, +/* 3 */ { 2, s_0_3, -1, 1, 0}, +/* 4 */ { 4, s_0_4, 3, 2, 0}, +/* 5 */ { 4, s_0_5, 3, 2, 0}, +/* 6 */ { 6, s_0_6, -1, 1, 0}, +/* 7 */ { 8, s_0_7, 6, 2, 0}, +/* 8 */ { 8, s_0_8, 6, 2, 0} +}; + +static symbol s_1_0[6] = { 0xD0, 0xB5, 0xD0, 0xBC, 0xD1, 0x83 }; +static symbol s_1_1[6] = { 0xD0, 0xBE, 0xD0, 0xBC, 0xD1, 0x83 }; +static symbol s_1_2[4] = { 0xD1, 0x8B, 0xD1, 0x85 }; +static symbol s_1_3[4] = { 0xD0, 0xB8, 0xD1, 0x85 }; +static symbol s_1_4[4] = { 0xD1, 0x83, 0xD1, 0x8E }; +static symbol s_1_5[4] = { 0xD1, 0x8E, 0xD1, 0x8E }; +static symbol s_1_6[4] = { 0xD0, 0xB5, 0xD1, 0x8E }; +static symbol s_1_7[4] = { 0xD0, 0xBE, 0xD1, 0x8E }; +static symbol s_1_8[4] = { 0xD1, 0x8F, 0xD1, 0x8F }; +static symbol s_1_9[4] = { 0xD0, 0xB0, 0xD1, 0x8F }; +static symbol s_1_10[4] = { 0xD1, 0x8B, 0xD0, 0xB5 }; +static symbol s_1_11[4] = { 0xD0, 0xB5, 0xD0, 0xB5 }; +static symbol s_1_12[4] = { 0xD0, 0xB8, 0xD0, 0xB5 }; +static symbol s_1_13[4] = { 0xD0, 0xBE, 0xD0, 0xB5 }; +static symbol s_1_14[6] = { 0xD1, 0x8B, 0xD0, 0xBC, 0xD0, 0xB8 }; +static symbol s_1_15[6] = { 0xD0, 0xB8, 0xD0, 0xBC, 0xD0, 0xB8 }; +static symbol s_1_16[4] = { 0xD1, 0x8B, 0xD0, 0xB9 }; +static symbol s_1_17[4] = { 0xD0, 0xB5, 0xD0, 0xB9 }; +static symbol s_1_18[4] = { 0xD0, 0xB8, 0xD0, 0xB9 }; +static symbol s_1_19[4] = { 0xD0, 0xBE, 0xD0, 0xB9 }; +static symbol s_1_20[4] = { 0xD1, 0x8B, 0xD0, 0xBC }; +static symbol s_1_21[4] = { 0xD0, 0xB5, 0xD0, 0xBC }; +static symbol s_1_22[4] = { 0xD0, 0xB8, 0xD0, 0xBC }; +static symbol s_1_23[4] = { 0xD0, 0xBE, 0xD0, 0xBC }; +static symbol s_1_24[6] = { 0xD0, 0xB5, 0xD0, 0xB3, 0xD0, 0xBE }; +static symbol s_1_25[6] = { 0xD0, 0xBE, 0xD0, 0xB3, 0xD0, 0xBE }; + +static struct among a_1[26] = +{ +/* 0 */ { 6, s_1_0, -1, 1, 0}, +/* 1 */ { 6, s_1_1, -1, 1, 0}, +/* 2 */ { 4, s_1_2, -1, 1, 0}, +/* 3 */ { 4, s_1_3, -1, 1, 0}, +/* 4 */ { 4, s_1_4, -1, 1, 0}, +/* 5 */ { 4, s_1_5, -1, 1, 0}, +/* 6 */ { 4, s_1_6, -1, 1, 0}, +/* 7 */ { 4, s_1_7, -1, 1, 0}, +/* 8 */ { 4, s_1_8, -1, 1, 0}, +/* 9 */ { 4, s_1_9, -1, 1, 0}, +/* 10 */ { 4, s_1_10, -1, 1, 0}, +/* 11 */ { 4, s_1_11, -1, 1, 0}, +/* 12 */ { 4, s_1_12, -1, 1, 0}, +/* 13 */ { 4, s_1_13, -1, 1, 0}, +/* 14 */ { 6, s_1_14, -1, 1, 0}, +/* 15 */ { 6, s_1_15, -1, 1, 0}, +/* 16 */ { 4, s_1_16, -1, 1, 0}, +/* 17 */ { 4, s_1_17, -1, 1, 0}, +/* 18 */ { 4, s_1_18, -1, 1, 0}, +/* 19 */ { 4, s_1_19, -1, 1, 0}, +/* 20 */ { 4, s_1_20, -1, 1, 0}, +/* 21 */ { 4, s_1_21, -1, 1, 0}, +/* 22 */ { 4, s_1_22, -1, 1, 0}, +/* 23 */ { 4, s_1_23, -1, 1, 0}, +/* 24 */ { 6, s_1_24, -1, 1, 0}, +/* 25 */ { 6, s_1_25, -1, 1, 0} +}; + +static symbol s_2_0[4] = { 0xD0, 0xB2, 0xD1, 0x88 }; +static symbol s_2_1[6] = { 0xD1, 0x8B, 0xD0, 0xB2, 0xD1, 0x88 }; +static symbol s_2_2[6] = { 0xD0, 0xB8, 0xD0, 0xB2, 0xD1, 0x88 }; +static symbol s_2_3[2] = { 0xD1, 0x89 }; +static symbol s_2_4[4] = { 0xD1, 0x8E, 0xD1, 0x89 }; +static symbol s_2_5[6] = { 0xD1, 0x83, 0xD1, 0x8E, 0xD1, 0x89 }; +static symbol s_2_6[4] = { 0xD0, 0xB5, 0xD0, 0xBC }; +static symbol s_2_7[4] = { 0xD0, 0xBD, 0xD0, 0xBD }; + +static struct among a_2[8] = +{ +/* 0 */ { 4, s_2_0, -1, 1, 0}, +/* 1 */ { 6, s_2_1, 0, 2, 0}, +/* 2 */ { 6, s_2_2, 0, 2, 0}, +/* 3 */ { 2, s_2_3, -1, 1, 0}, +/* 4 */ { 4, s_2_4, 3, 1, 0}, +/* 5 */ { 6, s_2_5, 4, 2, 0}, +/* 6 */ { 4, s_2_6, -1, 1, 0}, +/* 7 */ { 4, s_2_7, -1, 1, 0} +}; + +static symbol s_3_0[4] = { 0xD1, 0x81, 0xD1, 0x8C }; +static symbol s_3_1[4] = { 0xD1, 0x81, 0xD1, 0x8F }; + +static struct among a_3[2] = +{ +/* 0 */ { 4, s_3_0, -1, 1, 0}, +/* 1 */ { 4, s_3_1, -1, 1, 0} +}; + +static symbol s_4_0[4] = { 0xD1, 0x8B, 0xD1, 0x82 }; +static symbol s_4_1[4] = { 0xD1, 0x8E, 0xD1, 0x82 }; +static symbol s_4_2[6] = { 0xD1, 0x83, 0xD1, 0x8E, 0xD1, 0x82 }; +static symbol s_4_3[4] = { 0xD1, 0x8F, 0xD1, 0x82 }; +static symbol s_4_4[4] = { 0xD0, 0xB5, 0xD1, 0x82 }; +static symbol s_4_5[6] = { 0xD1, 0x83, 0xD0, 0xB5, 0xD1, 0x82 }; +static symbol s_4_6[4] = { 0xD0, 0xB8, 0xD1, 0x82 }; +static symbol s_4_7[4] = { 0xD0, 0xBD, 0xD1, 0x8B }; +static symbol s_4_8[6] = { 0xD0, 0xB5, 0xD0, 0xBD, 0xD1, 0x8B }; +static symbol s_4_9[4] = { 0xD1, 0x82, 0xD1, 0x8C }; +static symbol s_4_10[6] = { 0xD1, 0x8B, 0xD1, 0x82, 0xD1, 0x8C }; +static symbol s_4_11[6] = { 0xD0, 0xB8, 0xD1, 0x82, 0xD1, 0x8C }; +static symbol s_4_12[6] = { 0xD0, 0xB5, 0xD1, 0x88, 0xD1, 0x8C }; +static symbol s_4_13[6] = { 0xD0, 0xB8, 0xD1, 0x88, 0xD1, 0x8C }; +static symbol s_4_14[2] = { 0xD1, 0x8E }; +static symbol s_4_15[4] = { 0xD1, 0x83, 0xD1, 0x8E }; +static symbol s_4_16[4] = { 0xD0, 0xBB, 0xD0, 0xB0 }; +static symbol s_4_17[6] = { 0xD1, 0x8B, 0xD0, 0xBB, 0xD0, 0xB0 }; +static symbol s_4_18[6] = { 0xD0, 0xB8, 0xD0, 0xBB, 0xD0, 0xB0 }; +static symbol s_4_19[4] = { 0xD0, 0xBD, 0xD0, 0xB0 }; +static symbol s_4_20[6] = { 0xD0, 0xB5, 0xD0, 0xBD, 0xD0, 0xB0 }; +static symbol s_4_21[6] = { 0xD0, 0xB5, 0xD1, 0x82, 0xD0, 0xB5 }; +static symbol s_4_22[6] = { 0xD0, 0xB8, 0xD1, 0x82, 0xD0, 0xB5 }; +static symbol s_4_23[6] = { 0xD0, 0xB9, 0xD1, 0x82, 0xD0, 0xB5 }; +static symbol s_4_24[8] = { 0xD1, 0x83, 0xD0, 0xB9, 0xD1, 0x82, 0xD0, 0xB5 }; +static symbol s_4_25[8] = { 0xD0, 0xB5, 0xD0, 0xB9, 0xD1, 0x82, 0xD0, 0xB5 }; +static symbol s_4_26[4] = { 0xD0, 0xBB, 0xD0, 0xB8 }; +static symbol s_4_27[6] = { 0xD1, 0x8B, 0xD0, 0xBB, 0xD0, 0xB8 }; +static symbol s_4_28[6] = { 0xD0, 0xB8, 0xD0, 0xBB, 0xD0, 0xB8 }; +static symbol s_4_29[2] = { 0xD0, 0xB9 }; +static symbol s_4_30[4] = { 0xD1, 0x83, 0xD0, 0xB9 }; +static symbol s_4_31[4] = { 0xD0, 0xB5, 0xD0, 0xB9 }; +static symbol s_4_32[2] = { 0xD0, 0xBB }; +static symbol s_4_33[4] = { 0xD1, 0x8B, 0xD0, 0xBB }; +static symbol s_4_34[4] = { 0xD0, 0xB8, 0xD0, 0xBB }; +static symbol s_4_35[4] = { 0xD1, 0x8B, 0xD0, 0xBC }; +static symbol s_4_36[4] = { 0xD0, 0xB5, 0xD0, 0xBC }; +static symbol s_4_37[4] = { 0xD0, 0xB8, 0xD0, 0xBC }; +static symbol s_4_38[2] = { 0xD0, 0xBD }; +static symbol s_4_39[4] = { 0xD0, 0xB5, 0xD0, 0xBD }; +static symbol s_4_40[4] = { 0xD0, 0xBB, 0xD0, 0xBE }; +static symbol s_4_41[6] = { 0xD1, 0x8B, 0xD0, 0xBB, 0xD0, 0xBE }; +static symbol s_4_42[6] = { 0xD0, 0xB8, 0xD0, 0xBB, 0xD0, 0xBE }; +static symbol s_4_43[4] = { 0xD0, 0xBD, 0xD0, 0xBE }; +static symbol s_4_44[6] = { 0xD0, 0xB5, 0xD0, 0xBD, 0xD0, 0xBE }; +static symbol s_4_45[6] = { 0xD0, 0xBD, 0xD0, 0xBD, 0xD0, 0xBE }; + +static struct among a_4[46] = +{ +/* 0 */ { 4, s_4_0, -1, 2, 0}, +/* 1 */ { 4, s_4_1, -1, 1, 0}, +/* 2 */ { 6, s_4_2, 1, 2, 0}, +/* 3 */ { 4, s_4_3, -1, 2, 0}, +/* 4 */ { 4, s_4_4, -1, 1, 0}, +/* 5 */ { 6, s_4_5, 4, 2, 0}, +/* 6 */ { 4, s_4_6, -1, 2, 0}, +/* 7 */ { 4, s_4_7, -1, 1, 0}, +/* 8 */ { 6, s_4_8, 7, 2, 0}, +/* 9 */ { 4, s_4_9, -1, 1, 0}, +/* 10 */ { 6, s_4_10, 9, 2, 0}, +/* 11 */ { 6, s_4_11, 9, 2, 0}, +/* 12 */ { 6, s_4_12, -1, 1, 0}, +/* 13 */ { 6, s_4_13, -1, 2, 0}, +/* 14 */ { 2, s_4_14, -1, 2, 0}, +/* 15 */ { 4, s_4_15, 14, 2, 0}, +/* 16 */ { 4, s_4_16, -1, 1, 0}, +/* 17 */ { 6, s_4_17, 16, 2, 0}, +/* 18 */ { 6, s_4_18, 16, 2, 0}, +/* 19 */ { 4, s_4_19, -1, 1, 0}, +/* 20 */ { 6, s_4_20, 19, 2, 0}, +/* 21 */ { 6, s_4_21, -1, 1, 0}, +/* 22 */ { 6, s_4_22, -1, 2, 0}, +/* 23 */ { 6, s_4_23, -1, 1, 0}, +/* 24 */ { 8, s_4_24, 23, 2, 0}, +/* 25 */ { 8, s_4_25, 23, 2, 0}, +/* 26 */ { 4, s_4_26, -1, 1, 0}, +/* 27 */ { 6, s_4_27, 26, 2, 0}, +/* 28 */ { 6, s_4_28, 26, 2, 0}, +/* 29 */ { 2, s_4_29, -1, 1, 0}, +/* 30 */ { 4, s_4_30, 29, 2, 0}, +/* 31 */ { 4, s_4_31, 29, 2, 0}, +/* 32 */ { 2, s_4_32, -1, 1, 0}, +/* 33 */ { 4, s_4_33, 32, 2, 0}, +/* 34 */ { 4, s_4_34, 32, 2, 0}, +/* 35 */ { 4, s_4_35, -1, 2, 0}, +/* 36 */ { 4, s_4_36, -1, 1, 0}, +/* 37 */ { 4, s_4_37, -1, 2, 0}, +/* 38 */ { 2, s_4_38, -1, 1, 0}, +/* 39 */ { 4, s_4_39, 38, 2, 0}, +/* 40 */ { 4, s_4_40, -1, 1, 0}, +/* 41 */ { 6, s_4_41, 40, 2, 0}, +/* 42 */ { 6, s_4_42, 40, 2, 0}, +/* 43 */ { 4, s_4_43, -1, 1, 0}, +/* 44 */ { 6, s_4_44, 43, 2, 0}, +/* 45 */ { 6, s_4_45, 43, 1, 0} +}; + +static symbol s_5_0[2] = { 0xD1, 0x83 }; +static symbol s_5_1[4] = { 0xD1, 0x8F, 0xD1, 0x85 }; +static symbol s_5_2[6] = { 0xD0, 0xB8, 0xD1, 0x8F, 0xD1, 0x85 }; +static symbol s_5_3[4] = { 0xD0, 0xB0, 0xD1, 0x85 }; +static symbol s_5_4[2] = { 0xD1, 0x8B }; +static symbol s_5_5[2] = { 0xD1, 0x8C }; +static symbol s_5_6[2] = { 0xD1, 0x8E }; +static symbol s_5_7[4] = { 0xD1, 0x8C, 0xD1, 0x8E }; +static symbol s_5_8[4] = { 0xD0, 0xB8, 0xD1, 0x8E }; +static symbol s_5_9[2] = { 0xD1, 0x8F }; +static symbol s_5_10[4] = { 0xD1, 0x8C, 0xD1, 0x8F }; +static symbol s_5_11[4] = { 0xD0, 0xB8, 0xD1, 0x8F }; +static symbol s_5_12[2] = { 0xD0, 0xB0 }; +static symbol s_5_13[4] = { 0xD0, 0xB5, 0xD0, 0xB2 }; +static symbol s_5_14[4] = { 0xD0, 0xBE, 0xD0, 0xB2 }; +static symbol s_5_15[2] = { 0xD0, 0xB5 }; +static symbol s_5_16[4] = { 0xD1, 0x8C, 0xD0, 0xB5 }; +static symbol s_5_17[4] = { 0xD0, 0xB8, 0xD0, 0xB5 }; +static symbol s_5_18[2] = { 0xD0, 0xB8 }; +static symbol s_5_19[4] = { 0xD0, 0xB5, 0xD0, 0xB8 }; +static symbol s_5_20[4] = { 0xD0, 0xB8, 0xD0, 0xB8 }; +static symbol s_5_21[6] = { 0xD1, 0x8F, 0xD0, 0xBC, 0xD0, 0xB8 }; +static symbol s_5_22[8] = { 0xD0, 0xB8, 0xD1, 0x8F, 0xD0, 0xBC, 0xD0, 0xB8 }; +static symbol s_5_23[6] = { 0xD0, 0xB0, 0xD0, 0xBC, 0xD0, 0xB8 }; +static symbol s_5_24[2] = { 0xD0, 0xB9 }; +static symbol s_5_25[4] = { 0xD0, 0xB5, 0xD0, 0xB9 }; +static symbol s_5_26[6] = { 0xD0, 0xB8, 0xD0, 0xB5, 0xD0, 0xB9 }; +static symbol s_5_27[4] = { 0xD0, 0xB8, 0xD0, 0xB9 }; +static symbol s_5_28[4] = { 0xD0, 0xBE, 0xD0, 0xB9 }; +static symbol s_5_29[4] = { 0xD1, 0x8F, 0xD0, 0xBC }; +static symbol s_5_30[6] = { 0xD0, 0xB8, 0xD1, 0x8F, 0xD0, 0xBC }; +static symbol s_5_31[4] = { 0xD0, 0xB0, 0xD0, 0xBC }; +static symbol s_5_32[4] = { 0xD0, 0xB5, 0xD0, 0xBC }; +static symbol s_5_33[6] = { 0xD0, 0xB8, 0xD0, 0xB5, 0xD0, 0xBC }; +static symbol s_5_34[4] = { 0xD0, 0xBE, 0xD0, 0xBC }; +static symbol s_5_35[2] = { 0xD0, 0xBE }; + +static struct among a_5[36] = +{ +/* 0 */ { 2, s_5_0, -1, 1, 0}, +/* 1 */ { 4, s_5_1, -1, 1, 0}, +/* 2 */ { 6, s_5_2, 1, 1, 0}, +/* 3 */ { 4, s_5_3, -1, 1, 0}, +/* 4 */ { 2, s_5_4, -1, 1, 0}, +/* 5 */ { 2, s_5_5, -1, 1, 0}, +/* 6 */ { 2, s_5_6, -1, 1, 0}, +/* 7 */ { 4, s_5_7, 6, 1, 0}, +/* 8 */ { 4, s_5_8, 6, 1, 0}, +/* 9 */ { 2, s_5_9, -1, 1, 0}, +/* 10 */ { 4, s_5_10, 9, 1, 0}, +/* 11 */ { 4, s_5_11, 9, 1, 0}, +/* 12 */ { 2, s_5_12, -1, 1, 0}, +/* 13 */ { 4, s_5_13, -1, 1, 0}, +/* 14 */ { 4, s_5_14, -1, 1, 0}, +/* 15 */ { 2, s_5_15, -1, 1, 0}, +/* 16 */ { 4, s_5_16, 15, 1, 0}, +/* 17 */ { 4, s_5_17, 15, 1, 0}, +/* 18 */ { 2, s_5_18, -1, 1, 0}, +/* 19 */ { 4, s_5_19, 18, 1, 0}, +/* 20 */ { 4, s_5_20, 18, 1, 0}, +/* 21 */ { 6, s_5_21, 18, 1, 0}, +/* 22 */ { 8, s_5_22, 21, 1, 0}, +/* 23 */ { 6, s_5_23, 18, 1, 0}, +/* 24 */ { 2, s_5_24, -1, 1, 0}, +/* 25 */ { 4, s_5_25, 24, 1, 0}, +/* 26 */ { 6, s_5_26, 25, 1, 0}, +/* 27 */ { 4, s_5_27, 24, 1, 0}, +/* 28 */ { 4, s_5_28, 24, 1, 0}, +/* 29 */ { 4, s_5_29, -1, 1, 0}, +/* 30 */ { 6, s_5_30, 29, 1, 0}, +/* 31 */ { 4, s_5_31, -1, 1, 0}, +/* 32 */ { 4, s_5_32, -1, 1, 0}, +/* 33 */ { 6, s_5_33, 32, 1, 0}, +/* 34 */ { 4, s_5_34, -1, 1, 0}, +/* 35 */ { 2, s_5_35, -1, 1, 0} +}; + +static symbol s_6_0[6] = { 0xD0, 0xBE, 0xD1, 0x81, 0xD1, 0x82 }; +static symbol s_6_1[8] = { 0xD0, 0xBE, 0xD1, 0x81, 0xD1, 0x82, 0xD1, 0x8C }; + +static struct among a_6[2] = +{ +/* 0 */ { 6, s_6_0, -1, 1, 0}, +/* 1 */ { 8, s_6_1, -1, 1, 0} +}; + +static symbol s_7_0[6] = { 0xD0, 0xB5, 0xD0, 0xB9, 0xD1, 0x88 }; +static symbol s_7_1[2] = { 0xD1, 0x8C }; +static symbol s_7_2[8] = { 0xD0, 0xB5, 0xD0, 0xB9, 0xD1, 0x88, 0xD0, 0xB5 }; +static symbol s_7_3[2] = { 0xD0, 0xBD }; + +static struct among a_7[4] = +{ +/* 0 */ { 6, s_7_0, -1, 1, 0}, +/* 1 */ { 2, s_7_1, -1, 3, 0}, +/* 2 */ { 8, s_7_2, -1, 1, 0}, +/* 3 */ { 2, s_7_3, -1, 2, 0} +}; + +static unsigned char g_v[] = { 33, 65, 8, 232 }; + +static symbol s_0[] = { 0xD0, 0xB0 }; +static symbol s_1[] = { 0xD1, 0x8F }; +static symbol s_2[] = { 0xD0, 0xB0 }; +static symbol s_3[] = { 0xD1, 0x8F }; +static symbol s_4[] = { 0xD0, 0xB0 }; +static symbol s_5[] = { 0xD1, 0x8F }; +static symbol s_6[] = { 0xD0, 0xBD }; +static symbol s_7[] = { 0xD0, 0xBD }; +static symbol s_8[] = { 0xD0, 0xBD }; +static symbol s_9[] = { 0xD0, 0xB8 }; + +static int r_mark_regions(struct SN_env * z) { + z->I[0] = z->l; + z->I[1] = z->l; + { int c = z->c; /* do, line 61 */ + while(1) { /* gopast, line 62 */ + if (!(in_grouping_U(z, g_v, 1072, 1103))) goto lab1; + break; + lab1: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab0; + z->c = c; /* gopast, line 62 */ + } + } + z->I[0] = z->c; /* setmark pV, line 62 */ + while(1) { /* gopast, line 62 */ + if (!(out_grouping_U(z, g_v, 1072, 1103))) goto lab2; + break; + lab2: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab0; + z->c = c; /* gopast, line 62 */ + } + } + while(1) { /* gopast, line 63 */ + if (!(in_grouping_U(z, g_v, 1072, 1103))) goto lab3; + break; + lab3: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab0; + z->c = c; /* gopast, line 63 */ + } + } + while(1) { /* gopast, line 63 */ + if (!(out_grouping_U(z, g_v, 1072, 1103))) goto lab4; + break; + lab4: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab0; + z->c = c; /* gopast, line 63 */ + } + } + z->I[1] = z->c; /* setmark p2, line 63 */ + lab0: + z->c = c; + } + return 1; +} + +static int r_R2(struct SN_env * z) { + if (!(z->I[1] <= z->c)) return 0; + return 1; +} + +static int r_perfective_gerund(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 72 */ + among_var = find_among_b(z, a_0, 9); /* substring, line 72 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 72 */ + switch(among_var) { + case 0: return 0; + case 1: + { int m = z->l - z->c; (void) m; /* or, line 76 */ + if (!(eq_s_b(z, 2, s_0))) goto lab1; + goto lab0; + lab1: + z->c = z->l - m; + if (!(eq_s_b(z, 2, s_1))) return 0; + } + lab0: + { int ret; + ret = slice_del(z); /* delete, line 76 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_del(z); /* delete, line 83 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_adjective(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 88 */ + among_var = find_among_b(z, a_1, 26); /* substring, line 88 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 88 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 97 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_adjectival(struct SN_env * z) { + int among_var; + { int ret = r_adjective(z); + if (ret == 0) return 0; /* call adjective, line 102 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 109 */ + z->ket = z->c; /* [, line 110 */ + among_var = find_among_b(z, a_2, 8); /* substring, line 110 */ + if (!(among_var)) { z->c = z->l - m; goto lab0; } + z->bra = z->c; /* ], line 110 */ + switch(among_var) { + case 0: { z->c = z->l - m; goto lab0; } + case 1: + { int m = z->l - z->c; (void) m; /* or, line 115 */ + if (!(eq_s_b(z, 2, s_2))) goto lab2; + goto lab1; + lab2: + z->c = z->l - m; + if (!(eq_s_b(z, 2, s_3))) { z->c = z->l - m; goto lab0; } + } + lab1: + { int ret; + ret = slice_del(z); /* delete, line 115 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_del(z); /* delete, line 122 */ + if (ret < 0) return ret; + } + break; + } + lab0: + ; + } + return 1; +} + +static int r_reflexive(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 129 */ + among_var = find_among_b(z, a_3, 2); /* substring, line 129 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 129 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 132 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_verb(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 137 */ + among_var = find_among_b(z, a_4, 46); /* substring, line 137 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 137 */ + switch(among_var) { + case 0: return 0; + case 1: + { int m = z->l - z->c; (void) m; /* or, line 143 */ + if (!(eq_s_b(z, 2, s_4))) goto lab1; + goto lab0; + lab1: + z->c = z->l - m; + if (!(eq_s_b(z, 2, s_5))) return 0; + } + lab0: + { int ret; + ret = slice_del(z); /* delete, line 143 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_del(z); /* delete, line 151 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_noun(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 160 */ + among_var = find_among_b(z, a_5, 36); /* substring, line 160 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 160 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 167 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_derivational(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 176 */ + among_var = find_among_b(z, a_6, 2); /* substring, line 176 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 176 */ + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 176 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 179 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_tidy_up(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 184 */ + among_var = find_among_b(z, a_7, 4); /* substring, line 184 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 184 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 188 */ + if (ret < 0) return ret; + } + z->ket = z->c; /* [, line 189 */ + if (!(eq_s_b(z, 2, s_6))) return 0; + z->bra = z->c; /* ], line 189 */ + if (!(eq_s_b(z, 2, s_7))) return 0; + { int ret; + ret = slice_del(z); /* delete, line 189 */ + if (ret < 0) return ret; + } + break; + case 2: + if (!(eq_s_b(z, 2, s_8))) return 0; + { int ret; + ret = slice_del(z); /* delete, line 192 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_del(z); /* delete, line 194 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +extern int russian_UTF_8_stem(struct SN_env * z) { + { int c = z->c; /* do, line 201 */ + { int ret = r_mark_regions(z); + if (ret == 0) goto lab0; /* call mark_regions, line 201 */ + if (ret < 0) return ret; + } + lab0: + z->c = c; + } + z->lb = z->c; z->c = z->l; /* backwards, line 202 */ + + { int m3; /* setlimit, line 202 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 202 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + { int m = z->l - z->c; (void) m; /* do, line 203 */ + { int m = z->l - z->c; (void) m; /* or, line 204 */ + { int ret = r_perfective_gerund(z); + if (ret == 0) goto lab3; /* call perfective_gerund, line 204 */ + if (ret < 0) return ret; + } + goto lab2; + lab3: + z->c = z->l - m; + { int m = z->l - z->c; (void) m; /* try, line 205 */ + { int ret = r_reflexive(z); + if (ret == 0) { z->c = z->l - m; goto lab4; } /* call reflexive, line 205 */ + if (ret < 0) return ret; + } + lab4: + ; + } + { int m = z->l - z->c; (void) m; /* or, line 206 */ + { int ret = r_adjectival(z); + if (ret == 0) goto lab6; /* call adjectival, line 206 */ + if (ret < 0) return ret; + } + goto lab5; + lab6: + z->c = z->l - m; + { int ret = r_verb(z); + if (ret == 0) goto lab7; /* call verb, line 206 */ + if (ret < 0) return ret; + } + goto lab5; + lab7: + z->c = z->l - m; + { int ret = r_noun(z); + if (ret == 0) goto lab1; /* call noun, line 206 */ + if (ret < 0) return ret; + } + } + lab5: + ; + } + lab2: + lab1: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* try, line 209 */ + z->ket = z->c; /* [, line 209 */ + if (!(eq_s_b(z, 2, s_9))) { z->c = z->l - m; goto lab8; } + z->bra = z->c; /* ], line 209 */ + { int ret; + ret = slice_del(z); /* delete, line 209 */ + if (ret < 0) return ret; + } + lab8: + ; + } + { int m = z->l - z->c; (void) m; /* do, line 212 */ + { int ret = r_derivational(z); + if (ret == 0) goto lab9; /* call derivational, line 212 */ + if (ret < 0) return ret; + } + lab9: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 213 */ + { int ret = r_tidy_up(z); + if (ret == 0) goto lab10; /* call tidy_up, line 213 */ + if (ret < 0) return ret; + } + lab10: + z->c = z->l - m; + } + z->lb = m3; + } + z->c = z->lb; + return 1; +} + +extern struct SN_env * russian_UTF_8_create_env(void) { return SN_create_env(0, 2, 0); } + +extern void russian_UTF_8_close_env(struct SN_env * z) { SN_close_env(z); } + diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_russian.h b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_russian.h new file mode 100644 index 0000000..4ef774d --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_russian.h @@ -0,0 +1,16 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern struct SN_env * russian_UTF_8_create_env(void); +extern void russian_UTF_8_close_env(struct SN_env * z); + +extern int russian_UTF_8_stem(struct SN_env * z); + +#ifdef __cplusplus +} +#endif + diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_spanish.c b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_spanish.c new file mode 100644 index 0000000..77771ba --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_spanish.c @@ -0,0 +1,1137 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#include "../runtime/header.h" + +extern int spanish_UTF_8_stem(struct SN_env * z); +static int r_residual_suffix(struct SN_env * z); +static int r_verb_suffix(struct SN_env * z); +static int r_y_verb_suffix(struct SN_env * z); +static int r_standard_suffix(struct SN_env * z); +static int r_attached_pronoun(struct SN_env * z); +static int r_R2(struct SN_env * z); +static int r_R1(struct SN_env * z); +static int r_RV(struct SN_env * z); +static int r_mark_regions(struct SN_env * z); +static int r_postlude(struct SN_env * z); + +extern struct SN_env * spanish_UTF_8_create_env(void); +extern void spanish_UTF_8_close_env(struct SN_env * z); + +static symbol s_0_1[2] = { 0xC3, 0xA1 }; +static symbol s_0_2[2] = { 0xC3, 0xA9 }; +static symbol s_0_3[2] = { 0xC3, 0xAD }; +static symbol s_0_4[2] = { 0xC3, 0xB3 }; +static symbol s_0_5[2] = { 0xC3, 0xBA }; + +static struct among a_0[6] = +{ +/* 0 */ { 0, 0, -1, 6, 0}, +/* 1 */ { 2, s_0_1, 0, 1, 0}, +/* 2 */ { 2, s_0_2, 0, 2, 0}, +/* 3 */ { 2, s_0_3, 0, 3, 0}, +/* 4 */ { 2, s_0_4, 0, 4, 0}, +/* 5 */ { 2, s_0_5, 0, 5, 0} +}; + +static symbol s_1_0[2] = { 'l', 'a' }; +static symbol s_1_1[4] = { 's', 'e', 'l', 'a' }; +static symbol s_1_2[2] = { 'l', 'e' }; +static symbol s_1_3[2] = { 'm', 'e' }; +static symbol s_1_4[2] = { 's', 'e' }; +static symbol s_1_5[2] = { 'l', 'o' }; +static symbol s_1_6[4] = { 's', 'e', 'l', 'o' }; +static symbol s_1_7[3] = { 'l', 'a', 's' }; +static symbol s_1_8[5] = { 's', 'e', 'l', 'a', 's' }; +static symbol s_1_9[3] = { 'l', 'e', 's' }; +static symbol s_1_10[3] = { 'l', 'o', 's' }; +static symbol s_1_11[5] = { 's', 'e', 'l', 'o', 's' }; +static symbol s_1_12[3] = { 'n', 'o', 's' }; + +static struct among a_1[13] = +{ +/* 0 */ { 2, s_1_0, -1, -1, 0}, +/* 1 */ { 4, s_1_1, 0, -1, 0}, +/* 2 */ { 2, s_1_2, -1, -1, 0}, +/* 3 */ { 2, s_1_3, -1, -1, 0}, +/* 4 */ { 2, s_1_4, -1, -1, 0}, +/* 5 */ { 2, s_1_5, -1, -1, 0}, +/* 6 */ { 4, s_1_6, 5, -1, 0}, +/* 7 */ { 3, s_1_7, -1, -1, 0}, +/* 8 */ { 5, s_1_8, 7, -1, 0}, +/* 9 */ { 3, s_1_9, -1, -1, 0}, +/* 10 */ { 3, s_1_10, -1, -1, 0}, +/* 11 */ { 5, s_1_11, 10, -1, 0}, +/* 12 */ { 3, s_1_12, -1, -1, 0} +}; + +static symbol s_2_0[4] = { 'a', 'n', 'd', 'o' }; +static symbol s_2_1[5] = { 'i', 'e', 'n', 'd', 'o' }; +static symbol s_2_2[5] = { 'y', 'e', 'n', 'd', 'o' }; +static symbol s_2_3[5] = { 0xC3, 0xA1, 'n', 'd', 'o' }; +static symbol s_2_4[6] = { 'i', 0xC3, 0xA9, 'n', 'd', 'o' }; +static symbol s_2_5[2] = { 'a', 'r' }; +static symbol s_2_6[2] = { 'e', 'r' }; +static symbol s_2_7[2] = { 'i', 'r' }; +static symbol s_2_8[3] = { 0xC3, 0xA1, 'r' }; +static symbol s_2_9[3] = { 0xC3, 0xA9, 'r' }; +static symbol s_2_10[3] = { 0xC3, 0xAD, 'r' }; + +static struct among a_2[11] = +{ +/* 0 */ { 4, s_2_0, -1, 6, 0}, +/* 1 */ { 5, s_2_1, -1, 6, 0}, +/* 2 */ { 5, s_2_2, -1, 7, 0}, +/* 3 */ { 5, s_2_3, -1, 2, 0}, +/* 4 */ { 6, s_2_4, -1, 1, 0}, +/* 5 */ { 2, s_2_5, -1, 6, 0}, +/* 6 */ { 2, s_2_6, -1, 6, 0}, +/* 7 */ { 2, s_2_7, -1, 6, 0}, +/* 8 */ { 3, s_2_8, -1, 3, 0}, +/* 9 */ { 3, s_2_9, -1, 4, 0}, +/* 10 */ { 3, s_2_10, -1, 5, 0} +}; + +static symbol s_3_0[2] = { 'i', 'c' }; +static symbol s_3_1[2] = { 'a', 'd' }; +static symbol s_3_2[2] = { 'o', 's' }; +static symbol s_3_3[2] = { 'i', 'v' }; + +static struct among a_3[4] = +{ +/* 0 */ { 2, s_3_0, -1, -1, 0}, +/* 1 */ { 2, s_3_1, -1, -1, 0}, +/* 2 */ { 2, s_3_2, -1, -1, 0}, +/* 3 */ { 2, s_3_3, -1, 1, 0} +}; + +static symbol s_4_0[4] = { 'a', 'b', 'l', 'e' }; +static symbol s_4_1[4] = { 'i', 'b', 'l', 'e' }; +static symbol s_4_2[4] = { 'a', 'n', 't', 'e' }; + +static struct among a_4[3] = +{ +/* 0 */ { 4, s_4_0, -1, 1, 0}, +/* 1 */ { 4, s_4_1, -1, 1, 0}, +/* 2 */ { 4, s_4_2, -1, 1, 0} +}; + +static symbol s_5_0[2] = { 'i', 'c' }; +static symbol s_5_1[4] = { 'a', 'b', 'i', 'l' }; +static symbol s_5_2[2] = { 'i', 'v' }; + +static struct among a_5[3] = +{ +/* 0 */ { 2, s_5_0, -1, 1, 0}, +/* 1 */ { 4, s_5_1, -1, 1, 0}, +/* 2 */ { 2, s_5_2, -1, 1, 0} +}; + +static symbol s_6_0[3] = { 'i', 'c', 'a' }; +static symbol s_6_1[5] = { 'a', 'n', 'c', 'i', 'a' }; +static symbol s_6_2[5] = { 'e', 'n', 'c', 'i', 'a' }; +static symbol s_6_3[5] = { 'a', 'd', 'o', 'r', 'a' }; +static symbol s_6_4[3] = { 'o', 's', 'a' }; +static symbol s_6_5[4] = { 'i', 's', 't', 'a' }; +static symbol s_6_6[3] = { 'i', 'v', 'a' }; +static symbol s_6_7[4] = { 'a', 'n', 'z', 'a' }; +static symbol s_6_8[6] = { 'l', 'o', 'g', 0xC3, 0xAD, 'a' }; +static symbol s_6_9[4] = { 'i', 'd', 'a', 'd' }; +static symbol s_6_10[4] = { 'a', 'b', 'l', 'e' }; +static symbol s_6_11[4] = { 'i', 'b', 'l', 'e' }; +static symbol s_6_12[4] = { 'a', 'n', 't', 'e' }; +static symbol s_6_13[5] = { 'm', 'e', 'n', 't', 'e' }; +static symbol s_6_14[6] = { 'a', 'm', 'e', 'n', 't', 'e' }; +static symbol s_6_15[6] = { 'a', 'c', 'i', 0xC3, 0xB3, 'n' }; +static symbol s_6_16[6] = { 'u', 'c', 'i', 0xC3, 0xB3, 'n' }; +static symbol s_6_17[3] = { 'i', 'c', 'o' }; +static symbol s_6_18[4] = { 'i', 's', 'm', 'o' }; +static symbol s_6_19[3] = { 'o', 's', 'o' }; +static symbol s_6_20[7] = { 'a', 'm', 'i', 'e', 'n', 't', 'o' }; +static symbol s_6_21[7] = { 'i', 'm', 'i', 'e', 'n', 't', 'o' }; +static symbol s_6_22[3] = { 'i', 'v', 'o' }; +static symbol s_6_23[4] = { 'a', 'd', 'o', 'r' }; +static symbol s_6_24[4] = { 'i', 'c', 'a', 's' }; +static symbol s_6_25[6] = { 'a', 'n', 'c', 'i', 'a', 's' }; +static symbol s_6_26[6] = { 'e', 'n', 'c', 'i', 'a', 's' }; +static symbol s_6_27[6] = { 'a', 'd', 'o', 'r', 'a', 's' }; +static symbol s_6_28[4] = { 'o', 's', 'a', 's' }; +static symbol s_6_29[5] = { 'i', 's', 't', 'a', 's' }; +static symbol s_6_30[4] = { 'i', 'v', 'a', 's' }; +static symbol s_6_31[5] = { 'a', 'n', 'z', 'a', 's' }; +static symbol s_6_32[7] = { 'l', 'o', 'g', 0xC3, 0xAD, 'a', 's' }; +static symbol s_6_33[6] = { 'i', 'd', 'a', 'd', 'e', 's' }; +static symbol s_6_34[5] = { 'a', 'b', 'l', 'e', 's' }; +static symbol s_6_35[5] = { 'i', 'b', 'l', 'e', 's' }; +static symbol s_6_36[7] = { 'a', 'c', 'i', 'o', 'n', 'e', 's' }; +static symbol s_6_37[7] = { 'u', 'c', 'i', 'o', 'n', 'e', 's' }; +static symbol s_6_38[6] = { 'a', 'd', 'o', 'r', 'e', 's' }; +static symbol s_6_39[5] = { 'a', 'n', 't', 'e', 's' }; +static symbol s_6_40[4] = { 'i', 'c', 'o', 's' }; +static symbol s_6_41[5] = { 'i', 's', 'm', 'o', 's' }; +static symbol s_6_42[4] = { 'o', 's', 'o', 's' }; +static symbol s_6_43[8] = { 'a', 'm', 'i', 'e', 'n', 't', 'o', 's' }; +static symbol s_6_44[8] = { 'i', 'm', 'i', 'e', 'n', 't', 'o', 's' }; +static symbol s_6_45[4] = { 'i', 'v', 'o', 's' }; + +static struct among a_6[46] = +{ +/* 0 */ { 3, s_6_0, -1, 1, 0}, +/* 1 */ { 5, s_6_1, -1, 2, 0}, +/* 2 */ { 5, s_6_2, -1, 5, 0}, +/* 3 */ { 5, s_6_3, -1, 2, 0}, +/* 4 */ { 3, s_6_4, -1, 1, 0}, +/* 5 */ { 4, s_6_5, -1, 1, 0}, +/* 6 */ { 3, s_6_6, -1, 9, 0}, +/* 7 */ { 4, s_6_7, -1, 1, 0}, +/* 8 */ { 6, s_6_8, -1, 3, 0}, +/* 9 */ { 4, s_6_9, -1, 8, 0}, +/* 10 */ { 4, s_6_10, -1, 1, 0}, +/* 11 */ { 4, s_6_11, -1, 1, 0}, +/* 12 */ { 4, s_6_12, -1, 2, 0}, +/* 13 */ { 5, s_6_13, -1, 7, 0}, +/* 14 */ { 6, s_6_14, 13, 6, 0}, +/* 15 */ { 6, s_6_15, -1, 2, 0}, +/* 16 */ { 6, s_6_16, -1, 4, 0}, +/* 17 */ { 3, s_6_17, -1, 1, 0}, +/* 18 */ { 4, s_6_18, -1, 1, 0}, +/* 19 */ { 3, s_6_19, -1, 1, 0}, +/* 20 */ { 7, s_6_20, -1, 1, 0}, +/* 21 */ { 7, s_6_21, -1, 1, 0}, +/* 22 */ { 3, s_6_22, -1, 9, 0}, +/* 23 */ { 4, s_6_23, -1, 2, 0}, +/* 24 */ { 4, s_6_24, -1, 1, 0}, +/* 25 */ { 6, s_6_25, -1, 2, 0}, +/* 26 */ { 6, s_6_26, -1, 5, 0}, +/* 27 */ { 6, s_6_27, -1, 2, 0}, +/* 28 */ { 4, s_6_28, -1, 1, 0}, +/* 29 */ { 5, s_6_29, -1, 1, 0}, +/* 30 */ { 4, s_6_30, -1, 9, 0}, +/* 31 */ { 5, s_6_31, -1, 1, 0}, +/* 32 */ { 7, s_6_32, -1, 3, 0}, +/* 33 */ { 6, s_6_33, -1, 8, 0}, +/* 34 */ { 5, s_6_34, -1, 1, 0}, +/* 35 */ { 5, s_6_35, -1, 1, 0}, +/* 36 */ { 7, s_6_36, -1, 2, 0}, +/* 37 */ { 7, s_6_37, -1, 4, 0}, +/* 38 */ { 6, s_6_38, -1, 2, 0}, +/* 39 */ { 5, s_6_39, -1, 2, 0}, +/* 40 */ { 4, s_6_40, -1, 1, 0}, +/* 41 */ { 5, s_6_41, -1, 1, 0}, +/* 42 */ { 4, s_6_42, -1, 1, 0}, +/* 43 */ { 8, s_6_43, -1, 1, 0}, +/* 44 */ { 8, s_6_44, -1, 1, 0}, +/* 45 */ { 4, s_6_45, -1, 9, 0} +}; + +static symbol s_7_0[2] = { 'y', 'a' }; +static symbol s_7_1[2] = { 'y', 'e' }; +static symbol s_7_2[3] = { 'y', 'a', 'n' }; +static symbol s_7_3[3] = { 'y', 'e', 'n' }; +static symbol s_7_4[5] = { 'y', 'e', 'r', 'o', 'n' }; +static symbol s_7_5[5] = { 'y', 'e', 'n', 'd', 'o' }; +static symbol s_7_6[2] = { 'y', 'o' }; +static symbol s_7_7[3] = { 'y', 'a', 's' }; +static symbol s_7_8[3] = { 'y', 'e', 's' }; +static symbol s_7_9[4] = { 'y', 'a', 'i', 's' }; +static symbol s_7_10[5] = { 'y', 'a', 'm', 'o', 's' }; +static symbol s_7_11[3] = { 'y', 0xC3, 0xB3 }; + +static struct among a_7[12] = +{ +/* 0 */ { 2, s_7_0, -1, 1, 0}, +/* 1 */ { 2, s_7_1, -1, 1, 0}, +/* 2 */ { 3, s_7_2, -1, 1, 0}, +/* 3 */ { 3, s_7_3, -1, 1, 0}, +/* 4 */ { 5, s_7_4, -1, 1, 0}, +/* 5 */ { 5, s_7_5, -1, 1, 0}, +/* 6 */ { 2, s_7_6, -1, 1, 0}, +/* 7 */ { 3, s_7_7, -1, 1, 0}, +/* 8 */ { 3, s_7_8, -1, 1, 0}, +/* 9 */ { 4, s_7_9, -1, 1, 0}, +/* 10 */ { 5, s_7_10, -1, 1, 0}, +/* 11 */ { 3, s_7_11, -1, 1, 0} +}; + +static symbol s_8_0[3] = { 'a', 'b', 'a' }; +static symbol s_8_1[3] = { 'a', 'd', 'a' }; +static symbol s_8_2[3] = { 'i', 'd', 'a' }; +static symbol s_8_3[3] = { 'a', 'r', 'a' }; +static symbol s_8_4[4] = { 'i', 'e', 'r', 'a' }; +static symbol s_8_5[3] = { 0xC3, 0xAD, 'a' }; +static symbol s_8_6[5] = { 'a', 'r', 0xC3, 0xAD, 'a' }; +static symbol s_8_7[5] = { 'e', 'r', 0xC3, 0xAD, 'a' }; +static symbol s_8_8[5] = { 'i', 'r', 0xC3, 0xAD, 'a' }; +static symbol s_8_9[2] = { 'a', 'd' }; +static symbol s_8_10[2] = { 'e', 'd' }; +static symbol s_8_11[2] = { 'i', 'd' }; +static symbol s_8_12[3] = { 'a', 's', 'e' }; +static symbol s_8_13[4] = { 'i', 'e', 's', 'e' }; +static symbol s_8_14[4] = { 'a', 's', 't', 'e' }; +static symbol s_8_15[4] = { 'i', 's', 't', 'e' }; +static symbol s_8_16[2] = { 'a', 'n' }; +static symbol s_8_17[4] = { 'a', 'b', 'a', 'n' }; +static symbol s_8_18[4] = { 'a', 'r', 'a', 'n' }; +static symbol s_8_19[5] = { 'i', 'e', 'r', 'a', 'n' }; +static symbol s_8_20[4] = { 0xC3, 0xAD, 'a', 'n' }; +static symbol s_8_21[6] = { 'a', 'r', 0xC3, 0xAD, 'a', 'n' }; +static symbol s_8_22[6] = { 'e', 'r', 0xC3, 0xAD, 'a', 'n' }; +static symbol s_8_23[6] = { 'i', 'r', 0xC3, 0xAD, 'a', 'n' }; +static symbol s_8_24[2] = { 'e', 'n' }; +static symbol s_8_25[4] = { 'a', 's', 'e', 'n' }; +static symbol s_8_26[5] = { 'i', 'e', 's', 'e', 'n' }; +static symbol s_8_27[4] = { 'a', 'r', 'o', 'n' }; +static symbol s_8_28[5] = { 'i', 'e', 'r', 'o', 'n' }; +static symbol s_8_29[5] = { 'a', 'r', 0xC3, 0xA1, 'n' }; +static symbol s_8_30[5] = { 'e', 'r', 0xC3, 0xA1, 'n' }; +static symbol s_8_31[5] = { 'i', 'r', 0xC3, 0xA1, 'n' }; +static symbol s_8_32[3] = { 'a', 'd', 'o' }; +static symbol s_8_33[3] = { 'i', 'd', 'o' }; +static symbol s_8_34[4] = { 'a', 'n', 'd', 'o' }; +static symbol s_8_35[5] = { 'i', 'e', 'n', 'd', 'o' }; +static symbol s_8_36[2] = { 'a', 'r' }; +static symbol s_8_37[2] = { 'e', 'r' }; +static symbol s_8_38[2] = { 'i', 'r' }; +static symbol s_8_39[2] = { 'a', 's' }; +static symbol s_8_40[4] = { 'a', 'b', 'a', 's' }; +static symbol s_8_41[4] = { 'a', 'd', 'a', 's' }; +static symbol s_8_42[4] = { 'i', 'd', 'a', 's' }; +static symbol s_8_43[4] = { 'a', 'r', 'a', 's' }; +static symbol s_8_44[5] = { 'i', 'e', 'r', 'a', 's' }; +static symbol s_8_45[4] = { 0xC3, 0xAD, 'a', 's' }; +static symbol s_8_46[6] = { 'a', 'r', 0xC3, 0xAD, 'a', 's' }; +static symbol s_8_47[6] = { 'e', 'r', 0xC3, 0xAD, 'a', 's' }; +static symbol s_8_48[6] = { 'i', 'r', 0xC3, 0xAD, 'a', 's' }; +static symbol s_8_49[2] = { 'e', 's' }; +static symbol s_8_50[4] = { 'a', 's', 'e', 's' }; +static symbol s_8_51[5] = { 'i', 'e', 's', 'e', 's' }; +static symbol s_8_52[5] = { 'a', 'b', 'a', 'i', 's' }; +static symbol s_8_53[5] = { 'a', 'r', 'a', 'i', 's' }; +static symbol s_8_54[6] = { 'i', 'e', 'r', 'a', 'i', 's' }; +static symbol s_8_55[5] = { 0xC3, 0xAD, 'a', 'i', 's' }; +static symbol s_8_56[7] = { 'a', 'r', 0xC3, 0xAD, 'a', 'i', 's' }; +static symbol s_8_57[7] = { 'e', 'r', 0xC3, 0xAD, 'a', 'i', 's' }; +static symbol s_8_58[7] = { 'i', 'r', 0xC3, 0xAD, 'a', 'i', 's' }; +static symbol s_8_59[5] = { 'a', 's', 'e', 'i', 's' }; +static symbol s_8_60[6] = { 'i', 'e', 's', 'e', 'i', 's' }; +static symbol s_8_61[6] = { 'a', 's', 't', 'e', 'i', 's' }; +static symbol s_8_62[6] = { 'i', 's', 't', 'e', 'i', 's' }; +static symbol s_8_63[4] = { 0xC3, 0xA1, 'i', 's' }; +static symbol s_8_64[4] = { 0xC3, 0xA9, 'i', 's' }; +static symbol s_8_65[6] = { 'a', 'r', 0xC3, 0xA9, 'i', 's' }; +static symbol s_8_66[6] = { 'e', 'r', 0xC3, 0xA9, 'i', 's' }; +static symbol s_8_67[6] = { 'i', 'r', 0xC3, 0xA9, 'i', 's' }; +static symbol s_8_68[4] = { 'a', 'd', 'o', 's' }; +static symbol s_8_69[4] = { 'i', 'd', 'o', 's' }; +static symbol s_8_70[4] = { 'a', 'm', 'o', 's' }; +static symbol s_8_71[7] = { 0xC3, 0xA1, 'b', 'a', 'm', 'o', 's' }; +static symbol s_8_72[7] = { 0xC3, 0xA1, 'r', 'a', 'm', 'o', 's' }; +static symbol s_8_73[8] = { 'i', 0xC3, 0xA9, 'r', 'a', 'm', 'o', 's' }; +static symbol s_8_74[6] = { 0xC3, 0xAD, 'a', 'm', 'o', 's' }; +static symbol s_8_75[8] = { 'a', 'r', 0xC3, 0xAD, 'a', 'm', 'o', 's' }; +static symbol s_8_76[8] = { 'e', 'r', 0xC3, 0xAD, 'a', 'm', 'o', 's' }; +static symbol s_8_77[8] = { 'i', 'r', 0xC3, 0xAD, 'a', 'm', 'o', 's' }; +static symbol s_8_78[4] = { 'e', 'm', 'o', 's' }; +static symbol s_8_79[6] = { 'a', 'r', 'e', 'm', 'o', 's' }; +static symbol s_8_80[6] = { 'e', 'r', 'e', 'm', 'o', 's' }; +static symbol s_8_81[6] = { 'i', 'r', 'e', 'm', 'o', 's' }; +static symbol s_8_82[7] = { 0xC3, 0xA1, 's', 'e', 'm', 'o', 's' }; +static symbol s_8_83[8] = { 'i', 0xC3, 0xA9, 's', 'e', 'm', 'o', 's' }; +static symbol s_8_84[4] = { 'i', 'm', 'o', 's' }; +static symbol s_8_85[5] = { 'a', 'r', 0xC3, 0xA1, 's' }; +static symbol s_8_86[5] = { 'e', 'r', 0xC3, 0xA1, 's' }; +static symbol s_8_87[5] = { 'i', 'r', 0xC3, 0xA1, 's' }; +static symbol s_8_88[3] = { 0xC3, 0xAD, 's' }; +static symbol s_8_89[4] = { 'a', 'r', 0xC3, 0xA1 }; +static symbol s_8_90[4] = { 'e', 'r', 0xC3, 0xA1 }; +static symbol s_8_91[4] = { 'i', 'r', 0xC3, 0xA1 }; +static symbol s_8_92[4] = { 'a', 'r', 0xC3, 0xA9 }; +static symbol s_8_93[4] = { 'e', 'r', 0xC3, 0xA9 }; +static symbol s_8_94[4] = { 'i', 'r', 0xC3, 0xA9 }; +static symbol s_8_95[3] = { 'i', 0xC3, 0xB3 }; + +static struct among a_8[96] = +{ +/* 0 */ { 3, s_8_0, -1, 2, 0}, +/* 1 */ { 3, s_8_1, -1, 2, 0}, +/* 2 */ { 3, s_8_2, -1, 2, 0}, +/* 3 */ { 3, s_8_3, -1, 2, 0}, +/* 4 */ { 4, s_8_4, -1, 2, 0}, +/* 5 */ { 3, s_8_5, -1, 2, 0}, +/* 6 */ { 5, s_8_6, 5, 2, 0}, +/* 7 */ { 5, s_8_7, 5, 2, 0}, +/* 8 */ { 5, s_8_8, 5, 2, 0}, +/* 9 */ { 2, s_8_9, -1, 2, 0}, +/* 10 */ { 2, s_8_10, -1, 2, 0}, +/* 11 */ { 2, s_8_11, -1, 2, 0}, +/* 12 */ { 3, s_8_12, -1, 2, 0}, +/* 13 */ { 4, s_8_13, -1, 2, 0}, +/* 14 */ { 4, s_8_14, -1, 2, 0}, +/* 15 */ { 4, s_8_15, -1, 2, 0}, +/* 16 */ { 2, s_8_16, -1, 2, 0}, +/* 17 */ { 4, s_8_17, 16, 2, 0}, +/* 18 */ { 4, s_8_18, 16, 2, 0}, +/* 19 */ { 5, s_8_19, 16, 2, 0}, +/* 20 */ { 4, s_8_20, 16, 2, 0}, +/* 21 */ { 6, s_8_21, 20, 2, 0}, +/* 22 */ { 6, s_8_22, 20, 2, 0}, +/* 23 */ { 6, s_8_23, 20, 2, 0}, +/* 24 */ { 2, s_8_24, -1, 1, 0}, +/* 25 */ { 4, s_8_25, 24, 2, 0}, +/* 26 */ { 5, s_8_26, 24, 2, 0}, +/* 27 */ { 4, s_8_27, -1, 2, 0}, +/* 28 */ { 5, s_8_28, -1, 2, 0}, +/* 29 */ { 5, s_8_29, -1, 2, 0}, +/* 30 */ { 5, s_8_30, -1, 2, 0}, +/* 31 */ { 5, s_8_31, -1, 2, 0}, +/* 32 */ { 3, s_8_32, -1, 2, 0}, +/* 33 */ { 3, s_8_33, -1, 2, 0}, +/* 34 */ { 4, s_8_34, -1, 2, 0}, +/* 35 */ { 5, s_8_35, -1, 2, 0}, +/* 36 */ { 2, s_8_36, -1, 2, 0}, +/* 37 */ { 2, s_8_37, -1, 2, 0}, +/* 38 */ { 2, s_8_38, -1, 2, 0}, +/* 39 */ { 2, s_8_39, -1, 2, 0}, +/* 40 */ { 4, s_8_40, 39, 2, 0}, +/* 41 */ { 4, s_8_41, 39, 2, 0}, +/* 42 */ { 4, s_8_42, 39, 2, 0}, +/* 43 */ { 4, s_8_43, 39, 2, 0}, +/* 44 */ { 5, s_8_44, 39, 2, 0}, +/* 45 */ { 4, s_8_45, 39, 2, 0}, +/* 46 */ { 6, s_8_46, 45, 2, 0}, +/* 47 */ { 6, s_8_47, 45, 2, 0}, +/* 48 */ { 6, s_8_48, 45, 2, 0}, +/* 49 */ { 2, s_8_49, -1, 1, 0}, +/* 50 */ { 4, s_8_50, 49, 2, 0}, +/* 51 */ { 5, s_8_51, 49, 2, 0}, +/* 52 */ { 5, s_8_52, -1, 2, 0}, +/* 53 */ { 5, s_8_53, -1, 2, 0}, +/* 54 */ { 6, s_8_54, -1, 2, 0}, +/* 55 */ { 5, s_8_55, -1, 2, 0}, +/* 56 */ { 7, s_8_56, 55, 2, 0}, +/* 57 */ { 7, s_8_57, 55, 2, 0}, +/* 58 */ { 7, s_8_58, 55, 2, 0}, +/* 59 */ { 5, s_8_59, -1, 2, 0}, +/* 60 */ { 6, s_8_60, -1, 2, 0}, +/* 61 */ { 6, s_8_61, -1, 2, 0}, +/* 62 */ { 6, s_8_62, -1, 2, 0}, +/* 63 */ { 4, s_8_63, -1, 2, 0}, +/* 64 */ { 4, s_8_64, -1, 1, 0}, +/* 65 */ { 6, s_8_65, 64, 2, 0}, +/* 66 */ { 6, s_8_66, 64, 2, 0}, +/* 67 */ { 6, s_8_67, 64, 2, 0}, +/* 68 */ { 4, s_8_68, -1, 2, 0}, +/* 69 */ { 4, s_8_69, -1, 2, 0}, +/* 70 */ { 4, s_8_70, -1, 2, 0}, +/* 71 */ { 7, s_8_71, 70, 2, 0}, +/* 72 */ { 7, s_8_72, 70, 2, 0}, +/* 73 */ { 8, s_8_73, 70, 2, 0}, +/* 74 */ { 6, s_8_74, 70, 2, 0}, +/* 75 */ { 8, s_8_75, 74, 2, 0}, +/* 76 */ { 8, s_8_76, 74, 2, 0}, +/* 77 */ { 8, s_8_77, 74, 2, 0}, +/* 78 */ { 4, s_8_78, -1, 1, 0}, +/* 79 */ { 6, s_8_79, 78, 2, 0}, +/* 80 */ { 6, s_8_80, 78, 2, 0}, +/* 81 */ { 6, s_8_81, 78, 2, 0}, +/* 82 */ { 7, s_8_82, 78, 2, 0}, +/* 83 */ { 8, s_8_83, 78, 2, 0}, +/* 84 */ { 4, s_8_84, -1, 2, 0}, +/* 85 */ { 5, s_8_85, -1, 2, 0}, +/* 86 */ { 5, s_8_86, -1, 2, 0}, +/* 87 */ { 5, s_8_87, -1, 2, 0}, +/* 88 */ { 3, s_8_88, -1, 2, 0}, +/* 89 */ { 4, s_8_89, -1, 2, 0}, +/* 90 */ { 4, s_8_90, -1, 2, 0}, +/* 91 */ { 4, s_8_91, -1, 2, 0}, +/* 92 */ { 4, s_8_92, -1, 2, 0}, +/* 93 */ { 4, s_8_93, -1, 2, 0}, +/* 94 */ { 4, s_8_94, -1, 2, 0}, +/* 95 */ { 3, s_8_95, -1, 2, 0} +}; + +static symbol s_9_0[1] = { 'a' }; +static symbol s_9_1[1] = { 'e' }; +static symbol s_9_2[1] = { 'o' }; +static symbol s_9_3[2] = { 'o', 's' }; +static symbol s_9_4[2] = { 0xC3, 0xA1 }; +static symbol s_9_5[2] = { 0xC3, 0xA9 }; +static symbol s_9_6[2] = { 0xC3, 0xAD }; +static symbol s_9_7[2] = { 0xC3, 0xB3 }; + +static struct among a_9[8] = +{ +/* 0 */ { 1, s_9_0, -1, 1, 0}, +/* 1 */ { 1, s_9_1, -1, 2, 0}, +/* 2 */ { 1, s_9_2, -1, 1, 0}, +/* 3 */ { 2, s_9_3, -1, 1, 0}, +/* 4 */ { 2, s_9_4, -1, 1, 0}, +/* 5 */ { 2, s_9_5, -1, 2, 0}, +/* 6 */ { 2, s_9_6, -1, 1, 0}, +/* 7 */ { 2, s_9_7, -1, 1, 0} +}; + +static unsigned char g_v[] = { 17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 4, 10 }; + +static symbol s_0[] = { 'a' }; +static symbol s_1[] = { 'e' }; +static symbol s_2[] = { 'i' }; +static symbol s_3[] = { 'o' }; +static symbol s_4[] = { 'u' }; +static symbol s_5[] = { 'i', 'e', 'n', 'd', 'o' }; +static symbol s_6[] = { 'a', 'n', 'd', 'o' }; +static symbol s_7[] = { 'a', 'r' }; +static symbol s_8[] = { 'e', 'r' }; +static symbol s_9[] = { 'i', 'r' }; +static symbol s_10[] = { 'u' }; +static symbol s_11[] = { 'i', 'c' }; +static symbol s_12[] = { 'l', 'o', 'g' }; +static symbol s_13[] = { 'u' }; +static symbol s_14[] = { 'e', 'n', 't', 'e' }; +static symbol s_15[] = { 'a', 't' }; +static symbol s_16[] = { 'a', 't' }; +static symbol s_17[] = { 'u' }; +static symbol s_18[] = { 'u' }; +static symbol s_19[] = { 'g' }; +static symbol s_20[] = { 'u' }; +static symbol s_21[] = { 'g' }; + +static int r_mark_regions(struct SN_env * z) { + z->I[0] = z->l; + z->I[1] = z->l; + z->I[2] = z->l; + { int c = z->c; /* do, line 37 */ + { int c = z->c; /* or, line 39 */ + if (!(in_grouping_U(z, g_v, 97, 252))) goto lab2; + { int c = z->c; /* or, line 38 */ + if (!(out_grouping_U(z, g_v, 97, 252))) goto lab4; + while(1) { /* gopast, line 38 */ + if (!(in_grouping_U(z, g_v, 97, 252))) goto lab5; + break; + lab5: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab4; + z->c = c; /* gopast, line 38 */ + } + } + goto lab3; + lab4: + z->c = c; + if (!(in_grouping_U(z, g_v, 97, 252))) goto lab2; + while(1) { /* gopast, line 38 */ + if (!(out_grouping_U(z, g_v, 97, 252))) goto lab6; + break; + lab6: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab2; + z->c = c; /* gopast, line 38 */ + } + } + } + lab3: + goto lab1; + lab2: + z->c = c; + if (!(out_grouping_U(z, g_v, 97, 252))) goto lab0; + { int c = z->c; /* or, line 40 */ + if (!(out_grouping_U(z, g_v, 97, 252))) goto lab8; + while(1) { /* gopast, line 40 */ + if (!(in_grouping_U(z, g_v, 97, 252))) goto lab9; + break; + lab9: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab8; + z->c = c; /* gopast, line 40 */ + } + } + goto lab7; + lab8: + z->c = c; + if (!(in_grouping_U(z, g_v, 97, 252))) goto lab0; + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab0; + z->c = c; /* next, line 40 */ + } + } + lab7: + ; + } + lab1: + z->I[0] = z->c; /* setmark pV, line 41 */ + lab0: + z->c = c; + } + { int c = z->c; /* do, line 43 */ + while(1) { /* gopast, line 44 */ + if (!(in_grouping_U(z, g_v, 97, 252))) goto lab11; + break; + lab11: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab10; + z->c = c; /* gopast, line 44 */ + } + } + while(1) { /* gopast, line 44 */ + if (!(out_grouping_U(z, g_v, 97, 252))) goto lab12; + break; + lab12: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab10; + z->c = c; /* gopast, line 44 */ + } + } + z->I[1] = z->c; /* setmark p1, line 44 */ + while(1) { /* gopast, line 45 */ + if (!(in_grouping_U(z, g_v, 97, 252))) goto lab13; + break; + lab13: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab10; + z->c = c; /* gopast, line 45 */ + } + } + while(1) { /* gopast, line 45 */ + if (!(out_grouping_U(z, g_v, 97, 252))) goto lab14; + break; + lab14: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab10; + z->c = c; /* gopast, line 45 */ + } + } + z->I[2] = z->c; /* setmark p2, line 45 */ + lab10: + z->c = c; + } + return 1; +} + +static int r_postlude(struct SN_env * z) { + int among_var; + while(1) { /* repeat, line 49 */ + int c = z->c; + z->bra = z->c; /* [, line 50 */ + among_var = find_among(z, a_0, 6); /* substring, line 50 */ + if (!(among_var)) goto lab0; + z->ket = z->c; /* ], line 50 */ + switch(among_var) { + case 0: goto lab0; + case 1: + { int ret; + ret = slice_from_s(z, 1, s_0); /* <-, line 51 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 1, s_1); /* <-, line 52 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_from_s(z, 1, s_2); /* <-, line 53 */ + if (ret < 0) return ret; + } + break; + case 4: + { int ret; + ret = slice_from_s(z, 1, s_3); /* <-, line 54 */ + if (ret < 0) return ret; + } + break; + case 5: + { int ret; + ret = slice_from_s(z, 1, s_4); /* <-, line 55 */ + if (ret < 0) return ret; + } + break; + case 6: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab0; + z->c = c; /* next, line 57 */ + } + break; + } + continue; + lab0: + z->c = c; + break; + } + return 1; +} + +static int r_RV(struct SN_env * z) { + if (!(z->I[0] <= z->c)) return 0; + return 1; +} + +static int r_R1(struct SN_env * z) { + if (!(z->I[1] <= z->c)) return 0; + return 1; +} + +static int r_R2(struct SN_env * z) { + if (!(z->I[2] <= z->c)) return 0; + return 1; +} + +static int r_attached_pronoun(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 68 */ + if (!(find_among_b(z, a_1, 13))) return 0; /* substring, line 68 */ + z->bra = z->c; /* ], line 68 */ + among_var = find_among_b(z, a_2, 11); /* substring, line 72 */ + if (!(among_var)) return 0; + { int ret = r_RV(z); + if (ret == 0) return 0; /* call RV, line 72 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: return 0; + case 1: + z->bra = z->c; /* ], line 73 */ + { int ret; + ret = slice_from_s(z, 5, s_5); /* <-, line 73 */ + if (ret < 0) return ret; + } + break; + case 2: + z->bra = z->c; /* ], line 74 */ + { int ret; + ret = slice_from_s(z, 4, s_6); /* <-, line 74 */ + if (ret < 0) return ret; + } + break; + case 3: + z->bra = z->c; /* ], line 75 */ + { int ret; + ret = slice_from_s(z, 2, s_7); /* <-, line 75 */ + if (ret < 0) return ret; + } + break; + case 4: + z->bra = z->c; /* ], line 76 */ + { int ret; + ret = slice_from_s(z, 2, s_8); /* <-, line 76 */ + if (ret < 0) return ret; + } + break; + case 5: + z->bra = z->c; /* ], line 77 */ + { int ret; + ret = slice_from_s(z, 2, s_9); /* <-, line 77 */ + if (ret < 0) return ret; + } + break; + case 6: + { int ret; + ret = slice_del(z); /* delete, line 81 */ + if (ret < 0) return ret; + } + break; + case 7: + if (!(eq_s_b(z, 1, s_10))) return 0; + { int ret; + ret = slice_del(z); /* delete, line 82 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_standard_suffix(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 87 */ + among_var = find_among_b(z, a_6, 46); /* substring, line 87 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 87 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 99 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 99 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 105 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 105 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 106 */ + z->ket = z->c; /* [, line 106 */ + if (!(eq_s_b(z, 2, s_11))) { z->c = z->l - m; goto lab0; } + z->bra = z->c; /* ], line 106 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab0; } /* call R2, line 106 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 106 */ + if (ret < 0) return ret; + } + lab0: + ; + } + break; + case 3: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 111 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 3, s_12); /* <-, line 111 */ + if (ret < 0) return ret; + } + break; + case 4: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 115 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 1, s_13); /* <-, line 115 */ + if (ret < 0) return ret; + } + break; + case 5: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 119 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 4, s_14); /* <-, line 119 */ + if (ret < 0) return ret; + } + break; + case 6: + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 123 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 123 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 124 */ + z->ket = z->c; /* [, line 125 */ + among_var = find_among_b(z, a_3, 4); /* substring, line 125 */ + if (!(among_var)) { z->c = z->l - m; goto lab1; } + z->bra = z->c; /* ], line 125 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab1; } /* call R2, line 125 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 125 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: { z->c = z->l - m; goto lab1; } + case 1: + z->ket = z->c; /* [, line 126 */ + if (!(eq_s_b(z, 2, s_15))) { z->c = z->l - m; goto lab1; } + z->bra = z->c; /* ], line 126 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab1; } /* call R2, line 126 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 126 */ + if (ret < 0) return ret; + } + break; + } + lab1: + ; + } + break; + case 7: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 135 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 135 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 136 */ + z->ket = z->c; /* [, line 137 */ + among_var = find_among_b(z, a_4, 3); /* substring, line 137 */ + if (!(among_var)) { z->c = z->l - m; goto lab2; } + z->bra = z->c; /* ], line 137 */ + switch(among_var) { + case 0: { z->c = z->l - m; goto lab2; } + case 1: + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab2; } /* call R2, line 140 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 140 */ + if (ret < 0) return ret; + } + break; + } + lab2: + ; + } + break; + case 8: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 147 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 147 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 148 */ + z->ket = z->c; /* [, line 149 */ + among_var = find_among_b(z, a_5, 3); /* substring, line 149 */ + if (!(among_var)) { z->c = z->l - m; goto lab3; } + z->bra = z->c; /* ], line 149 */ + switch(among_var) { + case 0: { z->c = z->l - m; goto lab3; } + case 1: + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab3; } /* call R2, line 152 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 152 */ + if (ret < 0) return ret; + } + break; + } + lab3: + ; + } + break; + case 9: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 159 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 159 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 160 */ + z->ket = z->c; /* [, line 161 */ + if (!(eq_s_b(z, 2, s_16))) { z->c = z->l - m; goto lab4; } + z->bra = z->c; /* ], line 161 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab4; } /* call R2, line 161 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 161 */ + if (ret < 0) return ret; + } + lab4: + ; + } + break; + } + return 1; +} + +static int r_y_verb_suffix(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 168 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 168 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 168 */ + among_var = find_among_b(z, a_7, 12); /* substring, line 168 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 168 */ + z->lb = m3; + } + switch(among_var) { + case 0: return 0; + case 1: + if (!(eq_s_b(z, 1, s_17))) return 0; + { int ret; + ret = slice_del(z); /* delete, line 171 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_verb_suffix(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 176 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 176 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 176 */ + among_var = find_among_b(z, a_8, 96); /* substring, line 176 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 176 */ + z->lb = m3; + } + switch(among_var) { + case 0: return 0; + case 1: + { int m = z->l - z->c; (void) m; /* try, line 179 */ + if (!(eq_s_b(z, 1, s_18))) { z->c = z->l - m; goto lab0; } + { int m_test = z->l - z->c; /* test, line 179 */ + if (!(eq_s_b(z, 1, s_19))) { z->c = z->l - m; goto lab0; } + z->c = z->l - m_test; + } + lab0: + ; + } + z->bra = z->c; /* ], line 179 */ + { int ret; + ret = slice_del(z); /* delete, line 179 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_del(z); /* delete, line 200 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_residual_suffix(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 205 */ + among_var = find_among_b(z, a_9, 8); /* substring, line 205 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 205 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret = r_RV(z); + if (ret == 0) return 0; /* call RV, line 208 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 208 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret = r_RV(z); + if (ret == 0) return 0; /* call RV, line 210 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 210 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 210 */ + z->ket = z->c; /* [, line 210 */ + if (!(eq_s_b(z, 1, s_20))) { z->c = z->l - m; goto lab0; } + z->bra = z->c; /* ], line 210 */ + { int m_test = z->l - z->c; /* test, line 210 */ + if (!(eq_s_b(z, 1, s_21))) { z->c = z->l - m; goto lab0; } + z->c = z->l - m_test; + } + { int ret = r_RV(z); + if (ret == 0) { z->c = z->l - m; goto lab0; } /* call RV, line 210 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 210 */ + if (ret < 0) return ret; + } + lab0: + ; + } + break; + } + return 1; +} + +extern int spanish_UTF_8_stem(struct SN_env * z) { + { int c = z->c; /* do, line 216 */ + { int ret = r_mark_regions(z); + if (ret == 0) goto lab0; /* call mark_regions, line 216 */ + if (ret < 0) return ret; + } + lab0: + z->c = c; + } + z->lb = z->c; z->c = z->l; /* backwards, line 217 */ + + { int m = z->l - z->c; (void) m; /* do, line 218 */ + { int ret = r_attached_pronoun(z); + if (ret == 0) goto lab1; /* call attached_pronoun, line 218 */ + if (ret < 0) return ret; + } + lab1: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 219 */ + { int m = z->l - z->c; (void) m; /* or, line 219 */ + { int ret = r_standard_suffix(z); + if (ret == 0) goto lab4; /* call standard_suffix, line 219 */ + if (ret < 0) return ret; + } + goto lab3; + lab4: + z->c = z->l - m; + { int ret = r_y_verb_suffix(z); + if (ret == 0) goto lab5; /* call y_verb_suffix, line 220 */ + if (ret < 0) return ret; + } + goto lab3; + lab5: + z->c = z->l - m; + { int ret = r_verb_suffix(z); + if (ret == 0) goto lab2; /* call verb_suffix, line 221 */ + if (ret < 0) return ret; + } + } + lab3: + lab2: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 223 */ + { int ret = r_residual_suffix(z); + if (ret == 0) goto lab6; /* call residual_suffix, line 223 */ + if (ret < 0) return ret; + } + lab6: + z->c = z->l - m; + } + z->c = z->lb; + { int c = z->c; /* do, line 225 */ + { int ret = r_postlude(z); + if (ret == 0) goto lab7; /* call postlude, line 225 */ + if (ret < 0) return ret; + } + lab7: + z->c = c; + } + return 1; +} + +extern struct SN_env * spanish_UTF_8_create_env(void) { return SN_create_env(0, 3, 0); } + +extern void spanish_UTF_8_close_env(struct SN_env * z) { SN_close_env(z); } + diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_spanish.h b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_spanish.h new file mode 100644 index 0000000..10572ec --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_spanish.h @@ -0,0 +1,16 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern struct SN_env * spanish_UTF_8_create_env(void); +extern void spanish_UTF_8_close_env(struct SN_env * z); + +extern int spanish_UTF_8_stem(struct SN_env * z); + +#ifdef __cplusplus +} +#endif + diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_swedish.c b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_swedish.c new file mode 100644 index 0000000..af75551 --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_swedish.c @@ -0,0 +1,313 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#include "../runtime/header.h" + +extern int swedish_UTF_8_stem(struct SN_env * z); +static int r_other_suffix(struct SN_env * z); +static int r_consonant_pair(struct SN_env * z); +static int r_main_suffix(struct SN_env * z); +static int r_mark_regions(struct SN_env * z); + +extern struct SN_env * swedish_UTF_8_create_env(void); +extern void swedish_UTF_8_close_env(struct SN_env * z); + +static symbol s_0_0[1] = { 'a' }; +static symbol s_0_1[4] = { 'a', 'r', 'n', 'a' }; +static symbol s_0_2[4] = { 'e', 'r', 'n', 'a' }; +static symbol s_0_3[7] = { 'h', 'e', 't', 'e', 'r', 'n', 'a' }; +static symbol s_0_4[4] = { 'o', 'r', 'n', 'a' }; +static symbol s_0_5[2] = { 'a', 'd' }; +static symbol s_0_6[1] = { 'e' }; +static symbol s_0_7[3] = { 'a', 'd', 'e' }; +static symbol s_0_8[4] = { 'a', 'n', 'd', 'e' }; +static symbol s_0_9[4] = { 'a', 'r', 'n', 'e' }; +static symbol s_0_10[3] = { 'a', 'r', 'e' }; +static symbol s_0_11[4] = { 'a', 's', 't', 'e' }; +static symbol s_0_12[2] = { 'e', 'n' }; +static symbol s_0_13[5] = { 'a', 'n', 'd', 'e', 'n' }; +static symbol s_0_14[4] = { 'a', 'r', 'e', 'n' }; +static symbol s_0_15[5] = { 'h', 'e', 't', 'e', 'n' }; +static symbol s_0_16[3] = { 'e', 'r', 'n' }; +static symbol s_0_17[2] = { 'a', 'r' }; +static symbol s_0_18[2] = { 'e', 'r' }; +static symbol s_0_19[5] = { 'h', 'e', 't', 'e', 'r' }; +static symbol s_0_20[2] = { 'o', 'r' }; +static symbol s_0_21[1] = { 's' }; +static symbol s_0_22[2] = { 'a', 's' }; +static symbol s_0_23[5] = { 'a', 'r', 'n', 'a', 's' }; +static symbol s_0_24[5] = { 'e', 'r', 'n', 'a', 's' }; +static symbol s_0_25[5] = { 'o', 'r', 'n', 'a', 's' }; +static symbol s_0_26[2] = { 'e', 's' }; +static symbol s_0_27[4] = { 'a', 'd', 'e', 's' }; +static symbol s_0_28[5] = { 'a', 'n', 'd', 'e', 's' }; +static symbol s_0_29[3] = { 'e', 'n', 's' }; +static symbol s_0_30[5] = { 'a', 'r', 'e', 'n', 's' }; +static symbol s_0_31[6] = { 'h', 'e', 't', 'e', 'n', 's' }; +static symbol s_0_32[4] = { 'e', 'r', 'n', 's' }; +static symbol s_0_33[2] = { 'a', 't' }; +static symbol s_0_34[5] = { 'a', 'n', 'd', 'e', 't' }; +static symbol s_0_35[3] = { 'h', 'e', 't' }; +static symbol s_0_36[3] = { 'a', 's', 't' }; + +static struct among a_0[37] = +{ +/* 0 */ { 1, s_0_0, -1, 1, 0}, +/* 1 */ { 4, s_0_1, 0, 1, 0}, +/* 2 */ { 4, s_0_2, 0, 1, 0}, +/* 3 */ { 7, s_0_3, 2, 1, 0}, +/* 4 */ { 4, s_0_4, 0, 1, 0}, +/* 5 */ { 2, s_0_5, -1, 1, 0}, +/* 6 */ { 1, s_0_6, -1, 1, 0}, +/* 7 */ { 3, s_0_7, 6, 1, 0}, +/* 8 */ { 4, s_0_8, 6, 1, 0}, +/* 9 */ { 4, s_0_9, 6, 1, 0}, +/* 10 */ { 3, s_0_10, 6, 1, 0}, +/* 11 */ { 4, s_0_11, 6, 1, 0}, +/* 12 */ { 2, s_0_12, -1, 1, 0}, +/* 13 */ { 5, s_0_13, 12, 1, 0}, +/* 14 */ { 4, s_0_14, 12, 1, 0}, +/* 15 */ { 5, s_0_15, 12, 1, 0}, +/* 16 */ { 3, s_0_16, -1, 1, 0}, +/* 17 */ { 2, s_0_17, -1, 1, 0}, +/* 18 */ { 2, s_0_18, -1, 1, 0}, +/* 19 */ { 5, s_0_19, 18, 1, 0}, +/* 20 */ { 2, s_0_20, -1, 1, 0}, +/* 21 */ { 1, s_0_21, -1, 2, 0}, +/* 22 */ { 2, s_0_22, 21, 1, 0}, +/* 23 */ { 5, s_0_23, 22, 1, 0}, +/* 24 */ { 5, s_0_24, 22, 1, 0}, +/* 25 */ { 5, s_0_25, 22, 1, 0}, +/* 26 */ { 2, s_0_26, 21, 1, 0}, +/* 27 */ { 4, s_0_27, 26, 1, 0}, +/* 28 */ { 5, s_0_28, 26, 1, 0}, +/* 29 */ { 3, s_0_29, 21, 1, 0}, +/* 30 */ { 5, s_0_30, 29, 1, 0}, +/* 31 */ { 6, s_0_31, 29, 1, 0}, +/* 32 */ { 4, s_0_32, 21, 1, 0}, +/* 33 */ { 2, s_0_33, -1, 1, 0}, +/* 34 */ { 5, s_0_34, -1, 1, 0}, +/* 35 */ { 3, s_0_35, -1, 1, 0}, +/* 36 */ { 3, s_0_36, -1, 1, 0} +}; + +static symbol s_1_0[2] = { 'd', 'd' }; +static symbol s_1_1[2] = { 'g', 'd' }; +static symbol s_1_2[2] = { 'n', 'n' }; +static symbol s_1_3[2] = { 'd', 't' }; +static symbol s_1_4[2] = { 'g', 't' }; +static symbol s_1_5[2] = { 'k', 't' }; +static symbol s_1_6[2] = { 't', 't' }; + +static struct among a_1[7] = +{ +/* 0 */ { 2, s_1_0, -1, -1, 0}, +/* 1 */ { 2, s_1_1, -1, -1, 0}, +/* 2 */ { 2, s_1_2, -1, -1, 0}, +/* 3 */ { 2, s_1_3, -1, -1, 0}, +/* 4 */ { 2, s_1_4, -1, -1, 0}, +/* 5 */ { 2, s_1_5, -1, -1, 0}, +/* 6 */ { 2, s_1_6, -1, -1, 0} +}; + +static symbol s_2_0[2] = { 'i', 'g' }; +static symbol s_2_1[3] = { 'l', 'i', 'g' }; +static symbol s_2_2[3] = { 'e', 'l', 's' }; +static symbol s_2_3[5] = { 'f', 'u', 'l', 'l', 't' }; +static symbol s_2_4[5] = { 'l', 0xC3, 0xB6, 's', 't' }; + +static struct among a_2[5] = +{ +/* 0 */ { 2, s_2_0, -1, 1, 0}, +/* 1 */ { 3, s_2_1, 0, 1, 0}, +/* 2 */ { 3, s_2_2, -1, 1, 0}, +/* 3 */ { 5, s_2_3, -1, 3, 0}, +/* 4 */ { 5, s_2_4, -1, 2, 0} +}; + +static unsigned char g_v[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 32 }; + +static unsigned char g_s_ending[] = { 119, 127, 149 }; + +static symbol s_0[] = { 'l', 0xC3, 0xB6, 's' }; +static symbol s_1[] = { 'f', 'u', 'l', 'l' }; + +static int r_mark_regions(struct SN_env * z) { + z->I[0] = z->l; + { int c_test = z->c; /* test, line 29 */ + { int c = skip_utf8(z->p, z->c, 0, z->l, + 3); + if (c < 0) return 0; + z->c = c; /* hop, line 29 */ + } + z->I[1] = z->c; /* setmark x, line 29 */ + z->c = c_test; + } + while(1) { /* goto, line 30 */ + int c = z->c; + if (!(in_grouping_U(z, g_v, 97, 246))) goto lab0; + z->c = c; + break; + lab0: + z->c = c; + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) return 0; + z->c = c; /* goto, line 30 */ + } + } + while(1) { /* gopast, line 30 */ + if (!(out_grouping_U(z, g_v, 97, 246))) goto lab1; + break; + lab1: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) return 0; + z->c = c; /* gopast, line 30 */ + } + } + z->I[0] = z->c; /* setmark p1, line 30 */ + /* try, line 31 */ + if (!(z->I[0] < z->I[1])) goto lab2; + z->I[0] = z->I[1]; +lab2: + return 1; +} + +static int r_main_suffix(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 37 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 37 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 37 */ + among_var = find_among_b(z, a_0, 37); /* substring, line 37 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 37 */ + z->lb = m3; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 44 */ + if (ret < 0) return ret; + } + break; + case 2: + if (!(in_grouping_b_U(z, g_s_ending, 98, 121))) return 0; + { int ret; + ret = slice_del(z); /* delete, line 46 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_consonant_pair(struct SN_env * z) { + { int m3; /* setlimit, line 50 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 50 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + { int m = z->l - z->c; (void) m; /* and, line 52 */ + if (!(find_among_b(z, a_1, 7))) { z->lb = m3; return 0; } /* among, line 51 */ + z->c = z->l - m; + z->ket = z->c; /* [, line 52 */ + { int c = skip_utf8(z->p, z->c, z->lb, 0, -1); + if (c < 0) { z->lb = m3; return 0; } + z->c = c; /* next, line 52 */ + } + z->bra = z->c; /* ], line 52 */ + { int ret; + ret = slice_del(z); /* delete, line 52 */ + if (ret < 0) return ret; + } + } + z->lb = m3; + } + return 1; +} + +static int r_other_suffix(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 55 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 55 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 56 */ + among_var = find_among_b(z, a_2, 5); /* substring, line 56 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 56 */ + switch(among_var) { + case 0: { z->lb = m3; return 0; } + case 1: + { int ret; + ret = slice_del(z); /* delete, line 57 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 4, s_0); /* <-, line 58 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_from_s(z, 4, s_1); /* <-, line 59 */ + if (ret < 0) return ret; + } + break; + } + z->lb = m3; + } + return 1; +} + +extern int swedish_UTF_8_stem(struct SN_env * z) { + { int c = z->c; /* do, line 66 */ + { int ret = r_mark_regions(z); + if (ret == 0) goto lab0; /* call mark_regions, line 66 */ + if (ret < 0) return ret; + } + lab0: + z->c = c; + } + z->lb = z->c; z->c = z->l; /* backwards, line 67 */ + + { int m = z->l - z->c; (void) m; /* do, line 68 */ + { int ret = r_main_suffix(z); + if (ret == 0) goto lab1; /* call main_suffix, line 68 */ + if (ret < 0) return ret; + } + lab1: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 69 */ + { int ret = r_consonant_pair(z); + if (ret == 0) goto lab2; /* call consonant_pair, line 69 */ + if (ret < 0) return ret; + } + lab2: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 70 */ + { int ret = r_other_suffix(z); + if (ret == 0) goto lab3; /* call other_suffix, line 70 */ + if (ret < 0) return ret; + } + lab3: + z->c = z->l - m; + } + z->c = z->lb; + return 1; +} + +extern struct SN_env * swedish_UTF_8_create_env(void) { return SN_create_env(0, 2, 0); } + +extern void swedish_UTF_8_close_env(struct SN_env * z) { SN_close_env(z); } + diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_swedish.h b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_swedish.h new file mode 100644 index 0000000..1444ebb --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_swedish.h @@ -0,0 +1,16 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern struct SN_env * swedish_UTF_8_create_env(void); +extern void swedish_UTF_8_close_env(struct SN_env * z); + +extern int swedish_UTF_8_stem(struct SN_env * z); + +#ifdef __cplusplus +} +#endif + diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/util/arrayinputstream.h b/Pods/BRCLucene/src/contribs-lib/CLucene/util/arrayinputstream.h new file mode 100644 index 0000000..8225afc --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/util/arrayinputstream.h @@ -0,0 +1,68 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2009 Isidor Zeuner +* +* 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_UTIL_ARRAYINPUTSTREAM_H +#define CLUCENE_UTIL_ARRAYINPUTSTREAM_H + +#include "CLucene/_ApiHeader.h" +#include "CLucene/util/CLStreams.h" +#include "CLucene/util/Array.h" + +CL_NS_DEF(util) + +template +class CLUCENE_CONTRIBS_EXPORT ArrayInputStream : public CL_NS(util)::CLStream { +public: + _CL_DEPRECATED(Use compressed field) ArrayInputStream(ArrayBase const* data); + int32_t read(const element*& start, int32_t min, int32_t max); + int64_t skip(int64_t ntoskip); + int64_t position(); + size_t size(); +private: + ArrayBase const* data; + int64_t current_position; +}; + +template +ArrayInputStream::ArrayInputStream(ArrayBase const* data) : +data(data), +current_position(0) { +} + +template +int32_t ArrayInputStream::read(const element*& start, int32_t min, int32_t max) { + int32_t to_read = min; + int32_t readable = data->length - current_position; + if (readable < to_read) { + to_read = readable; + } + start = data->values + current_position; + current_position += to_read; + return to_read; +} + +template +int64_t ArrayInputStream::skip(int64_t ntoskip) { + int64_t to_skip = ntoskip; + int64_t skippable = data->length - current_position; + if (skippable < to_skip) { + to_skip = skippable; + } + current_position += to_skip; + return to_skip; +} + +template +int64_t ArrayInputStream::position() { + return current_position; +} + +template +size_t ArrayInputStream::size() { + return data->length; +} +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/util/byteinputstream.h b/Pods/BRCLucene/src/contribs-lib/CLucene/util/byteinputstream.h new file mode 100644 index 0000000..cf749c0 --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/util/byteinputstream.h @@ -0,0 +1,17 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2009 Isidor Zeuner +* +* 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_UTIL_BYTEINPUTSTREAM_H +#define CLUCENE_UTIL_BYTEINPUTSTREAM_H + +#include "arrayinputstream.h" + +CL_NS_DEF(util) + +typedef ArrayInputStream ByteInputStream; + +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/util/gzipcompressstream.cpp b/Pods/BRCLucene/src/contribs-lib/CLucene/util/gzipcompressstream.cpp new file mode 100644 index 0000000..3deaff9 --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/util/gzipcompressstream.cpp @@ -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. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "gzipcompressstream.h" +#include "CLucene/util/_bufferedstream.h" +#include + +CL_NS_DEF(util) + +class GZipCompressInputStream::Internal: public CL_NS(util)::BufferedInputStreamImpl{ + z_stream_s* zstream; + InputStream* input; +protected: + int32_t fillBuffer(signed char* start, int32_t space){ + if (zstream == 0) return -1; + // make sure there is data to decompress + if (zstream->avail_in==0) { + // read data from the input stream + const signed char* inStart; + int32_t nread = input->read(inStart, 1, 0); + if (nread < 1) { + zstream->avail_in = 0; //bail... + if (deflate(zstream, Z_FINISH) != Z_STREAM_END) { + _CLTHROWA(CL_ERR_IO, "deflate should report Z_STREAM_END\n"); + } + int32_t nwritten = space - zstream->avail_out; + dealloc(); + return nwritten; + } + zstream->next_in = (Bytef*)inStart; + zstream->avail_in = nread; + } + + // make sure we can write into the buffer + zstream->avail_out = space; + zstream->next_out = (Bytef*)start; + + int r = deflate(zstream, Z_NO_FLUSH); + // inform the buffer of the number of bytes that was read + int32_t nwritten = space - zstream->avail_out; + switch (r) { + case Z_NEED_DICT: + _CLTHROWA(CL_ERR_IO, "Z_NEED_DICT while inflating stream."); + break; + case Z_DATA_ERROR: + _CLTHROWA(CL_ERR_IO, "Z_DATA_ERROR while inflating stream."); + break; + case Z_MEM_ERROR: + _CLTHROWA(CL_ERR_IO, "Z_MEM_ERROR while inflating stream."); + break; + } + return nwritten; + } +public: + void dealloc(){ + if (zstream) { + deflateEnd(zstream); + free(zstream); + zstream = 0; + } + } + void _setMinBufSize(int buf){ + this->setMinBufSize(buf); + } + Internal(InputStream* input, int level){ + if ( level < 0 || level > 9 ) + level = Z_DEFAULT_COMPRESSION; + + this->input = input; + + // initialize the z_stream + zstream = (z_stream_s*)malloc(sizeof(z_stream_s)); + zstream->zalloc = Z_NULL; + zstream->zfree = Z_NULL; + zstream->opaque = Z_NULL; + zstream->avail_in = 0; + + // initialize for writing gzip streams + int r = deflateInit(zstream, level); + if (r != Z_OK) { + dealloc(); + _CLTHROWA(CL_ERR_IO, "Error initializing GZipCompressInputStream."); + } + + // signal that we need to read into the buffer + zstream->avail_out = 1; + } + + ~Internal(){ + dealloc(); + } +}; + + +GZipCompressInputStream::GZipCompressInputStream ( InputStream* input, int level) +{ + internal = new Internal(input,level); +} +size_t GZipCompressInputStream::size(){ + return internal->size(); +} +GZipCompressInputStream::~GZipCompressInputStream () +{ + delete internal; +} +int32_t GZipCompressInputStream::read(const signed char*& start, int32_t min, int32_t max){ + return internal->read(start,min,max); +} +int64_t GZipCompressInputStream::position(){ + return internal->position(); +} +int64_t GZipCompressInputStream::reset(int64_t to){ + return internal->reset(to); +} +int64_t GZipCompressInputStream::skip(int64_t ntoskip){ + return internal->skip(ntoskip); +} +void GZipCompressInputStream::setMinBufSize(int32_t minbufsize){ + internal->_setMinBufSize(minbufsize); +} + +CL_NS_END diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/util/gzipcompressstream.h b/Pods/BRCLucene/src/contribs-lib/CLucene/util/gzipcompressstream.h new file mode 100644 index 0000000..b58f8cd --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/util/gzipcompressstream.h @@ -0,0 +1,34 @@ +/*------------------------------------------------------------------------------ +* 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. +------------------------------------------------------------------------------*/ +#ifndef CLUENE_UTIL_GZIPCOMPRESSSTREAM_H +#define CLUENE_UTIL_GZIPCOMPRESSSTREAM_H + +#include "CLucene/util/CLStreams.h" + +struct z_stream_s; + +CL_NS_DEF(util) + +class CLUCENE_CONTRIBS_EXPORT GZipCompressInputStream : public InputStream{ +private: + class Internal; + Internal* internal; +public: + LUCENE_STATIC_CONSTANT(int32_t, DEFAULT_BUFFER_SIZE=4096); + _CL_DEPRECATED(Use compressed field) explicit GZipCompressInputStream(InputStream* input, int level=-1); + _CL_DEPRECATED(Use compressed field) virtual ~GZipCompressInputStream(); + + int32_t read(const signed char*& start, int32_t min, int32_t max); + int64_t position(); + int64_t reset(int64_t); + int64_t skip(int64_t ntoskip); + size_t size(); + void setMinBufSize(int32_t minbufsize); +}; + +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/util/gzipinputstream.cpp b/Pods/BRCLucene/src/contribs-lib/CLucene/util/gzipinputstream.cpp new file mode 100644 index 0000000..40e32e0 --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/util/gzipinputstream.cpp @@ -0,0 +1,184 @@ +/*------------------------------------------------------------------------------ +* 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. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "gzipinputstream.h" +#include "CLucene/util/_bufferedstream.h" +#include + +CL_NS_DEF(util) + + +class GZipInputStream::Internal{ +public: + class JStreamsBuffer: public BufferedInputStreamImpl{ + z_stream_s* zstream; + BufferedInputStream* input; + protected: + + int32_t fillBuffer(signed char* start, int32_t space) { + if (zstream == 0) return -1; + // make sure there is data to decompress + if (zstream->avail_out) { + // read data from the input stream + const signed char* inStart; + int32_t nread = input->read(inStart, 1, 0); + if (nread < 1) { + _CLTHROWA(CL_ERR_IO, "unexpected end of stream"); + } else { + zstream->next_in = (Bytef*)inStart; + zstream->avail_in = nread; + } + } + // make sure we can write into the buffer + zstream->avail_out = space; + zstream->next_out = (Bytef*)start; + // decompress + int r = inflate(zstream, Z_SYNC_FLUSH); + // inform the buffer of the number of bytes that was read + int32_t nwritten = space - zstream->avail_out; + switch (r) { + case Z_NEED_DICT: + _CLTHROWA(CL_ERR_IO, "Z_NEED_DICT while inflating stream."); + break; + case Z_DATA_ERROR: + _CLTHROWA(CL_ERR_IO, "Z_DATA_ERROR while inflating stream."); + break; + case Z_MEM_ERROR: + _CLTHROWA(CL_ERR_IO, "Z_MEM_ERROR while inflating stream."); + break; + case Z_STREAM_END: + if (zstream->avail_in) { + input->reset(input->position()-zstream->avail_in); + } + // we are finished decompressing, + // (but this stream is not yet finished) + dealloc(); + } + return nwritten; + } + void dealloc() { + if (zstream) { + inflateEnd(zstream); + free(zstream); + zstream = 0; + } + } + bool checkMagic() { + const unsigned char* buf; + const signed char* begin; + int32_t nread; + + int64_t pos = input->position(); + nread = input->read(begin, 2, 2); + input->reset(pos); + if (nread != 2) { + return false; + } + + buf = (const unsigned char*)begin; + return buf[0] == 0x1f && buf[1] == 0x8b; + } + + public: + int encoding; + + JStreamsBuffer(BufferedInputStream* input, GZipInputStream::ZipFormat format){ + this->input = input; + + // check first bytes of stream before allocating buffer + if (format == GZipInputStream::GZIPFORMAT && !checkMagic()) { + _CLTHROWA(CL_ERR_IO, "Magic bytes are wrong."); + } + + // initialize the z_stream + zstream = (z_stream_s*)malloc(sizeof(z_stream_s)); + zstream->zalloc = Z_NULL; + zstream->zfree = Z_NULL; + zstream->opaque = Z_NULL; + zstream->avail_in = 0; + zstream->next_in = Z_NULL; + // initialize for reading gzip streams + // for reading libz streams, you need inflateInit(zstream) + int r; + switch(format) { + case GZipInputStream::ZLIBFORMAT: + r = inflateInit(zstream); + break; + case GZipInputStream::GZIPFORMAT: + r = inflateInit2(zstream, 15+16); + break; + case GZipInputStream::ZIPFORMAT: + default: + r = inflateInit2(zstream, -MAX_WBITS); + break; + } + if (r != Z_OK) { + dealloc(); + _CLTHROWA(CL_ERR_IO, "Error initializing GZipInputStream."); + } + + // signal that we need to read into the buffer + zstream->avail_out = 1; + } + void _setMinBufSize(int32_t bufsize){ + this->setMinBufSize(bufsize); + } + + ~JStreamsBuffer(){ + dealloc(); + } + }; + + JStreamsBuffer* jsbuffer; + + Internal(BufferedInputStream* input, GZipInputStream::ZipFormat format){ + jsbuffer = new JStreamsBuffer(input, format); + } + ~Internal(){ + delete jsbuffer; + } +}; + +GZipInputStream::GZipInputStream(InputStream* input, ZipFormat format) { + internal = new Internal(_CLNEW FilteredBufferedInputStream(input, false), format); +} +GZipInputStream::GZipInputStream(BufferedInputStream* input, ZipFormat format) { + internal = new Internal(input, format); +} + +GZipInputStream::~GZipInputStream() { + delete internal; +} + + +int32_t GZipInputStream::read(const signed char*& start, int32_t min, int32_t max){ + return internal->jsbuffer->read(start,min,max); +} +int32_t GZipInputStream::read(const unsigned char*& _start, int32_t min, int32_t max){ + const signed char* start = 0; + int32_t ret = internal->jsbuffer->read(start,min,max); + _start = (const unsigned char*)start; + return ret; +} +int64_t GZipInputStream::position(){ + return internal->jsbuffer->position(); +} +int64_t GZipInputStream::reset(int64_t to){ + return internal->jsbuffer->reset(to); +} +int64_t GZipInputStream::skip(int64_t ntoskip){ + return internal->jsbuffer->skip(ntoskip); +} +void GZipInputStream::setMinBufSize(int32_t minbufsize){ + internal->jsbuffer->_setMinBufSize(minbufsize); +} +size_t GZipInputStream::size(){ + return internal->jsbuffer->size(); +} + + +CL_NS_END diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/util/gzipinputstream.h b/Pods/BRCLucene/src/contribs-lib/CLucene/util/gzipinputstream.h new file mode 100644 index 0000000..ae4dd49 --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/util/gzipinputstream.h @@ -0,0 +1,39 @@ +/*------------------------------------------------------------------------------ +* 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. +------------------------------------------------------------------------------*/ +#ifndef CLUENE_UTIL_GZIPINPUTSTREAM_H +#define CLUENE_UTIL_GZIPINPUTSTREAM_H + +#include "CLucene/util/CLStreams.h" + +struct z_stream_s; + +CL_NS_DEF(util) + +class CLUCENE_CONTRIBS_EXPORT GZipInputStream : public CL_NS(util)::BufferedInputStream { +public: + enum ZipFormat { ZLIBFORMAT, GZIPFORMAT, ZIPFORMAT}; +private: + class Internal; + Internal* internal; +public: + _CL_DEPRECATED(Use compressed field) explicit GZipInputStream(BufferedInputStream* input, + ZipFormat format=GZIPFORMAT); + _CL_DEPRECATED(Use compressed field) explicit GZipInputStream(InputStream* input, + ZipFormat format=GZIPFORMAT); + ~GZipInputStream(); + + int32_t read(const signed char*& start, int32_t min, int32_t max); + int32_t read(const unsigned char*& start, int32_t min, int32_t max); + int64_t position(); + int64_t reset(int64_t); + int64_t skip(int64_t ntoskip); + size_t size(); + void setMinBufSize(int32_t minbufsize); +}; + +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/contribs-lib/CLucene/util/streamarray.h b/Pods/BRCLucene/src/contribs-lib/CLucene/util/streamarray.h new file mode 100644 index 0000000..bb1bbff --- /dev/null +++ b/Pods/BRCLucene/src/contribs-lib/CLucene/util/streamarray.h @@ -0,0 +1,32 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2009 Isidor Zeuner +* +* 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_UTIL_STREAMARRAY_H +#define CLUCENE_UTIL_STREAMARRAY_H + +#include +#include "CLucene/util/CLStreams.h" +#include "CLucene/util/Array.h" + +CL_NS_DEF(util) + +template +ValueArray streamArray(CL_NS(util)::CLStream* stored) { + size_t const block_size = 4096; + element const* retrieved; + ValueArray result(0); + size_t available; + size_t offset = 0; + do { + available = stored->read(retrieved, block_size, block_size); + result.resize(result.length + sizeof(element) * available); + memcpy(result.values + offset, retrieved, sizeof(element) * available); + offset += available; + } while (block_size == available); + return result; +} +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene.h b/Pods/BRCLucene/src/core/CLucene.h new file mode 100644 index 0000000..bea39ea --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene.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. +------------------------------------------------------------------------------*/ +//Includes some standard headers for searching and indexing. +#ifndef _lucene_CLucene_ +#define _lucene_CLucene_ + +#include "CLucene/StdHeader.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/search/TermQuery.h" +#include "CLucene/search/SearchHeader.h" +#include "CLucene/search/Similarity.h" +#include "CLucene/search/Sort.h" +#include "CLucene/search/Hits.h" +#include "CLucene/search/Explanation.h" +#include "CLucene/document/Document.h" +#include "CLucene/document/Field.h" +#include "CLucene/document/DateField.h" +#include "CLucene/document/DateTools.h" +#include "CLucene/document/NumberTools.h" +#include "CLucene/store/Directory.h" +#include "CLucene/store/FSDirectory.h" +#include "CLucene/store/RAMDirectory.h" +#include "CLucene/queryParser/QueryParser.h" +#include "CLucene/analysis/standard/StandardAnalyzer.h" +#include "CLucene/analysis/Analyzers.h" +#include "CLucene/util/BitSet.h" +#include "CLucene/util/CLStreams.h" +#include "CLucene/util/PriorityQueue.h" + +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/CLConfig.h b/Pods/BRCLucene/src/core/CLucene/CLConfig.h new file mode 100644 index 0000000..228b97d --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/CLConfig.h @@ -0,0 +1,235 @@ +/*------------------------------------------------------------------------------ +* 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 +// +//disable hashmap/set usage. Just use map and set. +//this has been shown to be quicker than the hash equivalents in some impementations +#ifndef LUCENE_DISABLE_HASHING + #define LUCENE_DISABLE_HASHING +#endif +// +//////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////// +// These options can be set depending on the particular needs of +// Your application +//////////////////////////////////////////////////////////////////// +// +//define this to enable mmap support in the fsdirectory IndexInput +//EXPERIMENTAL +//#define LUCENE_FS_MMAP +// +//define to true to actually use it (not just enable it) +#ifdef LUCENE_FS_MMAP + #define LUCENE_USE_MMAP true //yes, use if it's turned on. +#else + #define LUCENE_USE_MMAP false +#endif +// +//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" +// +//////////////////////////////////////////////////////////////////// + + +//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 + +// +//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 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 +// +//////////////////////////////////////////////////////////////////// + + +//////////////////////////////////////////////////////////////////// +// 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 +// +//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 +// +//////////////////////////////////////////////////////////////////// + + +//////////////////////////////////////////////////////////////////// +// Date conversion settings for DateTools and DateField +//////////////////////////////////////////////////////////////////// +// +// DateField, which is now deprecated, had it's buffer size +// defined for 9 chars. DateTools currently is configured +// for 30 chars, but this needs to be revised after tests +// are written for those. +// +#define DATETOOLS_BUFFER_SIZE 30 +#define DATEFIELD_DATE_LEN DATETOOLS_BUFFER_SIZE +// +//////////////////////////////////////////////////////////////////// + + +//////////////////////////////////////////////////////////////////// +// FuzzyQuery settings +//////////////////////////////////////////////////////////////////// +// +// This should be somewhere around the average long word. +// If it is longer, we waste time and space. If it is shorter, we waste a +// little bit of time growing the array as we encounter longer words. +// +#define LUCENE_TYPICAL_LONGEST_WORD_IN_INDEX 19 +// +//////////////////////////////////////////////////////////////////// + + +#endif + diff --git a/Pods/BRCLucene/src/core/CLucene/StdHeader.cpp b/Pods/BRCLucene/src/core/CLucene/StdHeader.cpp new file mode 100644 index 0000000..90a5e32 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/StdHeader.cpp @@ -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. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "CLucene/util/Misc.h" + +#include "CLucene/search/Sort.h" +#include "CLucene/search/Similarity.h" +#include "CLucene/search/FieldCache.h" +#include "CLucene/index/TermVector.h" +#include "CLucene/index/_IndexFileNameFilter.h" +#include "CLucene/search/FieldSortedHitQueue.h" +#include "CLucene/store/LockFactory.h" +#include "CLucene/util/_StringIntern.h" +#include "CLucene/util/_ThreadLocal.h" + +#if defined(_MSC_VER) && defined(_DEBUG) + #define CRTDBG_MAP_ALLOC + #include +#endif + +CL_NS_USE(util) +CL_NS_USE(search) +CL_NS_USE(index) +CL_NS_USE(store) + +//clears all static memory. do not attempt to do anything else +//in clucene after calling this function +void _lucene_shutdown(){ + FieldSortedHitQueue::_shutdown(); + Sort::_shutdown(); + ScoreDocComparator::_shutdown(); + SortField::_shutdown(); + FieldCache::_shutdown(); + Similarity::_shutdown(); + CLStringIntern::_shutdown(); + NoLockFactory::_shutdown(); + _ThreadLocal::_shutdown(); + IndexFileNameFilter::_shutdown(); + _CLDELETE (TermVectorOffsetInfo_EMPTY_OFFSET_INFO); +} diff --git a/Pods/BRCLucene/src/core/CLucene/StdHeader.h b/Pods/BRCLucene/src/core/CLucene/StdHeader.h new file mode 100644 index 0000000..242d977 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/StdHeader.h @@ -0,0 +1,40 @@ +/*------------------------------------------------------------------------------ +* 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_stdheader_h +#define lucene_stdheader_h + +/** +* This header contains public distributed code that needs to be included *before* +* any clucene-core code is included. It also uses the clucene-shared header +* which contains platform specific code configured by cmake. +*/ + +//configurations for library +#include "CLucene/CLConfig.h" + +//shared header +#include "CLucene/SharedHeader.h" + +//error handling macros/functions +#include "CLucene/debug/error.h" + +//todo: would be good to deprecate this... it's ugly +#define StringArrayWithDeletor CL_NS(util)::CLVector +#define StringArray std::vector +#define StringArrayWithDeletor CL_NS(util)::CLVector +#define StringArrayConst std::vector +//#define StringArrayConstWithDeletor CL_NS(util)::CLVector + +#define AStringArray std::vector +#define AStringArrayWithDeletor CL_NS(util)::CLVector +#define AStringArrayConst std::vector +//#define AStringArrayConstWithDeletor CL_NS(util)::CLVector + +//call this at the end of running to clean up memory. +extern CLUCENE_EXPORT void _lucene_shutdown(); + +#endif // lucene_apiheader_h diff --git a/Pods/BRCLucene/src/core/CLucene/_ApiHeader.h b/Pods/BRCLucene/src/core/CLucene/_ApiHeader.h new file mode 100644 index 0000000..5eac7cb --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/_ApiHeader.h @@ -0,0 +1,24 @@ +/*------------------------------------------------------------------------------ +* 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_internal_apiheader_h +#define lucene_internal_apiheader_h + +/** +* This is the header that all clucene-core source code includes. +* We include the shared code header and the public StdHeader.h header. +*/ + +#include "CLucene/StdHeader.h" +#include "CLucene/_SharedHeader.h" + +//todo: this code needs to go to shared +#include "CLucene/util/_VoidMap.h" +#include "CLucene/util/_VoidList.h" + +using namespace std; + +#endif // lucene_apiheader_h diff --git a/Pods/BRCLucene/src/core/CLucene/analysis/AnalysisHeader.cpp b/Pods/BRCLucene/src/core/CLucene/analysis/AnalysisHeader.cpp new file mode 100644 index 0000000..927fba5 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/analysis/AnalysisHeader.cpp @@ -0,0 +1,306 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "AnalysisHeader.h" +#include "CLucene/util/StringBuffer.h" +#include "CLucene/util/_ThreadLocal.h" +#include + +CL_NS_USE(util) +CL_NS_DEF(analysis) + +struct Analyzer::Internal{ + CL_NS(util)::ThreadLocal >* tokenStreams; +}; +Analyzer::Analyzer(){ + _internal = new Internal; + _internal->tokenStreams = _CLNEW CL_NS(util)::ThreadLocal >; +} +Analyzer::~Analyzer(){ + _CLLDELETE(_internal->tokenStreams); + delete _internal; +} +TokenStream* Analyzer::getPreviousTokenStream() { + return _internal->tokenStreams->get(); +} +void Analyzer::setPreviousTokenStream(TokenStream* obj) { + _internal->tokenStreams->set(obj); +} +TokenStream* Analyzer::reusableTokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader) { + return tokenStream(fieldName, reader); +} + +///Compares the Token for their order +class OrderCompare:LUCENE_BASE, public CL_NS(util)::Compare::_base // +{ +public: + bool operator()( Token* t1, Token* t2 ) const{ + if(t1->startOffset()>t2->startOffset()) + return false; + if(t1->startOffset()startOffset()) + return true; + return true; +} +}; + +Token::Token(): + _startOffset (0), + _endOffset (0), + _type ( getDefaultType() ), + positionIncrement (1), + payload(NULL) +{ + _termTextLen = 0; +#ifndef LUCENE_TOKEN_WORD_LENGTH + _buffer = NULL; + bufferTextLen = 0; +#else + _buffer[0] = 0; //make sure null terminated + bufferTextLen = LUCENE_TOKEN_WORD_LENGTH+1; +#endif +} + +Token::~Token(){ +#ifndef LUCENE_TOKEN_WORD_LENGTH + free(_buffer); +#endif + _CLLDELETE(payload); +} + +Token::Token(const TCHAR* text, const int32_t start, const int32_t end, const TCHAR* typ): + _startOffset (start), + _endOffset (end), + _type ( (typ==NULL?getDefaultType():typ) ), + positionIncrement (1), + payload(NULL) +{ + _termTextLen = 0; +#ifndef LUCENE_TOKEN_WORD_LENGTH + _buffer = NULL; + bufferTextLen = 0; +#else + _buffer[0] = 0; //make sure null terminated + bufferTextLen = LUCENE_TOKEN_WORD_LENGTH+1; +#endif + setText(text, -1); +} + +size_t Token::bufferLength(){ + return bufferTextLen; +} + + +int32_t Token::startOffset() const { + return _startOffset; +} + +void Token::setStartOffset(const int32_t val){ + _startOffset = val; +} +int32_t Token::endOffset() const { + return _endOffset; +} +const TCHAR* Token::getDefaultType(){ + return _T("word"); +} + +void Token::setEndOffset(const int32_t val){ + _endOffset = val; +} +const TCHAR* Token::type() const { return _type; } + +void Token::setType(const TCHAR* val) { + _type = val; +} + +void Token::set(const TCHAR* text, const int32_t start, const int32_t end, const TCHAR* typ){ + _startOffset = start; + _endOffset = end; + _type = (typ==NULL?getDefaultType():typ); + positionIncrement = 1; + setText(text); +} + +void Token::setText(const TCHAR* text, int32_t l){ + if ( l < 0 ) l = _tcslen(text); +#ifndef LUCENE_TOKEN_WORD_LENGTH + if(bufferTextLen < l+1) + growBuffer(l+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. + l=LUCENE_TOKEN_WORD_LENGTH; + } +#endif + _tcsncpy(_buffer,text,l); + _termTextLen = l; + _buffer[_termTextLen] = 0; //make sure null terminated +} + +void Token::setTermLength(int32_t len){ + if(bufferTextLengrowBuffer(len); + this->_termTextLen = len; +} +TCHAR* Token::resizeTermBuffer(size_t size){ + if(bufferTextLen_buffer; +} +void Token::growBuffer(size_t size){ + if(bufferTextLen>=size) + return; +#ifndef LUCENE_TOKEN_WORD_LENGTH + if ( _buffer == NULL ){ + _buffer = (TCHAR*)malloc( size * sizeof(TCHAR) ); + *_buffer = 0; + }else{ + //use realloc. growBuffer is public, therefore could be called + //without a subsequent call to overwriting the memory + _buffer = (TCHAR*)realloc( _buffer, 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; } + +const TCHAR* Token::termText() const{ + return (const TCHAR*) _buffer; +} +TCHAR* Token::termBuffer() const{ + return _buffer; +} +size_t Token::termTextLength() { + if ( _termTextLen == -1 ) //it was invalidated by growBuffer + _termTextLen = _tcslen(_buffer); + return _termTextLen; +} +size_t Token::termLength() { + if ( _termTextLen == -1 ) //it was invalidated by growBuffer + _termTextLen = _tcslen(_buffer); + return _termTextLen; +} +void Token::resetTermTextLen(){ + _termTextLen=-1; +} +TCHAR* Token::toString() const{ + StringBuffer sb; + sb.append(_T("(")); + if (_buffer) + sb.append( _buffer ); + else + sb.append( _T("null") ); + 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(); +} + +CL_NS(index)::Payload* Token::getPayload() { return this->payload; } +void Token::setPayload(CL_NS(index)::Payload* payload) { + _CLLDELETE(this->payload); + this->payload = payload; +} +void Token::clear() { + _CLDELETE(payload); + // Leave _buffer to allow re-use + _termTextLen = 0; + positionIncrement = 1; + // startOffset = endOffset = 0; + // type = DEFAULT_TYPE; +} + +void TokenStream::reset(){ +} + +Token* TokenStream::next(){ + Token* t = _CLNEW Token; //deprecated + if ( !next(t) ) + _CLDELETE(t); + return t; +} +TokenStream::~TokenStream(){ +} + +TokenFilter::TokenFilter(TokenStream* in, bool deleteTS): + input(in), + deleteTokenStream(deleteTS) +{ +} +TokenFilter::~TokenFilter(){ + if ( deleteTokenStream && input!=NULL ) {input->close();_CLLDELETE( input );} + //close(); -- ISH 04/11/09 +} + +// Close the input TokenStream. +void TokenFilter::close() { + if ( input != NULL ){ + input->close(); + //if ( deleteTokenStream ) _CLDELETE( input ); -- ISH 04/11/09 + } + //input = NULL; -- ISH 04/11/09 +} + + + +Tokenizer::Tokenizer() : input(NULL) +{ +} + +Tokenizer::Tokenizer(CL_NS(util)::Reader* _input): + input(_input) +{ +} + +void Tokenizer::close(){ + if (input != NULL) { + // ? delete input; + input = NULL; + } +} + +void Tokenizer::reset(CL_NS(util)::Reader* _input) { + // ? delete input; + this->input = _input; +} + +Tokenizer::~Tokenizer(){ + close(); +} + + +int32_t Analyzer::getPositionIncrementGap(const TCHAR* /*fieldName*/) +{ + return 0; +} + +CL_NS_END diff --git a/Pods/BRCLucene/src/core/CLucene/analysis/AnalysisHeader.h b/Pods/BRCLucene/src/core/CLucene/analysis/AnalysisHeader.h new file mode 100644 index 0000000..f79d8bf --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/analysis/AnalysisHeader.h @@ -0,0 +1,361 @@ +/*------------------------------------------------------------------------------ +* 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_ + +#include "CLucene/index/Payload.h" +#include "CLucene/util/VoidList.h" +#include "CLucene/LuceneThreads.h" + +CL_CLASS_DEF(util,Reader) +CL_NS_DEF(analysis) + +typedef CL_NS(util)::CLSetList CLTCSetList; + +/** 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". +

+ A Token can optionally have metadata (a.k.a. Payload) in the form of a variable + length byte array. Use {@link lucene::index::TermPositions#getPayloadLength()} and + {@link lucene::index::TermPositions#getPayload(byte[], int)} to retrieve the payloads from the index. + +

+

+ WARNING: The status of the Payloads feature is experimental. + The APIs introduced here might change in the future and will not be + supported anymore in such a case. + +

+ +

Tokenizers and filters should try to re-use a Token + instance when possible for best performance, by + implementing the {@link lucene::index::TokenStream#next(Token)} API. + Failing that, to create a new Token you should first use + one of the constructors that starts with null text. Then + you should call either {@link #termBuffer()} or {@link + #resizeTermBuffer(int)} to retrieve the Token's + termBuffer. Fill in the characters of your term into this + buffer, and finally call {@link #setTermLength(int)} to + set the length of the term text. See LUCENE-969 + for details.

+ + @see Payload +*/ +class CLUCENE_EXPORT 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; + + #ifndef LUCENE_TOKEN_WORD_LENGTH + TCHAR* _buffer; ///< the text of the term + #else + TCHAR _buffer[LUCENE_TOKEN_WORD_LENGTH+1]; ///< the text of the term + #endif + int32_t _termTextLen; ///< the length of termText. Internal use only + + CL_NS(index)::Payload* payload; + +public: + static const TCHAR* getDefaultType(); + + Token(); + virtual ~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=NULL); + void set(const TCHAR* text, const int32_t start, const int32_t end, const TCHAR* typ=NULL); + + size_t bufferLength(); + void growBuffer(size_t size); + TCHAR* resizeTermBuffer(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; + + /** Returns the internal termBuffer character array which + * you can then directly alter. If the array is too + * small for your token, use {@link + * #resizeTermBuffer(int)} to increase it. After + * altering the buffer be sure to call {@link + * #setTermLength} to record the number of valid + * characters that were placed into the termBuffer. */ + TCHAR* termBuffer() const; + size_t termLength(); //< Length of the the termBuffer. See #termBuffer + + _CL_DEPRECATED( termBuffer ) const TCHAR* termText() const; //< See #termBuffer() + _CL_DEPRECATED( termLength ) size_t termTextLength(); //< See #termLength + + void resetTermTextLen(); //< Empties the termBuffer. See #termBuffer + void setText(const TCHAR* txt, int32_t len=-1); //< Sets the termBuffer. See #termBuffer + + /** + * 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; + + /** Set the starting offset. + @see #startOffset() */ + void setStartOffset(const int32_t val); + + void setTermLength(int32_t); + + /** + * 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; + + /** Set the ending offset. + @see #endOffset() */ + void setEndOffset(const int32_t val); + + /// Returns this Token's lexical type. Defaults to "word". + const TCHAR* type() const; /// +This is an abstract class. Concrete subclasses are: +
    +
  • {@link Tokenizer}, a TokenStream +whose input is a Reader; and +
  • {@link TokenFilter}, a TokenStream +whose input is another TokenStream. +
+NOTE: subclasses must override at least one of {@link +#next()} or {@link #next(Token)}. +*/ +class CLUCENE_EXPORT TokenStream { +public: + /** Returns the next token in the stream, or null at EOS. + * When possible, the input Token should be used as the + * returned Token (this gives fastest tokenization + * performance), but this is not required and a new Token + * may be returned (pass NULL for this). + * Callers may re-use a single Token instance for successive + * calls to this method. + *

+ * This implicitly defines a "contract" between + * consumers (callers of this method) and + * producers (implementations of this method + * that are the source for tokens): + *

    + *
  • A consumer must fully consume the previously + * returned Token before calling this method again.
  • + *
  • A producer must call {@link Token#clear()} + * before setting the fields in it & returning it
  • + *
+ * Note that a {@link TokenFilter} is considered a consumer. + * @param result a Token that may or may not be used to return + * @return next token in the stream or null if end-of-stream was hit + */ + virtual Token* next(Token* token) = 0; + + /** 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(); + + /** Releases resources associated with this stream. */ + virtual void close() = 0; + + /** Resets this stream to the beginning. This is an + * optional operation, so subclasses may or may not + * implement this method. Reset() is not needed for + * the standard indexing process. However, if the Tokens + * of a TokenStream are intended to be consumed more than + * once, it is necessary to implement reset(). + */ + virtual void reset(); + + virtual ~TokenStream(); +}; + + +/** An Analyzer builds TokenStreams, which analyze text. It thus represents a + * policy for extracting index terms from text. + *

+ * 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. + *

+ * WARNING: You must override one of the methods defined by this class in your + * subclass or the Analyzer will enter an infinite loop. + */ +class CLUCENE_EXPORT Analyzer{ +public: + Analyzer(); + + /** 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; + + /** Creates a TokenStream that is allowed to be re-used + * from the previous time that the same thread called + * this method. Callers that do not need to use more + * than one TokenStream at the same time from this + * analyzer should use this method for better + * performance. + */ + virtual TokenStream* reusableTokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader); +private: + + DEFINE_MUTEX(THIS_LOCK) + struct Internal; + Internal* _internal; +protected: + + /** Used by Analyzers that implement reusableTokenStream + * to retrieve previously saved TokenStreams for re-use + * by the same thread. */ + TokenStream* getPreviousTokenStream(); + + /** Used by Analyzers that implement reusableTokenStream + * to save a TokenStream for later re-use by the same + * thread. */ + void setPreviousTokenStream(TokenStream* obj); +public: + /** + * 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); + + virtual ~Analyzer(); +}; + + +/** A Tokenizer is a TokenStream whose input is a Reader. +

+This is an abstract class. +

+NOTE: subclasses must override at least one of {@link +#next()} or {@link #next(Token)}. +

+NOTE: subclasses overriding {@link #next(Token)} must +call {@link Token#clear()}. +*/ +class CLUCENE_EXPORT 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(); + + /** Expert: Reset the tokenizer to a new reader. Typically, an + * analyzer (in its reusableTokenStream method) will use + * this to re-use a previously created tokenizer. */ + virtual void reset(CL_NS(util)::Reader* _input); + + virtual ~Tokenizer(); +}; + +/** A TokenFilter is a TokenStream whose input is another token stream. +

+This is an abstract class. +*/ +class CLUCENE_EXPORT 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/Pods/BRCLucene/src/core/CLucene/analysis/Analyzers.cpp b/Pods/BRCLucene/src/core/CLucene/analysis/Analyzers.cpp new file mode 100644 index 0000000..fd41a3f --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/analysis/Analyzers.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. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "Analyzers.h" +#include "CLucene/util/StringBuffer.h" +#include "CLucene/util/Misc.h" +#include + +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; +} +CharTokenizer::~CharTokenizer(){ +} + +TCHAR CharTokenizer::normalize(const TCHAR c) const +{ + return c; +} +Token* CharTokenizer::next(Token* token){ + int32_t length = 0; + int32_t start = offset; + while (true) { + TCHAR c; + offset++; + if (bufferIndex >= dataLen) { + dataLen = input->read(ioBuffer, 1, LUCENE_IO_BUFFER_SIZE ); + if (dataLen == -1) + dataLen = 0; + bufferIndex = 0; + } + if (dataLen <= 0 ) { + if (length > 0) + break; + else + return NULL; + }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 token; +} +void CharTokenizer::reset(CL_NS(util)::Reader* input) +{ + Tokenizer::reset(input); + bufferIndex = 0; + offset = 0; + dataLen = 0; +} + + +LetterTokenizer::LetterTokenizer(CL_NS(util)::Reader* in): + CharTokenizer(in) { +} + +LetterTokenizer::~LetterTokenizer(){} + +bool LetterTokenizer::isTokenChar(const TCHAR c) const { + return _istalpha(c)!=0; +} + +LowerCaseTokenizer::LowerCaseTokenizer(CL_NS(util)::Reader* in): + LetterTokenizer(in) { +} + +LowerCaseTokenizer::~LowerCaseTokenizer(){ +} + +TCHAR LowerCaseTokenizer::normalize(const TCHAR chr) const { + return _totlower(chr); +} + +WhitespaceTokenizer::WhitespaceTokenizer(CL_NS(util)::Reader* in):CharTokenizer(in) { +} +WhitespaceTokenizer::~WhitespaceTokenizer(){ +} + +bool WhitespaceTokenizer::isTokenChar(const TCHAR c) const{ + return _istspace(c)==0; //(return true if NOT a space) +} + +WhitespaceAnalyzer::WhitespaceAnalyzer(){ +} +WhitespaceAnalyzer::~WhitespaceAnalyzer(){ +} + +TokenStream* WhitespaceAnalyzer::tokenStream(const TCHAR* /*fieldName*/, Reader* reader) { + return _CLNEW WhitespaceTokenizer(reader); +} +TokenStream* WhitespaceAnalyzer::reusableTokenStream(const TCHAR* /*fieldName*/, CL_NS(util)::Reader* reader) +{ + Tokenizer* tokenizer = static_cast(getPreviousTokenStream()); + if (tokenizer == NULL) { + tokenizer = _CLNEW WhitespaceTokenizer(reader); + setPreviousTokenStream(tokenizer); + } else + tokenizer->reset(reader); + return tokenizer; +} + +SimpleAnalyzer::SimpleAnalyzer(){ +} +SimpleAnalyzer::~SimpleAnalyzer(){ +} +TokenStream* SimpleAnalyzer::tokenStream(const TCHAR* /*fieldName*/, Reader* reader) { + return _CLNEW LowerCaseTokenizer(reader); +} +TokenStream* SimpleAnalyzer::reusableTokenStream(const TCHAR* /*fieldName*/, CL_NS(util)::Reader* reader) { + Tokenizer* tokenizer = static_cast(getPreviousTokenStream()); + if (tokenizer == NULL) { + tokenizer = _CLNEW LowerCaseTokenizer(reader); + setPreviousTokenStream(tokenizer); + } else + tokenizer->reset(reader); + return tokenizer; +} + + +LowerCaseFilter::LowerCaseFilter(TokenStream* in, bool deleteTokenStream): + TokenFilter(in,deleteTokenStream) { +} +LowerCaseFilter::~LowerCaseFilter(){ +} + +Token* LowerCaseFilter::next(Token* t){ + if (input->next(t) == NULL) + return NULL; + stringCaseFold( t->termBuffer() ); + return t; +} + +bool StopFilter::ENABLE_POSITION_INCREMENTS_DEFAULT = false; + + +/** Constructs a filter which removes words from the input +* TokenStream that are named in the CLSetList. +*/ +StopFilter::StopFilter(TokenStream* in, bool deleteTokenStream, CLTCSetList* stopTable, bool _deleteStopTable): + TokenFilter(in, deleteTokenStream), + stopWords (stopTable), + deleteStopTable(_deleteStopTable), + enablePositionIncrements(ENABLE_POSITION_INCREMENTS_DEFAULT), + ignoreCase(false) +{ +} + +StopFilter::StopFilter(TokenStream* in, bool deleteTokenStream, const TCHAR** _stopWords, const bool _ignoreCase): + TokenFilter(in, deleteTokenStream), + enablePositionIncrements(ENABLE_POSITION_INCREMENTS_DEFAULT), + ignoreCase(_ignoreCase) +{ + deleteStopTable = true; + stopWords = _CLNEW CLTCSetList(true); + fillStopTable( stopWords,_stopWords, _ignoreCase ); +} + +StopFilter::~StopFilter(){ + if (deleteStopTable) + _CLLDELETE(stopWords); +} +//static +bool StopFilter::getEnablePositionIncrementsDefault() { + return ENABLE_POSITION_INCREMENTS_DEFAULT; +} +//static +void StopFilter::setEnablePositionIncrementsDefault(const bool defaultValue) { + ENABLE_POSITION_INCREMENTS_DEFAULT = defaultValue; +} + +bool StopFilter::getEnablePositionIncrements() const { return enablePositionIncrements; } +void StopFilter::setEnablePositionIncrements(const bool enable) { this->enablePositionIncrements = enable; } + +void StopFilter::fillStopTable(CLTCSetList* stopTable, const TCHAR** stopWords, const bool _ignoreCase) +{ + TCHAR* tmp; + if ( _ignoreCase ){ + for (int32_t i = 0; stopWords[i]!=NULL; i++){ + tmp = STRDUP_TtoT(stopWords[i]); + stringCaseFold(tmp); + stopTable->insert( tmp ); + } + }else{ + for (int32_t i = 0; stopWords[i]!=NULL; i++){ + tmp = STRDUP_TtoT(stopWords[i]); + stopTable->insert( tmp ); + } + } +} + +Token* StopFilter::next(Token* token) { + // return the first non-stop word found + int32_t skippedPositions = 0; + while (input->next(token)){ + TCHAR* termText = token->termBuffer(); + if ( ignoreCase ){ + stringCaseFold(termText); + } + if (stopWords->find(termText)==stopWords->end()){ + if (enablePositionIncrements) { + token->setPositionIncrement(token->getPositionIncrement() + skippedPositions); + } + return token; + } + skippedPositions += token->getPositionIncrement(); + } + + // reached EOS -- return nothing + return NULL; +} + +StopAnalyzer::StopAnalyzer(const char* stopwordsFile, const char* enc): + stopTable(_CLNEW CLTCSetList(true)) +{ + if ( enc == NULL ) + enc = "ASCII"; + WordlistLoader::getWordSet(stopwordsFile, enc, stopTable); +} + +StopAnalyzer::StopAnalyzer(CL_NS(util)::Reader* stopwordsReader, const bool _bDeleteReader): + stopTable(_CLNEW CLTCSetList(true)) +{ + WordlistLoader::getWordSet(stopwordsReader, stopTable, _bDeleteReader); +} + +StopAnalyzer::StopAnalyzer(): + stopTable(_CLNEW CLTCSetList(true)) +{ + StopFilter::fillStopTable(stopTable,ENGLISH_STOP_WORDS); +} +class StopAnalyzer::SavedStreams : public TokenStream { +public: + Tokenizer* source; + TokenStream* result; + + SavedStreams():source(NULL), result(NULL) {} + + void close(){} + Token* next(Token* token) {return NULL;} +}; +StopAnalyzer::~StopAnalyzer() +{ + SavedStreams* t = reinterpret_cast(this->getPreviousTokenStream()); + if (t) _CLDELETE(t->result); + _CLDELETE(stopTable); +} +StopAnalyzer::StopAnalyzer( const TCHAR** stopWords): + stopTable(_CLNEW CLTCSetList(true)) +{ + StopFilter::fillStopTable(stopTable,stopWords); +} +TokenStream* StopAnalyzer::tokenStream(const TCHAR* /*fieldName*/, Reader* reader) { + return _CLNEW StopFilter(_CLNEW LowerCaseTokenizer(reader),true, stopTable); +} + +/** Filters LowerCaseTokenizer with StopFilter. */ +TokenStream* StopAnalyzer::reusableTokenStream(const TCHAR* fieldName, Reader* reader) { + SavedStreams* streams = reinterpret_cast(getPreviousTokenStream()); + if (streams == NULL) { + streams = _CLNEW SavedStreams(); + streams->source = _CLNEW LowerCaseTokenizer(reader); + streams->result = _CLNEW StopFilter(streams->source, true, stopTable); + setPreviousTokenStream(streams); + } else + streams->source->reset(reader); + return streams->result; +} + +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("such"), + _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(_CLNEW AnalyzerMapType(true,true)) +{ + this->defaultAnalyzer = defaultAnalyzer; +} +PerFieldAnalyzerWrapper::~PerFieldAnalyzerWrapper(){ + analyzerMap->clear(); + _CLLDELETE(analyzerMap); + _CLLDELETE(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 = analyzerMap->get(const_cast(fieldName)); + if (analyzer == NULL) { + analyzer = defaultAnalyzer; + } + + return analyzer->tokenStream(fieldName, reader); +} + +TokenStream* PerFieldAnalyzerWrapper::reusableTokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader) { + Analyzer* analyzer = analyzerMap->get(const_cast(fieldName)); + if (analyzer == NULL){ + analyzer = defaultAnalyzer; + } + + return analyzer->reusableTokenStream(fieldName, reader); +} + +int32_t PerFieldAnalyzerWrapper::getPositionIncrementGap(const TCHAR* fieldName) { + Analyzer* analyzer = analyzerMap->get(const_cast(fieldName)); + if (analyzer == NULL) + analyzer = defaultAnalyzer; + return analyzer->getPositionIncrementGap(fieldName); +} + + + +ISOLatin1AccentFilter::ISOLatin1AccentFilter(TokenStream* input, bool deleteTs): + TokenFilter(input,deleteTs) +{ +} +ISOLatin1AccentFilter::~ISOLatin1AccentFilter(){ +} +Token* ISOLatin1AccentFilter::next(Token* token){ + if ( input->next(token) != NULL ){ + int32_t l = token->termLength(); + const TCHAR* chars = token->termBuffer(); + 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 token; + } + + 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 token; + } + return NULL; +} + + +KeywordAnalyzer::KeywordAnalyzer(){} +KeywordAnalyzer::~KeywordAnalyzer(){} +TokenStream* KeywordAnalyzer::tokenStream(const TCHAR* /*fieldName*/, CL_NS(util)::Reader* reader){ + return _CLNEW KeywordTokenizer(reader); +} +TokenStream* KeywordAnalyzer::reusableTokenStream(const TCHAR* /*fieldName*/, CL_NS(util)::Reader* reader) +{ + Tokenizer* tokenizer = static_cast(getPreviousTokenStream()); + if (tokenizer == NULL) { + tokenizer = _CLNEW KeywordTokenizer(reader); + setPreviousTokenStream(tokenizer); + } else + tokenizer->reset(reader); + return tokenizer; +} + +KeywordTokenizer::KeywordTokenizer(CL_NS(util)::Reader* input, int bufferSize): + Tokenizer(input) +{ + this->done = false; + this->bufferSize = bufferSize; + if ( bufferSize < 1 ) + this->bufferSize = DEFAULT_BUFFER_SIZE; +} +KeywordTokenizer::~KeywordTokenizer(){ +} + +Token* KeywordTokenizer::next(Token* token){ + if (!done) { + done = true; + int32_t upto = 0; + int32_t rd; + + token->clear(); + TCHAR* termBuffer=token->termBuffer(); + const TCHAR* readBuffer=NULL; + + while (true) { + rd = input->read(readBuffer, 1, cl_min(bufferSize, token->bufferLength()-upto) ); + if (rd == -1) + break; + if ( upto == token->bufferLength() ){ + termBuffer = token->resizeTermBuffer(token->bufferLength() + 8); + } + _tcsncpy(termBuffer + upto, readBuffer, rd); + upto += rd; + } + if ( token->bufferLength() < upto + 1 ){ + termBuffer=token->resizeTermBuffer(token->bufferLength() + 8); + } + termBuffer[upto]=0; + token->setTermLength(upto); + return token; + } + return NULL; +} +void KeywordTokenizer::reset(CL_NS(util)::Reader* input) +{ + Tokenizer::reset(input); + this->done = false; +} + + +LengthFilter::LengthFilter(TokenStream* in, const size_t _min, const size_t _max): + TokenFilter(in) +{ + this->_min = _min; + this->_max = _max; +} + +Token* LengthFilter::next(Token* token) +{ + // return the first non-stop word found + while ( input->next(token) ) + { + size_t len = token->termLength(); + if (len >= _min && len <= _max) + return token; + // note: else we ignore it but should we index each part of it? + } + // reached EOS -- return null + return NULL; +} + + +CLTCSetList* WordlistLoader::getWordSet(const char* wordfilePath, const char* enc, CLTCSetList* stopTable) +{ + if ( enc == NULL ) + enc = "ASCII"; + CL_NS(util)::FileReader* reader = NULL; + try { + reader = _CLNEW CL_NS(util)::FileReader(wordfilePath, enc, LUCENE_DEFAULT_TOKEN_BUFFER_SIZE); + stopTable = getWordSet(reader, stopTable); + } + _CLFINALLY ( + if (reader != NULL) { + //reader->close(); + _CLLDELETE(reader); + } + ); + return stopTable; +} + +//static +CLTCSetList* WordlistLoader::getWordSet(CL_NS(util)::Reader* reader, CLTCSetList* stopTable, const bool bDeleteReader) +{ + if (!stopTable) + stopTable = _CLNEW CLTCSetList(true); + + TCHAR* word = NULL; + try { + word = _CL_NEWARRAY(TCHAR, LUCENE_DEFAULT_TOKEN_BUFFER_SIZE); + while (reader->readLine(word, LUCENE_DEFAULT_TOKEN_BUFFER_SIZE) > 0) { + stopTable->insert( STRDUP_TtoT(CL_NS(util)::Misc::wordTrim(word))); + } + } + _CLFINALLY ( + if (bDeleteReader && reader != NULL) { + //reader->close(); + _CLDELETE(reader); + } + _CLDELETE_ARRAY(word); + ); + return stopTable; +} + + +CL_NS_END diff --git a/Pods/BRCLucene/src/core/CLucene/analysis/Analyzers.h b/Pods/BRCLucene/src/core/CLucene/analysis/Analyzers.h new file mode 100644 index 0000000..195324c --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/analysis/Analyzers.h @@ -0,0 +1,394 @@ +/*------------------------------------------------------------------------------ +* 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_ + +#include "CLucene/util/VoidList.h" +#include "CLucene/util/VoidMap.h" +#include "CLucene/util/CLStreams.h" +#include "AnalysisHeader.h" + +CL_NS_DEF(analysis) + +/** An abstract base class for simple, character-oriented tokenizers.*/ +class CLUCENE_EXPORT 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); + Token* next(Token* token); + void reset(CL_NS(util)::Reader* input); + + virtual ~CharTokenizer(); +}; + + +/** 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 CLUCENE_EXPORT LetterTokenizer:public CharTokenizer { +public: + // Construct a new LetterTokenizer. + LetterTokenizer(CL_NS(util)::Reader* in); + virtual ~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. +*

+* 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 CLUCENE_EXPORT LowerCaseTokenizer:public LetterTokenizer { +public: + /** Construct a new LowerCaseTokenizer. */ + LowerCaseTokenizer(CL_NS(util)::Reader* in); + virtual ~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 CLUCENE_EXPORT WhitespaceTokenizer: public CharTokenizer { +public: + /** Construct a new WhitespaceTokenizer. */ + WhitespaceTokenizer(CL_NS(util)::Reader* in); + virtual ~WhitespaceTokenizer(); +protected: + /** Collects only characters which do not satisfy _istspace.*/ + bool isTokenChar(const TCHAR c) const; +}; + + +/** An Analyzer that uses WhitespaceTokenizer. */ +class CLUCENE_EXPORT WhitespaceAnalyzer: public Analyzer { +public: + WhitespaceAnalyzer(); + TokenStream* tokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader); + TokenStream* reusableTokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader); + virtual ~WhitespaceAnalyzer(); +}; + +/** An Analyzer that filters LetterTokenizer with LowerCaseFilter. */ +class CLUCENE_EXPORT SimpleAnalyzer: public Analyzer { +public: + SimpleAnalyzer(); + TokenStream* tokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader); + TokenStream* reusableTokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader); + + virtual ~SimpleAnalyzer(); +}; + + + +/** +* Normalizes token text to lower case. +*/ +class CLUCENE_EXPORT LowerCaseFilter: public TokenFilter { +public: + LowerCaseFilter(TokenStream* in, bool deleteTokenStream); + virtual ~LowerCaseFilter(); + Token* next(Token* token); +}; + + +/** + * Removes stop words from a token stream. + */ +class CLUCENE_EXPORT 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. + //ish: implement a radix/patricia tree for this? + CLTCSetList* stopWords; + bool deleteStopTable; + + bool enablePositionIncrements; + const bool ignoreCase; +public: + static bool ENABLE_POSITION_INCREMENTS_DEFAULT; + + // 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, const bool _ignoreCase = false); + + virtual ~StopFilter(); + + /** Constructs a filter which removes words from the input + * TokenStream that are named in the CLSetList. + */ + StopFilter(TokenStream* in, bool deleteTokenStream, CLTCSetList* stopTable, bool _deleteStopTable=false); + + /** + * 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(CLTCSetList* stopTable, + const TCHAR** stopWords, const bool _ignoreCase = false); + + /** + * Returns the next input Token whose termText() is not a stop word. + */ + Token* next(Token* token); + + + /** + * @see #setEnablePositionIncrementsDefault(boolean). + */ + static bool getEnablePositionIncrementsDefault(); + + /** + * Set the default position increments behavior of every StopFilter created from now on. + *

+ * Note: behavior of a single StopFilter instance can be modified + * with {@link #setEnablePositionIncrements(boolean)}. + * This static method allows control over behavior of classes using StopFilters internally, + * for example {@link lucene::analysis::standard::StandardAnalyzer StandardAnalyzer}. + *

+ * Default : false. + * @see #setEnablePositionIncrements(boolean). + */ + static void setEnablePositionIncrementsDefault(const bool defaultValue); + + /** + * @see #setEnablePositionIncrements(boolean). + */ + bool getEnablePositionIncrements() const; + + /** + * Set to true to make this StopFilter enable position increments to result tokens. + *

+ * When set, when a token is stopped (omitted), the position increment of + * the following token is incremented. + *

+ * Default: see {@link #setEnablePositionIncrementsDefault(boolean)}. + */ + void setEnablePositionIncrements(const bool enable); + +}; + +/** + * Loader for text files that represent a list of stopwords. + * + */ +class CLUCENE_EXPORT WordlistLoader { +public: + /** + * Loads a text file and adds every line as an entry to a HashSet (omitting + * leading and trailing whitespace). Every line of the file should contain only + * one word. The words need to be in lowercase if you make use of an + * Analyzer which uses LowerCaseFilter (like StandardAnalyzer). + * + * @param wordfile File containing the wordlist + * @return A HashSet with the file's words + */ + static CLTCSetList* getWordSet(const char* wordfilePath, const char* enc = NULL, CLTCSetList* stopTable = NULL); + + /** + * Reads lines from a Reader and adds every line as an entry to a HashSet (omitting + * leading and trailing whitespace). Every line of the Reader should contain only + * one word. The words need to be in lowercase if you make use of an + * Analyzer which uses LowerCaseFilter (like StandardAnalyzer). + * + * @param reader Reader containing the wordlist + * @return A HashSet with the reader's words + */ + static CLTCSetList* getWordSet(CL_NS(util)::Reader* reader, CLTCSetList* stopTable = NULL, const bool bDeleteReader = false); +}; + + +/** Filters LetterTokenizer with LowerCaseFilter and StopFilter. */ +class CLUCENE_EXPORT StopAnalyzer: public Analyzer { + CLTCSetList* stopTable; + class SavedStreams; + +public: + /** Builds an analyzer which removes words in ENGLISH_STOP_WORDS. */ + StopAnalyzer(); + virtual ~StopAnalyzer(); + + /** Builds an analyzer which removes words in the provided array. */ + StopAnalyzer( const TCHAR** stopWords ); + + /** Builds an analyzer with the stop words from the given file. + * @see WordlistLoader#getWordSet(File) + */ + StopAnalyzer(const char* stopwordsFile, const char* enc = NULL); + + /** Builds an analyzer with the stop words from the given reader. + * @see WordlistLoader#getWordSet(Reader) + */ + StopAnalyzer(CL_NS(util)::Reader* stopwordsReader, const bool _bDeleteReader = false); + + /** Filters LowerCaseTokenizer with StopFilter. */ + TokenStream* tokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader); + TokenStream* reusableTokenStream(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. + * + *

Example usage: + * + *

+ *   PerFieldAnalyzerWrapper* aWrapper =
+ *      new PerFieldAnalyzerWrapper(new StandardAnalyzer());
+ *   aWrapper.addAnalyzer("firstname", new KeywordAnalyzer());
+ *   aWrapper.addAnalyzer("lastname", new KeywordAnalyzer());
+ * 
+ * + *

In this example, StandardAnalyzer will be used for all fields except "firstname" + * and "lastname", for which KeywordAnalyzer will be used. + * + *

A PerFieldAnalyzerWrapper can be used like any other analyzer, for both indexing + * and query parsing. + */ +class CLUCENE_EXPORT PerFieldAnalyzerWrapper : public Analyzer { +private: + Analyzer* defaultAnalyzer; + + typedef CL_NS(util)::CLHashMap > AnalyzerMapType; + AnalyzerMapType* 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); + virtual ~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); + + TokenStream* reusableTokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader); + + /** Return the positionIncrementGap from the analyzer assigned to fieldName */ + int32_t getPositionIncrementGap(const TCHAR* fieldName); +}; + + +/** + * 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. + *

+ * For instance, 'à' will be replaced by 'a'. + *

+ */ +class CLUCENE_EXPORT ISOLatin1AccentFilter: public TokenFilter { +public: + ISOLatin1AccentFilter(TokenStream* input, bool deleteTs); + + /** + * To replace accented characters in a String by unaccented equivalents. + */ + Token* next(Token* token); + virtual ~ISOLatin1AccentFilter(); +}; + + +/** + * Emits the entire input as a single token. + */ +class CLUCENE_EXPORT 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); + Token* next(Token* token); + void reset(CL_NS(util)::Reader* input); + + virtual ~KeywordTokenizer(); +}; + +/** + * "Tokenizes" the entire stream as a single token. This is useful + * for data like zip codes, ids, and some product names. + */ +class CLUCENE_EXPORT KeywordAnalyzer: public Analyzer { +public: + KeywordAnalyzer(); + virtual ~KeywordAnalyzer(); + TokenStream* tokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader); + TokenStream* reusableTokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader); +}; + + +/** + * Removes words that are too long and too short from the stream. + * + */ +class CLUCENE_EXPORT LengthFilter: public TokenFilter { +private: + size_t _min; + size_t _max; +public: + /** + * Build a filter that removes words that are too long or too + * short from the text. + */ + LengthFilter(TokenStream* in, const size_t _min, const size_t _max); + + /** + * Returns the next input Token whose termText() is the right len + */ + Token* next(Token* token); +}; + + +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/analysis/CachingTokenFilter.cpp b/Pods/BRCLucene/src/core/CLucene/analysis/CachingTokenFilter.cpp new file mode 100644 index 0000000..0591f44 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/analysis/CachingTokenFilter.cpp @@ -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. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "CachingTokenFilter.h" + +CL_NS_DEF(analysis) + +CachingTokenFilter::CachingTokenFilter( TokenStream * input, bool bDeleteTS ) +: TokenFilter( input, bDeleteTS ) +{ + bCacheInitialized = false; +} + +CachingTokenFilter::~CachingTokenFilter() +{ + for( itCache = cache.begin(); itCache != cache.end(); itCache++ ) + delete (*itCache); + + cache.clear(); +} + +Token * CachingTokenFilter::next( Token* t ) +{ + if( ! bCacheInitialized ) + { + fillCache(); + bCacheInitialized = true; + itCache = cache.begin(); + } + + // if the cache is exhausted, return null + if( itCache == cache.end() ) + return NULL; + + t->set( (*itCache)->termBuffer(), (*itCache)->startOffset(), (*itCache)->endOffset(), (*itCache)->type() ); + t->setPositionIncrement( (*itCache)->getPositionIncrement() ); + t->setPayload( (*itCache)->getPayload() ); + itCache++; + + return t; +} + +void CachingTokenFilter::reset() +{ + itCache = cache.begin(); +} + +void CachingTokenFilter::fillCache() +{ + Token token; + Token * pCopy; + + while( input->next( &token ) ) + { + pCopy = new Token( token.termBuffer(), token.startOffset(), token.endOffset(), token.type() ); + pCopy ->setPositionIncrement( token.getPositionIncrement() ); + pCopy ->setPayload( token.getPayload() ); + cache.push_back( pCopy ); + } +} + +CL_NS_END \ No newline at end of file diff --git a/Pods/BRCLucene/src/core/CLucene/analysis/CachingTokenFilter.h b/Pods/BRCLucene/src/core/CLucene/analysis/CachingTokenFilter.h new file mode 100644 index 0000000..a280821 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/analysis/CachingTokenFilter.h @@ -0,0 +1,33 @@ +/*------------------------------------------------------------------------------ +* 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_CachingTokenFilter +#define _lucene_analysis_CachingTokenFilter + +#include +#include "CLucene/analysis/AnalysisHeader.h" + +CL_NS_DEF(analysis) + +class CLUCENE_EXPORT CachingTokenFilter : public TokenFilter +{ +private: + bool bCacheInitialized; + std::list cache; + std::list::iterator itCache; + +public: + CachingTokenFilter( TokenStream * input, bool bDeleteTS ); + virtual ~CachingTokenFilter(); + + Token * next( Token* t ); + void reset(); + void fillCache(); +}; + +CL_NS_END + +#endif // _lucene_analysis_CachingTokenFilter diff --git a/Pods/BRCLucene/src/core/CLucene/analysis/standard/StandardAnalyzer.cpp b/Pods/BRCLucene/src/core/CLucene/analysis/standard/StandardAnalyzer.cpp new file mode 100644 index 0000000..34e8741 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/analysis/standard/StandardAnalyzer.cpp @@ -0,0 +1,112 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "StandardAnalyzer.h" + +////#include "CLucene/util/VoidMap.h" +#include "CLucene/util/CLStreams.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(_CLNEW CLTCSetList(true)), maxTokenLength(DEFAULT_MAX_TOKEN_LENGTH) + { + StopFilter::fillStopTable( stopSet,CL_NS(analysis)::StopAnalyzer::ENGLISH_STOP_WORDS); + } + + StandardAnalyzer::StandardAnalyzer( const TCHAR** stopWords): + stopSet(_CLNEW CLTCSetList(true)), maxTokenLength(DEFAULT_MAX_TOKEN_LENGTH) + { + StopFilter::fillStopTable( stopSet,stopWords ); + } + + StandardAnalyzer::StandardAnalyzer(const char* stopwordsFile, const char* enc): + stopSet(_CLNEW CLTCSetList(true)), maxTokenLength(DEFAULT_MAX_TOKEN_LENGTH) + { + if ( enc == NULL ) + enc = "ASCII"; + WordlistLoader::getWordSet(stopwordsFile, enc, stopSet); + } + + StandardAnalyzer::StandardAnalyzer(CL_NS(util)::Reader* stopwordsReader, const bool _bDeleteReader): + stopSet(_CLNEW CLTCSetList(true)), maxTokenLength(DEFAULT_MAX_TOKEN_LENGTH) + { + WordlistLoader::getWordSet(stopwordsReader, stopSet, _bDeleteReader); + } + + class StandardAnalyzer::SavedStreams : public TokenStream { + public: + StandardTokenizer* tokenStream; + TokenStream* filteredTokenStream; + + SavedStreams():tokenStream(NULL), filteredTokenStream(NULL) + { + } + + virtual ~SavedStreams() + { + //_CLDELETE(tokenStream); // This will be deleted with the filteredTokenStream + _CLDELETE(filteredTokenStream); + } + + void close(){} + Token* next(Token* token) {return NULL;} + }; + + StandardAnalyzer::~StandardAnalyzer(){ + SavedStreams* t = reinterpret_cast(this->getPreviousTokenStream()); + if (t) _CLDELETE(t->filteredTokenStream); + _CLLDELETE(stopSet); + } + + + TokenStream* StandardAnalyzer::tokenStream(const TCHAR* /*fieldName*/, Reader* reader) + { + BufferedReader* bufferedReader = reader->__asBufferedReader(); + TokenStream* ret; + + if ( bufferedReader == NULL ) + ret = _CLNEW StandardTokenizer( _CLNEW FilteredBufferedReader(reader, false), true ); + else + ret = _CLNEW StandardTokenizer(bufferedReader); + //ret->setMaxTokenLength(maxTokenLength); + ret = _CLNEW StandardFilter(ret,true); + ret = _CLNEW LowerCaseFilter(ret,true); + ret = _CLNEW StopFilter(ret,true, stopSet); + return ret; + } + + TokenStream* StandardAnalyzer::reusableTokenStream(const TCHAR* fieldName, Reader* reader){ + SavedStreams* streams = reinterpret_cast(getPreviousTokenStream()); + if (streams == NULL) { + streams = _CLNEW SavedStreams(); + setPreviousTokenStream(streams); + + BufferedReader* bufferedReader = reader->__asBufferedReader(); + if ( bufferedReader == NULL ) + streams->tokenStream = _CLNEW StandardTokenizer( _CLNEW FilteredBufferedReader(reader, false), true); + else + streams->tokenStream = _CLNEW StandardTokenizer(bufferedReader); + + streams->filteredTokenStream = _CLNEW StandardFilter(streams->tokenStream, true); + streams->filteredTokenStream = _CLNEW LowerCaseFilter(streams->filteredTokenStream, true); + streams->filteredTokenStream = _CLNEW StopFilter(streams->filteredTokenStream, true, stopSet); + } else { + streams->tokenStream->reset(reader); + } + //streams->tokenStream->setMaxTokenLength(maxTokenLength); + + return streams->filteredTokenStream; + } +CL_NS_END2 diff --git a/Pods/BRCLucene/src/core/CLucene/analysis/standard/StandardAnalyzer.h b/Pods/BRCLucene/src/core/CLucene/analysis/standard/StandardAnalyzer.h new file mode 100644 index 0000000..85e476b --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/analysis/standard/StandardAnalyzer.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_analysis_standard_StandardAnalyzer +#define _lucene_analysis_standard_StandardAnalyzer + +CL_CLASS_DEF(util,BufferedReader) +#include "CLucene/analysis/AnalysisHeader.h" + +CL_NS_DEF2(analysis,standard) + +/** +* Filters {@link lucene::analysis::standard::StandardTokenizer} with {@link lucene::analysis::standard::StandardFilter}, +* {@link lucene::analysis::LowerCaseFilter} and {@link lucene::analysis::StopFilter}, using a list of English stop words. +* +*/ + class CLUCENE_EXPORT StandardAnalyzer : public Analyzer + { + private: + CLTCSetList* stopSet; + int32_t maxTokenLength; + + class SavedStreams; + public: + /** Default maximum allowed token length */ + LUCENE_STATIC_CONSTANT(int32_t, DEFAULT_MAX_TOKEN_LENGTH = 255); + + /** Builds an analyzer.*/ + StandardAnalyzer(); + + /** Builds an analyzer with the given stop words. */ + StandardAnalyzer( const TCHAR** stopWords); + + /** Builds an analyzer with the stop words from the given file. + * @see WordlistLoader#getWordSet(File) + */ + StandardAnalyzer(const char* stopwordsFile, const char* enc = NULL); + + /** Builds an analyzer with the stop words from the given reader. + * @see WordlistLoader#getWordSet(Reader) + */ + StandardAnalyzer(CL_NS(util)::Reader* stopwordsReader, const bool _bDeleteReader = false); + + virtual ~StandardAnalyzer(); + + /** + * Constructs a StandardTokenizer filtered by a + * StandardFilter, a LowerCaseFilter and a StopFilter. + */ + TokenStream* tokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader); + + TokenStream* reusableTokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader); + + /** + * Set maximum allowed token length. If a token is seen + * that exceeds this length then it is discarded. This + * setting only takes effect the next time tokenStream or + * reusableTokenStream is called. + */ + void setMaxTokenLength(const int32_t length) { + maxTokenLength = length; + } + + /** + * @see #setMaxTokenLength + */ + int getMaxTokenLength() const { + return maxTokenLength; + } + }; +CL_NS_END2 +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/analysis/standard/StandardFilter.cpp b/Pods/BRCLucene/src/core/CLucene/analysis/standard/StandardFilter.cpp new file mode 100644 index 0000000..075d233 --- /dev/null +++ b/Pods/BRCLucene/src/core/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/_ApiHeader.h" +#include "StandardFilter.h" + +#include "../AnalysisHeader.h" +#include "../Analyzers.h" +#include "StandardTokenizerConstants.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(){ + } + + Token* StandardFilter::next(Token* t) { + if (input->next(t) == NULL) + return NULL; + + TCHAR* text = t->termBuffer(); + const int32_t textLength = t->termLength(); + 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 t; + + } else if ( type == tokenImage[ACRONYM] ) { // remove dots + int32_t j = 0; + for ( int32_t i=0;iresetTermTextLen(); + return t; + + } else { + return t; + } + } + +CL_NS_END2 diff --git a/Pods/BRCLucene/src/core/CLucene/analysis/standard/StandardFilter.h b/Pods/BRCLucene/src/core/CLucene/analysis/standard/StandardFilter.h new file mode 100644 index 0000000..9fcd3de --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/analysis/standard/StandardFilter.h @@ -0,0 +1,35 @@ +/*------------------------------------------------------------------------------ +* 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 + + +#include "CLucene/analysis/AnalysisHeader.h" +//#include "../Analyzers.h" +//#include "StandardTokenizerConstants.h" + +CL_CLASS_DEF(util,StringBuffer) + +CL_NS_DEF2(analysis,standard) + + /** Normalizes tokens extracted with {@link lucene::analysis::standard::StandardTokenizer}. */ + class CLUCENE_EXPORT StandardFilter: public TokenFilter{ + public: + // Construct filtering in. + StandardFilter(TokenStream* in, bool deleteTokenStream); + + virtual ~StandardFilter(); + + + /** Returns the next token in the stream, or NULL at EOS. + *

Removes 's from the end of words. + *

Removes dots from acronyms. + */ + Token* next(Token* token); + }; +CL_NS_END2 +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/analysis/standard/StandardTokenizer.cpp b/Pods/BRCLucene/src/core/CLucene/analysis/standard/StandardTokenizer.cpp new file mode 100644 index 0000000..b2a708e --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/analysis/standard/StandardTokenizer.cpp @@ -0,0 +1,464 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "StandardTokenizer.h" +#include "CLucene/util/StringBuffer.h" +#include "CLucene/util/_FastCharStream.h" +#include "CLucene/util/CLStreams.h" + +CL_NS_USE(analysis) +CL_NS_USE(util) +CL_NS_DEF2(analysis,standard) + + const TCHAR* tokenImageArray[] = { + _T(""), + _T(""), + _T(""), + _T(""), + _T(""), + _T(""), + _T(""), + _T(""), + _T(""), + _T("") + }; + 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(sb.len)) + + + StandardTokenizer::StandardTokenizer(BufferedReader* reader, bool deleteReader): + /* rdPos is zero-based. It starts at -1, and will advance to the first + ** position when readChar() is first called. */ + rdPos(-1), + tokenStart(-1), + rd(_CLNEW FastCharStream(reader)) + { + this->reader = reader; + this->deleteReader = deleteReader; + } + + StandardTokenizer::~StandardTokenizer() { + _CLDELETE(rd); + if ( this->deleteReader ) + _CLDELETE(reader) + } + + 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 Token* 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 t; + } + + void StandardTokenizer::reset(Reader* _input) { + this->input = _input; + if (rd->input==NULL) rd->input = _input->__asBufferedReader(); + rdPos = -1; + tokenStart = -1; + rd->reset(); + } + + Token* 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; + t = ReadAlphaNum(ch,t); + if ( t != NULL) return 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 t; + } else if ( _CJK ){ + t = ReadCJK(ch,t); + if ( t != NULL ) return t; + } + } + return NULL; + } + + Token* 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->termBuffer(),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 NULL; + } + 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 NULL; + } + + /* 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 NULL; //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 NULL; + } + + return setToken(t,&str,tokenType); + } + + Token* 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->termBuffer(),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); + } + + Token* 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->termBuffer(),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); + } + + + Token* 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); + } + + Token* 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); + } + + Token* 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 t; + } + + Token* 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/Pods/BRCLucene/src/core/CLucene/analysis/standard/StandardTokenizer.h b/Pods/BRCLucene/src/core/CLucene/analysis/standard/StandardTokenizer.h new file mode 100644 index 0000000..049a406 --- /dev/null +++ b/Pods/BRCLucene/src/core/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 + + +#include "../AnalysisHeader.h" //required for Tokenizer +#include "StandardTokenizerConstants.h" +CL_CLASS_DEF(analysis,Token) +CL_CLASS_DEF(util,BufferedReader) +CL_CLASS_DEF(util,StringBuffer) +CL_CLASS_DEF(util,FastCharStream) + +CL_NS_DEF2(analysis,standard) + +/** A grammar-based tokenizer constructed with JavaCC. + * + *

This should be a good tokenizer for most European-language documents: + * + *

    + *
  • Splits words at punctuation characters, removing punctuation. However, a + * dot that's not followed by whitespace is considered part of a token. + *
  • 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. + *
  • Recognizes email addresses and internet hostnames as one token. + *
+ * + *

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 CLUCENE_EXPORT 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 Token* setToken(Token* t, CL_NS(util)::StringBuffer* sb, TokenTypes tokenCode); + + Token* ReadDotted(CL_NS(util)::StringBuffer* str, TokenTypes forcedType,Token* t); + + CL_NS(util)::BufferedReader* reader; + bool deleteReader; + CL_NS(util)::FastCharStream* rd; + public: + + // Constructs a tokenizer for this Reader. + StandardTokenizer(CL_NS(util)::BufferedReader* reader, bool deleteReader=false); + + virtual ~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. */ + Token* next(Token* token); + + // Reads for number like "1"/"1234.567", or IP address like "192.168.1.2". + Token* ReadNumber(const TCHAR* previousNumber, const TCHAR prev, Token* t); + + Token* ReadAlphaNum(const TCHAR prev, Token* t); + + // Reads for apostrophe-containing word. + Token* ReadApostrophe(CL_NS(util)::StringBuffer* str, Token* t); + + // Reads for something@... it may be a COMPANY name or a EMAIL address + Token* ReadAt(CL_NS(util)::StringBuffer* str, Token* t); + + // Reads for COMPANY name like AT&T. + Token* ReadCompany(CL_NS(util)::StringBuffer* str, Token* t); + + // Reads CJK characters + Token* ReadCJK(const TCHAR prev, Token* t); + + virtual void reset(CL_NS(util)::Reader* _input); + }; + +CL_NS_END2 +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/analysis/standard/StandardTokenizerConstants.h b/Pods/BRCLucene/src/core/CLucene/analysis/standard/StandardTokenizerConstants.h new file mode 100644 index 0000000..815dd6f --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/analysis/standard/StandardTokenizerConstants.h @@ -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. +------------------------------------------------------------------------------*/ +#ifndef _lucene_analysis_standard_StandardTokenizerConstants +#define _lucene_analysis_standard_StandardTokenizerConstants + +// TODO: Put these into StandardTokenizer +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/Pods/BRCLucene/src/core/CLucene/debug/error.cpp b/Pods/BRCLucene/src/core/CLucene/debug/error.cpp new file mode 100644 index 0000000..9b4fe3e --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/debug/error.cpp @@ -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. +------------------------------------------------------------------------------*/ +#include "CLucene/_SharedHeader.h" +#include "error.h" +#include "CLucene/util/Misc.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():_twhat(NULL),error_number(0){ +#ifndef _ASCII + _awhat = NULL; +#endif + } + CLuceneError::CLuceneError(int num, const char* str, bool ownstr):error_number(num) + { +#ifdef _ASCII + _twhat=STRDUP_AtoA(str); + +#else + _awhat=STRDUP_AtoA(str); + _twhat=NULL; +#endif + if ( ownstr ) + _CLDELETE_LCaARRAY( const_cast(str)); + } + +#ifndef _ASCII + CLuceneError::CLuceneError(int num, const TCHAR* str, bool ownstr) + { + error_number = num; + _awhat=NULL; + _twhat=STRDUP_TtoT(str); + if ( ownstr ) + _CLDELETE_LCARRAY((TCHAR*)str); + } +#endif + + CLuceneError::CLuceneError(const CLuceneError& clone) + { + this->error_number = clone.error_number; +#ifndef _ASCII + this->_awhat = NULL; + if ( clone._awhat != NULL ) + this->_awhat = STRDUP_AtoA(clone._awhat); +#endif + this->_twhat = NULL; + if ( clone._twhat != NULL ) + this->_twhat = STRDUP_TtoT(clone._twhat); + } + CLuceneError::~CLuceneError() throw(){ + _CLDELETE_LCARRAY(_twhat); +#ifndef _ASCII + _CLDELETE_LCaARRAY(_awhat); +#endif + } + char* CLuceneError::what(){ +#ifdef _ASCII + return _twhat; +#else + if ( _awhat == NULL ) + _awhat = STRDUP_TtoA(_twhat); + return _awhat; +#endif + } + TCHAR* CLuceneError::twhat(){ +#ifdef _ASCII + return _twhat; +#else + if ( _twhat == NULL ) + _twhat = STRDUP_AtoT(_awhat); + return _twhat; +#endif + } + +#ifndef _ASCII + void CLuceneError::set(int num, const char* str, bool ownstr){ + _CLDELETE_CARRAY(_twhat); + _CLDELETE_CaARRAY(_awhat); + _awhat=STRDUP_AtoA(str); + error_number = num; + if ( ownstr ) + _CLDELETE_LCaARRAY( const_cast(str)); + } +#endif + + void CLuceneError::set(int num, const TCHAR* str, bool ownstr){ +#ifndef _ASCII + _CLDELETE_CaARRAY(_awhat); +#endif + _CLDELETE_CARRAY(_twhat); + _twhat=STRDUP_TtoT(str); + error_number = num; + if ( ownstr ) + _CLDELETE_LCARRAY(const_cast(str)); + } + +#endif //_LUCENE_DISABLE_EXCEPTIONS diff --git a/Pods/BRCLucene/src/core/CLucene/debug/error.h b/Pods/BRCLucene/src/core/CLucene/debug/error.h new file mode 100644 index 0000000..9fe980f --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/debug/error.h @@ -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. +------------------------------------------------------------------------------*/ +#ifndef _lucene_debug_error_ +#define _lucene_debug_error_ + + +#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 // Sub-error: AlreadyClosed +#define CL_ERR_UnknownOperator 14 +#define CL_ERR_ConcurrentModification 15 +#define CL_ERR_CorruptIndex 16 +#define CL_ERR_NumberFormat 17 +#define CL_ERR_AlreadyClosed 18 +#define CL_ERR_StaleReader 19 +#define CL_ERR_LockObtainFailed 20 +#define CL_ERR_Merge 21 //< Exception thrown if there are any problems while executing a merge. +#define CL_ERR_MergeAborted 22 +#define CL_ERR_OutOfMemory 23 +#define CL_ERR_FieldReader 24 + +//////////////////////////////////////////////////////// +//error try/throw/catch definitions +//////////////////////////////////////////////////////// +#ifdef _CL_DISABLE_NATIVE_EXCEPTIONS + #include + + /* + #define try struct pj_exception_state_t pj_x_except__; int pj_x_code__; \ + if(1){ \ + pj_push_exception_handler_(&pj_x_except__); \ + pj_x_code__ = pj_setjmp(pj_x_except__.state); \ + if (pj_x_code__ == 0) + #define _CLCATCHEND pj_pop_exception_handler_(); \ + } else {} + #define _CLCATCH else if (pj_x_code__ == (id)) _CLCATCHEND + #define _CLCATCHANY else _CLCATCHEND + #define _RETHROW pj_throw_exception_(pj_x_code__) + + #define _CLFINALLY(x) else{x _RETHROW}_CLCATCHEND x + #define _CLTHROWA(number) pj_throw_exception_(number) + #define _CLTHROWT(number) pj_throw_exception_(number) + #define _THROWA_DEL(number) _CLDELETE_CaARRAY(str); pj_throw_exception_(number) + #define _THROWT_DEL(number) _CLDELETE_CARRAY(str); pj_throw_exception_(number) + + */ +#else +class CLUCENE_EXPORT CLuceneError +{ +#ifndef _ASCII + char* _awhat; +#endif + TCHAR* _twhat; + int error_number; +public: + CLuceneError(); + CLuceneError(const CLuceneError& clone); +#ifndef _ASCII + CLuceneError(int num, const char* str, bool ownstr); +#endif + CLuceneError(int num, const TCHAR* str, bool ownstr); + int number() const{return error_number;} + char* what(); + TCHAR* twhat(); + ~CLuceneError() throw(); + + void set(int num, const TCHAR*, bool ownstr=false); +#ifndef _ASCII + void set(int num, const char*, bool ownstr=false); +#endif +}; + + //#define _THROWS //does nothing + #define _TRY try + #define _CLCATCH_ERR(err_num, cleanup_code, else_code) catch(CLuceneError& err){if (err.number()!=err_num){cleanup_code;throw err;}else {else_code;}} + #define _CLCATCH_ERR_ELSE(err_num, else_code) catch(CLuceneError& err){if (err.number()!=err_num){throw err;}else {else_code;}} + #define _CLCATCH_ERR_CLEANUP(err_num, cleanup_code) catch(CLuceneError& err){if (err.number()!=err_num){cleanup_code;throw err;}} + #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/Pods/BRCLucene/src/core/CLucene/debug/lucenebase.h b/Pods/BRCLucene/src/core/CLucene/debug/lucenebase.h new file mode 100644 index 0000000..c053f11 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/debug/lucenebase.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_debug_lucenebase_ +#define _lucene_debug_lucenebase_ + +#include "CLucene/LuceneThreads.h" + +CL_NS_DEF(debug) + +//Lucenebase is the superclass of all clucene objects. It provides +//memory debugging tracking and/or reference counting +class CLUCENE_EXPORT LuceneBase{ +public: + _LUCENE_ATOMIC_INT __cl_refcount; + LuceneBase(){ + _LUCENE_ATOMIC_INT_SET(__cl_refcount,1); + } + inline int __cl_getref(){ + return _LUCENE_ATOMIC_INT_GET(__cl_refcount); + } + inline int __cl_addref(){ return _LUCENE_ATOMIC_INC(&__cl_refcount); } + inline int __cl_decref(){ return _LUCENE_ATOMIC_DEC(&__cl_refcount); } + virtual ~LuceneBase(){}; +}; + +class CLUCENE_EXPORT LuceneVoidBase{ + public: + virtual ~LuceneVoidBase(){}; +}; + +#if defined(LUCENE_ENABLE_REFCOUNT) + #define LUCENE_BASE public CL_NS(debug)::LuceneBase +#else + #define LUCENE_BASE public CL_NS(debug)::LuceneVoidBase +#endif +#define LUCENE_REFBASE public CL_NS(debug)::LuceneBase //this is the base of classes who *always* need refcounting + + +CL_NS_END +#endif //_lucene_debug_lucenebase_ diff --git a/Pods/BRCLucene/src/core/CLucene/debug/mem.h b/Pods/BRCLucene/src/core/CLucene/debug/mem.h new file mode 100644 index 0000000..98038b5 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/debug/mem.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_debug_mem_h +#define _lucene_debug_mem_h + +//todo: this is a hack... +#ifndef CND_PRECONDITION + #include + #define CND_PRECONDITION(x,y) assert(x) +#endif + +//Macro for creating new objects +#if defined(LUCENE_ENABLE_REFCOUNT) + #define _CLNEW new +#else + #define _CLNEW new +#endif +#define _CL_POINTER(x) (x==NULL?NULL:(x->__cl_addref()>=0?x:x)) //return a add-ref'd object +#define _CL_DECREF(x) ((x)==NULL?NULL:((x)->__cl_decref()>=0?(x):(x))) //return a add-ref'd object +#define _CL_LDECREF(x) if ((x)!=NULL) (x)->__cl_decref(); + +//Macro for creating new arrays +#define _CL_NEWARRAY(type,size) (type*)calloc(size, sizeof(type)) +#define _CLDELETE_ARRAY(x) {free(x); x=NULL;} +#define _CLDELETE_LARRAY(x) {free(x);} +#ifndef _CLDELETE_CARRAY + #define _CLDELETE_CARRAY(x) {free(x); x=NULL;} + #define _CLDELETE_LCARRAY(x) {free(x);} +#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_LCARRAY_ALL(x) {if ( x!=NULL ){ for(int xcda=0;x[xcda]!=NULL;xcda++)_CLDELETE_LCARRAY(x[xcda]);}_CLDELETE_LARRAY(x)}; +#define _CLDELETE_CaARRAY_ALL(x) {if ( x!=NULL ){ for(int xcda=0;x[xcda]!=NULL;xcda++)_CLDELETE_CaARRAY(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(_LUCENE_ATOMIC_INT_GET((x)->__cl_refcount)>=0,"__cl_refcount was < 0"); if (_LUCENE_ATOMIC_INT_GET((x)->__cl_decref()) <= 0)delete x; x=NULL; } + #define _CLLDELETE(x) if (x!=NULL){ CND_PRECONDITION(_LUCENE_ATOMIC_INT_GET((x)->__cl_refcount)>=0,"__cl_refcount was < 0"); if ((x)->__cl_decref() <= 0)delete x; } +#else + #define _CLDELETE(x) {delete x;x=NULL;} + #define _CLLDELETE(x) {delete x;} +#endif + +//_CLDECDELETE deletes objects which are *always* refcounted +#define _CLDECDELETE(x) if (x!=NULL){ CND_PRECONDITION(_LUCENE_ATOMIC_INT_GET((x)->__cl_refcount)>=0,"__cl_refcount was < 0"); _LUCENE_ATOMIC_DECDELETE(&(x)->__cl_refcount, x); x=NULL; } +#define _CLLDECDELETE(x) if (x!=NULL){ CND_PRECONDITION(_LUCENE_ATOMIC_INT_GET((x)->__cl_refcount)>=0,"__cl_refcount was < 0"); _LUCENE_ATOMIC_DECDELETE(&(x)->__cl_refcount, x); } +#define _LUCENE_ATOMIC_DECDELETE(theInteger, theObject) { if ( _LUCENE_ATOMIC_DEC(theInteger) == 0) delete theObject;} + +//_VDelete should be used for deleting non-clucene objects. +//when using reference counting, _CLDELETE casts the object +//into a LuceneBase*. +#define _CLVDELETE(x) {delete x;x=NULL;} + +#endif //_lucene_debug_mem_h diff --git a/Pods/BRCLucene/src/core/CLucene/document/DateField.cpp b/Pods/BRCLucene/src/core/CLucene/document/DateField.cpp new file mode 100644 index 0000000..f0c59cf --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/document/DateField.cpp @@ -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. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.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/Pods/BRCLucene/src/core/CLucene/document/DateField.h b/Pods/BRCLucene/src/core/CLucene/document/DateField.h new file mode 100644 index 0000000..e309dc3 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/document/DateField.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_document_DateField_ +#define _lucene_document_DateField_ + + +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 + +/** +* 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. +* +*

Note that this class saves dates with millisecond granularity, +* which is bad for {@link lucene::search::RangeQuery} and {@link lucene::search::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 lucene::document::DateTools} instead. +* +*

+* Note: dates before 1970 cannot be used, and therefore cannot be +* indexed when using this class. See {@link lucene::document::DateTools} for an +* alternative without such a limitation. +* +* @deprecated If you build a new index, use {@link lucene::document::DateTools} instead. +* This class is included for use with existing indices and will be removed in a future release. +*/ +class CLUCENE_EXPORT DateField { +public: + virtual ~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 + */ + _CL_DEPRECATED( DateTools ) 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 + */ + _CL_DEPRECATED( DateTools ) static void timeToString(const int64_t time, TCHAR* str); + + /** Converts a string-encoded date into a millisecond time. */ + _CL_DEPRECATED( DateTools ) static int64_t stringToTime(const TCHAR* s); +}; +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/document/DateTools.cpp b/Pods/BRCLucene/src/core/CLucene/document/DateTools.cpp new file mode 100644 index 0000000..f99ab25 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/document/DateTools.cpp @@ -0,0 +1,272 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" + +#include "DateTools.h" +#include "CLucene/util/Misc.h" + +CL_NS_USE(util) +CL_NS_DEF(document) + +TCHAR* DateTools::timeToString(const int64_t time, Resolution resolution /*= MILLISECOND_FORMAT*/) { + TCHAR* buf = _CL_NEWARRAY(TCHAR, DATETOOLS_BUFFER_SIZE); + timeToString(time, resolution, buf, DATETOOLS_BUFFER_SIZE); + return buf; +} + +void DateTools::timeToString(const int64_t time, Resolution resolution, TCHAR* buf, size_t bufLength) +{ + // Take into account TZ and DST differences which may appear when using gmtime below + const int64_t diff_secs = getDifferenceFromGMT(); + time_t secs = time / 1000 + diff_secs; + tm *ptm = gmtime(&secs); + + char abuf[DATETOOLS_BUFFER_SIZE]; + + if (resolution == MILLISECOND_FORMAT) { + size_t len = strftime(abuf, DATETOOLS_BUFFER_SIZE, "%Y%m%d%H%M%S", ptm); + uint32_t ms = static_cast(time % 1000); + _snprintf(abuf + len, 4, "%03u", ms); + } else if (resolution == SECOND_FORMAT) { + strftime(abuf, DATETOOLS_BUFFER_SIZE, "%Y%m%d%H%M%S", ptm); + } else if (resolution == MINUTE_FORMAT) { + strftime(abuf, DATETOOLS_BUFFER_SIZE, "%Y%m%d%H%M", ptm); + } else if (resolution == YEAR_FORMAT) { + strftime(abuf, DATETOOLS_BUFFER_SIZE, "%Y", ptm); + } else if (resolution == MONTH_FORMAT) { + strftime(abuf, DATETOOLS_BUFFER_SIZE, "%Y%m", ptm); + } else if (resolution == DAY_FORMAT) { + strftime(abuf, DATETOOLS_BUFFER_SIZE, "%Y%m%d", ptm); + } else if (resolution == HOUR_FORMAT) { + strftime(abuf, DATETOOLS_BUFFER_SIZE, "%Y%m%d%H", ptm); + } + + STRCPY_AtoT(buf,abuf, bufLength); +} + +tm* DateTools::stringToDate(const TCHAR* dateString){ + const int64_t time = stringToTime(dateString); + time_t secs = time / 1000; + tm *ptm = gmtime(&secs); + return ptm; +} + +int64_t DateTools::stringToTime(const TCHAR* dateString) { + tm s_time; + memset(&s_time, 0, sizeof (s_time)); + s_time.tm_mday = 1; + int32_t ms = 0; + + switch (_tcslen(dateString)) { + case 4: // YEAR_FORMAT + { + s_time.tm_year = _ttoi(dateString) - 1900; + if (s_time.tm_year == -1900) + _CLTHROWA(CL_ERR_Parse, "Input is not valid date string"); + break; + } + case 6: // MONTH_FORMAT + { + TCHAR* tmpDate = STRDUP_TtoT(dateString); + s_time.tm_mon = _ttoi(&tmpDate[4]) - 1; + tmpDate[4] = 0; + s_time.tm_year = _ttoi(tmpDate) - 1900; + _CLDELETE_CARRAY(tmpDate); + break; + } + case 8: // DAY_FORMAT + { + TCHAR* tmpDate = STRDUP_TtoT(dateString); + s_time.tm_mday = _ttoi(&tmpDate[6]); + tmpDate[6] = 0; + s_time.tm_mon = _ttoi(&tmpDate[4]) - 1; + tmpDate[4] = 0; + s_time.tm_year = _ttoi(tmpDate) - 1900; + _CLDELETE_CARRAY(tmpDate); + break; + } + case 10: // HOUR_FORMAT + { + TCHAR* tmpDate = STRDUP_TtoT(dateString); + s_time.tm_hour = _ttoi(&tmpDate[8]); + tmpDate[8] = 0; + s_time.tm_mday = _ttoi(&tmpDate[6]); + tmpDate[6] = 0; + s_time.tm_mon = _ttoi(&tmpDate[4]) - 1; + tmpDate[4] = 0; + s_time.tm_year = _ttoi(tmpDate) - 1900; + _CLDELETE_CARRAY(tmpDate); + break; + } + case 12: // MINUTE_FORMAT + { + TCHAR* tmpDate = STRDUP_TtoT(dateString); + s_time.tm_min = _ttoi(&tmpDate[10]); + tmpDate[10] = 0; + s_time.tm_hour = _ttoi(&tmpDate[8]); + tmpDate[8] = 0; + s_time.tm_mday = _ttoi(&tmpDate[6]); + tmpDate[6] = 0; + s_time.tm_mon = _ttoi(&tmpDate[4]) - 1; + tmpDate[4] = 0; + s_time.tm_year = _ttoi(tmpDate) - 1900; + _CLDELETE_CARRAY(tmpDate); + break; + } + case 14: // SECOND_FORMAT + { + TCHAR* tmpDate = STRDUP_TtoT(dateString); + s_time.tm_sec = _ttoi(&tmpDate[12]); + tmpDate[12] = 0; + s_time.tm_min = _ttoi(&tmpDate[10]); + tmpDate[10] = 0; + s_time.tm_hour = _ttoi(&tmpDate[8]); + tmpDate[8] = 0; + s_time.tm_mday = _ttoi(&tmpDate[6]); + tmpDate[6] = 0; + s_time.tm_mon = _ttoi(&tmpDate[4]) - 1; + tmpDate[4] = 0; + s_time.tm_year = _ttoi(tmpDate) - 1900; + _CLDELETE_CARRAY(tmpDate); + break; + } + case 17: // MILLISECOND_FORMAT + { + TCHAR* tmpDate = STRDUP_TtoT(dateString); + ms = _ttoi(&tmpDate[14]); + tmpDate[14] = 0; + s_time.tm_sec = _ttoi(&tmpDate[12]); + tmpDate[12] = 0; + s_time.tm_min = _ttoi(&tmpDate[10]); + tmpDate[10] = 0; + s_time.tm_hour = _ttoi(&tmpDate[8]); + tmpDate[8] = 0; + s_time.tm_mday = _ttoi(&tmpDate[6]); + tmpDate[6] = 0; + s_time.tm_mon = _ttoi(&tmpDate[4]) - 1; + tmpDate[4] = 0; + s_time.tm_year = _ttoi(tmpDate) - 1900; + _CLDELETE_CARRAY(tmpDate); + break; + } + default: + { + _CLTHROWA(CL_ERR_Parse, "Input is not valid date string"); + break; + } + } + + time_t t = mktime(&s_time); + if (t == -1) + _CLTHROWA(CL_ERR_Parse, "Input is not valid date string"); + + // Get TZ difference in seconds, and calc it in + const int64_t diff_secs = getDifferenceFromGMT(); + + return (static_cast(t + diff_secs) * 1000) + ms; +} + +int64_t DateTools::getDifferenceFromGMT() +{ + struct tm *tptr; + time_t secs, local_secs, gmt_secs; + time( &secs ); // Current time in GMT + tptr = localtime( &secs ); + local_secs = mktime( tptr ); + tptr = gmtime( &secs ); + gmt_secs = mktime( tptr ); + return int64_t(local_secs - gmt_secs); +} + +int64_t DateTools::timeMakeInclusive(const int64_t time) +{ + time_t secs = time / 1000; + tm *ptm = localtime(&secs); // use localtime since mktime below will convert the time to GMT before returning + ptm->tm_hour = 23; + ptm->tm_min = 59; + ptm->tm_sec = 59; + + time_t t = mktime(ptm); + if (t == -1) + _CLTHROWA(CL_ERR_Parse, "Input is not a valid date"); + + return (static_cast(t) * 1000) + 999; +} + +int64_t DateTools::getTime(unsigned short year, uint8_t month, uint8_t mday, uint8_t hours, + uint8_t minutes, uint8_t seconds, unsigned short ms) +{ + struct tm* s_time; + + // get current time, and then change it according to the parameters + time_t rawtime; + time ( &rawtime ); + s_time = localtime ( &rawtime ); // use localtime, since mktime will take into account TZ differences + s_time->tm_isdst = 0; // since we are using gmtime all around, make sure DST is off + + s_time->tm_year = year - 1900; + s_time->tm_mon = month - 1; + s_time->tm_mday = mday; + s_time->tm_hour = hours; + s_time->tm_min = minutes; + s_time->tm_sec = seconds; + + time_t t = mktime(s_time); + if (t == -1) + _CLTHROWA(CL_ERR_Parse, "Input is not a valid date"); + + return (static_cast(t) * 1000) + ms; +} + +TCHAR* DateTools::getISOFormat(const int64_t time){ + const time_t secs = time / 1000; + const int64_t ms = abs((int32_t)((secs * 1000) - time)); + tm *ptm = gmtime(&secs); + return getISOFormat(ptm->tm_year + 1900, ptm->tm_mon + 1, ptm->tm_mday, ptm->tm_hour, ptm->tm_min, + ptm->tm_sec, ms); +} + +void DateTools::strCatDate(TCHAR* buf, int zeroes, int value){ + TCHAR str[10]; + _i64tot(value, str, 10); + size_t l = _tcslen(str); + + TCHAR* p = buf; + for ( size_t i=0;i<(zeroes-l);i++ ){ + *p = _T('0'); + p++; + } + _tcscat(p, str); + p+=l; + *p = _T('\0'); +} +TCHAR* DateTools::getISOFormat(unsigned short year, uint8_t month, uint8_t mday, uint8_t hours, + uint8_t minutes, uint8_t seconds, unsigned short ms) +{ + TCHAR* ISOString = _CL_NEWARRAY(TCHAR, 24); + TCHAR* p = ISOString; + strCatDate(p, 4, year); p+=4; + _tcscat(p, _T("-")); p++; + strCatDate(p, 2, month); p+=2; + _tcscat(p, _T("-")); p++; + strCatDate(p, 2, mday); p+=2; + _tcscat(p, _T(" ")); p++; + strCatDate(p, 2, hours); p+=2; + _tcscat(p, _T(":")); p++; + strCatDate(p, 2, minutes); p+=2; + _tcscat(p, _T(":")); p++; + strCatDate(p, 2, seconds); p+=2; + _tcscat(p, _T(":")); p++; + strCatDate(p, 3, ms); p+=3; + + return ISOString; +} + +DateTools::~DateTools(){ +} + +CL_NS_END diff --git a/Pods/BRCLucene/src/core/CLucene/document/DateTools.h b/Pods/BRCLucene/src/core/CLucene/document/DateTools.h new file mode 100644 index 0000000..68220c6 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/document/DateTools.h @@ -0,0 +1,96 @@ +/*------------------------------------------------------------------------------ +* 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_DateTools_ +#define _lucene_document_DateTools_ + +#ifdef _CL_TIME_WITH_SYS_TIME +# include +# include +#else +# if defined(_CL_HAVE_SYS_TIME_H) +# include +# else +# include +# endif +#endif + +#ifdef _CL_HAVE_SYS_TIMEB_H +# include +#endif + +CL_NS_DEF(document) + +class CLUCENE_EXPORT DateTools { +private: + static void strCatDate(TCHAR* buf, int zeroes, int value); +public: + + enum Resolution { + NO_RESOLUTION, + YEAR_FORMAT, // yyyy + MONTH_FORMAT, // yyyyMM + DAY_FORMAT, // yyyyMMdd + HOUR_FORMAT, // yyyyMMddHH + MINUTE_FORMAT, // yyyyMMddHHmm + SECOND_FORMAT, // yyyyMMddHHmmss + MILLISECOND_FORMAT // yyyyMMddHHmmssSSS + }; + + /** + * Converts a millisecond time to a string suitable for indexing. + * + * @param time the date expressed as milliseconds since January 1, 1970, 00:00:00 GMT + * @param resolution the desired resolution, see {@link #Resolution} + * @return a string in format yyyyMMddHHmmssSSS or shorter, + * depeding on resolution; using UTC as timezone + */ + static TCHAR* timeToString(const int64_t time, Resolution resolution = MILLISECOND_FORMAT); + + static void timeToString(const int64_t time, Resolution resolution, TCHAR* buf, size_t bufLength); + + /** + * Converts a string produced by timeToString or + * dateToString back to a time, represented as the + * number of milliseconds since January 1, 1970, 00:00:00 GMT. + * + * @param dateString the date string to be converted + * @return the number of milliseconds since January 1, 1970, 00:00:00 GMT + * @throws ParseException if dateString is not in the + * expected format + */ + static int64_t stringToTime(const TCHAR* dateString); + + static tm* stringToDate(const TCHAR* dateString); + + /**** + + * CLucene specific methods + + *****/ + + /** + * Returns a 64bit time value based on the parameters passed + */ + static int64_t getTime(unsigned short year, uint8_t month, uint8_t mday, uint8_t hours = 0, + uint8_t minutes = 0, uint8_t seconds = 0, unsigned short ms = 0); + + /** + * Returns a 64bit time value which is inclusive of the whole last day. + */ + static int64_t timeMakeInclusive(const int64_t time); + + inline static int64_t getDifferenceFromGMT(); + + static TCHAR* getISOFormat(const int64_t time); + static TCHAR* getISOFormat(unsigned short year, uint8_t month, uint8_t mday, uint8_t hours = 0, + uint8_t minutes = 0, uint8_t seconds = 0, unsigned short ms = 0); + + virtual ~DateTools(); + +}; +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/document/Document.cpp b/Pods/BRCLucene/src/core/CLucene/document/Document.cpp new file mode 100644 index 0000000..69ba2af --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/document/Document.cpp @@ -0,0 +1,183 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "Document.h" +#include "Field.h" +#include "CLucene/util/StringBuffer.h" +#include + +CL_NS_USE(util) +CL_NS_DEF(document) + + + struct DocumentFieldEnumeration::Internal { + Document::FieldsType::iterator itr; + Document::FieldsType::iterator end; + }; + DocumentFieldEnumeration::DocumentFieldEnumeration(Document::FieldsType::iterator itr, Document::FieldsType::iterator end){ + this->_internal = new DocumentFieldEnumeration::Internal; + this->_internal->itr = itr; + this->_internal->end = end; + } + + bool DocumentFieldEnumeration::hasMoreElements() const { + return _internal->itr != _internal->end; + } + + Field* DocumentFieldEnumeration::nextElement() { + //Func - Return the next element in the enumeration + //Pre - true + //Post - The next element is returned or NULL + + Field* result = NULL; + if ( _internal->itr != _internal->end ){ + result = *_internal->itr; + _internal->itr++; + } + return result; + } + + DocumentFieldEnumeration::~DocumentFieldEnumeration(){ + //Func - Destructor + //Pre - true + //Post - Instance has been destroyed + delete _internal; + } + DocumentFieldEnumeration* Document::fields() { + return _CLNEW DocumentFieldEnumeration(_fields->begin(), _fields->end()); + } + + /** Constructs a new document with no fields-> */ + Document::Document(): + _fields(_CLNEW FieldsType(true) ) + { + //Func - Constructor + //Pre - true + //Post - Instance has been created + boost = 1.0f; + } + + Document::~Document(){ + //Func - Destructor + //Pre - true + //Post - Instance has been destroyed + boost = 1.0f; + _CLDELETE(_fields); + } + + void Document::clear(){ + _fields->clear(); + } + + void Document::add(Field& field) { + _fields->push_back(&field); + } + + void Document::setBoost(const float_t boost) { + this->boost = boost; + } + + float_t Document::getBoost() const { + return boost; + } + + + Field* Document::getField(const TCHAR* name) const{ + CND_PRECONDITION(name != NULL, "name is NULL"); + for ( FieldsType::const_iterator itr = _fields->begin(); + itr != _fields->end(); itr ++ ){ + if ( _tcscmp( (*itr)->name(),name)==0 ) + return *itr; + } + 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; + } + + const Document::FieldsType* Document::getFields() const { + return _fields; + } + + + TCHAR* Document::toString() const { + StringBuffer ret(_T("Document<")); + for (FieldsType::const_iterator itr = _fields->begin(); + itr != _fields->end(); itr++ ) { + TCHAR* tmp = (*itr)->toString(); + if ( ret.len > 0 ) + ret.append(_T(" ")); + ret.append( tmp ); + _CLDELETE_ARRAY( tmp ); + } + ret.append(_T(">")); + return ret.toString(); + } + + + + void Document::removeField(const TCHAR* name) { + CND_PRECONDITION(name != NULL, "name is NULL"); + + for ( FieldsType::iterator itr = _fields->begin(); + itr != _fields->end(); itr++ ){ + + if ( _tcscmp( (*itr)->name(), name) == 0 ){ + _fields->remove(itr); + return; + } + } + } + + void Document::removeFields(const TCHAR* name) { + CND_PRECONDITION(name != NULL, "name is NULL"); + bool flag = true; + //TODO: make this more efficient + while(flag){ + for ( FieldsType::iterator itr = _fields->begin(); + itr != _fields->end(); itr++ ){ + if ( _tcscmp( (*itr)->name(), name) == 0 ){ + _fields->remove(itr); + flag = false; //no modifications allowed on an iterator + break; + } + } + flag = !flag; + } + } + + TCHAR** Document::getValues(const TCHAR* name) { + int count = 0; + for ( FieldsType::iterator itr = _fields->begin(); + itr != _fields->end(); itr++ ){ + if ( _tcscmp( (*itr)->name(),name) == 0 && (*itr)->stringValue() != NULL ) + count++; + } + + //todo: there must be a better way of doing this, we are doing two iterations of the fields + TCHAR** ret = NULL; + if ( count > 0 ){ + ret = _CL_NEWARRAY(TCHAR*,count+1); + int32_t i=0; + for ( FieldsType::iterator itr = _fields->begin(); + itr != _fields->end(); itr++ ){ + + if ( _tcscmp( (*itr)->name(),name) == 0 && (*itr)->stringValue() != NULL ){ + ret[i] = stringDuplicate((*itr)->stringValue()); + i++; + } + } + ret[count]=NULL; + } + return ret; + } +CL_NS_END diff --git a/Pods/BRCLucene/src/core/CLucene/document/Document.h b/Pods/BRCLucene/src/core/CLucene/document/Document.h new file mode 100644 index 0000000..400ec59 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/document/Document.h @@ -0,0 +1,178 @@ +/*------------------------------------------------------------------------------ +* 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_ + +#include "CLucene/util/VoidList.h" +#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 DocumentFieldEnumeration; + +/** 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. +* +*

Note that fields which are not {@link Field#isStored() stored} are +* not 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 CLUCENE_EXPORT Document:LUCENE_BASE { +public: + typedef CL_NS(util)::CLArrayList > FieldsType; +private: + FieldsType* _fields; + float_t boost; +public: + /** Constructs a new document with no fields. */ + Document(); + + ~Document(); + + /** 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. + * + *

The default value is 1.0. + * + *

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(float_t) + */ + void setBoost(const float_t boost); + + /** Returns, at indexing time, the boost factor as set by {@link #setBoost(float_t)}. + * + *

Note that once a document is indexed this value is no longer available + * from the index. At search time, for retrieved documents, this method always + * returns 1. This however does not mean that the boost value set at indexing + * time was ignored - it was just combined with other indexing time factors and + * stored elsewhere, for better indexing and search performance. (For more + * information see the "norm(t,d)" part of the scoring formula in + * {@link Similarity}.) + * + * @see #setBoost(float_t) + */ + float_t getBoost() const; + + /** + *

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.

+ *

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.

+ * + */ + void add(Field& field); + + /** + *

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.

+ *

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.

+ * Note: name is case sensitive + */ + void removeField(const TCHAR* name); + + /** + *

Removes all fields with the given name from the document. + * If there is no field with the specified name, the document remains unchanged.

+ *

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.

+ * Note: name is case sensitive + */ + void removeFields(const TCHAR* name); + + /** 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 + * Do not use this method with lazy loaded fields. + */ + 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. + * @deprecated use {@link #getFields()} instead + */ + _CL_DEPRECATED( getFields() ) DocumentFieldEnumeration* fields(); + + /** Returns a List of all the fields in a document. + *

Note that fields which are not {@link Field#isStored() stored} are + * not available in documents retrieved from the index, e.g. with {@link + * Hits#doc(int)}, {@link Searcher#doc(int)} or {@link IndexReader#document(int)}. + */ + const FieldsType* getFields() const; + + /** + * Returns an array of {@link Field}s with the given name. + * This method can return null. + * + * @param name the name of the field + * @return a Field[] array or null + */ + void getFields(const TCHAR* name, std::vector& ret); + + /** Prints the fields of a document for human consumption. */ + TCHAR* toString() const; + + + /** + * Returns an array of values of the field specified as the method parameter. + * This method can return null. + * Note: name is case sensitive + * + * @param name the name of the field + * @return a TCHAR** of field values or null + */ + TCHAR** getValues(const TCHAR* name); + + /** + * Empties out the document so that it can be reused + */ + void clear(); +}; + + +class CLUCENE_EXPORT DocumentFieldEnumeration :LUCENE_BASE{ +private: + struct Internal; + Internal* _internal; +public: + DocumentFieldEnumeration(Document::FieldsType::iterator itr, Document::FieldsType::iterator end); + ~DocumentFieldEnumeration(); + bool hasMoreElements() const; + Field* nextElement(); +}; +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/document/Field.cpp b/Pods/BRCLucene/src/core/CLucene/document/Field.cpp new file mode 100644 index 0000000..4da4715 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/document/Field.cpp @@ -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. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "Field.h" +#include "CLucene/util/_StringIntern.h" +#include "CLucene/util/StringBuffer.h" +#include "CLucene/util/CLStreams.h" +#include "CLucene/analysis/AnalysisHeader.h" + +CL_NS_USE(util) +CL_NS_DEF(document) + +Field::Field(const TCHAR* Name, Reader* reader, int config): + lazy(false) +{ + CND_PRECONDITION(Name != NULL, "Name cannot be NULL"); + CND_PRECONDITION(reader != NULL, "reader cannot be NULL"); + + _name = CLStringIntern::intern( Name ); + fieldsData = reader; + valueType = VALUE_READER; + + boost=1.0f; + + setConfig(config); +} + + +Field::Field(const TCHAR* Name, const TCHAR* Value, int _config, const bool duplicateValue): + lazy(false) +{ + CND_PRECONDITION(Name != NULL, "Name cannot be NULL"); + CND_PRECONDITION(Value != NULL, "value cannot be NULL"); + CND_PRECONDITION(_tcslen(Value)>0 || _tcslen(Name)>0, "name and value cannot both be empty"); + + /* + if (_config & INDEX_NO && _config & STORE_NO) + _CLTHROWA(CL_ERR_IllegalArgument,"it doesn't make sense to have a field that is neither indexed nor stored"); + if (_config & INDEX_NO && _config & TERMVECTOR_YES) + _CLTHROWA(CL_ERR_IllegalArgument,"cannot store term vector information for a field that is not indexed"); + */ + + _name = CLStringIntern::intern( Name ); + if (duplicateValue) + fieldsData = stringDuplicate( Value ); + else + fieldsData = (void*)Value; + valueType = VALUE_STRING; + + boost=1.0f; + + //config = INDEX_TOKENIZED; // default Field is tokenized and indexed + + setConfig(_config); +} + +Field::Field(const TCHAR* Name, ValueArray* Value, int config, bool duplicateValue): + lazy(false) +{ + CND_PRECONDITION(Name != NULL, "Name cannot be NULL"); + CND_PRECONDITION(Value != NULL, "value cannot be NULL"); + + _name = CLStringIntern::intern( Name ); + + if ( duplicateValue ){ + ValueArray* tmp = _CLNEW ValueArray(Value->length); + memcpy(tmp->values, Value->values, Value->length * sizeof(uint8_t)); + fieldsData = tmp; + }else{ + fieldsData = Value; + } + valueType = VALUE_BINARY; + + boost=1.0f; + + setConfig(config); +} + +Field::Field(const TCHAR* Name, int config): + lazy(false) +{ + CND_PRECONDITION(Name != NULL, "Name cannot be NULL"); + + _name = CLStringIntern::intern( Name ); + fieldsData = NULL; + valueType = VALUE_NONE; + + boost=1.0f; + + if (config) setConfig(config); +} + +Field::~Field(){ +//Func - Destructor +//Pre - true +//Post - Instance has been destroyed + + CLStringIntern::unintern(_name); + _resetValue(); +} + + +/*===============FIELDS=======================*/ +const TCHAR* Field::name() const { return _name; } ///(fieldsData) : NULL; } ///* Field::binaryValue() { return (valueType & VALUE_BINARY) ? static_cast*>(fieldsData) : NULL; } ///(fieldsData) : NULL; } ///(fieldsData) : NULL; } + +bool Field::isStored() const { return (config & STORE_YES) != 0; } +bool Field::isIndexed() const { return (config & INDEX_TOKENIZED)!=0 || (config & INDEX_UNTOKENIZED)!=0; } +bool Field::isTokenized() const { return (config & INDEX_TOKENIZED) != 0; } +bool Field::isCompressed() const { return (config & STORE_COMPRESS) != 0; } +bool Field::isBinary() const { return (valueType & VALUE_BINARY) && fieldsData!=NULL; } + +bool Field::isTermVectorStored() const { return (config & TERMVECTOR_YES) != 0; } +bool Field::isStoreOffsetWithTermVector() const { return (config & TERMVECTOR_YES) != 0 && (config & TERMVECTOR_WITH_OFFSETS) != 0 && ((config & TERMVECTOR_WITH_OFFSETS) != TERMVECTOR_YES); } +bool Field::isStorePositionWithTermVector() const { return (config & TERMVECTOR_YES) != 0 && (config & TERMVECTOR_WITH_POSITIONS) != 0 && ((config & TERMVECTOR_WITH_POSITIONS) != TERMVECTOR_YES); } + +bool Field::getOmitNorms() const { return (config & INDEX_NONORMS) != 0; } +void Field::setOmitNorms(const bool omitNorms) { + if ( omitNorms ) + config |= INDEX_NONORMS; + else + config &= ~INDEX_NONORMS; +} + +bool Field::isLazy() const { return lazy; } + +void Field::setValue(TCHAR* value, const bool duplicateValue) { + _resetValue(); + if (duplicateValue) + fieldsData = stringDuplicate( value ); + else + fieldsData = value; + valueType = VALUE_STRING; +} + +void Field::setValue(Reader* value) { + _resetValue(); + fieldsData = value; + valueType = VALUE_READER; +} +void Field::setValue(ValueArray* value) { + _resetValue(); + fieldsData = value; + valueType = VALUE_BINARY; +} + +/** Expert: change the value of this field. See setValue(String). */ +void Field::setValue(CL_NS(analysis)::TokenStream* value) { + _resetValue(); + fieldsData = value; + valueType = VALUE_TOKENSTREAM; +} + +void Field::setBoost(const float_t boost) { this->boost = boost; } +float_t Field::getBoost() const { return boost; } + +void Field::setConfig(const uint32_t x){ + uint32_t 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_TOKENIZED && x & INDEX_UNTOKENIZED ) + _CLTHROWA(CL_ERR_IllegalArgument,"it doesn't make sense to have an untokenised and tokenised field"); + + if ( x & INDEX_NONORMS ){ + newConfig |= INDEX_UNTOKENIZED; + newConfig |= INDEX_NONORMS; + index = true; + } + else if ( x & INDEX_TOKENIZED ){ + newConfig |= INDEX_TOKENIZED; + index = true; + } + else 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_POSITIONS) && ((x & TERMVECTOR_WITH_POSITIONS) != TERMVECTOR_YES) ){ + newConfig |= TERMVECTOR_WITH_POSITIONS; + termVector=true; + } + if ( x & TERMVECTOR_WITH_OFFSETS && ((x & TERMVECTOR_WITH_OFFSETS) != TERMVECTOR_YES) ){ + newConfig |= TERMVECTOR_WITH_OFFSETS; + termVector=true; + } + // TERMVECTOR_WITH_POSITIONS_OFFSETS is being automatically handled here + + 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() { + StringBuffer result; + if (isStored()) { + result.append( _T("stored") ); + if (isCompressed()) + result.append( _T("/compressed")); + else + result.append( _T("/uncompressed") ); + } + 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") ); + } + if (isLazy()){ + result.append( _T(",lazy") ); + } + result.appendChar('<'); + result.append(name()); + result.appendChar(':'); + + if (! isLazy() && fieldsData != NULL) { + if (valueType & VALUE_STRING) + result.append(static_cast(fieldsData)); + else if (valueType & VALUE_READER) + result.append( _T("Reader") ); + else if (valueType & VALUE_BINARY) + result.append( _T("Binary") ); + else + result.append( _T("NULL") ); + } + + result.appendChar('>'); + return result.toString(); +} + + +void Field::_resetValue() { + if (valueType & VALUE_STRING) { + TCHAR* t = static_cast(fieldsData); + _CLDELETE_CARRAY(t); + } else if (valueType & VALUE_READER) { + Reader* r = static_cast(fieldsData); + _CLDELETE(r); + } else if (valueType & VALUE_BINARY) { + ValueArray* v = static_cast*>(fieldsData); + _CLDELETE(v); + } + valueType=VALUE_NONE; +} +const char* Field::getObjectName() const{ + return getClassName(); +} +const char* Field::getClassName(){ + return "Field"; +} +CL_NS_END diff --git a/Pods/BRCLucene/src/core/CLucene/document/Field.h b/Pods/BRCLucene/src/core/CLucene/document/Field.h new file mode 100644 index 0000000..82c0a98 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/document/Field.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. +------------------------------------------------------------------------------*/ +#ifndef _lucene_document_Field_ +#define _lucene_document_Field_ + +#include "CLucene/util/Array.h" +#include "CLucene/util/Equators.h" +/* +Fieldable reading: +https://issues.apache.org/jira/browse/LUCENE-1219?page=com.atlassian.jira.plugin.system.issuetabpanels:comment- tabpanel&focusedCommentId=12578199#action_12578199 +http://lucene.markmail.org/message/ioi4f6z24cbd5bdm?q=Fieldable#query:Fieldable+page:1+mid:fxmvzb6up7zve7k4+state:results + +TODO: - Solve some inconsistencies between CL and JL - mainly in the constructors area. + - Write some more tests to make sure we conform with JL - mainly in the tokenizing and omitNorms area + - Is there a bug in JL when calling setOmitNorms after a Tokenized field was created? +*/ + +CL_CLASS_DEF(util,Reader) +CL_CLASS_DEF(analysis,TokenStream) + +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. +*/ +class CLUCENE_EXPORT Field : public CL_NS(util)::NamedObject{ +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. + */ + 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. + * Note that once you index a given field with norms enabled, + * disabling norms will have no effect. In other words, for NO_NORMS + * to have the above described effect on a field, all instances of that + * field must be indexed with NO_NORMS from the beginning. + */ + 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 = TERMVECTOR_YES | 1024, + + /** + * Store the term vector + Token offset information + * + * @see #YES + */ + TERMVECTOR_WITH_OFFSETS = TERMVECTOR_YES | 2048, + + /** + * Store the term vector + Token position and offset information + * + * @see #YES + * @see #WITH_POSITIONS + * @see #WITH_OFFSETS + */ + TERMVECTOR_WITH_POSITIONS_OFFSETS = TERMVECTOR_WITH_OFFSETS | TERMVECTOR_WITH_POSITIONS + }; + + bool lazy; + + enum ValueType { + VALUE_NONE = 0, + VALUE_STRING = 1, + VALUE_READER = 2, + VALUE_BINARY = 4, + VALUE_TOKENSTREAM = 8 + }; + + /** + * TCHAR value constructor of Field. + * @memory Set duplicateValue to false to save on memory allocations when possible + */ + Field(const TCHAR* name, const TCHAR* value, int _config, const bool duplicateValue = true); + + /** + * Reader* constructor of Field. + * @memory consumes reader + */ + Field(const TCHAR* name, CL_NS(util)::Reader* reader, int _config); + + /** + * Binary constructor of Field. + * @memory Set duplicateValue to false to save on memory allocations when possible + */ + Field(const TCHAR* name, CL_NS(util)::ValueArray* data, int _config, const bool duplicateValue = true); + + Field(const TCHAR* name, int _config); ///* binaryValue(); + + /** The value of the field as a TokesStream, or null. If null, the Reader value, + * String value, or binary value is used. Exactly one of stringValue(), + * readerValue(), binaryValue(), and tokenStreamValue() must be set. */ + virtual CL_NS(analysis)::TokenStream* tokenStreamValue(); + + // True if 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() const; + + // True if the value of the field is to be indexed, so that it may be + // searched on. + bool isIndexed() const; + + // True if 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() const; + + /** True if the value of the field is stored and compressed within the index + */ + bool isCompressed() const; + + /** True if 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 stored attribute instead. + * + * @see IndexReader#getTermFreqVector(int32_t, String) + */ + bool isTermVectorStored() const; + + /** + * True iff terms are stored as term vector together with their offsets + * (start and end positon in source text). + */ + bool isStoreOffsetWithTermVector() const; + + /** + * True iff terms are stored as term vector together with their token positions. + */ + bool isStorePositionWithTermVector() const; + + /** Returns the boost factor for hits for this field. + * + *

The default value is 1.0. + * + *

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_t) + */ + float_t getBoost() const; + + /** Sets the boost factor hits on this field. This value will be + * multiplied into the score of all hits on this this field of this + * document. + * + *

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_t)} 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_t) + * @see Similarity#lengthNorm(String, int) + * @see Similarity#encodeNorm(float_t) + */ + void setBoost(const float_t value); + + /** True if the value of the filed is stored as binary */ + bool isBinary() const; + + /** True if norms are omitted for this indexed field */ + bool getOmitNorms() const; + + /** Expert: + * + * If set, omit normalization factors associated with this indexed field. + * This effectively disables indexing boosts and length normalization for this field. + */ + void setOmitNorms(const bool omitNorms); + + /** + * Indicates whether a Field is Lazy or not. The semantics of Lazy loading are such that if a Field is lazily loaded, retrieving + * it's values via {@link #stringValue()} or {@link #binaryValue()} is only valid as long as the {@link org.apache.lucene.index.IndexReader} that + * retrieved the {@link Document} is still open. + * + * @return true if this field can be loaded lazily + */ + bool isLazy() const; + + /** Prints a Field for human consumption. */ + TCHAR* toString(); + + /**

Expert: change the value of this field. This can + * be used during indexing to re-use a single Field + * instance to improve indexing speed by avoiding GC cost + * of new'ing and reclaiming Field instances. Typically + * a single {@link Document} instance is re-used as + * well. This helps most on small documents.

+ * + *

Note that you should only use this method after the + * Field has been consumed (ie, the {@link Document} + * containing this Field has been added to the index). + * Also, each Field instance should only be used once + * within a single {@link Document} instance. See ImproveIndexingSpeed + * for details.

+ * + * @memory Caller is responsible for releasing value if duplicateValue == false */ + void setValue(TCHAR* value, const bool duplicateValue = true); + + /** Expert: change the value of this field. See setValue(TCHAR*). */ + void setValue(CL_NS(util)::Reader* value); + + /** Expert: change the value of this field. See setValue(TCHAR*). */ + void setValue(CL_NS(util)::ValueArray* value) ; + + /** Expert: change the value of this field. See setValue(TCHAR*). */ + void setValue(CL_NS(analysis)::TokenStream* value); + + virtual const char* getObjectName() const; + static const char* getClassName(); + +protected: + /** + * 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(const uint32_t _config); + + void _resetValue(); + + void* fieldsData; + ValueType valueType; + + const TCHAR* _name; + uint32_t config; + float_t boost; +}; +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/document/FieldSelector.cpp b/Pods/BRCLucene/src/core/CLucene/document/FieldSelector.cpp new file mode 100644 index 0000000..346a87e --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/document/FieldSelector.cpp @@ -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. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" + +#include "FieldSelector.h" + +CL_NS_USE(util) +CL_NS_DEF(document) + +FieldSelector::~FieldSelector(){ +} + +LoadFirstFieldSelector::~LoadFirstFieldSelector(){ +} + +FieldSelector::FieldSelectorResult LoadFirstFieldSelector::accept(const TCHAR* /*fieldName*/) const{ + return LOAD_AND_BREAK; +} + +MapFieldSelector::~MapFieldSelector(){ + _CLDELETE(fieldSelections); +} + +MapFieldSelector::MapFieldSelector() : + fieldSelections(_CLNEW FieldSelectionsType(true,false)) +{ +} + +MapFieldSelector::MapFieldSelector(std::vector& fields) : + fieldSelections(_CLNEW FieldSelectionsType(true,false)) +{ + std::vector::iterator itr = fields.begin(); + while ( itr != fields.end() ){ + add(*itr); + itr++; + } +} + +MapFieldSelector::MapFieldSelector(ArrayBase& fields): + fieldSelections(_CLNEW FieldSelectionsType(true,false)) +{ + for ( size_t i=0;ifind((TCHAR*)field); + if ( itr != fieldSelections->end() ){ + return itr->second; + } + return FieldSelector::NO_LOAD; +} + +void MapFieldSelector::add(const TCHAR* field, FieldSelector::FieldSelectorResult action){ + fieldSelections->insert(fieldSelections->end(),std::pair( + STRDUP_TtoT(field), action)); +} + + +CL_NS_END diff --git a/Pods/BRCLucene/src/core/CLucene/document/FieldSelector.h b/Pods/BRCLucene/src/core/CLucene/document/FieldSelector.h new file mode 100644 index 0000000..f66a300 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/document/FieldSelector.h @@ -0,0 +1,142 @@ +/*------------------------------------------------------------------------------ +* 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_FieldSelector_ +#define _lucene_document_FieldSelector_ + +#include "CLucene/util/Equators.h" +#include "CLucene/util/Array.h" +#include "CLucene/util/VoidMap.h" + +CL_NS_DEF(document) + +/** + * Similar to a {@link java.io.FileFilter}, the FieldSelector allows one to make decisions about + * what Fields get loaded on a {@link Document} by {@link org.apache.lucene.index.IndexReader#document(int,org.apache.lucene.document.FieldSelector)} + * + **/ +class CLUCENE_EXPORT FieldSelector :LUCENE_BASE { +public: + + /** + * Provides information about what should be done with this Field + * + **/ + enum FieldSelectorResult { + /** + * Load this {@link Field} every time the {@link Document} is loaded, reading in the data as it is encounterd. + * {@link Document#getField(String)} and {@link Document#getField(String)} should not return null. + *

+ * {@link Document#add(Field)} should be called by the Reader. + */ + LOAD = 0, + + /** + * Lazily load this {@link Field}. This means the {@link Field} is valid, but it may not actually contain its data until + * invoked. {@link Document#getField(String)} SHOULD NOT BE USED. {@link Document#getField(String)} is safe to use and should + * return a valid instance of a {@link Field}. + *

+ * {@link Document#add(Field)} should be called by the Reader. + */ + LAZY_LOAD = 1, + + /** + * Do not load the {@link Field}. {@link Document#getField(String)} and {@link Document#getField(String)} should return null. + * {@link Document#add(Field)} is not called. + *

+ * {@link Document#add(Field)} should not be called by the Reader. + */ + NO_LOAD = 2, + + /** + * Load this field as in the {@link #LOAD} case, but immediately return from {@link Field} loading for the {@link Document}. Thus, the + * Document may not have its complete set of Fields. {@link Document#getField(String)} and {@link Document#getField(String)} should + * both be valid for this {@link Field} + *

+ * {@link Document#add(Field)} should be called by the Reader. + */ + LOAD_AND_BREAK = 3, + + /** + * Behaves much like {@link #LOAD} but does not uncompress any compressed data. This is used for internal purposes. + * {@link Document#getField(String)} and {@link Document#getField(String)} should not return null. + *

+ * {@link Document#add(Field)} should be called by the Reader. + */ + LOAD_FOR_MERGE = 4, + + /** Expert: Load the size of this {@link Field} rather than its value. + * Size is measured as number of bytes required to store the field == bytes for a binary or any compressed value, and 2*chars for a String value. + * The size is stored as a binary value, represented as an int in a byte[], with the higher order byte first in [0] + */ + SIZE = 5, + + /** Expert: Like {@link #SIZE} but immediately break from the field loading loop, i.e., stop loading further fields, after the size is loaded */ + SIZE_AND_BREAK = 6 + }; + + virtual ~FieldSelector(); + + /** + * + * @param fieldName the field to accept or reject + * @return an instance of {@link FieldSelectorResult} + * if the {@link Field} named fieldName should be loaded. + */ + virtual FieldSelectorResult accept(const TCHAR* fieldName) const = 0; + +}; + +/** + * Load the First field and break. + *

+ * See {@link FieldSelectorResult#LOAD_AND_BREAK} + */ +class CLUCENE_EXPORT LoadFirstFieldSelector :public FieldSelector { +public: + ~LoadFirstFieldSelector(); + + FieldSelectorResult accept(const TCHAR* fieldName) const; +}; + +/** + * A FieldSelector based on a Map of field names to FieldSelectorResults + * + * @author Chuck Williams + */ +class CLUCENE_EXPORT MapFieldSelector: public FieldSelector { +public: + typedef CL_NS(util)::CLHashMap FieldSelectionsType; + FieldSelectionsType* fieldSelections; + + virtual ~MapFieldSelector(); + + MapFieldSelector(std::vector& fieldSelections); + + /** Create a a MapFieldSelector + */ + MapFieldSelector(); + + /** Create a a MapFieldSelector + * @param fields fields to LOAD. All other fields are NO_LOAD. + */ + MapFieldSelector(CL_NS(util)::ArrayBase& fields); + + /** Load field according to its associated value in fieldSelections + * @param field a field name + * @return the fieldSelections value that field maps to or NO_LOAD if none. + */ + FieldSelectorResult accept(const TCHAR* field) const; + + void add(const TCHAR*, FieldSelector::FieldSelectorResult action=FieldSelector::LOAD); +}; + +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/document/NumberTools.cpp b/Pods/BRCLucene/src/core/CLucene/document/NumberTools.cpp new file mode 100644 index 0000000..97f89df --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/document/NumberTools.cpp @@ -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. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" + +#include "NumberTools.h" +#include "CLucene/util/Misc.h" + +CL_NS_DEF(document) + +const TCHAR* NumberTools::MIN_STRING_VALUE = NEGATIVE_PREFIX _T("0000000000000"); +const TCHAR* NumberTools::MAX_STRING_VALUE = POSITIVE_PREFIX _T("1y2p0ij32e8e7"); + +TCHAR* NumberTools::longToString(int64_t l) +{ + if (l == LUCENE_INT64_MIN_SHOULDBE) { + // special case, because long is not symetric around zero + return stringDuplicate(MIN_STRING_VALUE); + } + + TCHAR* buf = _CL_NEWARRAY(TCHAR, STR_SIZE + 1); + if (l < 0) { + buf[0] = NEGATIVE_PREFIX[0]; + l = LUCENE_INT64_MAX_SHOULDBE + l + 1; + } else { + buf[0] = POSITIVE_PREFIX[0]; + } + + TCHAR tmp[STR_SIZE]; + _i64tot(l, tmp, NUMBERTOOLS_RADIX); + size_t len = _tcslen(tmp); + _tcscpy(buf+(STR_SIZE-len),tmp); + for ( size_t i=1;i + * That is, if l1 is less than l2 for any two longs l1 and l2, then + * NumberTools.longToString(l1) is lexicographically less than + * NumberTools.longToString(l2). (Similarly for "greater than" and "equals".) + * + *

+ * This class handles all long values (unlike + * {@link org.apache.lucene.document.DateField}). + * + * + */ +class CLUCENE_EXPORT NumberTools :LUCENE_BASE { + + #define NUMBERTOOLS_RADIX 36 + + #define NEGATIVE_PREFIX _T("-") + // NB: NEGATIVE_PREFIX must be < POSITIVE_PREFIX + #define POSITIVE_PREFIX _T("0") + +public: + //NB: this must be less than + /** + * Equivalent to longToString(Long.MIN_VALUE); STR_SIZE is depandant on the length of it + */ + static const TCHAR* MIN_STRING_VALUE; + + /** + * Equivalent to longToString(Long.MAX_VALUE) + */ + static const TCHAR* MAX_STRING_VALUE; + + /** + * The length of (all) strings returned by {@link #longToString} + */ + LUCENE_STATIC_CONSTANT (size_t, STR_SIZE = 14); + + /** + * Converts a long to a String suitable for indexing. + * + * @memory Caller should free the returned buffer + */ + static TCHAR* longToString(int64_t l); + + /** + * Converts a String that was returned by {@link #longToString} back to a + * long. + * + * @throws IllegalArgumentException + * if the input is null + * @throws NumberFormatException + * if the input does not parse (it was not a String returned by + * longToString()). + */ + static int64_t stringToLong(const TCHAR* str); + + ~NumberTools(); + +}; +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/index/CompoundFile.cpp b/Pods/BRCLucene/src/core/CLucene/index/CompoundFile.cpp new file mode 100644 index 0000000..52036f3 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/index/CompoundFile.cpp @@ -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. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "Term.h" +#include "_TermInfo.h" +#include "_SkipListWriter.h" +#include "_CompoundFile.h" +#include "CLucene/util/Misc.h" +#include "CLucene/store/IndexInput.h" +#include "CLucene/store/IndexOutput.h" + +CL_NS_USE(store) +CL_NS_USE(util) +CL_NS_DEF(index) + + +class WriterFileEntry:LUCENE_BASE { +public: + WriterFileEntry(){ + directoryOffset=0; + dataOffset=0; + } + ~WriterFileEntry(){ + } + /** source file */ + char file[CL_MAX_PATH]; + + /** temporary holder for the start of directory entry for this file */ + int64_t directoryOffset; + + /** temporary holder for the start of this file's data section */ + int64_t dataOffset; + +}; + + +/** 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, const int32_t readBufferSize = CL_NS(store)::BufferedIndexInput::BUFFER_SIZE); + CSIndexInput(const CSIndexInput& clone); + ~CSIndexInput(); + + /** Closes the stream to futher operations. */ + void close(); + CL_NS(store)::IndexInput* clone() const; + + int64_t length() const { return _length; } + + const char* getDirectoryType() const{ return CompoundFileReader::getClassName(); } + const char* getObjectName() const{ return getClassName(); } + static const char* getClassName() { return "CSIndexInput"; } +}; + +class ReaderFileEntry:LUCENE_BASE { +public: + int64_t offset; + int64_t length; + ReaderFileEntry(){ + offset=0; + length=0; + } + ~ReaderFileEntry(){ + } +}; + + +CSIndexInput::CSIndexInput(CL_NS(store)::IndexInput* base, const int64_t fileOffset, const int64_t length, const int32_t _readBufferSize):BufferedIndexInput(_readBufferSize){ + this->base = base; + this->fileOffset = fileOffset; + this->_length = length; +} + +void 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, false); +} +CSIndexInput::~CSIndexInput(){ +} +IndexInput* CSIndexInput::clone() const +{ + return _CLNEW CSIndexInput(*this); +} +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 CSIndexInput::close(){ +} + + + +CompoundFileReader::CompoundFileReader(Directory* dir, const char* name, int32_t _readBufferSize): + readBufferSize(_readBufferSize), directory(dir), stream(NULL), entries(_CLNEW EntriesType(true,true)) +{ + fileName = STRDUP_AtoA(name); + + bool success = false; + + try { + stream = dir->openInput(name, readBufferSize); + + // read the directory and init files + int32_t count = stream->readVInt(); + ReaderFileEntry* entry = NULL; + TCHAR tid[CL_MAX_PATH]; + for (int32_t i=0; ireadLong(); + stream->readString(tid,CL_MAX_PATH); + char* aid = STRDUP_TtoA(tid); + + if (entry != NULL) { + // set length of the previous entry + entry->length = offset - entry->offset; + } + + entry = _CLNEW ReaderFileEntry(); + entry->offset = 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; + //else ignore + } + } + ) +} + +CompoundFileReader::~CompoundFileReader(){ + close(); + _CLDELETE_CaARRAY(fileName); + _CLDELETE(entries); +} + +Directory* CompoundFileReader::getDirectory(){ + return directory; +} + +const char* CompoundFileReader::getName() const{ + return fileName; +} +const char* CompoundFileReader::getClassName(){ + return "CompoundFileReader"; +} +const char* CompoundFileReader::getObjectName() const{ + return getClassName(); +} + +void CompoundFileReader::close(){ + SCOPED_LOCK_MUTEX(THIS_LOCK) + + if (stream != NULL){ + entries->clear(); + stream->close(); + _CLDELETE(stream); + } +} + +bool CompoundFileReader::openInput(const char * id, CL_NS(store)::IndexInput *& ret, CLuceneError& error, int32_t bufferSize){ + SCOPED_LOCK_MUTEX(THIS_LOCK); + + if (stream == NULL){ + error.set(CL_ERR_IO,"Stream closed"); + return false; + } + + const ReaderFileEntry* entry = entries->get((char*)id); + if (entry == NULL){ + char buf[CL_MAX_PATH+26]; + cl_sprintf(buf, CL_MAX_PATH+26, "No sub-file with id %s found", id); + error.set(CL_ERR_IO,buf); + return false; + } + + if (bufferSize < 1) + bufferSize = readBufferSize; + + ret = _CLNEW CSIndexInput(stream, entry->offset, entry->length, bufferSize); + return true; +} + +bool CompoundFileReader::list(vector* names) const{ + for ( EntriesType::const_iterator i=entries->begin();i!=entries->end();i++ ){ + names->push_back(i->first); + ++i; + } + return true; +} + +bool CompoundFileReader::fileExists(const char* name) const{ + return entries->exists((char*)name); +} + +int64_t CompoundFileReader::fileModified(const char* name) const{ + return directory->fileModified(name); +} + +void CompoundFileReader::touchFile(const char* name){ + directory->touchFile(name); +} + +bool CompoundFileReader::doDeleteFile(const char* /*name*/){ + _CLTHROWA(CL_ERR_UnsupportedOperation,"UnsupportedOperationException: CompoundFileReader::doDeleteFile"); +} + +void CompoundFileReader::renameFile(const char* /*from*/, const char* /*to*/){ + _CLTHROWA(CL_ERR_UnsupportedOperation,"UnsupportedOperationException: CompoundFileReader::renameFile"); +} + +int64_t CompoundFileReader::fileLength(const char* name) const{ + ReaderFileEntry* e = entries->get((char*)name); + if (e == NULL){ + char buf[CL_MAX_PATH + 30]; + strcpy(buf,"File "); + strncat(buf,name,CL_MAX_PATH ); + strcat(buf," does not exist"); + _CLTHROWA(CL_ERR_IO,buf); + } + return e->length; +} +IndexOutput* CompoundFileReader::createOutput(const char* /*name*/){ + _CLTHROWA(CL_ERR_UnsupportedOperation,"UnsupportedOperationException: CompoundFileReader::createOutput"); +} +LuceneLock* CompoundFileReader::makeLock(const char* /*name*/){ + _CLTHROWA(CL_ERR_UnsupportedOperation,"UnsupportedOperationException: CompoundFileReader::makeLock"); +} + +string CompoundFileReader::toString() const{ + return string("CompoundFileReader@") + fileName; +} + + + +class CompoundFileWriter::Internal{ +public: + CL_NS(store)::Directory* directory; + string fileName; + + CL_NS(util)::CLHashSet ids; + + typedef CL_NS(util)::CLLinkedList > EntriesType; + EntriesType* entries; + + bool merged; + SegmentMerger::CheckAbort* checkAbort; + + Internal(): + ids(true), + entries(_CLNEW EntriesType(true)) + { + + } + ~Internal(){ + _CLDELETE(entries); + } +}; +CompoundFileWriter::CompoundFileWriter(Directory* dir, const char* name, SegmentMerger::CheckAbort* checkAbort){ + _internal = _CLNEW Internal; + if (dir == NULL) + _CLTHROWA(CL_ERR_NullPointer,"directory cannot be null"); + if (name == NULL) + _CLTHROWA(CL_ERR_NullPointer,"name cannot be null"); + _internal->merged = false; + _internal->checkAbort = checkAbort; + _internal->directory = dir; + _internal->fileName = name; +} + +CompoundFileWriter::~CompoundFileWriter(){ + _CLDELETE(_internal); +} + +Directory* CompoundFileWriter::getDirectory(){ + return _internal->directory; +} + +/** Returns the name of the compound file. */ +const char* CompoundFileWriter::getName() const{ + return _internal->fileName.c_str(); +} + +void CompoundFileWriter::addFile(const char* file){ + if (_internal->merged) + _CLTHROWA(CL_ERR_IO,"Can't add extensions after merge has been called"); + + if (file == NULL) + _CLTHROWA(CL_ERR_NullPointer,"file cannot be null"); + + if (_internal->ids.find((char*)file)!=_internal->ids.end()){ + char buf[CL_MAX_PATH + 30]; + strcpy(buf,"File "); + strncat(buf,file,CL_MAX_PATH); + strcat(buf," already added"); + _CLTHROWA(CL_ERR_IO,buf); + } + _internal->ids.insert(STRDUP_AtoA(file)); + + WriterFileEntry* entry = _CLNEW WriterFileEntry(); + STRCPY_AtoA(entry->file,file,CL_MAX_PATH); + _internal->entries->push_back(entry); +} + +void CompoundFileWriter::close(){ + if (_internal->merged) + _CLTHROWA(CL_ERR_IO,"Merge already performed"); + + if (_internal->entries->size()==0) //isEmpty() + _CLTHROWA(CL_ERR_IO,"No entries to merge have been defined"); + + _internal->merged = true; + + // open the compound stream + IndexOutput* os = NULL; + try { + os = _internal->directory->createOutput(_internal->fileName.c_str()); + + // Write the number of entries + os->writeVInt(_internal->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 + for ( CLLinkedList::iterator i=_internal->entries->begin();i!=_internal->entries->end();i++ ){ + WriterFileEntry* fe = *i; + fe->directoryOffset = os->getFilePointer(); + os->writeLong(0); // for now + os->writeString(fe->file); + } + } + + // Open the files and copy their data into the stream. + // Remember the locations of each file's data section. + { //msvc6 for scope fix + const int32_t bufferLength = 16384; + uint8_t buffer[bufferLength]; + for ( CL_NS(util)::CLLinkedList::iterator i=_internal->entries->begin();i!=_internal->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::iterator i=_internal->entries->begin(); + i!=_internal->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 = _internal->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)cl_min((int64_t)chunk, remainder); + is->readBytes(buffer, len); + os->writeBytes(buffer, len); + remainder -= len; + + if (_internal->checkAbort != NULL) + // Roughly every 2 MB we will check if + // it's time to abort + _internal->checkAbort->work(80); + } + + // 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 after copying") + _T(": %d (id: %s, length: %d, buffer size: %d)"), + (int)remainder,source->file,(int)length,(int)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"),(int)diff,(int)length); + _CLTHROWT(CL_ERR_IO,buf); + } + } _CLFINALLY ( + if (is != NULL){ + is->close(); + _CLDELETE(is); + } + ); +} + +CL_NS_END diff --git a/Pods/BRCLucene/src/core/CLucene/index/DirectoryIndexReader.cpp b/Pods/BRCLucene/src/core/CLucene/index/DirectoryIndexReader.cpp new file mode 100644 index 0000000..0456dc5 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/index/DirectoryIndexReader.cpp @@ -0,0 +1,305 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "DirectoryIndexReader.h" +#include "_IndexFileDeleter.h" +#include "IndexDeletionPolicy.h" +#include "_MultiSegmentReader.h" +#include "_SegmentHeader.h" +#include "IndexWriter.h" +#include "CLucene/store/Directory.h" +#include "CLucene/store/Lock.h" +#include "_SegmentInfos.h" + +CL_NS_USE(store) +CL_NS_USE(util) + +CL_NS_DEF(index) + + + void DirectoryIndexReader::doClose() { + if(closeDirectory && _directory){ + _directory->close(); + } + _CLDECDELETE(_directory); + } + + void DirectoryIndexReader::doCommit() { + if(hasChanges){ + if (segmentInfos != NULL) { + + // Default deleter (for backwards compatibility) is + // KeepOnlyLastCommitDeleter: + IndexFileDeleter deleter(_directory, + deletionPolicy == NULL ? _CLNEW KeepOnlyLastCommitDeletionPolicy() : deletionPolicy, + segmentInfos, NULL, NULL); + + // Checkpoint the state we are about to change, in + // case we have to roll back: + startCommit(); + + bool success = false; + try { + commitChanges(); + segmentInfos->write(_directory); + success = true; + } _CLFINALLY ( + + if (!success) { + + // Rollback changes that were made to + // SegmentInfos but failed to get [fully] + // committed. This way this reader instance + // remains consistent (matched to what's + // actually in the index): + rollbackCommit(); + + // Recompute deletable files & remove them (so + // partially written .del files, etc, are + // removed): + deleter.refresh(); + } + ) + + // Have the deleter remove any now unreferenced + // files due to this commit: + deleter.checkpoint(segmentInfos, true); + + if (writeLock != NULL) { + writeLock->release(); // release write lock + _CLDELETE(writeLock); + } + } + else + commitChanges(); + } + hasChanges = false; + } + + void DirectoryIndexReader::acquireWriteLock() { + if (segmentInfos != NULL) { + ensureOpen(); + if (stale) + _CLTHROWA(CL_ERR_StaleReader, "IndexReader out of date and no longer valid for delete, undelete, or setNorm operations"); + + if (writeLock == NULL) { + LuceneLock* writeLock = _directory->makeLock(IndexWriter::WRITE_LOCK_NAME); + if (!writeLock->obtain(IndexWriter::WRITE_LOCK_TIMEOUT)) { // obtain write lock + string message = string("Index locked for write: ") + writeLock->getObjectName(); + _CLDELETE(writeLock); + _CLTHROWA(CL_ERR_LockObtainFailed, message.c_str()); + } + 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(writeLock); + _CLTHROWA(CL_ERR_StaleReader, "IndexReader out of date and no longer valid for delete, undelete, or setNorm operations"); + } + } + } + } + + void DirectoryIndexReader::init(Directory* __directory, SegmentInfos* segmentInfos, bool closeDirectory) { + this->deletionPolicy = NULL; + this->stale = false; + this->writeLock = NULL; + this->rollbackSegmentInfos = NULL; + this->_directory = _CL_POINTER(__directory); + this->segmentInfos = segmentInfos; + this->closeDirectory = closeDirectory; + } + + DirectoryIndexReader::DirectoryIndexReader(): + IndexReader() + { + } + DirectoryIndexReader::~DirectoryIndexReader(){ + try { + if (writeLock != NULL) { + writeLock->release(); // release write lock + writeLock = NULL; + } + }catch(...){ + } + _CLDELETE(segmentInfos); + _CLDELETE(rollbackSegmentInfos); + } + DirectoryIndexReader::DirectoryIndexReader(Directory* __directory, SegmentInfos* segmentInfos, bool closeDirectory): + IndexReader() + { + init(__directory, segmentInfos, closeDirectory); + } + + class DirectoryIndexReader::FindSegmentsFile_Open: public SegmentInfos::FindSegmentsFile{ + bool closeDirectory; + IndexDeletionPolicy* deletionPolicy; + protected: + DirectoryIndexReader* doBody(const char* segmentFileName) { + + SegmentInfos* infos = _CLNEW SegmentInfos; + infos->read(directory, segmentFileName); + + DirectoryIndexReader* reader; + + if (infos->size() == 1) { // index is optimized + reader = SegmentReader::get(infos, infos->info(0), closeDirectory); + } else { + reader = _CLNEW MultiSegmentReader(directory, infos, closeDirectory); + } + reader->setDeletionPolicy(deletionPolicy); + return reader; + } + public: + FindSegmentsFile_Open( bool closeDirectory, IndexDeletionPolicy* deletionPolicy, + CL_NS(store)::Directory* dir ): + SegmentInfos::FindSegmentsFile(dir) + { + this->closeDirectory = closeDirectory; + this->deletionPolicy = deletionPolicy; + } + }; + + DirectoryIndexReader* DirectoryIndexReader::open(Directory* __directory, bool closeDirectory, IndexDeletionPolicy* deletionPolicy) { + DirectoryIndexReader::FindSegmentsFile_Open runner(closeDirectory, deletionPolicy, __directory); + return runner.run(); + } + + + class DirectoryIndexReader::FindSegmentsFile_Reopen: public SegmentInfos::FindSegmentsFile{ + bool closeDirectory; + IndexDeletionPolicy* deletionPolicy; + DirectoryIndexReader* _this; + protected: + DirectoryIndexReader* doBody(const char* segmentFileName) { + SegmentInfos* infos = _CLNEW SegmentInfos(); + infos->read(directory, segmentFileName); + + DirectoryIndexReader* newReader = _this->doReopen(infos); + + if (_this != newReader) { + newReader->init(directory, infos, closeDirectory); + newReader->deletionPolicy = deletionPolicy; + } + + return newReader; + } + public: + FindSegmentsFile_Reopen( bool closeDirectory, IndexDeletionPolicy* deletionPolicy, + CL_NS(store)::Directory* dir, DirectoryIndexReader* _this ): + SegmentInfos::FindSegmentsFile(dir) + { + this->closeDirectory = closeDirectory; + this->deletionPolicy = deletionPolicy; + this->_this = _this; + } + }; + + IndexReader* DirectoryIndexReader::reopen(){ + SCOPED_LOCK_MUTEX(THIS_LOCK) + ensureOpen(); + + if (this->hasChanges || this->isCurrent()) { + // the index hasn't changed - nothing to do here + return this; + } + FindSegmentsFile_Reopen runner(closeDirectory, deletionPolicy, _directory, this); + IndexReader* ret = runner.run(); + + //disown this memory... + this->writeLock = NULL; + this->_directory = NULL; + this->deletionPolicy = NULL; + + return ret; + } + + void DirectoryIndexReader::setDeletionPolicy(IndexDeletionPolicy* deletionPolicy) { + this->deletionPolicy = deletionPolicy; + } + + /** Returns the directory this index resides in. + */ + Directory* DirectoryIndexReader::directory() { + ensureOpen(); + return _directory; + } + + /** + * Version number when this IndexReader was opened. + */ + int64_t DirectoryIndexReader::getVersion() { + ensureOpen(); + return segmentInfos->getVersion(); + } + + /** + * Check whether this IndexReader is still using the + * current (i.e., most recently committed) version of the + * index. If a writer has committed any changes to the + * index since this reader was opened, this will return + * false, in which case you must open a _CLNEW + * IndexReader in order to see the changes. See the + * description of the autoCommit + * flag which controls when the {@link IndexWriter} + * actually commits changes to the index. + * + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + bool DirectoryIndexReader::isCurrent(){ + ensureOpen(); + return SegmentInfos::readCurrentVersion(_directory) == segmentInfos->getVersion(); + } + + /** + * Checks is the index is optimized (if it has a single segment and no deletions) + * @return true if the index is optimized; false otherwise + */ + bool DirectoryIndexReader::isOptimized() { + ensureOpen(); + return segmentInfos->size() == 1 && hasDeletions() == false; + } + + /** + * Should internally checkpoint state that will change + * during commit so that we can rollback if necessary. + */ + void DirectoryIndexReader::startCommit() { + if (segmentInfos != NULL) { + if (rollbackSegmentInfos != NULL) { + _CLDELETE(rollbackSegmentInfos); + } + rollbackSegmentInfos = segmentInfos->clone(); + } + rollbackHasChanges = hasChanges; + } + + /** + * Rolls back state to just before the commit (this is + * called by commit() if there is some exception while + * committing). + */ + void DirectoryIndexReader::rollbackCommit() { + if (segmentInfos != NULL) { + for(int32_t i=0;isize();i++) { + // Rollback each segmentInfo. Because the + // SegmentReader holds a reference to the + // SegmentInfo we can't [easily] just replace + // segmentInfos, so we reset it in place instead: + segmentInfos->info(i)->reset(rollbackSegmentInfos->info(i)); + } + _CLDELETE(rollbackSegmentInfos); + } + + hasChanges = rollbackHasChanges; + } + +CL_NS_END diff --git a/Pods/BRCLucene/src/core/CLucene/index/DirectoryIndexReader.h b/Pods/BRCLucene/src/core/CLucene/index/DirectoryIndexReader.h new file mode 100644 index 0000000..62d3150 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/index/DirectoryIndexReader.h @@ -0,0 +1,139 @@ +/*------------------------------------------------------------------------------ +* 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_DirectoryIndexReader_ +#define _lucene_index_DirectoryIndexReader_ + +#include "IndexReader.h" + +CL_CLASS_DEF(store,LuceneLock) + +CL_NS_DEF(index) +class IndexDeletionPolicy; + +/** + * IndexReader implementation that has access to a Directory. + * Instances that have a SegmentInfos object (i. e. segmentInfos != null) + * "own" the directory, which means that they try to acquire a write lock + * whenever index modifications are performed. + */ +class CLUCENE_EXPORT DirectoryIndexReader: public IndexReader { +private: + IndexDeletionPolicy* deletionPolicy; + + SegmentInfos* segmentInfos; + CL_NS(store)::LuceneLock* writeLock; + bool stale; + + /** Used by commit() to record pre-commit state in case + * rollback is necessary */ + bool rollbackHasChanges; + SegmentInfos* rollbackSegmentInfos; + + class FindSegmentsFile_Open; + class FindSegmentsFile_Reopen; + friend class FindSegmentsFile_Open; + friend class FindSegmentsFile_Reopen; + +protected: + CL_NS(store)::Directory* _directory; + bool closeDirectory; + DirectoryIndexReader(); + + /** + * Re-opens the index using the passed-in SegmentInfos + */ + virtual DirectoryIndexReader* doReopen(SegmentInfos* infos) = 0; + + + void doClose(); + + /** + * Commit changes resulting from delete, undeleteAll, or + * setNorm operations + * + * If an exception is hit, then either no changes or all + * changes will have been committed to the index + * (transactional semantics). + * @throws IOException if there is a low-level IO error + */ + void doCommit(); + + virtual void commitChanges() = 0; + + /** + * Tries to acquire the WriteLock on this directory-> + * this method is only valid if this IndexReader is directory owner. + * + * @throws StaleReaderException if the index has changed + * since this reader was opened + * @throws CorruptIndexException if the index is corrupt + * @throws LockObtainFailedException if another writer + * has this index open (write.lock could not + * be obtained) + * @throws IOException if there is a low-level IO error + */ + void acquireWriteLock(); + +public: + virtual ~DirectoryIndexReader(); + void init(CL_NS(store)::Directory* directory, SegmentInfos* segmentInfos, bool closeDirectory); + + CLUCENE_LOCAL_DECL DirectoryIndexReader(CL_NS(store)::Directory* directory, SegmentInfos* segmentInfos, bool closeDirectory); + CLUCENE_LOCAL_DECL static DirectoryIndexReader* open(CL_NS(store)::Directory* directory, bool closeDirectory, IndexDeletionPolicy* deletionPolicy); + + IndexReader* reopen(); + + void setDeletionPolicy(IndexDeletionPolicy* deletionPolicy); + + /** Returns the directory this index resides in. + */ + CL_NS(store)::Directory* directory(); + + /** + * Version number when this IndexReader was opened. + */ + int64_t getVersion(); + + /** + * Check whether this IndexReader is still using the + * current (i.e., most recently committed) version of the + * index. If a writer has committed any changes to the + * index since this reader was opened, this will return + * false, in which case you must open a _CLNEW + * IndexReader in order to see the changes. See the + * description of the autoCommit + * flag which controls when the {@link IndexWriter} + * actually commits changes to the index. + * + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + bool isCurrent(); + + /** + * Checks is the index is optimized (if it has a single segment and no deletions) + * @return true if the index is optimized; false otherwise + */ + bool isOptimized(); + + /** + * Should internally checkpoint state that will change + * during commit so that we can rollback if necessary. + */ + CLUCENE_LOCAL_DECL void startCommit(); + + /** + * Rolls back state to just before the commit (this is + * called by commit() if there is some exception while + * committing). + */ + CLUCENE_LOCAL_DECL void rollbackCommit(); + +}; + +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/index/DocumentsWriter.cpp b/Pods/BRCLucene/src/core/CLucene/index/DocumentsWriter.cpp new file mode 100644 index 0000000..15eb6f0 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/index/DocumentsWriter.cpp @@ -0,0 +1,1670 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" + +#include "CLucene/store/Directory.h" +#include "CLucene/store/IndexOutput.h" +#include "CLucene/store/_RAMDirectory.h" +#include "CLucene/util/Array.h" +#include "CLucene/util/_Arrays.h" +#include "CLucene/util/Misc.h" +#include "CLucene/util/CLStreams.h" +#include "CLucene/document/Field.h" +#include "CLucene/search/Similarity.h" +#include "CLucene/document/Document.h" +#include "_FieldInfos.h" +#include "_TermInfo.h" +#include "_CompoundFile.h" +#include "IndexWriter.h" +#include "_IndexFileNames.h" +#include "_FieldsWriter.h" +#include "Term.h" +#include "_Term.h" +#include "_TermInfo.h" +#include "_TermVector.h" +#include "_TermInfosWriter.h" +#include "_SkipListWriter.h" +#include "CLucene/analysis/AnalysisHeader.h" +#include "CLucene/search/Similarity.h" +#include "_TermInfosWriter.h" +#include "_FieldsWriter.h" +#include "_DocumentsWriter.h" +#include +#include +#include + +CL_NS_USE(util) +CL_NS_USE(store) +CL_NS_USE(analysis) +CL_NS_USE(document) +CL_NS_USE(search) +CL_NS_DEF(index) + + +const int32_t DocumentsWriter::MAX_THREAD_STATE = 5; +const uint8_t DocumentsWriter::defaultNorm = Similarity::encodeNorm(1.0f); +const int32_t DocumentsWriter::nextLevelArray[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 9}; +const int32_t DocumentsWriter::levelSizeArray[10] = {5, 14, 20, 30, 40, 40, 80, 80, 120, 200}; +const int32_t DocumentsWriter::POSTING_NUM_BYTE = OBJECT_HEADER_BYTES + 9*INT_NUM_BYTE + 5*POINTER_NUM_BYTE; + +const int32_t DocumentsWriter::BYTE_BLOCK_SHIFT = 15; +const int32_t DocumentsWriter::BYTE_BLOCK_SIZE = (int32_t)pow(2.0, BYTE_BLOCK_SHIFT); +const int32_t DocumentsWriter::BYTE_BLOCK_MASK = BYTE_BLOCK_SIZE - 1; +const int32_t DocumentsWriter::BYTE_BLOCK_NOT_MASK = ~BYTE_BLOCK_MASK; + +const int32_t DocumentsWriter::CHAR_BLOCK_SHIFT = 14; +const int32_t DocumentsWriter::CHAR_BLOCK_SIZE = (int32_t)pow(2.0, CHAR_BLOCK_SHIFT); +const int32_t DocumentsWriter::CHAR_BLOCK_MASK = CHAR_BLOCK_SIZE - 1; + +int32_t DocumentsWriter::OBJECT_HEADER_BYTES = 8; +int32_t DocumentsWriter::OBJECT_POINTER_BYTES = 4; // TODO: should be 8 on 64-bit platform +int32_t DocumentsWriter::BYTES_PER_CHAR = 2; +int32_t DocumentsWriter::BYTES_PER_INT = 4; + +const int32_t DocumentsWriter::POINTER_NUM_BYTE = 4; +const int32_t DocumentsWriter::INT_NUM_BYTE = 4; +const int32_t DocumentsWriter::CHAR_NUM_BYTE = 2; //TODO: adjust for c++... + +const int32_t DocumentsWriter::MAX_TERM_LENGTH = DocumentsWriter::CHAR_BLOCK_SIZE-1; + + + +AbortException::AbortException(CLuceneError& _err, DocumentsWriter* docWriter): + err(_err) +{ + docWriter->setAborting(); +} + +DocumentsWriter::DocumentsWriter(CL_NS(store)::Directory* directory, IndexWriter* writer): + bufferedDeleteTerms(_CLNEW TermNumMapType(true, true)), + freeCharBlocks(FreeCharBlocksType(true)), + freeByteBlocks(FreeByteBlocksType(true)), + waitingThreadStates( CL_NS(util)::ValueArray(MAX_THREAD_STATE) ) +{ + numBytesAlloc = 0; + numBytesUsed = 0; + this->directory = directory; + this->writer = writer; + this->hasNorms = this->bufferIsFull = false; + fieldInfos = _CLNEW FieldInfos(); + + maxBufferedDeleteTerms = IndexWriter::DEFAULT_MAX_BUFFERED_DELETE_TERMS; + ramBufferSize = (int64_t) (IndexWriter::DEFAULT_RAM_BUFFER_SIZE_MB*1024*1024); + maxBufferedDocs = IndexWriter::DEFAULT_MAX_BUFFERED_DOCS; + + numBufferedDeleteTerms = 0; + copyByteBuffer = _CL_NEWARRAY(uint8_t, 4096); + *copyByteBuffer = 0; + + this->closed = this->flushPending = false; + _files = NULL; + _abortedFiles = NULL; + skipListWriter = NULL; + infoStream = NULL; + fieldsWriter = NULL; + tvx = tvf = tvd = NULL; + postingsFreeCountDW = postingsAllocCountDW = numWaiting = pauseThreads = abortCount = 0; + docStoreOffset = nextDocID = numDocsInRAM = numDocsInStore = nextWriteDocID = 0; +} +DocumentsWriter::~DocumentsWriter(){ + _CLLDELETE(bufferedDeleteTerms); + _CLLDELETE(skipListWriter); + _CLDELETE_LARRAY(copyByteBuffer); + _CLLDELETE(_files); + _CLLDELETE(fieldInfos); + + for(size_t i=0;ipostingsFreeListDW.values){ + if (this->postingsFreeCountDW < this->postingsFreeListDW.length) { + memset(this->postingsFreeListDW.values + this->postingsFreeCountDW + , 0 + , sizeof(Posting*)); + } + postingsFreeListDW.deleteUntilNULL(); + } +} + +void DocumentsWriter::setInfoStream(std::ostream* infoStream) { + this->infoStream = infoStream; +} + +void DocumentsWriter::setRAMBufferSizeMB(float_t mb) { + if ( (int32_t)mb == IndexWriter::DISABLE_AUTO_FLUSH) { + ramBufferSize = IndexWriter::DISABLE_AUTO_FLUSH; + } else { + ramBufferSize = (int64_t) (mb*1024*1024); + } +} + +float_t DocumentsWriter::getRAMBufferSizeMB() { + if (ramBufferSize == IndexWriter::DISABLE_AUTO_FLUSH) { + return (float_t)ramBufferSize; + } else { + return ramBufferSize/1024.0/1024.0; + } +} + +void DocumentsWriter::setMaxBufferedDocs(int32_t count) { + maxBufferedDocs = count; +} + +int32_t DocumentsWriter::getMaxBufferedDocs() { + return maxBufferedDocs; +} + +std::string DocumentsWriter::getSegment() { + return segment; +} + +int32_t DocumentsWriter::getNumDocsInRAM() { + return numDocsInRAM; +} + +const std::string& DocumentsWriter::getDocStoreSegment() { + return docStoreSegment; +} + +int32_t DocumentsWriter::getDocStoreOffset() { + return docStoreOffset; +} + +std::string DocumentsWriter::closeDocStore() { + + assert (allThreadsIdle()); + + const std::vector& flushedFiles = files(); + + if (infoStream != NULL) + (*infoStream) << string("\ncloseDocStore: ") << Misc::toString((int32_t)flushedFiles.size()) << string(" files to flush to segment ") << + docStoreSegment << string(" numDocs=") << Misc::toString(numDocsInStore) << string("\n"); + + if (flushedFiles.size() > 0) { + _CLDELETE(_files); + + if (tvx != NULL) { + // At least one doc in this run had term vectors enabled + assert ( !docStoreSegment.empty()); + tvx->close(); + _CLDELETE(tvx); + tvf->close(); + _CLDELETE(tvf); + tvd->close(); + _CLDELETE(tvd); + + assert ( 4+numDocsInStore*8 == directory->fileLength( (docStoreSegment + "." + IndexFileNames::VECTORS_INDEX_EXTENSION).c_str()) ); // "after flush: tvx size mismatch: " + numDocsInStore + " docs vs " + directory->fileLength(docStoreSegment + "." + IndexFileNames::VECTORS_INDEX_EXTENSION) + " length in bytes of " + docStoreSegment + "." + IndexFileNames::VECTORS_INDEX_EXTENSION; + } + + if (fieldsWriter != NULL) { + assert (!docStoreSegment.empty()); + fieldsWriter->close(); + _CLDELETE(fieldsWriter); + + assert(numDocsInStore*8 == directory->fileLength( (docStoreSegment + "." + IndexFileNames::FIELDS_INDEX_EXTENSION).c_str() ) );// "after flush: fdx size mismatch: " + numDocsInStore + " docs vs " + directory->fileLength(docStoreSegment + "." + IndexFileNames::FIELDS_INDEX_EXTENSION) + " length in bytes of " + docStoreSegment + "." + IndexFileNames::FIELDS_INDEX_EXTENSION; + } + + std::string s = docStoreSegment; + docStoreSegment.clear(); + docStoreOffset = 0; + numDocsInStore = 0; + return s; + } else { + return ""; + } +} + +const std::vector* DocumentsWriter::abortedFiles() { + return _abortedFiles; +} + +const std::vector& DocumentsWriter::files() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + + if (_files != NULL) + return *_files; + + _files = _CLNEW std::vector; + + // Stored fields: + if (fieldsWriter != NULL) { + assert ( !docStoreSegment.empty()); + _files->push_back(docStoreSegment + "." + IndexFileNames::FIELDS_EXTENSION); + _files->push_back(docStoreSegment + "." + IndexFileNames::FIELDS_INDEX_EXTENSION); + } + + // Vectors: + if (tvx != NULL) { + assert ( !docStoreSegment.empty()); + _files->push_back(docStoreSegment + "." + IndexFileNames::VECTORS_INDEX_EXTENSION); + _files->push_back(docStoreSegment + "." + IndexFileNames::VECTORS_FIELDS_EXTENSION); + _files->push_back(docStoreSegment + "." + IndexFileNames::VECTORS_DOCUMENTS_EXTENSION); + } + + return *_files; +} + +void DocumentsWriter::setAborting() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + + abortCount++; +} + +void DocumentsWriter::abort(AbortException* ae) { + SCOPED_LOCK_MUTEX(THIS_LOCK) + + // Anywhere that throws an AbortException must first + // mark aborting to make sure while the exception is + // unwinding the un-synchronized stack, no thread grabs + // the corrupt ThreadState that hit the aborting + // exception: + assert (ae == NULL || abortCount>0); + + try { + + if (infoStream != NULL) + (*infoStream) << string("docWriter: now abort\n"); + + // Forcefully remove waiting ThreadStates from line + for(int32_t i=0;iisIdle = true; + numWaiting = 0; + + // Wait for all other threads to finish with DocumentsWriter: + pauseAllThreads(); + + assert (0 == numWaiting); + + try { + bufferedDeleteTerms->clear(); + bufferedDeleteDocIDs.clear(); + numBufferedDeleteTerms = 0; + + try { + const std::vector& __abortedFiles = files(); + _abortedFiles = _CLNEW std::vector; + for ( std::vector::const_iterator itr = __abortedFiles.begin(); + itr != __abortedFiles.end(); itr ++ ){ + _abortedFiles->push_back(*itr); + } + } catch (...) { + _CLDELETE(_abortedFiles); + } + + docStoreSegment.clear(); + numDocsInStore = 0; + docStoreOffset = 0; + _CLDELETE(_files); + + // Clear vectors & fields from ThreadStates + for(size_t i=0;itvfLocal->reset(); + state->fdtLocal->reset(); + if (state->localFieldsWriter != NULL) { + try { + state->localFieldsWriter->close(); + } catch (...) { + } + _CLDELETE(state->localFieldsWriter); + } + } + + // Reset vectors writer + if (tvx != NULL) { + try { + tvx->close(); + } catch (...) { + } + _CLDELETE(tvx); + } + if (tvd != NULL) { + try { + tvd->close(); + } catch (...) { + } + _CLDELETE(tvd); + } + if (tvf != NULL) { + try { + tvf->close(); + } catch (...) { + } + _CLDELETE(tvf); + } + + // Reset fields writer + if (fieldsWriter != NULL) { + try { + fieldsWriter->close(); + } catch (...) { + } + _CLDELETE(fieldsWriter); + } + + // Discard pending norms: + const int32_t numField = fieldInfos->size(); + for (int32_t i=0;ifieldInfo(i); + if (fi->isIndexed && !fi->omitNorms) { + BufferedNorms* n = norms[i]; + if (n != NULL) + try { + n->reset(); + } catch (...) { + } + } + } + + // Reset all postings data + resetPostingsData(); + + } _CLFINALLY ( + resumeAllThreads(); + ) + + // If we have a root cause exception, re-throw it now: + if (ae != NULL) { + CLuceneError& t = ae->err; + throw t; + } + } _CLFINALLY ( + if (ae != NULL) + abortCount--; + CONDITION_NOTIFYALL(THIS_WAIT_CONDITION) + ) +} + +void DocumentsWriter::resetPostingsData() { + // All ThreadStates should be idle when we are called + assert ( allThreadsIdle() ); + threadBindings.clear(); + segment.erase(); + numDocsInRAM = 0; + nextDocID = 0; + nextWriteDocID = 0; + _CLDELETE(_files); + balanceRAM(); + bufferIsFull = false; + flushPending = false; + for(size_t i=0;inumThreads = 0; + threadStates[i]->resetPostings(); + } + numBytesUsed = 0; +} + +// Returns true if an abort is in progress +bool DocumentsWriter::pauseAllThreads() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + + pauseThreads++; + while(!allThreadsIdle()) { + CONDITION_WAIT(THIS_LOCK, THIS_WAIT_CONDITION) + } + return abortCount > 0; +} + +void DocumentsWriter::resumeAllThreads() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + + pauseThreads--; + assert ( pauseThreads >= 0 ); + if (0 == pauseThreads){ + CONDITION_NOTIFYALL(THIS_WAIT_CONDITION) + } +} + +bool DocumentsWriter::allThreadsIdle() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + + for(size_t i=0;iisIdle) + return false; + return true; +} + +int32_t DocumentsWriter::flush(bool _closeDocStore) { + SCOPED_LOCK_MUTEX(THIS_LOCK) + + assert ( allThreadsIdle() ); + + if (segment.empty()){ + // In case we are asked to flush an empty segment + segment = writer->newSegmentName(); + } + + newFiles.clear(); + + docStoreOffset = numDocsInStore; + + int32_t docCount; + + assert ( numDocsInRAM > 0 ); + + if (infoStream != NULL) + (*infoStream) << string("\nflush postings as segment ") << segment << string(" numDocs=") << Misc::toString(numDocsInRAM) << string("\n"); + + bool success = false; + + try { + + if (_closeDocStore) { + assert ( !docStoreSegment.empty()); + assert ( docStoreSegment.compare(segment) == 0 ); + const std::vector& tmp = files(); + for (std::vector::const_iterator itr = tmp.begin(); + itr != tmp.end(); itr++ ) + newFiles.push_back(*itr); + closeDocStore(); + } + + fieldInfos->write(directory, (segment + ".fnm").c_str() ); + + docCount = numDocsInRAM; + + writeSegment(newFiles); //write new files directly... + + success = true; + + } _CLFINALLY( + if (!success) + abort(NULL); + ) + + return docCount; +} + +void DocumentsWriter::createCompoundFile(const std::string& segment) +{ + CompoundFileWriter* cfsWriter = _CLNEW CompoundFileWriter(directory, (segment + "." + IndexFileNames::COMPOUND_FILE_EXTENSION).c_str()); + for (std::vector::const_iterator itr = newFiles.begin(); + itr != newFiles.end(); itr ++ ) + cfsWriter->addFile( (*itr).c_str() ); + + // Perform the merge + cfsWriter->close(); + _CLDELETE(cfsWriter); +} + +bool DocumentsWriter::setFlushPending() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + + if (flushPending) + return false; + else { + flushPending = true; + return true; + } +} + +void DocumentsWriter::clearFlushPending() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + + flushPending = false; +} + +void DocumentsWriter::writeNorms(const std::string& segmentName, int32_t totalNumDoc) { + IndexOutput* normsOut = directory->createOutput( (segmentName + "." + IndexFileNames::NORMS_EXTENSION).c_str() ); + + try { + normsOut->writeBytes(SegmentMerger::NORMS_HEADER, SegmentMerger::NORMS_HEADER_length); + + const int32_t numField = fieldInfos->size(); + + for (int32_t fieldIdx=0;fieldIdxfieldInfo(fieldIdx); + if (fi->isIndexed && !fi->omitNorms) { + BufferedNorms* n = norms[fieldIdx]; + int64_t v; + if (n == NULL) + v = 0; + else { + v = n->out.getFilePointer(); + n->out.writeTo(normsOut); + n->reset(); + } + if (v < totalNumDoc) + fillBytes(normsOut, defaultNorm, (int32_t) (totalNumDoc-v)); + } + } + } _CLFINALLY ( + normsOut->close(); + _CLDELETE(normsOut); + ) +} + +void DocumentsWriter::writeSegment(std::vector& flushedFiles) { + + assert ( allThreadsIdle() ); + + assert ( nextDocID == numDocsInRAM ); + + const std::string segmentName = segment; + + TermInfosWriter* termsOut = _CLNEW TermInfosWriter(directory, segmentName.c_str(), fieldInfos, + writer->getTermIndexInterval()); + + IndexOutput* freqOut = directory->createOutput( (segmentName + ".frq").c_str() ); + IndexOutput* proxOut = directory->createOutput( (segmentName + ".prx").c_str() ); + + // Gather all FieldData's that have postings, across all + // ThreadStates + std::vector allFields; + assert ( allThreadsIdle() ); + for(size_t i=0;itrimFields(); + const int32_t numFields = state->numAllFieldData; + for(int32_t j=0;jallFieldDataArray[j]; + if (fp->numPostings > 0) + allFields.push_back(fp); + } + } + + // Sort by field name + std::sort(allFields.begin(),allFields.end(),ThreadState::FieldData::sort); + const int32_t numAllFields = allFields.size(); + + skipListWriter = _CLNEW DefaultSkipListWriter(termsOut->skipInterval, + termsOut->maxSkipLevels, + numDocsInRAM, freqOut, proxOut); + + int32_t start = 0; + while(start < numAllFields) { + + const TCHAR* fieldName = allFields[start]->fieldInfo->name; + + int32_t end = start+1; + while(end < numAllFields && _tcscmp(allFields[end]->fieldInfo->name, fieldName)==0 ) + end++; + + ValueArray fields(end-start); + for(int32_t i=start;iresetPostingArrays(); + + start = end; + } + + freqOut->close(); + _CLDELETE(freqOut); + proxOut->close(); + _CLDELETE(proxOut); + termsOut->close(); + _CLDELETE(termsOut); + _CLDELETE(skipListWriter); + + // Record all files we have flushed + flushedFiles.push_back(segmentFileName(IndexFileNames::FIELD_INFOS_EXTENSION)); + flushedFiles.push_back(segmentFileName(IndexFileNames::FREQ_EXTENSION)); + flushedFiles.push_back(segmentFileName(IndexFileNames::PROX_EXTENSION)); + flushedFiles.push_back(segmentFileName(IndexFileNames::TERMS_EXTENSION)); + flushedFiles.push_back(segmentFileName(IndexFileNames::TERMS_INDEX_EXTENSION)); + + if (hasNorms) { + writeNorms(segmentName, numDocsInRAM); + flushedFiles.push_back(segmentFileName(IndexFileNames::NORMS_EXTENSION)); + } + + if (infoStream != NULL) { + const int64_t newSegmentSize = segmentSize(segmentName); + + (*infoStream) << string(" oldRAMSize=") << Misc::toString(numBytesUsed) << + string(" newFlushedSize=") << Misc::toString(newSegmentSize) << + string(" docs/MB=") << Misc::toString((float_t)(numDocsInRAM/(newSegmentSize/1024.0/1024.0))) << + string(" new/old=") << Misc::toString((float_t)(100.0*newSegmentSize/numBytesUsed)) << string("%\n"); + } + + resetPostingsData(); + + nextDocID = 0; + nextWriteDocID = 0; + numDocsInRAM = 0; + _CLDELETE(_files); + + // Maybe downsize this->postingsFreeListDW array + if (this->postingsFreeListDW.length > 1.5*this->postingsFreeCountDW) { + int32_t newSize = this->postingsFreeListDW.length; + while(newSize > 1.25*this->postingsFreeCountDW) { + newSize = (int32_t) (newSize*0.8); + } + this->postingsFreeListDW.resize(newSize); + } + +} + +std::string DocumentsWriter::segmentFileName(const char* extension) { + return segmentFileName( string(extension) ); +} +std::string DocumentsWriter::segmentFileName(const std::string& extension) { + return segment + "." + extension; +} + +int32_t DocumentsWriter::compareText(const TCHAR* text1, const TCHAR* text2) { +int32_t pos1=0; +int32_t pos2=0; + while(true) { + const TCHAR c1 = text1[pos1++]; + const TCHAR c2 = text2[pos2++]; + if (c1 < c2) + if (CLUCENE_END_OF_WORD == c2) + return 1; + else + return -1; + else if (c2 < c1) + if (CLUCENE_END_OF_WORD == c1) + return -1; + else + return 1; + else if (CLUCENE_END_OF_WORD == c1) + return 0; + } +} + + +void DocumentsWriter::appendPostings(ArrayBase* fields, + TermInfosWriter* termsOut, + IndexOutput* freqOut, + IndexOutput* proxOut) { + + const int32_t fieldNumber = (*fields)[0]->fieldInfo->number; + int32_t numFields = fields->length; + + ObjectArray mergeStatesData(numFields); + ValueArray mergeStates(numFields); + + for(int32_t i=0;ifield = (*fields)[i]; + fms->postings = fms->field->sortPostings(); + + assert ( fms->field->fieldInfo == (*fields)[0]->fieldInfo ); + + // Should always be true + bool result = fms->nextTerm(); + assert (result); + } + memcpy(mergeStates.values,mergeStatesData.values,sizeof(FieldMergeState*) * numFields); + + const int32_t skipInterval = termsOut->skipInterval; + currentFieldStorePayloads = (*fields)[0]->fieldInfo->storePayloads; + + ValueArray termStates(numFields); + + while(numFields > 0) { + + // Get the next term to merge + termStates.values[0] = mergeStates[0]; + int32_t numToMerge = 1; + + for(int32_t i=1;itext; + const int32_t textOffset = mergeStates[i]->textOffset; + const int32_t cmp = compareText(text+ textOffset, termStates[0]->text + termStates[0]->textOffset); + + if (cmp < 0) { + termStates.values[0] = mergeStates[i]; + numToMerge = 1; + } else if (cmp == 0) + termStates.values[numToMerge++] = mergeStates[i]; + } + + int32_t df = 0; + int32_t lastPayloadLength = -1; + + int32_t lastDoc = 0; + + const TCHAR* start = termStates[0]->text + termStates[0]->textOffset; + const TCHAR* pos = start; + while(*pos != CLUCENE_END_OF_WORD) + pos++; + + int64_t freqPointer = freqOut->getFilePointer(); + int64_t proxPointer = proxOut->getFilePointer(); + + skipListWriter->resetSkip(); + + // Now termStates has numToMerge FieldMergeStates + // which all share the same term. Now we must + // interleave the docID streams. + while(numToMerge > 0) { + + if ((++df % skipInterval) == 0) { + skipListWriter->setSkipData(lastDoc, currentFieldStorePayloads, lastPayloadLength); + skipListWriter->bufferSkip(df); + } + + FieldMergeState* minState = termStates[0]; + for(int32_t i=1;idocID < minState->docID) + minState = termStates[i]; + + const int32_t doc = minState->docID; + const int32_t termDocFreq = minState->termFreq; + + assert (doc < numDocsInRAM); + assert ( doc > lastDoc || df == 1 ); + + const int32_t newDocCode = (doc-lastDoc)<<1; + lastDoc = doc; + + ByteSliceReader& prox = minState->prox; + + // Carefully copy over the prox + payload info, + // changing the format to match Lucene's segment + // format. + for(int32_t j=0;jwriteVInt(code|1); + proxOut->writeVInt(payloadLength); + lastPayloadLength = payloadLength; + } else + proxOut->writeVInt(code & (~1)); + if (payloadLength > 0) + copyBytes(&prox, proxOut, payloadLength); + } else { + assert ( 0 == (code & 1) ); + proxOut->writeVInt(code>>1); + } + } + + if (1 == termDocFreq) { + freqOut->writeVInt(newDocCode|1); + } else { + freqOut->writeVInt(newDocCode); + freqOut->writeVInt(termDocFreq); + } + + if (!minState->nextDoc()) { + + // Remove from termStates + int32_t upto = 0; + for(int32_t i=0;inextTerm()) { + // OK, no more terms, so remove from mergeStates + // as well + upto = 0; + for(int32_t i=0;i 0); + + // Done merging this term + + int64_t skipPointer = skipListWriter->writeSkip(freqOut); + + // Write term + termInfo.set(df, freqPointer, proxPointer, (int32_t) (skipPointer - freqPointer)); + termsOut->add(fieldNumber, start, pos-start, &termInfo); + } +} + + +void DocumentsWriter::close() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + + closed = true; + CONDITION_NOTIFYALL(THIS_WAIT_CONDITION) +} + +DocumentsWriter::ThreadState* DocumentsWriter::getThreadState(Document* doc, Term* delTerm) { + SCOPED_LOCK_MUTEX(THIS_LOCK) + + // First, find a thread state. If this thread already + // has affinity to a specific ThreadState, use that one + // again. + ThreadState* state = NULL; + if ( threadBindings.find(_LUCENE_CURRTHREADID) == threadBindings.end() ){ + // First time this thread has called us since last flush + ThreadState* minThreadState = NULL; + for(size_t i=0;inumThreads < minThreadState->numThreads) + minThreadState = ts; + } + if (minThreadState != NULL && (minThreadState->numThreads == 0 || threadStates.length == MAX_THREAD_STATE)) { + state = minThreadState; + state->numThreads++; + } else { + // Just create a new "private" thread state + threadStates.resize(1+threadStates.length); + //fill the new position + state = threadStates.values[threadStates.length-1] = _CLNEW ThreadState(this); + } + threadBindings.put(_LUCENE_CURRTHREADID, state); + }else{ + state = threadBindings[_LUCENE_CURRTHREADID]; + } + + // Next, wait until my thread state is idle (in case + // it's shared with other threads) and for threads to + // not be paused nor a flush pending: + while(!closed && (!state->isIdle || pauseThreads != 0 || flushPending || abortCount > 0)) + CONDITION_WAIT(THIS_LOCK, THIS_WAIT_CONDITION) + + if (closed) + _CLTHROWA(CL_ERR_AlreadyClosed, "this IndexWriter is closed"); + + if (segment.empty()) + segment = writer->newSegmentName(); + + state->isIdle = false; + + try { + bool success = false; + try { + state->init(doc, nextDocID); + if (delTerm != NULL) { + addDeleteTerm(delTerm, state->docID); + state->doFlushAfter = timeToFlushDeletes(); + } + // Only increment nextDocID & numDocsInRAM on successful init + nextDocID++; + numDocsInRAM++; + + // We must at this point commit to flushing to ensure we + // always get N docs when we flush by doc count, even if + // > 1 thread is adding documents: + if (!flushPending && maxBufferedDocs != IndexWriter::DISABLE_AUTO_FLUSH + && numDocsInRAM >= maxBufferedDocs) { + flushPending = true; + state->doFlushAfter = true; + } + + success = true; + } _CLFINALLY ( + if (!success) { + // Forcefully idle this ThreadState: + state->isIdle = true; + CONDITION_NOTIFYALL(THIS_WAIT_CONDITION) + if (state->doFlushAfter) { + state->doFlushAfter = false; + flushPending = false; + } + } + ) + } catch (AbortException& ae) { + abort(&ae); + } + + return state; +} + +bool DocumentsWriter::addDocument(Document* doc, Analyzer* analyzer){ + return updateDocument(doc, analyzer, NULL); +} + +bool DocumentsWriter::updateDocument(Term* t, Document* doc, Analyzer* analyzer){ + return updateDocument(doc, analyzer, t); +} + +bool DocumentsWriter::updateDocument(Document* doc, Analyzer* analyzer, Term* delTerm) { + + // This call is synchronized but fast + ThreadState* state = getThreadState(doc, delTerm); + try { + bool success = false; + try { + try { + // This call is not synchronized and does all the work + state->processDocument(analyzer); + } _CLFINALLY ( + // This call is synchronized but fast + finishDocument(state); + ) + success = true; + } _CLFINALLY ( + if (!success) { + SCOPED_LOCK_MUTEX(THIS_LOCK) + + // If this thread state had decided to flush, we + // must clear it so another thread can flush + if (state->doFlushAfter) { + state->doFlushAfter = false; + flushPending = false; + CONDITION_NOTIFYALL(THIS_WAIT_CONDITION) + } + + // Immediately mark this document as deleted + // since likely it was partially added. This + // keeps indexing as "all or none" (atomic) when + // adding a document: + addDeleteDocID(state->docID); + } + ) + } catch (AbortException& ae) { + abort(&ae); + } + + return state->doFlushAfter || timeToFlushDeletes(); +} + +int32_t DocumentsWriter::getNumBufferedDeleteTerms() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + return numBufferedDeleteTerms; +} + +const DocumentsWriter::TermNumMapType& DocumentsWriter::getBufferedDeleteTerms() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + return *bufferedDeleteTerms; +} + +const std::vector* DocumentsWriter::getBufferedDeleteDocIDs() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + return &bufferedDeleteDocIDs; +} + +// Reset buffered deletes. +void DocumentsWriter::clearBufferedDeletes() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + DocumentsWriter::TermNumMapType::iterator term = bufferedDeleteTerms->begin(); + while ( term != bufferedDeleteTerms->end() ){ + Term* t = term->first; + _CLDELETE(term->second); + bufferedDeleteTerms->erase(term); + _CLDECDELETE(t); + term = bufferedDeleteTerms->begin(); + } + bufferedDeleteDocIDs.clear(); + numBufferedDeleteTerms = 0; + if (numBytesUsed > 0) + resetPostingsData(); +} + +bool DocumentsWriter::bufferDeleteTerms(const ArrayBase* terms) { + SCOPED_LOCK_MUTEX(THIS_LOCK) + while(pauseThreads != 0 || flushPending){ + CONDITION_WAIT(THIS_LOCK, THIS_WAIT_CONDITION) + } + for (size_t i = 0; i < terms->length; i++) + addDeleteTerm((*terms)[i], numDocsInRAM); + return timeToFlushDeletes(); +} + +bool DocumentsWriter::bufferDeleteTerm(Term* term) { + SCOPED_LOCK_MUTEX(THIS_LOCK) + while(pauseThreads != 0 || flushPending){ + CONDITION_WAIT(THIS_LOCK, THIS_WAIT_CONDITION) + } + addDeleteTerm(term, numDocsInRAM); + return timeToFlushDeletes(); +} + +bool DocumentsWriter::timeToFlushDeletes() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + return (bufferIsFull + || (maxBufferedDeleteTerms != IndexWriter::DISABLE_AUTO_FLUSH + && numBufferedDeleteTerms >= maxBufferedDeleteTerms)) + && setFlushPending(); +} + +void DocumentsWriter::setMaxBufferedDeleteTerms(int32_t _maxBufferedDeleteTerms) { + this->maxBufferedDeleteTerms = _maxBufferedDeleteTerms; +} + +int32_t DocumentsWriter::getMaxBufferedDeleteTerms() { + return maxBufferedDeleteTerms; +} + +bool DocumentsWriter::hasDeletes() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + return bufferedDeleteTerms->size() > 0 || bufferedDeleteDocIDs.size() > 0; +} + +// Buffer a term in bufferedDeleteTerms, which records the +// current number of documents buffered in ram so that the +// delete term will be applied to those documents as well +// as the disk segments. +void DocumentsWriter::addDeleteTerm(Term* term, int32_t docCount) { + SCOPED_LOCK_MUTEX(THIS_LOCK) + Num* num = bufferedDeleteTerms->get(term); + if (num == NULL) { + bufferedDeleteTerms->put(_CL_POINTER(term), new Num(docCount)); + // This is coarse approximation of actual bytes used: + numBytesUsed += ( _tcslen(term->field()) + term->textLength()) * BYTES_PER_CHAR + + 4 + 5 * OBJECT_HEADER_BYTES + 5 * OBJECT_POINTER_BYTES; + if (ramBufferSize != IndexWriter::DISABLE_AUTO_FLUSH + && numBytesUsed > ramBufferSize) { + bufferIsFull = true; + } + } else { + num->setNum(docCount); + } + numBufferedDeleteTerms++; +} + +void DocumentsWriter::addDeleteDocID(int32_t docId) { + SCOPED_LOCK_MUTEX(THIS_LOCK) + bufferedDeleteDocIDs.push_back(docId); + numBytesUsed += OBJECT_HEADER_BYTES + BYTES_PER_INT + OBJECT_POINTER_BYTES; +} + +void DocumentsWriter::finishDocument(ThreadState* state) { + SCOPED_LOCK_MUTEX(THIS_LOCK) + if (abortCount > 0) { + // Forcefully idle this threadstate -- its state will + // be reset by abort() + state->isIdle = true; + CONDITION_NOTIFYALL(THIS_WAIT_CONDITION) + return; + } + + // Now write the indexed document to the real files. + if (nextWriteDocID == state->docID) { + // It's my turn, so write everything now: + nextWriteDocID++; + state->writeDocument(); + state->isIdle = true; + CONDITION_NOTIFYALL(THIS_WAIT_CONDITION) + + // If any states were waiting on me, sweep through and + // flush those that are enabled by my write. + if (numWaiting > 0) { + bool any = true; + while(any) { + any = false; + for(int32_t i=0;idocID == nextWriteDocID) { + s->writeDocument(); + s->isIdle = true; + nextWriteDocID++; + any = true; + if (numWaiting > i+1) + // Swap in the last waiting state to fill in + // the hole we just created. It's important + // to do this as-we-go and not at the end of + // the loop, because if we hit an aborting + // exception in one of the s.writeDocument + // calls (above), it leaves this array in an + // inconsistent state: + waitingThreadStates.values[i] = waitingThreadStates[numWaiting-1]; + numWaiting--; + } else { + assert (!s->isIdle); + i++; + } + } + } + } + } else { + // Another thread got a docID before me, but, it + // hasn't finished its processing. So add myself to + // the line but don't hold up this thread. + waitingThreadStates.values[numWaiting++] = state; + } +} + +int64_t DocumentsWriter::getRAMUsed() { + return numBytesUsed; +} + +void DocumentsWriter::fillBytes(IndexOutput* out, uint8_t b, int32_t numBytes) { + for(int32_t i=0;iwriteByte(b); +} + +void DocumentsWriter::copyBytes(IndexInput* srcIn, IndexOutput* destIn, int64_t numBytes) { + // TODO: we could do this more efficiently (save a copy) + // because it's always from a ByteSliceReader -> + // IndexOutput + while(numBytes > 0) { + int32_t chunk; + if (numBytes > 4096) + chunk = 4096; + else + chunk = (int32_t) numBytes; + srcIn->readBytes(copyByteBuffer, chunk); + destIn->writeBytes(copyByteBuffer, chunk); + numBytes -= chunk; + } +} + + +int64_t DocumentsWriter::segmentSize(const std::string& segmentName) { + assert (infoStream != NULL); + + int64_t size = directory->fileLength( (segmentName + ".tii").c_str() ) + + directory->fileLength( (segmentName + ".tis").c_str() ) + + directory->fileLength( (segmentName + ".frq").c_str() ) + + directory->fileLength( (segmentName + ".prx").c_str() ); + + const std::string normFileName = segmentName + ".nrm"; + if (directory->fileExists(normFileName.c_str())) + size += directory->fileLength(normFileName.c_str()); + + return size; +} + +void DocumentsWriter::getPostings(ValueArray& postings) { + SCOPED_LOCK_MUTEX(THIS_LOCK) + numBytesUsed += postings.length * POSTING_NUM_BYTE; + int32_t numToCopy; + if (this->postingsFreeCountDW < postings.length) + numToCopy = this->postingsFreeCountDW; + else + numToCopy = postings.length; + + const int32_t start = this->postingsFreeCountDW-numToCopy; + if ( numToCopy > 0 ){ + memcpy(postings.values, this->postingsFreeListDW.values+start, sizeof(Posting*)*numToCopy); + } + this->postingsFreeCountDW -= numToCopy; + + // Directly allocate the remainder if any + if (numToCopy < postings.length) { + const int32_t extra = postings.length - numToCopy; + const int32_t newPostingsAllocCount = this->postingsAllocCountDW + extra; + if (newPostingsAllocCount > this->postingsFreeListDW.length) + this->postingsFreeListDW.resize((int32_t) (1.25 * newPostingsAllocCount)); + + balanceRAM(); + for(size_t i=numToCopy;ipostingsAllocCountDW++; + } + } +} + +void DocumentsWriter::recyclePostings(ValueArray& postings, int32_t numPostings) { + SCOPED_LOCK_MUTEX(THIS_LOCK) + // Move all Postings from this ThreadState back to our + // free list. We pre-allocated this array while we were + // creating Postings to make sure it's large enough + assert (this->postingsFreeCountDW + numPostings <= this->postingsFreeListDW.length); + if ( numPostings > 0 ) + memcpy (this->postingsFreeListDW.values + this->postingsFreeCountDW, postings.values, numPostings * sizeof(Posting*)); + this->postingsFreeCountDW += numPostings; +} + +uint8_t* DocumentsWriter::getByteBlock(bool trackAllocations) { + SCOPED_LOCK_MUTEX(THIS_LOCK) + const int32_t size = freeByteBlocks.size(); + uint8_t* b; + if (0 == size) { + numBytesAlloc += BYTE_BLOCK_SIZE; + balanceRAM(); + b = _CL_NEWARRAY(uint8_t, BYTE_BLOCK_SIZE); + memset(b,0,sizeof(uint8_t) * BYTE_BLOCK_SIZE); + } else { + b = *freeByteBlocks.begin(); + freeByteBlocks.remove(freeByteBlocks.begin(),true); + } + if (trackAllocations) + numBytesUsed += BYTE_BLOCK_SIZE; + return b; +} + +void DocumentsWriter::recycleBlocks(ArrayBase& blocks, int32_t start, int32_t end) { + SCOPED_LOCK_MUTEX(THIS_LOCK) + for(int32_t i=start;i& blocks, int32_t start, int32_t numBlocks) { + SCOPED_LOCK_MUTEX(THIS_LOCK) + + for(int32_t i=start;i freeTrigger) { + if (infoStream != NULL) + (*infoStream) << string(" RAM: now balance allocations: usedMB=") << toMB(numBytesUsed) + + string(" vs trigger=") << toMB(flushTrigger) << + string(" allocMB=") << toMB(numBytesAlloc) << + string(" vs trigger=") << toMB(freeTrigger) << + string(" postingsFree=") << toMB(this->postingsFreeCountDW*POSTING_NUM_BYTE) << + string(" byteBlockFree=") << toMB(freeByteBlocks.size()*BYTE_BLOCK_SIZE) << + string(" charBlockFree=") << toMB(freeCharBlocks.size()*CHAR_BLOCK_SIZE*CHAR_NUM_BYTE) << string("\n"); + + // When we've crossed 100% of our target Postings + // RAM usage, try to free up until we're back down + // to 95% + const int64_t startBytesAlloc = numBytesAlloc; + + const int32_t postingsFreeChunk = (int32_t) (BYTE_BLOCK_SIZE / POSTING_NUM_BYTE); + + int32_t iter = 0; + + // We free equally from each pool in 64 KB + // chunks until we are below our threshold + // (freeLevel) + + while(numBytesAlloc > freeLevel) { + if (0 == freeByteBlocks.size() && 0 == freeCharBlocks.size() && 0 == this->postingsFreeCountDW) { + // Nothing else to free -- must flush now. + bufferIsFull = true; + if (infoStream != NULL) + (*infoStream) << string(" nothing to free; now set bufferIsFull\n"); + break; + } + + if ((0 == iter % 3) && freeByteBlocks.size() > 0) { + freeByteBlocks.remove(freeByteBlocks.size()-1); + numBytesAlloc -= BYTE_BLOCK_SIZE; + } + + if ((1 == iter % 3) && freeCharBlocks.size() > 0) { + freeCharBlocks.remove(freeCharBlocks.size()-1); + numBytesAlloc -= CHAR_BLOCK_SIZE * CHAR_NUM_BYTE; + } + + if ((2 == iter % 3) && this->postingsFreeCountDW > 0) { + int32_t numToFree; + if (this->postingsFreeCountDW >= postingsFreeChunk) + numToFree = postingsFreeChunk; + else + numToFree = this->postingsFreeCountDW; + for ( size_t i = this->postingsFreeCountDW-numToFree;i< this->postingsFreeCountDW; i++ ){ + _CLDELETE(this->postingsFreeListDW.values[i]); + } + this->postingsFreeCountDW -= numToFree; + this->postingsAllocCountDW -= numToFree; + numBytesAlloc -= numToFree * POSTING_NUM_BYTE; + } + + iter++; + } + + if (infoStream != NULL){ + (*infoStream) << " after free: freedMB=" + Misc::toString((float_t)((startBytesAlloc-numBytesAlloc)/1024.0/1024.0)) + + " usedMB=" + Misc::toString((float_t)(numBytesUsed/1024.0/1024.0)) + + " allocMB=" + Misc::toString((float_t)(numBytesAlloc/1024.0/1024.0)) << string("\n"); + } + + } else { + // If we have not crossed the 100% mark, but have + // crossed the 95% mark of RAM we are actually + // using, go ahead and flush. This prevents + // over-allocating and then freeing, with every + // flush. + if (numBytesUsed > flushTrigger) { + if (infoStream != NULL){ + (*infoStream) << string(" RAM: now flush @ usedMB=") << Misc::toString((float_t)(numBytesUsed/1024.0/1024.0)) << + string(" allocMB=") << Misc::toString((float_t)(numBytesAlloc/1024.0/1024.0)) << + string(" triggerMB=") << Misc::toString((float_t)(flushTrigger/1024.0/1024.0)) << string("\n"); + } + + bufferIsFull = true; + } + } +} + + +DocumentsWriter::BufferedNorms::BufferedNorms(){ + this->upto = 0; +} +void DocumentsWriter::BufferedNorms::add(float_t norm){ + uint8_t b = Similarity::encodeNorm(norm); + out.writeByte(b); + upto++; +} +void DocumentsWriter::BufferedNorms::reset(){ + out.reset(); + upto = 0; +} +void DocumentsWriter::BufferedNorms::fill(int32_t docID){ + // Must now fill in docs that didn't have this + // field. Note that this is how norms can consume + // tremendous storage when the docs have widely + // varying different fields, because we are not + // storing the norms sparsely (see LUCENE-830) + if (upto < docID) { + fillBytes(&out, defaultNorm, docID-upto); + upto = docID; + } +} + + + +DocumentsWriter::FieldMergeState::FieldMergeState(){ + field = NULL; + postings = NULL; + p = NULL; + text = NULL; + textOffset = 0; + postingUpto = -1; + docID = 0; + termFreq = 0; +} +DocumentsWriter::FieldMergeState::~FieldMergeState(){ +} +bool DocumentsWriter::FieldMergeState::nextTerm(){ + postingUpto++; + if (postingUpto == field->numPostings) + return false; + + p = (*postings)[postingUpto]; + docID = 0; + + text = field->threadState->charPool->buffers[p->textStart >> CHAR_BLOCK_SHIFT]; + textOffset = p->textStart & CHAR_BLOCK_MASK; + + if (p->freqUpto > p->freqStart) + freq.init(field->threadState->postingsPool, p->freqStart, p->freqUpto); + else + freq.bufferOffset = freq.upto = freq.endIndex = 0; + + prox.init(field->threadState->postingsPool, p->proxStart, p->proxUpto); + + // Should always be true + bool result = nextDoc(); + assert (result); + + return true; +} + +bool DocumentsWriter::FieldMergeState::nextDoc() { + if (freq.bufferOffset + freq.upto == freq.endIndex) { + if (p->lastDocCode != -1) { + // Return last doc + docID = p->lastDocID; + termFreq = p->docFreq; + p->lastDocCode = -1; + return true; + } else + // EOF + return false; + } + + const uint32_t code = (uint32_t)freq.readVInt(); + docID += code >> 1; //unsigned shift + if ((code & 1) != 0) + termFreq = 1; + else + termFreq = freq.readVInt(); + + return true; +} + + +DocumentsWriter::ByteSliceReader::ByteSliceReader(){ + pool = NULL; + bufferUpto = 0; + buffer = 0; + limit = 0; + level = 0; + upto = 0; + bufferOffset = 0; + endIndex = 0; +} +DocumentsWriter::ByteSliceReader::~ByteSliceReader(){ +} +const char* DocumentsWriter::ByteSliceReader::getDirectoryType() const{ + return ""; +} +const char* DocumentsWriter::ByteSliceReader::getObjectName() const{ + return getClassName(); +} +const char* DocumentsWriter::ByteSliceReader::getClassName(){ + return "DocumentsWriter::ByteSliceReader"; +} +IndexInput* DocumentsWriter::ByteSliceReader::clone() const{ + _CLTHROWA(CL_ERR_UnsupportedOperation, "Not implemented"); +} +void DocumentsWriter::ByteSliceReader::init(ByteBlockPool* _pool, int32_t _startIndex, int32_t _endIndex) { + + assert (_endIndex-_startIndex > 0); + + level = 0; + this->pool = _pool; + this->endIndex = _endIndex; + + bufferUpto = _startIndex / BYTE_BLOCK_SIZE; + bufferOffset = bufferUpto * BYTE_BLOCK_SIZE; + buffer = pool->buffers[bufferUpto]; + upto = _startIndex & BYTE_BLOCK_MASK; + + const int32_t firstSize = levelSizeArray[0]; + + if (_startIndex+firstSize >= endIndex) { + // There is only this one slice to read + limit = endIndex & BYTE_BLOCK_MASK; + } else + limit = upto+firstSize-4; +} + +uint8_t DocumentsWriter::ByteSliceReader::readByte() { + // Assert that we are not @ EOF + assert (upto + bufferOffset < endIndex); + if (upto == limit) + nextSlice(); + return buffer[upto++]; +} + +int64_t DocumentsWriter::ByteSliceReader::writeTo(IndexOutput* out) { + int64_t size = 0; + while(true) { + if (limit + bufferOffset == endIndex) { + assert (endIndex - bufferOffset >= upto); + out->writeBytes(buffer+upto, limit-upto); + size += limit-upto; + break; + } else { + out->writeBytes(buffer+upto, limit-upto); + size += limit-upto; + nextSlice(); + } + } + + return size; +} + +void DocumentsWriter::ByteSliceReader::nextSlice() { + + // Skip to our next slice + const int32_t nextIndex = ((buffer[limit]&0xff)<<24) + ((buffer[1+limit]&0xff)<<16) + ((buffer[2+limit]&0xff)<<8) + (buffer[3+limit]&0xff); + level = nextLevelArray[level]; + const int32_t newSize = levelSizeArray[level]; + + bufferUpto = nextIndex / BYTE_BLOCK_SIZE; + bufferOffset = bufferUpto * BYTE_BLOCK_SIZE; + + buffer = pool->buffers[bufferUpto]; + upto = nextIndex & BYTE_BLOCK_MASK; + + if (nextIndex + newSize >= endIndex) { + // We are advancing to the const slice + assert (endIndex - nextIndex > 0); + limit = endIndex - bufferOffset; + } else { + // This is not the const slice (subtract 4 for the + // forwarding address at the end of this new slice) + limit = upto+newSize-4; + } +} + +void DocumentsWriter::ByteSliceReader::readBytes(uint8_t* b, int32_t len) { + while(len > 0) { + const int32_t numLeft = limit-upto; + if (numLeft < len) { + // Read entire slice + memcpy(b, buffer+upto,numLeft * sizeof(uint8_t)); + b += numLeft; + len -= numLeft; + nextSlice(); + } else { + // This slice is the last one + memcpy(b, buffer+upto,len * sizeof(uint8_t)); + upto += len; + break; + } + } +} + +int64_t DocumentsWriter::ByteSliceReader::getFilePointer() const{_CLTHROWA(CL_ERR_Runtime,"not implemented");} +int64_t DocumentsWriter::ByteSliceReader::length() const{_CLTHROWA(CL_ERR_Runtime,"not implemented");} +void DocumentsWriter::ByteSliceReader::seek(const int64_t /*pos*/) {_CLTHROWA(CL_ERR_Runtime,"not implemented");} +void DocumentsWriter::ByteSliceReader::close() {_CLTHROWA(CL_ERR_Runtime,"not implemented");} + +DocumentsWriter::ByteBlockPool::ByteBlockPool( bool _trackAllocations, DocumentsWriter* _parent): + BlockPool(_parent, BYTE_BLOCK_SIZE, _trackAllocations) +{ +} +DocumentsWriter::ByteBlockPool::~ByteBlockPool(){ + reset(); + //delete the first block + _CLDELETE_ARRAY(buffer); +} +uint8_t* DocumentsWriter::ByteBlockPool::getNewBlock(bool _trackAllocations){ + return parent->getByteBlock(_trackAllocations); +} +int32_t DocumentsWriter::ByteBlockPool::newSlice(const int32_t size) { + if (tUpto > BYTE_BLOCK_SIZE-size) + nextBuffer(); + const int32_t upto = tUpto; + tUpto += size; + buffer[tUpto-1] = 16; + return upto; +} + +int32_t DocumentsWriter::ByteBlockPool::allocSlice(uint8_t* slice, const int32_t upto) { + const int32_t level = slice[upto] & 15; + assert(level < 10); + const int32_t newLevel = nextLevelArray[level]; + const int32_t newSize = levelSizeArray[newLevel]; + + // Maybe allocate another block + if (tUpto > BYTE_BLOCK_SIZE-newSize) + nextBuffer(); + + const int32_t newUpto = tUpto; + const uint32_t offset = newUpto + tOffset; + tUpto += newSize; + + // Copy forward the past 3 bytes (which we are about + // to overwrite with the forwarding address): + buffer[newUpto] = slice[upto-3]; + buffer[newUpto+1] = slice[upto-2]; + buffer[newUpto+2] = slice[upto-1]; + + // Write forwarding address at end of last slice: + slice[upto-3] = (uint8_t) (offset >> 24); //offset is unsigned... + slice[upto-2] = (uint8_t) (offset >> 16); + slice[upto-1] = (uint8_t) (offset >> 8); + slice[upto] = (uint8_t) offset; + + // Write new level: + buffer[tUpto-1] = (uint8_t) (16|newLevel); + + return newUpto+3; +} +void DocumentsWriter::ByteBlockPool::reset() { + if (bufferUpto != -1) { + // We allocated at least one buffer + + for(int i=0;i 0) + // Recycle all but the first buffer + parent->recycleBlocks(buffers, 1, 1+bufferUpto); + + // Re-use the first buffer + bufferUpto = 0; + tUpto = 0; + tOffset = 0; + buffer = buffers[0]; + } +} +DocumentsWriter::CharBlockPool::CharBlockPool(DocumentsWriter* _parent): + BlockPool(_parent, CHAR_BLOCK_SIZE, false) +{ +} +DocumentsWriter::CharBlockPool::~CharBlockPool(){ +} +TCHAR* DocumentsWriter::CharBlockPool::getNewBlock(bool){ + return parent->getCharBlock(); +} +void DocumentsWriter::CharBlockPool::reset() { + parent->recycleBlocks(buffers, 0, 1+bufferUpto); + bufferUpto = -1; + tUpto = blockSize; + tOffset = -blockSize; +} + +CL_NS_END diff --git a/Pods/BRCLucene/src/core/CLucene/index/DocumentsWriterThreadState.cpp b/Pods/BRCLucene/src/core/CLucene/index/DocumentsWriterThreadState.cpp new file mode 100644 index 0000000..6998fd8 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/index/DocumentsWriterThreadState.cpp @@ -0,0 +1,1318 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" + +#include "CLucene/store/Directory.h" +#include "CLucene/store/IndexOutput.h" +#include "CLucene/store/_RAMDirectory.h" +#include "CLucene/util/Array.h" +#include "CLucene/util/_Arrays.h" +#include "CLucene/util/Misc.h" +#include "CLucene/util/CLStreams.h" +#include "CLucene/document/Field.h" +#include "CLucene/search/Similarity.h" +#include "CLucene/document/Document.h" +#include "_TermInfo.h" +#include "_FieldInfos.h" +#include "_CompoundFile.h" +#include "IndexWriter.h" +#include "_IndexFileNames.h" +#include "_FieldsWriter.h" +#include "Term.h" +#include "_Term.h" +#include "_TermVector.h" +#include "_TermInfosWriter.h" +#include "CLucene/analysis/AnalysisHeader.h" +#include "CLucene/search/Similarity.h" +#include "_TermInfosWriter.h" +#include "_FieldsWriter.h" +#include "_DocumentsWriter.h" +#include +#include + +CL_NS_USE(util) +CL_NS_USE(store) +CL_NS_USE(analysis) +CL_NS_USE(document) +CL_NS_USE(search) +CL_NS_DEF(index) + + +DocumentsWriter::ThreadState::ThreadState(DocumentsWriter* __parent): + postingsFreeListTS(ValueArray(256)), + vectorFieldPointers(ValueArray(10)), + vectorFieldNumbers(ValueArray(10)), + fieldDataArray(ValueArray(8)), + fieldDataHash(ValueArray(16)), + postingsVectors(ObjectArray(1)), + postingsPool( _CLNEW ByteBlockPool(true, __parent) ), + vectorsPool( _CLNEW ByteBlockPool(false, __parent) ), + charPool( _CLNEW CharBlockPool(__parent) ), + allFieldDataArray(ValueArray(10)), + _parent(__parent) +{ + fieldDataHashMask = 15; + postingsFreeCountTS = 0; + stringReader = _CLNEW ReusableStringReader(_T(""),0,false); + + isIdle = true; + numThreads = 1; + + tvfLocal = _CLNEW RAMOutputStream(); // Term vectors for one doc + fdtLocal = _CLNEW RAMOutputStream(); // Stored fields for one doc + + this->docBoost = 0.0; + this->fieldGen = this->posUpto = this->maxPostingsVectors = this->numStoredFields = 0; + this->numAllFieldData = this->docID = 0; + this->numFieldData = numVectorFields = this->proxUpto = this->freqUpto = this->offsetUpto = 0; + this->localFieldsWriter = NULL; + this->maxTermPrefix = NULL; + this->p = NULL; + this->prox = NULL; + this->vector = NULL; + this->offsets = NULL; + this->pos = NULL; + this->freq = NULL; + this->doFlushAfter = false; +} + +DocumentsWriter::ThreadState::~ThreadState(){ + _CLDELETE(postingsPool); + _CLDELETE(vectorsPool); + _CLDELETE(charPool); + _CLDELETE(stringReader); + _CLDELETE(tvfLocal); + _CLDELETE(fdtLocal); + + for ( size_t i=0; iclose(); + _CLDELETE(localFieldsWriter); + } + postingsPool->reset(); + charPool->reset(); + _parent->recyclePostings(this->postingsFreeListTS, this->postingsFreeCountTS); + this->postingsFreeCountTS = 0; + for(int32_t i=0;ilastGen = -1; + if (fp->numPostings > 0) + fp->resetPostingArrays(); + } +} + +void DocumentsWriter::ThreadState::writeDocument() { + + // If we hit an exception while appending to the + // stored fields or term vectors files, we have to + // abort all documents since we last flushed because + // it means those files are possibly inconsistent. + try { + _parent->numDocsInStore++; + + // Append stored fields to the real FieldsWriter: + _parent->fieldsWriter->flushDocument(numStoredFields, fdtLocal); + fdtLocal->reset(); + + // Append term vectors to the real outputs: + if (_parent->tvx != NULL) { + _parent->tvx->writeLong(_parent->tvd->getFilePointer()); + _parent->tvd->writeVInt(numVectorFields); + if (numVectorFields > 0) { + for(int32_t i=0;itvd->writeVInt(vectorFieldNumbers[i]); + assert(0 == vectorFieldPointers[0]); + _parent->tvd->writeVLong(_parent->tvf->getFilePointer()); + int64_t lastPos = vectorFieldPointers[0]; + for(int32_t i=1;itvd->writeVLong(pos-lastPos); + lastPos = pos; + } + tvfLocal->writeTo(_parent->tvf); + tvfLocal->reset(); + } + } + + // Append norms for the fields we saw: + for(int32_t i=0;idoNorms) { + BufferedNorms* bn = _parent->norms[fp->fieldInfo->number]; + assert ( bn != NULL ); + assert ( bn->upto <= docID ); + bn->fill(docID); + float_t norm = fp->boost * _parent->writer->getSimilarity()->lengthNorm(fp->fieldInfo->name, fp->length); + bn->add(norm); + } + } + } catch (CLuceneError& t) { + // Forcefully idle this threadstate -- its state will + // be reset by abort() + isIdle = true; + throw AbortException(t, _parent); + } + + if (_parent->bufferIsFull && !_parent->flushPending) { + _parent->flushPending = true; + doFlushAfter = true; + } +} + +void DocumentsWriter::ThreadState::init(Document* doc, int32_t docID) { + + assert (!isIdle); + assert (_parent->writer->testPoint("DocumentsWriter.ThreadState.init start")); + + this->docID = docID; + docBoost = doc->getBoost(); + numStoredFields = 0; + numFieldData = 0; + numVectorFields = 0; + maxTermPrefix = NULL; + + assert (0 == fdtLocal->length()); + assert (0 == fdtLocal->getFilePointer()); + assert (0 == tvfLocal->length()); + assert (0 == tvfLocal->getFilePointer()); + const int32_t thisFieldGen = fieldGen++; + + const Document::FieldsType& docFields = *doc->getFields(); + const int32_t numDocFields = docFields.size(); + bool docHasVectors = false; + + // Absorb any new fields first seen in this document. + // Also absorb any changes to fields we had already + // seen before (eg suddenly turning on norms or + // vectors, etc.): + + for(int32_t i=0;ifieldInfos->add(field->name(), field->isIndexed(), field->isTermVectorStored(), + field->isStorePositionWithTermVector(), field->isStoreOffsetWithTermVector(), + field->getOmitNorms(), false); + if (fi->isIndexed && !fi->omitNorms) { + // Maybe grow our buffered norms + if (_parent->norms.length <= fi->number) { + int32_t newSize = (int32_t) ((1+fi->number)*1.25); + _parent->norms.resize(newSize); + } + + if (_parent->norms[fi->number] == NULL) + _parent->norms.values[fi->number] = _CLNEW BufferedNorms(); + + _parent->hasNorms = true; + } + + // Make sure we have a FieldData allocated + int32_t hashPos = Misc::thashCode(fi->name) & fieldDataHashMask; //TODO: put hash in fieldinfo + FieldData* fp = fieldDataHash[hashPos]; + while(fp != NULL && _tcscmp(fp->fieldInfo->name, fi->name) != 0 ) + fp = fp->next; + + if (fp == NULL) { + fp = _CLNEW FieldData(_parent,this,fi); + fp->next = fieldDataHash[hashPos]; + fieldDataHash.values[hashPos] = fp; + + if (numAllFieldData == allFieldDataArray.length) { + allFieldDataArray.resize( (int32_t) (allFieldDataArray.length*1.5) ); + + ValueArray newHashArray(fieldDataHash.length*2); + + // Rehash + fieldDataHashMask = allFieldDataArray.length-1; + for(size_t j=0;jfieldInfo->name) & fieldDataHashMask; + FieldData* nextFP0 = fp0->next; + fp0->next = newHashArray[hashPos]; + newHashArray.values[hashPos] = fp0; + fp0 = nextFP0; + } + } + fieldDataHash.resize( newHashArray.length ); + memcpy(fieldDataHash.values, newHashArray.values, newHashArray.length * sizeof(FieldData*)); + } + allFieldDataArray.values[numAllFieldData++] = fp; + } else { + assert (fp->fieldInfo == fi); + } + + if (thisFieldGen != fp->lastGen) { + + // First time we're seeing this field for this doc + fp->lastGen = thisFieldGen; + fp->fieldCount = 0; + fp->doVectors = fp->doVectorPositions = fp->doVectorOffsets = false; + fp->doNorms = fi->isIndexed && !fi->omitNorms; + + if (numFieldData == fieldDataArray.length) { + fieldDataArray.resize(fieldDataArray.length*2); + } + fieldDataArray.values[numFieldData++] = fp; + } + + if (field->isTermVectorStored()) { + if (!fp->doVectors && numVectorFields++ == vectorFieldPointers.length) { + const int32_t newSize = (int32_t)(numVectorFields*1.5); + vectorFieldPointers.resize(newSize); + vectorFieldNumbers.resize(newSize); + } + fp->doVectors = true; + docHasVectors = true; + + fp->doVectorPositions |= field->isStorePositionWithTermVector(); + fp->doVectorOffsets |= field->isStoreOffsetWithTermVector(); + } + + if (fp->fieldCount == fp->docFields.length) { + fp->docFields.resize(fp->docFields.length*2); + } + + // Lazily allocate arrays for postings: + if (field->isIndexed() && fp->postingsHash.values == NULL) + fp->initPostingArrays(); + + fp->docFields.values[fp->fieldCount++] = field; + } + + // Maybe init the local & global fieldsWriter + if (localFieldsWriter == NULL) { + if (_parent->fieldsWriter == NULL) { + assert (_parent->docStoreSegment.empty()); + assert (!_parent->segment.empty()); + _parent->docStoreSegment = _parent->segment; + // If we hit an exception while init'ing the + // fieldsWriter, we must abort this segment + // because those files will be in an unknown + // state: + try { + _parent->fieldsWriter = _CLNEW FieldsWriter(_parent->directory, _parent->docStoreSegment.c_str(), _parent->fieldInfos); + } catch (CLuceneError& t) { + throw AbortException(t,_parent); + } + _CLDELETE(_parent->_files); + } + localFieldsWriter = _CLNEW FieldsWriter(NULL, fdtLocal, _parent->fieldInfos); + } + + // First time we see a doc that has field(s) with + // stored vectors, we init our tvx writer + if (docHasVectors) { + if (_parent->tvx == NULL) { + assert (!_parent->docStoreSegment.empty()); + // If we hit an exception while init'ing the term + // vector output files, we must abort this segment + // because those files will be in an unknown + // state: + try { + _parent->tvx = _parent->directory->createOutput( (_parent->docStoreSegment + "." + IndexFileNames::VECTORS_INDEX_EXTENSION).c_str() ); + _parent->tvx->writeInt(TermVectorsReader::FORMAT_VERSION); + _parent->tvd = _parent->directory->createOutput( (_parent->docStoreSegment + "." + IndexFileNames::VECTORS_DOCUMENTS_EXTENSION).c_str() ); + _parent->tvd->writeInt(TermVectorsReader::FORMAT_VERSION); + _parent->tvf = _parent->directory->createOutput( (_parent->docStoreSegment + "." + IndexFileNames::VECTORS_FIELDS_EXTENSION).c_str() ); + _parent->tvf->writeInt(TermVectorsReader::FORMAT_VERSION); + + // We must "catch up" for all docs before us + // that had no vectors: + for(int32_t i=0;i<_parent->numDocsInStore;i++) { + _parent->tvx->writeLong(_parent->tvd->getFilePointer()); + _parent->tvd->writeVInt(0); + } + + } catch (CLuceneError& t) { + throw AbortException(t, _parent); + } + _CLDELETE(_parent->_files); + } + + numVectorFields = 0; + } +} + +void DocumentsWriter::ThreadState::doPostingSort(Posting** postings, int32_t numPosting) { + quickSort(postings, 0, numPosting-1); +} + +void DocumentsWriter::ThreadState::quickSort(Posting** postings, int32_t lo, int32_t hi) { + if (lo >= hi) + return; + + int32_t mid = ((uint32_t)(lo + hi)) >> 1; //unsigned shift... + + if (comparePostings(postings[lo], postings[mid]) > 0) { + Posting* tmp = postings[lo]; + postings[lo] = postings[mid]; + postings[mid] = tmp; + } + + if (comparePostings(postings[mid], postings[hi]) > 0) { + Posting* tmp = postings[mid]; + postings[mid] = postings[hi]; + postings[hi] = tmp; + + if (comparePostings(postings[lo], postings[mid]) > 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; + + Posting* partition = postings[mid]; + + for (; ;) { + while (comparePostings(postings[right], partition) > 0) + --right; + + while (left < right && comparePostings(postings[left], 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 DocumentsWriter::ThreadState::doVectorSort(ArrayBase& postings, int32_t numPosting) { + quickSort(postings, 0, numPosting-1); +} + +void DocumentsWriter::ThreadState::quickSort(ArrayBase& postings, int32_t lo, int32_t hi) { + if (lo >= hi) + return; + + int32_t mid = ((uint8_t)(lo + hi)) >> 1; //unsigned shift.. + + if (comparePostings(postings[lo]->p, postings[mid]->p) > 0) { + PostingVector* tmp = postings[lo]; + postings.values[lo] = postings[mid]; + postings.values[mid] = tmp; + } + + if (comparePostings(postings[mid]->p, postings[hi]->p) > 0) { + PostingVector* tmp = postings[mid]; + postings.values[mid] = postings[hi]; + postings.values[hi] = tmp; + + if (comparePostings(postings[lo]->p, postings[mid]->p) > 0) { + PostingVector* tmp2 = postings[lo]; + postings.values[lo] = postings[mid]; + postings.values[mid] = tmp2; + } + } + + int32_t left = lo + 1; + int32_t right = hi - 1; + + if (left >= right) + return; + + PostingVector* partition = postings[mid]; + + for (; ;) { + while (comparePostings(postings[right]->p, partition->p) > 0) + --right; + + while (left < right && comparePostings(postings[left]->p, partition->p) <= 0) + ++left; + + if (left < right) { + PostingVector* tmp = postings[left]; + postings.values[left] = postings[right]; + postings.values[right] = tmp; + --right; + } else { + break; + } + } + + quickSort(postings, lo, left); + quickSort(postings, left + 1, hi); +} + +void DocumentsWriter::ThreadState::trimFields() { + + int32_t upto = 0; + for(int32_t i=0;ilastGen == -1) { + // This field was not seen since the previous + // flush, so, free up its resources now + + // Unhash + const int32_t hashPos = Misc::thashCode(fp->fieldInfo->name) & fieldDataHashMask; + FieldData* last = NULL; + FieldData* fp0 = fieldDataHash[hashPos]; + while(fp0 != fp) { + last = fp0; + fp0 = fp0->next; + } + assert(fp0 != NULL); + + if (last == NULL) + fieldDataHash.values[hashPos] = fp->next; + else + last->next = fp->next; + + if (_parent->infoStream != NULL) + (*_parent->infoStream) << " remove field=" << fp->fieldInfo->name << "\n"; + + _CLDELETE(fp); + } else { + // Reset + fp->lastGen = -1; + allFieldDataArray.values[upto++] = fp; + + if (fp->numPostings > 0 && ((float_t) fp->numPostings) / fp->postingsHashSize < 0.2) { + int32_t hashSize = fp->postingsHashSize; + + // Reduce hash so it's between 25-50% full + while (fp->numPostings < (hashSize>>1) && hashSize >= 2) + hashSize >>= 1; + hashSize <<= 1; + + if (hashSize != fp->postingsHash.length) + fp->rehashPostings(hashSize); + } + } + } + //delete everything after up to in allFieldDataArray + for ( size_t i=upto;inorms.length;i++) { + BufferedNorms* n = _parent->norms[i]; + if (n != NULL && n->upto == 0) + { + _CLLDELETE(n); + _parent->norms.values[i] = NULL; + } + } + + numAllFieldData = upto; + + // Also pare back PostingsVectors if it's excessively + // large + if (maxPostingsVectors * 1.5 < postingsVectors.length) { + int32_t newSize; + if (0 == maxPostingsVectors) + newSize = 1; + else + newSize = (int32_t) (1.5*maxPostingsVectors); + postingsVectors.resize(newSize, true); + } +} + +void DocumentsWriter::ThreadState::processDocument(Analyzer* analyzer) +{ + + const int32_t numFields = numFieldData; + + assert (0 == fdtLocal->length()); + + if (_parent->tvx != NULL){ + // If we are writing vectors then we must visit + // fields in sorted order so they are written in + // sorted order. TODO: we actually only need to + // sort the subset of fields that have vectors + // enabled; we could save [small amount of] CPU + // here. + Arrays::sort(fieldDataArray.values,fieldDataArray.length, 0, numFields); + } + + // We process the document one field at a time + for(int32_t i=0;iprocessField(analyzer); + + if (maxTermPrefix != NULL && _parent->infoStream != NULL) + (*_parent->infoStream) << "WARNING: document contains at least one immense term (longer than the max length " << MAX_TERM_LENGTH << "), all of which were skipped. Please correct the analyzer to not produce such terms. The prefix of the first immense term is: '" << maxTermPrefix << "...'\n"; + + if (_parent->ramBufferSize != IndexWriter::DISABLE_AUTO_FLUSH + && _parent->numBytesUsed > 0.95 * _parent->ramBufferSize) + _parent->balanceRAM(); +} + +// USE ONLY FOR DEBUGGING! +/* + String getPostingText() { + TCHAR* text = charPool->buffers[p->textStart >> CHAR_BLOCK_SHIFT]; + int32_t upto = p->textStart & CHAR_BLOCK_MASK; + while((*text)[upto] != CLUCENE_END_OF_WORD) + upto++; + return new String(text, p->textStart, upto-(p->textStart & BYTE_BLOCK_MASK)); + } +*/ + +bool DocumentsWriter::ThreadState::postingEquals(const TCHAR* tokenText, const int32_t tokenTextLen) { + + const TCHAR* text = charPool->buffers[p->textStart >> CHAR_BLOCK_SHIFT]; + assert (text != NULL); + int32_t pos = p->textStart & CHAR_BLOCK_MASK; + + int32_t tokenPos = 0; + for(;tokenPosbuffers[p1->textStart >> CHAR_BLOCK_SHIFT] + (p1->textStart & CHAR_BLOCK_MASK); + const TCHAR* pos2 = charPool->buffers[p2->textStart >> CHAR_BLOCK_SHIFT] + (p2->textStart & CHAR_BLOCK_MASK); + while(true) { + const TCHAR c1 = *pos1++; + const TCHAR c2 = *pos2++; + if (c1 < c2) + if (CLUCENE_END_OF_WORD == c2) + return 1; + else + return -1; + else if (c2 < c1) + if (CLUCENE_END_OF_WORD == c1) + return -1; + else + return 1; + else if (CLUCENE_END_OF_WORD == c1) + return 0; + } +} + +void DocumentsWriter::ThreadState::writeFreqVInt(int32_t vi) { + uint32_t i = vi; + while ((i & ~0x7F) != 0) { + writeFreqByte((uint8_t)((i & 0x7f) | 0x80)); + i >>= 7; //unsigned shift... + } + writeFreqByte((uint8_t) i); +} + +void DocumentsWriter::ThreadState::writeProxVInt(int32_t vi) { + uint32_t i = vi; + while ((i & ~0x7F) != 0) { + writeProxByte((uint8_t)((i & 0x7f) | 0x80)); + i >>= 7; //unsigned shift... + } + writeProxByte((uint8_t) i); +} + +void DocumentsWriter::ThreadState::writeFreqByte(uint8_t b) { + assert (freq != NULL); + if (freq[freqUpto] != 0) { + freqUpto = postingsPool->allocSlice(freq, freqUpto); + freq = postingsPool->buffer; + p->freqUpto = postingsPool->tOffset; + } + freq[freqUpto++] = b; +} + +void DocumentsWriter::ThreadState::writeProxByte(uint8_t b) { + assert (prox != NULL); + if (prox[proxUpto] != 0) { + proxUpto = postingsPool->allocSlice(prox, proxUpto); + prox = postingsPool->buffer; + p->proxUpto = postingsPool->tOffset; + assert (prox != NULL); + } + prox[proxUpto++] = b; + assert (proxUpto != DocumentsWriter::BYTE_BLOCK_SIZE); +} + +void DocumentsWriter::ThreadState::writeProxBytes(uint8_t* b, int32_t offset, int32_t len) { + const int32_t offsetEnd = offset + len; + while(offset < offsetEnd) { + if (prox[proxUpto] != 0) { + // End marker + proxUpto = postingsPool->allocSlice(prox, proxUpto); + prox = postingsPool->buffer; + p->proxUpto = postingsPool->tOffset; + } + + prox[proxUpto++] = b[offset++]; + assert (proxUpto != DocumentsWriter::BYTE_BLOCK_SIZE); + } +} + +void DocumentsWriter::ThreadState::writeOffsetVInt(int32_t vi) { + uint32_t i = vi; + while ((i & ~0x7F) != 0) { + writeOffsetByte((uint8_t)((i & 0x7f) | 0x80)); + i >>= 7; //unsigned shift... + } + writeOffsetByte((uint8_t) i); +} + +void DocumentsWriter::ThreadState::writeOffsetByte(uint8_t b) { + assert (offsets != NULL); + if (offsets[offsetUpto] != 0) { + offsetUpto = vectorsPool->allocSlice(offsets, offsetUpto); + offsets = vectorsPool->buffer; + vector->offsetUpto = vectorsPool->tOffset; + } + offsets[offsetUpto++] = b; +} + +void DocumentsWriter::ThreadState::writePosVInt(int32_t vi) { + uint32_t i = vi; + while ((i & ~0x7F) != 0) { + writePosByte((uint8_t)((i & 0x7f) | 0x80)); + i >>= 7; //unsigned shift... + } + writePosByte((uint8_t) i); +} + +void DocumentsWriter::ThreadState::writePosByte(uint8_t b) { + assert (pos != NULL); + if (pos[posUpto] != 0) { + posUpto = vectorsPool->allocSlice(pos, posUpto); + pos = vectorsPool->buffer; + vector->posUpto = vectorsPool->tOffset; + } + pos[posUpto++] = b; +} + + + +DocumentsWriter::ThreadState::FieldData::FieldData(DocumentsWriter* __parent, ThreadState* __threadState, FieldInfo* fieldInfo): + docFields(ValueArray(1)), + _parent(__parent), + localToken (_CLNEW Token), + vectorSliceReader(_CLNEW ByteSliceReader()) +{ + this->fieldCount = this->postingsHashSize = this->postingsHashHalfSize = this->postingsVectorsUpto = 0; + this->postingsHashMask = this->offsetEnd = 0; + this->offsetStartCode = this->offsetStart = this->numPostings = this->position = this->length = this->offset = 0; + this->boost = 0.0; + this->next = NULL; + this->lastGen = -1; + this->fieldInfo = fieldInfo; + this->threadState = __threadState; + this->postingsCompacted = false; +} +DocumentsWriter::ThreadState::FieldData::~FieldData(){ + _CLDELETE(vectorSliceReader); + _CLDELETE(localToken); +} +bool DocumentsWriter::ThreadState::FieldData::sort(FieldData* e1, FieldData* e2){ + return _tcscmp(e1->fieldInfo->name, e2->fieldInfo->name) < 0; +} +void DocumentsWriter::ThreadState::FieldData::resetPostingArrays() { + if (!postingsCompacted) + compactPostings(); + _parent->recyclePostings(this->postingsHash, numPostings); + memset(postingsHash.values, 0, postingsHash.length * sizeof(Posting*)); + postingsCompacted = false; + numPostings = 0; +} + +const char* DocumentsWriter::ThreadState::FieldData::getObjectName() const{ + return getClassName(); +} +const char* DocumentsWriter::ThreadState::FieldData::getClassName(){ + return "DocumentsWriter::ThreadState"; +} +void DocumentsWriter::ThreadState::FieldData::initPostingArrays() { + // Target hash fill factor of <= 50% + // NOTE: must be a power of two for hash collision + // strategy to work correctly + postingsHashSize = 4; + postingsHashHalfSize = 2; + postingsHashMask = postingsHashSize-1; + postingsHash.resize(postingsHashSize); +} + +int32_t DocumentsWriter::ThreadState::FieldData::compareTo(NamedObject* o) { + if ( o->getObjectName() != FieldData::getClassName() ) + return -1; + return _tcscmp(fieldInfo->name, ((FieldData*) o)->fieldInfo->name); +} + +void DocumentsWriter::ThreadState::FieldData::compactPostings() { + int32_t upto = 0; + for(int32_t i=0;i* DocumentsWriter::ThreadState::FieldData::sortPostings() { + compactPostings(); + threadState->doPostingSort(postingsHash.values, numPostings); + return &postingsHash; +} + + +void DocumentsWriter::ThreadState::FieldData::processField(Analyzer* analyzer) { + length = 0; + position = 0; + offset = 0; + boost = threadState->docBoost; + + const int32_t maxFieldLength = _parent->writer->getMaxFieldLength(); + + const int32_t limit = fieldCount; + const ArrayBase& docFieldsFinal = docFields; + + bool doWriteVectors = true; + + // Walk through all occurrences in this doc for this + // field: + try { + for(int32_t j=0;jisIndexed()) + invertField(field, analyzer, maxFieldLength); + + if (field->isStored()) { + threadState->numStoredFields++; + bool success = false; + try { + threadState->localFieldsWriter->writeField(fieldInfo, field); + success = true; + } _CLFINALLY( + // If we hit an exception inside + // localFieldsWriter->writeField, the + // contents of fdtLocal can be corrupt, so + // we must discard all stored fields for + // this document: + if (!success) + threadState->fdtLocal->reset(); + ) + } + + docFieldsFinal.values[j] = NULL; + } + } catch (AbortException& ae) { + doWriteVectors = false; + throw ae; + } _CLFINALLY ( + if (postingsVectorsUpto > 0) { + try { + if (doWriteVectors) { + // Add term vectors for this field + bool success = false; + try { + writeVectors(fieldInfo); + success = true; + } _CLFINALLY ( + if (!success) { + // If we hit an exception inside + // writeVectors, the contents of tvfLocal + // can be corrupt, so we must discard all + // term vectors for this document: + threadState->numVectorFields = 0; + threadState->tvfLocal->reset(); + } + ) + } + } _CLFINALLY ( + if (postingsVectorsUpto > threadState->maxPostingsVectors) + threadState->maxPostingsVectors = postingsVectorsUpto; + postingsVectorsUpto = 0; + threadState->vectorsPool->reset(); + ) + } + ) +} +void DocumentsWriter::ThreadState::FieldData::invertField(Field* field, Analyzer* analyzer, const int32_t maxFieldLength) { + + if (length>0) + position += analyzer->getPositionIncrementGap(fieldInfo->name); + + if (!field->isTokenized()) { // un-tokenized field + const TCHAR* stringValue = field->stringValue(); + const size_t valueLength = _tcslen(stringValue); + Token* token = localToken; + token->clear(); + + token->setText(stringValue,valueLength); + token->setStartOffset(offset); + token->setEndOffset(offset + valueLength); + addPosition(token); + offset += valueLength; + length++; + } else { // tokenized field + TokenStream* stream; + TokenStream* streamValue = field->tokenStreamValue(); + + if (streamValue != NULL) + stream = streamValue; + else { + // the field does not have a TokenStream, + // so we have to obtain one from the analyzer + Reader* reader; // find or make Reader + Reader* readerValue = field->readerValue(); + + if (readerValue != NULL) + reader = readerValue; + else { + const TCHAR* stringValue = field->stringValue(); + size_t stringValueLength = _tcslen(stringValue); + if (stringValue == NULL) + _CLTHROWA(CL_ERR_IllegalArgument, "field must have either TokenStream, String or Reader value"); + threadState->stringReader->init(stringValue, stringValueLength); + reader = threadState->stringReader; + } + + // Tokenize field and add to postingTable + stream = analyzer->reusableTokenStream(fieldInfo->name, reader); + } + + // reset the TokenStream to the first token + stream->reset(); + + try { + offsetEnd = offset-1; + for(;;) { + Token* token = stream->next(localToken); + if (token == NULL) break; + position += (token->getPositionIncrement() - 1); + addPosition(token); + ++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) { + if (_parent->infoStream != NULL) + (*_parent->infoStream) << "maxFieldLength " << maxFieldLength << " reached for field " << fieldInfo->name << ", ignoring following tokens\n"; + 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(fieldInfo->name) + + _tcslen(defaultMaxAsChar); + TCHAR* errMsg = _CL_NEWARRAY(TCHAR,errMsgLen+1); + + _sntprintf(errMsg, errMsgLen,errMsgBase, fieldInfo->name, defaultMaxAsChar); + + _CLTHROWT_DEL(CL_ERR_Runtime,errMsg); + } + } + offset = offsetEnd+1; + } _CLFINALLY ( + stream->close(); //don't delete, this stream is re-used + ) + } + + boost *= field->getBoost(); +} + +DocumentsWriter::PostingVector* DocumentsWriter::ThreadState::FieldData::addNewVector() { + + if (postingsVectorsUpto == threadState->postingsVectors.length) { + int32_t newSize; + if (threadState->postingsVectors.length < 2) + newSize = 2; + else + newSize = (int32_t) (1.5*threadState->postingsVectors.length); + threadState->postingsVectors.resize(newSize, true); + } + + threadState->p->vector = threadState->postingsVectors[postingsVectorsUpto]; + if (threadState->p->vector == NULL) + threadState->p->vector = threadState->postingsVectors.values[postingsVectorsUpto] = _CLNEW PostingVector(); + + postingsVectorsUpto++; + + PostingVector* v = threadState->p->vector; + v->p = threadState->p; + + const int32_t firstSize = levelSizeArray[0]; + + if (doVectorPositions) { + const int32_t upto = threadState->vectorsPool->newSlice(firstSize); + v->posStart = v->posUpto = threadState->vectorsPool->tOffset + upto; + } + + if (doVectorOffsets) { + const int32_t upto = threadState->vectorsPool->newSlice(firstSize); + v->offsetStart = v->offsetUpto = threadState->vectorsPool->tOffset + upto; + } + + return v; +} + +void DocumentsWriter::ThreadState::FieldData::addPosition(Token* token) { + + const Payload* payload = token->getPayload(); + + // Get the text of this term. Term can either + // provide a String token or offset into a TCHAR* + // array + const TCHAR* tokenText = token->termBuffer(); + const int32_t tokenTextLen = token->termLength(); + + uint32_t code = 0; + + // Compute hashcode + int32_t downto = tokenTextLen; + while (downto > 0) + code = (code*31) + tokenText[--downto]; +/* + std::cout << " addPosition: buffer=" << Misc::toString(tokenText).substr(0,tokenTextLen) << " pos=" << position + << " offsetStart=" << (offset+token->startOffset()) << " offsetEnd=" << (offset + token->endOffset()) + << " docID=" << threadState->docID << " doPos=" << (doVectorPositions?"true":"false") << " doOffset=" << (doVectorOffsets?"true":"false") << "\n"; +*/ + int32_t hashPos = code & postingsHashMask; + + assert (!postingsCompacted); + + // Locate Posting in hash + threadState->p = postingsHash[hashPos]; + + if (threadState->p != NULL && !threadState->postingEquals(tokenText, tokenTextLen)) { + // Conflict: keep searching different locations in + // the hash table. + const int32_t inc = ((code>>8)+code)|1; + do { + code += inc; + hashPos = code & postingsHashMask; + threadState->p = postingsHash[hashPos]; + } while (threadState->p != NULL && !threadState->postingEquals(tokenText, tokenTextLen)); + } + + int32_t proxCode; + + // If we hit an exception below, it's possible the + // posting list or term vectors data will be + // partially written and thus inconsistent if + // flushed, so we have to abort all documents + // since the last flush: + + try { + + if (threadState->p != NULL) { // term seen since last flush + + if (threadState->docID != threadState->p->lastDocID) { // term not yet seen in this doc +/* + std::cout << " seen before (new docID=" << threadState->docID << ") freqUpto=" << threadState->p->freqUpto + << " proxUpto=" << threadState->p->proxUpto << "\n"; +*/ + assert (threadState->p->docFreq > 0); + + // Now that we know doc freq for previous doc, + // write it & lastDocCode + threadState->freqUpto = threadState->p->freqUpto & BYTE_BLOCK_MASK; + threadState->freq = threadState->postingsPool->buffers[threadState->p->freqUpto >> BYTE_BLOCK_SHIFT]; + if (1 == threadState->p->docFreq) + threadState->writeFreqVInt(threadState->p->lastDocCode | 1); + else { + threadState->writeFreqVInt(threadState->p->lastDocCode); + threadState->writeFreqVInt(threadState->p->docFreq); + } + threadState->p->freqUpto = threadState->freqUpto + (threadState->p->freqUpto & BYTE_BLOCK_NOT_MASK); + + if (doVectors) { + threadState->vector = addNewVector(); + if (doVectorOffsets) { + offsetStartCode = offsetStart = offset + token->startOffset(); + offsetEnd = offset + token->endOffset(); + } + } + + proxCode = position; + + threadState->p->docFreq = 1; + + // Store code so we can write this after we're + // done with this new doc + threadState->p->lastDocCode = (threadState->docID - threadState->p->lastDocID) << 1; + threadState->p->lastDocID = threadState->docID; + + } else { // term already seen in this doc + //std::cout << " seen before (same docID=" << threadState->docID << ") proxUpto=" << threadState->p->proxUpto << "\n"; + + threadState->p->docFreq++; + + proxCode = position - threadState->p->lastPosition; + + if (doVectors) { + threadState->vector = threadState->p->vector; + if (threadState->vector == NULL) + threadState->vector = addNewVector(); + if (doVectorOffsets) { + offsetStart = offset + token->startOffset(); + offsetEnd = offset + token->endOffset(); + offsetStartCode = offsetStart - threadState->vector->lastOffset; + } + } + } + } else { // term not seen before + //std::cout << " never seen docID=" << threadState->docID << "\n"; + + // Refill? + if (0 == threadState->postingsFreeCountTS) { + _parent->getPostings(threadState->postingsFreeListTS); + threadState->postingsFreeCountTS = threadState->postingsFreeListTS.length; + } + + const int32_t textLen1 = 1+tokenTextLen; + if (textLen1 + threadState->charPool->tUpto > CHAR_BLOCK_SIZE) { + if (textLen1 > CHAR_BLOCK_SIZE) { + // Just skip this term, to remain as robust as + // possible during indexing. A TokenFilter + // can be inserted into the analyzer chain if + // other behavior is wanted (pruning the term + // to a prefix, throwing an exception, etc). + if (threadState->maxTermPrefix == NULL){ + threadState->maxTermPrefix = _CL_NEWARRAY(TCHAR,31); + _tcsncpy(threadState->maxTermPrefix,tokenText,30); + threadState->maxTermPrefix[30] = 0; + } + + // Still increment position: + position++; + return; + } + threadState->charPool->nextBuffer(); + } + TCHAR* text = threadState->charPool->buffer; + TCHAR* textUpto = text+ threadState->charPool->tUpto; + + // Pull next free Posting from free list + threadState->p = threadState->postingsFreeListTS[--threadState->postingsFreeCountTS]; + assert(threadState->p != NULL); + threadState->p->textStart = textUpto + threadState->charPool->tOffset - text; + threadState->charPool->tUpto += textLen1; + + _tcsncpy(textUpto, tokenText, tokenTextLen); + textUpto[tokenTextLen] = CLUCENE_END_OF_WORD; + + assert (postingsHash[hashPos] == NULL); + + postingsHash.values[hashPos] = threadState->p; + numPostings++; + + if (numPostings == postingsHashHalfSize) + rehashPostings(2*postingsHashSize); + + // Init first slice for freq & prox streams + const int32_t firstSize = levelSizeArray[0]; + + const int32_t upto1 = threadState->postingsPool->newSlice(firstSize); + threadState->p->freqStart = threadState->p->freqUpto = threadState->postingsPool->tOffset + upto1; + + const int32_t upto2 = threadState->postingsPool->newSlice(firstSize); + threadState->p->proxStart = threadState->p->proxUpto = threadState->postingsPool->tOffset + upto2; + + threadState->p->lastDocCode = threadState->docID << 1; + threadState->p->lastDocID = threadState->docID; + threadState->p->docFreq = 1; + + if (doVectors) { + threadState->vector = addNewVector(); + if (doVectorOffsets) { + offsetStart = offsetStartCode = offset + token->startOffset(); + offsetEnd = offset + token->endOffset(); + } + } + + proxCode = position; + } + + threadState->proxUpto = threadState->p->proxUpto & BYTE_BLOCK_MASK; + threadState->prox = threadState->postingsPool->buffers[threadState->p->proxUpto >> BYTE_BLOCK_SHIFT]; + assert (threadState->prox != NULL); + + if (payload != NULL && payload->length() > 0) { + threadState->writeProxVInt((proxCode<<1)|1); + threadState->writeProxVInt(payload->length()); + threadState->writeProxBytes(payload->getData().values, payload->getOffset(), payload->length()); + fieldInfo->storePayloads = true; + } else + threadState->writeProxVInt(proxCode<<1); + + threadState->p->proxUpto = threadState->proxUpto + (threadState->p->proxUpto & BYTE_BLOCK_NOT_MASK); + + threadState->p->lastPosition = position++; + + if (doVectorPositions) { + threadState->posUpto = threadState->vector->posUpto & BYTE_BLOCK_MASK; + threadState->pos = threadState->vectorsPool->buffers[threadState->vector->posUpto >> BYTE_BLOCK_SHIFT]; + threadState->writePosVInt(proxCode); + threadState->vector->posUpto = threadState->posUpto + (threadState->vector->posUpto & BYTE_BLOCK_NOT_MASK); + } + + if (doVectorOffsets) { + threadState->offsetUpto = threadState->vector->offsetUpto & BYTE_BLOCK_MASK; + threadState->offsets = threadState->vectorsPool->buffers[threadState->vector->offsetUpto >> BYTE_BLOCK_SHIFT]; + threadState->writeOffsetVInt(offsetStartCode); + threadState->writeOffsetVInt(offsetEnd-offsetStart); + threadState->vector->lastOffset = offsetEnd; + threadState->vector->offsetUpto = threadState->offsetUpto + (threadState->vector->offsetUpto & BYTE_BLOCK_NOT_MASK); + } + } catch (CLuceneError& t) { + throw AbortException(t, _parent); + } +} + +void DocumentsWriter::ThreadState::FieldData::rehashPostings(const int32_t newSize) { + + const int32_t newMask = newSize-1; + + ValueArray newHash(newSize); + int32_t hashPos; + uint32_t code; + const TCHAR* pos = NULL; + const TCHAR* start = NULL; + Posting* p0; + + for(int32_t i=0;icharPool->buffers[p0->textStart >> CHAR_BLOCK_SHIFT] + (p0->textStart & CHAR_BLOCK_MASK); + pos = start; + while( *pos != CLUCENE_END_OF_WORD) + pos++; + code = 0; + while (pos > start) + code = (code*31) + *--pos; + + hashPos = code & newMask; + assert (hashPos >= 0); + if (newHash[hashPos] != NULL) { + const int32_t inc = ((code>>8)+code)|1; + do { + code += inc; + hashPos = code & newMask; + } while (newHash[hashPos] != NULL); + } + newHash.values[hashPos] = p0; + } + } + + postingsHashMask = newMask; + postingsHash.deleteArray(); + postingsHash.length = newHash.length; + postingsHash.values = newHash.takeArray(); + postingsHashSize = newSize; + postingsHashHalfSize = newSize >> 1; +} + +void DocumentsWriter::ThreadState::FieldData::writeVectors(FieldInfo* fieldInfo) { + assert (fieldInfo->storeTermVector); + + threadState->vectorFieldNumbers.values[threadState->numVectorFields] = fieldInfo->number; + threadState->vectorFieldPointers.values[threadState->numVectorFields] = threadState->tvfLocal->getFilePointer(); + threadState->numVectorFields++; + + const int32_t numPostingsVectors = postingsVectorsUpto; + + threadState->tvfLocal->writeVInt(numPostingsVectors); + uint8_t bits = 0x0; + if (doVectorPositions) + bits |= TermVectorsReader::STORE_POSITIONS_WITH_TERMVECTOR; + if (doVectorOffsets) + bits |= TermVectorsReader::STORE_OFFSET_WITH_TERMVECTOR; + threadState->tvfLocal->writeByte(bits); + + threadState->doVectorSort(threadState->postingsVectors, numPostingsVectors); + + Posting* lastPosting = NULL; + + ByteSliceReader* reader = vectorSliceReader; + + for(int32_t j=0;jpostingsVectors[j]; + Posting* posting = vector->p; + const int32_t freq = posting->docFreq; + + int32_t prefix = 0; + const TCHAR* text2 = threadState->charPool->buffers[posting->textStart >> CHAR_BLOCK_SHIFT]; + const TCHAR* start2 = text2 + (posting->textStart & CHAR_BLOCK_MASK); + const TCHAR* pos2 = start2; + + // Compute common prefix between last term and + // this term + if (lastPosting == NULL) + prefix = 0; + else { + const TCHAR* text1 = threadState->charPool->buffers[lastPosting->textStart >> CHAR_BLOCK_SHIFT]; + const TCHAR* start1 = text1 + (lastPosting->textStart & CHAR_BLOCK_MASK); + const TCHAR* pos1 = start1; + while(true) { + if (*pos1 != *pos2 || *pos1 == CLUCENE_END_OF_WORD) { + prefix = pos1-start1; + break; + } + pos1++; + pos2++; + } + } + lastPosting = posting; + + // Compute length + while(*pos2 != CLUCENE_END_OF_WORD) + pos2++; + + const int32_t suffix = pos2 - start2 - prefix; + threadState->tvfLocal->writeVInt(prefix); + threadState->tvfLocal->writeVInt(suffix); + threadState->tvfLocal->writeChars(start2 + prefix, suffix); + threadState->tvfLocal->writeVInt(freq); + + if (doVectorPositions) { + reader->init(threadState->vectorsPool, vector->posStart, vector->posUpto); + reader->writeTo(threadState->tvfLocal); + } + + if (doVectorOffsets) { + reader->init(threadState->vectorsPool, vector->offsetStart, vector->offsetUpto); + reader->writeTo(threadState->tvfLocal); + } + } +} + +CL_NS_END diff --git a/Pods/BRCLucene/src/core/CLucene/index/FieldInfos.cpp b/Pods/BRCLucene/src/core/CLucene/index/FieldInfos.cpp new file mode 100644 index 0000000..289f4ed --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/index/FieldInfos.cpp @@ -0,0 +1,238 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.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" +#include "CLucene/store/IndexInput.h" +#include "CLucene/store/IndexOutput.h" + +CL_NS_USE(store) +CL_NS_USE(document) +CL_NS_USE(util) +CL_NS_DEF(index) + + +FieldInfo::FieldInfo( const TCHAR* _fieldName, + const bool _isIndexed, + const int32_t _fieldNumber, + const bool _storeTermVector, + const bool _storeOffsetWithTermVector, + const bool _storePositionWithTermVector, + const bool _omitNorms, + const bool _storePayloads): + name(CLStringIntern::intern(_fieldName )), + isIndexed(_isIndexed), + number(_fieldNumber), + storeTermVector(_storeTermVector), + storeOffsetWithTermVector(_storeOffsetWithTermVector), + storePositionWithTermVector(_storePositionWithTermVector), + omitNorms(_omitNorms), storePayloads(_storePayloads) +{ +} + +FieldInfo::~FieldInfo(){ + CL_NS(util)::CLStringIntern::unintern(name); +} + +FieldInfo* FieldInfo::clone() { + return _CLNEW FieldInfo(name, isIndexed, number, storeTermVector, storePositionWithTermVector, + storeOffsetWithTermVector, omitNorms, storePayloads); +} + +FieldInfos::FieldInfos(): + byName(false,false),byNumber(true) { +} + +FieldInfos::~FieldInfos(){ + byName.clear(); + byNumber.clear(); +} + +FieldInfos::FieldInfos(Directory* d, const char* name): + byName(false,false),byNumber(true) +{ + IndexInput* input = d->openInput(name); + try { + read(input); + } _CLFINALLY ( + input->close(); + _CLDELETE(input); + ); +} + +FieldInfos* FieldInfos::clone() +{ + FieldInfos* fis = _CLNEW FieldInfos(); + const size_t numField = byNumber.size(); + for(size_t i=0;iclone(); + fis->byNumber.push_back(fi); + fis->byName.put( fi->name, fi); + } + return fis; +} + +void FieldInfos::add(const Document* doc) { + const Document::FieldsType& fields = *doc->getFields(); + Field* field; + for ( Document::FieldsType::const_iterator itr = fields.begin() ; itr != fields.end() ; itr++ ){ + field = *itr; + add(field->name(), field->isIndexed(), field->isTermVectorStored(), field->isStorePositionWithTermVector(), + field->isStoreOffsetWithTermVector(), field->getOmitNorms()); + } +} + +void FieldInfos::addIndexed(const TCHAR** names, const bool storeTermVectors, const bool storePositionWithTermVector, + const bool storeOffsetWithTermVector) { + size_t i = 0; + while (names[i]) { + add(names[i], true, storeTermVectors, storePositionWithTermVector, storeOffsetWithTermVector); + ++i; + } +} + +void FieldInfos::add(const TCHAR** names,const bool isIndexed, const bool storeTermVectors, + const bool storePositionWithTermVector, const bool storeOffsetWithTermVector, const bool omitNorms, const bool storePayloads) +{ + size_t i=0; + while ( names[i] != NULL ){ + add(names[i], isIndexed, storeTermVectors, storePositionWithTermVector, + storeOffsetWithTermVector, omitNorms, storePayloads); + ++i; + } +} + +FieldInfo* FieldInfos::add( const TCHAR* name, const bool isIndexed, const bool storeTermVector, + const bool storePositionWithTermVector, const bool storeOffsetWithTermVector, const bool omitNorms, + const bool storePayloads) { + FieldInfo* fi = fieldInfo(name); + if (fi == NULL) { + return addInternal(name, isIndexed, storeTermVector, + storePositionWithTermVector, + storeOffsetWithTermVector, omitNorms, storePayloads); + } else { + if (fi->isIndexed != isIndexed) { + fi->isIndexed = true; // once indexed, always index + } + if (fi->storeTermVector != storeTermVector) { + fi->storeTermVector = true; // once vector, always vector + } + if (fi->storePositionWithTermVector != storePositionWithTermVector) { + fi->storePositionWithTermVector = true; // once vector, always vector + } + if (fi->storeOffsetWithTermVector != storeOffsetWithTermVector) { + fi->storeOffsetWithTermVector = true; // once vector, always vector + } + if (fi->omitNorms != omitNorms) { + fi->omitNorms = false; // once norms are stored, always store + } + if (fi->storePayloads != storePayloads) { + fi->storePayloads = true; + } + } + return fi; +} + +FieldInfo* FieldInfos::addInternal( const TCHAR* name, const bool isIndexed, const bool storeTermVector, + const bool storePositionWithTermVector, const bool storeOffsetWithTermVector, + const bool omitNorms, const bool storePayloads) { + + FieldInfo* fi = _CLNEW FieldInfo(name, isIndexed, byNumber.size(), storeTermVector, + storePositionWithTermVector, storeOffsetWithTermVector, omitNorms, storePayloads); + byNumber.push_back(fi); + byName.put( fi->name, fi); + return fi; +} + +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 { + FieldInfo* ret = byName.get(fieldName); + return ret; +} + +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]; +} + +size_t FieldInfos::size()const { + return byNumber.size(); +} + +bool FieldInfos::hasVectors() const{ + for (size_t i = 0; i < size(); i++) { + if (fieldInfo(i)->storeTermVector) + return true; + } + return false; +} + +void FieldInfos::write(Directory* d, const char* name) const{ + IndexOutput* output = d->createOutput(name); + try { + write(output); + } _CLFINALLY ( + output->close(); + _CLDELETE(output); + ); +} + +void FieldInfos::write(IndexOutput* output) const{ + output->writeVInt(static_cast(size())); + FieldInfo* fi; + uint8_t bits; + for (size_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; + if (fi->storePayloads) bits |= STORE_PAYLOADS; + + output->writeString(fi->name,_tcslen(fi->name)); + output->writeByte(bits); + } +} + +void FieldInfos::read(IndexInput* input) { + int32_t size = input->readVInt();//read in the size + uint8_t bits; + bool isIndexed,storeTermVector,storePositionsWithTermVector,storeOffsetWithTermVector,omitNorms,storePayloads; + for (int32_t i = 0; i < size; ++i){ + TCHAR* name = input->readString(); //we could read name into a string buffer, but we can't be sure what the maximum field length will be. + bits = input->readByte(); + isIndexed = (bits & IS_INDEXED) != 0; + storeTermVector = (bits & STORE_TERMVECTOR) != 0; + storePositionsWithTermVector = (bits & STORE_POSITIONS_WITH_TERMVECTOR) != 0; + storeOffsetWithTermVector = (bits & STORE_OFFSET_WITH_TERMVECTOR) != 0; + omitNorms = (bits & OMIT_NORMS) != 0; + storePayloads = (bits & STORE_PAYLOADS) != 0; + + addInternal(name, isIndexed, storeTermVector, storePositionsWithTermVector, storeOffsetWithTermVector, omitNorms, storePayloads); + _CLDELETE_CARRAY(name); + } +} + +CL_NS_END diff --git a/Pods/BRCLucene/src/core/CLucene/index/FieldsReader.cpp b/Pods/BRCLucene/src/core/CLucene/index/FieldsReader.cpp new file mode 100644 index 0000000..47b0682 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/index/FieldsReader.cpp @@ -0,0 +1,568 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" + +#include +#include "CLucene/util/Misc.h" +#include "CLucene/util/_StringIntern.h" +#include "CLucene/util/CLStreams.h" +#include "CLucene/store/Directory.h" +#include "CLucene/store/IndexInput.h" +#include "CLucene/document/Document.h" +#include "CLucene/document/FieldSelector.h" +#include "_FieldInfos.h" +#include "_FieldsWriter.h" +#include "_FieldsReader.h" +#include "CLucene/analysis/AnalysisHeader.h" +#include + +CL_NS_USE(store) +CL_NS_USE(document) +CL_NS_USE(util) +CL_NS_DEF(index) + +FieldsReader::FieldsReader(Directory* d, const char* segment, FieldInfos* fn, int32_t _readBufferSize, int32_t _docStoreOffset, int32_t size): + fieldInfos(fn), cloneableFieldsStream(NULL), fieldsStream(NULL), indexStream(NULL), + numTotalDocs(0),_size(0), closed(false),docStoreOffset(0) +{ +//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 != NULL, "segment != NULL"); + + bool success = false; + + try { + cloneableFieldsStream = d->openInput( Misc::segmentname(segment,".fdt").c_str(), _readBufferSize ); + fieldsStream = cloneableFieldsStream->clone(); + + indexStream = d->openInput( Misc::segmentname(segment,".fdx").c_str(), _readBufferSize ); + + if (_docStoreOffset != -1) { + // We read only a slice out of this shared fields file + this->docStoreOffset = _docStoreOffset; + this->_size = size; + + // Verify the file is long enough to hold all of our + // docs + CND_CONDITION(((int32_t) (indexStream->length() / 8)) >= size + this->docStoreOffset, + "the file is not long enough to hold all of our docs"); + } else { + this->docStoreOffset = 0; + this->_size = (int32_t) (indexStream->length() >> 3); + } + + //_size = (int32_t)indexStream->length()/8; + + numTotalDocs = (int32_t) (indexStream->length() >> 3); + success = true; + } _CLFINALLY ({ + // With lock-less commits, it's entirely possible (and + // fine) to hit a FileNotFound exception above. In + // this case, we want to explicitly close any subset + // of things that were opened so that we don't have to + // wait for a GC to do so. + if (!success) { + close(); + } + }); +} + +FieldsReader::~FieldsReader(){ +//Func - Destructor +//Pre - true +//Post - The instance has been destroyed + + close(); +} + +void FieldsReader::ensureOpen() { + if (closed) { + _CLTHROWA(CL_ERR_IllegalState, "this FieldsReader is closed"); + } +} + +void FieldsReader::close() { + if (!closed) { + if (fieldsStream){ + fieldsStream->close(); + _CLDELETE(fieldsStream); + } + if (cloneableFieldsStream){ + cloneableFieldsStream->close(); + _CLDELETE(cloneableFieldsStream); + } + if(indexStream){ + indexStream->close(); + _CLDELETE(indexStream); + } + /* + CL_NS(store)::IndexInput* localFieldsStream = fieldsStreamTL.get(); + if (localFieldsStream != NULL) { + localFieldsStream->close(); + fieldsStreamTL->set(NULL); + }*/ + closed = true; + } +} + +int32_t FieldsReader::size() const{ + return _size; +} + +bool FieldsReader::doc(int32_t n, Document& doc, const CL_NS(document)::FieldSelector* fieldSelector) { + if ( (n + docStoreOffset) * 8L > indexStream->length() ) + return false; + indexStream->seek((n + docStoreOffset) * 8L); + int64_t position = indexStream->readLong(); + fieldsStream->seek(position); + + int32_t numFields = fieldsStream->readVInt(); + for (int32_t i = 0; i < numFields; i++) { + const int32_t fieldNumber = fieldsStream->readVInt(); + FieldInfo* fi = fieldInfos->fieldInfo(fieldNumber); + if ( fi == NULL ) _CLTHROWA(CL_ERR_IO, "Field stream is invalid"); + + FieldSelector::FieldSelectorResult acceptField = (fieldSelector == NULL) ? FieldSelector::LOAD : fieldSelector->accept(fi->name); + + uint8_t bits = fieldsStream->readByte(); + CND_CONDITION(bits <= FieldsWriter::FIELD_IS_COMPRESSED + FieldsWriter::FIELD_IS_TOKENIZED + FieldsWriter::FIELD_IS_BINARY, + "invalid field bits"); + + const bool compressed = (bits & FieldsWriter::FIELD_IS_COMPRESSED) != 0; + const bool tokenize = (bits & FieldsWriter::FIELD_IS_TOKENIZED) != 0; + const bool binary = (bits & FieldsWriter::FIELD_IS_BINARY) != 0; + + //TODO: Find an alternative approach here if this list continues to grow beyond the + //list of 5 or 6 currently here. See Lucene 762 for discussion + if (acceptField == FieldSelector::LOAD) { + addField(doc, fi, binary, compressed, tokenize); + } + else if (acceptField == FieldSelector::LOAD_FOR_MERGE) { + addFieldForMerge(doc, fi, binary, compressed, tokenize); + } + else if (acceptField == FieldSelector::LOAD_AND_BREAK){ + addField(doc, fi, binary, compressed, tokenize); + break;//Get out of this loop + } + else if (acceptField == FieldSelector::LAZY_LOAD) { + addFieldLazy(doc, fi, binary, compressed, tokenize); + } + else if (acceptField == FieldSelector::SIZE){ + skipField(binary, compressed, addFieldSize(doc, fi, binary, compressed)); + } + else if (acceptField == FieldSelector::SIZE_AND_BREAK){ + addFieldSize(doc, fi, binary, compressed); + break; + }else { + skipField(binary, compressed); + } + } + return true; +} + +CL_NS(store)::IndexInput* FieldsReader::rawDocs(int32_t* lengths, const int32_t startDocID, const int32_t numDocs) { + indexStream->seek((docStoreOffset+startDocID) * 8L); + int64_t startOffset = indexStream->readLong(); + int64_t lastOffset = startOffset; + int32_t count = 0; + while (count < numDocs) { + int64_t offset; + const int32_t docID = docStoreOffset + startDocID + count + 1; + CND_CONDITION( docID <= numTotalDocs, "invalid docID"); + if (docID < numTotalDocs) + offset = indexStream->readLong(); + else + offset = fieldsStream->length(); + lengths[count++] = static_cast(offset-lastOffset); + lastOffset = offset; + } + + fieldsStream->seek(startOffset); + + return fieldsStream; +} + +void FieldsReader::skipField(const bool binary, const bool compressed) { + skipField(binary, compressed, fieldsStream->readVInt()); +} + +void FieldsReader::skipField(const bool binary, const bool compressed, const int32_t toRead) { + if (binary || compressed) { + int64_t pointer = fieldsStream->getFilePointer(); + fieldsStream->seek(pointer + toRead); + } else { + //We need to skip chars. This will slow us down, but still better + fieldsStream->skipChars(toRead); + } +} + +void FieldsReader::addFieldLazy(CL_NS(document)::Document& doc, const FieldInfo* fi, const bool binary, + const bool compressed, const bool tokenize) { + if (binary) { + int32_t toRead = fieldsStream->readVInt(); + int64_t pointer = fieldsStream->getFilePointer(); + if (compressed) { + doc.add(*_CLNEW LazyField(this, fi->name, Field::STORE_COMPRESS, toRead, pointer)); + } else { + doc.add(*_CLNEW LazyField(this, fi->name, Field::STORE_YES, toRead, pointer)); + } + //Need to move the pointer ahead by toRead positions + fieldsStream->seek(pointer + toRead); + } else { + LazyField* f = NULL; + if (compressed) { + int32_t toRead = fieldsStream->readVInt(); + int64_t pointer = fieldsStream->getFilePointer(); + f = _CLNEW LazyField(this, fi->name, Field::STORE_COMPRESS, toRead, pointer); + //skip over the part that we aren't loading + fieldsStream->seek(pointer + toRead); + f->setOmitNorms(fi->omitNorms); + } else { + int32_t length = fieldsStream->readVInt(); + int64_t pointer = fieldsStream->getFilePointer(); + //Skip ahead of where we are by the length of what is stored + fieldsStream->skipChars(length); + f = _CLNEW LazyField(this, fi->name, Field::STORE_YES | getIndexType(fi, tokenize) | getTermVectorType(fi), length, pointer); + f->setOmitNorms(fi->omitNorms); + } + doc.add(*f); + } +} + +// in merge mode we don't uncompress the data of a compressed field +void FieldsReader::addFieldForMerge(CL_NS(document)::Document& doc, const FieldInfo* fi, const bool binary, const bool compressed, const bool tokenize) { + void* data; + Field::ValueType v; + + if ( binary || compressed) { + int32_t toRead = fieldsStream->readVInt(); + CL_NS(util)::ValueArray * b = new CL_NS(util)::ValueArray(toRead); + fieldsStream->readBytes(b->values,toRead); + v = Field::VALUE_BINARY; + data = b; //.takeArray(); + } else { + data = fieldsStream->readString(); + v = Field::VALUE_STRING; + } + + doc.add(*_CLNEW FieldForMerge(data, v, fi, binary, compressed, tokenize)); +} + +void FieldsReader::addField(CL_NS(document)::Document& doc, const FieldInfo* fi, const bool binary, const bool compressed, const bool tokenize) { + + //we have a binary stored field, and it may be compressed + if (binary) { + const int32_t toRead = fieldsStream->readVInt(); + ValueArray* b = _CLNEW ValueArray(toRead); + fieldsStream->readBytes(b->values,toRead); + if (compressed) { + // we still do not support compressed fields + ValueArray* data = _CLNEW ValueArray; + try{ + uncompress(*b, *data); + }catch(CLuceneError& err){ + _CLDELETE(data); + _CLDELETE(b); + throw err; + } + _CLDELETE(b); + doc.add(* _CLNEW Field(fi->name, data, Field::STORE_COMPRESS, false)); + }else{ + doc.add(* _CLNEW Field(fi->name, b, Field::STORE_YES, false)); + } + //no need to clean up, Field consumes b + } else { + uint8_t bits = 0; + bits |= getIndexType(fi, tokenize); + bits |= getTermVectorType(fi); + + Field* f = NULL; + if (compressed) { + bits |= Field::STORE_COMPRESS; + const int32_t toRead = fieldsStream->readVInt(); + ValueArray* b = _CLNEW ValueArray(toRead); + fieldsStream->readBytes(b->values,toRead); + ValueArray data; + try{ + uncompress(*b, data); + }_CLFINALLY( _CLDELETE(b) ) + +#ifndef _ASCII + //convert to utf8 + TCHAR* result = _CL_NEWARRAY(TCHAR, data.length); + size_t l = lucene_utf8towcs(result, (const char*)data.values, data.length); + result[l] = 0; + + //if we were a bit too pesimistic with the size, then shrink the memory... + if ( l < data.length/2 ){ + TCHAR* tmp = result; + result = STRDUP_TtoT(result); + _CLDELETE_LCARRAY(tmp); + } + + f = _CLNEW Field(fi->name, // field name + result, // uncompress the value and add as string + bits, false); +#else + f = _CLNEW Field(fi->name, // field name + reinterpret_cast(data.values), // uncompress the value and add as string + bits, false); +#endif + f->setOmitNorms(fi->omitNorms); + } else { + bits |= Field::STORE_YES; + TCHAR* str = fieldsStream->readString(); + f = _CLNEW Field(fi->name, // name + str, // read value + bits, false); + f->setOmitNorms(fi->omitNorms); + } + doc.add(*f); + } +} + +int32_t FieldsReader::addFieldSize(CL_NS(document)::Document& doc, const FieldInfo* fi, const bool binary, const bool compressed) { + const int32_t size = fieldsStream->readVInt(); + const uint32_t bytesize = binary || compressed ? size : 2*size; + ValueArray* sizebytes = _CLNEW ValueArray(4); + sizebytes->values[0] = (uint8_t) (bytesize>>24); + sizebytes->values[1] = (uint8_t) (bytesize>>16); + sizebytes->values[2] = (uint8_t) (bytesize>> 8); + sizebytes->values[3] = (uint8_t) bytesize ; + doc.add(*_CLNEW Field(fi->name, sizebytes, Field::STORE_YES, false)); + return size; +} + +CL_NS(document)::Field::TermVector FieldsReader::getTermVectorType(const FieldInfo* fi) { + if (fi->storeTermVector) { + if (fi->storeOffsetWithTermVector) { + if (fi->storePositionWithTermVector) { + return Field::TERMVECTOR_WITH_POSITIONS_OFFSETS; + } else { + return Field::TERMVECTOR_WITH_OFFSETS; + } + } else if (fi->storePositionWithTermVector) { + return Field::TERMVECTOR_WITH_POSITIONS; + } else { + return Field::TERMVECTOR_YES; + } + } else { + return Field::TERMVECTOR_NO ; + } +} + +CL_NS(document)::Field::Index FieldsReader::getIndexType(const FieldInfo* fi, const bool tokenize) { + if (fi->isIndexed && tokenize) + return Field::INDEX_TOKENIZED; + else if (fi->isIndexed && !tokenize) + return Field::INDEX_UNTOKENIZED; + else + return Field::INDEX_NO; +} + + +FieldsReader::LazyField::LazyField(FieldsReader* _parent, const TCHAR* _name, + int config, const int32_t _toRead, const int64_t _pointer) +: Field(_name, config), parent(_parent) { + // todo: need to allow for auto setting Field::INDEX_NO | Field::TERMVECTOR_NO so only Store is required + this->toRead = _toRead; + this->pointer = _pointer; + lazy = true; +} +FieldsReader::LazyField::~LazyField(){ +} + +CL_NS(store)::IndexInput* FieldsReader::LazyField::getFieldStream(){ + CL_NS(store)::IndexInput* localFieldsStream = parent->fieldsStreamTL.get(); + if (localFieldsStream == NULL) { + localFieldsStream = parent->cloneableFieldsStream->clone(); + parent->fieldsStreamTL.set(localFieldsStream); + } + return localFieldsStream; +} + +const ValueArray* FieldsReader::LazyField::binaryValue(){ + parent->ensureOpen(); + if (fieldsData == NULL) { + ValueArray* b = _CLNEW ValueArray(toRead); + CL_NS(store)::IndexInput* localFieldsStream = getFieldStream(); + + //Throw this IO Exception since IndexREader.document does so anyway, so probably not that big of a change for people + //since they are already handling this exception when getting the document + try { + localFieldsStream->seek(pointer); + localFieldsStream->readBytes(b->values, toRead); + if (isCompressed() == true) { + ValueArray* data = _CLNEW ValueArray; + try{ + uncompress(*b, *data); + }catch (CLuceneError& err){ + _CLDELETE(data); + _CLDELETE(b); + throw err; + } + _CLDELETE(b); + fieldsData = data; + } else { + fieldsData = b; + } + valueType = VALUE_BINARY; + + }catch(CLuceneError& err){ + if ( err.number() != CL_ERR_IO ) throw err; + _CLTHROWA(CL_ERR_FieldReader, err.what()); + } + + } + return static_cast*>(fieldsData); +} + +CL_NS(util)::Reader* FieldsReader::LazyField::readerValue(){ + parent->ensureOpen(); + return (valueType & VALUE_READER) ? static_cast(fieldsData) : NULL; +} + + +CL_NS(analysis)::TokenStream* FieldsReader::LazyField::tokenStreamValue(){ + parent->ensureOpen(); + return (valueType & VALUE_TOKENSTREAM) ? static_cast(fieldsData) : NULL; +} + + +/** The value of the field as a String, or null. If null, the Reader value, +* binary value, or TokenStream value is used. Exactly one of stringValue(), +* readerValue(), binaryValue(), and tokenStreamValue() must be set. */ +const TCHAR* FieldsReader::LazyField::stringValue() { + parent->ensureOpen(); + if (fieldsData == NULL) { + CL_NS(store)::IndexInput* localFieldsStream = getFieldStream(); + localFieldsStream->seek(pointer); + if (isCompressed()) { + ValueArray b(toRead); + ValueArray uncompressed; + localFieldsStream->readBytes(b.values, toRead); + _resetValue(); + uncompress(b, uncompressed); //no need to catch error, memory all in frame + +#ifndef _ASCII + TCHAR* str = _CL_NEWARRAY(TCHAR, uncompressed.length); + size_t l = lucene_utf8towcs(str, (const char*)uncompressed.values, uncompressed.length); + str[l] = 0; + + if ( l < uncompressed.length/2 ){ + //too pesimistic with size... + fieldsData = STRDUP_TtoT(str); + _CLDELETE_LCARRAY(str); + }else{ + fieldsData = str; + } +#else + fieldsData = uncompressed.values; +#endif + } else { + //read in chars b/c we already know the length we need to read + TCHAR* chars = _CL_NEWARRAY(TCHAR, toRead+1); + if( ! chars ) + _CLTHROWA(CL_ERR_OutOfMemory, "IndexInput::readString"); + + localFieldsStream->readChars(chars, 0, toRead); + chars[toRead] = _T('\0'); + _resetValue(); + fieldsData = chars; + } + valueType = VALUE_STRING; + } + return static_cast(fieldsData); //instanceof String ? (String) fieldsData : null; +} + +int64_t FieldsReader::LazyField::getPointer() const { + parent->ensureOpen(); + return pointer; +} + +void FieldsReader::LazyField::setPointer(const int64_t _pointer) { + parent->ensureOpen(); + this->pointer = _pointer; +} + +int32_t FieldsReader::LazyField::getToRead() const { + parent->ensureOpen(); + return toRead; +} + +void FieldsReader::LazyField::setToRead(const int32_t _toRead) { + parent->ensureOpen(); + this->toRead = _toRead; +} + +const TCHAR* FieldsReader::FieldForMerge::stringValue() const { + return (valueType & VALUE_STRING) ? static_cast(fieldsData) : NULL; +} + +CL_NS(util)::Reader* FieldsReader::FieldForMerge::readerValue() const { + // not needed for merge + return NULL; +} + +const CL_NS(util)::ValueArray* FieldsReader::FieldForMerge::binaryValue(){ + return (valueType & VALUE_BINARY) ? static_cast*>(fieldsData) : NULL; +} + +CL_NS(analysis)::TokenStream* FieldsReader::FieldForMerge::tokenStreamValue() const { + // not needed for merge + return NULL; +} + +FieldsReader::FieldForMerge::FieldForMerge(void* _value, ValueType _type, const FieldInfo* fi, const bool binary, const bool compressed, const bool tokenize) : Field(fi->name, 0) { + + uint32_t bits = STORE_YES; + + this->fieldsData = _value; + this->valueType = _type; + + if (tokenize) bits |= INDEX_TOKENIZED; + if (compressed) bits |= STORE_COMPRESS; + + if (fi->isIndexed && !tokenize) bits |= INDEX_UNTOKENIZED; + if (fi->omitNorms) bits |= INDEX_NONORMS; + if (fi->storeOffsetWithTermVector) bits |= TERMVECTOR_WITH_OFFSETS; + if (fi->storePositionWithTermVector) bits |= TERMVECTOR_WITH_POSITIONS; + if (fi->storeTermVector) bits |= TERMVECTOR_YES; + + setConfig(bits); +} +FieldsReader::FieldForMerge::~FieldForMerge(){ +} +const char* FieldsReader::FieldForMerge::getClassName(){ + return "FieldsReader::FieldForMerge"; +} +const char* FieldsReader::FieldForMerge::getObjectName() const{ + return getClassName(); +} + +void FieldsReader::uncompress(const CL_NS(util)::ValueArray& input, CL_NS(util)::ValueArray& output){ + stringstream out; + string err; + if ( ! Misc::inflate(input.values, input.length, out, err) ){ + _CLTHROWA(CL_ERR_IO, err.c_str()); + } + + // get length of file: + out.seekg (0, ios::end); + size_t length = out.tellg(); + out.seekg (0, ios::beg); + + output.resize(length+1); + out.read((char*)output.values,length); + output.values[length] = 0;//null-terminate in case we want to use it as utf8 +} + +CL_NS_END diff --git a/Pods/BRCLucene/src/core/CLucene/index/FieldsWriter.cpp b/Pods/BRCLucene/src/core/CLucene/index/FieldsWriter.cpp new file mode 100644 index 0000000..9cf09ab --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/index/FieldsWriter.cpp @@ -0,0 +1,269 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "_FieldsWriter.h" + +//#include "CLucene/util/VoidMap.h" +#include "CLucene/util/CLStreams.h" +#include "CLucene/util/Misc.h" +#include "CLucene/store/Directory.h" +#include "CLucene/store/_RAMDirectory.h" +#include "CLucene/store/IndexOutput.h" +#include "CLucene/document/Document.h" +#include "CLucene/document/Field.h" +#include "_FieldInfos.h" +#include "_FieldsReader.h" +#include + +CL_NS_USE(store) +CL_NS_USE(util) +CL_NS_USE(document) +CL_NS_DEF(index) + +FieldsWriter::FieldsWriter(Directory* d, const char* 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 != NULL,"segment is NULL"); + + fieldsStream = d->createOutput ( Misc::segmentname(segment,".fdt").c_str() ); + + CND_CONDITION(fieldsStream != NULL,"fieldsStream is NULL"); + + indexStream = d->createOutput( Misc::segmentname(segment,".fdx").c_str() ); + + CND_CONDITION(indexStream != NULL,"indexStream is NULL"); + + doClose = true; +} + +FieldsWriter::FieldsWriter(CL_NS(store)::IndexOutput* fdx, CL_NS(store)::IndexOutput* fdt, FieldInfos* fn): + fieldInfos(fn) +{ + fieldsStream = fdt; + CND_CONDITION(fieldsStream != NULL,"fieldsStream is NULL"); + indexStream = fdx; + CND_CONDITION(fieldsStream != NULL,"fieldsStream is NULL"); + doClose = false; +} + +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 + + if (! doClose ) + return; + + //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; + { + const Document::FieldsType& fields = *doc->getFields(); + for ( Document::FieldsType::const_iterator itr = fields.begin() ; itr != fields.end() ; itr++ ){ + Field* field = *itr; + if (field->isStored()) + storedCount++; + } + fieldsStream->writeVInt(storedCount); + } + { + const Document::FieldsType& fields = *doc->getFields(); + for ( Document::FieldsType::const_iterator itr = fields.begin() ; itr != fields.end() ; itr++ ){ + Field* field = *itr; + if (field->isStored()) { + writeField(fieldInfos->fieldInfo(field->name()), field); + } + } + } +} + +void FieldsWriter::writeField(FieldInfo* fi, CL_NS(document)::Field* field) +{ + // if the field as an instanceof FieldsReader.FieldForMerge, we're in merge mode + // and field.binaryValue() already returns the compressed value for a field + // with isCompressed()==true, so we disable compression in that case + bool disableCompression = (field->instanceOf(FieldsReader::FieldForMerge::getClassName())); + + fieldsStream->writeVInt(fi->number); + 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() ){ + // compression is enabled for the current field + CL_NS(util)::ValueArray dataB; + const CL_NS(util)::ValueArray* data = &dataB; + + if (disableCompression) { + // optimized case for merging, the data + // is already compressed + data = field->binaryValue(); + } else { + // check if it is a binary field + if (field->isBinary()) { + compress(*field->binaryValue(), dataB); + }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(); + + int32_t sz = r->size(); + if ( sz < 0 ) + sz = 10000000; //todo: we should warn the developer here.... + + //read the entire string + const TCHAR* rv = NULL; + int64_t rl = r->read(rv, sz, 1); + if ( rl > LUCENE_INT32_MAX_SHOULDBE ) + _CLTHROWA(CL_ERR_Runtime,"Field length too long"); + else if ( rl < 0 ) + rl = 0; + + string str = lucene_wcstoutf8string(rv, rl); + CL_NS(util)::ValueArray utfstr; + utfstr.length = str.length(); + utfstr.values = (uint8_t*)str.c_str(); + compress(utfstr, dataB); + utfstr.values = NULL; + }else if ( field->stringValue() != NULL ){ + string str = lucene_wcstoutf8string(field->stringValue(), LUCENE_INT32_MAX_SHOULDBE); + CL_NS(util)::ValueArray utfstr; + utfstr.length = str.length(); + utfstr.values = (uint8_t*)str.c_str(); + compress(utfstr, dataB); + utfstr.values = NULL; + } + } + fieldsStream->writeVInt(data->length); + fieldsStream->writeBytes(data->values, data->length); + + }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()) { + const CL_NS(util)::ValueArray* data = field->binaryValue(); + fieldsStream->writeVInt(data->length); + fieldsStream->writeBytes(data->values, data->length); + + }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(); + + int32_t sz = r->size(); + if ( sz < 0 ) + sz = 10000000; //todo: we should warn the developer here.... + + //read the entire string + const TCHAR* rv; + int64_t rl = r->read(rv, sz, 1); + 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"); + } +} + +void FieldsWriter::flushDocument(int32_t numStoredFields, CL_NS(store)::RAMOutputStream* buffer) { + indexStream->writeLong(fieldsStream->getFilePointer()); + fieldsStream->writeVInt(numStoredFields); + buffer->writeTo(fieldsStream); +} + +void FieldsWriter::flush() { + indexStream->flush(); + fieldsStream->flush(); +} + +void FieldsWriter::addRawDocuments(CL_NS(store)::IndexInput* stream, const int32_t* lengths, const int32_t numDocs) { + int64_t position = fieldsStream->getFilePointer(); + const int64_t start = position; + for(int32_t i=0;iwriteLong(position); + position += lengths[i]; + } + fieldsStream->copyBytes(stream, position-start); + CND_CONDITION(fieldsStream->getFilePointer() == position,"fieldsStream->getFilePointer() != position"); +} + +void FieldsWriter::compress(const CL_NS(util)::ValueArray& input, CL_NS(util)::ValueArray& output){ + stringstream out; + string err; + if ( ! Misc::deflate(input.values, input.length, out, err) ){ + _CLTHROWA(CL_ERR_IO, err.c_str()); + } + + // get length of file: + out.seekg (0, ios::end); + size_t length = out.tellg(); + out.seekg (0, ios::beg); + + output.resize(length); + out.read((char*)output.values,length); +} + +CL_NS_END diff --git a/Pods/BRCLucene/src/core/CLucene/index/IndexDeletionPolicy.cpp b/Pods/BRCLucene/src/core/CLucene/index/IndexDeletionPolicy.cpp new file mode 100644 index 0000000..49007ee --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/index/IndexDeletionPolicy.cpp @@ -0,0 +1,140 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "IndexDeletionPolicy.h" + +CL_NS_DEF(index) + +IndexDeletionPolicy::~IndexDeletionPolicy(){ +} +IndexCommitPoint::~IndexCommitPoint(){ +} + + + +KeepOnlyLastCommitDeletionPolicy::~KeepOnlyLastCommitDeletionPolicy(){ +} + +void KeepOnlyLastCommitDeletionPolicy::onInit(std::vector& commits) { + // Note that commits.size() should normally be 1: + onCommit(commits); +} + +void KeepOnlyLastCommitDeletionPolicy::onCommit(std::vector& commits) { + // Note that commits.size() should normally be 2 (if not + // called by onInit above): + size_t size = commits.size(); + for(size_t i=0;ideleteCommitPoint(); + } +} + +const char* KeepOnlyLastCommitDeletionPolicy::getClassName(){ + return "KeepOnlyLastCommitDeletionPolicy"; +} +const char* KeepOnlyLastCommitDeletionPolicy::getObjectName() const{ + return getClassName(); +} + + + +/** A {@link IndexDeletionPolicy} that wraps around any other + * {@link IndexDeletionPolicy} and adds the ability to hold and + * later release a single "snapshot" of an index. While + * the snapshot is held, the {@link IndexWriter} will not + * remove any files associated with it even if the index is + * otherwise being actively, arbitrarily changed. Because + * we wrap another arbitrary {@link IndexDeletionPolicy}, this + * gives you the freedom to continue using whatever {@link + * IndexDeletionPolicy} you would normally want to use with your + * index. + +class SnapshotDeletionPolicy: public IndexDeletionPolicy { +private: + IndexCommitPoint lastCommit; + IndexDeletionPolicy primary; + IndexCommitPoint snapshot; + DEFINE_MUTEX(SnapshotDeletionPolicy_LOCK) + + class MyCommitPoint: public IndexCommitPoint { + IndexCommitPoint cp; + public: + MyCommitPoint(IndexCommitPoint cp) { + this.cp = cp; + } + String getSegmentsFileName() { + return cp.getSegmentsFileName(); + } + Collection getFileNames() throws IOException { + return cp.getFileNames(); + } + void deleteCommitPoint() { + synchronized(SnapshotDeletionPolicy_LOCK) { + // Suppress the delete request if this commit point is + // our current snapshot. + if (snapshot != cp) + cp->deleteCommitPoint(); + } + } + } + + List wrapCommits(List commits) { + final int count = commits.size(); + List myCommits = new ArrayList(count); + for(int i=0;i +#include "CLucene/util/Equators.h" + +CL_NS_DEF(index) + + +class CLUCENE_EXPORT IndexCommitPoint { +public: + virtual ~IndexCommitPoint(); + /** + * Get the segments file (segments_N) associated + * with this commit point. + */ + virtual std::string getSegmentsFileName() = 0; + + /** + * Returns all index files referenced by this commit point. + */ + virtual const std::vector& getFileNames() = 0; + + /** + * Delete this commit point. + *

+ * Upon calling this, the writer is notified that this commit + * point should be deleted. + *

+ * Decision that a commit-point should be deleted is taken by the {@link IndexDeletionPolicy} in effect + * and therefore this should only be called by its {@link IndexDeletionPolicy#onInit onInit()} or + * {@link IndexDeletionPolicy#onCommit onCommit()} methods. + */ + virtual void deleteCommitPoint() = 0; +}; + +/** + *

Expert: policy for deletion of stale {@link IndexCommitPoint index commits}. + * + *

Implement this interface, and pass it to one + * of the {@link IndexWriter} or {@link IndexReader} + * constructors, to customize when older + * {@link IndexCommitPoint point-in-time commits} + * are deleted from the index directory. The default deletion policy + * is {@link KeepOnlyLastCommitDeletionPolicy}, which always + * removes old commits as soon as a new commit is done (this + * matches the behavior before 2.2).

+ * + *

One expected use case for this (and the reason why it + * was first created) is to work around problems with an + * index directory accessed via filesystems like NFS because + * NFS does not provide the "delete on last close" semantics + * that Lucene's "point in time" search normally relies on. + * By implementing a custom deletion policy, such as "a + * commit is only removed once it has been stale for more + * than X minutes", you can give your readers time to + * refresh to the new commit before {@link IndexWriter} + * removes the old commits. Note that doing so will + * increase the storage requirements of the index. See LUCENE-710 + * for details.

+ */ +class CLUCENE_EXPORT IndexDeletionPolicy: public CL_NS(util)::NamedObject{ +public: + virtual ~IndexDeletionPolicy(); + + /** + *

This is called once when a writer is first + * instantiated to give the policy a chance to remove old + * commit points.

+ * + *

The writer locates all index commits present in the + * index directory and calls this method. The policy may + * choose to delete some of the commit points, doing so by + * calling method {@link IndexCommitPoint#delete delete()} + * of {@link IndexCommitPoint}.

+ * + *

Note: the last CommitPoint is the most recent one, + * i.e. the "front index state". Be careful not to delete it, + * unless you know for sure what you are doing, and unless + * you can afford to lose the index content while doing that. + * + * @param commits List of current + * {@link IndexCommitPoint point-in-time commits}, + * sorted by age (the 0th one is the oldest commit). + */ + virtual void onInit(std::vector& commits) = 0; + + /** + *

This is called each time the writer completed a commit. + * This gives the policy a chance to remove old commit points + * with each commit.

+ * + *

The policy may now choose to delete old commit points + * by calling method {@link IndexCommitPoint#delete delete()} + * of {@link IndexCommitPoint}.

+ * + *

If writer has autoCommit = true then + * this method will in general be called many times during + * one instance of {@link IndexWriter}. If + * autoCommit = false then this method is + * only called once when {@link IndexWriter#close} is + * called, or not at all if the {@link IndexWriter#abort} + * is called. + * + *

Note: the last CommitPoint is the most recent one, + * i.e. the "front index state". Be careful not to delete it, + * unless you know for sure what you are doing, and unless + * you can afford to lose the index content while doing that. + * + * @param commits List of {@link IndexCommitPoint}, + * sorted by age (the 0th one is the oldest commit). + */ + virtual void onCommit(std::vector& commits) = 0; +}; + + + + +/** + * This {@link IndexDeletionPolicy} implementation that + * keeps only the most recent commit and immediately removes + * all prior commits after a new commit is done. This is + * the default deletion policy. + */ + +class CLUCENE_EXPORT KeepOnlyLastCommitDeletionPolicy: public IndexDeletionPolicy { +public: + virtual ~KeepOnlyLastCommitDeletionPolicy(); + /** + * Deletes all commits except the most recent one. + */ + void onInit(std::vector& commits); + + /** + * Deletes all commits except the most recent one. + */ + void onCommit(std::vector& commits); + + static const char* getClassName(); + const char* getObjectName() const; +}; + +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/index/IndexFileDeleter.cpp b/Pods/BRCLucene/src/core/CLucene/index/IndexFileDeleter.cpp new file mode 100644 index 0000000..6e092c2 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/index/IndexFileDeleter.cpp @@ -0,0 +1,530 @@ +#include "CLucene/_ApiHeader.h" +#include "_IndexFileDeleter.h" +#include "_IndexFileNameFilter.h" +#include "_DocumentsWriter.h" +#include "_SegmentHeader.h" +#include "CLucene/store/Directory.h" +#include "CLucene/LuceneThreads.h" +#include +#include +#include + +CL_NS_USE(store) +CL_NS_USE(util) +CL_NS_DEF(index) + +bool IndexFileDeleter::VERBOSE_REF_COUNTS = false; + +IndexFileDeleter::CommitPoint::CommitPoint(IndexFileDeleter* _this, SegmentInfos* segmentInfos){ + this->_this = _this; + this->deleted = false; + this->gen = 0; + segmentsFileName = segmentInfos->getCurrentSegmentFileName(); + int32_t size = segmentInfos->size(); + files.push_back(segmentsFileName); + gen = segmentInfos->getGeneration(); + for(int32_t i=0;iinfo(i); + if (segmentInfo->dir == _this->directory) { + const vector& ff = segmentInfo->files(); + files.insert(files.end(),ff.begin(), ff.end()); + } + } + +} +IndexFileDeleter::CommitPoint::~CommitPoint(){ +} + +/** +* Get the segments_N file for this commit point32_t. +*/ +std::string IndexFileDeleter::CommitPoint::getSegmentsFileName() { + return segmentsFileName; +} +bool IndexFileDeleter::CommitPoint::sort(IndexCommitPoint* elem1, IndexCommitPoint* elem2){ + if (((CommitPoint*)elem1)->gen < ((CommitPoint*)elem2)->gen) + return true; + return false; +} + +const std::vector& IndexFileDeleter::CommitPoint::getFileNames() { + return files; +} + +/** +* Called only be the deletion policy, to remove this +* commit point32_t from the index. +*/ +void IndexFileDeleter::CommitPoint::deleteCommitPoint() { + if (!deleted) { + deleted = true; + _this->commitsToDelete.push_back(this); + } +} + +const char* IndexFileDeleter::CommitPoint::getClassName(){ + return "IndexFileDeleter::CommitPoint"; +} +const char* IndexFileDeleter::CommitPoint::getObjectName() const{ + return getClassName(); +} +int32_t IndexFileDeleter::CommitPoint::compareTo(NamedObject* obj) { + if ( obj->getObjectName() != CommitPoint::getClassName() ) + return -1; + + CommitPoint* commit = (CommitPoint*) obj; + if (gen < commit->gen) { + return -1; + } else if (gen > commit->gen) { + return 1; + } else { + return 0; + } +} + +void IndexFileDeleter::setInfoStream(std::ostream* infoStream) { + this->infoStream = infoStream; + if (infoStream != NULL){ + string msg = string("setInfoStream deletionPolicy=") + policy->getObjectName(); + message( msg ); + } +} + +void IndexFileDeleter::message(string message) { + (*infoStream) << string("IFD [") << Misc::toString( _LUCENE_CURRTHREADID ) << string("]: ") << message << string("\n"); +} + + +IndexFileDeleter::~IndexFileDeleter(){ + _CLDELETE(policy); + commitsToDelete.clear(); + commits.clear(); + refCounts.clear(); +} +IndexFileDeleter::IndexFileDeleter(Directory* directory, IndexDeletionPolicy* policy, + SegmentInfos* segmentInfos, std::ostream* infoStream, DocumentsWriter* docWriter): + refCounts( RefCountsType(true,true) ), commits(CommitsType(true)) +{ + this->docWriter = docWriter; + this->infoStream = infoStream; + + if (infoStream != NULL) + message( string("init: current segments file is \"") + segmentInfos->getCurrentSegmentFileName() + "\"; deletionPolicy=" + policy->getObjectName()); + + this->policy = policy; + this->directory = directory; + CommitPoint* currentCommitPoint = NULL; + + // First pass: walk the files and initialize our ref + // counts: + int64_t currentGen = segmentInfos->getGeneration(); + const IndexFileNameFilter* filter = IndexFileNameFilter::getFilter(); + + vector files; + if ( !directory->list(&files) ) + _CLTHROWA(CL_ERR_IO, (string("cannot read directory ") + directory->toString() + ": list() returned NULL").c_str()); + + + for(size_t i=0;iaccept(NULL, fileName.c_str()) && fileName.compare(IndexFileNames::SEGMENTS_GEN) != 0) { + + // Add this file to refCounts with initial count 0: + getRefCount(fileName.c_str()); + + if ( strncmp(fileName.c_str(), IndexFileNames::SEGMENTS, strlen(IndexFileNames::SEGMENTS)) == 0 ) { + + // This is a commit (segments or segments_N), and + // it's valid (<= the max gen). Load it, then + // incref all files it refers to: + if (SegmentInfos::generationFromSegmentsFileName(fileName.c_str()) <= currentGen) { + if (infoStream != NULL) { + message("init: load commit \"" + fileName + "\""); + } + SegmentInfos sis; + bool failed = false; + try { + sis.read(directory, fileName.c_str()); + } catch (CLuceneError& e) { + if ( e.number() != CL_ERR_IO ){ + throw e; + } + // LUCENE-948: on NFS (and maybe others), if + // you have writers switching back and forth + // between machines, it's very likely that the + // dir listing will be stale and will claim a + // file segments_X exists when in fact it + // doesn't. So, we catch this and handle it + // as if the file does not exist + if (infoStream != NULL) { + message("init: hit FileNotFoundException when loading commit \"" + fileName + "\"; skipping this commit point32_t"); + } + failed = true; + } + if (!failed) { + CommitPoint* commitPoint = _CLNEW CommitPoint(this,&sis); + if (sis.getGeneration() == segmentInfos->getGeneration()) { + currentCommitPoint = commitPoint; + } + commits.push_back(commitPoint); + incRef(&sis, true); + } + } + } + } + } + + if (currentCommitPoint == NULL) { + // We did not in fact see the segments_N file + // corresponding to the segmentInfos that was passed + // in. Yet, it must exist, because our caller holds + // the write lock. This can happen when the directory + // listing was stale (eg when index accessed via NFS + // client with stale directory listing cache). So we + // try now to explicitly open this commit point32_t: + SegmentInfos sis; + try { + sis.read(directory, segmentInfos->getCurrentSegmentFileName().c_str()); + } catch (CLuceneError& e) { + if ( e.number() == CL_ERR_IO ){ + _CLTHROWA(CL_ERR_CorruptIndex, "failed to locate current segments_N file"); + } + } + if (infoStream != NULL) + message("forced open of current segments file " + segmentInfos->getCurrentSegmentFileName()); + currentCommitPoint = _CLNEW CommitPoint(this,&sis); + commits.push_back(currentCommitPoint); + incRef(&sis, true); + } + + // We keep commits list in sorted order (oldest to newest): + std::sort(commits.begin(), commits.end(), CommitPoint::sort); + + // Now delete anything with ref count at 0. These are + // presumably abandoned files eg due to crash of + // IndexWriter. + RefCountsType::iterator it = refCounts.begin(); + while(it != refCounts.end()) { + char* fileName = it->first; + RefCount* rc = it->second; + if (0 == rc->count) { + if (infoStream != NULL) { + message( string("init: removing unreferenced file \"") + fileName + "\""); + } + deleteFile(fileName); + } + it++; + } + + // Finally, give policy a chance to remove things on + // startup: + policy->onInit(commits); + + // It's OK for the onInit to remove the current commit + // point; we just have to checkpoint our in-memory + // SegmentInfos to protect those files that it uses: + if (currentCommitPoint->deleted) { + checkpoint(segmentInfos, false); + } + + deleteCommits(); +} + +/** +* Remove the CommitPoints in the commitsToDelete List by +* DecRef'ing all files from each segmentInfos-> +*/ +void IndexFileDeleter::deleteCommits() { + + int32_t size = commitsToDelete.size(); + + if (size > 0) { + + // First decref all files that had been referred to by + // the now-deleted commits: + for(int32_t i=0;igetSegmentsFileName() + "\""); + } + decRef(commit->files); + } + commitsToDelete.clear(); + + // Now compact commits to remove deleted ones (preserving the sort): + size = commits.size(); + int32_t readFrom = 0; + int32_t writeTo = 0; + while(readFrom < size) { + CommitPoint* commit = (CommitPoint*)commits[readFrom]; + if (!commit->deleted) { + if (writeTo != readFrom) { + commits.remove(readFrom,true); + commits.remove(writeTo,false);//delete this one... + if ( commits.size() == writeTo ) + commits.push_back(commit); + else + commits[writeTo] = commit; + } + writeTo++; + } + readFrom++; + } + + while(size > writeTo) { + commits.remove(size-1); + size--; + } + } +} + +/** +* Writer calls this when it has hit an error and had to +* roll back, to tell us that there may now be +* unreferenced files in the filesystem. So we re-list +* the filesystem and delete such files. If segmentName +* is non-NULL, we will only delete files corresponding to +* that segment. +*/ +void IndexFileDeleter::refresh(const char* segmentName) { + vector files; + if ( !directory->list(files) ) + _CLTHROWA(CL_ERR_IO, (string("cannot read directory ") + directory->toString() + ": list() returned NULL").c_str() ); + const IndexFileNameFilter* filter = IndexFileNameFilter::getFilter(); + string segmentPrefix1; + string segmentPrefix2; + if (segmentName != NULL) { + segmentPrefix1 = string(segmentName) + "."; + segmentPrefix2 = string(segmentName) + "_"; + } + + for(size_t i=0;iaccept(NULL, fileName.c_str()) && + ( (segmentName==NULL || fileName.compare(0,segmentPrefix1.length(),segmentPrefix1) == 0 || fileName.compare(0,segmentPrefix2.length(),segmentPrefix2)==0) + && refCounts.find((char*)fileName.c_str())== refCounts.end() && fileName.compare(IndexFileNames::SEGMENTS_GEN)!=0) ){ + + // Unreferenced file, so remove it + if (infoStream != NULL) { + message( string("refresh [prefix=") + segmentName + "]: removing newly created unreferenced file \"" + fileName + "\""); + } + deleteFile(fileName.c_str()); + } + } +} + +void IndexFileDeleter::refresh() { + refresh(NULL); +} + +void IndexFileDeleter::close() { + deletePendingFiles(); +} + +void IndexFileDeleter::deletePendingFiles() { + if (!deletable.empty()) { + vector oldDeletable; + oldDeletable.insert(oldDeletable.end(),deletable.begin(),deletable.end()); + deletable.clear(); + + int32_t size = oldDeletable.size(); + for(int32_t i=0;igetCurrentSegmentFileName() + "\" [" + + Misc::toString(segmentInfos->size()) + " segments ; isCommit = " + Misc::toString(isCommit) + "]"); + } + + // Try again now to delete any previously un-deletable + // files (because they were in use, on Windows): + deletePendingFiles(); + + // Incref the files: + incRef(segmentInfos, isCommit); + const vector* docWriterFiles = NULL; + if (docWriter != NULL) { + docWriterFiles = &docWriter->files(); + if (!docWriterFiles->empty()) + incRef(*docWriterFiles); + else + docWriterFiles = NULL; + } + + if (isCommit) { + // Append to our commits list: + commits.push_back(_CLNEW CommitPoint(this, segmentInfos)); + + // Tell policy so it can remove commits: + policy->onCommit(commits); + + // Decref files for commits that were deleted by the policy: + deleteCommits(); + } + + // DecRef old files from the last checkpoint, if any: + int32_t size = lastFiles.size(); + if (size > 0) { + for(int32_t i=0;isize(); + for(int32_t i=0;iinfo(i); + if (segmentInfo->dir == directory) { + const vector& files = segmentInfo->files(); + lastFiles.insert(lastFiles.end(), files.begin(), files.end()); + } + } + } + if (docWriterFiles != NULL) + lastFiles.insert(lastFiles.end(), docWriterFiles->begin(),docWriterFiles->end()); +} + +void IndexFileDeleter::incRef(SegmentInfos* segmentInfos, bool isCommit) { + int32_t size = segmentInfos->size(); + for(int32_t i=0;iinfo(i); + if (segmentInfo->dir == directory) { + incRef(segmentInfo->files()); + } + } + + if (isCommit) { + // Since this is a commit point32_t, also incref its + // segments_N file: + getRefCount(segmentInfos->getCurrentSegmentFileName().c_str())->IncRef(); + } +} + +void IndexFileDeleter::incRef(const vector& files) { + int32_t size = files.size(); + for(int32_t i=0;icount)); + } + rc->IncRef(); + } +} + +void IndexFileDeleter::decRef(const vector& files) { + int32_t size = files.size(); + for(int32_t i=0;icount)); + } + if (0 == rc->DecRef()) { + // This file is no int32_t64_ter referenced by any past + // commit point32_ts nor by the in-memory SegmentInfos: + deleteFile(fileName.c_str()); + refCounts.remove((char*)fileName.c_str()); + } +} + +void IndexFileDeleter::decRef(SegmentInfos* segmentInfos) { + int32_t size = segmentInfos->size(); + for(int32_t i=0;iinfo(i); + if (segmentInfo->dir == directory) { + decRef(segmentInfo->files()); + } + } +} + +IndexFileDeleter::RefCount* IndexFileDeleter::getRefCount(const char* fileName) { + RefCount* rc; + RefCountsType::iterator itr = refCounts.find((char*)fileName); + if (itr == refCounts.end()) { + rc = _CLNEW RefCount(); + refCounts.put( STRDUP_AtoA(fileName), rc); + } else { + rc = itr->second; + } + return rc; +} + +void IndexFileDeleter::deleteFiles(vector& files) { + int32_t size = files.size(); + for(int32_t i=0;i& files) { + int32_t size = files.size(); + for(int32_t i=0;ideleteFile(fileName); + } catch (CLuceneError& e) { // if delete fails + if ( e.number() != CL_ERR_IO ){ + throw e; + } + if (directory->fileExists(fileName)) { + + // 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. + + if (infoStream != NULL) { + message(string("IndexFileDeleter: unable to remove file \"") + fileName + "\": " + e.what() + "; Will re-try later."); + } + deletable.push_back(fileName); // add to deletable + } + } +} + +CL_NS_END diff --git a/Pods/BRCLucene/src/core/CLucene/index/IndexFileNameFilter.cpp b/Pods/BRCLucene/src/core/CLucene/index/IndexFileNameFilter.cpp new file mode 100644 index 0000000..6dec143 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/index/IndexFileNameFilter.cpp @@ -0,0 +1,84 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "_IndexFileNameFilter.h" +#include "_IndexFileNames.h" + +CL_NS_DEF(index) + +FilenameFilter::~FilenameFilter(){ +} + +IndexFileNameFilter* IndexFileNameFilter::_singleton = NULL; +IndexFileNameFilter* IndexFileNameFilter::singleton(){ + if ( _singleton == NULL ) + _singleton = _CLNEW IndexFileNameFilter(); + return _singleton; +} + +void IndexFileNameFilter::_shutdown(){ + _CLDELETE(_singleton); +} + +IndexFileNameFilter::IndexFileNameFilter() { + size_t i; + for ( i = 0; i < IndexFileNames::INDEX_EXTENSIONS().length; ++i) { + extensions.insert(IndexFileNames::INDEX_EXTENSIONS()[i]); + } + for ( i = 0; i < IndexFileNames::INDEX_EXTENSIONS_IN_COMPOUND_FILE().length; ++i) { + extensionsInCFS.insert(IndexFileNames::INDEX_EXTENSIONS_IN_COMPOUND_FILE()[i]); + } +} +IndexFileNameFilter::~IndexFileNameFilter(){ +} +bool IndexFileNameFilter::accept(const char* /*dir*/, const char* name) const { + string _name(name); + size_t i = _name.find_last_of('.'); + if (i != string::npos) { + const char* extension = name + 1 + i; + char* tmp; + if (extensions.find(extension) != extensions.end()) { + return true; + } + + size_t l = _name.length(); + if (*extension == 'f' && + strtol(extension+1, &tmp,10)>= 0 && tmp == (extension+l) ) { //check for f001 + return true; + } else if (*extension == 's' && + strtol(extension+1, &tmp,10)>= 0 && tmp == (extension+l)) { + return true; + } + } else { + if ( strcmp(name, IndexFileNames::DELETABLE) == 0 ) return true; + else if ( strncmp(name, IndexFileNames::SEGMENTS, strlen(IndexFileNames::SEGMENTS)) == 0 ) return true; + } + return false; +} + +bool IndexFileNameFilter::isCFSFile(const char* name) const { + string _name(name); + size_t i = _name.find_last_of('.'); + if (i != string::npos) { + const char* extension = name + 1 + i; + char* tmp; + if (extensionsInCFS.find(extension) != extensionsInCFS.end() ) { + return true; + } + size_t l = _name.length(); + if (*extension == 'f' && + strtol(extension+1, &tmp,10)>= 0 && tmp == (extension+l)) { + return true; + } + } + return false; +} + +const IndexFileNameFilter* IndexFileNameFilter::getFilter() { + return singleton(); +} +CL_NS_END diff --git a/Pods/BRCLucene/src/core/CLucene/index/IndexFileNames.cpp b/Pods/BRCLucene/src/core/CLucene/index/IndexFileNames.cpp new file mode 100644 index 0000000..4217240 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/index/IndexFileNames.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. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" + +#include "_IndexFileNames.h" +#include "_SegmentInfos.h" +#include "CLucene/util/Misc.h" + + +CL_NS_DEF(index) + + const char* IndexFileNames::SEGMENTS = "segments"; + const char* IndexFileNames::SEGMENTS_GEN = "segments.gen"; + const char* IndexFileNames::DELETABLE = "deletable"; + const char* IndexFileNames::NORMS_EXTENSION = "nrm"; + const char* IndexFileNames::FREQ_EXTENSION = "frq"; + const char* IndexFileNames::PROX_EXTENSION = "prx"; + const char* IndexFileNames::TERMS_EXTENSION = "tis"; + const char* IndexFileNames::TERMS_INDEX_EXTENSION = "tii"; + const char* IndexFileNames::FIELDS_INDEX_EXTENSION = "fdx"; + const char* IndexFileNames::FIELDS_EXTENSION = "fdt"; + const char* IndexFileNames::VECTORS_FIELDS_EXTENSION = "tvf"; + const char* IndexFileNames::VECTORS_DOCUMENTS_EXTENSION = "tvd"; + const char* IndexFileNames::VECTORS_INDEX_EXTENSION = "tvx"; + const char* IndexFileNames::COMPOUND_FILE_EXTENSION = "cfs"; + const char* IndexFileNames::COMPOUND_FILE_STORE_EXTENSION = "cfx"; + const char* IndexFileNames::DELETES_EXTENSION = "del"; + const char* IndexFileNames::FIELD_INFOS_EXTENSION = "fnm"; + const char* IndexFileNames::PLAIN_NORMS_EXTENSION = "f"; + const char* IndexFileNames::SEPARATE_NORMS_EXTENSION = "s"; + const char* IndexFileNames::GEN_EXTENSION = "gen"; + + const char* IndexFileNames_INDEX_EXTENSIONS_s[] = + { + IndexFileNames::COMPOUND_FILE_EXTENSION, + IndexFileNames::FIELD_INFOS_EXTENSION, + IndexFileNames::FIELDS_INDEX_EXTENSION, + IndexFileNames::FIELDS_EXTENSION, + IndexFileNames::TERMS_INDEX_EXTENSION, + IndexFileNames::TERMS_EXTENSION, + IndexFileNames::FREQ_EXTENSION, + IndexFileNames::PROX_EXTENSION, + IndexFileNames::DELETES_EXTENSION, + IndexFileNames::VECTORS_INDEX_EXTENSION, + IndexFileNames::VECTORS_DOCUMENTS_EXTENSION, + IndexFileNames::VECTORS_FIELDS_EXTENSION, + IndexFileNames::GEN_EXTENSION, + IndexFileNames::NORMS_EXTENSION, + IndexFileNames::COMPOUND_FILE_STORE_EXTENSION + }; + + CL_NS(util)::ConstValueArray IndexFileNames::_INDEX_EXTENSIONS; + CL_NS(util)::ConstValueArray& IndexFileNames::INDEX_EXTENSIONS(){ + if ( _INDEX_EXTENSIONS.length == 0 ){ + _INDEX_EXTENSIONS.values = IndexFileNames_INDEX_EXTENSIONS_s; + _INDEX_EXTENSIONS.length = 15; + } + return _INDEX_EXTENSIONS; + } + + const char* IndexFileNames_INDEX_EXTENSIONS_IN_COMPOUND_FILE_s[] = { + IndexFileNames::FIELD_INFOS_EXTENSION, + IndexFileNames::FIELDS_INDEX_EXTENSION, + IndexFileNames::FIELDS_EXTENSION, + IndexFileNames::TERMS_INDEX_EXTENSION, + IndexFileNames::TERMS_EXTENSION, + IndexFileNames::FREQ_EXTENSION, + IndexFileNames::PROX_EXTENSION, + IndexFileNames::VECTORS_INDEX_EXTENSION, + IndexFileNames::VECTORS_DOCUMENTS_EXTENSION, + IndexFileNames::VECTORS_FIELDS_EXTENSION, + IndexFileNames::NORMS_EXTENSION + }; + CL_NS(util)::ConstValueArray IndexFileNames::_INDEX_EXTENSIONS_IN_COMPOUND_FILE; + CL_NS(util)::ConstValueArray& IndexFileNames::INDEX_EXTENSIONS_IN_COMPOUND_FILE(){ + if ( _INDEX_EXTENSIONS_IN_COMPOUND_FILE.length == 0 ){ + _INDEX_EXTENSIONS_IN_COMPOUND_FILE.values = IndexFileNames_INDEX_EXTENSIONS_IN_COMPOUND_FILE_s; + _INDEX_EXTENSIONS_IN_COMPOUND_FILE.length = 11; + } + return _INDEX_EXTENSIONS_IN_COMPOUND_FILE; + } + + const char* IndexFileNames_STORE_INDEX_EXTENSIONS_s[] = { + IndexFileNames::VECTORS_INDEX_EXTENSION, + IndexFileNames::VECTORS_FIELDS_EXTENSION, + IndexFileNames::VECTORS_DOCUMENTS_EXTENSION, + IndexFileNames::FIELDS_INDEX_EXTENSION, + IndexFileNames::FIELDS_EXTENSION + }; + CL_NS(util)::ConstValueArray IndexFileNames::_STORE_INDEX_EXTENSIONS; + CL_NS(util)::ConstValueArray& IndexFileNames::STORE_INDEX_EXTENSIONS(){ + if ( _STORE_INDEX_EXTENSIONS.length == 0 ){ + _STORE_INDEX_EXTENSIONS.values = IndexFileNames_STORE_INDEX_EXTENSIONS_s; + _STORE_INDEX_EXTENSIONS.length = 5; + } + return _STORE_INDEX_EXTENSIONS; + } + + const char* IndexFileNames_NON_STORE_INDEX_EXTENSIONS_s[] = { + IndexFileNames::FIELD_INFOS_EXTENSION, + IndexFileNames::FREQ_EXTENSION, + IndexFileNames::PROX_EXTENSION, + IndexFileNames::TERMS_EXTENSION, + IndexFileNames::TERMS_INDEX_EXTENSION, + IndexFileNames::NORMS_EXTENSION + }; + CL_NS(util)::ConstValueArray IndexFileNames::_NON_STORE_INDEX_EXTENSIONS; + CL_NS(util)::ConstValueArray& IndexFileNames::NON_STORE_INDEX_EXTENSIONS(){ + if ( _NON_STORE_INDEX_EXTENSIONS.length == 0 ){ + _NON_STORE_INDEX_EXTENSIONS.values = IndexFileNames_NON_STORE_INDEX_EXTENSIONS_s; + _NON_STORE_INDEX_EXTENSIONS.length = 6; + } + return _NON_STORE_INDEX_EXTENSIONS; + } + + const char* IndexFileNames_COMPOUND_EXTENSIONS_s[] = { + IndexFileNames::FIELD_INFOS_EXTENSION, + IndexFileNames::FREQ_EXTENSION, + IndexFileNames::PROX_EXTENSION, + IndexFileNames::FIELDS_INDEX_EXTENSION, + IndexFileNames::FIELDS_EXTENSION, + IndexFileNames::TERMS_INDEX_EXTENSION, + IndexFileNames::TERMS_EXTENSION + }; + CL_NS(util)::ConstValueArray IndexFileNames::_COMPOUND_EXTENSIONS; + CL_NS(util)::ConstValueArray& IndexFileNames::COMPOUND_EXTENSIONS(){ + if ( _COMPOUND_EXTENSIONS.length == 0 ){ + _COMPOUND_EXTENSIONS.values = IndexFileNames_COMPOUND_EXTENSIONS_s; + _COMPOUND_EXTENSIONS.length = 7; + } + return _COMPOUND_EXTENSIONS; + } + + const char* IndexFileNames_VECTOR_EXTENSIONS_s[] = { + IndexFileNames::VECTORS_INDEX_EXTENSION, + IndexFileNames::VECTORS_DOCUMENTS_EXTENSION, + IndexFileNames::VECTORS_FIELDS_EXTENSION + }; + CL_NS(util)::ConstValueArray IndexFileNames::_VECTOR_EXTENSIONS; + CL_NS(util)::ConstValueArray& IndexFileNames::VECTOR_EXTENSIONS(){ + if ( _VECTOR_EXTENSIONS.length == 0 ){ + _VECTOR_EXTENSIONS.values = IndexFileNames_VECTOR_EXTENSIONS_s; + _VECTOR_EXTENSIONS.length = 3; + } + return _VECTOR_EXTENSIONS; + } + + string IndexFileNames::fileNameFromGeneration( const char* base, const char* extension, int64_t gen ) { + if ( gen == SegmentInfo::NO ) { + return ""; + } else if ( gen == SegmentInfo::WITHOUT_GEN ) { + return string(base) + extension; + } else { + char buf[(sizeof(unsigned long) << 3) + 1]; + CL_NS(util)::Misc::longToBase( gen, 36, buf ); + return string(base) + "_" + buf + extension; + } + } + + bool IndexFileNames::isDocStoreFile( const char* fileName ) { + + const char* p = strchr( fileName, (int)'.' ); + + if ( p != NULL && strcmp( p+1, COMPOUND_FILE_STORE_EXTENSION ) == 0 ) { + return true; + } + for ( int32_t i = 0; i < STORE_INDEX_EXTENSIONS().length; i++ ) { + if ( p != NULL && strcmp( p+1, STORE_INDEX_EXTENSIONS()[i] ) == 0 ) { + return true; + } + } + return false; + } + +CL_NS_END diff --git a/Pods/BRCLucene/src/core/CLucene/index/IndexModifier.cpp b/Pods/BRCLucene/src/core/CLucene/index/IndexModifier.cpp new file mode 100644 index 0000000..8303208 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/index/IndexModifier.cpp @@ -0,0 +1,277 @@ +/*------------------------------------------------------------------------------ +* 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. +------------------------------------------------------------------------------*/ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "IndexModifier.h" + +#include "IndexWriter.h" +#include "IndexReader.h" +#include "CLucene/store/FSDirectory.h" +#include "CLucene/document/Document.h" +#include "MergeScheduler.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 char* dirName, Analyzer* analyzer, bool create) { + Directory* dir = FSDirectory::getDirectory(dirName); + init(dir, analyzer, create); +} + +void IndexModifier::init(Directory* directory, Analyzer* analyzer, bool create) { + indexWriter = NULL; + indexReader = NULL; + open = false; + infoStream = NULL; + + useCompoundFile = true; + this->maxBufferedDocs = IndexWriter::DEFAULT_MAX_BUFFERED_DOCS; + this->maxFieldLength = IndexWriter::DEFAULT_MAX_FIELD_LENGTH; + this->mergeFactor = IndexWriter::DEFAULT_MERGE_FACTOR; + + this->directory = _CL_POINTER(directory); + SCOPED_LOCK_MUTEX(directory->THIS_LOCK) + this->analyzer = analyzer; + indexWriter = _CLNEW IndexWriter(directory, analyzer, create); + open = true; +} + +IndexModifier::~IndexModifier(){ + if (open) { + close(); + } +} + +void IndexModifier::assureOpen() const{ + if (!open) { + _CLTHROWA(CL_ERR_IllegalState,"Index is closed"); + } +} + +void IndexModifier::createIndexWriter(bool create) { + if (indexWriter == NULL) { + if (indexReader != NULL) { + indexReader->close(); + _CLDELETE(indexReader); + } + + indexWriter = _CLNEW IndexWriter(directory, analyzer, false); + // IndexModifier cannot use ConcurrentMergeScheduler + // because it synchronizes on the directory which can + // cause deadlock + indexWriter->setMergeScheduler(_CLNEW SerialMergeScheduler()); + indexWriter->setInfoStream(infoStream); + indexWriter->setUseCompoundFile(useCompoundFile); + if (maxBufferedDocs != IndexWriter::DISABLE_AUTO_FLUSH) + 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() { + if (!open) + _CLTHROWA(CL_ERR_IllegalState, "Index is closed already"); + SCOPED_LOCK_MUTEX(directory->THIS_LOCK) + if (indexWriter != NULL) { + indexWriter->close(); + _CLDELETE(indexWriter); + } else if (indexReader != NULL) { + indexReader->close(); + _CLDELETE(indexReader); + } + _CLDECDELETE(directory) + open = false; +} + +string IndexModifier::toString() const{ + return string("Index@") + 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); +} +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/Pods/BRCLucene/src/core/CLucene/index/IndexModifier.h b/Pods/BRCLucene/src/core/CLucene/index/IndexModifier.h new file mode 100644 index 0000000..d6429bf --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/index/IndexModifier.h @@ -0,0 +1,332 @@ +/*------------------------------------------------------------------------------ +* 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_IndexModifier_ +#define _lucene_index_IndexModifier_ + + +CL_CLASS_DEF(store,Directory) +CL_CLASS_DEF(document,Document) +CL_CLASS_DEF(index, IndexWriter) +CL_CLASS_DEF(index, IndexReader) +CL_CLASS_DEF(index, Term) +CL_CLASS_DEF(index, TermDocs) +CL_CLASS_DEF(index, TermEnum) + +#include "CLucene/analysis/AnalysisHeader.h" + +CL_NS_DEF(index) + +/** +*

[Note that as of 2.1, all but one of the +* methods in this class are available via {@link +* IndexWriter}. The one method that is not available is +* {@link #deleteDocument(int)}.]

+* +* 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. +* +*

Note that you cannot create more than one IndexModifier object +* on the same directory at the same time. +* +*

Example usage: +* +*

+* +* +* +* +*
+* +* //note this code will leak memory :) +* Analyzer* analyzer = new StandardAnalyzer();
+* // create an index in /tmp/index, overwriting an existing one:
+* IndexModifier* indexModifier = new IndexModifier("/tmp/index", analyzer, true);
+* Document* doc = new Document*();
+* doc->add(*new Field("id", "1", Field::STORE_YES| Field::INDEX_UNTOKENIZED));
+* doc->add(*new Field("body", "a simple test", Field::STORE_YES, Field::INDEX_TOKENIZED));
+* indexModifier->addDocument(doc);
+* int32_t deleted = indexModifier->deleteDocuments(new Term("id", "1"));
+* printf("Deleted %d document", deleted);
+* indexModifier->flush();
+* printf( "$d docs in index", indexModifier->docCount() );
+* indexModifier->close(); +*
+*
+* +*

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 IndexModifier. +* +*

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). +* +*

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. +* +* @deprecated Please use {@link IndexWriter} instead. +*/ +class CLUCENE_EXPORT IndexModifier { +protected: + IndexWriter* indexWriter; + IndexReader* indexReader; + + CL_NS(store)::Directory* directory; + CL_NS(analysis)::Analyzer* analyzer; + bool open; + + // Lucene defaults: + std::ostream* infoStream; + 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 true to create the index or overwrite the existing one; + * false to append to the existing index + */ + IndexModifier(CL_NS(store)::Directory* directory, CL_NS(analysis)::Analyzer* analyzer, bool create); + + /** + * Open an index with write access. + * + * @param dirName the index directory + * @param analyzer the analyzer to use for adding new documents + * @param create true to create the index or overwrite the existing one; + * false to append to the existing index + */ + IndexModifier(const char* dirName, CL_NS(analysis)::Analyzer* analyzer, bool create); + + virtual ~IndexModifier(); + +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(bool create = false); + + /** + * 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 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. 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 docNum. + * @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.

+ * 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.

+ * 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.

+ * 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.

+ * 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); + + /** + * @throws IOException + * @see IndexModifier#setMaxBufferedDocs(int32_t) + */ + 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 (> 10) are best + * for batch index creation, and smaller values (< 10) for indices that are + * interactively maintained. + *

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(); + + std::string 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&) )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/Pods/BRCLucene/src/core/CLucene/index/IndexReader.cpp b/Pods/BRCLucene/src/core/CLucene/index/IndexReader.cpp new file mode 100644 index 0000000..91ca18e --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/index/IndexReader.cpp @@ -0,0 +1,532 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.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 "CLucene/util/Misc.h" +#include "_SegmentInfos.h" +#include "_SegmentHeader.h" +#include "MultiReader.h" +#include "Terms.h" +#include + +CL_NS_USE(util) +CL_NS_USE(store) +CL_NS_DEF(index) + + + class IndexReaderFindSegmentsFile: public SegmentInfos::FindSegmentsFile{ + public: + IndexReaderFindSegmentsFile( CL_NS(store)::Directory* dir ): + SegmentInfos::FindSegmentsFile(dir){ + } + IndexReaderFindSegmentsFile( const char* dir ): + SegmentInfos::FindSegmentsFile(dir){ + } + uint64_t doBody(const char* segmentFileName){ + return directory->fileModified(segmentFileName); + } + }; + + class CloseCallbackCompare:public CL_NS(util)::Compare::_base{ + public: + bool operator()( IndexReader::CloseCallback t1, IndexReader::CloseCallback t2 ) const{ + return t1 > t2; + } + static void doDelete(IndexReader::CloseCallback /*dummy*/){ + } + }; + + + class IndexReader::Internal: LUCENE_BASE{ + public: + /** + * @deprecated will be deleted when IndexReader(Directory) is deleted + * @see #directory() + */ + CL_NS(store)::Directory* directory; + + typedef CL_NS(util)::CLSet CloseCallbackMap; + CloseCallbackMap closeCallbacks; + + Internal(Directory* directory, IndexReader* _this) + { + if ( directory != NULL ) + this->directory = _CL_POINTER(directory); + else + this->directory = NULL; + _this->closed = false; + _this->hasChanges = false; + } + ~Internal(){ + } + }; + + IndexReader::IndexReader(Directory* dir){ + //Constructor. + //Func - Creates an instance of IndexReader + //Pre - true + //Post - An instance has been created with writeLock = NULL + _internal = _CLNEW Internal(dir, this); + } + + IndexReader::IndexReader(){ + //Constructor. + //Func - Creates an instance of IndexReader + //Pre - true + //Post - An instance has been created with writeLock = NULL + _internal = _CLNEW Internal(NULL, this); + } + + IndexReader::~IndexReader(){ + //Func - Destructor + // Destroys the instance and releases the writeLock if needed + //Pre - true + //Post - The instance has been destroyed if pre(writeLock) exists is has been released + _CLLDELETE(_internal); + } + + IndexReader* IndexReader::open(const char* path, bool closeDirectoryOnCleanup, IndexDeletionPolicy* deletionPolicy){ + //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 != NULL, "path is NULL"); + Directory* dir = FSDirectory::getDirectory(path); + IndexReader* reader = open(dir,closeDirectoryOnCleanup,deletionPolicy); + //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, IndexDeletionPolicy* deletionPolicy){ + //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 + + return DirectoryIndexReader::open(directory, closeDirectory, deletionPolicy); + } + + IndexReader* IndexReader::reopen(){ + _CLTHROWA(CL_ERR_UnsupportedOperation, "This reader does not support reopen()."); + } + CL_NS(store)::Directory* IndexReader::directory() { + ensureOpen(); + if (NULL != _internal->directory) { + return _internal->directory; + } else { + _CLTHROWA(CL_ERR_UnsupportedOperation, "This reader does not support this method."); + } + } + + void IndexReader::ensureOpen(){ + } + + void IndexReader::acquireWriteLock(){ + SCOPED_LOCK_MUTEX(THIS_LOCK) + /* NOOP */ + } + + 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; + } + + uint64_t IndexReader::lastModified(const char* directory2) { + //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(directory2 != NULL, "directory is NULL"); + + IndexReaderFindSegmentsFile runner(directory2); + return (uint64_t)runner.run(); + } + + int64_t IndexReader::getCurrentVersion(Directory* directory) { + return SegmentInfos::readCurrentVersion(directory); + } + + + int64_t IndexReader::getCurrentVersion(const char* directory){ + Directory* dir = FSDirectory::getDirectory(directory); + int64_t version = getCurrentVersion(dir); + dir->close(); + _CLDECDELETE(dir); + return version; + } + int64_t IndexReader::getVersion() { + _CLTHROWA(CL_ERR_UnsupportedOperation, "This reader does not support this method."); + } + + void IndexReader::setTermInfosIndexDivisor(int32_t /*indexDivisor*/) { + _CLTHROWA(CL_ERR_UnsupportedOperation, "This reader does not support this method."); + } + + int32_t IndexReader::getTermInfosIndexDivisor() { + _CLTHROWA(CL_ERR_UnsupportedOperation, "This reader does not support this method."); + } + + bool IndexReader::isCurrent() { + _CLTHROWA(CL_ERR_UnsupportedOperation, "This reader does not support this method."); + } + bool IndexReader::isOptimized() { + _CLTHROWA(CL_ERR_UnsupportedOperation, "This reader does not support this method."); + } + + uint64_t IndexReader::lastModified(Directory* directory2) { + //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 + IndexReaderFindSegmentsFile runner(directory2); + return (uint64_t)runner.run(); + } + + void IndexReader::setNorm(int32_t doc, const TCHAR* field, uint8_t value){ + SCOPED_LOCK_MUTEX(THIS_LOCK) + this->ensureOpen(); + this->acquireWriteLock(); + this->hasChanges = true; + this->doSetNorm(doc, field, value); + } + + + void IndexReader::setNorm(int32_t doc, const TCHAR* field, float_t value){ + ensureOpen(); + setNorm(doc, field, CL_NS(search)::Similarity::encodeNorm(value)); + } + + bool IndexReader::indexExists(const char* 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. + std::vector files; + Misc::listFiles(directory, files); + return SegmentInfos::getCurrentSegmentGeneration(files) != -1; + } + + 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 SegmentInfos::getCurrentSegmentGeneration(directory) != -1; + } + + TermDocs* IndexReader::termDocs(Term* term) { + //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 => * + // 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"); + + ensureOpen(); + //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){ + //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 => >* + // + // 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"); + + ensureOpen(); + //Reference an instantiated termPositions instance + TermPositions* _termPositions = termPositions(); + //Seek all documents containing term + _termPositions->seek(term); + //return the enumeration + return _termPositions; + } + + bool IndexReader::document(int32_t n, CL_NS(document)::Document* doc){ + return document(n, *doc); + } + bool IndexReader::document(int32_t n, CL_NS(document)::Document& doc){ + ensureOpen(); + return document(n, doc, NULL); + } + + void IndexReader::deleteDoc(const int32_t docNum){ + deleteDocument(docNum); + } + int32_t IndexReader::deleteTerm(Term* term){ + return deleteDocuments(term); + } + + 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"); + + ensureOpen(); + acquireWriteLock(); + + //Have the document identified by docNum deleted + hasChanges = true; + doDelete(docNum); + } + + void IndexReader::flush() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + ensureOpen(); + commit(); + } + + void IndexReader::commit(){ + SCOPED_LOCK_MUTEX(THIS_LOCK) + if(hasChanges){ + doCommit(); + } + hasChanges = false; + } + + + void IndexReader::undeleteAll(){ + SCOPED_LOCK_MUTEX(THIS_LOCK) + ensureOpen(); + acquireWriteLock(); + hasChanges = true; + doUndeleteAll(); + } + + 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"); + ensureOpen(); + + //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; + } + + + 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) + if ( !closed ){ + Internal::CloseCallbackMap::iterator iter = _internal->closeCallbacks.begin(); + for ( ;iter!=_internal->closeCallbacks.end();iter++){ + CloseCallback callback = *iter->first; + callback(this,iter->second); + } + commit(); + doClose(); + } + closed = true; + } + + 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* l = directory->makeLock("write.lock"); + bool ret = l->isLocked(); + _CLDELETE(l); + return ret; + } + + bool IndexReader::isLocked(const char* 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 != NULL, "directory is NULL"); + + Directory* dir = FSDirectory::getDirectory(directory); + bool ret = isLocked(dir); + dir->close(); + _CLDECDELETE(dir); + + return ret; + } + +bool IndexReader::hasNorms(const TCHAR* field) { + // backward compatible implementation. + // SegmentReader has an efficient implementation. + ensureOpen(); + return norms(field) != NULL; +} + +void IndexReader::unlock(const char* path){ + FSDirectory* dir = FSDirectory::getDirectory(path); + 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 = directory->makeLock("write.lock"); + lock->release(); + _CLDELETE(lock); + } + +bool IndexReader::isLuceneFile(const char* filename){ + if ( !filename ) + return false; + size_t len = strlen(filename); + if ( len < 6 ) //need at least x.frx + return false; + const char* ext=filename+len; + while(*ext != '.' && ext!=filename) + ext--; + + if ( strcmp(ext, ".cfs") == 0 ) + return true; + else if ( strcmp(ext, ".fnm") == 0 ) + return true; + else if ( strcmp(ext, ".fdx") == 0 ) + return true; + else if ( strcmp(ext, ".fdt") == 0 ) + return true; + else if ( strcmp(ext, ".tii") == 0 ) + return true; + else if ( strcmp(ext, ".tis") == 0 ) + return true; + else if ( strcmp(ext, ".frq") == 0 ) + return true; + else if ( strcmp(ext, ".prx") == 0 ) + return true; + else if ( strcmp(ext, ".del") == 0 ) + return true; + else if ( strcmp(ext, ".tvx") == 0 ) + return true; + else if ( strcmp(ext, ".tvd") == 0 ) + return true; + else if ( strcmp(ext, ".tvf") == 0 ) + return true; + else if ( strcmp(ext, ".tvp") == 0 ) + return true; + + else if ( strcmp(filename, "segments") == 0 ) + return true; + else if ( strcmp(filename, "segments.new") == 0 ) + return true; + else if ( strcmp(filename, "deletable") == 0 ) + return true; + + else if ( strncmp(ext,".f",2)==0 ){ + const char* n = ext+2; + if ( *n && _istdigit(*n) ) + return true; + } + + return false; +} + +CL_NS(store)::Directory* IndexReader::getDirectory() { + return directory(); +} + + void IndexReader::addCloseCallback(CloseCallback callback, void* parameter){ + _internal->closeCallbacks.put(callback, parameter); + } + +CL_NS_END diff --git a/Pods/BRCLucene/src/core/CLucene/index/IndexReader.h b/Pods/BRCLucene/src/core/CLucene/index/IndexReader.h new file mode 100644 index 0000000..9079025 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/index/IndexReader.h @@ -0,0 +1,688 @@ +/*------------------------------------------------------------------------------ +* 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_IndexReader_ +#define _lucene_index_IndexReader_ + + +#include "CLucene/util/Array.h" +#include "CLucene/util/VoidList.h" +#include "CLucene/LuceneThreads.h" + +CL_CLASS_DEF(store,Directory) +CL_CLASS_DEF(store,LuceneLock) +CL_CLASS_DEF(document,Document) +CL_CLASS_DEF(document,FieldSelector) + +CL_NS_DEF(index) +class SegmentInfos; +class TermFreqVector; +class TermEnum; +class Term; +class TermDocs; +class TermPositions; +class IndexDeletionPolicy; +class TermVectorMapper; + +/** 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. + +

Concrete subclasses of IndexReader are usually constructed with a call to + one of the static open() methods, e.g. {@link #open(String)}. + +

For efficiency, in this API documents are often referred to via + document numbers, 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. + +

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. + +

+ NOTE: for backwards API compatibility, several methods are not listed + as abstract, but have no useful implementations in this base class and + instead always throw UnsupportedOperationException. Subclasses are + strongly encouraged to override these methods, but in many cases may not + need to. +

+ +*/ +class CLUCENE_EXPORT IndexReader: public CL_NS(util)::NamedObject{ + bool closed; +protected: + bool hasChanges; + + /** + * Legacy Constructor for backwards compatibility. + * + *

+ * This Constructor should not be used, it exists for backwards + * compatibility only to support legacy subclasses that did not "own" + * a specific directory, but needed to specify something to be returned + * by the directory() method. Future subclasses should delegate to the + * no arg constructor and implement the directory() method as appropriate. + * + * @param directory Directory to be returned by the directory() method + * @see #directory() + * @deprecated - use IndexReader() + */ + IndexReader(CL_NS(store)::Directory* dir); + + IndexReader(); + + /// 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 docNum. + * Applications should call {@link #deleteDocument(int32_t)} or {@link #deleteDocuments(Term*)}. + */ + virtual void doDelete(const int32_t docNum) = 0; + + /** + * @throws AlreadyClosedException if this IndexReader is closed + */ + virtual void ensureOpen(); + + /** Does nothing by default. Subclasses that require a write lock for + * index modifications must implement this method. */ + virtual void acquireWriteLock(); + +public: + //Callback for classes that need to know if IndexReader is closing. + typedef void (*CloseCallback)(IndexReader*, void*); + + /** Internal use. Implements commit */ + virtual void doCommit() = 0; + /** Internal use. */ + class Internal; + /** Internal use. */ + Internal* _internal; + + + /** + * Constants describing field properties, for example used for + * {@link IndexReader#getFieldNames(FieldOption)}. + */ + 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, + /** all fields that store payloads */ + STORES_PAYLOADS = 512 + }; + + /** Returns an IndexReader reading the index in an FSDirectory in the named + path. + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + * @param path the path to the index directory */ + static IndexReader* open(const char* path, bool closeDirectoryOnCleanup=true, IndexDeletionPolicy* deletionPolicy=NULL); + + /** Expert: returns an IndexReader reading the index in the given + * Directory, with a custom {@link IndexDeletionPolicy}. + * @param directory the index directory + * @param deletionPolicy a custom deletion policy (only used + * if you use this reader to perform deletes or to set + * norms); see {@link IndexWriter} for details. + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + static IndexReader* open(CL_NS(store)::Directory* directory, bool closeDirectoryOnCleanup=false, IndexDeletionPolicy* deletionPolicy=NULL); + + + /** + * Refreshes an IndexReader if the index has changed since this instance + * was (re)opened. + *

+ * Opening an IndexReader is an expensive operation. This method can be used + * to refresh an existing IndexReader to reduce these costs. This method + * tries to only load segments that have changed or were created after the + * IndexReader was (re)opened. + *

+ * If the index has not changed since this instance was (re)opened, then this + * call is a NOOP and returns this instance. Otherwise, a new instance is + * returned. The old instance is closed (unlink JLucene) and must + * be deleted
+ *

+ * You can determine whether a reader was actually reopened by comparing the + * old instance with the instance returned by this method: + *

+   * IndexReader* reader = ...
+   * ...
+   * IndexReader* newreader = r->reopen();
+   * if (newreader != reader) {
+   *   ...     // reader was reopened
+   *   reader->close();
+   *   _CLDELETE(reader);
+   * }
+   * reader = newreader;
+   * ...
+   * 
+ * + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + virtual IndexReader* reopen(); + + /** + * Returns the directory associated with this index. The Default + * implementation returns the directory specified by subclasses when + * delegating to the IndexReader(Directory) constructor, or throws an + * UnsupportedOperationException if one was not specified. + * @throws UnsupportedOperationException if no directory + */ + virtual CL_NS(store)::Directory* directory(); + + DEFINE_MUTEX(THIS_LOCK) + + /** + * + * @throws IOException + */ + virtual void flush(); + + /** + * Commit changes resulting from delete, undeleteAll, or + * setNorm operations + * + * If an exception is hit, then either no changes or all + * changes will have been committed to the index + * (transactional semantics). + * @throws IOException if there is a low-level IO error + */ + CLUCENE_LOCAL_DECL virtual void commit(); + + + /** Undeletes all documents currently marked as deleted in this index. + * + * @throws StaleReaderException if the index has changed + * since this reader was opened + * @throws LockObtainFailedException if another writer + * has this index open (write.lock could not + * be obtained) + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + virtual 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, StringArrayWithDeletor& retarray) = 0; + + /** 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() + * + * @see Field#setBoost(float_t) + * @memory The values are cached, so don't delete the returned byte array. + */ + 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. + * + * The size of bytes must be the size of the IndexReader->maxDoc() + * + * @see Field#setBoost(float_t) + */ + 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) + * + * @throws StaleReaderException if the index has changed + * since this reader was opened + * @throws CorruptIndexException if the index is corrupt + * @throws LockObtainFailedException if another writer + * has this index open (write.lock could not + * be obtained) + * @throws IOException if there is a low-level IO error + */ + void setNorm(int32_t doc, const TCHAR* field, float_t 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(float_t) 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) + * @throws StaleReaderException if the index has changed + * since this reader was opened + * @throws CorruptIndexException if the index is corrupt + * @throws LockObtainFailedException if another writer + * has this index open (write.lock could not + * be obtained) + * @throws IOException if there is a low-level IO error + */ + void setNorm(int32_t doc, const TCHAR* field, uint8_t value); + + /// Release the write lock, if needed. + virtual ~IndexReader(); + + /** + * 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. + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + static uint64_t lastModified(const char* 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. + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + static uint64_t lastModified(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 CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + 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 CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + static int64_t getCurrentVersion(const char* directory); + + /** + * Version number when this IndexReader was opened. Not implemented in the IndexReader base class. + * @throws UnsupportedOperationException unless overridden in subclass + */ + virtual int64_t getVersion(); + + /**

For IndexReader implementations that use + * TermInfosReader to read terms, this sets the + * indexDivisor to subsample the number of indexed terms + * loaded into memory. This has the same effect as {@link + * IndexWriter#setTermIndexInterval} except that setting + * must be done at indexing time while this setting can be + * set per reader. When set to N, then one in every + * N*termIndexInterval terms in the index is loaded into + * memory. By setting this to a value > 1 you can reduce + * memory usage, at the expense of higher latency when + * loading a TermInfo. The default value is 1.

+ * + * NOTE: you must call this before the term + * index is loaded. If the index is already loaded, + * an IllegalStateException is thrown. + * @throws IllegalStateException if the term index has already been loaded into memory + */ + void setTermInfosIndexDivisor(int32_t indexDivisor); + + /**

For IndexReader implementations that use + * TermInfosReader to read terms, this returns the + * current indexDivisor. + * @see #setTermInfosIndexDivisor */ + int32_t getTermInfosIndexDivisor(); + + /** + * Check whether this IndexReader is still using the + * current (i.e., most recently committed) version of the + * index. If a writer has committed any changes to the + * index since this reader was opened, this will return + * false, in which case you must open a new + * IndexReader in order to see the changes. See the + * description of the autoCommit + * flag which controls when the {@link IndexWriter} + * actually commits changes to the index. + * + *

+ * Not implemented in the IndexReader base class. + *

+ * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + * @throws UnsupportedOperationException unless overridden in subclass + */ + virtual bool isCurrent(); + + /** + * Checks is the index is optimized (if it has a single segment and + * no deletions). Not implemented in the IndexReader base class. + * @return true if the index is optimized; false otherwise + * @throws UnsupportedOperationException unless overridden in subclass + */ + virtual bool isOptimized(); + + /** + * 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 CL_NS(util)::ArrayBase* getTermFreqVectors(int32_t docNumber) = 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=NULL) = 0; + + /** + * Load the Term Vector into a user-defined data structure instead of relying on the parallel arrays of + * the {@link TermFreqVector}. + * @param docNumber The number of the document to load the vector for + * @param field The name of the field to load + * @param mapper The {@link TermVectorMapper} to process the vector. Must not be null + * @throws IOException if term vectors cannot be accessed or if they do not exist on the field and doc. specified. + * + */ + virtual void getTermFreqVector(int32_t docNumber, const TCHAR* field, TermVectorMapper* mapper) =0; + + /** + * Map all the term vectors for all fields in a Document + * @param docNumber The number of the document to load the vector for + * @param mapper The {@link TermVectorMapper} to process the vector. Must not be null + * @throws IOException if term vectors cannot be accessed or if they do not exist on the field and doc. specified. + */ + virtual void getTermFreqVector(int32_t docNumber, TermVectorMapper* mapper) =0; + + /** + * Returns true 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 true if an index exists; false otherwise + */ + static bool indexExists(const char* directory); + + /** + * Returns true 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 true if an index exists; false 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; + + /** + * Get the {@link org.apache.lucene.document.Document} at the nth position. The {@link org.apache.lucene.document.FieldSelector} + * may be used to determine what {@link org.apache.lucene.document.Field}s to load and how they should be loaded. + * The fields are not cleared before retrieving the document, so the + * object should be new or just cleared. + * + * NOTE: If this Reader (more specifically, the underlying FieldsReader) is closed before the lazy {@link org.apache.lucene.document.Field} is + * loaded an exception may be thrown. If you want the value of a lazy {@link org.apache.lucene.document.Field} to be available after closing you must + * explicitly load it or fetch the Document again with a new loader. + * + * + * @param n Get the document at the nth position + * @param fieldSelector The {@link org.apache.lucene.document.FieldSelector} to use to determine what Fields should be loaded on the Document. May be null, in which case all Fields will be loaded. + * @return The stored fields of the {@link org.apache.lucene.document.Document} at the nth position + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + * + * @see org.apache.lucene.document.Field + * @see org.apache.lucene.document.FieldSelector + * @see org.apache.lucene.document.SetBasedFieldSelector + * @see org.apache.lucene.document.LoadFirstFieldSelector + */ + //When we convert to JDK 1.5 make this Set + virtual bool document(int32_t n, CL_NS(document)::Document& doc, const CL_NS(document)::FieldSelector* fieldSelector) =0; + + /** Gets the stored fields of the nth + * Document in this index. + * The fields are not cleared before retrieving the document, so the + * object should be new or just cleared. + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + bool document(int32_t n, CL_NS(document)::Document& doc); + + _CL_DEPRECATED( document(i, Document&) ) bool document(int32_t n, CL_NS(document)::Document*); + + _CL_DEPRECATED( document(i, document) ) CL_NS(document)::Document* document(const int32_t n); + + /** Returns true if document n 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. Note that after + * calling terms(), {@link TermEnum#next()} must be called + * on the resulting enumeration before calling other methods such as + * {@link TermEnum#term()}. + * @throws IOException if there is a low-level IO error + * @memory Caller must clean up + */ + virtual TermEnum* terms() = 0; + +/** Returns an enumeration of all terms starting at a given term. If + * the given term does not exist, the enumeration is positioned at the + * first term greater than the supplied therm. The enumeration is + * ordered by Term.compareTo(). Each term is greater than all that + * precede it in the enumeration. + * @throws IOException if there is a low-level IO error + * @memory Caller must clean up + */ + virtual TermEnum* terms(const Term* t) = 0; + + /** Returns the number of documents containing the term t. + * @throws IOException if there is a low-level IO error + */ + virtual int32_t docFreq(const Term* t) = 0; + + /* Returns an unpositioned TermPositions enumerator. + * @throws IOException if there is a low-level IO error + * @memory Caller must clean up + */ + virtual TermPositions* termPositions() = 0; + + /** 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, + * <pos1, pos2, ... + * posfreq-1> + * >* + *
+ *

This positional information facilitates phrase and proximity searching. + *

The enumeration is ordered by document number. Each document number is + * greater than all that precede it in the enumeration. + * @throws IOException if there is a low-level IO error + * @memory Caller must clean up + */ + TermPositions* termPositions(Term* term); + + /** Returns an unpositioned {@link TermDocs} enumerator. + * @throws IOException if there is a low-level IO error + * @memory Caller must clean up + */ + virtual TermDocs* termDocs() = 0; + + /** 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. + * @throws IOException if there is a low-level IO error + * @memory Caller must clean up + */ + TermDocs* termDocs(Term* term); + + /** 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 {@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. + * @throws StaleReaderException if the index has changed + * since this reader was opened + * @throws CorruptIndexException if the index is corrupt + * @throws LockObtainFailedException if another writer + * has this index open (write.lock could not + * be obtained) + * @throws IOException if there is a low-level IO error + */ + void deleteDocument(const int32_t docNum); + + ///@deprecated. Use deleteDocument instead. + _CL_DEPRECATED( deleteDocument ) void deleteDoc(const int32_t docNum); + + /** Deletes all documents that have a given 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. + * See {@link #deleteDocument(int)} for information about when this deletion will + * become effective. + * @return the number of documents deleted + * @throws StaleReaderException if the index has changed + * since this reader was opened + * @throws CorruptIndexException if the index is corrupt + * @throws LockObtainFailedException if another writer + * has this index open (write.lock could not + * be obtained) + * @throws IOException if there is a low-level IO error + */ + int32_t deleteDocuments(Term* term); + + ///@deprecated. Use deleteDocuments instead. + _CL_DEPRECATED( deleteDocuments ) int32_t deleteTerm(Term* 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. + * @throws IOException if there is a low-level IO error + */ + void close(); + + /** + * Returns true iff the index in the named directory is + * currently locked. + * @param directory the directory to check for a lock + * @throws IOException if there is a low-level IO error + */ + static bool isLocked(CL_NS(store)::Directory* directory); + + /** + * Returns true iff the index in the named directory is + * currently locked. + * @param directory the directory to check for a lock + * @throws IOException if there is a low-level IO error + */ + static bool isLocked(const char* 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 char* path); + + /** Returns the directory this index resides in. */ + _CL_DEPRECATED( directory() ) CL_NS(store)::Directory* getDirectory(); + + /** Returns true if the file is a lucene filename (based on extension or filename) */ + static bool isLuceneFile(const char* 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); + + friend class SegmentReader; + friend class MultiReader; + friend class IndexWriter; + friend class MultiSegmentReader; +}; + +CL_NS_END +#endif + + diff --git a/Pods/BRCLucene/src/core/CLucene/index/IndexWriter.cpp b/Pods/BRCLucene/src/core/CLucene/index/IndexWriter.cpp new file mode 100644 index 0000000..7bcdd88 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/index/IndexWriter.cpp @@ -0,0 +1,2347 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "IndexWriter.h" +#include "IndexReader.h" +#include "CLucene/document/Document.h" +#include "CLucene/store/Directory.h" +#include "CLucene/search/Similarity.h" +#include "CLucene/util/Misc.h" + +#include "CLucene/store/_Lock.h" +#include "CLucene/store/_RAMDirectory.h" +#include "CLucene/store/FSDirectory.h" +#include "CLucene/util/Array.h" +#include "CLucene/util/PriorityQueue.h" +#include "_DocumentsWriter.h" +#include "_TermInfo.h" +#include "_SegmentInfos.h" +#include "_SegmentMerger.h" +#include "_SegmentHeader.h" +#include "CLucene/search/Similarity.h" +#include "CLucene/index/MergePolicy.h" +#include "MergePolicy.h" +#include "MergeScheduler.h" +#include "_IndexFileDeleter.h" +#include "_Term.h" +#include +#include +#include + +CL_NS_USE(store) +CL_NS_USE(util) +CL_NS_USE(document) +CL_NS_USE(analysis) +CL_NS_USE(search) +CL_NS_DEF(index) + +int64_t IndexWriter::WRITE_LOCK_TIMEOUT = 1000; +const char* IndexWriter::WRITE_LOCK_NAME = "write.lock"; +std::ostream* IndexWriter::defaultInfoStream = NULL; + +const int32_t IndexWriter::MERGE_READ_BUFFER_SIZE = 4096; +const int32_t IndexWriter::DISABLE_AUTO_FLUSH = -1; +const int32_t IndexWriter::DEFAULT_MAX_BUFFERED_DOCS = DISABLE_AUTO_FLUSH; +const float_t IndexWriter::DEFAULT_RAM_BUFFER_SIZE_MB = 16.0; +const int32_t IndexWriter::DEFAULT_MAX_BUFFERED_DELETE_TERMS = DISABLE_AUTO_FLUSH; +const int32_t IndexWriter::DEFAULT_MAX_MERGE_DOCS = LogDocMergePolicy::DEFAULT_MAX_MERGE_DOCS; +const int32_t IndexWriter::DEFAULT_MERGE_FACTOR = LogMergePolicy::DEFAULT_MERGE_FACTOR; + +DEFINE_MUTEX(IndexWriter::MESSAGE_ID_LOCK) +int32_t IndexWriter::MESSAGE_ID = 0; + +class IndexWriter::Internal{ +public: + IndexWriter* _this; + Internal(IndexWriter* _this){ + this->_this = _this; + } + // Apply buffered delete terms to the segment just flushed from ram + // apply appropriately so that a delete term is only applied to + // the documents buffered before it, not those buffered after it. + void applyDeletesSelectively(const DocumentsWriter::TermNumMapType& deleteTerms, + const std::vector& deleteIds,IndexReader* reader); + + // Apply buffered delete terms to this reader. + void applyDeletes(const DocumentsWriter::TermNumMapType& deleteTerms, IndexReader* reader); +}; + +void IndexWriter::deinit(bool releaseWriteLock) throw() { + if (writeLock != NULL && releaseWriteLock) { + writeLock->release(); // release write lock + _CLLDELETE(writeLock); + } + _CLLDELETE(segmentInfos); + _CLLDELETE(mergingSegments); + _CLLDELETE(pendingMerges); + _CLLDELETE(runningMerges); + _CLLDELETE(mergeExceptions); + _CLLDELETE(segmentsToOptimize); + _CLLDELETE(mergeScheduler); + _CLLDELETE(mergePolicy); + _CLLDELETE(deleter); + _CLLDELETE(docWriter); + if (bOwnsDirectory) _CLLDECDELETE(directory); + delete _internal; +} + +IndexWriter::~IndexWriter(){ + deinit(); +} + +void IndexWriter::ensureOpen() { + if (closed) { + _CLTHROWA(CL_ERR_AlreadyClosed, "this IndexWriter is closed"); + } +} + +void IndexWriter::message(string message) { + if (infoStream != NULL){ + (*infoStream) << string("IW ") << Misc::toString(messageID) << string(" [") + << Misc::toString( _LUCENE_CURRTHREADID ) << string("]: ") << message << string("\n"); + } +} + +void IndexWriter::setMessageID() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + if (infoStream != NULL && messageID == -1) { + { SCOPED_LOCK_MUTEX(MESSAGE_ID_LOCK) + messageID = MESSAGE_ID++; + } + } +} + +LogMergePolicy* IndexWriter::getLogMergePolicy() const{ + if ( mergePolicy->instanceOf(LogMergePolicy::getClassName()) ) + return (LogMergePolicy*) mergePolicy; + else + _CLTHROWA(CL_ERR_IllegalArgument, "this method can only be called when the merge policy is the default LogMergePolicy"); +} + +bool IndexWriter::getUseCompoundFile() { + return getLogMergePolicy()->getUseCompoundFile(); +} + + +void IndexWriter::setUseCompoundFile(bool value) { + getLogMergePolicy()->setUseCompoundFile(value); + getLogMergePolicy()->setUseCompoundDocStore(value); +} + +void IndexWriter::setSimilarity(Similarity* similarity) { + ensureOpen(); + this->similarity = similarity; +} + +Similarity* IndexWriter::getSimilarity() { + ensureOpen(); + return this->similarity; +} + + +void IndexWriter::setTermIndexInterval(int32_t interval) { + ensureOpen(); + this->termIndexInterval = interval; +} + +int32_t IndexWriter::getTermIndexInterval() { + ensureOpen(); + return termIndexInterval; +} + +IndexWriter::IndexWriter(const char* path, Analyzer* a, bool create):bOwnsDirectory(true){ + init(FSDirectory::getDirectory(path, create), a, create, true, (IndexDeletionPolicy*)NULL, true); +} + +IndexWriter::IndexWriter(Directory* d, Analyzer* a, bool create, bool closeDir):bOwnsDirectory(false){ + init(d, a, create, closeDir, NULL, true); +} + +IndexWriter::IndexWriter(Directory* d, bool autoCommit, Analyzer* a, IndexDeletionPolicy* deletionPolicy, bool closeDirOnShutdown):bOwnsDirectory(false){ + init(d, a, closeDirOnShutdown, deletionPolicy, autoCommit); +} + +IndexWriter::IndexWriter(Directory* d, bool autoCommit, Analyzer* a, bool create, IndexDeletionPolicy* deletionPolicy, bool closeDirOnShutdown):bOwnsDirectory(false){ + init(d, a, create, closeDirOnShutdown, deletionPolicy, autoCommit); +} + +void IndexWriter::init(Directory* d, Analyzer* a, bool closeDir, IndexDeletionPolicy* deletionPolicy, bool autoCommit){ + if (IndexReader::indexExists(d)) { + init(d, a, false, closeDir, deletionPolicy, autoCommit); + } else { + init(d, a, true, closeDir, deletionPolicy, autoCommit); + } +} + +void IndexWriter::init(Directory* d, Analyzer* a, const bool create, const bool closeDir, + IndexDeletionPolicy* deletionPolicy, const bool autoCommit){ + this->_internal = new Internal(this); + this->termIndexInterval = IndexWriter::DEFAULT_TERM_INDEX_INTERVAL; + this->mergeScheduler = _CLNEW SerialMergeScheduler(); //TODO: implement and use ConcurrentMergeScheduler + this->mergingSegments = _CLNEW MergingSegmentsType; + this->pendingMerges = _CLNEW PendingMergesType; + this->runningMerges = _CLNEW RunningMergesType; + this->mergeExceptions = _CLNEW MergeExceptionsType; + this->segmentsToOptimize = _CLNEW SegmentsToOptimizeType; + this->mergePolicy = _CLNEW LogByteSizeMergePolicy(); + this->localRollbackSegmentInfos = NULL; + this->stopMerges = false; + messageID = -1; + maxFieldLength = FIELD_TRUNC_POLICY__WARN; + infoStream = NULL; + this->mergeFactor = this->minMergeDocs = this->maxMergeDocs = 0; + this->commitLockTimeout =0; + this->closeDir = closeDir; + this->commitPending = this->closed = this->closing = false; + directory = d; + analyzer = a; + this->infoStream = defaultInfoStream; + setMessageID(); + this->writeLockTimeout = IndexWriter::WRITE_LOCK_TIMEOUT; + this->similarity = Similarity::getDefault(); + this->hitOOM = false; + this->autoCommit = true; + this->segmentInfos = _CLNEW SegmentInfos; + this->mergeGen = 0; + this->rollbackSegmentInfos = NULL; + this->deleter = NULL; + this->docWriter = NULL; + this->writeLock = NULL; + + if (create) { + // Clear the write lock in case it's leftover: + directory->clearLock(IndexWriter::WRITE_LOCK_NAME); + } + + bool hasLock = false; + try { + writeLock = directory->makeLock(IndexWriter::WRITE_LOCK_NAME); + hasLock = writeLock->obtain(writeLockTimeout); + if (!hasLock) // obtain write lock + _CLTHROWA(CL_ERR_LockObtainFailed, (string("Index locked for write: ") + writeLock->getObjectName()).c_str() ); + } catch (...) { + deinit(hasLock); + _CLLDELETE(writeLock); + throw; + } + + try { + if (create) { + // Try to read first. This is to allow create + // against an index that's currently open for + // searching. In this case we write the next + // segments_N file with no segments: + try { + segmentInfos->read(directory); + segmentInfos->clear(); + } catch (CLuceneError& e) { + if ( e.number() != CL_ERR_IO ) throw e; + // Likely this means it's a fresh directory + } + segmentInfos->write(directory); + } else { + segmentInfos->read(directory); + } + + this->autoCommit = autoCommit; + if (!autoCommit) { + rollbackSegmentInfos = segmentInfos->clone(); + }else{ + rollbackSegmentInfos = NULL; + } + + docWriter = _CLNEW DocumentsWriter(directory, this); + docWriter->setInfoStream(infoStream); + + // Default deleter (for backwards compatibility) is + // KeepOnlyLastCommitDeleter: + deleter = _CLNEW IndexFileDeleter(directory, + deletionPolicy == NULL ? _CLNEW KeepOnlyLastCommitDeletionPolicy() : deletionPolicy, + segmentInfos, infoStream, docWriter); + + pushMaxBufferedDocs(); + + if (infoStream != NULL) { + message( string("init: create=") + (create ? "true" : "false") ); + messageState(); + } + + } catch (CLuceneError& e) { + deinit(e.number() == CL_ERR_IO); + throw e; + } +} + +void IndexWriter::setMergePolicy(MergePolicy* mp) { + ensureOpen(); + if (mp == NULL) + _CLTHROWA(CL_ERR_NullPointer, "MergePolicy must be non-NULL"); + + if (mergePolicy != mp){ + mergePolicy->close(); + _CLDELETE(mergePolicy); + } + mergePolicy = mp; + pushMaxBufferedDocs(); + if (infoStream != NULL) + message(string("setMergePolicy ") + mp->getObjectName()); +} + +MergePolicy* IndexWriter::getMergePolicy() { + ensureOpen(); + return mergePolicy; +} + +void IndexWriter::setMergeScheduler(MergeScheduler* mergeScheduler) { + ensureOpen(); + if (mergeScheduler == NULL) + _CLTHROWA(CL_ERR_NullPointer, "MergeScheduler must be non-NULL"); + + if (this->mergeScheduler != mergeScheduler) { + finishMerges(true); + this->mergeScheduler->close(); + _CLLDELETE(this->mergeScheduler) + } + this->mergeScheduler = mergeScheduler; + if (infoStream != NULL) + message( string("setMergeScheduler ") + mergeScheduler->getObjectName()); +} + +MergeScheduler* IndexWriter::getMergeScheduler() { + ensureOpen(); + return mergeScheduler; +} + +void IndexWriter::setMaxMergeDocs(int32_t maxMergeDocs) { + getLogMergePolicy()->setMaxMergeDocs(maxMergeDocs); +} + +int32_t IndexWriter::getMaxMergeDocs() const{ + return getLogMergePolicy()->getMaxMergeDocs(); +} + +void IndexWriter::setMaxFieldLength(int32_t maxFieldLength) { + ensureOpen(); + this->maxFieldLength = maxFieldLength; + if (infoStream != NULL) + message( "setMaxFieldLength " + Misc::toString(maxFieldLength) ); +} + +int32_t IndexWriter::getMaxFieldLength() { + ensureOpen(); + return maxFieldLength; +} + +void IndexWriter::setMaxBufferedDocs(int32_t maxBufferedDocs) { + ensureOpen(); + if (maxBufferedDocs != DISABLE_AUTO_FLUSH && maxBufferedDocs < 2) + _CLTHROWA(CL_ERR_IllegalArgument, + "maxBufferedDocs must at least be 2 when enabled"); + if (maxBufferedDocs == DISABLE_AUTO_FLUSH + && (int32_t)getRAMBufferSizeMB() == DISABLE_AUTO_FLUSH) + _CLTHROWA(CL_ERR_IllegalArgument, + "at least one of ramBufferSize and maxBufferedDocs must be enabled"); + docWriter->setMaxBufferedDocs(maxBufferedDocs); + pushMaxBufferedDocs(); + if (infoStream != NULL) + message("setMaxBufferedDocs " + Misc::toString(maxBufferedDocs)); +} + +void IndexWriter::pushMaxBufferedDocs() { + if (docWriter->getMaxBufferedDocs() != DISABLE_AUTO_FLUSH) { + const MergePolicy* mp = mergePolicy; + if (mp->instanceOf(LogDocMergePolicy::getClassName())) { + LogDocMergePolicy* lmp = (LogDocMergePolicy*) mp; + const int32_t maxBufferedDocs = docWriter->getMaxBufferedDocs(); + if (lmp->getMinMergeDocs() != maxBufferedDocs) { + if (infoStream != NULL){ + message(string("now push maxBufferedDocs ") + Misc::toString(maxBufferedDocs) + " to LogDocMergePolicy"); + } + lmp->setMinMergeDocs(maxBufferedDocs); + } + } + } +} + +int32_t IndexWriter::getMaxBufferedDocs() { + ensureOpen(); + return docWriter->getMaxBufferedDocs(); +} + +void IndexWriter::setRAMBufferSizeMB(float_t mb) { + if ( (int32_t)mb != DISABLE_AUTO_FLUSH && mb <= 0.0) + _CLTHROWA(CL_ERR_IllegalArgument, + "ramBufferSize should be > 0.0 MB when enabled"); + if (mb == DISABLE_AUTO_FLUSH && getMaxBufferedDocs() == DISABLE_AUTO_FLUSH) + _CLTHROWA(CL_ERR_IllegalArgument, + "at least one of ramBufferSize and maxBufferedDocs must be enabled"); + docWriter->setRAMBufferSizeMB(mb); + if (infoStream != NULL){ + message(string("setRAMBufferSizeMB ") + Misc::toString(mb)); + } +} + +float_t IndexWriter::getRAMBufferSizeMB() { + return docWriter->getRAMBufferSizeMB(); +} + +void IndexWriter::setMaxBufferedDeleteTerms(int32_t maxBufferedDeleteTerms) { + ensureOpen(); + if (maxBufferedDeleteTerms != DISABLE_AUTO_FLUSH + && maxBufferedDeleteTerms < 1) + _CLTHROWA(CL_ERR_IllegalArgument, + "maxBufferedDeleteTerms must at least be 1 when enabled"); + docWriter->setMaxBufferedDeleteTerms(maxBufferedDeleteTerms); + if (infoStream != NULL) + message("setMaxBufferedDeleteTerms " + Misc::toString(maxBufferedDeleteTerms)); +} + +int32_t IndexWriter::getMaxBufferedDeleteTerms() { + ensureOpen(); + return docWriter->getMaxBufferedDeleteTerms(); +} + +void IndexWriter::setMergeFactor(int32_t mergeFactor) { + getLogMergePolicy()->setMergeFactor(mergeFactor); +} + +int32_t IndexWriter::getMergeFactor() const { + return getLogMergePolicy()->getMergeFactor(); +} + +void IndexWriter::setDefaultInfoStream(std::ostream* infoStream) { + IndexWriter::defaultInfoStream = infoStream; +} + +std::ostream* IndexWriter::getDefaultInfoStream() { + return IndexWriter::defaultInfoStream; +} + +//TODO: infoStream - unicode +void IndexWriter::setInfoStream(std::ostream* infoStream) { + ensureOpen(); + this->infoStream = infoStream; + setMessageID(); + docWriter->setInfoStream(infoStream); + deleter->setInfoStream(infoStream); + if (infoStream != NULL) + messageState(); +} + +void IndexWriter::messageState() { + message( string("setInfoStream: dir=") + directory->toString() + + " autoCommit=" + (autoCommit?"true":"false" + + string(" mergePolicy=") + mergePolicy->getObjectName() + + " mergeScheduler=" + mergeScheduler->getObjectName() + + " ramBufferSizeMB=" + Misc::toString(docWriter->getRAMBufferSizeMB()) + + " maxBuffereDocs=" + Misc::toString(docWriter->getMaxBufferedDocs())) + + " maxBuffereDeleteTerms=" + Misc::toString(docWriter->getMaxBufferedDeleteTerms()) + + " maxFieldLength=" + Misc::toString(maxFieldLength) + + " index=" + segString()); +} + +std::ostream* IndexWriter::getInfoStream() { + ensureOpen(); + return infoStream; +} + +void IndexWriter::setWriteLockTimeout(int64_t writeLockTimeout) { + ensureOpen(); + this->writeLockTimeout = writeLockTimeout; +} + +int64_t IndexWriter::getWriteLockTimeout() { + ensureOpen(); + return writeLockTimeout; +} + +void IndexWriter::setDefaultWriteLockTimeout(int64_t writeLockTimeout) { + IndexWriter::WRITE_LOCK_TIMEOUT = writeLockTimeout; +} + +int64_t IndexWriter::getDefaultWriteLockTimeout() { + return IndexWriter::WRITE_LOCK_TIMEOUT; +} + +void IndexWriter::close(bool waitForMerges) { + bool doClose; + + // If any methods have hit OutOfMemoryError, then abort + // on close, in case the internal state of IndexWriter + // or DocumentsWriter is corrupt + if (hitOOM) + abort(); + + { SCOPED_LOCK_MUTEX(this->THIS_LOCK) + // Ensure that only one thread actually gets to do the closing: + if (!closing) { + doClose = true; + closing = true; + } else + doClose = false; + } + if (doClose) + closeInternal(waitForMerges); + else + // Another thread beat us to it (is actually doing the + // close), so we will block until that other thread + // has finished closing + waitForClose(); +} + +void IndexWriter::waitForClose() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + while(!closed && closing) { + CONDITION_WAIT(THIS_LOCK, THIS_WAIT_CONDITION) + } +} + +void IndexWriter::closeInternal(bool waitForMerges) { + try { + if (infoStream != NULL) + message(string("now flush at close")); + + docWriter->close(); + + // Only allow a _CLNEW merge to be triggered if we are + // going to wait for merges: + flush(waitForMerges, true); + + if (waitForMerges) + // Give merge scheduler last chance to run, in case + // any pending merges are waiting: + mergeScheduler->merge(this); + + mergePolicy->close(); + + finishMerges(waitForMerges); + + mergeScheduler->close(); + + { SCOPED_LOCK_MUTEX(this->THIS_LOCK) + if (commitPending) { + bool success = false; + try { + segmentInfos->write(directory); // now commit changes + success = true; + } _CLFINALLY ( + if (!success) { + if (infoStream != NULL) + message(string("hit exception committing segments file during close")); + deletePartialSegmentsFile(); + } + ) + if (infoStream != NULL) + message("close: wrote segments file \"" + segmentInfos->getCurrentSegmentFileName() + "\""); + + deleter->checkpoint(segmentInfos, true); + + commitPending = false; +// _CLDELETE(rollbackSegmentInfos); + } + _CLDELETE(rollbackSegmentInfos); + + + if (infoStream != NULL) + message("at close: " + segString()); + + _CLDELETE(docWriter); + deleter->close(); + } + + if (closeDir) + directory->close(); + + if (writeLock != NULL) { + writeLock->release(); // release write lock + _CLDELETE(writeLock); + } + closed = true; + } catch (std::bad_alloc&) { + hitOOM = true; + _CLTHROWA(CL_ERR_OutOfMemory,"Out of memory"); + } _CLFINALLY ( + { SCOPED_LOCK_MUTEX(this->THIS_LOCK) + if (!closed) { + closing = false; + if (infoStream != NULL) + message(string("hit exception while closing")); + } + CONDITION_NOTIFYALL(THIS_WAIT_CONDITION) + } + ) +} + +bool IndexWriter::flushDocStores() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + + const std::vector& files = docWriter->files(); + + bool useCompoundDocStore = false; + + if (files.size() > 0) { + string docStoreSegment; + + bool success = false; + try { + docStoreSegment = docWriter->closeDocStore(); + success = true; + } _CLFINALLY ( + if (!success) { + if (infoStream != NULL) + message(string("hit exception closing doc store segment")); + docWriter->abort(NULL); + } + ) + + useCompoundDocStore = mergePolicy->useCompoundDocStore(segmentInfos); + + if (useCompoundDocStore && !docStoreSegment.empty()) { + // Now build compound doc store file + + success = false; + + const int32_t numSegments = segmentInfos->size(); + const string compoundFileName = docStoreSegment + "." + IndexFileNames::COMPOUND_FILE_STORE_EXTENSION; + + try { + CompoundFileWriter cfsWriter(directory, compoundFileName.c_str()); + const size_t size = files.size(); + for(size_t i=0;iinfo(i); + if (si->getDocStoreOffset() != -1 && + si->getDocStoreSegment().compare(docStoreSegment)==0) + si->setDocStoreIsCompoundFile(true); + } + checkpoint(); + success = true; + } _CLFINALLY ( + if (!success) { + + if (infoStream != NULL) + message("hit exception building compound file doc store for segment " + docStoreSegment); + + // Rollback to no compound file + for(int32_t i=0;iinfo(i); + if (si->getDocStoreOffset() != -1 && + si->getDocStoreSegment().compare(docStoreSegment)==0 ) + si->setDocStoreIsCompoundFile(false); + } + deleter->deleteFile(compoundFileName.c_str()); + deletePartialSegmentsFile(); + } + ) + + deleter->checkpoint(segmentInfos, false); + } + } + + return useCompoundDocStore; +} + +Directory* IndexWriter::getDirectory() { + ensureOpen(); + return directory; +} + +Analyzer* IndexWriter::getAnalyzer() { + ensureOpen(); + return analyzer; +} + +int32_t IndexWriter::docCount() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + ensureOpen(); + int32_t count = docWriter->getNumDocsInRAM(); + for (int32_t i = 0; i < segmentInfos->size(); i++) { + SegmentInfo* si = segmentInfos->info(i); + count += si->docCount; + } + return count; +} + + +void IndexWriter::addDocument(Document* doc, Analyzer* analyzer) { + if ( analyzer == NULL ) analyzer = this->analyzer; + ensureOpen(); + bool doFlush = false; + bool success = false; + try { + try { + doFlush = docWriter->addDocument(doc, analyzer); + success = true; + } _CLFINALLY ( + if (!success) { + + if (infoStream != NULL) + message(string("hit exception adding document")); + + { SCOPED_LOCK_MUTEX(this->THIS_LOCK) + // If docWriter has some aborted files that were + // never incref'd, then we clean them up here + if (docWriter != NULL) { + const std::vector* files = docWriter->abortedFiles(); + if (files != NULL ) + deleter->deleteNewFiles(*files); + } + } + } + ) + if (doFlush) + flush(true, false); + } catch (std::bad_alloc&) { + hitOOM = true; + _CLTHROWA(CL_ERR_OutOfMemory,"Out of memory"); + } +} + +void IndexWriter::deleteDocuments(Term* term) { + ensureOpen(); + try { + bool doFlush = docWriter->bufferDeleteTerm(term); + if (doFlush) + flush(true, false); + } catch (std::bad_alloc&) { + hitOOM = true; + _CLTHROWA(CL_ERR_OutOfMemory,"Out of memory"); + } +} + +void IndexWriter::deleteDocuments(const ArrayBase* terms) { + ensureOpen(); + try { + bool doFlush = docWriter->bufferDeleteTerms(terms); + if (doFlush) + flush(true, false); + } catch (std::bad_alloc&) { + hitOOM = true; + _CLTHROWA(CL_ERR_OutOfMemory,"Out of memory"); + } +} + +void IndexWriter::updateDocument(Term* term, Document* doc) { + ensureOpen(); + updateDocument(term, doc, getAnalyzer()); +} + +void IndexWriter::updateDocument(Term* term, Document* doc, Analyzer* analyzer) +{ + ensureOpen(); + try { + bool doFlush = false; + bool success = false; + try { + doFlush = docWriter->updateDocument(term, doc, analyzer); + success = true; + } _CLFINALLY ( + if (!success) { + + if (infoStream != NULL) + message(string("hit exception updating document")); + + { SCOPED_LOCK_MUTEX(this->THIS_LOCK) + // If docWriter has some aborted files that were + // never incref'd, then we clean them up here + const std::vector* files = docWriter->abortedFiles(); + if (files != NULL) + deleter->deleteNewFiles(*files); + } + } + ) + if (doFlush) + flush(true, false); + } catch (std::bad_alloc&) { + hitOOM = true; + _CLTHROWA(CL_ERR_OutOfMemory,"Out of memory"); + } +} + +// for test purpose +int32_t IndexWriter::getSegmentCount(){ + SCOPED_LOCK_MUTEX(THIS_LOCK) + return segmentInfos->size(); +} + +// for test purpose +int32_t IndexWriter::getNumBufferedDocuments(){ + SCOPED_LOCK_MUTEX(THIS_LOCK) + return docWriter->getNumDocsInRAM(); +} + +// for test purpose +int32_t IndexWriter::getDocCount(int32_t i) { + SCOPED_LOCK_MUTEX(THIS_LOCK) + if (i >= 0 && i < segmentInfos->size()) { + return segmentInfos->info(i)->docCount; + } else { + return -1; + } +} + +string IndexWriter::newSegmentName() { + // Cannot synchronize on IndexWriter because that causes + // deadlock + { SCOPED_LOCK_MUTEX(segmentInfos->THIS_LOCK) + // Important to set commitPending so that the + // segmentInfos is written on close. Otherwise we + // could close, re-open and re-return the same segment + // name that was previously returned which can cause + // problems at least with ConcurrentMergeScheduler. + commitPending = true; + + char buf[10]; + Misc::longToBase(segmentInfos->counter++, 36,buf); + return string("_") + buf; + } +} + +void IndexWriter::optimize(bool doWait) { + optimize(1, doWait); +} + +void IndexWriter::optimize(int32_t maxNumSegments, bool doWait) { + ensureOpen(); + + if (maxNumSegments < 1) + _CLTHROWA(CL_ERR_IllegalArgument, (string("maxNumSegments must be >= 1; got ") + Misc::toString(maxNumSegments)).c_str()); + + if (infoStream != NULL) + message("optimize: index now " + segString()); + + flush(); + + { SCOPED_LOCK_MUTEX(this->THIS_LOCK) + resetMergeExceptions(); + segmentsToOptimize->clear(); + const int32_t numSegments = segmentInfos->size(); + for(int32_t i=0;ipush_back(segmentInfos->info(i)); + + // Now mark all pending & running merges as optimize + // merge: + PendingMergesType::iterator it = pendingMerges->begin(); + while(it != pendingMerges->end()) { + MergePolicy::OneMerge* _merge = *it; + _merge->optimize = true; + _merge->maxNumSegmentsOptimize = maxNumSegments; + + it++; + } + + RunningMergesType::iterator it2 = runningMerges->begin(); + while(it2 != runningMerges->end()) { + MergePolicy::OneMerge* _merge = *it2; + _merge->optimize = true; + _merge->maxNumSegmentsOptimize = maxNumSegments; + + it2++; + } + } + + maybeMerge(maxNumSegments, true); + + if (doWait) { + { SCOPED_LOCK_MUTEX(this->THIS_LOCK) + while(optimizeMergesPending()) { + CONDITION_WAIT(THIS_LOCK, THIS_WAIT_CONDITION); + + if (mergeExceptions->size() > 0) { + // Forward any exceptions in background merge + // threads to the current thread: + const int32_t size = mergeExceptions->size(); + for(int32_t i=0;ioptimize) { + CLuceneError tmp(_merge->getException()); + CLuceneError err(tmp.number(), + (string("background merge hit exception: ") + _merge->segString(directory) + ":" + tmp.what() ).c_str(), false ); + throw err; + } + } + } + } + } + } + + // NOTE: in the ConcurrentMergeScheduler case, when + // doWait is false, we can return immediately while + // background threads accomplish the optimization +} + +bool IndexWriter::optimizeMergesPending() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + for(PendingMergesType::iterator it = pendingMerges->begin(); + it != pendingMerges->end(); it++){ + if ((*it)->optimize) + return true; + + it++; + } + + for(RunningMergesType::iterator it = runningMerges->begin(); + it != runningMerges->end(); it++){ + if ((*it)->optimize) + return true; + + it++; + } + + return false; +} + +void IndexWriter::maybeMerge() { + maybeMerge(false); +} + +void IndexWriter::maybeMerge(bool optimize) { + maybeMerge(1, optimize); +} + +void IndexWriter::maybeMerge(int32_t maxNumSegmentsOptimize, bool optimize) { + updatePendingMerges(maxNumSegmentsOptimize, optimize); + mergeScheduler->merge(this); +} + +void IndexWriter::updatePendingMerges(int32_t maxNumSegmentsOptimize, bool optimize){ + SCOPED_LOCK_MUTEX(THIS_LOCK) + assert (!optimize || maxNumSegmentsOptimize > 0); + + if (stopMerges) + return; + + MergePolicy::MergeSpecification* spec; + if (optimize) { + spec = mergePolicy->findMergesForOptimize(segmentInfos, this, maxNumSegmentsOptimize, *segmentsToOptimize); + + if (spec != NULL) { + const int32_t numMerges = spec->merges->size(); + for(int32_t i=0;imerges)[i]; + _merge->optimize = true; + _merge->maxNumSegmentsOptimize = maxNumSegmentsOptimize; + } + } + + } else + spec = mergePolicy->findMerges(segmentInfos, this); + + if (spec != NULL) { + const int32_t numMerges = spec->merges->size(); + for(int32_t i=0;imerges)[i])) + _CLLDELETE((*spec->merges)[i]); + } + } + _CLDELETE(spec); +} + +MergePolicy::OneMerge* IndexWriter::getNextMerge() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + if (pendingMerges->size() == 0) + return NULL; + else { + // Advance the merge from pending to running + MergePolicy::OneMerge* _merge = *pendingMerges->begin(); + pendingMerges->pop_front(); + runningMerges->insert(_merge); + return _merge; + } +} + + +void IndexWriter::startTransaction() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + + if (infoStream != NULL) + message(string("now start transaction")); + + CND_PRECONDITION(docWriter->getNumBufferedDeleteTerms() == 0, + "calling startTransaction with buffered delete terms not supported"); + CND_PRECONDITION (docWriter->getNumDocsInRAM() == 0, + "calling startTransaction with buffered documents not supported"); + + localRollbackSegmentInfos = segmentInfos->clone(); + localAutoCommit = autoCommit; + + if (localAutoCommit) { + + if (infoStream != NULL) + message(string("flush at startTransaction")); + + flush(); + // Turn off auto-commit during our local transaction: + autoCommit = false; + } else + // We must "protect" our files at this point from + // deletion in case we need to rollback: + deleter->incRef(segmentInfos, false); +} + +void IndexWriter::rollbackTransaction() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + + if (infoStream != NULL) + message(string("now rollback transaction")); + + // First restore autoCommit in case we hit an exception below: + autoCommit = localAutoCommit; + + // Keep the same segmentInfos instance but replace all + // of its SegmentInfo instances. This is so the next + // attempt to commit using this instance of IndexWriter + // will always write to a _CLNEW generation ("write once"). + segmentInfos->clear(); + segmentInfos->insert(localRollbackSegmentInfos, true); + _CLDELETE(localRollbackSegmentInfos); + + // Ask deleter to locate unreferenced files we had + // created & remove them: + deleter->checkpoint(segmentInfos, false); + + if (!autoCommit) + // Remove the incRef we did in startTransaction: + deleter->decRef(segmentInfos); + + deleter->refresh(); + finishMerges(false); + stopMerges = false; +} + +void IndexWriter::commitTransaction() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + + if (infoStream != NULL) + message(string("now commit transaction")); + + // First restore autoCommit in case we hit an exception below: + autoCommit = localAutoCommit; + + bool success = false; + try { + checkpoint(); + success = true; + } _CLFINALLY ( + if (!success) { + if (infoStream != NULL) + message(string("hit exception committing transaction")); + + rollbackTransaction(); + } + ) + + if (!autoCommit) + // Remove the incRef we did in startTransaction. + deleter->decRef(localRollbackSegmentInfos); + + _CLDELETE(localRollbackSegmentInfos); + + // Give deleter a chance to remove files now: + deleter->checkpoint(segmentInfos, autoCommit); +} + +void IndexWriter::abort() { + ensureOpen(); + if (autoCommit) + _CLTHROWA(CL_ERR_IllegalState,"abort() can only be called when IndexWriter was opened with autoCommit=false"); + + bool doClose; + { SCOPED_LOCK_MUTEX(this->THIS_LOCK) + // Ensure that only one thread actually gets to do the closing: + if (!closing) { + doClose = true; + closing = true; + } else + doClose = false; + } + + if (doClose) { + + finishMerges(false); + + // Must pre-close these two, in case they set + // commitPending=true, so that we can then set it to + // false before calling closeInternal + mergePolicy->close(); + mergeScheduler->close(); + + { SCOPED_LOCK_MUTEX(this->THIS_LOCK) + // Keep the same segmentInfos instance but replace all + // of its SegmentInfo instances. This is so the next + // attempt to commit using this instance of IndexWriter + // will always write to a _CLNEW generation ("write + // once"). + segmentInfos->clear(); + segmentInfos->insert(rollbackSegmentInfos, false); + + docWriter->abort(NULL); + + // Ask deleter to locate unreferenced files & remove + // them: + deleter->checkpoint(segmentInfos, false); + deleter->refresh(); + } + + commitPending = false; + closeInternal(false); + } else + waitForClose(); +} + +void IndexWriter::finishMerges(bool waitForMerges) { + SCOPED_LOCK_MUTEX(THIS_LOCK) + if (!waitForMerges) { + + stopMerges = true; + + // Abort all pending & running merges: + for(PendingMergesType::iterator it = pendingMerges->begin(); + it != pendingMerges->end(); it++ ){ + MergePolicy::OneMerge* _merge = *it; + if (infoStream != NULL) + message("now abort pending merge " + _merge->segString(directory)); + _merge->abort(); + mergeFinish(_merge); + + it++; + } + pendingMerges->clear(); + + for(RunningMergesType::iterator it = runningMerges->begin(); + it != runningMerges->end(); it++ ){ + MergePolicy::OneMerge* _merge = *it; + if (infoStream != NULL) + message("now abort running merge " + _merge->segString(directory)); + _merge->abort(); + + it++; + } + + // These merges periodically check whether they have + // been aborted, and stop if so. We wait here to make + // sure they all stop. It should not take very int64_t + // because the merge threads periodically check if + // they are aborted. + while(runningMerges->size() > 0) { + if (infoStream != NULL) + message( string("now wait for ") + Misc::toString( (int32_t)runningMerges->size()) + " running merge to abort"); + CONDITION_WAIT(THIS_LOCK, THIS_WAIT_CONDITION) + } + + assert (0 == mergingSegments->size()); + + if (infoStream != NULL) + message(string("all running merges have aborted")); + + } else { + while(pendingMerges->size() > 0 || runningMerges->size() > 0) { + CONDITION_WAIT(THIS_LOCK, THIS_WAIT_CONDITION) + } + assert (0 == mergingSegments->size()); + } +} + +void IndexWriter::checkpoint() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + if (autoCommit) { + segmentInfos->write(directory); + commitPending = false; + if (infoStream != NULL) + message("checkpoint: wrote segments file \"" + segmentInfos->getCurrentSegmentFileName() + "\""); + } else { + commitPending = true; + } +} + +void IndexWriter::addIndexes(CL_NS(util)::ArrayBase& dirs){ + + ensureOpen(); + + // Do not allow add docs or deletes while we are running: + docWriter->pauseAllThreads(); + + try { + + if (infoStream != NULL) + message(string("flush at addIndexes")); + flush(); + + bool success = false; + + startTransaction(); + + try { + + { SCOPED_LOCK_MUTEX(this->THIS_LOCK) + for (int32_t i = 0; i< dirs.length; i++) { + SegmentInfos sis; // read infos from dir + sis.read(dirs[i]); + segmentInfos->insert(&sis,true); // add each info + } + } + + optimize(); + + success = true; + } _CLFINALLY ( + if (success) { + commitTransaction(); + } else { + rollbackTransaction(); + } + ) + } catch (std::bad_alloc&) { + hitOOM = true; + _CLTHROWA(CL_ERR_OutOfMemory,"Out of memory"); + } _CLFINALLY ( + docWriter->resumeAllThreads(); + ) +} + +void IndexWriter::resetMergeExceptions() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + mergeExceptions->clear(); + mergeGen++; +} + +void IndexWriter::addIndexesNoOptimize(CL_NS(util)::ArrayBase& dirs) +{ + ensureOpen(); + + // Do not allow add docs or deletes while we are running: + docWriter->pauseAllThreads(); + + try { + if (infoStream != NULL) + message(string("flush at addIndexesNoOptimize")); + flush(); + + bool success = false; + + startTransaction(); + + try { + + { SCOPED_LOCK_MUTEX(this->THIS_LOCK) + for (int32_t i = 0; i< dirs.length; i++) { + if (directory == dirs[i]) { + // cannot add this index: segments may be deleted in merge before added + _CLTHROWA(CL_ERR_IllegalArgument,"Cannot add this index to itself"); + } + + SegmentInfos sis; // read infos from dir + sis.read(dirs[i]); + segmentInfos->insert(&sis, true); + } + } + + maybeMerge(); + + // If after merging there remain segments in the index + // that are in a different directory, just copy these + // over into our index. This is necessary (before + // finishing the transaction) to avoid leaving the + // index in an unusable (inconsistent) state. + copyExternalSegments(); + + success = true; + + } _CLFINALLY ( + if (success) { + commitTransaction(); + } else { + rollbackTransaction(); + } + ) + } catch (std::bad_alloc&) { + hitOOM = true; + _CLTHROWA(CL_ERR_OutOfMemory,"Out of memory"); + } _CLFINALLY ( + docWriter->resumeAllThreads(); + ) +} + +void IndexWriter::copyExternalSegments() { + + bool any = false; + + while(true) { + SegmentInfo* info = NULL; + MergePolicy::OneMerge* _merge = NULL; + { SCOPED_LOCK_MUTEX(this->THIS_LOCK) + const int32_t numSegments = segmentInfos->size(); + for(int32_t i=0;iinfo(i); + if (info->dir != directory) { + SegmentInfos* range = _CLNEW SegmentInfos; + segmentInfos->range(i, 1+i, *range); + _merge = _CLNEW MergePolicy::OneMerge(range, info->getUseCompoundFile()); + break; + } + } + } + + if (_merge != NULL) { + if (registerMerge(_merge)) { + PendingMergesType::iterator p = std::find(pendingMerges->begin(),pendingMerges->end(), _merge); + pendingMerges->remove(p,true); + runningMerges->insert(_merge); + any = true; + merge(_merge); + } else + // This means there is a bug in the + // MergeScheduler. MergeSchedulers in general are + // not allowed to run a merge involving segments + // external to this IndexWriter's directory in the + // background because this would put the index + // into an inconsistent state (where segmentInfos + // has been written with such external segments + // that an IndexReader would fail to load). + _CLTHROWA(CL_ERR_Merge, (string("segment \"") + info->name + " exists in external directory yet the MergeScheduler executed the merge in a separate thread").c_str() ); + } else + // No more external segments + break; + } + + if (any) + // Sometimes, on copying an external segment over, + // more merges may become necessary: + mergeScheduler->merge(this); +} + +void IndexWriter::doAfterFlush(){ +} + +void IndexWriter::flush() { + flush(true, false); +} + +void IndexWriter::flush(bool triggerMerge, bool _flushDocStores) { + ensureOpen(); + + if (doFlush(_flushDocStores) && triggerMerge) + maybeMerge(); +} + +bool IndexWriter::doFlush(bool _flushDocStores) { + SCOPED_LOCK_MUTEX(THIS_LOCK) + + // Make sure no threads are actively adding a document + + // Returns true if docWriter is currently aborting, in + // which case we skip flushing this segment + if (docWriter->pauseAllThreads()) { + docWriter->resumeAllThreads(); + return false; + } + + bool ret = false; + try { + + SegmentInfo* newSegment = NULL; + + const int32_t numDocs = docWriter->getNumDocsInRAM(); + + // Always flush docs if there are any + bool flushDocs = numDocs > 0; + + // With autoCommit=true we always must flush the doc + // stores when we flush + _flushDocStores |= autoCommit; + string docStoreSegment = docWriter->getDocStoreSegment(); + if (docStoreSegment.empty()) + _flushDocStores = false; + + // Always flush deletes if there are any delete terms. + // TODO: when autoCommit=false we don't have to flush + // deletes with every flushed segment; we can save + // CPU/IO by buffering longer & flushing deletes only + // when they are full or writer is being closed. We + // have to fix the "applyDeletesSelectively" logic to + // apply to more than just the last flushed segment + bool flushDeletes = docWriter->hasDeletes(); + + if (infoStream != NULL) { + message(" flush: segment=" + docWriter->getSegment() + + " docStoreSegment=" + docWriter->getDocStoreSegment() + + " docStoreOffset=" + Misc::toString(docWriter->getDocStoreOffset()) + + " flushDocs=" + Misc::toString(flushDocs) + + " flushDeletes=" + Misc::toString(flushDeletes) + + " flushDocStores=" + Misc::toString(_flushDocStores) + + " numDocs=" + Misc::toString(numDocs) + + " numBufDelTerms=" + Misc::toString(docWriter->getNumBufferedDeleteTerms()) ); + message(" index before flush " + segString()); + } + + int32_t docStoreOffset = docWriter->getDocStoreOffset(); + + // docStoreOffset should only be non-zero when + // autoCommit == false + assert (!autoCommit || 0 == docStoreOffset); + + bool docStoreIsCompoundFile = false; + + // Check if the doc stores must be separately flushed + // because other segments, besides the one we are about + // to flush, reference it + if (_flushDocStores && (!flushDocs || docWriter->getSegment().compare(docWriter->getDocStoreSegment()) != 0)) { + // We must separately flush the doc store + if (infoStream != NULL) + message(" flush shared docStore segment " + docStoreSegment); + + docStoreIsCompoundFile = flushDocStores(); + _flushDocStores = false; + } + + string segment = docWriter->getSegment(); + + // If we are flushing docs, segment must not be NULL: + assert (!segment.empty() || !flushDocs); + + if (flushDocs || flushDeletes) { + + SegmentInfos* rollback = NULL; + + if (flushDeletes) + rollback = segmentInfos->clone(); + + bool success = false; + + try { + if (flushDocs) { + + if (0 == docStoreOffset && _flushDocStores) { + // This means we are flushing doc stores + // with this segment, so it will not be shared + // with other segments + assert (!docStoreSegment.empty()); + assert (docStoreSegment.compare(segment)==0); + docStoreOffset = -1; + docStoreIsCompoundFile = false; + docStoreSegment.clear(); + } + + int32_t flushedDocCount = docWriter->flush(_flushDocStores); + + newSegment = _CLNEW SegmentInfo(segment.c_str(), + flushedDocCount, + directory, false, true, + docStoreOffset, docStoreSegment.c_str(), + docStoreIsCompoundFile); + segmentInfos->insert(newSegment); + } + + if (flushDeletes) + // we should be able to change this so we can + // buffer deletes longer and then flush them to + // multiple flushed segments, when + // autoCommit=false + applyDeletes(flushDocs); + + doAfterFlush(); + + checkpoint(); + success = true; + } _CLFINALLY ( + if (!success) { + + if (infoStream != NULL) + message("hit exception flushing segment " + segment); + + if (flushDeletes) { + + // Carefully check if any partial .del files + // should be removed: + const int32_t size = rollback->size(); + for(int32_t i=0;iinfo(i)->getDelFileName(); + const string delFileName = rollback->info(i)->getDelFileName(); + if ( !newDelFileName.empty() && newDelFileName.compare(delFileName)!=0 ) + deleter->deleteFile(newDelFileName.c_str()); + } + + // Fully replace the segmentInfos since flushed + // deletes could have changed any of the + // SegmentInfo instances: + segmentInfos->clear(); + assert(false);//test me.. + segmentInfos->insert(rollback, false); + + } else { + // Remove segment we added, if any: + if ( newSegment != NULL && + segmentInfos->size() > 0 && + segmentInfos->info(segmentInfos->size()-1) == newSegment) + segmentInfos->remove(segmentInfos->size()-1); + } + if (flushDocs) + docWriter->abort(NULL); + deletePartialSegmentsFile(); + deleter->checkpoint(segmentInfos, false); + + if (!segment.empty()) + deleter->refresh(segment.c_str()); + } else if (flushDeletes) + _CLDELETE(rollback); + ) + + deleter->checkpoint(segmentInfos, autoCommit); + + if (flushDocs && mergePolicy->useCompoundFile(segmentInfos, + newSegment)) { + success = false; + try { + docWriter->createCompoundFile(segment); + newSegment->setUseCompoundFile(true); + checkpoint(); + success = true; + } _CLFINALLY ( + if (!success) { + if (infoStream != NULL) + message("hit exception creating compound file for newly flushed segment " + segment); + newSegment->setUseCompoundFile(false); + deleter->deleteFile( (segment + "." + IndexFileNames::COMPOUND_FILE_EXTENSION).c_str() ); + deletePartialSegmentsFile(); + } + ) + + deleter->checkpoint(segmentInfos, autoCommit); + } + + ret = true; + } + + } catch (std::bad_alloc&) { + hitOOM = true; + _CLTHROWA(CL_ERR_OutOfMemory,"Out of memory"); + } _CLFINALLY ( + docWriter->clearFlushPending(); + docWriter->resumeAllThreads(); + ) + return ret; +} + +int64_t IndexWriter::ramSizeInBytes() { + ensureOpen(); + return docWriter->getRAMUsed(); +} + +int32_t IndexWriter::numRamDocs() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + ensureOpen(); + return docWriter->getNumDocsInRAM(); +} + +int32_t IndexWriter::ensureContiguousMerge(MergePolicy::OneMerge* _merge) { + + int32_t first = segmentInfos->indexOf(_merge->segments->info(0)); + if (first == -1) + _CLTHROWA(CL_ERR_Merge, (string("could not find segment ") + _merge->segments->info(0)->name + " in current segments").c_str()); + + const int32_t numSegments = segmentInfos->size(); + + const int32_t numSegmentsToMerge = _merge->segments->size(); + for(int32_t i=0;isegments->info(i); + + if (first + i >= numSegments || !segmentInfos->info(first+i)->equals(info) ) { + if (segmentInfos->indexOf(info) == -1) + _CLTHROWA(CL_ERR_Merge, (string("MergePolicy selected a segment (") + info->name + ") that is not in the index").c_str()); + else + _CLTHROWA(CL_ERR_Merge, (string("MergePolicy selected non-contiguous segments to merge (") + _merge->getObjectName() + " vs " + segString() + "), which IndexWriter (currently) cannot handle").c_str() ); + } + } + + return first; +} + +bool IndexWriter::commitMerge(MergePolicy::OneMerge* _merge) { + SCOPED_LOCK_MUTEX(THIS_LOCK) + + assert (_merge->registerDone); + + if (hitOOM) + return false; + + if (infoStream != NULL) + message("commitMerge: " + _merge->segString(directory)); + + // If merge was explicitly aborted, or, if abort() or + // rollbackTransaction() had been called since our merge + // started (which results in an unqualified + // deleter->refresh() call that will remove any index + // file that current segments does not reference), we + // abort this merge + if (_merge->isAborted()) { + if (infoStream != NULL) + message("commitMerge: skipping merge " + _merge->segString(directory) + ": it was aborted"); + + assert (_merge->increfDone); + decrefMergeSegments(_merge); + deleter->refresh(_merge->info->name.c_str()); + return false; + } + + bool success = false; + + int32_t start; + + try { + SegmentInfos* sourceSegmentsClone = _merge->segmentsClone; + const SegmentInfos* sourceSegments = _merge->segments; + + start = ensureContiguousMerge(_merge); + if (infoStream != NULL) + message("commitMerge " + _merge->segString(directory)); + + // Carefully merge deletes that occurred after we + // started merging: + + BitVector* deletes = NULL; + int32_t docUpto = 0; + + const int32_t numSegmentsToMerge = sourceSegments->size(); + for(int32_t i=0;iinfo(i); + const SegmentInfo* currentInfo = sourceSegments->info(i); + + assert (currentInfo->docCount == previousInfo->docCount); + + const int32_t docCount = currentInfo->docCount; + + if (previousInfo->hasDeletions()) { + + // There were deletes on this segment when the merge + // started. The merge has collapsed away those + // deletes, but, if _CLNEW deletes were flushed since + // the merge started, we must now carefully keep any + // newly flushed deletes but mapping them to the _CLNEW + // docIDs. + + assert (currentInfo->hasDeletions()); + + // Load deletes present @ start of merge, for this segment: + BitVector previousDeletes(previousInfo->dir, previousInfo->getDelFileName().c_str()); + + if (currentInfo->getDelFileName().compare(previousInfo->getDelFileName()) != 0) { + // This means this segment has had new deletes + // committed since we started the merge, so we + // must merge them: + if (deletes == NULL) + deletes = _CLNEW BitVector(_merge->info->docCount); + + BitVector currentDeletes(currentInfo->dir, currentInfo->getDelFileName().c_str()); + for(int32_t j=0;jset(docUpto); + docUpto++; + } + } + } else + docUpto += docCount - previousDeletes.count(); + + } else if (currentInfo->hasDeletions()) { + // This segment had no deletes before but now it + // does: + if (deletes == NULL) + deletes = _CLNEW BitVector(_merge->info->docCount); + BitVector currentDeletes(directory, currentInfo->getDelFileName().c_str()); + + for(int32_t j=0;jset(docUpto); + docUpto++; + } + + } else + // No deletes before or after + docUpto += currentInfo->docCount; + + _merge->checkAborted(directory); + } + + if (deletes != NULL) { + _merge->info->advanceDelGen(); + deletes->write(directory, _merge->info->getDelFileName().c_str() ); + _CLDELETE(deletes); + } + success = true; + } _CLFINALLY ( + if (!success) { + if (infoStream != NULL) + message(string("hit exception creating merged deletes file")); + deleter->refresh(_merge->info->name.c_str()); + } + ) + + // Simple optimization: if the doc store we are using + // has been closed and is in now compound format (but + // wasn't when we started), then we will switch to the + // compound format as well: + const string mergeDocStoreSegment = _merge->info->getDocStoreSegment(); + if ( !mergeDocStoreSegment.empty() && !_merge->info->getDocStoreIsCompoundFile()) { + const int32_t size = segmentInfos->size(); + for(int32_t i=0;iinfo(i); + const string docStoreSegment = info->getDocStoreSegment(); + if ( !docStoreSegment.empty() && + docStoreSegment.compare(mergeDocStoreSegment)==0 && + info->getDocStoreIsCompoundFile()) { + _merge->info->setDocStoreIsCompoundFile(true); + break; + } + } + } + + success = false; + SegmentInfos* rollback = NULL; + try { + rollback = segmentInfos->clone(); + int32_t segmentssize = _merge->segments->size(); + for ( int32_t i=0;iremove(start); + } + segmentInfos->add(_merge->info,start); + checkpoint(); + success = true; + } _CLFINALLY ( + if (!success && rollback != NULL) { + if (infoStream != NULL) + message(string("hit exception when checkpointing after merge")); + segmentInfos->clear(); + segmentInfos->insert(rollback,true); + deletePartialSegmentsFile(); + deleter->refresh(_merge->info->name.c_str()); + } + _CLDELETE(rollback); + ) + + if (_merge->optimize) + segmentsToOptimize->push_back(_merge->info); + + // Must checkpoint before decrefing so any newly + // referenced files in the _CLNEW merge->info are incref'd + // first: + deleter->checkpoint(segmentInfos, autoCommit); + + decrefMergeSegments(_merge); + + return true; +} + + +void IndexWriter::decrefMergeSegments(MergePolicy::OneMerge* _merge) { + const SegmentInfos* sourceSegmentsClone = _merge->segmentsClone; + const int32_t numSegmentsToMerge = sourceSegmentsClone->size(); + assert (_merge->increfDone); + _merge->increfDone = false; + for(int32_t i=0;iinfo(i); + // Decref all files for this SegmentInfo (this + // matches the incref in mergeInit): + if (previousInfo->dir == directory) + deleter->decRef(previousInfo->files()); + } +} + +void IndexWriter::merge(MergePolicy::OneMerge* _merge) +{ + + assert (_merge->registerDone); + assert (!_merge->optimize || _merge->maxNumSegmentsOptimize > 0); + + bool success = false; + + try { + try { + try { + mergeInit(_merge); + + if (infoStream != NULL) + message("now merge\n merge=" + _merge->segString(directory) + "\n index=" + segString()); + + mergeMiddle(_merge); + success = true; + } catch (CLuceneError& e) { + if ( e.number() != CL_ERR_MergeAborted ) throw e; + _merge->setException(e); + addMergeException(_merge); + // We can ignore this exception, unless the merge + // involves segments from external directories, in + // which case we must throw it so, for example, the + // rollbackTransaction code in addIndexes* is + // executed. + if (_merge->isExternal) + throw e; + } + } _CLFINALLY ( + { SCOPED_LOCK_MUTEX(this->THIS_LOCK) + try { + + mergeFinish(_merge); + + if (!success) { + if (infoStream != NULL) + message(string("hit exception during merge")); + addMergeException(_merge); + if (_merge->info != NULL && segmentInfos->indexOf(_merge->info)==-1) + deleter->refresh(_merge->info->name.c_str()); + } + + // This merge (and, generally, any change to the + // segments) may now enable new merges, so we call + // merge policy & update pending merges. + if (success && !_merge->isAborted() && !closed && !closing) + updatePendingMerges(_merge->maxNumSegmentsOptimize, _merge->optimize); + + } _CLFINALLY ( + RunningMergesType::iterator itr = runningMerges->find(_merge); + if ( itr != runningMerges->end() ) runningMerges->remove( itr ); + // Optimize may be waiting on the final optimize + // merge to finish; and finishMerges() may be + // waiting for all merges to finish: + CONDITION_NOTIFYALL(THIS_WAIT_CONDITION) + ) + } + ) + } catch (std::bad_alloc&) { + hitOOM = true; + _CLTHROWA(CL_ERR_OutOfMemory,"Out of memory"); + } +} + +bool IndexWriter::registerMerge(MergePolicy::OneMerge* _merge) { + SCOPED_LOCK_MUTEX(THIS_LOCK) + + if (_merge->registerDone) + return true; + + const int32_t count = _merge->segments->size(); + bool isExternal = false; + for(int32_t i=0;isegments->info(i); + if (mergingSegments->find(info) != mergingSegments->end()) + return false; + if (segmentInfos->indexOf(info) == -1) + return false; + if (info->dir != directory) + isExternal = true; + } + + pendingMerges->push_back(_merge); + + if (infoStream != NULL) + message( string("add merge to pendingMerges: ") + _merge->segString(directory) + " [total " + Misc::toString((int32_t)pendingMerges->size()) + " pending]"); + + _merge->mergeGen = mergeGen; + _merge->isExternal = isExternal; + + // OK it does not conflict; now record that this merge + // is running (while synchronized) to avoid race + // condition where two conflicting merges from different + // threads, start + for(int32_t i=0;iinsert(mergingSegments->end(),_merge->segments->info(i)); + + // Merge is now registered + _merge->registerDone = true; + return true; +} + +void IndexWriter::mergeInit(MergePolicy::OneMerge* _merge) { + SCOPED_LOCK_MUTEX(THIS_LOCK) + bool success = false; + try { + _mergeInit(_merge); + success = true; + } _CLFINALLY ( + if (!success) { + mergeFinish(_merge); + RunningMergesType::iterator itr = runningMerges->find(_merge); + if ( itr != runningMerges->end() ) runningMerges->remove(itr); + } + ) +} + +void IndexWriter::_mergeInit(MergePolicy::OneMerge* _merge) { + SCOPED_LOCK_MUTEX(THIS_LOCK) + + assert (testPoint("startMergeInit")); + + assert (_merge->registerDone); + + if (_merge->info != NULL) + // mergeInit already done + return; + + if (_merge->isAborted()) + return; + + const SegmentInfos* sourceSegments = _merge->segments; + const int32_t end = sourceSegments->size(); + + ensureContiguousMerge(_merge); + + // Check whether this merge will allow us to skip + // merging the doc stores (stored field & vectors). + // This is a very substantial optimization (saves tons + // of IO) that can only be applied with + // autoCommit=false. + + Directory* lastDir = directory; + string lastDocStoreSegment; + int32_t next = -1; + + bool mergeDocStores = false; + bool doFlushDocStore = false; + const string currentDocStoreSegment = docWriter->getDocStoreSegment(); + + // Test each segment to be merged: check if we need to + // flush/merge doc stores + for (int32_t i = 0; i < end; i++) { + SegmentInfo* si = sourceSegments->info(i); + + // If it has deletions we must merge the doc stores + if (si->hasDeletions()) + mergeDocStores = true; + + // If it has its own (private) doc stores we must + // merge the doc stores + if (-1 == si->getDocStoreOffset()) + mergeDocStores = true; + + // If it has a different doc store segment than + // previous segments, we must merge the doc stores + string docStoreSegment = si->getDocStoreSegment(); + if (docStoreSegment.empty()) + mergeDocStores = true; + else if (lastDocStoreSegment.empty()) + lastDocStoreSegment = docStoreSegment; + else if (lastDocStoreSegment.compare(docStoreSegment) != 0) + mergeDocStores = true; + + // Segments' docScoreOffsets must be in-order, + // contiguous. For the default merge policy now + // this will always be the case but for an arbitrary + // merge policy this may not be the case + if (-1 == next) + next = si->getDocStoreOffset() + si->docCount; + else if (next != si->getDocStoreOffset()) + mergeDocStores = true; + else + next = si->getDocStoreOffset() + si->docCount; + + // If the segment comes from a different directory + // we must merge + if (lastDir != si->dir) + mergeDocStores = true; + + // If the segment is referencing the current "live" + // doc store outputs then we must merge + if (si->getDocStoreOffset() != -1 && !currentDocStoreSegment.empty() && si->getDocStoreSegment().compare(currentDocStoreSegment)==0 ) + doFlushDocStore = true; + } + + int32_t docStoreOffset; + string docStoreSegment; + bool docStoreIsCompoundFile; + + if (mergeDocStores) { + docStoreOffset = -1; + docStoreSegment.clear(); + docStoreIsCompoundFile = false; + } else { + SegmentInfo* si = sourceSegments->info(0); + docStoreOffset = si->getDocStoreOffset(); + docStoreSegment = si->getDocStoreSegment(); + docStoreIsCompoundFile = si->getDocStoreIsCompoundFile(); + } + + if (mergeDocStores && doFlushDocStore) { + // SegmentMerger intends to merge the doc stores + // (stored fields, vectors), and at least one of the + // segments to be merged refers to the currently + // live doc stores. + + // TODO: if we know we are about to merge away these + // newly flushed doc store files then we should not + // make compound file out of them... + if (infoStream != NULL) + message(string("flush at merge")); + flush(false, true); + } + + // We must take a full copy at this point so that we can + // properly merge deletes in commitMerge() + _merge->segmentsClone = _merge->segments->clone(); + + for (int32_t i = 0; i < end; i++) { + SegmentInfo* si = _merge->segmentsClone->info(i); + + // IncRef all files for this segment info to make sure + // they are not removed while we are trying to merge-> + if (si->dir == directory) + deleter->incRef(si->files()); + } + + _merge->increfDone = true; + + _merge->mergeDocStores = mergeDocStores; + + // Bind a _CLNEW segment name here so even with + // ConcurrentMergePolicy we keep deterministic segment + // names. + _merge->info = _CLNEW SegmentInfo(newSegmentName().c_str(), 0, + directory, false, true, + docStoreOffset, + docStoreSegment.c_str(), + docStoreIsCompoundFile); + // Also enroll the merged segment into mergingSegments; + // this prevents it from getting selected for a merge + // after our merge is done but while we are building the + // CFS: + mergingSegments->insert(_merge->info); +} + +void IndexWriter::mergeFinish(MergePolicy::OneMerge* _merge) { + SCOPED_LOCK_MUTEX(THIS_LOCK) + + if (_merge->increfDone) + decrefMergeSegments(_merge); + + assert (_merge->registerDone); + + const SegmentInfos* sourceSegments = _merge->segments; + const int32_t end = sourceSegments->size(); + for(int32_t i=0;ifind(sourceSegments->info(i)); + if ( itr != mergingSegments->end() ) mergingSegments->remove(itr); + } + MergingSegmentsType::iterator itr = mergingSegments->find(_merge->info); + if ( itr != mergingSegments->end() ) mergingSegments->remove(itr); + _merge->registerDone = false; +} + +int32_t IndexWriter::mergeMiddle(MergePolicy::OneMerge* _merge) { + + _merge->checkAborted(directory); + + const string mergedName = _merge->info->name; + + int32_t mergedDocCount = 0; + + const SegmentInfos* sourceSegments = _merge->segments; + SegmentInfos* sourceSegmentsClone = _merge->segmentsClone; + const int32_t numSegments = sourceSegments->size(); + + if (infoStream != NULL) + message("merging " + _merge->segString(directory)); + + SegmentMerger merger (this, mergedName.c_str(), _merge) ; + + // This is try/finally to make sure merger's readers are + // closed: + + bool success = false; + + try { + int32_t totDocCount = 0; + + for (int32_t i = 0; i < numSegments; i++) { + SegmentInfo* si = sourceSegmentsClone->info(i); + IndexReader* reader = SegmentReader::get(si, MERGE_READ_BUFFER_SIZE, _merge->mergeDocStores); // no need to set deleter (yet) + merger.add(reader); + totDocCount += reader->numDocs(); + } + if (infoStream != NULL) { + message(string("merge: total ")+ Misc::toString(totDocCount)+" docs"); + } + + _merge->checkAborted(directory); + + mergedDocCount = _merge->info->docCount = merger.merge(_merge->mergeDocStores); + + assert (mergedDocCount == totDocCount); + + success = true; + + } _CLFINALLY ( + // close readers before we attempt to delete + // now-obsolete segments + merger.closeReaders(); + if (!success) { + if (infoStream != NULL) + message("hit exception during merge; now refresh deleter on segment " + mergedName); + { SCOPED_LOCK_MUTEX(this->THIS_LOCK) + addMergeException(_merge); + deleter->refresh(mergedName.c_str()); + } + } + ) + + if (!commitMerge(_merge)) + // commitMerge will return false if this merge was aborted + return 0; + + if (_merge->useCompoundFile) { + + success = false; + bool skip = false; + const string compoundFileName = mergedName + "." + IndexFileNames::COMPOUND_FILE_EXTENSION; + + try { + try { + merger.createCompoundFile(compoundFileName.c_str()); + success = true; + } catch (CLuceneError& ioe) { + if ( ioe.number() != CL_ERR_IO ) throw ioe; + + { SCOPED_LOCK_MUTEX(this->THIS_LOCK) + if (segmentInfos->indexOf(_merge->info) == -1) { + // If another merge kicked in and merged our + // _CLNEW segment away while we were trying to + // build the compound file, we can hit a + // FileNotFoundException and possibly + // IOException over NFS. We can tell this has + // happened because our SegmentInfo is no + // longer in the segments; if this has + // happened it is safe to ignore the exception + // & skip finishing/committing our compound + // file creating. + if (infoStream != NULL) + message("hit exception creating compound file; ignoring it because our info (segment " + _merge->info->name + ") has been merged away"); + skip = true; + } else + throw ioe; + } + } + } _CLFINALLY ( + if (!success) { + if (infoStream != NULL) + message(string("hit exception creating compound file during merge: skip=") + Misc::toString(skip)); + + { SCOPED_LOCK_MUTEX(this->THIS_LOCK) + if (!skip) + addMergeException(_merge); + deleter->deleteFile(compoundFileName.c_str()); + } + } + ) + + if (!skip) { + + { SCOPED_LOCK_MUTEX(this->THIS_LOCK) + if (skip || segmentInfos->indexOf(_merge->info) == -1 || _merge->isAborted()) { + // Our segment (committed in non-compound + // format) got merged away while we were + // building the compound format. + deleter->deleteFile(compoundFileName.c_str()); + } else { + success = false; + try { + _merge->info->setUseCompoundFile(true); + checkpoint(); + success = true; + } _CLFINALLY ( + if (!success) { + if (infoStream != NULL) + message(string("hit exception checkpointing compound file during merge")); + + // Must rollback: + addMergeException(_merge); + _merge->info->setUseCompoundFile(false); + deletePartialSegmentsFile(); + deleter->deleteFile(compoundFileName.c_str()); + } + ) + + // Give deleter a chance to remove files now. + deleter->checkpoint(segmentInfos, autoCommit); + } + } + } + } + + return mergedDocCount; +} + +void IndexWriter::addMergeException(MergePolicy::OneMerge* _merge) { + SCOPED_LOCK_MUTEX(THIS_LOCK) + if ( mergeGen == _merge->mergeGen ){ + MergeExceptionsType::iterator itr = mergeExceptions->begin(); + while ( itr != mergeExceptions->end() ){ + MergePolicy::OneMerge* x = *itr; + if ( x == _merge ){ + return; + } + } + } + mergeExceptions->push_back(_merge); +} + +void IndexWriter::deletePartialSegmentsFile() { + if (segmentInfos->getLastGeneration() != segmentInfos->getGeneration()) { + string segmentFileName = IndexFileNames::fileNameFromGeneration(IndexFileNames::SEGMENTS, + "", + segmentInfos->getGeneration()); + if (infoStream != NULL) + message("now delete partial segments file \"" + segmentFileName + "\""); + + deleter->deleteFile(segmentFileName.c_str()); + } +} + + +void IndexWriter::applyDeletes(bool flushedNewSegment) { + const DocumentsWriter::TermNumMapType& bufferedDeleteTerms = docWriter->getBufferedDeleteTerms(); + const vector* bufferedDeleteDocIDs = docWriter->getBufferedDeleteDocIDs(); + + if (infoStream != NULL) + message( string("flush ") + Misc::toString(docWriter->getNumBufferedDeleteTerms()) + + " buffered deleted terms and " + Misc::toString((int32_t)bufferedDeleteDocIDs->size()) + + " deleted docIDs on " + Misc::toString((int32_t)segmentInfos->size()) + " segments."); + + if (flushedNewSegment) { + IndexReader* reader = NULL; + try { + // Open readers w/o opening the stored fields / + // vectors because these files may still be held + // open for writing by docWriter + reader = SegmentReader::get(segmentInfos->info(segmentInfos->size() - 1), false); + + // Apply delete terms to the segment just flushed from ram + // apply appropriately so that a delete term is only applied to + // the documents buffered before it, not those buffered after it. + _internal->applyDeletesSelectively(bufferedDeleteTerms, *bufferedDeleteDocIDs, reader); + } _CLFINALLY ( + if (reader != NULL) { + try { + reader->doCommit(); + } _CLFINALLY ( + reader->doClose(); + _CLLDELETE(reader); + ) + } + ) + } + + int32_t infosEnd = segmentInfos->size(); + if (flushedNewSegment) { + infosEnd--; + } + + for (int32_t i = 0; i < infosEnd; i++) { + IndexReader* reader = NULL; + try { + reader = SegmentReader::get(segmentInfos->info(i), false); + + // Apply delete terms to disk segments + // except the one just flushed from ram. + _internal->applyDeletes(bufferedDeleteTerms, reader); + } _CLFINALLY ( + if (reader != NULL) { + try { + reader->doCommit(); + } _CLFINALLY ( + reader->doClose(); + _CLDELETE(reader); + ) + } + ) + } + + // Clean up bufferedDeleteTerms. + docWriter->clearBufferedDeletes(); +} + + +int32_t IndexWriter::getBufferedDeleteTermsSize() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + return docWriter->getBufferedDeleteTerms().size(); +} + +int32_t IndexWriter::getNumBufferedDeleteTerms() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + return docWriter->getNumBufferedDeleteTerms(); +} + +void IndexWriter::Internal::applyDeletesSelectively(const DocumentsWriter::TermNumMapType& deleteTerms, + const vector& deleteIds, IndexReader* reader) +{ + DocumentsWriter::TermNumMapType::const_iterator iter = deleteTerms.begin(); + while (iter != deleteTerms.end() ) { + Term* term = iter->first; + TermDocs* docs = reader->termDocs(term); + if (docs != NULL) { + int32_t num = iter->second->getNum(); + try { + while (docs->next()) { + int32_t doc = docs->doc(); + if (doc >= num) { + break; + } + reader->deleteDocument(doc); + } + } _CLFINALLY ( + docs->close(); + _CLDELETE(docs); + ) + } + + iter++; + } + + if (deleteIds.size() > 0) { + vector::const_iterator iter2 = deleteIds.begin(); + while (iter2 != deleteIds.end()){ + reader->deleteDocument(*iter2); + ++iter2; + } + } +} + +void IndexWriter::Internal::applyDeletes(const DocumentsWriter::TermNumMapType& deleteTerms, IndexReader* reader) +{ + DocumentsWriter::TermNumMapType::const_iterator iter = deleteTerms.begin(); + while (iter != deleteTerms.end()) { + reader->deleteDocuments(iter->first); + iter++; + } +} + +SegmentInfo* IndexWriter::newestSegment() { + return segmentInfos->info(segmentInfos->size()-1); +} + +string IndexWriter::segString() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + std::string buffer; + for(int32_t i = 0; i < segmentInfos->size(); i++) { + if (i > 0) { + buffer+= " "; + } + buffer+= segmentInfos->info(i)->segString(directory); + } + + return buffer; +} + +bool IndexWriter::testPoint(const char* name) { + return true; +} + +CL_NS_END diff --git a/Pods/BRCLucene/src/core/CLucene/index/IndexWriter.h b/Pods/BRCLucene/src/core/CLucene/index/IndexWriter.h new file mode 100644 index 0000000..0ca1e99 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/index/IndexWriter.h @@ -0,0 +1,1290 @@ +/*------------------------------------------------------------------------------ + * 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_IndexWriter_ +#define _lucene_index_IndexWriter_ + +#include "CLucene/util/VoidList.h" +#include "CLucene/util/Array.h" +CL_CLASS_DEF(search,Similarity) +CL_CLASS_DEF(store,Lock) +CL_CLASS_DEF(analysis,Analyzer) +CL_CLASS_DEF(store,Directory) +CL_CLASS_DEF(store,LuceneLock) +CL_CLASS_DEF(document,Document) + +#include "MergePolicy.h" +#include "CLucene/LuceneThreads.h" + +CL_NS_DEF(index) +class SegmentInfo; +class SegmentInfos; +class MergePolicy; +class IndexReader; +class SegmentReader; +class MergeScheduler; +class DocumentsWriter; +class IndexFileDeleter; +class LogMergePolicy; +class IndexDeletionPolicy; +class Term; + +/** + An IndexWriter creates and maintains an index. + +

The create argument to the + constructor + determines whether a new index is created, or whether an existing index is + opened. Note that you + can open an index with create=true even while readers are + using the index. The old readers will continue to search + the "point in time" snapshot they had opened, and won't + see the newly created index until they re-open. There are + also constructors + with no create argument which + will create a new index if there is not already an index at the + provided path and otherwise open the existing index.

+ +

In either case, documents are added with addDocument + and removed with deleteDocuments. + A document can be updated with updateDocument + (which just deletes and then adds the entire document). + When finished adding, deleting and updating documents, close should be called.

+ +

These changes are buffered in memory and periodically + flushed to the {@link Directory} (during the above method + calls). A flush is triggered when there are enough + buffered deletes (see {@link #setMaxBufferedDeleteTerms}) + or enough added documents since the last flush, whichever + is sooner. For the added documents, flushing is triggered + either by RAM usage of the documents (see {@link + #setRAMBufferSizeMB}) or the number of added documents. + The default is to flush when RAM usage hits 16 MB. For + best indexing speed you should flush by RAM usage with a + large RAM buffer. You can also force a flush by calling + {@link #flush}. When a flush occurs, both pending deletes + and added documents are flushed to the index. A flush may + also trigger one or more segment merges which by default + run with a background thread so as not to block the + addDocument calls (see below + for changing the {@link MergeScheduler}).

+ + +

The optional autoCommit argument to the + constructors + controls visibility of the changes to {@link IndexReader} instances reading the same index. + When this is false, changes are not + visible until {@link #close()} is called. + Note that changes will still be flushed to the + {@link org.apache.lucene.store.Directory} as new files, + but are not committed (no new segments_N file + is written referencing the new files) until {@link #close} is + called. If something goes terribly wrong (for example the + JVM crashes) before {@link #close()}, then + the index will reflect none of the changes made (it will + remain in its starting state). + You can also call {@link #abort()}, which closes the writer without committing any + changes, and removes any index + files that had been flushed but are now unreferenced. + This mode is useful for preventing readers from refreshing + at a bad time (for example after you've done all your + deletes but before you've done your adds). + It can also be used to implement simple single-writer + transactional semantics ("all or none").

+ +

When autoCommit is true then + every flush is also a commit ({@link IndexReader} + instances will see each flush as changes to the index). + This is the default, to match the behavior before 2.2. + When running in this mode, be careful not to refresh your + readers while optimize or segment merges are taking place + as this can tie up substantial disk space.

+ +

Regardless of autoCommit, an {@link + IndexReader} or {@link org.apache.lucene.search.IndexSearcher} will only see the + index as of the "point in time" that it was opened. Any + changes committed to the index after the reader was opened + are not visible until the reader is re-opened.

+ +

If an index will not have more documents added for a while and optimal search + performance is desired, then the optimize + method should be called before the index is closed.

+ +

Opening an IndexWriter creates a lock file for the directory in use. Trying to open + another IndexWriter on the same directory will lead to a + {@link LockObtainFailedException}. The {@link LockObtainFailedException} + is also thrown if an IndexReader on the same directory is used to delete documents + from the index.

+ + +

Expert: IndexWriter allows an optional + {@link IndexDeletionPolicy} implementation to be + specified. You can use this to control when prior commits + are deleted from the index. The default policy is {@link + KeepOnlyLastCommitDeletionPolicy} which removes all prior + commits as soon as a new commit is done (this matches + behavior before 2.2). Creating your own policy can allow + you to explicitly keep previous "point in time" commits + alive in the index for some time, to allow readers to + refresh to the new commit without having the old commit + deleted out from under them. This is necessary on + filesystems like NFS that do not support "delete on last + close" semantics, which Lucene's "point in time" search + normally relies on.

+ +

Expert: + IndexWriter allows you to separately change + the {@link MergePolicy} and the {@link MergeScheduler}. + The {@link MergePolicy} is invoked whenever there are + changes to the segments in the index. Its role is to + select which merges to do, if any, and return a {@link + MergePolicy.MergeSpecification} describing the merges. It + also selects merges to do for optimize(). (The default is + {@link LogByteSizeMergePolicy}. Then, the {@link + MergeScheduler} is invoked with the requested merges and + it decides when and how to run the merges. The default is + {@link ConcurrentMergeScheduler}.

+ */ +/* + * Clarification: Check Points (and commits) + * Being able to set autoCommit=false allows IndexWriter to flush and + * write new index files to the directory without writing a new segments_N + * file which references these new files. It also means that the state of + * the in memory SegmentInfos object is different than the most recent + * segments_N file written to the directory. + * + * Each time the SegmentInfos is changed, and matches the (possibly + * modified) directory files, we have a new "check point". + * If the modified/new SegmentInfos is written to disk - as a new + * (generation of) segments_N file - this check point is also an + * IndexCommitPoint. + * + * With autoCommit=true, every checkPoint is also a CommitPoint. + * With autoCommit=false, some checkPoints may not be commits. + * + * A new checkpoint always replaces the previous checkpoint and + * becomes the new "front" of the index. This allows the IndexFileDeleter + * to delete files that are referenced only by stale checkpoints. + * (files that were created since the last commit, but are no longer + * referenced by the "front" of the index). For this, IndexFileDeleter + * keeps track of the last non commit checkpoint. + */ +class CLUCENE_EXPORT IndexWriter:LUCENE_BASE { + bool isOpen; //indicates if the writers is open - this way close can be called multiple times + + // how to analyze text + CL_NS(analysis)::Analyzer* analyzer; + + CL_NS(search)::Similarity* similarity; // how to normalize + + bool closeDir; + bool closed; + bool closing; + + // Holds all SegmentInfo instances currently involved in + // merges + typedef CL_NS(util)::CLHashSet > MergingSegmentsType; + MergingSegmentsType* mergingSegments; + MergePolicy* mergePolicy; + MergeScheduler* mergeScheduler; + + typedef CL_NS(util)::CLLinkedList > PendingMergesType; + PendingMergesType* pendingMerges; + + typedef CL_NS(util)::CLHashSet, + CL_NS(util)::Deletor::Object > RunningMergesType; + RunningMergesType* runningMerges; + + typedef CL_NS(util)::CLArrayList MergeExceptionsType; + MergeExceptionsType* mergeExceptions; + int64_t mergeGen; + bool stopMerges; + + + /** If non-null, information about merges will be printed to this. + */ + std::ostream* infoStream; + static std::ostream* defaultInfoStream; + + + + bool commitPending; // true if segmentInfos has changes not yet committed + SegmentInfos* rollbackSegmentInfos; // segmentInfos we will fallback to if the commit fails + + SegmentInfos* localRollbackSegmentInfos; // segmentInfos we will fallback to if the commit fails + bool localAutoCommit; // saved autoCommit during local transaction + bool autoCommit; // false if we should commit only on close + + DocumentsWriter* docWriter; + IndexFileDeleter* deleter; + + typedef std::vector SegmentsToOptimizeType; + SegmentsToOptimizeType* segmentsToOptimize; // used by optimize to note those needing optimization + + + CL_NS(store)::LuceneLock* writeLock; + + void init(CL_NS(store)::Directory* d, CL_NS(analysis)::Analyzer* a, bool closeDir, IndexDeletionPolicy* deletionPolicy, bool autoCommit); + void init(CL_NS(store)::Directory* d, CL_NS(analysis)::Analyzer* a, bool create, bool closeDir, IndexDeletionPolicy* deletionPolicy, bool autoCommit); + void deinit(bool releaseWriteLock = true) throw(); + + // where this index resides + CL_NS(store)::Directory* directory; + bool bOwnsDirectory; + + + int32_t getSegmentsCounter(); + int32_t maxFieldLength; + int32_t mergeFactor; + int32_t minMergeDocs; + int32_t maxMergeDocs; + int32_t termIndexInterval; + + int64_t writeLockTimeout; + int64_t commitLockTimeout; + + // The normal read buffer size defaults to 1024, but + // increasing this during merging seems to yield + // performance gains. However we don't want to increase + // it too much because there are quite a few + // BufferedIndexInputs created during merging. See + // LUCENE-888 for details. + static const int32_t MERGE_READ_BUFFER_SIZE; + + // Used for printing messages + STATIC_DEFINE_MUTEX(MESSAGE_ID_LOCK) + static int32_t MESSAGE_ID; + int32_t messageID; + mutable bool hitOOM; + +public: + DEFINE_MUTEX(THIS_LOCK) + DEFINE_CONDITION(THIS_WAIT_CONDITION) + + // Release the write lock, if needed. + SegmentInfos* segmentInfos; + + // Release the write lock, if needed. + virtual ~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); + + /** + * Returns the maximum number of terms that will be + * indexed for a single field in a document. + * @see #setMaxFieldLength + */ + 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. This setting refers to the number of running terms, + * not to the number of different terms.

+ * Note: see {@link DEFAULT_MAX_FIELD_LENGTH} for an important + * note regarding field lengths. + * @see #DEFAULT_MAX_FIELD_LENGTH + */ + void setMaxFieldLength(int32_t val); + + /** 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. + * + *

The default value is DEFAULT_MAX_BUFFERED_DOCS.*/ + void setMaxBufferedDocs(int32_t val); + /** + * @see #setMaxBufferedDocs + */ + int32_t getMaxBufferedDocs(); + + /** + * Default value for the write lock timeout (1,000). + * @see #setDefaultWriteLockTimeout + */ + static int64_t WRITE_LOCK_TIMEOUT; + /** + * Sets the maximum time to wait for a write lock (in milliseconds). + */ + void setWriteLockTimeout(int64_t writeLockTimeout); + /** + * @see #setWriteLockTimeout + */ + int64_t getWriteLockTimeout(); + + /** + * Sets the maximum time to wait for a commit lock (in milliseconds). + */ + void setCommitLockTimeout(int64_t commitLockTimeout); + /** + * @see #setCommitLockTimeout + */ + int64_t getCommitLockTimeout(); + + /** + * Name of the write lock in the index. + */ + static const char* WRITE_LOCK_NAME; //"write.lock"; + + /** + * @deprecated + * @see LogMergePolicy#DEFAULT_MERGE_FACTOR + */ + static const int32_t DEFAULT_MERGE_FACTOR ; + + /** + * Value to denote a flush trigger is disabled + */ + static const int32_t DISABLE_AUTO_FLUSH; + + /** + * Disabled by default (because IndexWriter flushes by RAM usage + * by default). Change using {@link #setMaxBufferedDocs(int)}. + */ + static const int32_t DEFAULT_MAX_BUFFERED_DOCS; + + /** + * Default value is 16 MB (which means flush when buffered + * docs consume 16 MB RAM). Change using {@link #setRAMBufferSizeMB}. + */ + static const float_t DEFAULT_RAM_BUFFER_SIZE_MB; + + /** + * Disabled by default (because IndexWriter flushes by RAM usage + * by default). Change using {@link #setMaxBufferedDeleteTerms(int)}. + */ + static const int32_t DEFAULT_MAX_BUFFERED_DELETE_TERMS; + + /** + * @deprecated + * @see LogDocMergePolicy#DEFAULT_MAX_MERGE_DOCS + */ + static const int32_t DEFAULT_MAX_MERGE_DOCS; + + + /* 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. + * + *

This must never be less than 2. The default value is 10. + */ + int32_t getMergeFactor() const; + void setMergeFactor(int32_t 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, numUniqueTerms/interval terms are read into + * memory by an IndexReader, and, on average, interval/2 terms + * must be scanned for each random term access. + * + * @see #DEFAULT_TERM_INDEX_INTERVAL + */ + void setTermIndexInterval(int32_t interval); + /** Expert: Return the interval between indexed terms. + * + * @see #setTermIndexInterval(int) + */ + int32_t getTermIndexInterval(); + + /**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. + * + *

The default value is {@link Integer#MAX_VALUE}. + */ + int32_t getMaxMergeDocs() const; + void setMaxMergeDocs(int32_t val); + + /** + * Constructs an IndexWriter for the index in path. + * Text will be analyzed with a. If create + * is true, then a new, empty index will be created in + * path, replacing the index already there, if any. + * + * @param path the path to the index directory + * @param a the analyzer to use + * @param create true to create the index or overwrite + * the existing one; false to append to the existing + * index + * @throws CorruptIndexException if the index is corrupt + * @throws LockObtainFailedException if another writer + * has this index open (write.lock could not + * be obtained) + * @throws IOException if the directory cannot be read/written to, or + * if it does not exist and create is + * false or if there is any other low-level + * IO error + */ + explicit IndexWriter(const char* path, CL_NS(analysis)::Analyzer* a, const bool create); + + /** + * Constructs an IndexWriter for the index in d. + * Text will be analyzed with a. If create + * is true, then a new, empty index will be created in + * d, replacing the index already there, if any. + * + * @param d the index directory + * @param a the analyzer to use + * @param create true to create the index or overwrite + * the existing one; false to append to the existing + * index + * @throws CorruptIndexException if the index is corrupt + * @throws LockObtainFailedException if another writer + * has this index open (write.lock could not + * be obtained) + * @throws IOException if the directory cannot be read/written to, or + * if it does not exist and create is + * false or if there is any other low-level + * IO error + */ + explicit IndexWriter(CL_NS(store)::Directory* d, CL_NS(analysis)::Analyzer* a, const bool create, const bool closeDirOnShutdown=false); + + /** + * Expert: constructs an IndexWriter with a custom {@link + * IndexDeletionPolicy}, for the index in d, + * first creating it if it does not already exist. Text + * will be analyzed with a. + * + * @param d the index directory + * @param autoCommit see above + * @param a the analyzer to use + * @param deletionPolicy see above + * @throws CorruptIndexException if the index is corrupt + * @throws LockObtainFailedException if another writer + * has this index open (write.lock could not + * be obtained) + * @throws IOException if the directory cannot be + * read/written to or if there is any other low-level + * IO error + */ + explicit IndexWriter(CL_NS(store)::Directory* d, const bool autoCommit, CL_NS(analysis)::Analyzer* a, IndexDeletionPolicy* deletionPolicy = NULL, const bool closeDirOnShutdown=false); + + /** + * Expert: constructs an IndexWriter with a custom {@link + * IndexDeletionPolicy}, for the index in d. + * Text will be analyzed with a. If + * create is true, then a new, empty index + * will be created in d, replacing the index + * already there, if any. + * + * @param d the index directory + * @param autoCommit see above + * @param a the analyzer to use + * @param create true to create the index or overwrite + * the existing one; false to append to the existing + * index + * @param deletionPolicy see above + * @throws CorruptIndexException if the index is corrupt + * @throws LockObtainFailedException if another writer + * has this index open (write.lock could not + * be obtained) + * @throws IOException if the directory cannot be read/written to, or + * if it does not exist and create is + * false or if there is any other low-level + * IO error + */ + explicit IndexWriter(CL_NS(store)::Directory* d, const bool autoCommit, CL_NS(analysis)::Analyzer* a, const bool create, IndexDeletionPolicy* deletionPolicy = NULL, const bool closeDirOnShutdown=false); + + /**Returns the number of documents currently in this index. + * synchronized + */ + int32_t docCount(); + + + /** Returns the directory this index resides in. */ + CL_NS(store)::Directory* getDirectory(); + + /** 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(); + + /** 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); + + + /** Expert: Set the Similarity implementation used by this IndexWriter. + * + * @see Similarity#setDefault(Similarity) + */ + void setSimilarity(CL_NS(search)::Similarity* similarity); + + /** Expert: Return the Similarity implementation used by this IndexWriter. + * + *

This defaults to the current value of {@link Similarity#getDefault()}. + */ + CL_NS(search)::Similarity* getSimilarity(); + + /** Returns the analyzer used by this index. */ + CL_NS(analysis)::Analyzer* getAnalyzer(); + + // synchronized + std::string newSegmentName(); + + /** + * Prints a message to the infoStream (if non-null), + * prefixed with the identifying information for this + * writer and the thread that's calling it. + */ + void message(std::string message); + + /** + * Returns the current default infoStream for newly + * instantiated IndexWriters. + * @see #setDefaultInfoStream + */ + static std::ostream* getDefaultInfoStream(); + + /** + * Returns the current infoStream in use by this writer. + * @see #setInfoStream + */ + std::ostream* getInfoStream(); + + /** + * Returns the number of buffered deleted terms that will + * trigger a flush if enabled. + * @see #setMaxBufferedDeleteTerms + */ + int32_t getMaxBufferedDeleteTerms(); + + /** + * Expert: returns the current MergePolicy in use by this writer. + * @see #setMergePolicy + */ + MergePolicy* getMergePolicy(); + + /** + * Expert: returns the current MergePolicy in use by this + * writer. + * @see #setMergePolicy + */ + MergeScheduler* getMergeScheduler(); + + /** + * Returns the value set by {@link #setRAMBufferSizeMB} if enabled. + */ + float_t getRAMBufferSizeMB(); + + /** If non-null, this will be the default infoStream used + * by a newly instantiated IndexWriter. + * @see #setInfoStream + */ + static void setDefaultInfoStream(std::ostream* infoStream);\ + + /** If non-null, information about merges, deletes and a + * message when maxFieldLength is reached will be printed + * to this. + */ + void setInfoStream(std::ostream* infoStream); + + /** + *

Determines the minimal number of delete terms required before the buffered + * in-memory delete terms are applied and flushed. If there are documents + * buffered in memory at the time, they are merged and a new segment is + * created.

+ + *

Disabled by default (writer flushes by RAM usage).

+ * + * @throws IllegalArgumentException if maxBufferedDeleteTerms + * is enabled but smaller than 1 + * @see #setRAMBufferSizeMB + */ + void setMaxBufferedDeleteTerms(int32_t maxBufferedDeleteTerms); + + /** + * Expert: set the merge policy used by this writer. + */ + void setMergePolicy(MergePolicy* mp); + + /** + * Expert: set the merge scheduler used by this writer. + */ + void setMergeScheduler(MergeScheduler* mergeScheduler); + + /** Determines the amount of RAM that may be used for + * buffering added documents before they are flushed as a + * new Segment. Generally for faster indexing performance + * it's best to flush by RAM usage instead of document + * count and use as large a RAM buffer as you can. + * + *

When this is set, the writer will flush whenever + * buffered documents use this much RAM. Pass in {@link + * #DISABLE_AUTO_FLUSH} to prevent triggering a flush due + * to RAM usage. Note that if flushing by document count + * is also enabled, then the flush will be triggered by + * whichever comes first.

+ * + *

The default value is {@link #DEFAULT_RAM_BUFFER_SIZE_MB}.

+ * + * @throws IllegalArgumentException if ramBufferSize is + * enabled but non-positive, or it disables ramBufferSize + * when maxBufferedDocs is already disabled + */ + void setRAMBufferSizeMB(float_t mb); + + + /** Expert: the {@link MergeScheduler} calls this method + * to retrieve the next merge requested by the + * MergePolicy */ + MergePolicy::OneMerge* getNextMerge(); + + /** + * Merges the indicated segments, replacing them in the stack with a + * single segment. + */ + void merge(MergePolicy::OneMerge* merge); + + /** + * Deletes the document(s) containing term. + * @param term the term to identify the documents to be deleted + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + void deleteDocuments(Term* term); + + /** + * Deletes the document(s) containing any of the + * terms. All deletes are flushed at the same time. + * @param terms array of terms to identify the documents + * to be deleted + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + void deleteDocuments(const CL_NS(util)::ArrayBase* terms); + + /** + * Updates a document by first deleting the document(s) + * containing term and then adding the new + * document. The delete and then add are atomic as seen + * by a reader on the same index (flush may happen only after + * the add). + * @param term the term to identify the document(s) to be + * deleted + * @param doc the document to be added + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + void updateDocument(Term* term, CL_NS(document)::Document* doc); + + /** + * Updates a document by first deleting the document(s) + * containing term and then adding the new + * document. The delete and then add are atomic as seen + * by a reader on the same index (flush may happen only after + * the add). + * @param term the term to identify the document(s) to be + * deleted + * @param doc the document to be added + * @param analyzer the analyzer to use when analyzing the document + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + void updateDocument(Term* term, CL_NS(document)::Document* doc, CL_NS(analysis)::Analyzer* analyzer); + + /** + * Returns default write lock timeout for newly + * instantiated IndexWriters. + * @see #setDefaultWriteLockTimeout + */ + int64_t getDefaultWriteLockTimeout(); + + /** + * Sets the default (for any instance of IndexWriter) maximum time to wait for a write lock (in + * milliseconds). + */ + void setDefaultWriteLockTimeout(int64_t writeLockTimeout); + + std::string segString(); + + /** + * Closes the index with or without waiting for currently + * running merges to finish. This is only meaningful when + * using a MergeScheduler that runs merges in background + * threads. + * @param waitForMerges if true, this call will block + * until all merges complete; else, it will ask all + * running merges to abort, wait until those merges have + * finished (which should be at most a few seconds), and + * then return. + * + *

If an Exception is hit during close, eg due to disk + * full or some other reason, then both the on-disk index + * and the internal state of the IndexWriter instance will + * be consistent. However, the close will not be complete + * even though part of it (flushing buffered documents) + * may have succeeded, so the write lock will still be + * held.

+ * + *

If you can correct the underlying cause (eg free up + * some disk space) then you can call close() again. + * Failing that, if you want to force the write lock to be + * released (dangerous, because you may then lose buffered + * docs in the IndexWriter instance) then you can do + * something like this:

+ * + *
+   * try {
+   *   writer.close();
+   * } finally {
+   *   if (IndexReader.isLocked(directory)) {
+   *     IndexReader.unlock(directory);
+   *   }
+   * }
+   * 
+ * + * after which, you must be certain not to use the writer + * instance anymore.

+ * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + void close(bool waitForMerges=true); + + /** + * Requests an "optimize" operation on an index, priming the index + * for the fastest available search. Traditionally this has meant + * merging all segments into a single segment as is done in the + * default merge policy, but individaul merge policies may implement + * optimize in different ways. + * + * @see LogMergePolicy#findMergesForOptimize + * + *

It is recommended that this method be called upon completion of indexing. In + * environments with frequent updates, optimize is best done during low volume times, if at all. + * + *

+ *

See http://www.gossamer-threads.com/lists/lucene/java-dev/47895 for more discussion.

+ * + *

Note that this can require substantial temporary free + * space in the Directory (see LUCENE-764 + * for details):

+ * + *
    + *
  • + * + *

    If no readers/searchers are open against the index, + * then free space required is up to 1X the total size of + * the starting index. For example, if the starting + * index is 10 GB, then you must have up to 10 GB of free + * space before calling optimize.

    + * + *
  • + * + *

    If readers/searchers are using the index, then free + * space required is up to 2X the size of the starting + * index. This is because in addition to the 1X used by + * optimize, the original 1X of the starting index is + * still consuming space in the Directory as the readers + * are holding the segments files open. Even on Unix, + * where it will appear as if the files are gone ("ls" + * won't list them), they still consume storage due to + * "delete on last close" semantics.

    + * + *

    Furthermore, if some but not all readers re-open + * while the optimize is underway, this will cause > 2X + * temporary space to be consumed as those new readers + * will then hold open the partially optimized segments at + * that time. It is best not to re-open readers while + * optimize is running.

    + * + *
+ * + *

The actual temporary usage could be much less than + * these figures (it depends on many factors).

+ * + *

In general, once the optimize completes, the total size of the + * index will be less than the size of the starting index. + * It could be quite a bit smaller (if there were many + * pending deletes) or just slightly smaller.

+ * + *

If an Exception is hit during optimize(), for example + * due to disk full, the index will not be corrupt and no + * documents will have been lost. However, it may have + * been partially optimized (some segments were merged but + * not all), and it's possible that one of the segments in + * the index will be in non-compound format even when + * using compound file format. This will occur when the + * Exception is hit during conversion of the segment into + * compound format.

+ * + *

This call will optimize those segments present in + * the index when the call started. If other threads are + * still adding documents and flushing segments, those + * newly created segments will not be optimized unless you + * call optimize again.

+ * + * @param doWait Specifies whether the call should block + * until the optimize completes. This is only meaningful + * with a {@link MergeScheduler} that is able to run merges + * in background threads. + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + void optimize(bool doWait=true); + + /** + * Optimize the index down to <= maxNumSegments. If + * maxNumSegments==1 then this is the same as {@link + * #optimize()}. + * @param maxNumSegments maximum number of segments left + * in the index after optimization finishes + * @param doWait Specifies whether the call should block + * until the optimize completes. This is only meaningful + * with a {@link MergeScheduler} that is able to run merges + * in background threads. + */ + void optimize(int32_t maxNumSegments, bool doWait=true); + + /** + * Flush all in-memory buffered updates (adds and deletes) + * to the Directory. + *

Note: if autoCommit=false, flushed data would still + * not be visible to readers, until {@link #close} is called. + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + void flush(); + + /** + * Adds a document to this index. If the document contains more than + * {@link #setMaxFieldLength(int)} terms for a given field, the remainder are + * discarded (depending on the policy, see #FIELD_TRUNC_POLICY__WARN) + * + *

Note that if an Exception is hit (for example disk full) + * then the index will be consistent, but this document + * may not have been added. Furthermore, it's possible + * the index will have one segment in non-compound format + * even when using compound files (when a merge has + * partially succeeded).

+ * + *

This method periodically flushes pending documents + * to the Directory (every {@link #setMaxBufferedDocs}), + * and also periodically merges segments in the index + * (every {@link #setMergeFactor} flushes). When this + * occurs, the method will take more time to run (possibly + * a long time if the index is large), and will require + * free temporary space in the Directory to do the + * merging.

+ * + *

The amount of free space required when a merge is triggered is + * up to 1X the size of all segments being merged, when no + * readers/searchers are open against the index, and up to 2X the + * size of all segments being merged when readers/searchers are open + * against the index (see {@link #optimize()} for details). The + * sequence of primitive merge operations performed is governed by + * the merge policy. + * + *

Note that each term in the document can be no longer + * than 16383 characters, otherwise an + * IllegalArgumentException will be thrown.

+ * + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + * @param analyzer use the provided analyzer instead of the + * value of {@link #getAnalyzer()} + */ + void addDocument(CL_NS(document)::Document* doc, CL_NS(analysis)::Analyzer* analyzer=NULL); + + + /** + * Expert: asks the mergePolicy whether any merges are + * necessary now and if so, runs the requested merges and + * then iterate (test again if merges are needed) until no + * more merges are returned by the mergePolicy. + * + * Explicit calls to maybeMerge() are usually not + * necessary. The most common case is when merge policy + * parameters have changed. + */ + void maybeMerge(); + + /** + * Close the IndexWriter without committing + * any of the changes that have occurred since it was + * opened. This removes any temporary files that had been + * created, after which the state of the index will be the + * same as it was when this writer was first opened. This + * can only be called when this IndexWriter was opened + * with autoCommit=false. + * @throws IllegalStateException if this is called when + * the writer was opened with autoCommit=true. + * @throws IOException if there is a low-level IO error + */ + void abort(); + + + /** + * Merges all segments from an array of indexes into this index. + *

+ * This is similar to addIndexes(Directory[]). However, no optimize() + * is called either at the beginning or at the end. Instead, merges + * are carried out as necessary. + * + *

NOTE: the index in each Directory must not be + * changed (opened by a writer) while this method is + * running. This method does not acquire a write lock in + * each input Directory, so it is up to the caller to + * enforce this. + * + *

NOTE: while this is running, any attempts to + * add or delete documents (with another thread) will be + * paused until this method completes. + * + *

+ * This requires this index not be among those to be added, and the + * upper bound* of those segment doc counts not exceed maxMergeDocs. + * + *

See {@link #addIndexes(Directory[])} for + * details on transactional semantics, temporary free + * space required in the Directory, and non-CFS segments + * on an Exception.

+ * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + void addIndexesNoOptimize(CL_NS(util)::ArrayBase& dirs); + + /** Merges the provided indexes into this index. + *

After this completes, the index is optimized.

+ *

The provided IndexReaders are not closed.

+ + *

NOTE: the index in each Directory must not be + * changed (opened by a writer) while this method is + * running. This method does not acquire a write lock in + * each input Directory, so it is up to the caller to + * enforce this. + * + *

NOTE: while this is running, any attempts to + * add or delete documents (with another thread) will be + * paused until this method completes. + * + *

See {@link #addIndexes(Directory[])} for + * details on transactional semantics, temporary free + * space required in the Directory, and non-CFS segments + * on an Exception.

+ * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + //NOT IMPLEMENTED YET: void addIndexes(CL_NS(util)::ArrayBase& readers); + + /** Merges all segments from an array of indexes into this index. + * + *

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 indexes + * with this method. + * + *

NOTE: the index in each Directory must not be + * changed (opened by a writer) while this method is + * running. This method does not acquire a write lock in + * each input Directory, so it is up to the caller to + * enforce this. + * + *

NOTE: while this is running, any attempts to + * add or delete documents (with another thread) will be + * paused until this method completes. + * + *

After this completes, the index is optimized. + * + *

This method is transactional in how Exceptions are + * handled: it does not commit a new segments_N file until + * all indexes are added. This means if an Exception + * occurs (for example disk full), then either no indexes + * will have been added or they all will have been.

+ * + *

If an Exception is hit, it's still possible that all + * indexes were successfully added. This happens when the + * Exception is hit when trying to build a CFS file. In + * this case, one segment in the index will be in non-CFS + * format, even when using compound file format.

+ * + *

Also note that on an Exception, the index may still + * have been partially or fully optimized even though none + * of the input indexes were added.

+ * + *

Note that this requires temporary free space in the + * Directory up to 2X the sum of all input indexes + * (including the starting index). If readers/searchers + * are open against the starting index, then temporary + * free space required will be higher by the size of the + * starting index (see {@link #optimize()} for details). + *

+ * + *

Once this completes, the final size of the index + * will be less than the sum of all input index sizes + * (including the starting index). It could be quite a + * bit smaller (if there were many pending deletes) or + * just slightly smaller.

+ * + *

See LUCENE-702 + * for details.

+ * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + void addIndexes(CL_NS(util)::ArrayBase& dirs); + + /** Expert: Return the total size of all index files currently cached in memory. + * Useful for size management with flushRamDocs() + */ + int64_t ramSizeInBytes(); + + /** Expert: Return the number of documents whose segments are currently cached in memory. + * Useful when calling flush() + */ + int32_t numRamDocs(); + + /** for testing only */ + virtual bool testPoint(const char* name); +private: + class LockWith2; + class LockWithCFS; + friend class LockWith2; + friend class LockWithCFS; + friend class DocumentsWriter; + + /** 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); + + void deleteFiles(std::vector& files); + void readDeleteableFiles(std::vector& files); + void writeDeleteableFiles(std::vector& files); + + /* + * 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* segments); + void deleteFiles(std::vector& files, CL_NS(store)::Directory* directory); + void deleteFiles(std::vector& files, std::vector& deletable); + + /** + * Casts current mergePolicy to LogMergePolicy, and throws + * an exception if the mergePolicy is not a LogMergePolicy. + */ + LogMergePolicy* getLogMergePolicy() const; + + void setMessageID(); + + void closeInternal(bool waitForMerges); + void messageState(); + + /** + * If we are flushing by doc count (not by RAM usage), and + * using LogDocMergePolicy then push maxBufferedDocs down + * as its minMergeDocs, to keep backwards compatibility. + */ + void pushMaxBufferedDocs(); + + void finishMerges(bool waitForMerges); + + /** Tells the docWriter to close its currently open shared + * doc stores (stored fields & vectors files). + * Return value specifices whether new doc store files are compound or not. + */ + bool flushDocStores(); + + //for test purposes +protected: + int32_t getDocCount(int32_t i); + int32_t getNumBufferedDocuments(); + int32_t getSegmentCount(); + int32_t getBufferedDeleteTermsSize(); + int32_t getNumBufferedDeleteTerms(); + virtual SegmentInfo* newestSegment(); + +private: + void waitForClose(); + void deletePartialSegmentsFile(); + + /** Returns true if any merges in pendingMerges or + * runningMerges are optimization merges. */ + bool optimizeMergesPending(); + + void resetMergeExceptions(); + + void updatePendingMerges(int32_t maxNumSegmentsOptimize, bool optimize); + + /* + * Begin a transaction. During a transaction, any segment + * merges that happen (or ram segments flushed) will not + * write a new segments file and will not remove any files + * that were present at the start of the transaction. You + * must make a matched (try/finally) call to + * commitTransaction() or rollbackTransaction() to finish + * the transaction. + * + * Note that buffered documents and delete terms are not handled + * within the transactions, so they must be flushed before the + * transaction is started. + */ + void startTransaction(); + + /* + * Rolls back the transaction and restores state to where + * we were at the start. + */ + void rollbackTransaction(); + + /* + * Commits the transaction. This will write the new + * segments file and remove and pending deletions we have + * accumulated during the transaction + */ + void commitTransaction(); + + + void maybeMerge(bool optimize); + void maybeMerge(int32_t maxNumSegmentsOptimize, bool optimize); + /** Does initial setup for a merge, which is fast but holds + * the synchronized lock on IndexWriter instance. */ + void mergeInit(MergePolicy::OneMerge* _merge); + void _mergeInit(MergePolicy::OneMerge* _merge); + + /* If any of our segments are using a directory != ours + * then copy them over. Currently this is only used by + * addIndexesNoOptimize(). */ + void copyExternalSegments(); + + + /* + * Called whenever the SegmentInfos has been updated and + * the index files referenced exist (correctly) in the + * index directory-> If we are in autoCommit mode, we + * commit the change immediately. Else, we mark + * commitPending. + */ + void checkpoint(); + + bool doFlush(bool flushDocStores); + + /* FIXME if we want to support non-contiguous segment merges */ + bool commitMerge(MergePolicy::OneMerge* merge); + + int32_t ensureContiguousMerge(MergePolicy::OneMerge* merge); + + void decrefMergeSegments(MergePolicy::OneMerge* _merge); + + /** Does fininishing for a merge, which is fast but holds + * the synchronized lock on IndexWriter instance. */ + void mergeFinish(MergePolicy::OneMerge* _merge); + + /** Does the actual (time-consuming) work of the merge, + * but without holding synchronized lock on IndexWriter + * instance */ + int32_t mergeMiddle(MergePolicy::OneMerge* _merge); + + void addMergeException(MergePolicy::OneMerge* _merge); + + /** Checks whether this merge involves any segments + * already participating in a merge. If not, this merge + * is "registered", meaning we record that its segments + * are now participating in a merge, and true is + * returned. Else (the merge conflicts) false is + * returned. */ + bool registerMerge(MergePolicy::OneMerge* _merge); + + // Called during flush to apply any buffered deletes. If + // flushedNewSegment is true then a new segment was just + // created and flushed from the ram segments, so we will + // selectively apply the deletes to that new segment. + void applyDeletes(bool flushedNewSegment); + + class Internal; + Internal* _internal; +protected: + // This is called after pending added and deleted + // documents have been flushed to the Directory but before + // the change is committed (_CLNEW segments_N file written). + virtual void doAfterFlush(); + + /** + * Used internally to throw an {@link + * AlreadyClosedException} if this IndexWriter has been + * closed. + * @throws AlreadyClosedException if this IndexWriter is + */ + void ensureOpen(); + + /** + * Flush all in-memory buffered udpates (adds and deletes) + * to the Directory. + * @param triggerMerge if true, we may merge segments (if + * deletes or docs were flushed) if necessary + * @param flushDocStores if false we are allowed to keep + * doc stores open to share with the next segment + */ + void flush(bool triggerMerge, bool flushDocStores); +}; + +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/index/MergePolicy.cpp b/Pods/BRCLucene/src/core/CLucene/index/MergePolicy.cpp new file mode 100644 index 0000000..a0b1507 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/index/MergePolicy.cpp @@ -0,0 +1,514 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "MergePolicy.h" +#include "_SegmentInfos.h" +#include "IndexWriter.h" +#include "CLucene/store/Directory.h" +#include + +CL_NS_USE(util) +CL_NS_USE(store) +CL_NS_DEF(index) + +#define MESSAGE(msg) if ( writer != NULL && writer->getInfoStream() != NULL ) message(msg) + +const int32_t LogMergePolicy::DEFAULT_MAX_MERGE_DOCS = LUCENE_INT32_MAX_SHOULDBE; + +MergePolicy::OneMerge::OneMerge(SegmentInfos* segments, bool _useCompoundFile): + useCompoundFile(_useCompoundFile) +{ + if (0 == segments->size()) + _CLTHROWA(CL_ERR_Runtime,"segments must include at least one segment"); + this->segments = segments; + this->info = NULL; + this->segmentsClone = NULL; + this->mergeGen = 0; + this->maxNumSegmentsOptimize = 0; + aborted = mergeDocStores = optimize = increfDone = registerDone = isExternal = false; +} +MergePolicy::OneMerge::~OneMerge(){ + _CLDELETE(this->segmentsClone); + + while ( this->segments->size() > 0 ){ + this->segments->remove(0,true);//don't delete... + } + _CLDELETE(this->segments);//and finally delete the segments object itself +} + +const char* MergePolicy::OneMerge::getClassName(){ + return "MergePolicy::OneMerge"; +} +const char* MergePolicy::OneMerge::getObjectName() const{ + return getClassName(); +} +void MergePolicy::OneMerge::setException(CLuceneError& error) { + SCOPED_LOCK_MUTEX(THIS_LOCK) + this->error.set(error.number(),error.what()); +} + +const CLuceneError& MergePolicy::OneMerge::getException(){ + SCOPED_LOCK_MUTEX(THIS_LOCK) + return error; +} + +void MergePolicy::OneMerge::abort() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + aborted = true; +} + +bool MergePolicy::OneMerge::isAborted() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + return aborted; +} + +void MergePolicy::OneMerge::checkAborted(CL_NS(store)::Directory* dir){ + SCOPED_LOCK_MUTEX(THIS_LOCK) + if (aborted) + _CLTHROWA(CL_ERR_MergeAborted, (string("merge is aborted: ") + segString(dir)).c_str() ); +} + +std::string MergePolicy::OneMerge::segString(CL_NS(store)::Directory* dir) const{ + std::string b; + const int32_t numSegments = segments->size(); + for(int32_t i=0;i 0) b.append(" "); + b.append(segments->info(i)->segString(dir)); + } + if (info != NULL) + b.append(" into ").append(info->name); + if (optimize) + b.append(" [optimize]"); + return b; +} + + +MergePolicy::MergeSpecification::MergeSpecification(){ + merges = _CLNEW CLArrayList; +} +MergePolicy::MergeSpecification::~MergeSpecification(){ + _CLDELETE(merges); +} +void MergePolicy::MergeSpecification::add(OneMerge* merge) { + merges->push_back(merge); +} + +std::string MergePolicy::MergeSpecification::segString(CL_NS(store)::Directory* dir) { + std::string b = "MergeSpec:\n"; + int32_t count = merges->size(); + for(int32_t i=0;isegString(dir)); + } + return b; +} + + + +const float_t LogMergePolicy::LEVEL_LOG_SPAN = 0.75; + +void LogMergePolicy::message(const string& message) { + if (writer != NULL){ + string msg = "LMP: " + message; + writer->message( msg ); + } +} +int32_t LogMergePolicy::getMergeFactor(){ + return mergeFactor; +} +bool LogMergePolicy::isOptimized(SegmentInfos* infos, IndexWriter* writer, int32_t maxNumSegments, std::vector& segmentsToOptimize){ + const int32_t numSegments = infos->size(); + int32_t numToOptimize = 0; + SegmentInfo* optimizeInfo = NULL; + for(int32_t i=0;iinfo(i); + vector::iterator itr = segmentsToOptimize.begin(); + while ( itr != segmentsToOptimize.end() ){ + if ( *itr == info ) { + numToOptimize++; + optimizeInfo = info; + } + itr++; + } + } + + return numToOptimize <= maxNumSegments && + (numToOptimize != 1 || isOptimized(writer, optimizeInfo)); +} + +bool LogMergePolicy::isOptimized(IndexWriter* writer, SegmentInfo* info){ + return !info->hasDeletions() && + !info->hasSeparateNorms() && + info->dir == writer->getDirectory() && + info->getUseCompoundFile() == _useCompoundFile; +} + +LogMergePolicy::LogMergePolicy(){ + this->maxMergeDocs = DEFAULT_MAX_MERGE_DOCS; + this->mergeFactor = DEFAULT_MERGE_FACTOR; + this->_useCompoundFile = true; + this->_useCompoundDocStore = true; + this->writer = NULL; + this->minMergeSize = this->maxMergeSize = 0; +} + +void LogMergePolicy::setMergeFactor(int32_t mergeFactor) { + if (mergeFactor < 2) + _CLTHROWA(CL_ERR_IllegalArgument, "mergeFactor cannot be less than 2"); + this->mergeFactor = mergeFactor; +} + +bool LogMergePolicy::useCompoundFile(SegmentInfos* /*infos*/, SegmentInfo* /*info*/) { + return _useCompoundFile; +} + +void LogMergePolicy::setUseCompoundFile(bool useCompoundFile) { + this->_useCompoundFile = useCompoundFile; +} + +bool LogMergePolicy::getUseCompoundFile() { + return _useCompoundFile; +} + +bool LogMergePolicy::useCompoundDocStore(SegmentInfos* /*infos*/) { + return _useCompoundDocStore; +} + +void LogMergePolicy::setUseCompoundDocStore(bool useCompoundDocStore) { + this->_useCompoundDocStore = useCompoundDocStore; +} + +bool LogMergePolicy::getUseCompoundDocStore() { + return _useCompoundDocStore; +} + +void LogMergePolicy::close() {} + + +MergePolicy::MergeSpecification* LogMergePolicy::findMergesForOptimize(SegmentInfos* infos, IndexWriter* writer, int32_t maxNumSegments, vector& segmentsToOptimize) { + MergeSpecification* spec = NULL; + + assert (maxNumSegments > 0); + + if (!isOptimized(infos, writer, maxNumSegments, segmentsToOptimize)) { + + // Find the newest (rightmost) segment that needs to + // be optimized (other segments may have been flushed + // since optimize started): + int32_t last = infos->size(); + while(last > 0) { + const SegmentInfo* info = infos->info(--last); + + vector::iterator itr = segmentsToOptimize.begin(); + bool containsInfo = false; + while (itr != segmentsToOptimize.end() ){ + if ( *itr == info ){ + containsInfo = true; + break; + } + itr++; + } + if (containsInfo) { + last++; + break; + } + } + + if (last > 0) { + spec = _CLNEW MergeSpecification(); + + // First, enroll all "full" merges (size + // mergeFactor) to potentially be run concurrently: + while (last - maxNumSegments + 1 >= mergeFactor) { + SegmentInfos* range = _CLNEW SegmentInfos; + infos->range(last-mergeFactor, last, *range); + spec->add(_CLNEW OneMerge(range, _useCompoundFile)); + last -= mergeFactor; + } + + // Only if there are no full merges pending do we + // add a final partial (< mergeFactor segments) merge: + if (0 == spec->merges->size()) { + if (maxNumSegments == 1) { + + // Since we must optimize down to 1 segment, the + // choice is simple: + if (last > 1 || !isOptimized(writer, infos->info(0))){ + SegmentInfos* range = _CLNEW SegmentInfos; + infos->range(0, last, *range); + spec->add(_CLNEW OneMerge(range, _useCompoundFile)); + } + } else if (last > maxNumSegments) { + + // Take care to pick a partial merge that is + // least cost, but does not make the index too + // lopsided. If we always just picked the + // partial tail then we could produce a highly + // lopsided index over time: + + // We must merge this many segments to leave + // maxNumSegments in the index (from when + // optimize was first kicked off): + const int32_t finalMergeSize = last - maxNumSegments + 1; + + // Consider all possible starting points: + int64_t bestSize = 0; + int32_t bestStart = 0; + + for(int32_t i=0;iinfo(j+i)); + if (i == 0 || (sumSize < 2*size(infos->info(i-1)) && sumSize < bestSize)) { + bestStart = i; + bestSize = sumSize; + } + } + + SegmentInfos* range = _CLNEW SegmentInfos; + infos->range(bestStart, bestStart+finalMergeSize, *range); + spec->add(_CLNEW OneMerge(range, _useCompoundFile)); + } + } + + } else + _CLDELETE(spec); + } else + _CLDELETE(spec); + + return spec; +} + +MergePolicy::MergeSpecification* LogMergePolicy::findMerges(SegmentInfos* infos, IndexWriter* writer){ + + const int32_t numSegments = infos->size(); + this->writer = writer; + MESSAGE( string("findMerges: ") + Misc::toString(numSegments) + " segments"); + + // Compute levels, which is just log (base mergeFactor) + // of the size of each segment + ValueArray levels(numSegments); + const float_t norm = log((float_t)mergeFactor); + + for(int32_t i=0;iinfo(i); + int64_t _size = size(info); + + // Floor tiny segments + if (_size < 1) + _size = 1; + levels[i] = log((float_t)_size)/norm; + } + + float_t levelFloor; + if (minMergeSize <= 0) + levelFloor = 0.0; + else + levelFloor = log((float_t)minMergeSize)/norm; + + // Now, we quantize the log values into levels. The + // first level is any segment whose log size is within + // LEVEL_LOG_SPAN of the max size, or, who has such as + // segment "to the right". Then, we find the max of all + // other segments and use that to define the next level + // segment, etc. + + MergeSpecification* spec = NULL; + + int32_t start = 0; + while(start < numSegments) { + + // Find max level of all segments not already + // quantized. + float_t maxLevel = levels[start]; + for(int32_t i=1+start;i maxLevel) + maxLevel = level; + } + + // Now search backwards for the rightmost segment that + // falls into this level: + float_t levelBottom; + if (maxLevel < levelFloor) + // All remaining segments fall into the min level + levelBottom = -1.0F; + else { + levelBottom = maxLevel - LEVEL_LOG_SPAN; + + // Force a boundary at the level floor + if (levelBottom < levelFloor && maxLevel >= levelFloor) + levelBottom = levelFloor; + } + + int32_t upto = numSegments-1; + while(upto >= start) { + if (levels[upto] >= levelBottom) { + break; + } + upto--; + } + MESSAGE(string(" level ") + Misc::toString(levelBottom) + " to " + Misc::toString(maxLevel) + ": " + Misc::toString(1+upto-start) + " segments"); + + // Finally, record all merges that are viable at this level: + int32_t end = start + mergeFactor; + while(end <= 1+upto) { + bool anyTooLarge = false; + for(int32_t i=start;iinfo(i); + anyTooLarge |= (size(info) >= maxMergeSize || info->docCount >= maxMergeDocs); + } + + if (!anyTooLarge) { + if (spec == NULL) + spec = _CLNEW MergeSpecification(); + MESSAGE( string(" ") + Misc::toString(start) + " to " + Misc::toString(end) + ": add this merge"); + SegmentInfos* range = _CLNEW SegmentInfos; + infos->range(start, end, *range); + spec->add(_CLNEW OneMerge(range, _useCompoundFile)); + } else + MESSAGE( string(" ") + Misc::toString(start) + " to " + Misc::toString(end) + ": contains segment over maxMergeSize or maxMergeDocs; skipping"); + + start = end; + end = start + mergeFactor; + } + + start = 1+upto; + } + + return spec; +} + +void LogMergePolicy::setMaxMergeDocs(int32_t maxMergeDocs) { + this->maxMergeDocs = maxMergeDocs; +} + +int32_t LogMergePolicy::getMaxMergeDocs() { + return maxMergeDocs; +} + +const char* LogMergePolicy::getClassName(){ + return "LogMergePolicy"; +} +const char* LogMergePolicy::getObjectName() const{ + return getClassName(); +} +bool LogMergePolicy::instanceOf(const char* other) const{ + const char* t = this->getObjectName(); + if ( t==other || strcmp( t, other )==0 ){ + return true; + } + t = getClassName(); + if ( t==other || strcmp( t, other )==0 ){ + return true; + } + return false; +} + + + + +LogDocMergePolicy::LogDocMergePolicy() { + minMergeSize = DEFAULT_MIN_MERGE_DOCS; + + // maxMergeSize is never used by LogDocMergePolicy; set + // it to Long.MAX_VALUE to disable it + maxMergeSize = LUCENE_INT64_MAX_SHOULDBE; +} + +void LogDocMergePolicy::setMinMergeDocs(int32_t minMergeDocs) { + minMergeSize = minMergeDocs; +} + +int32_t LogDocMergePolicy::getMinMergeDocs() { + return (int32_t)minMergeSize; +} + +int64_t LogDocMergePolicy::size(SegmentInfo* info) { + return info->docCount; +} + +const char* LogDocMergePolicy::getClassName(){ + return "LogDocMergePolicy"; +} +const char* LogDocMergePolicy::getObjectName() const{ + return getClassName(); +} + + + + +int64_t LogByteSizeMergePolicy::size(SegmentInfo* info) { + return info->sizeInBytes(); +} + +/** Default minimum segment size. @see setMinMergeMB */ +const float_t LogByteSizeMergePolicy::DEFAULT_MIN_MERGE_MB = 1.6; + +/** Default maximum segment size. A segment of this size + * or larger will never be merged. @see setMaxMergeMB */ +const float_t LogByteSizeMergePolicy::DEFAULT_MAX_MERGE_MB = (float_t)LUCENE_INT64_MAX_SHOULDBE; + +LogByteSizeMergePolicy::LogByteSizeMergePolicy() { + minMergeSize = (int64_t) (DEFAULT_MIN_MERGE_MB*1024*1024); + maxMergeSize = (uint64_t) (DEFAULT_MAX_MERGE_MB); //*1024*1024 +} + +/**

Determines the largest segment (measured by total + * byte size of the segment's files, in MB) that may be + * merged with other segments. Small values (e.g., less + * than 50 MB) 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.

+ * + *

Note that {@link #setMaxMergeDocs} is also + * used to check whether a segment is too large for + * merging (it's either or).

*/ +void LogByteSizeMergePolicy::setMaxMergeMB(float_t mb) { + maxMergeSize = (uint64_t) (mb*1024*1024); +} + +/** Returns the largest segment (meaured by total byte + * size of the segment's files, in MB) that may be merged + * with other segments. + * @see #setMaxMergeMB */ +float_t LogByteSizeMergePolicy::getMaxMergeMB() { + return ((float_t) maxMergeSize)/1024/1024; +} + +/** Sets the minimum size for the lowest level segments. + * Any segments below this size are considered to be on + * the same level (even if they vary drastically in size) + * and will be merged whenever there are mergeFactor of + * them. This effectively truncates the "long tail" of + * small segments that would otherwise be created into a + * single level. If you set this too large, it could + * greatly increase the merging cost during indexing (if + * you flush many small segments). */ +void LogByteSizeMergePolicy::setMinMergeMB(float_t mb) { + minMergeSize = (int64_t) (mb*1024*1024); +} + +/** Get the minimum size for a segment to remain + * un-merged. + * @see #setMinMergeMB **/ +float_t LogByteSizeMergePolicy::getMinMergeMB() { + return ((float_t) minMergeSize)/1024/1024; +} + +const char* LogByteSizeMergePolicy::getClassName(){ + return "LogByteSizeMergePolicy"; +} +const char* LogByteSizeMergePolicy::getObjectName() const{ + return getClassName(); +} + + +CL_NS_END diff --git a/Pods/BRCLucene/src/core/CLucene/index/MergePolicy.h b/Pods/BRCLucene/src/core/CLucene/index/MergePolicy.h new file mode 100644 index 0000000..79caf40 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/index/MergePolicy.h @@ -0,0 +1,438 @@ +/*------------------------------------------------------------------------------ +* 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_MergePolicy_ +#define _lucene_index_MergePolicy_ + +#include "CLucene/util/VoidList.h" +CL_CLASS_DEF(store,Directory) +CL_NS_DEF(index) + +class SegmentInfo; +class SegmentInfos; +class IndexWriter; + +/** + *

Expert: a MergePolicy determines the sequence of + * primitive merge operations to be used for overall merge + * and optimize operations.

+ * + *

Whenever the segments in an index have been altered by + * {@link IndexWriter}, either the addition of a newly + * flushed segment, addition of many segments from + * addIndexes* calls, or a previous merge that may now need + * to cascade, {@link IndexWriter} invokes {@link + * #findMerges} to give the MergePolicy a chance to pick + * merges that are now required. This method returns a + * {@link MergeSpecification} instance describing the set of + * merges that should be done, or null if no merges are + * necessary. When IndexWriter.optimize is called, it calls + * {@link #findMergesForOptimize} and the MergePolicy should + * then return the necessary merges.

+ * + *

Note that the policy can return more than one merge at + * a time. In this case, if the writer is using {@link + * SerialMergeScheduler}, the merges will be run + * sequentially but if it is using {@link + * ConcurrentMergeScheduler} they will be run concurrently.

+ * + *

The default MergePolicy is {@link + * LogByteSizeMergePolicy}.

+ *

NOTE: This API is new and still experimental + * (subject to change suddenly in the next release)

+ */ +class CLUCENE_EXPORT MergePolicy: public CL_NS(util)::NamedObject { +public: + /** OneMerge provides the information necessary to perform + * an individual primitive merge operation, resulting in + * a single new segment. The merge spec includes the + * subset of segments to be merged as well as whether the + * new segment should use the compound file format. */ + class CLUCENE_EXPORT OneMerge: public CL_NS(util)::NamedObject { + public: + DEFINE_MUTEX(THIS_LOCK) + SegmentInfo* info; // used by IndexWriter + bool mergeDocStores; // used by IndexWriter + bool optimize; // used by IndexWriter + SegmentInfos* segmentsClone; // used by IndexWriter + bool increfDone; // used by IndexWriter + bool registerDone; // used by IndexWriter + int64_t mergeGen; // used by IndexWriter + bool isExternal; // used by IndexWriter + int32_t maxNumSegmentsOptimize; // used by IndexWriter + + SegmentInfos* segments; + const bool useCompoundFile; + bool aborted; + CLuceneError error; + + /** + * Constructor + * @memory, segments object is consumed. The SegmentInfo objects within are referenced + */ + OneMerge(SegmentInfos* segments, bool _useCompoundFile); + ~OneMerge(); + + /** Record that an exception occurred while executing + * this merge */ + void setException(CLuceneError& error); + + /** Retrieve previous exception set by {@link + * #setException}. */ + const CLuceneError& getException(); + + /** Mark this merge as aborted. If this is called + * before the merge is committed then the merge will + * not be committed. */ + void abort(); + + /** Returns true if this merge was aborted. */ + bool isAborted(); + + void checkAborted(CL_NS(store)::Directory* dir); + + std::string segString(CL_NS(store)::Directory* dir) const; + + static const char* getClassName(); + virtual const char* getObjectName() const; + }; + + /** + * A MergeSpecification instance provides the information + * necessary to perform multiple merges. It simply + * contains a list of {@link OneMerge} instances. + */ + + class CLUCENE_EXPORT MergeSpecification { + public: + MergeSpecification(); + ~MergeSpecification(); + + /** + * The subset of segments to be included in the primitive merge. + */ + CL_NS(util)::CLArrayList* merges; + + void add(OneMerge* merge); + + std::string segString(CL_NS(store)::Directory* dir); + }; + + + /** + * Determine what set of merge operations are now + * necessary on the index. The IndexWriter calls this + * whenever there is a change to the segments. This call + * is always synchronized on the IndexWriter instance so + * only one thread at a time will call this method. + * + * @param segmentInfos the total set of segments in the index + * @param writer IndexWriter instance + */ + virtual MergeSpecification* findMerges(SegmentInfos* segmentInfos, + IndexWriter* writer) = 0; + + /** + * Determine what set of merge operations are necessary in + * order to optimize the index. The IndexWriter calls + * this when its optimize() method is called. This call + * is always synchronized on the IndexWriter instance so + * only one thread at a time will call this method. + * + * @param segmentInfos the total set of segments in the index + * @param writer IndexWriter instance + * @param maxSegmentCount requested maximum number of + * segments in the index (currently this is always 1) + * @param segmentsToOptimize contains the specific + * SegmentInfo instances that must be merged away. This + * may be a subset of all SegmentInfos. + */ + virtual MergeSpecification* findMergesForOptimize(SegmentInfos* segmentInfos, + IndexWriter* writer, + int32_t maxSegmentCount, + std::vector& segmentsToOptimize) = 0; + + /** + * Release all resources for the policy. + */ + virtual void close() = 0; + + /** + * Returns true if a newly flushed (not from merge) + * segment should use the compound file format. + */ + virtual bool useCompoundFile(SegmentInfos* segments, SegmentInfo* newSegment) = 0; + + /** + * Returns true if the doc store files should use the + * compound file format. + */ + virtual bool useCompoundDocStore(SegmentInfos* segments) = 0; +}; + + + + + + + + + + + + + +/**

This class implements a {@link MergePolicy} that tries + * to merge segments into levels of exponentially + * increasing size, where each level has < mergeFactor + * segments in it. Whenever a given levle has mergeFactor + * segments or more in it, they will be merged.

+ * + *

This class is abstract and requires a subclass to + * define the {@link #size} method which specifies how a + * segment's size is determined. {@link LogDocMergePolicy} + * is one subclass that measures size by document count in + * the segment. {@link LogByteSizeMergePolicy} is another + * subclass that measures size as the total byte size of the + * file(s) for the segment.

+ */ +class CLUCENE_EXPORT LogMergePolicy: public MergePolicy { + + int32_t mergeFactor; + + int32_t maxMergeDocs; + + bool _useCompoundFile; + bool _useCompoundDocStore; + IndexWriter* writer; + + void message(const std::string& message); + + bool isOptimized(SegmentInfos* infos, IndexWriter* writer, int32_t maxNumSegments, std::vector& segmentsToOptimize); + + /** Returns true if this single nfo is optimized (has no + * pending norms or deletes, is in the same dir as the + * writer, and matches the current compound file setting */ + bool isOptimized(IndexWriter* writer, SegmentInfo* info); + + +protected: + virtual int64_t size(SegmentInfo* info) = 0; + int64_t minMergeSize; + uint64_t maxMergeSize; + +public: + LogMergePolicy(); + + /** Defines the allowed range of log(size) for each + * level. A level is computed by taking the max segment + * log size, minuse LEVEL_LOG_SPAN, and finding all + * segments falling within that range. */ + static const float_t LEVEL_LOG_SPAN; + + /** Default merge factor, which is how many segments are + * merged at a time */ + LUCENE_STATIC_CONSTANT(int32_t, DEFAULT_MERGE_FACTOR = 10); + + /** Default maximum segment size. A segment of this size + * or larger will never be merged. @see setMaxMergeDocs */ + static const int32_t DEFAULT_MAX_MERGE_DOCS; + + /**

Returns the number of segments that are merged at + * once and also controls the total number of segments + * allowed to accumulate in the index.

*/ + int32_t getMergeFactor(); + + /** 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 (> 10) are best for batch + * index creation, and smaller values (< 10) for indices + * that are interactively maintained. */ + void setMergeFactor(int32_t mergeFactor); + + // Javadoc inherited + bool useCompoundFile(SegmentInfos* infos, SegmentInfo* info); + + /** Sets whether compound file format should be used for + * newly flushed and newly merged segments. */ + void setUseCompoundFile(bool useCompoundFile); + + /** Returns true if newly flushed and newly merge segments + * are written in compound file format. @see + * #setUseCompoundFile */ + bool getUseCompoundFile(); + + // Javadoc inherited + bool useCompoundDocStore(SegmentInfos* infos); + + /** Sets whether compound file format should be used for + * newly flushed and newly merged doc store + * segment files (term vectors and stored fields). */ + void setUseCompoundDocStore(bool useCompoundDocStore); + + /** Returns true if newly flushed and newly merge doc + * store segment files (term vectors and stored fields) + * are written in compound file format. @see + * #setUseCompoundDocStore */ + bool getUseCompoundDocStore(); + + void close(); + + + /** Returns the merges necessary to optimize the index. + * This merge policy defines "optimized" to mean only one + * segment in the index, where that segment has no + * deletions pending nor separate norms, and it is in + * compound file format if the current useCompoundFile + * setting is true. This method returns multiple merges + * (mergeFactor at a time) so the {@link MergeScheduler} + * in use may make use of concurrency. */ + MergeSpecification* findMergesForOptimize(SegmentInfos* segmentInfos, + IndexWriter* writer, + int32_t maxSegmentCount, + std::vector& segmentsToOptimize); + + /** Checks if any merges are now necessary and returns a + * {@link MergePolicy.MergeSpecification} if so. A merge + * is necessary when there are more than {@link + * #setMergeFactor} segments at a given level. When + * multiple levels have too many segments, this method + * will return multiple merges, allowing the {@link + * MergeScheduler} to use concurrency. */ + MergeSpecification* findMerges(SegmentInfos* infos, IndexWriter* writer); + + /**

Determines the largest segment (measured by + * document count) that may be merged with other segments. + * 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.

+ * + *

The default value is {@link Integer#MAX_VALUE}.

+ * + *

The default merge policy ({@link + * LogByteSizeMergePolicy}) also allows you to set this + * limit by net size (in MB) of the segment, using {@link + * LogByteSizeMergePolicy#setMaxMergeMB}.

+ */ + void setMaxMergeDocs(int32_t maxMergeDocs); + + /** Returns the largest segment (measured by document + * count) that may be merged with other segments. + * @see #setMaxMergeDocs */ + int32_t getMaxMergeDocs(); + + + virtual bool instanceOf(const char* otherobject) const; + static const char* getClassName(); + virtual const char* getObjectName() const; +}; + + + + + + +/** This is a {@link LogMergePolicy} that measures size of a + * segment as the number of documents (not taking deletions + * into account). */ +class CLUCENE_EXPORT LogDocMergePolicy: public LogMergePolicy { +public: + + /** Default minimum segment size. @see setMinMergeDocs */ + LUCENE_STATIC_CONSTANT(int32_t, DEFAULT_MIN_MERGE_DOCS = 1000); + + LogDocMergePolicy(); + + /** Sets the minimum size for the lowest level segments. + * Any segments below this size are considered to be on + * the same level (even if they vary drastically in size) + * and will be merged whenever there are mergeFactor of + * them. This effectively truncates the "int64_t tail" of + * small segments that would otherwise be created into a + * single level. If you set this too large, it could + * greatly increase the merging cost during indexing (if + * you flush many small segments). */ + void setMinMergeDocs(int32_t minMergeDocs); + + /** Get the minimum size for a segment to remain + * un-merged. + * @see #setMinMergeDocs **/ + int32_t getMinMergeDocs(); + + + static const char* getClassName(); + virtual const char* getObjectName() const; +protected: + int64_t size(SegmentInfo* info); +}; + + +/** This is a {@link LogMergePolicy} that measures size of a + * segment as the total byte size of the segment's files. */ +class CLUCENE_EXPORT LogByteSizeMergePolicy: public LogMergePolicy { +protected: + int64_t size(SegmentInfo* info); + +public: + /** Default minimum segment size. @see setMinMergeMB */ + static const float_t DEFAULT_MIN_MERGE_MB; + + /** Default maximum segment size. A segment of this size + * or larger will never be merged. @see setMaxMergeMB */ + static const float_t DEFAULT_MAX_MERGE_MB; + + LogByteSizeMergePolicy(); + + /**

Determines the largest segment (measured by total + * byte size of the segment's files, in MB) that may be + * merged with other segments. Small values (e.g., less + * than 50 MB) 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.

+ * + *

Note that {@link #setMaxMergeDocs} is also + * used to check whether a segment is too large for + * merging (it's either or).

*/ + void setMaxMergeMB(float_t mb); + + /** Returns the largest segment (meaured by total byte + * size of the segment's files, in MB) that may be merged + * with other segments. + * @see #setMaxMergeMB */ + float_t getMaxMergeMB(); + + /** Sets the minimum size for the lowest level segments. + * Any segments below this size are considered to be on + * the same level (even if they vary drastically in size) + * and will be merged whenever there are mergeFactor of + * them. This effectively truncates the "long tail" of + * small segments that would otherwise be created into a + * single level. If you set this too large, it could + * greatly increase the merging cost during indexing (if + * you flush many small segments). */ + void setMinMergeMB(float_t mb); + + /** Get the minimum size for a segment to remain + * un-merged. + * @see #setMinMergeMB **/ + float_t getMinMergeMB(); + + static const char* getClassName(); + virtual const char* getObjectName() const; +}; + + + +CL_NS_END +#endif + diff --git a/Pods/BRCLucene/src/core/CLucene/index/MergeScheduler.cpp b/Pods/BRCLucene/src/core/CLucene/index/MergeScheduler.cpp new file mode 100644 index 0000000..9de63b3 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/index/MergeScheduler.cpp @@ -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. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "MergeScheduler.h" +#include "IndexWriter.h" + + +CL_NS_DEF(index) + + +const char* SerialMergeScheduler::getObjectName() const{ + return getClassName(); +} +const char* SerialMergeScheduler::getClassName(){ + return "SerialMergeScheduler"; +} + +void SerialMergeScheduler::merge(IndexWriter* writer){ + SCOPED_LOCK_MUTEX(THIS_LOCK) + while(true) { + MergePolicy::OneMerge* merge = writer->getNextMerge(); + if (merge == NULL) + break; + writer->merge(merge); + } +} + +void SerialMergeScheduler::close() {} + +CL_NS_END diff --git a/Pods/BRCLucene/src/core/CLucene/index/MergeScheduler.h b/Pods/BRCLucene/src/core/CLucene/index/MergeScheduler.h new file mode 100644 index 0000000..97cb8b3 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/index/MergeScheduler.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_index_MergeScheduler_ +#define _lucene_index_MergeScheduler_ + +#include "CLucene/util/Equators.h" +#include "CLucene/LuceneThreads.h" +CL_NS_DEF(index) + +class IndexWriter; + +/** Expert: {@link IndexWriter} uses an instance + * implementing this interface to execute the merges + * selected by a {@link MergePolicy}. The default + * MergeScheduler is {@link ConcurrentMergeScheduler}. + *

NOTE: This API is new and still experimental + * (subject to change suddenly in the next release)

+*/ +class CLUCENE_EXPORT MergeScheduler: public CL_NS(util)::NamedObject { +public: + /** Run the merges provided by {@link IndexWriter#getNextMerge()}. */ + virtual void merge(IndexWriter* writer) = 0; + + /** Close this MergeScheduler. */ + virtual void close() = 0; +}; + +/** A {@link MergeScheduler} that simply does each merge + * sequentially, using the current thread. */ +class CLUCENE_EXPORT SerialMergeScheduler: public MergeScheduler { +public: + DEFINE_MUTEX(THIS_LOCK) + + /** Just do the merges in sequence. We do this + * "synchronized" so that even if the application is using + * multiple threads, only one merge may run at a time. */ + void merge(IndexWriter* writer); + void close(); + + const char* getObjectName() const; + static const char* getClassName(); +}; + + +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/index/MultiReader.cpp b/Pods/BRCLucene/src/core/CLucene/index/MultiReader.cpp new file mode 100644 index 0000000..0a94c5f --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/index/MultiReader.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/_ApiHeader.h" +#include "MultiReader.h" +#include "_MultiSegmentReader.h" + +#include "IndexReader.h" +#include "CLucene/document/Document.h" +#include "Term.h" +#include "Terms.h" +#include "CLucene/util/PriorityQueue.h" +#include "_SegmentHeader.h" +#include "_SegmentMergeInfo.h" +#include "_SegmentMergeQueue.h" + +CL_NS_USE(store) +CL_NS_USE(document) +CL_NS_USE(util) +CL_NS_DEF(index) + + + +class MultiReader::Internal: LUCENE_BASE{ +public: + MultiSegmentReader::NormsCacheType normsCache; + + bool* closeOnClose; //remember which subreaders to close on close + bool _hasDeletions; + uint8_t* ones; + int32_t _maxDoc; + int32_t _numDocs; + + Internal(): + normsCache(true, true) + { + _maxDoc = 0; + _numDocs = -1; + ones = NULL; + _hasDeletions = false; + closeOnClose = NULL; + } + ~Internal(){ + _CLDELETE_ARRAY(ones); + _CLDELETE_ARRAY(closeOnClose); + } +}; + +MultiReader::MultiReader(const CL_NS(util)::ArrayBase* subReaders, bool closeSubReaders) +{ + this->_internal = _CLNEW Internal(); + this->init(subReaders, closeSubReaders); +} + +void MultiReader::init(const CL_NS(util)::ArrayBase* _subReaders, bool closeSubReaders){ + this->subReaders = _CLNEW CL_NS(util)::ValueArray(_subReaders->length); + starts = _CL_NEWARRAY(int32_t, subReaders->length + 1); // build starts array + _internal->closeOnClose = _CL_NEWARRAY(bool, subReaders->length); + + for (size_t i = 0; i < subReaders->length; i++) { + this->subReaders->values[i] = _subReaders->values[i]; + starts[i] = _internal->_maxDoc; + + // compute maxDocs + _internal->_maxDoc += (*subReaders)[i]->maxDoc(); + _internal->closeOnClose[i] = closeSubReaders; + if ((*subReaders)[i]->hasDeletions()) + _internal->_hasDeletions = true; + } + starts[subReaders->length] = _internal->_maxDoc; +} + +MultiReader::~MultiReader() { +//Func - Destructor +//Pre - true +//Post - The instance has been destroyed all IndexReader instances +// this instance managed have been destroyed to + + close(); + _CLDELETE(_internal); + _CLDELETE_ARRAY(starts); + _CLDELETE(subReaders); +} + + +IndexReader* MultiReader::reopen() { + ensureOpen(); + + bool reopened = false; + ValueArray newSubReaders(subReaders->length); + ValueArray newCloseOnClose(subReaders->length); + + bool success = false; + IndexReader* ret = NULL; + try { + for (size_t i = 0; i < subReaders->length; i++) { + newSubReaders[i] = (*subReaders)[i]->reopen(); + + // if at least one of the subreaders was updated we remember that + // and return a new MultiReader + if (newSubReaders[i] != (*subReaders)[i]) { + reopened = true; + // this is a new subreader instance, so on close() we don't close it + newCloseOnClose[i] = true; + } + } + + if (reopened) { + MultiReader* mr = _CLNEW MultiReader(&newSubReaders); + + for (size_t i = 0; i < subReaders->length; i++) { + if (newSubReaders[i] == (*subReaders)[i]) { + // 'give' the memory to the new object + mr->_internal->closeOnClose[i] = this->_internal->closeOnClose[i]; + this->subReaders->values[i] = NULL; + } + } + success = true; + ret = mr; + } else { + success = true; + ret = this; + } + } _CLFINALLY ( + if (!success && reopened) { + for (size_t i = 0; i < newSubReaders.length; i++) { + if (newSubReaders[i] != NULL) { + try { + if (newCloseOnClose[i]) { + newSubReaders.values[i]->close(); + _CLDELETE(newSubReaders.values[i]); + } + } catch (CLuceneError& ignore) { + if ( ignore.number() != CL_ERR_IO ) throw ignore; + // keep going - we want to clean up as much as possible + } + } + } + } + ) + return ret; +} + +ArrayBase* MultiReader::getTermFreqVectors(int32_t n){ + ensureOpen(); + int32_t i = readerIndex(n); // find segment num + return (*subReaders)[i]->getTermFreqVectors(n - starts[i]); // dispatch to segment +} + +TermFreqVector* MultiReader::getTermFreqVector(int32_t n, const TCHAR* field){ + ensureOpen(); + int32_t i = readerIndex(n); // find segment num + return (*subReaders)[i]->getTermFreqVector(n - starts[i], field); +} + +void MultiReader::getTermFreqVector(int32_t docNumber, const TCHAR* field, TermVectorMapper* mapper) { + ensureOpen(); + int32_t i = readerIndex(docNumber); // find segment num + (*subReaders)[i]->getTermFreqVector(docNumber - starts[i], field, mapper); +} + +void MultiReader::getTermFreqVector(int32_t docNumber, TermVectorMapper* mapper) { + ensureOpen(); + int32_t i = readerIndex(docNumber); // find segment num + (*subReaders)[i]->getTermFreqVector(docNumber - starts[i], mapper); +} + +bool MultiReader::isOptimized() { + return false; +} + + +int32_t MultiReader::numDocs() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + // Don't call ensureOpen() here (it could affect performance) + if (_internal->_numDocs == -1) { // check cache + int32_t n = 0; // cache miss--recompute + for (size_t i = 0; i < subReaders->length; i++){ + n += (*subReaders)[i]->numDocs(); // sum from readers + } + _internal->_numDocs = n; + } + return _internal->_numDocs; +} + +int32_t MultiReader::maxDoc() const { + // Don't call ensureOpen() here (it could affect performance) + return _internal->_maxDoc; +} + +bool MultiReader::document(int32_t n, CL_NS(document)::Document& doc, const FieldSelector* fieldSelector){ + ensureOpen(); + int32_t i = readerIndex(n); // find segment num + return (*subReaders)[i]->document(n - starts[i],doc, fieldSelector); // dispatch to segment reader +} + +bool MultiReader::isDeleted(const int32_t n) { + // Don't call ensureOpen() here (it could affect performance) + int32_t i = readerIndex(n); // find segment num + return (*subReaders)[i]->isDeleted(n - starts[i]); // dispatch to segment reader +} + +bool MultiReader::hasDeletions() const{ + // Don't call ensureOpen() here (it could affect performance) + return _internal->_hasDeletions; +} + +const ArrayBase* MultiReader::getSubReaders() const{ + return subReaders; +} + +uint8_t* MultiReader::norms(const TCHAR* field){ + SCOPED_LOCK_MUTEX(THIS_LOCK) + ensureOpen(); + uint8_t* bytes; + bytes = _internal->normsCache.get((TCHAR*)field); + if (bytes != NULL){ + return bytes; // cache hit + } + + if ( !hasNorms(field) ) + return fakeNorms(); + + bytes = _CL_NEWARRAY(uint8_t,maxDoc()); + for (size_t i = 0; i < subReaders->length; 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 + _internal->normsCache.put(key, bytes); + + return bytes; +} + +void MultiReader::norms(const TCHAR* field, uint8_t* result) { + SCOPED_LOCK_MUTEX(THIS_LOCK) + uint8_t* bytes = norms(field); + if (bytes != NULL){ // return + memcpy(result,bytes, maxDoc() * sizeof(int32_t)); + } +} + + +void MultiReader::doSetNorm(int32_t n, const TCHAR* field, uint8_t value){ + _internal->normsCache.removeitr( _internal->normsCache.find((TCHAR*)field) ); // clear cache + int32_t i = readerIndex(n); // find segment num + (*subReaders)[i]->setNorm(n-starts[i], field, value); // dispatch +} + +TermEnum* MultiReader::terms() { + ensureOpen(); + return _CLNEW MultiTermEnum(subReaders, starts, NULL); +} + +TermEnum* MultiReader::terms(const Term* term) { + ensureOpen(); + return _CLNEW MultiTermEnum(subReaders, starts, term); +} + +int32_t MultiReader::docFreq(const Term* t) { + ensureOpen(); + int32_t total = 0; // sum freqs in Multi + for (size_t i = 0; i < subReaders->length; i++) + total += (*subReaders)[i]->docFreq(t); + return total; +} + +TermDocs* MultiReader::termDocs() { + ensureOpen(); + TermDocs* ret = _CLNEW MultiTermDocs(subReaders, starts); + return ret; +} + +TermPositions* MultiReader::termPositions() { + ensureOpen(); + TermPositions* ret = (TermPositions*)_CLNEW MultiTermPositions(subReaders, starts); + return ret; +} + +void MultiReader::doDelete(const int32_t n) { + _internal->_numDocs = -1; // invalidate cache + int32_t i = readerIndex(n); // find segment num + (*subReaders)[i]->deleteDocument(n - starts[i]); // dispatch to segment reader + _internal->_hasDeletions = true; +} + +int32_t MultiReader::readerIndex(const int32_t n) const { // find reader for doc n: + return MultiSegmentReader::readerIndex(n, this->starts, this->subReaders->length); +} + +bool MultiReader::hasNorms(const TCHAR* field) { + ensureOpen(); + for (size_t i = 0; i < subReaders->length; i++) { + if ((*subReaders)[i]->hasNorms(field)) + return true; + } + return false; +} +uint8_t* MultiReader::fakeNorms() { + if (_internal->ones==NULL) + _internal->ones=SegmentReader::createFakeNorms(maxDoc()); + return _internal->ones; +} + +void MultiReader::doUndeleteAll(){ + for (size_t i = 0; i < subReaders->length; i++) + (*subReaders)[i]->undeleteAll(); + _internal->_hasDeletions = false; + _internal->_numDocs = -1; +} +void MultiReader::doCommit() { + for (size_t i = 0; i < subReaders->length; i++) + (*subReaders)[i]->commit(); +} + +void MultiReader::doClose() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + for (size_t i = 0; i < subReaders->length; i++){ + if ( (*subReaders)[i] == NULL ) continue; //reopen may take some memory... + if (_internal->closeOnClose[i]) { + subReaders->values[i]->close(); + _CLDELETE(subReaders->values[i]); + } + } +} + + +void MultiReader::getFieldNames(FieldOption fieldNames, StringArrayWithDeletor& retarray){ + ensureOpen(); + return MultiSegmentReader::getFieldNames(fieldNames, retarray, this->subReaders); +} + +bool MultiReader::isCurrent(){ + for (size_t i = 0; i < subReaders->length; i++) { + if (!(*subReaders)[i]->isCurrent()) { + return false; + } + } + + // all subreaders are up to date + return true; +} + +/** Not implemented. + * @throws UnsupportedOperationException + */ +int64_t MultiReader::getVersion() { + _CLTHROWA(CL_ERR_UnsupportedOperation, "MultiReader does not support this method."); +} + +const char* MultiReader::getClassName(){ + return "MultiReader"; +} +const char* MultiReader::getObjectName() const{ + return getClassName(); +} +CL_NS_END diff --git a/Pods/BRCLucene/src/core/CLucene/index/MultiReader.h b/Pods/BRCLucene/src/core/CLucene/index/MultiReader.h new file mode 100644 index 0000000..64d1cca --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/index/MultiReader.h @@ -0,0 +1,129 @@ +/*------------------------------------------------------------------------------ +* 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 + + +//#include "SegmentHeader.h" +#include "IndexReader.h" +CL_CLASS_DEF(document,Document) +//#include "Terms.h" +//#include "SegmentMergeQueue.h" + +CL_NS_DEF(index) + +/** An IndexReader which reads multiple indexes, appending their content. +*/ +class CLUCENE_EXPORT MultiReader:public IndexReader{ +private: + class Internal; + Internal* _internal; + int32_t readerIndex(const int32_t n) const; + bool hasNorms(const TCHAR* field); + uint8_t* fakeNorms(); + + void init(const CL_NS(util)::ArrayBase* subReaders, bool closeSubReaders); +protected: + CL_NS(util)::ArrayBase* subReaders; + int32_t* starts; // 1st docno for each segment + + void doSetNorm(int32_t n, const TCHAR* field, uint8_t value); + void doUndeleteAll(); + void doCommit(); + void doClose(); + void doDelete(const int32_t n); +public: + /** + *

Construct a MultiReader aggregating the named set of (sub)readers. + * Directory locking for delete, undeleteAll, and setNorm operations is + * left to the subreaders.

+ * @param subReaders set of (sub)readers + * @param closeSubReaders The subReaders (IndexReader instances) are deleted if true + * @throws IOException + * @memory The subReaders array itself belongs to the caller + */ + MultiReader(const CL_NS(util)::ArrayBase* subReaders, bool closeSubReaders=true); + + ~MultiReader(); + + + /** + * Tries to reopen the subreaders. + *
+ * If one or more subreaders could be re-opened (i. e. subReader.reopen() + * returned a new instance != subReader), then a new MultiReader instance + * is returned, otherwise this instance is returned. + *

+ * A re-opened instance might share one or more subreaders with the old + * instance. Index modification operations result in undefined behavior + * when performed before the old instance is closed. + * (see {@link IndexReader#reopen()}). + *

+ * If subreaders are shared, then the reference count of those + * readers is increased to ensure that the subreaders remain open + * until the last referring reader is closed. + * + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + IndexReader* reopen(); + + TermFreqVector* getTermFreqVector(int32_t n, const TCHAR* field=NULL); + + void getTermFreqVector(int32_t docNumber, const TCHAR* field, TermVectorMapper* mapper); + void getTermFreqVector(int32_t docNumber, TermVectorMapper* mapper); + + /** 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. + */ + CL_NS(util)::ArrayBase* getTermFreqVectors(int32_t n); + + bool isOptimized(); + + int32_t numDocs(); + int32_t maxDoc() const; + bool document(int32_t n, CL_NS(document)::Document& doc, const CL_NS(document)::FieldSelector* fieldSelector); + bool isDeleted(const int32_t n); + bool hasDeletions() const; + uint8_t* norms(const TCHAR* field); + void norms(const TCHAR* field, uint8_t* result); + TermEnum* terms(); + TermEnum* terms(const Term* term); + + //Returns the document frequency of the current term in the set + int32_t docFreq(const Term* t=NULL); + TermDocs* termDocs(); + TermPositions* termPositions(); + + /** + * @see IndexReader#getFieldNames(IndexReader.FieldOption fldOption) + */ + void getFieldNames(FieldOption fldOption, StringArrayWithDeletor& retarray); + + + /** + * Checks recursively if all subreaders are up to date. + */ + bool isCurrent(); + + /** Not implemented. + * @throws UnsupportedOperationException + */ + int64_t getVersion(); + + const CL_NS(util)::ArrayBase* getSubReaders() const; + + static const char* getClassName(); + const char* getObjectName() const; +}; + + +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/index/MultiSegmentReader.cpp b/Pods/BRCLucene/src/core/CLucene/index/MultiSegmentReader.cpp new file mode 100644 index 0000000..252b94d --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/index/MultiSegmentReader.cpp @@ -0,0 +1,898 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" + +#include "IndexReader.h" +#include "CLucene/document/Document.h" +#include "CLucene/document/FieldSelector.h" +#include "Term.h" +#include "Terms.h" +#include "CLucene/util/PriorityQueue.h" +#include "_SegmentHeader.h" +#include "_SegmentMergeInfo.h" +#include "_SegmentMergeQueue.h" +#include "MultiReader.h" +#include "_MultiSegmentReader.h" + +CL_NS_USE(document) +CL_NS_USE(store) +CL_NS_USE(util) +CL_NS_DEF(index) + +void MultiSegmentReader::initialize(CL_NS(util)::ArrayBase* _subReaders){ + this->subReaders = _subReaders; + + _maxDoc = 0; + _numDocs = -1; + ones = NULL; + _hasDeletions = false; + + starts = _CL_NEWARRAY(int32_t, subReaders->length + 1); // build starts array + for (size_t i = 0; i < subReaders->length; i++) { + starts[i] = _maxDoc; + + // compute maxDocs + _maxDoc += (*subReaders)[i]->maxDoc(); + if ((*subReaders)[i]->hasDeletions()) + _hasDeletions = true; + } + starts[subReaders->length] = _maxDoc; +} + +MultiSegmentReader::MultiSegmentReader(CL_NS(store)::Directory* directory, SegmentInfos* sis, bool closeDirectory): + DirectoryIndexReader(directory,sis,closeDirectory), + normsCache(NormsCacheType(true,true)) +{ + // To reduce the chance of hitting FileNotFound + // (and having to retry), we open segments in + // reverse because IndexWriter merges & deletes + // the newest segments first. + + ArrayBase* readers = _CLNEW ObjectArray(sis->size()); + for (int32_t i = (int32_t)sis->size()-1; i >= 0; i--) { + try { + readers->values[i] = SegmentReader::get(sis->info(i)); + } catch(CLuceneError& err) { + if ( err.number() != CL_ERR_IO ) throw err; + + // Close all readers we had opened: + for(i++;isize();i++) { + try { + (*readers)[i]->close(); + } catch (CLuceneError& err2) { + if ( err.number() != CL_ERR_IO ) throw err2; + // keep going - we want to clean up as much as possible + } + } + throw err; + } + } + initialize(readers); +} + +/** This contructor is only used for {@link #reopen()} */ +MultiSegmentReader::MultiSegmentReader( + CL_NS(store)::Directory* directory, + SegmentInfos* infos, + bool closeDirectory, + CL_NS(util)::ArrayBase* oldReaders, + int32_t* oldStarts, + NormsCacheType* oldNormsCache): + DirectoryIndexReader(directory, infos, closeDirectory), + normsCache(NormsCacheType(true,true)) +{ + // we put the old SegmentReaders in a map, that allows us + // to lookup a reader using its segment name + map segmentReaders; + if (oldReaders != NULL) { + // create a Map SegmentName->SegmentReader + for (size_t i = 0; i < oldReaders->length; i++) { + segmentReaders[((SegmentReader*)(*oldReaders)[i])->getSegmentName()] = i; + } + } + + ArrayBase* newReaders = _CLNEW ObjectArray(infos->size()); + + for (int32_t i = infos->size() - 1; i>=0; i--) { + // find SegmentReader for this segment + map::iterator oldReaderIndex = segmentReaders.find(infos->info(i)->name); + if ( oldReaderIndex == segmentReaders.end()) { + // this is a new segment, no old SegmentReader can be reused + newReaders->values[i] = NULL; + } else { + // there is an old reader for this segment - we'll try to reopen it + newReaders->values[i] = (*oldReaders)[oldReaderIndex->second]; + } + + bool success = false; + try { + SegmentReader* newReader; + if ((*newReaders)[i] == NULL || infos->info(i)->getUseCompoundFile() != ((SegmentReader*)(*newReaders)[i])->getSegmentInfo()->getUseCompoundFile()) { + // this is a new reader; in case we hit an exception we can close it safely + newReader = SegmentReader::get(infos->info(i)); + } else { + newReader = ((SegmentReader*)(*newReaders)[i])->reopenSegment(infos->info(i)); + } + if (newReader == (*newReaders)[i]) { + // this reader is being re-used, so we take ownership of it... + oldReaders->values[i] = NULL; + } + + newReaders->values[i] = newReader; + success = true; + } _CLFINALLY ( + if (!success) { + for (i++; i < infos->size(); i++) { + if (newReaders->values[i] != NULL) { + try { + (*newReaders)[i]->close(); + _CLDELETE(newReaders->values[i]); + }catch(CLuceneError& ignore){ + if ( ignore.number() != CL_ERR_IO ) throw ignore; + // keep going - we want to clean up as much as possible + } + } + } + } + ) + } + + // initialize the readers to calculate maxDoc before we try to reuse the old normsCache + initialize(newReaders); + + // try to copy unchanged norms from the old normsCache to the new one + if (oldNormsCache != NULL) { + NormsCacheType::iterator it = oldNormsCache->begin(); + while (it != oldNormsCache->end()) { + TCHAR* field = it->first; + if (!hasNorms(field)) { + continue; + } + uint8_t* oldBytes = it->second; + uint8_t* bytes = _CL_NEWARRAY(uint8_t,maxDoc()); + + + for (size_t i = 0; i < subReaders->length; i++) { + map::iterator oldReaderIndex = segmentReaders.find(((SegmentReader*)(*subReaders)[i])->getSegmentName()); + + // this SegmentReader was not re-opened, we can copy all of its norms + if (oldReaderIndex != segmentReaders.end() && + ((*oldReaders)[oldReaderIndex->second] == (*subReaders)[i] + || ((SegmentReader*)(*oldReaders)[oldReaderIndex->second])->_norms.get(field) == ((SegmentReader*)(*subReaders)[i])->_norms.get(field))) { + // we don't have to synchronize here: either this constructor is called from a SegmentReader, + // in which case no old norms cache is present, or it is called from MultiReader.reopen(), + // which is synchronized + memcpy(bytes + starts[i], oldBytes + oldStarts[oldReaderIndex->second], starts[i+1] - starts[i]); + } else { + (*subReaders)[i]->norms(field, bytes+starts[i]); + } + } + + normsCache.put(field, bytes); // update cache + + it++; + } + } +} + + + +MultiSegmentReader::~MultiSegmentReader() { +//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 + _CLDELETE(subReaders); +} + +const char* MultiTermEnum::getObjectName() const{ return getClassName(); } +const char* MultiTermEnum::getClassName(){ return "MultiTermEnum"; } + + DirectoryIndexReader* MultiSegmentReader::doReopen(SegmentInfos* infos){ + SCOPED_LOCK_MUTEX(THIS_LOCK) + if (infos->size() == 1) { + // The index has only one segment now, so we can't refresh the MultiSegmentReader. + // Return a new SegmentReader instead + return SegmentReader::get(infos, infos->info(0), false); + } else { + return _CLNEW MultiSegmentReader(_directory, infos, closeDirectory, subReaders, starts, &normsCache); + } + } + + +ArrayBase* MultiSegmentReader::getTermFreqVectors(int32_t n){ + ensureOpen(); + int32_t i = readerIndex(n); // find segment num + return (*subReaders)[i]->getTermFreqVectors(n - starts[i]); // dispatch to segment +} + +TermFreqVector* MultiSegmentReader::getTermFreqVector(int32_t n, const TCHAR* field){ + ensureOpen(); + int32_t i = readerIndex(n); // find segment num + return (*subReaders)[i]->getTermFreqVector(n - starts[i], field); +} +void MultiSegmentReader::getTermFreqVector(int32_t docNumber, const TCHAR* field, TermVectorMapper* mapper){ + ensureOpen(); + int32_t i = readerIndex(docNumber); // find segment num + (*subReaders)[i]->getTermFreqVector(docNumber - starts[i], field, mapper); +} + +void MultiSegmentReader::getTermFreqVector(int32_t docNumber, TermVectorMapper* mapper){ + ensureOpen(); + int32_t i = readerIndex(docNumber); // find segment num + (*subReaders)[i]->getTermFreqVector(docNumber - starts[i], mapper); +} + + +bool MultiSegmentReader::isOptimized() { + return false; +} + +int32_t MultiSegmentReader::numDocs() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + // Don't call ensureOpen() here (it could affect performance) + if (_numDocs == -1) { // check cache + int32_t n = 0; // cache miss--recompute + for (size_t i = 0; i < subReaders->length; i++) + n += (*subReaders)[i]->numDocs(); // sum from readers + _numDocs = n; + } + return _numDocs; +} + +int32_t MultiSegmentReader::maxDoc() const { + // Don't call ensureOpen() here (it could affect performance) + return _maxDoc; +} + +const ArrayBase* MultiSegmentReader::getSubReaders() const{ + return subReaders; +} + +bool MultiSegmentReader::document(int32_t n, CL_NS(document)::Document& doc, const FieldSelector* fieldSelector){ + ensureOpen(); + int32_t i = readerIndex(n); // find segment num + return (*subReaders)[i]->document(n - starts[i],doc, fieldSelector); // dispatch to segment reader +} + +bool MultiSegmentReader::isDeleted(const int32_t n) { + // Don't call ensureOpen() here (it could affect performance) + int32_t i = readerIndex(n); // find segment num + return (*subReaders)[i]->isDeleted(n - starts[i]); // dispatch to segment reader +} + +bool MultiSegmentReader::hasDeletions() const{ + // Don't call ensureOpen() here (it could affect performance) + return _hasDeletions; +} + +uint8_t* MultiSegmentReader::norms(const TCHAR* field){ + SCOPED_LOCK_MUTEX(THIS_LOCK) + ensureOpen(); + uint8_t* bytes; + bytes = normsCache.get((TCHAR*)field); + if (bytes != NULL){ + return bytes; // cache hit + } + + if ( !hasNorms(field) ) + return fakeNorms(); + + bytes = _CL_NEWARRAY(uint8_t,maxDoc()); + for (size_t i = 0; i < subReaders->length; 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 MultiSegmentReader::norms(const TCHAR* field, uint8_t* result) { + SCOPED_LOCK_MUTEX(THIS_LOCK) + ensureOpen(); + uint8_t* bytes = normsCache.get((TCHAR*)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 (size_t i = 0; i < subReaders->length; i++) // read from segments + (*subReaders)[i]->norms(field, result + starts[i]); +} + + +void MultiSegmentReader::doSetNorm(int32_t n, const TCHAR* field, uint8_t value){ + normsCache.removeitr( normsCache.find((TCHAR*)field) ); // clear cache + int32_t i = readerIndex(n); // find segment num + (*subReaders)[i]->setNorm(n-starts[i], field, value); // dispatch +} + +TermEnum* MultiSegmentReader::terms() { + ensureOpen(); + return _CLNEW MultiTermEnum(subReaders, starts, NULL); +} + +TermEnum* MultiSegmentReader::terms(const Term* term) { + ensureOpen(); + return _CLNEW MultiTermEnum(subReaders, starts, term); +} + +int32_t MultiSegmentReader::docFreq(const Term* t) { + ensureOpen(); + int32_t total = 0; // sum freqs in Multi + for (size_t i = 0; i < subReaders->length; i++) + total += (*subReaders)[i]->docFreq(t); + return total; +} + +TermDocs* MultiSegmentReader::termDocs() { + ensureOpen(); + TermDocs* ret = _CLNEW MultiTermDocs(subReaders, starts); + return ret; +} + +TermPositions* MultiSegmentReader::termPositions() { + ensureOpen(); + TermPositions* ret = static_cast(_CLNEW MultiTermPositions(subReaders, starts)); + return ret; +} + +void MultiSegmentReader::setTermInfosIndexDivisor(int32_t indexDivisor) { + for (size_t i = 0; i < subReaders->length; i++) + (*subReaders)[i]->setTermInfosIndexDivisor(indexDivisor); +} + +int32_t MultiSegmentReader::getTermInfosIndexDivisor() { + if (subReaders->length > 0) + return (*subReaders)[0]->getTermInfosIndexDivisor(); + else + _CLTHROWA(CL_ERR_IllegalState,"no readers"); +} + +void MultiSegmentReader::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 MultiSegmentReader::readerIndex(int32_t n) const{ // find reader for doc n: + return readerIndex(n, this->starts, this->subReaders->length); +} + + +int32_t MultiSegmentReader::readerIndex(const int32_t n, int32_t* starts, int32_t numSubReaders) { // find reader for doc n: + int32_t lo = 0; // search starts array + int32_t hi = numSubReaders - 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 < numSubReaders && starts[mid+1] == midValue) { + mid++; // scan to last match + } + return mid; + } + } + return hi; +} + +bool MultiSegmentReader::hasNorms(const TCHAR* field) { + ensureOpen(); + for (size_t i = 0; i < subReaders->length; i++) { + if ((*subReaders)[i]->hasNorms(field)) + return true; + } + return false; +} +uint8_t* MultiSegmentReader::fakeNorms() { + if (ones==NULL) + ones=SegmentReader::createFakeNorms(maxDoc()); + return ones; +} + +void MultiSegmentReader::doUndeleteAll(){ + for (size_t i = 0; i < subReaders->length; i++) + (*subReaders)[i]->undeleteAll(); + _hasDeletions = false; + _numDocs = -1; +} +void MultiSegmentReader::commitChanges() { + for (size_t i = 0; i < subReaders->length; i++) + (*subReaders)[i]->commit(); +} + +void MultiSegmentReader::doClose() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + for (size_t i = 0; i < subReaders->length; i++){ + if ( (*subReaders)[i] != NULL ){ + (*subReaders)[i]->close(); + _CLDELETE(subReaders->values[i]); + } + } + // maybe close directory + DirectoryIndexReader::doClose(); +} + +void MultiSegmentReader::getFieldNames(FieldOption fieldNames, StringArrayWithDeletor& retarray, CL_NS(util)::ArrayBase* subReaders) { + // maintain a unique set of field names + for (size_t i = 0; i < subReaders->length; i++) { + IndexReader* reader = (*subReaders)[i]; + StringArrayWithDeletor subFields(false); + reader->getFieldNames(fieldNames, subFields); + retarray.insert(retarray.end(),subFields.begin(),subFields.end()); + subFields.clear(); + } +} + + +void MultiSegmentReader::getFieldNames(FieldOption fldOption, StringArrayWithDeletor& retarray){ + StringArrayWithDeletor temp; + CLHashList hashList; + for (size_t i = 0; i < subReaders->length; 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::iterator itr = hashList.begin(); + while ( itr != hashList.end() ){ + retarray.push_back(*itr);//no need to copy, already done! + itr++; + } +} +const char* MultiSegmentReader::getClassName(){ + return "MultiSegmentReader"; +} +const char* MultiSegmentReader::getObjectName() const{ + return getClassName(); +} + + + + + + + + + + +void MultiTermDocs::init(ArrayBase* r, const int32_t* s){ + subReaders = r; + starts = s; + base = 0; + pointer = 0; + current = NULL; + term = NULL; + readerTermDocs = NULL; + + //Check if there are subReaders + if(subReaders != NULL && subReaders->length > 0){ + readerTermDocs = _CLNEW ValueArray(subReaders->length); + } +} +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 + + init(NULL,NULL); +} + +MultiTermDocs::MultiTermDocs(ArrayBase* 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 + init(r,s); +} + +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); +//xx + //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() { + for(;;) { + if (current != NULL && current->next()) { + return true; + } else if (pointer < subReaders->length) { + base = starts[pointer]; + current = termDocs(pointer++); + } else { + return false; + } + } +} + +int32_t MultiTermDocs::read(int32_t* docs, int32_t* freqs, int32_t length) { + while (true) { + while (current == NULL) { + if (pointer < subReaders->length) { // 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; + for(;;) { + if ( current != NULL && current->skipTo(target - base)) { + return true; + } else if ( pointer < subReaders->length ) { + base = starts[pointer]; + current = termDocs(pointer++); + } else { + return false; + } + } +} + +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 (size_t i = 0; i < subReaders->length; 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(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(IndexReader* reader) { + return reader->termDocs(); +} + +TermDocs* MultiTermDocs::termDocs(const int32_t i) { + if (term == NULL) + return NULL; + TermDocs* result = (*readerTermDocs)[i]; + if (result == NULL){ + _CLLDELETE(readerTermDocs->values[i]); + readerTermDocs->values[i] = termDocs((*subReaders)[i]); + result = (*readerTermDocs)[i]; + } + result->seek(term); + + return result; +} + + +MultiTermEnum::MultiTermEnum(ArrayBase* 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 +// subReaders->length >= 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 subReaders->length must be 0 else if readers != NULL then subReaders->length > 0 +// s != NULL +//Post - The instance has been created + + 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(subReaders->length); + + CND_CONDITION (queue != NULL, "Could not allocate memory for queue"); + + //iterate through all the readers + for ( size_t i=0;ilength;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(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(ArrayBase* 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 + init(r,s); +} + + +TermDocs* MultiTermPositions::__asTermDocs(){ + return (TermDocs*) this; +} +TermPositions* MultiTermPositions::__asTermPositions(){ + return (TermPositions*) this; +} + + +TermDocs* MultiTermPositions::termDocs(IndexReader* reader) { +// 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(); +} + +int32_t MultiTermPositions::getPayloadLength() const{ + TermPositions* curAsTP = current->__asTermPositions(); + return curAsTP->getPayloadLength(); +} + +uint8_t* MultiTermPositions::getPayload(uint8_t* data){ + TermPositions* curAsTP = current->__asTermPositions(); + return curAsTP->getPayload(data); +} + +bool MultiTermPositions::isPayloadAvailable() const{ + TermPositions* curAsTP = current->__asTermPositions(); + return curAsTP->isPayloadAvailable(); +} + +CL_NS_END diff --git a/Pods/BRCLucene/src/core/CLucene/index/MultipleTermPositions.cpp b/Pods/BRCLucene/src/core/CLucene/index/MultipleTermPositions.cpp new file mode 100644 index 0000000..a4dcf2c --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/index/MultipleTermPositions.cpp @@ -0,0 +1,199 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "MultipleTermPositions.h" +#include "IndexReader.h" +#include "CLucene/util/Array.h" +#include "CLucene/util/PriorityQueue.h" + +CL_NS_USE(util) + +CL_NS_DEF(index) + +void MultipleTermPositions::seek(Term*) { + _CLTHROWA(CL_ERR_UnsupportedOperation, "Unsupported operation: MultipleTermPositions::seek"); +} + +void MultipleTermPositions::seek(TermEnum*) { + _CLTHROWA(CL_ERR_UnsupportedOperation, "Unsupported operation: MultipleTermPositions::seek"); +} + +int32_t MultipleTermPositions::read(int32_t*, int32_t*,int32_t) { + _CLTHROWA(CL_ERR_UnsupportedOperation, "Unsupported operation: MultipleTermPositions::read"); +} + +int32_t MultipleTermPositions::getPayloadLength() const { + _CLTHROWA(CL_ERR_UnsupportedOperation, "Unsupported operation: MultipleTermPositions::getPayloadLength"); +} + +uint8_t* MultipleTermPositions::getPayload(uint8_t*) { + _CLTHROWA(CL_ERR_UnsupportedOperation, "Unsupported operation: MultipleTermPositions::getPayload"); +} + +bool MultipleTermPositions::isPayloadAvailable() const{ + return false; +} + +TermDocs* MultipleTermPositions::__asTermDocs(){ + return (TermDocs*)this; +} +TermPositions* MultipleTermPositions::__asTermPositions(){ + return (TermPositions*)this; +} + + +class MultipleTermPositions::TermPositionsQueue : public CL_NS(util)::PriorityQueue > { +public: + TermPositionsQueue(TermPositions** termPositions, size_t termPositionsSize) { + initialize(termPositionsSize, false); + + size_t i=0; + while (termPositions[i]!=NULL) { + if (termPositions[i]->next()) + put(termPositions[i]); + else + _CLDELETE( termPositions[ i ] ); + + ++i; + } + } + virtual ~TermPositionsQueue(){ + } + + TermPositions* peek() { + return top(); + } + + bool lessThan(TermPositions* a, TermPositions* b) { + return a->doc() < b->doc(); + } +}; + +int IntQueue_sort(const void* a, const void* b){ + return ( *(int*)a - *(int*)b ); +} +class MultipleTermPositions::IntQueue { +private: + ValueArray* _array; + int32_t _index; + int32_t _lastIndex; + +public: + IntQueue():_array(_CLNEW ValueArray(16)), _index(0), _lastIndex(0){ + } + virtual ~IntQueue(){ + _CLLDELETE(_array); + } + + void add(const int32_t i) { + if (_lastIndex == _array->length) + _array->resize(_array->length*2); + + _array->values[_lastIndex++] = i; + } + + int32_t next() { + return _array->values[_index++]; + } + + void sort() { + int len = _lastIndex - _index; + qsort(_array->values+_index, len, sizeof(int32_t), IntQueue_sort); + } + + void clear() { + _index = 0; + _lastIndex = 0; + } + + int32_t size() { + return (_lastIndex - _index); + } +}; + +MultipleTermPositions::MultipleTermPositions(IndexReader* indexReader, const CL_NS(util)::ArrayBase* terms) : _posList(_CLNEW IntQueue()){ + CLLinkedList termPositions; + for ( size_t i=0;ilength;i++){ + termPositions.push_back( indexReader->termPositions(terms->values[i])); + } + + TermPositions** tps = _CL_NEWARRAY(TermPositions*, terms->length+1); // i == tpsSize + termPositions.toArray_nullTerminated(tps); + + _termPositionsQueue = _CLNEW TermPositionsQueue(tps,terms->length); + _CLDELETE_LARRAY(tps); +} + +MultipleTermPositions::~MultipleTermPositions() { + _CLLDELETE(_termPositionsQueue); + _CLLDELETE(_posList); +} + +bool MultipleTermPositions::next() { + if (_termPositionsQueue->size() == 0) + return false; + + _posList->clear(); + _doc = _termPositionsQueue->peek()->doc(); + + TermPositions* tp; + do { + tp = _termPositionsQueue->peek(); + + for (int32_t i = 0; i < tp->freq(); i++) + _posList->add(tp->nextPosition()); + + if (tp->next()) + _termPositionsQueue->adjustTop(); + else { + _termPositionsQueue->pop(); + tp->close(); + _CLLDELETE(tp); + } + } while (_termPositionsQueue->size() > 0 && _termPositionsQueue->peek()->doc() == _doc); + + _posList->sort(); + _freq = _posList->size(); + + return true; +} + +int32_t MultipleTermPositions::nextPosition() { + return _posList->next(); +} + +bool MultipleTermPositions::skipTo(int32_t target) { + while (_termPositionsQueue->peek() != NULL && target > _termPositionsQueue->peek()->doc()) { + TermPositions* tp = _termPositionsQueue->pop(); + if (tp->skipTo(target)) + _termPositionsQueue->put(tp); + else { + tp->close(); + _CLLDELETE(tp); + } + } + return next(); +} + +int32_t MultipleTermPositions::doc() const { + return _doc; +} + +int32_t MultipleTermPositions::freq() const { + return _freq; +} + +void MultipleTermPositions::close() { + while (_termPositionsQueue->size() > 0) { + TermPositions* tp = _termPositionsQueue->pop(); + tp->close(); + _CLLDELETE(tp); + } +} + +CL_NS_END diff --git a/Pods/BRCLucene/src/core/CLucene/index/MultipleTermPositions.h b/Pods/BRCLucene/src/core/CLucene/index/MultipleTermPositions.h new file mode 100644 index 0000000..012f197 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/index/MultipleTermPositions.h @@ -0,0 +1,92 @@ +/*------------------------------------------------------------------------------ +* 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_MultipleTermPositions_ +#define _lucene_index_MultipleTermPositions_ + +#include "Terms.h" +#include "CLucene/util/Array.h" + +CL_NS_DEF(index) + +class Term; +class IndexReader; + +class CLUCENE_EXPORT MultipleTermPositions : public TermPositions { +private: + class TermPositionsQueue; + class IntQueue; + + int32_t _doc; + int32_t _freq; + TermPositionsQueue* _termPositionsQueue; + IntQueue* _posList; + +public: + /** + * Creates a new MultipleTermPositions instance. + * + * @exception IOException + */ + MultipleTermPositions(IndexReader* indexReader, const CL_NS(util)::ArrayBase* terms); + virtual ~MultipleTermPositions(); + + bool next(); + + int32_t nextPosition(); + + bool skipTo(const int32_t target); + + int32_t doc() const; + + int32_t freq() const; + + void close(); + + /** + * Not implemented. + * @throws UnsupportedOperationException + */ + void seek(Term*); + + /** + * Not implemented. + * @throws UnsupportedOperationException + */ + void seek(TermEnum*); + + /** + * Not implemented. + * @throws UnsupportedOperationException + */ + int32_t read(int32_t*, int32_t*,int32_t); + + /** + * Not implemented. + * @throws UnsupportedOperationException + */ + int32_t getPayloadLength() const; + + /** + * Not implemented. + * @throws UnsupportedOperationException + */ + uint8_t* getPayload(uint8_t*); + + /** + * + * @return false + */ + // Java-TODO: Remove warning after API has been finalized + bool isPayloadAvailable() const; + + TermDocs* __asTermDocs(); + TermPositions* __asTermPositions(); +}; + + +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/index/Payload.cpp b/Pods/BRCLucene/src/core/CLucene/index/Payload.cpp new file mode 100644 index 0000000..1fb2c28 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/index/Payload.cpp @@ -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. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "Payload.h" +#include + +CL_NS_USE(util) +CL_NS_DEF(index) + +Payload::Payload() : + data( * _CLNEW CL_NS(util)::ValueArray(0)) +{ + // nothing to do + this->deleteData = true; + this->deleteArray = true; +} +Payload::Payload(CL_NS(util)::ValueArray& _data, const int32_t offset, const int32_t length, bool deleteData): + data(_data) +{ + this->deleteData = false; + this->deleteArray = false; + this->setData(data,offset,length,deleteData); +} +Payload::Payload(uint8_t* data, const int32_t length, bool deleteData): + data(*_CLNEW CL_NS(util)::ValueArray) +{ + this->deleteData = false; + this->deleteArray = false; + this->setData(data,length,deleteData); +} + +Payload::~Payload() { + if ( deleteData ) this->data.deleteValues(); + if ( deleteArray ) _CLLDELETE(&this->data); +} + +void Payload::setData(uint8_t* data, const int32_t length, bool deleteData) { + if ( this->deleteData ) this->data.deleteValues(); + if ( this->deleteArray ) { + _CLLDELETE(&this->data); + this->data = *_CLNEW CL_NS(util)::ValueArray; + } + if (length < 0 ) { + _CLTHROWA(CL_ERR_IllegalArgument,"length < 0"); + } + this->data.length = offset+length; + this->data.values = data; + this->deleteData = deleteData; + this->deleteArray = true; + this->_length = length; + this->offset = 0; + assert(false); +} + +void Payload::setData(CL_NS(util)::ValueArray& data, const int32_t offset, const int32_t length, bool deleteData) { + if ( this->deleteData ) this->data.deleteValues(); + if ( this->deleteArray ) { + _CLLDELETE(&this->data); + } + + if (offset < 0 || offset + length > data.length) { + _CLTHROWA(CL_ERR_IllegalArgument,"offset < 0 || offset + length > data.length"); + } + this->data = data; + this->_length = ( length < 0 ? data.length-offset : length ); + this->offset = offset; + this->deleteData = this->deleteArray = deleteData; + assert(false); +} + +const CL_NS(util)::ValueArray& Payload::getData() const{ + return data; +} + +int32_t Payload::getOffset() const { return offset; } + +int32_t Payload::length() const { return _length; } + +uint8_t Payload::byteAt(int index) const { + if (0 <= index && index < this->_length) { + return this->data[this->offset + index]; + } + _CLTHROWA(CL_ERR_IndexOutOfBounds,"Array index out of bounds at Payload::byteAt"); +} + +CL_NS(util)::ValueArray* Payload::toByteArray() const{ + CL_NS(util)::ValueArray* ret = _CLNEW CL_NS(util)::ValueArray(this->_length); + memcpy(ret->values, this->data.values + this->offset, this->_length * sizeof(uint8_t)); + return ret; +} + +void Payload::copyTo(uint8_t* target, const int32_t targetLen) const { + if (this->_length > targetLen) { + _CLTHROWA(CL_ERR_IndexOutOfBounds,"Array index out of bounds at Payload::byteAt"); + } + memcpy(target, this->data.values + this->offset, this->_length * sizeof(uint8_t)); +} + +Payload* Payload::clone() const{ + Payload* clone = _CLNEW Payload(*this->toByteArray(), 0, -1, true); + return clone; +} + +CL_NS_END diff --git a/Pods/BRCLucene/src/core/CLucene/index/Payload.h b/Pods/BRCLucene/src/core/CLucene/index/Payload.h new file mode 100644 index 0000000..5a490dc --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/index/Payload.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. +------------------------------------------------------------------------------*/ +#ifndef _lucene_index_Payload_ +#define _lucene_index_Payload_ + +#include "CLucene/util/Array.h" + +CL_NS_DEF(index) + +/** +* A Payload is metadata that can be stored together with each occurrence +* of a term. This metadata is stored inline in the posting list of the +* specific term. +*

+* To store payloads in the index a {@link TokenStream} has to be used that +* produces {@link Token}s containing payload data. +*

+* Use {@link TermPositions#getPayloadLength()} and {@link TermPositions#getPayload(byte[], int)} +* to retrieve the payloads from the index.
+* +*/ +class CLUCENE_EXPORT Payload:LUCENE_REFBASE { +protected: + CL_NS(util)::ValueArray& data; + + /** the offset within the byte array */ + int32_t offset; + + /** the length of the payload data */ + int32_t _length; + + bool deleteData; + bool deleteArray; +public: + + /** Creates an empty payload and does not allocate a byte array. */ + Payload(); + + /** + * Creates a new payload with the the given array as data. + * A reference to the passed-in array is held, i. e. no + * copy is made. + * + * @param data the data of this payload + * @param length the length of the data + * @param deleteData delete data when payload is deleted + */ + Payload(uint8_t* data, const int32_t length, bool deleteData=false); + + /** + * Creates a new payload with the the given array as data. + * A reference to the passed-in array is held, i. e. no + * copy is made. + * + * @param data the data of this payload + * @param deleteData delete data when payload is deleted + */ + Payload(CL_NS(util)::ValueArray& data, const int32_t offset=0, const int32_t length=-1, bool deleteData=false); + + /* Desctructor - auto-delete the data container */ + ~Payload(); + + /** + * Sets this payloads data. + * A reference to the passed-in array is held, i. e. no + * copy is made. + * @param deleteData delete data when payload is deleted + */ + void setData(uint8_t* data, const int32_t length, bool deleteData=false); + + /** + * Sets this payloads data. + * A reference to the passed-in array is held, i. e. no + * copy is made. + * @param deleteData delete data when payload is deleted + */ + void setData(CL_NS(util)::ValueArray& data, const int32_t offset=0, const int32_t length=-1, bool deleteData=false); + + /** + * Returns a reference to the underlying byte array + * that holds this payloads data. + */ + const CL_NS(util)::ValueArray& getData() const; + + /** + * Returns the length of the payload data. + */ + int32_t length() const; + + /** + * Returns the offset in the underlying byte array + */ + int32_t getOffset() const; + + /** + * Returns the byte at the given index. + */ + uint8_t byteAt(int index) const; + + /** + * Allocates a new byte array, copies the payload data into it and returns it. Caller is responsible + * for deleting it later. + * @memory caller is responsible for deleting the returned array + */ + CL_NS(util)::ValueArray* toByteArray() const; + + /** + * Copies the payload data to a byte array. + * + * @param target the target byte array + * @param targetOffset the offset in the target byte array + */ + void copyTo(uint8_t* target, const int32_t targetLen) const; + + /** + * Clones this payload by creating a copy of the underlying + * byte array. + */ + Payload* clone() const; + +}; + +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/index/SegmentInfos.cpp b/Pods/BRCLucene/src/core/CLucene/index/SegmentInfos.cpp new file mode 100644 index 0000000..fb42b2a --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/index/SegmentInfos.cpp @@ -0,0 +1,1131 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" + +#include "_SegmentInfos.h" +#include "_IndexFileNames.h" +#include "_SegmentHeader.h" +#include "MultiReader.h" +#include +#include + +#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 char* _name, const int32_t _docCount, CL_NS(store)::Directory* _dir, + bool _isCompoundFile, bool _hasSingleNormFile, + int32_t _docStoreOffset, const char* _docStoreSegment, bool _docStoreIsCompoundFile) + : + docCount(_docCount), + preLockless(false), + delGen(SegmentInfo::NO), + isCompoundFile(_isCompoundFile ? SegmentInfo::YES : SegmentInfo::NO), + hasSingleNormFile(_hasSingleNormFile), + _sizeInBytes(-1), + docStoreOffset(_docStoreOffset), + docStoreSegment( _docStoreSegment == NULL ? "" : _docStoreSegment ), + docStoreIsCompoundFile(_docStoreIsCompoundFile) +{ + CND_PRECONDITION(docStoreOffset == -1 || !docStoreSegment.empty(), "failed testing for (docStoreOffset == -1 || docStoreSegment != NULL)"); + + this->name = _name; + this->dir = _dir; +} + +string SegmentInfo::segString(Directory* dir) { + string cfs; + try { + if (getUseCompoundFile()) + cfs = "c"; + else + cfs = "C"; + } catch (CLuceneError& ioe) { + if ( ioe.number() != CL_ERR_IO ) throw ioe; + cfs = "?"; + } + + string docStore; + + if (docStoreOffset != -1) + docStore = string("->") + docStoreSegment; + else + docStore = ""; + + return string(name) + ":" + + cfs + + string(this->dir == dir ? "" : "x") + + Misc::toString(docCount) + docStore; +} + SegmentInfo::SegmentInfo(CL_NS(store)::Directory* _dir, int32_t format, CL_NS(store)::IndexInput* input): + _sizeInBytes(-1) + { + this->dir = _dir; + + { + char aname[CL_MAX_PATH]; + input->readString(aname, CL_MAX_PATH); + this->name = aname; + } + + docCount = input->readInt(); + if (format <= SegmentInfos::FORMAT_LOCKLESS) { + delGen = input->readLong(); + if (format <= SegmentInfos::FORMAT_SHARED_DOC_STORE) { + docStoreOffset = input->readInt(); + if (docStoreOffset != -1) { + char aname[CL_MAX_PATH]; + input->readString(aname, CL_MAX_PATH); + docStoreSegment = aname; + docStoreIsCompoundFile = (1 == input->readByte()); + } else { + docStoreSegment = name; + docStoreIsCompoundFile = false; + } + } else { + docStoreOffset = -1; + docStoreSegment = name; + docStoreIsCompoundFile = false; + } + if (format <= SegmentInfos::FORMAT_SINGLE_NORM_FILE) { + hasSingleNormFile = (1 == input->readByte()); + } else { + hasSingleNormFile = false; + } + int32_t numNormGen = input->readInt(); + normGen.deleteValues(); + if (numNormGen == NO) { + // normGen is already NULL, we'll just set normGenLen to 0 + } else { + normGen.values = _CL_NEWARRAY(int64_t, numNormGen); + normGen.length = numNormGen; + for(int32_t j=0;jreadLong(); + } + } + isCompoundFile = input->readByte(); + preLockless = (isCompoundFile == CHECK_DIR); + } else { + delGen = CHECK_DIR; + //normGen=NULL; normGenLen=0; + isCompoundFile = CHECK_DIR; + preLockless = true; + hasSingleNormFile = false; + docStoreOffset = -1; + docStoreIsCompoundFile = false; + } + } + + void SegmentInfo::reset(const SegmentInfo* src) { + clearFiles(); + this->name = src->name; + docCount = src->docCount; + dir = src->dir; + preLockless = src->preLockless; + delGen = src->delGen; + docStoreOffset = src->docStoreOffset; + docStoreIsCompoundFile = src->docStoreIsCompoundFile; + if (src->normGen.values == NULL) { + this->normGen.deleteValues(); + }else{ + // optimized case to allocate new array only if current memory buffer is too small + if (this->normGen.length < src->normGen.length) { + normGen.resize(src->normGen.length); + }else{ + this->normGen.length = src->normGen.length; + } + memcpy(this->normGen.values, src->normGen.values, sizeof(int64_t) * this->normGen.length); + } + isCompoundFile = src->isCompoundFile; + hasSingleNormFile = src->hasSingleNormFile; + } + + SegmentInfo::~SegmentInfo(){ + normGen.deleteValues(); + } + + void SegmentInfo::setNumFields(const int32_t numFields) { + if (normGen.values == NULL) { + // normGen is null if we loaded a pre-2.1 segment + // file, or, if this segments file hasn't had any + // norms set against it yet: + normGen.resize(numFields); + + if (preLockless) { + // Do nothing: thus leaving normGen[k]==CHECK_DIR (==0), so that later we know + // we have to check filesystem for norm files, because this is prelockless. + + } else { + // This is a FORMAT_LOCKLESS segment, which means + // there are no separate norms: + for(int32_t i=0;i& __files = files(); + size_t size = __files.size(); + _sizeInBytes = 0; + for(size_t i=0;ifileLength(fileName); + } + } + return _sizeInBytes; + } + + void SegmentInfo::addIfExists(std::vector& files, const std::string& fileName){ + if (dir->fileExists(fileName.c_str())) + files.push_back(fileName); + } + + const vector& SegmentInfo::files(){ + if (!_files.empty()) { + // Already cached: + return _files; + } + + bool useCompoundFile = getUseCompoundFile(); + + if (useCompoundFile) { + _files.push_back( string(name) + "." + IndexFileNames::COMPOUND_FILE_EXTENSION); + } else { + ConstValueArray& exts = IndexFileNames::NON_STORE_INDEX_EXTENSIONS(); + for(size_t i=0;i& exts = IndexFileNames::STORE_INDEX_EXTENSIONS(); + for(size_t i=0;i& exts = IndexFileNames::STORE_INDEX_EXTENSIONS(); + for(size_t i=0;i= YES || dir->fileExists(delFileName.c_str()))) { + _files.push_back(delFileName); + } + + // Careful logic for norms files + if (normGen.values != NULL) { + for(size_t i=0;i= YES) { + // Definitely a separate norm file, with generation: + string gens = string(".") + IndexFileNames::SEPARATE_NORMS_EXTENSION; + gens += Misc::toString((int64_t)i); + _files.push_back(IndexFileNames::fileNameFromGeneration(name.c_str(), gens.c_str(), gen)); + } else if (NO == gen) { + // No separate norms but maybe plain norms + // in the non compound file case: + if (!hasSingleNormFile && !useCompoundFile) { + string fileName = name + "." + IndexFileNames::PLAIN_NORMS_EXTENSION; + fileName += i; + if (dir->fileExists(fileName.c_str())) { + _files.push_back(fileName); + } + } + } else if (CHECK_DIR == gen) { + // Pre-2.1: we have to check file existence + string fileName; + if (useCompoundFile) { + fileName = name + "." + IndexFileNames::SEPARATE_NORMS_EXTENSION; + fileName += Misc::toString((int64_t)i); + } else if (!hasSingleNormFile) { + fileName = name + "." + IndexFileNames::PLAIN_NORMS_EXTENSION; + fileName += Misc::toString((int64_t)i); + } + if ( !fileName.empty() && dir->fileExists(fileName.c_str())) { + _files.push_back(fileName); + } + } + } + } else if (preLockless || (!hasSingleNormFile && !useCompoundFile)) { + // Pre-2.1: we have to scan the dir to find all + // matching _X.sN/_X.fN files for our segment: + string prefix; + if (useCompoundFile) + prefix = name + "." + IndexFileNames::SEPARATE_NORMS_EXTENSION; + else + prefix = name + "." + IndexFileNames::PLAIN_NORMS_EXTENSION; + size_t prefixLength = prefix.length(); + vector allFiles; + if (dir->list(allFiles) == false ){ + string err = "cannot read directory "; + err += dir->toString(); + err += ": list() returned null"; + _CLTHROWA(CL_ERR_IO, err.c_str()); + } + for(size_t i=0;i prefixLength && _istdigit(fileName[prefixLength]) && fileName.compare(0,prefix.length(),prefix)==0 ) { + _files.push_back(fileName); + } + } + } + return _files; + } + + + + bool SegmentInfo::hasDeletions() const { + // Cases: + // + // delGen == NO: this means this segment was written + // by the LOCKLESS code and for certain does not have + // deletions yet + // + // delGen == CHECK_DIR: this means this segment was written by + // pre-LOCKLESS code which means we must check + // directory to see if .del file exists + // + // delGen >= YES: this means this segment was written by + // the LOCKLESS code and for certain has + // deletions + // + if (delGen == NO) { + return false; + } else if (delGen >= YES) { + return true; + } else { + return dir->fileExists(getDelFileName().c_str()); + } + } + + void SegmentInfo::advanceDelGen() { + // delGen 0 is reserved for pre-LOCKLESS format + if (delGen == NO) { + delGen = YES; + } else { + delGen++; + } + clearFiles(); + } + + void SegmentInfo::clearDelGen() { + delGen = NO; + clearFiles(); + } + + SegmentInfo* SegmentInfo::clone () { + SegmentInfo* si = _CLNEW SegmentInfo(name.c_str(), docCount, dir); + si->isCompoundFile = isCompoundFile; + si->delGen = delGen; + si->preLockless = preLockless; + si->hasSingleNormFile = hasSingleNormFile; + if (this->normGen.values != NULL) { + si->normGen.resize(this->normGen.length); + memcpy(si->normGen.values, this->normGen.values, sizeof(int64_t) * this->normGen.length); + } + si->docStoreOffset = docStoreOffset; + si->docStoreSegment = docStoreSegment; + si->docStoreIsCompoundFile = docStoreIsCompoundFile; + + return si; + } + + string SegmentInfo::getDelFileName() const { + if (delGen == NO) { + // In this case we know there is no deletion filename + // against this segment + return NULL; + } else { + // If delGen is CHECK_DIR, it's the pre-lockless-commit file format + return IndexFileNames::fileNameFromGeneration(name.c_str(), (string(".") + IndexFileNames::DELETES_EXTENSION).c_str(), delGen); + } + } + + bool SegmentInfo::hasSeparateNorms(const int32_t fieldNumber) const { + if ((normGen.values == NULL && preLockless) || (normGen.values != NULL && normGen[fieldNumber] == CHECK_DIR)) { + // Must fallback to directory file exists check: + return dir->fileExists( (name + string(".s") + Misc::toString(fieldNumber)).c_str() ); + } else if (normGen.values == NULL || normGen[fieldNumber] == NO) { + return false; + } else { + return true; + } + } + + bool SegmentInfo::hasSeparateNorms() const { + if (normGen.values == NULL) { + if (!preLockless) { + // This means we were created w/ LOCKLESS code and no + // norms are written yet: + return false; + } else { + // This means this segment was saved with pre-LOCKLESS + // code. So we must fallback to the original + // directory list check: + vector result; + if ( !dir->list(result) ) { + _CLTHROWA(CL_ERR_IO, (string("cannot read directory: ") + dir->toString() + string(" list() returned NULL")).c_str() ); + } + + string pattern = name + string(".s"); + for ( vector::iterator itr = result.begin(); + itr != result.end() ; itr ++ ){ + if(strncmp(itr->c_str(), pattern.c_str(), pattern.length() ) == 0 && + isdigit( (*itr)[pattern.length()])) { + return true; + } + } + return false; + } + } else { + // This means this segment was saved with LOCKLESS + // code so we first check whether any normGen's are >= 1 + // (meaning they definitely have separate norms): + for(size_t i=0;i= YES) { + return true; + } + } + // Next we look for any == 0. These cases were + // pre-LOCKLESS and must be checked in directory: + for(size_t j=0;jisCompoundFile = YES; + } else { + this->isCompoundFile = NO; + } + clearFiles(); + } + + bool SegmentInfo::getUseCompoundFile() const { + if (isCompoundFile == NO) { + return false; + } else if (isCompoundFile == YES) { + return true; + } else { + return dir->fileExists( ((string)name + "." + IndexFileNames::COMPOUND_FILE_EXTENSION).c_str() ); + } + } + + int32_t SegmentInfo::getDocStoreOffset() const { return docStoreOffset; } + + bool SegmentInfo::getDocStoreIsCompoundFile() const { return docStoreIsCompoundFile; } + + void SegmentInfo::setDocStoreIsCompoundFile(const bool v) { + docStoreIsCompoundFile = v; + clearFiles(); + } + + const string& SegmentInfo::getDocStoreSegment() const { + return docStoreSegment; + } + + void SegmentInfo::setDocStoreOffset(const int32_t offset) { + docStoreOffset = offset; + clearFiles(); + } + + void SegmentInfo::write(CL_NS(store)::IndexOutput* output) { + output->writeString(name); + output->writeInt(docCount); + output->writeLong(delGen); + output->writeInt(docStoreOffset); + if (docStoreOffset != -1) { + output->writeString(docStoreSegment); + output->writeByte(static_cast(docStoreIsCompoundFile ? 1:0)); + } + + output->writeByte(static_cast(hasSingleNormFile ? 1:0)); + if (normGen.values == NULL) { + output->writeInt(NO); + } else { + output->writeInt(normGen.length); + for(size_t j = 0; j < normGen.length; j++) { + output->writeLong(normGen[j]); + } + } + output->writeByte(isCompoundFile); + } + + void SegmentInfo::clearFiles() { + _files.clear(); + _sizeInBytes = -1; + } + + /** We consider another SegmentInfo instance equal if it + * has the same dir and same name. */ + bool SegmentInfo::equals(const SegmentInfo* obj) { + return (obj->dir == this->dir && obj->name.compare(this->name) == 0 ); + } + + + + + + std::ostream* SegmentInfos::infoStream = NULL; + + /** If non-null, information about retries when loading + * the segments file will be printed to this. + */ + void SegmentInfos::setInfoStream(std::ostream* infoStream) { + SegmentInfos::infoStream = infoStream; + } + + /** + * @see #setInfoStream + */ + std::ostream* SegmentInfos::getInfoStream() { + return infoStream; + } + + SegmentInfos::SegmentInfos(bool deleteMembers, int32_t reserveCount) : + generation(0),lastGeneration(0), infos(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(); + if (reserveCount > 1) + infos.reserve(reserveCount); + } + + 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. + + //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 < infos.size(), "i is out of bounds"); + + //Get the i-th SegmentInfo instance + SegmentInfo *ret = infos[i]; + + //Condition check to see if the i-th SegmentInfo has been retrieved + CND_CONDITION(ret != NULL,"No SegmentInfo instance found"); + + return ret; + } + + int64_t SegmentInfos::getCurrentSegmentGeneration( std::vector& files ) { + if ( files.size() == 0 ) { + return -1; + } + + int64_t max = -1; + + vector::iterator itr = files.begin(); + const char* file; + size_t seglen = strlen(IndexFileNames::SEGMENTS); + while ( itr != files.end() ) { + file = itr->c_str(); + if ( strncmp( file, IndexFileNames::SEGMENTS, seglen ) == 0 && strcmp( file, IndexFileNames::SEGMENTS_GEN ) != 0 ) { + int64_t gen = generationFromSegmentsFileName( file ); + if ( gen > max ) { + max = gen; + } + } + + itr++; + } + + return max; + } + + int64_t SegmentInfos::getCurrentSegmentGeneration( const CL_NS(store)::Directory* directory ) { + vector files; + if ( !directory->list(&files) ){ + _CLTHROWA(CL_ERR_IO, (string("cannot read directory ") + directory->toString() + string(": list() returned NULL")).c_str() ); + } + int64_t gen = getCurrentSegmentGeneration( files ); + return gen; + } + + string SegmentInfos::getCurrentSegmentFileName( vector& files ) { + return IndexFileNames::fileNameFromGeneration( IndexFileNames::SEGMENTS, "", getCurrentSegmentGeneration( files )); + } + + std::string SegmentInfos::getCurrentSegmentFileName( CL_NS(store)::Directory* directory ) { + return IndexFileNames::fileNameFromGeneration( IndexFileNames::SEGMENTS, "", getCurrentSegmentGeneration( directory )); + } + + std::string SegmentInfos::getCurrentSegmentFileName() { + return IndexFileNames::fileNameFromGeneration( IndexFileNames::SEGMENTS, "", lastGeneration ); + } + + int64_t SegmentInfos::generationFromSegmentsFileName( const char* fileName ) { + if ( strcmp( fileName, IndexFileNames::SEGMENTS ) == 0 ) { + return 0; + } else if ( strncmp( fileName, IndexFileNames::SEGMENTS, strlen(IndexFileNames::SEGMENTS) ) == 0 ) { + return CL_NS(util)::Misc::base36ToLong( fileName + strlen( IndexFileNames::SEGMENTS )+1 ); + } else { + TCHAR err[CL_MAX_PATH + 35]; + _sntprintf(err,CL_MAX_PATH + 35,_T("fileName \"%s\" is not a segments file"), fileName); + _CLTHROWA(CL_ERR_IllegalArgument, err); + return 0; + } + } + + std::string SegmentInfos::getNextSegmentFileName() { + int64_t nextGeneration; + + if ( generation == -1 ) { + nextGeneration = 1; + } else { + nextGeneration = generation+1; + } + + return IndexFileNames::fileNameFromGeneration( IndexFileNames::SEGMENTS, "", nextGeneration ); + } + + void SegmentInfos::clearto(size_t from, size_t end){ + size_t range = end - from; + if ( (infos.size() - from) >= range) { // Make sure we actually need to remove + segmentInfosType::iterator itr,bitr=infos.begin()+from,eitr=infos.end(); + size_t count = 0; + for(itr=bitr;itr!=eitr && count < range;++itr, count++) { + _CLLDELETE((*itr)); + } + infos.erase(bitr,bitr + count); + } + } + void SegmentInfos::add(SegmentInfo* info, int32_t pos){ + if ( pos == -1 ){ + infos.push_back(info); + }else{ + if ( pos < 0 || pos >= (int32_t)infos.size()+1 ) _CLTHROWA(CL_ERR_IllegalArgument, "pos is out of range"); + infos.insert( infos.begin()+pos, info ); + } + } + int32_t SegmentInfos::size() const{ + return infos.size(); + } + SegmentInfo* SegmentInfos::elementAt(int32_t pos) { + return infos.at(pos); + } + void SegmentInfos::setElementAt(SegmentInfo* si, int32_t pos) { + infos.set(pos, si); + } + void SegmentInfos::clear() { infos.clear(); } + + + void SegmentInfos::insert(SegmentInfos* _infos, bool takeMemory){ + infos.insert(infos.end(),_infos->infos.begin(),_infos->infos.end()); + if ( takeMemory ){ + while (_infos->infos.size() > 0 ) + _infos->infos.remove(_infos->infos.begin(), true ); + } + } + void SegmentInfos::insert(SegmentInfo* info){ + infos.push_back(info); + } + int32_t SegmentInfos::indexOf(const SegmentInfo* info) const{ + segmentInfosType::const_iterator itr = infos.begin(); + int32_t c=-1; + while ( itr != infos.end()){ + c++; + if ( *itr == info ){ + return c; + } + itr++; + } + return -1; + } + void SegmentInfos::range(size_t from, size_t to, SegmentInfos& ret) const{ + segmentInfosType::const_iterator itr = infos.begin(); + itr+= from; + for (size_t i=from;iopenInput(segmentFileName); + CND_CONDITION(input != NULL,"input == NULL"); + + generation = generationFromSegmentsFileName( segmentFileName ); + lastGeneration = generation; + + try { + int32_t format = input->readInt(); + if(format < 0){ // file contains explicit format info + // check that it is a format we can understand + if (format < CURRENT_FORMAT){ + char err[30]; + cl_sprintf(err,30,"Unknown format version: %d", format); + _CLTHROWA(CL_ERR_CorruptIndex, err); + } + version = input->readLong(); // read version + counter = input->readInt(); // read counter + } + else{ // file is in old format without explicit format info + counter = format; + } + + for (int32_t i = input->readInt(); i > 0; i--) { // read segmentInfos + infos.push_back( _CLNEW SegmentInfo(directory, format, input) ); + } + + if(format >= 0){ // in old format the version number may be at the end of the file + if (input->getFilePointer() >= input->length()) + version = CL_NS(util)::Misc::currentTimeMillis(); // old file format without version number + else + version = input->readLong(); // read version + } + success = true; + } _CLFINALLY({ + input->close(); + _CLDELETE(input); + if (!success) { + // Clear any segment infos we had loaded so we + // have a clean slate on retry: + clear(); + } + }); + } + + void SegmentInfos::read(Directory* directory) { + generation = lastGeneration = -1; + + FindSegmentsRead find(directory, this); + + find.run(); + } + + + 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 + + string segmentFileName = getNextSegmentFileName(); + + // Always advance the generation on write: + if (generation == -1) { + generation = 1; + } else { + generation++; + } + + IndexOutput* output = directory->createOutput(segmentFileName.c_str()); + + bool success = false; + + try { + output->writeInt(CURRENT_FORMAT); // write FORMAT + output->writeLong(++version); // every write changes + // the index + output->writeInt(counter); // write counter + output->writeInt(size()); // write infos + for (int32_t i = 0; i < size(); i++) { + info(i)->write(output); + } + }_CLFINALLY ( + try { + output->close(); + _CLDELETE(output); + success = true; + } _CLFINALLY ( + if (!success) { + // Try not to leave a truncated segments_N file in + // the index: + directory->deleteFile(segmentFileName.c_str()); + } + ) + ) + + try { + output = directory->createOutput(IndexFileNames::SEGMENTS_GEN); + try { + output->writeInt(FORMAT_LOCKLESS); + output->writeLong(generation); + output->writeLong(generation); + } _CLFINALLY( + output->close(); + _CLDELETE(output); + ) + } catch (CLuceneError& e) { + if ( e.number() != CL_ERR_IO ) throw e; + // It's OK if we fail to write this file since it's + // used only as one of the retry fallbacks. + } + + lastGeneration = generation; + } + + SegmentInfos* SegmentInfos::clone() const{ + SegmentInfos* sis = _CLNEW SegmentInfos(true, infos.size()); + for(size_t i=0;isetElementAt(infos[i]->clone(), i); + } + return sis; + } + + int64_t SegmentInfos::getVersion() const { return version; } + int64_t SegmentInfos::getGeneration() const { return generation; } + int64_t SegmentInfos::getLastGeneration() const { return lastGeneration; } + + int64_t SegmentInfos::readCurrentVersion(Directory* directory){ + FindSegmentsVersion find(directory); + return find.run(); + } + + //void SegmentInfos::setDefaultGenFileRetryCount(const int32_t count) { defaultGenFileRetryCount = count; } + int32_t SegmentInfos::getDefaultGenFileRetryCount() { return defaultGenFileRetryCount; } + + //void SegmentInfos::setDefaultGenFileRetryPauseMsec(const int32_t msec) { defaultGenFileRetryPauseMsec = msec; } + int32_t SegmentInfos::getDefaultGenFileRetryPauseMsec() { return defaultGenFileRetryPauseMsec; } + + //void SegmentInfos::setDefaultGenLookaheadCount(const int32_t count) { defaultGenLookaheadCount = count;} + int32_t SegmentInfos::getDefaultGenLookahedCount() { return defaultGenLookaheadCount; } + + void SegmentInfos::_FindSegmentsFile::doRun(){ + string segmentFileName; + int64_t lastGen = -1; + int64_t gen = 0; + int32_t genLookaheadCount = 0; + bool retry = false; + CLuceneError exc; //saved exception + + int32_t method = 0; + + // Loop until we succeed in calling doBody() without + // hitting an IOException. An IOException most likely + // means a commit was in process and has finished, in + // the time it took us to load the now-old infos files + // (and segments files). It's also possible it's a + // true error (corrupt index). To distinguish these, + // on each retry we must see "forward progress" on + // which generation we are trying to load. If we + // don't, then the original error is real and we throw + // it. + + // We have three methods for determining the current + // generation. We try the first two in parallel, and + // fall back to the third when necessary. + + while( true ) { + + if ( 0 == method ) { + // Method 1: list the directory and use the highest + // segments_N file. This method works well as long + // as there is no stale caching on the directory + // contents (NOTE: NFS clients often have such stale + // caching): + vector files; + + int64_t genA = -1; + + if (directory != NULL){ + if (directory->list(&files)) { + genA = getCurrentSegmentGeneration( files ); + files.clear(); + } + } + + + if ( infoStream ){ + (*infoStream) << "[SIS]: directory listing genA=" << genA << "\n"; + } + + // Method 2: open segments.gen and read its + // contents. Then we take the larger of the two + // gen's. This way, if either approach is hitting + // a stale cache (NFS) we have a better chance of + // getting the right generation. + int64_t genB = -1; + if (directory != NULL) { + CLuceneError e; + for(int32_t i=0;iopenInput(IndexFileNames::SEGMENTS_GEN, genInput, e) ){ + if (e.number() == CL_ERR_IO ) { + if ( infoStream ){ + (*infoStream) << "[SIS]: segments.gen open: IOException " << e.what() << "\n"; + } + break; + } else { + genInput->close(); + _CLLDELETE(genInput); + throw e; + } + } + + if (genInput != NULL) { + try { + int32_t version = genInput->readInt(); + if (version == FORMAT_LOCKLESS) { + int64_t gen0 = genInput->readLong(); + int64_t gen1 = genInput->readLong(); + //CL_TRACE("fallback check: %d; %d", gen0, gen1); + if (gen0 == gen1) { + // The file is consistent. + genB = gen0; + genInput->close(); + _CLDELETE(genInput); + break; + } + } + } catch (CLuceneError &err2) { + if (err2.number() != CL_ERR_IO) { + genInput->close(); + _CLLDELETE(genInput); + throw err2; // retry only for IOException + } + } _CLFINALLY({ + genInput->close(); + _CLDELETE(genInput); + }); + } + + _LUCENE_SLEEP(defaultGenFileRetryPauseMsec); + /* + //todo: Wrap the LUCENE_SLEEP call above with the following try/catch block if + // InterruptedException is implemented + try { + } catch (CLuceneError &e) { + //if (err2.number != CL_ERR_Interrupted) // retry only for InterruptedException + // todo: see if CL_ERR_Interrupted needs to be added... + throw e; + }*/ + + } + } + + //CL_TRACE("%s check: genB=%d", IndexFileNames::SEGMENTS_GEN, genB); + + // Pick the larger of the two gen's: + if (genA > genB) + gen = genA; + else + gen = genB; + + if (gen == -1) { + // Neither approach found a generation + _CLTHROWA(CL_ERR_IO, (string("No segments* file found in ") + directory->toString()).c_str()); + } + } + + // Third method (fallback if first & second methods + // are not reliable): since both directory cache and + // file contents cache seem to be stale, just + // advance the generation. + if ( 1 == method || ( 0 == method && lastGen == gen && retry )) { + + method = 1; + + if (genLookaheadCount < defaultGenLookaheadCount) { + gen++; + genLookaheadCount++; + //CL_TRACE("look ahead increment gen to %d", gen); + } + } + + if (lastGen == gen) { + + // This means we're about to try the same + // segments_N last tried. This is allowed, + // exactly once, because writer could have been in + // the process of writing segments_N last time. + + if (retry) { + // OK, we've tried the same segments_N file + // twice in a row, so this must be a real + // error. We throw the original exception we + // got. + throw exc; + } else { + retry = true; + } + + } else { + // Segment file has advanced since our last loop, so + // reset retry: + retry = false; + } + + lastGen = gen; + + segmentFileName = IndexFileNames::fileNameFromGeneration(IndexFileNames::SEGMENTS, "", gen); + + CLuceneError saved_error; + if ( tryDoBody(segmentFileName.c_str(), saved_error) ){ + return; + } + + // Save the original root cause: + if (exc.number() == 0) { + CND_CONDITION( saved_error.number() > 0, "Unsupported error code"); + exc.set(saved_error.number(),saved_error.what()); + } + + //CL_TRACE("primary Exception on '" + segmentFileName + "': " + err + "'; will retry: retry=" + retry + "; gen = " + gen); + + if (!retry && gen > 1) { + + // This is our first time trying this segments + // file (because retry is false), and, there is + // possibly a segments_(N-1) (because gen > 1). + // So, check if the segments_(N-1) exists and + // try it if so: + string prevSegmentFileName = IndexFileNames::fileNameFromGeneration( IndexFileNames::SEGMENTS, "", gen-1 ); + + bool prevExists=false; + if (directory != NULL) + prevExists = directory->fileExists(prevSegmentFileName.c_str()); + else + prevExists = Misc::dir_Exists( (string(fileDirectory) + prevSegmentFileName).c_str() ); + + if (prevExists) { + //CL_TRACE("fallback to prior segment file '%s'", prevSegmentFileName); + CLuceneError saved_error; + if ( tryDoBody(prevSegmentFileName.c_str(), saved_error) ){ + return; + } + //CL_TRACE("secondary Exception on '" + prevSegmentFileName + "': " + err2 + "'; will retry"); + } + } + } + } + SegmentInfos::FindSegmentsRead::FindSegmentsRead( CL_NS(store)::Directory* dir, SegmentInfos* _this ) : + SegmentInfos::FindSegmentsFile(dir) { + this->_this = _this; + } + bool SegmentInfos::FindSegmentsRead::doBody( const char* segmentFileName ) { + //Have SegmentInfos read the segments file in directory + _this->read(directory, segmentFileName); + return true; + } + + SegmentInfos::FindSegmentsVersion::FindSegmentsVersion( CL_NS(store)::Directory* dir ) : + SegmentInfos::FindSegmentsFile(dir) { + } + + int64_t SegmentInfos::FindSegmentsVersion::doBody( const char* segmentFileName ) { + + IndexInput* input = directory->openInput( segmentFileName ); + + int32_t format = 0; + int64_t version=0; + try { + format = input->readInt(); + if(format < 0){ + if(format < CURRENT_FORMAT){ + char err[30]; + cl_sprintf(err,30,"Unknown format version: %d",format); + _CLTHROWA(CL_ERR_CorruptIndex,err); + } + version = input->readLong(); // read version + } + } + _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* sis = _CLNEW SegmentInfos(); + sis->read(directory, segmentFileName); + version = sis->getVersion(); + _CLDELETE(sis); + + return version; + + } + +CL_NS_END diff --git a/Pods/BRCLucene/src/core/CLucene/index/SegmentMergeInfo.cpp b/Pods/BRCLucene/src/core/CLucene/index/SegmentMergeInfo.cpp new file mode 100644 index 0000000..035cdd2 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/index/SegmentMergeInfo.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/_ApiHeader.h" +#include "_SegmentHeader.h" +#include "_SegmentMergeInfo.h" +#include "_SegmentTermEnum.h" + +CL_NS_DEF(index) + +SegmentMergeInfo::SegmentMergeInfo(const int32_t b, TermEnum* te, IndexReader* r): + docMap(NULL), + termEnum(te), + base(b), + reader(r) +{ +//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/Pods/BRCLucene/src/core/CLucene/index/SegmentMergeQueue.cpp b/Pods/BRCLucene/src/core/CLucene/index/SegmentMergeQueue.cpp new file mode 100644 index 0000000..ba34937 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/index/SegmentMergeQueue.cpp @@ -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. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "CLucene/util/PriorityQueue.h" +#include "_SegmentHeader.h" +#include "_SegmentMergeInfo.h" +#include "_SegmentMergeQueue.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/Pods/BRCLucene/src/core/CLucene/index/SegmentMerger.cpp b/Pods/BRCLucene/src/core/CLucene/index/SegmentMerger.cpp new file mode 100644 index 0000000..284ee26 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/index/SegmentMerger.cpp @@ -0,0 +1,813 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "_SegmentHeader.h" +#include "CLucene/util/PriorityQueue.h" +#include "CLucene/util/Misc.h" +#include "IndexReader.h" +#include "IndexWriter.h" +#include "_SegmentMerger.h" +#include "_FieldsWriter.h" +#include "CLucene/document/Document.h" +#include +#include "CLucene/index/_IndexFileNames.h" +#include "_CompoundFile.h" +#include "_SkipListWriter.h" +#include "CLucene/document/FieldSelector.h" + +CL_NS_USE(util) +CL_NS_USE(document) +CL_NS_USE(store) +CL_NS_DEF(index) + +const uint8_t SegmentMerger::NORMS_HEADER[] = {'N','R','M', (uint8_t)-1}; +const int SegmentMerger::NORMS_HEADER_length = 4; +int32_t SegmentMerger::MAX_RAW_MERGE_DOCS = 4192; + +void SegmentMerger::init(){ + skipListWriter = NULL; + freqOutput = NULL; + proxOutput = NULL; + termInfosWriter = NULL; + queue = NULL; + fieldInfos = NULL; + checkAbort = NULL; + skipInterval = 0; +} + +SegmentMerger::SegmentMerger(IndexWriter* writer, const char* name, MergePolicy::OneMerge* merge){ +//Func - Constructor +//Pre - dir holds a valid reference to a Directory +// name != NULL +//Post - Instance has been created + + CND_PRECONDITION(name != NULL, "name is NULL"); + + this->init(); + this->directory = writer->getDirectory(); + this->segment = name; + if (merge != NULL) + this->checkAbort = _CLNEW CheckAbort(merge, directory); + this->termIndexInterval= writer->getTermIndexInterval(); + this->mergedDocs = 0; + this->maxSkipLevels = 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); + } + + _CLDELETE(checkAbort); + _CLDELETE(skipListWriter); + +} + +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(bool mergeDocStores) { + this->mergeDocStores = mergeDocStores; + + // NOTE: it's important to add calls to + // checkAbort.work(...) if you make any changes to this + // method that will spend alot of time. The frequency + // of this check impacts how long + // IndexWriter.close(false) takes to actually stop the + // threads. + + mergedDocs = mergeFields(); + + mergeTerms(); + mergeNorms(); + + if (mergeDocStores && fieldInfos->hasVectors()) + mergeVectors(); + + return mergedDocs; +} + +void SegmentMerger::closeReaders(){ + for (uint32_t i = 0; i < readers.size(); i++) { // close readers + IndexReader* reader = readers[i]; + reader->close(); + } +} + +void SegmentMerger::createCompoundFile(const char* filename, std::vector* files){ + CompoundFileWriter* cfsWriter = _CLNEW CompoundFileWriter(directory, filename, checkAbort); + + bool ownFiles = false; + if ( files == NULL ){ + files = new vector; + files->reserve(IndexFileNames::COMPOUND_EXTENSIONS().length + 1); + ownFiles = true; + } + + // Basic files + for (int32_t i = 0; i < IndexFileNames::COMPOUND_EXTENSIONS().length; i++) { + const char* ext = IndexFileNames::COMPOUND_EXTENSIONS()[i]; + if (mergeDocStores || (strcmp(ext,IndexFileNames::FIELDS_EXTENSION) != 0 && + strcmp(ext,IndexFileNames::FIELDS_INDEX_EXTENSION) != 0 ) ){ + files->push_back ( string(segment) + "." + ext ); + } + } + + // Field norm files + for (size_t i = 0; i < fieldInfos->size(); i++) { + FieldInfo* fi = fieldInfos->fieldInfo(i); + if (fi->isIndexed && !fi->omitNorms) { + files->push_back ( segment + "." + IndexFileNames::NORMS_EXTENSION ); + break; + } + } + + // Vector files + if ( mergeDocStores && fieldInfos->hasVectors()) { + for (int32_t i = 0; i < IndexFileNames::VECTOR_EXTENSIONS().length; i++) { + files->push_back ( segment + "." + IndexFileNames::VECTOR_EXTENSIONS()[i] ); + } + } + + // Now merge all added files + for ( size_t i=0;isize();i++ ){ + cfsWriter->addFile( (*files)[i].c_str()); + } + + // Perform the merge + cfsWriter->close(); + _CLDELETE(cfsWriter); + if ( ownFiles ) delete files; +} + +void SegmentMerger::addIndexed(IndexReader* reader, FieldInfos* fieldInfos, StringArrayWithDeletor& names, + bool storeTermVectors, bool storePositionWithTermVector, + bool storeOffsetWithTermVector, bool storePayloads){ + + StringArrayWithDeletor::const_iterator itr = names.begin(); + while ( itr != names.end() ){ + fieldInfos->add(*itr, true, + storeTermVectors, storePositionWithTermVector, + storeOffsetWithTermVector, !reader->hasNorms(*itr), storePayloads); + + ++itr; + } +} + + +// for merging we don't want to compress/uncompress the data, so to tell the FieldsReader that we're +// in merge mode, we use this FieldSelector +class FieldSelectorMerge: public FieldSelector{ +public: + FieldSelectorResult accept(const TCHAR* /*fieldName*/) const{ + return FieldSelector::LOAD_FOR_MERGE; + } +}; + + +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. + + if (!mergeDocStores) { + // When we are not merging by doc stores, that means + // all segments were written as part of a single + // autoCommit=false IndexWriter session, so their field + // name -> number mapping are the same. So, we start + // with the fieldInfos of the last segment in this + // case, to keep that numbering. + assert(readers[readers.size()-1]->instanceOf(SegmentReader::getClassName())); + assert(false);//check last...and remove if correct... + SegmentReader* sr = (SegmentReader*)readers[readers.size()-1]; + fieldInfos = sr->fieldInfos()->clone(); + } else { + //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; + + //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"); + + if (reader->instanceOf(SegmentReader::getClassName())) { + SegmentReader* segmentReader = (SegmentReader*) reader; + for (size_t j = 0; j < segmentReader->getFieldInfos()->size(); j++) { + FieldInfo* fi = segmentReader->getFieldInfos()->fieldInfo(j); + fieldInfos->add(fi->name, fi->isIndexed, fi->storeTermVector, + fi->storePositionWithTermVector, fi->storeOffsetWithTermVector, + !reader->hasNorms(fi->name), fi->storePayloads); + } + } else { + StringArrayWithDeletor tmp; + + tmp.clear(); reader->getFieldNames(IndexReader::TERMVECTOR_WITH_POSITION_OFFSET, tmp); + addIndexed(reader, fieldInfos, tmp, true, true, true, false); + + tmp.clear(); reader->getFieldNames(IndexReader::TERMVECTOR_WITH_POSITION, tmp); + addIndexed(reader, fieldInfos, tmp, true, true, false, false); + + tmp.clear(); reader->getFieldNames(IndexReader::TERMVECTOR_WITH_OFFSET, tmp); + addIndexed(reader, fieldInfos, tmp, true, false, true, false); + + tmp.clear(); reader->getFieldNames(IndexReader::TERMVECTOR, tmp); + addIndexed(reader, fieldInfos, tmp, true, false, false, false); + + tmp.clear(); reader->getFieldNames(IndexReader::STORES_PAYLOADS, tmp); + addIndexed(reader, fieldInfos, tmp, false, false, false, true); + + tmp.clear(); reader->getFieldNames(IndexReader::INDEXED, tmp); + addIndexed(reader, fieldInfos, tmp, false, false, false, false); + + tmp.clear(); reader->getFieldNames(IndexReader::UNINDEXED, tmp); + if ( tmp.size() > 0 ){ + TCHAR** arr = _CL_NEWARRAY(TCHAR*,tmp.size()+1); + tmp.toArray_nullTerminated(arr); + fieldInfos->add((const TCHAR**)arr, false); + _CLDELETE_ARRAY(arr); //no need to delete the contents, since tmp is responsible for it + } + } + } + + //Write the new FieldInfos file to the directory + fieldInfos->write(directory, Misc::segmentname(segment.c_str(),".fnm").c_str() ); + + int32_t docCount = 0; + + if (mergeDocStores) { + + // If the i'th reader is a SegmentReader and has + // identical fieldName -> number mapping, then this + // array will be non-NULL at position i: + ValueArray matchingSegmentReaders(readers.size()); + + // If this reader is a SegmentReader, and all of its + // field name -> number mappings match the "merged" + // FieldInfos, then we can do a bulk copy of the + // stored fields: + for (size_t i = 0; i < readers.size(); i++) { + IndexReader* reader = readers[i]; + if (reader->instanceOf(SegmentReader::getClassName())) { + SegmentReader* segmentReader = (SegmentReader*) reader; + bool same = true; + FieldInfos* segmentFieldInfos = segmentReader->getFieldInfos(); + for (size_t j = 0; same && j < segmentFieldInfos->size(); j++) + same = _tcscmp(fieldInfos->fieldName(j), segmentFieldInfos->fieldName(j)) == 0; + if (same) { + matchingSegmentReaders.values[i] = segmentReader; + } + } + } + + // Used for bulk-reading raw bytes for stored fields + ValueArray rawDocLengths(MAX_RAW_MERGE_DOCS); + + // merge field values + FieldsWriter fieldsWriter(directory, segment.c_str(), fieldInfos); + + try { + for (size_t i = 0; i < readers.size(); i++) { + IndexReader* reader = readers[i]; + SegmentReader* matchingSegmentReader = matchingSegmentReaders[i]; + FieldsReader* matchingFieldsReader; + if (matchingSegmentReader != NULL) + matchingFieldsReader = matchingSegmentReader->getFieldsReader(); + else + matchingFieldsReader = NULL; + const int32_t maxDoc = reader->maxDoc(); + Document doc; + FieldSelectorMerge fieldSelectorMerge; + for (int32_t j = 0; j < maxDoc;) { + if (!reader->isDeleted(j)) { // skip deleted docs + if (matchingSegmentReader != NULL) { + // We can optimize this case (doing a bulk + // byte copy) since the field numbers are + // identical + int32_t start = j; + int32_t numDocs = 0; + do { + j++; + numDocs++; + } while(j < maxDoc && !matchingSegmentReader->isDeleted(j) && numDocs < MAX_RAW_MERGE_DOCS); + + IndexInput* stream = matchingFieldsReader->rawDocs(rawDocLengths.values, start, numDocs); + fieldsWriter.addRawDocuments(stream, rawDocLengths.values, numDocs); + docCount += numDocs; + if (checkAbort != NULL) + checkAbort->work(300*numDocs); + } else { + doc.clear(); + reader->document(j, doc, &fieldSelectorMerge); + fieldsWriter.addDocument(&doc); + j++; + docCount++; + if (checkAbort != NULL) + checkAbort->work(300); + } + } else + j++; + } + } + } _CLFINALLY ( + fieldsWriter.close(); + ) + + CND_PRECONDITION (docCount*8 == directory->fileLength( (segment + "." + IndexFileNames::FIELDS_INDEX_EXTENSION).c_str() ), + (string("after mergeFields: fdx size mismatch: ") + Misc::toString(docCount) + " docs vs " + Misc::toString(directory->fileLength( (segment + "." + IndexFileNames::FIELDS_INDEX_EXTENSION).c_str() )) + " length in bytes of " + segment + "." + IndexFileNames::FIELDS_INDEX_EXTENSION).c_str() ); + + } else{ + // If we are skipping the doc stores, that means there + // are no deletions in any of these segments, so we + // just sum numDocs() of each segment to get total docCount + for (size_t i = 0; i < readers.size(); i++) + docCount += readers[i]->numDocs(); + } + return docCount; +} + + +void SegmentMerger::mergeVectors(){ + TermVectorsWriter* termVectorsWriter = + _CLNEW TermVectorsWriter(directory, segment.c_str(), 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; + + ArrayBase* tmp = reader->getTermFreqVectors(docNum); +// if ( tmp != NULL ){ + termVectorsWriter->addAllDocVectors(tmp); + _CLLDELETE(tmp); +// } + if (checkAbort != NULL) + checkAbort->work(300); + } + } + }_CLFINALLY( + if ( termVectorsWriter != NULL ){ + termVectorsWriter->close(); + _CLDELETE(termVectorsWriter); + } + ); + + CND_PRECONDITION(4+mergedDocs*8 == directory->fileLength( (segment + "." + IndexFileNames::VECTORS_INDEX_EXTENSION).c_str() ), + (string("after mergeVectors: tvx size mismatch: ") + Misc::toString(mergedDocs) + " docs vs " + Misc::toString(directory->fileLength( (segment + "." + IndexFileNames::VECTORS_INDEX_EXTENSION).c_str() )) + " length in bytes of " + segment + "." + IndexFileNames::VECTORS_INDEX_EXTENSION).c_str() ) + +} + + +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{ + //Open an IndexOutput to the new Frequency File + freqOutput = directory->createOutput( Misc::segmentname(segment.c_str(),".frq").c_str() ); + + //Open an IndexOutput to the new Prox File + proxOutput = directory->createOutput( Misc::segmentname(segment.c_str(),".prx").c_str() ); + + //Instantiate a new termInfosWriter which will write in directory + //for the segment name segment using the new merged fieldInfos + termInfosWriter = _CLNEW TermInfosWriter(directory, segment.c_str(), 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; + maxSkipLevels = termInfosWriter->maxSkipLevels; + skipListWriter = _CLNEW DefaultSkipListWriter(skipInterval, maxSkipLevels, mergedDocs, freqOutput, proxOutput); + queue = _CLNEW SegmentMergeQueue(readers.size()); + + //And merge the Term Infos + mergeTermInfos(); + }_CLFINALLY( + if ( freqOutput != NULL ){ + freqOutput->close(); + _CLDELETE(freqOutput); + } + if ( proxOutput != NULL ){ + proxOutput->close(); + _CLDELETE(proxOutput); + } + if ( termInfosWriter != NULL ){ + termInfosWriter->close(); + _CLDELETE(termInfosWriter); + } + 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()); + + //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(); + } + int32_t df = mergeTermInfo(match, matchSize); // add new TermInfo + if (checkAbort != NULL) + checkAbort->work(df/3.0); + + //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); +} + +int32_t SegmentMerger::mergeTermInfo( SegmentMergeInfo** smis, int32_t n){ +//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, n); + + int64_t skipPointer = skipListWriter->writeSkip(freqOutput); + + //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); + } + return df; +} + + +int32_t SegmentMerger::appendPostings(SegmentMergeInfo** smis, int32_t n){ +//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 + + skipListWriter->resetSkip(); + bool storePayloads = fieldInfos->fieldInfo(smis[0]->term->field())->storePayloads; + int32_t lastPayloadLength = -1; // ensures that we write the first length + + SegmentMergeInfo* smi = NULL; + + //Iterate through all SegmentMergeInfo instances in smis + for ( int32_t i=0;igetPositions(); + assert(postings != NULL); + //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 + if (doc < 0 || (df > 0 && doc <= lastDoc)) + _CLTHROWA(CL_ERR_CorruptIndex, (string("docs out of order (") + Misc::toString(doc) + + " <= " + Misc::toString(lastDoc) + " )").c_str()); + + //Increase the total frequency over all segments + df++; + + if ((df % skipInterval) == 0) { + skipListWriter->setSkipData(lastDoc, storePayloads, lastPayloadLength); + skipListWriter->bufferSkip(df); + } + + //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); + } + + /** See {@link DocumentWriter#writePostings(Posting[], String)} for + * documentation about the encoding of positions and payloads + */ + int32_t lastPosition = 0; + // write position deltas + for (int32_t j = 0; j < freq; j++) { + //Get the next position + int32_t position = postings->nextPosition(); + int32_t delta = position - lastPosition; + if (storePayloads) { + size_t payloadLength = postings->getPayloadLength(); + if (payloadLength == lastPayloadLength) { + proxOutput->writeVInt(delta * 2); + } else { + proxOutput->writeVInt(delta * 2 + 1); + proxOutput->writeVInt(payloadLength); + lastPayloadLength = payloadLength; + } + if (payloadLength > 0) { + if ( payloadBuffer.length < payloadLength ){ + payloadBuffer.resize(payloadLength); + } + postings->getPayload(payloadBuffer.values); + proxOutput->writeBytes(payloadBuffer.values, payloadLength); + } + } else { + proxOutput->writeVInt(delta); + } + lastPosition = position; + } + } + } + + //Return total number of documents across all segments where term was found + return df; +} + +void SegmentMerger::mergeNorms() { +//Func - Merges the norms for all fields +//Pre - fieldInfos != NULL +//Post - The norms for all fields have been merged + ValueArray normBuffer; + IndexOutput* output = NULL; + try { + + CND_PRECONDITION(fieldInfos != NULL, "fieldInfos is NULL"); + + IndexReader* reader = NULL; + + //iterate through all the Field Infos instances + for (size_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){ + //Instantiate an IndexOutput to that norm file + if (output == NULL) { + output = directory->createOutput( (segment + "." + IndexFileNames::NORMS_EXTENSION).c_str() ); + output->writeBytes(NORMS_HEADER,NORMS_HEADER_length); + } + + //Condition check to see if output points to a valid instance + CND_CONDITION(output != NULL, "No Outputstream retrieved"); + + //Iterate through all IndexReaders + for (uint32_t j = 0; j < readers.size(); j++) { + //Get the i-th IndexReader + reader = readers[j]; + + //Condition check to see if reader points to a valid instance + CND_CONDITION(reader != NULL, "No reader found"); + + //Get the total number of documents including the documents that have been marked deleted + size_t maxDoc = reader->maxDoc(); + + //Get an IndexInput to the norm file for this field in this segment + if ( normBuffer.length < maxDoc ){ + normBuffer.resize(maxDoc); + memset(normBuffer.values,0,sizeof(uint8_t) * maxDoc); + } + reader->norms(fi->name, normBuffer.values); + + if (!reader->hasDeletions()) { + //optimized case for segments without deleted docs + output->writeBytes(normBuffer.values, maxDoc); + } else { + // this segment has deleted docs, so we have to + // check for every doc if it is deleted or not + + for(size_t k = 0; k < maxDoc; k++) { + //Check if document k is deleted + if (!reader->isDeleted(k)){ + //write the new norm + output->writeByte(normBuffer[k]); + } + } + } + if (checkAbort != NULL) + checkAbort->work(maxDoc); + } + } + } + }_CLFINALLY( + if ( output != NULL ){ + output->close(); + _CLDELETE(output); + } + ); +} + + +SegmentMerger::CheckAbort::CheckAbort(MergePolicy::OneMerge* merge, Directory* dir) { + this->merge = merge; + this->dir = dir; + this->workCount = 0; +} + +void SegmentMerger::CheckAbort::work(float_t units){ + workCount += units; + if (workCount >= 10000.0) { + merge->checkAborted(dir); + workCount = 0; + } +} +CL_NS_END diff --git a/Pods/BRCLucene/src/core/CLucene/index/SegmentReader.cpp b/Pods/BRCLucene/src/core/CLucene/index/SegmentReader.cpp new file mode 100644 index 0000000..a109e48 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/index/SegmentReader.cpp @@ -0,0 +1,1120 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "CLucene/util/Misc.h" +#include "_SegmentHeader.h" +#include "_MultiSegmentReader.h" +#include "_FieldInfos.h" +#include "_FieldsReader.h" +#include "IndexReader.h" +#include "_TermInfosReader.h" +#include "Terms.h" +#include "CLucene/search/Similarity.h" +#include "CLucene/store/FSDirectory.h" +#include "CLucene/util/PriorityQueue.h" +#include "_SegmentMerger.h" +#include + +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, bool _useSingleNormStream, int32_t n, int64_t ns, SegmentReader* r, const char* seg): + number(n), + normSeek(ns), + _this(r), + segment(seg), + useSingleNormStream(_useSingleNormStream), + 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 + + refCount = 1; + 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!!!!! + if ( in != _this->singleNormStream ) + _CLDELETE(in); + + //Delete the bytes array + _CLDELETE_ARRAY(bytes); + + } + void SegmentReader::Norm::doDelete(Norm* norm){ + if ( norm->refCount == 0 ){ + _CLLDELETE(norm); + } + } + + void SegmentReader::Norm::close(){ + SCOPED_LOCK_MUTEX(THIS_LOCK) + if (in != NULL && !useSingleNormStream) { + in->close(); + _CLDELETE(in); + } + in = NULL; + } + + void SegmentReader::Norm::incRef() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + assert (refCount > 0); + refCount++; + } + + void SegmentReader::Norm::decRef(){ + SCOPED_LOCK_MUTEX(THIS_LOCK) + assert (refCount > 0); + if (refCount == 1) { + close(); + } + refCount--; + } + void SegmentReader::Norm::reWrite(SegmentInfo* si){ + // NOTE: norms are re-written in regular directory, not cfs + si->advanceNormGen(this->number); + IndexOutput* out = _this->directory()->createOutput(si->getNormFileName(this->number).c_str()); + try { + out->writeBytes(bytes, _this->maxDoc()); + }_CLFINALLY( + out->close(); + _CLDELETE(out) + ); + this->dirty = false; + } + + void SegmentReader::initialize(SegmentInfo* si, int32_t readBufferSize, bool doOpenStores, bool doingReopen){ + //Pre - si-> is a valid reference to SegmentInfo instance + // identified by si-> + //Post - All files of the segment have been read + + this->deletedDocs = NULL; + this->ones = NULL; + //There are no documents yet marked as deleted + this->deletedDocsDirty = false; + + this->normsDirty=false; + this->undeleteAll=false; + + this->rollbackDeletedDocsDirty = false; + this->rollbackNormsDirty = false; + this->rollbackUndeleteAll = false; + + //Duplicate the name of the segment from SegmentInfo to segment + this->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 + this->freqStream = NULL; + this->proxStream = NULL; + this->singleNormStream = NULL; + this->termVectorsReaderOrig = NULL; + this->_fieldInfos = NULL; + this->tis = NULL; + this->fieldsReader = NULL; + this->cfsReader = NULL; + this->storeCFSReader = NULL; + + this->segment = si->name; + this->si = si; + this->readBufferSize = readBufferSize; + + if ( doingReopen ) return; // the rest is done in the reopen code... + + bool success = false; + + try { + // Use compound file directory for some files, if it exists + Directory* cfsDir = directory(); + if (si->getUseCompoundFile()) { + cfsReader = _CLNEW CompoundFileReader(directory(), (segment + "." + IndexFileNames::COMPOUND_FILE_EXTENSION).c_str(), readBufferSize); + cfsDir = cfsReader; + } + + Directory* storeDir; + + if (doOpenStores) { + if (si->getDocStoreOffset() != -1) { + if (si->getDocStoreIsCompoundFile()) { + storeCFSReader = _CLNEW CompoundFileReader(directory(), (si->getDocStoreSegment() + "." + IndexFileNames::COMPOUND_FILE_STORE_EXTENSION).c_str(), readBufferSize); + storeDir = storeCFSReader; + } else { + storeDir = directory(); + } + } else { + storeDir = cfsDir; + } + } else + storeDir = NULL; + + // No compound file exists - use the multi-file format + _fieldInfos = _CLNEW FieldInfos(cfsDir, (segment + ".fnm").c_str() ); + + string fieldsSegment; + + if (si->getDocStoreOffset() != -1) + fieldsSegment = si->getDocStoreSegment(); + else + fieldsSegment = segment; + + if (doOpenStores) { + fieldsReader = _CLNEW FieldsReader(storeDir, fieldsSegment.c_str(), _fieldInfos, readBufferSize, + si->getDocStoreOffset(), si->docCount); + + // Verify two sources of "maxDoc" agree: + if (si->getDocStoreOffset() == -1 && fieldsReader->size() != si->docCount) { + string err = "doc counts differ for segment "; + err += si->name; + err += ": fieldsReader shows "; + err += fieldsReader->size(); + err += " but segmentInfo shows "; + err += si->docCount; + _CLTHROWA(CL_ERR_CorruptIndex, err.c_str() ); + } + } + + tis = _CLNEW TermInfosReader(cfsDir, segment.c_str(), _fieldInfos, readBufferSize); + + loadDeletedDocs(); + + // 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 = cfsDir->openInput( (segment + ".frq").c_str(), readBufferSize); + proxStream = cfsDir->openInput( (segment + ".prx").c_str(), readBufferSize); + openNorms(cfsDir, readBufferSize); + + if (doOpenStores && _fieldInfos->hasVectors()) { // open term vector files only as needed + string vectorsSegment; + if (si->getDocStoreOffset() != -1) + vectorsSegment = si->getDocStoreSegment(); + else + vectorsSegment = segment; + termVectorsReaderOrig = _CLNEW TermVectorsReader(storeDir, vectorsSegment.c_str(), _fieldInfos, readBufferSize, si->getDocStoreOffset(), si->docCount); + } + success = true; + } _CLFINALLY ( + + // With lock-less commits, it's entirely possible (and + // fine) to hit a FileNotFound exception above. In + // this case, we want to explicitly close any subset + // of things that were opened so that we don't have to + // wait for a GC to do so. + if (!success) { + doClose(); + } + ) + } + + SegmentReader* SegmentReader::get(SegmentInfo* si, bool doOpenStores) { + return get(si->dir, si, NULL, false, false, BufferedIndexInput::BUFFER_SIZE, doOpenStores); + } + + SegmentReader* SegmentReader::get(SegmentInfo* si, int32_t readBufferSize, bool doOpenStores){ + return get(si->dir, si, NULL, false, false, readBufferSize, doOpenStores); + } + SegmentReader* SegmentReader::get(SegmentInfos* sis, SegmentInfo* si, + bool closeDir) { + return get(si->dir, si, sis, closeDir, true, BufferedIndexInput::BUFFER_SIZE, true); + } + /** + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + SegmentReader* SegmentReader::get(Directory* dir, SegmentInfo* si, + SegmentInfos* sis, + bool closeDir, bool ownDir, + int32_t readBufferSize, + bool doOpenStores){ + SegmentReader* instance = _CLNEW SegmentReader(); //todo: make this configurable... + instance->init(dir, sis, closeDir); + instance->initialize(si, readBufferSize==-1 ? BufferedIndexInput::BUFFER_SIZE : readBufferSize, doOpenStores, false); + return instance; + } + + SegmentReader::SegmentReader(): + DirectoryIndexReader(), + _norms(false,true) + { + } + 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); + //termVectorsLocal->unregister(this); + } + + void SegmentReader::commitChanges(){ + if (deletedDocsDirty) { // re-write deleted + si->advanceDelGen(); + + // We can write directly to the actual name (vs to a + // .tmp & renaming it) because the file is not live + // until segments file is written: + deletedDocs->write(directory(), si->getDelFileName().c_str()); + } + if (undeleteAll && si->hasDeletions()) { + si->clearDelGen(); + } + if (normsDirty) { // re-write norms + si->setNumFields(_fieldInfos->size()); + NormsType::iterator it = _norms.begin(); + while (it != _norms.end()) { + Norm* norm = it->second; + if (norm->dirty) { + norm->reWrite(si); + } + it++; + } + } + 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 + + _CLDELETE(deletedDocs); + + // close the single norms stream + if (singleNormStream != NULL) { + // we can close this stream, even if the norms + // are shared, because every reader has it's own + // singleNormStream + singleNormStream->close(); + _CLDELETE(singleNormStream); + } + + // re-opened SegmentReaders have their own instance of FieldsReader + if (fieldsReader != NULL) { + fieldsReader->close(); + _CLDELETE(fieldsReader); + } + + if (tis != NULL) { + tis->close(); + _CLDELETE(tis); + } + + //Close the frequency stream + if (freqStream != NULL){ + freqStream->close(); + _CLDELETE(freqStream); + } + //Close the prox stream + if (proxStream != NULL){ + proxStream->close(); + _CLDELETE(proxStream); + } + + if (termVectorsReaderOrig != NULL){ + termVectorsReaderOrig->close(); + _CLDELETE(termVectorsReaderOrig); + } + + if (cfsReader != NULL){ + cfsReader->close(); + _CLDECDELETE(cfsReader); + } + + if (storeCFSReader != NULL){ + storeCFSReader->close(); + _CLDELETE(storeCFSReader); + } + + this->decRefNorms(); + _norms.clear(); + + // maybe close directory + DirectoryIndexReader::doClose(); + } + + bool SegmentReader::hasDeletions() const{ + // Don't call ensureOpen() here (it could affect performance) + return deletedDocs != NULL; + } + + //static + bool SegmentReader::usesCompoundFile(SegmentInfo* si) { + return si->getUseCompoundFile(); + } + + //static + bool SegmentReader::hasSeparateNorms(SegmentInfo* si) { + return si->hasSeparateNorms(); + } + + 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 + + // Don't call ensureOpen() here (it could affect performance) + return si->hasDeletions(); + } + + //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(vector& retarray) { + //Func - Returns all file names managed by this SegmentReader + //Pre - segment != NULL + //Post - All filenames managed by this SegmentRead have been returned + vector tmp = si->files(); + retarray.insert(retarray.end(),tmp.begin(),tmp.end()); + } + + TermEnum* SegmentReader::terms() { + //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"); + + ensureOpen(); + return tis->terms(); + } + + TermEnum* SegmentReader::terms(const Term* t) { + //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"); + + ensureOpen(); + return tis->terms(t); + } + + bool SegmentReader::document(int32_t n, Document& doc, const FieldSelector* fieldSelector) { + //Func - writes the fields of document n into doc + //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) + + ensureOpen(); + + 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, fieldSelector); + } + + + 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 + bool ret = (deletedDocs != NULL && deletedDocs->get(n)); + + return ret; + } + + TermDocs* SegmentReader::termDocs() { + //Func - Returns an unpositioned TermDocs enumerator. + //Pre - true + //Post - An unpositioned TermDocs enumerator has been returned + + ensureOpen(); + return _CLNEW SegmentTermDocs(this); + } + + TermPositions* SegmentReader::termPositions() { + //Func - Returns an unpositioned TermPositions enumerator. + //Pre - true + //Post - An unpositioned TermPositions enumerator has been returned + + ensureOpen(); + return _CLNEW SegmentTermPositions(this); + } + + int32_t SegmentReader::docFreq(const Term* t) { + //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 + + ensureOpen(); + + //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; + } + else + //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 + + ensureOpen(); + + //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 + + // Don't call ensureOpen() here (it could affect performance) + + return si->docCount; + } + + + void SegmentReader::setTermInfosIndexDivisor(int32_t indexDivisor){ + tis->setIndexDivisor(indexDivisor); + } + + int32_t SegmentReader::getTermInfosIndexDivisor() { + return tis->getIndexDivisor(); + } + + +void SegmentReader::getFieldNames(FieldOption fldOption, StringArrayWithDeletor& retarray){ + ensureOpen(); + + size_t len = _fieldInfos->size(); + for (size_t i = 0; i < len; i++) { + FieldInfo* fi = _fieldInfos->fieldInfo(i); + bool v=false; + if (fldOption & IndexReader::ALL) { + v=true; + }else { + if (!fi->isIndexed && (fldOption & IndexReader::UNINDEXED) ) + v=true; + else if (fi->isIndexed && (fldOption & IndexReader::INDEXED) ) + v=true; + else if (fi->storePayloads && (fldOption & IndexReader::STORES_PAYLOADS) ) + v=true; + else if (fi->isIndexed && fi->storeTermVector == false && ( fldOption & IndexReader::INDEXED_NO_TERMVECTOR) ) + v=true; + else if ( (fldOption & IndexReader::TERMVECTOR) && + fi->storeTermVector == true && + fi->storePositionWithTermVector == false && + fi->storeOffsetWithTermVector == false ) + v=true; + else if (fi->isIndexed && fi->storeTermVector && (fldOption & IndexReader::INDEXED_WITH_TERMVECTOR) ) + v=true; + else if (fi->storePositionWithTermVector && fi->storeOffsetWithTermVector == false && + (fldOption & IndexReader::TERMVECTOR_WITH_POSITION)) + v=true; + else if (fi->storeOffsetWithTermVector && fi->storePositionWithTermVector == false && + (fldOption & IndexReader::TERMVECTOR_WITH_OFFSET) ) + v=true; + else 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){ + ensureOpen(); + 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) + + ensureOpen(); + Norm* norm = _norms.get(field); + if ( norm == NULL ){ + memcpy(bytes, fakeNorms(), maxDoc()); + return; + } + + + {SCOPED_LOCK_MUTEX(norm->THIS_LOCK) + if (norm->bytes != NULL) { // can copy from cache + memcpy(bytes, norm->bytes, maxDoc()); + return; + } + + // Read from disk. norm.in may be shared across multiple norms and + // should only be used in a synchronized context. + IndexInput* normStream; + if (norm->useSingleNormStream) { + normStream = singleNormStream; + } else { + normStream = norm->in; + } + normStream->seek(norm->normSeek); + normStream->readBytes(bytes, maxDoc()); + } + } + + uint8_t* SegmentReader::createFakeNorms(int32_t size) { + uint8_t* ones = _CL_NEWARRAY(uint8_t,size); + if ( size > 0 ) + 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 + + {SCOPED_LOCK_MUTEX(norm->THIS_LOCK) + if (norm->bytes == NULL) { // value not yet read + uint8_t* bytes = _CL_NEWARRAY(uint8_t, maxDoc()); + norms(field, bytes); + norm->bytes = bytes; // cache it + // it's OK to close the underlying IndexInput as we have cached the + // norms and will never read them again. + norm->close(); + } + return norm->bytes; + } + } + + void SegmentReader::decRefNorms(){ + SCOPED_LOCK_MUTEX(THIS_LOCK) + NormsType::iterator it = _norms.begin(); + while (it != _norms.end()) { + Norm* norm = it->second; + norm->decRef(); + it++; + } + } + + DirectoryIndexReader* SegmentReader::doReopen(SegmentInfos* infos){ + SCOPED_LOCK_MUTEX(THIS_LOCK) + DirectoryIndexReader* newReader; + + if (infos->size() == 1) { + SegmentInfo* si = infos->info(0); + if (segment.compare(si->name)==0 && si->getUseCompoundFile() == this->si->getUseCompoundFile()) { + newReader = reopenSegment(si); + } else { + // segment not referenced anymore, reopen not possible + // or segment format changed + newReader = SegmentReader::get(infos, infos->info(0), false); + } + } else { + ValueArray readers(1); + readers.values[0] = this; + return _CLNEW MultiSegmentReader(_directory, infos, closeDirectory, &readers, NULL, NULL); + } + + return newReader; + } + + + 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) + ensureOpen(); + 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 + } + + + string SegmentReader::SegmentName(const char* 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 != NULL, "ext is NULL"); + + return Misc::segmentname(segment.c_str(),ext,x); + } + + void SegmentReader::openNorms(Directory* cfsDir, int32_t readBufferSize) { + //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 + int64_t nextNormSeek = SegmentMerger::NORMS_HEADER_length; //skip header (header unused for now) + int32_t _maxDoc = maxDoc(); + for (size_t i = 0; i < _fieldInfos->size(); i++) { + FieldInfo* fi = _fieldInfos->fieldInfo(i); + if (_norms.find(fi->name) != _norms.end()) { + // in case this SegmentReader is being re-opened, we might be able to + // reuse some norm instances and skip loading them here + continue; + } + if (fi->isIndexed && !fi->omitNorms) { + Directory* d = directory(); + string fileName = si->getNormFileName(fi->number); + if (!si->hasSeparateNorms(fi->number)) { + d = cfsDir; + } + + // singleNormFile means multiple norms share this file + string ext = string(".") + IndexFileNames::NORMS_EXTENSION; + bool singleNormFile = fileName.compare(fileName.length()-ext.length(),ext.length(),ext)==0; + IndexInput* normInput = NULL; + int64_t normSeek; + + if (singleNormFile) { + normSeek = nextNormSeek; + if (singleNormStream==NULL) { + singleNormStream = d->openInput(fileName.c_str(), readBufferSize); + } + // All norms in the .nrm file can share a single IndexInput since + // they are only used in a synchronized context. + // If this were to change in the future, a clone could be done here. + normInput = singleNormStream; + } else { + normSeek = 0; + normInput = d->openInput(fileName.c_str()); + } + + _norms[fi->name] = _CLNEW Norm(normInput, singleNormFile, fi->number, normSeek, this, segment.c_str()); + nextNormSeek += _maxDoc; // increment also if some norms are separate + } + } + } + + + TermVectorsReader* SegmentReader::getTermVectorsReader() { + TermVectorsReader* tvReader = termVectorsLocal.get(); + if (tvReader == NULL) { + tvReader = termVectorsReaderOrig->clone(); + termVectorsLocal.set(tvReader); + } + return tvReader; + } + + FieldsReader* SegmentReader::getFieldsReader() { + return fieldsReader; + } + + FieldInfos* SegmentReader::getFieldInfos() { + return _fieldInfos; + } + + TermFreqVector* SegmentReader::getTermFreqVector(int32_t docNumber, const TCHAR* field){ + ensureOpen(); + if ( field != NULL ){ + // Check if this field is invalid or has no stored term vector + FieldInfo* fi = _fieldInfos->fieldInfo(field); + if (fi == NULL || !fi->storeTermVector || termVectorsReaderOrig == NULL ) + return NULL; + } + TermVectorsReader* termVectorsReader = getTermVectorsReader(); + if (termVectorsReader == NULL) + return NULL; + return termVectorsReader->get(docNumber, field); + } + + ArrayBase* SegmentReader::getTermFreqVectors(int32_t docNumber) { + ensureOpen(); + if (termVectorsReaderOrig == NULL) + return NULL; + + TermVectorsReader* termVectorsReader = getTermVectorsReader(); + if (termVectorsReader == NULL) + return NULL; + + return termVectorsReader->get(docNumber); + } + + + + void SegmentReader::getTermFreqVector(int32_t docNumber, const TCHAR* field, TermVectorMapper* mapper) { + ensureOpen(); + FieldInfo* fi = _fieldInfos->fieldInfo(field); + if (fi == NULL || !fi->storeTermVector || termVectorsReaderOrig == NULL) + return; + + TermVectorsReader* termVectorsReader = getTermVectorsReader(); + if (termVectorsReader == NULL) + { + return; + } + + + termVectorsReader->get(docNumber, field, mapper); + } + + + void SegmentReader::getTermFreqVector(int32_t docNumber, TermVectorMapper* mapper){ + ensureOpen(); + if (termVectorsReaderOrig == NULL) + return; + + TermVectorsReader* termVectorsReader = getTermVectorsReader(); + if (termVectorsReader == NULL) + return; + + termVectorsReader->get(docNumber, mapper); + } + + + void SegmentReader::loadDeletedDocs(){ + // NOTE: the bitvector is stored using the regular directory, not cfs + if (hasDeletions(si)) { + deletedDocs = _CLNEW BitVector(directory(), si->getDelFileName().c_str()); + + // Verify # deletes does not exceed maxDoc for this segment: + if (deletedDocs->count() > maxDoc()) { + string err = "number of deletes ("; + err += deletedDocs->count(); + err += ") exceeds max doc ("; + err += maxDoc(); + err += ") for segment "; + err += si->name; + _CLTHROWA(CL_ERR_CorruptIndex, err.c_str()); + } + } + } + + SegmentReader* SegmentReader::reopenSegment(SegmentInfo* si){ + SCOPED_LOCK_MUTEX(THIS_LOCK) + bool deletionsUpToDate = (this->si->hasDeletions() == si->hasDeletions()) + && (!si->hasDeletions() || this->si->getDelFileName().compare(si->getDelFileName())==0 ); + bool normsUpToDate = true; + + + ValueArrayfieldNormsChanged(_fieldInfos->size()); + if (normsUpToDate) { + for (size_t i = 0; i < _fieldInfos->size(); i++) { + if (this->si->getNormFileName(i).compare(si->getNormFileName(i)) != 0) { + normsUpToDate = false; + fieldNormsChanged.values[i] = true; + } + } + } + + if (normsUpToDate && deletionsUpToDate) { + this->si = si; //force the result to use the new segment info (the old one is going to go away!) + return this; + } + + + // clone reader + SegmentReader* clone = NULL; + bool success = false; + try { + clone = _CLNEW SegmentReader(); + clone->init(_directory, NULL, false); + clone->initialize(si, readBufferSize, false, true); + clone->cfsReader = cfsReader; + clone->storeCFSReader = storeCFSReader; + clone->_fieldInfos = _fieldInfos; + clone->tis = tis; + clone->freqStream = freqStream; + clone->proxStream = proxStream; + clone->termVectorsReaderOrig = termVectorsReaderOrig; + + // we have to open a new FieldsReader, because it is not thread-safe + // and can thus not be shared among multiple SegmentReaders + // TODO: Change this in case FieldsReader becomes thread-safe in the future + string fieldsSegment; + + Directory* storeDir = directory(); + + if (si->getDocStoreOffset() != -1) { + fieldsSegment = si->getDocStoreSegment(); + if (storeCFSReader != NULL) { + storeDir = storeCFSReader; + } + } else { + fieldsSegment = segment; + if (cfsReader != NULL) { + storeDir = cfsReader; + } + } + + if (fieldsReader != NULL) { + clone->fieldsReader = _CLNEW FieldsReader(storeDir, fieldsSegment.c_str(), _fieldInfos, readBufferSize, + si->getDocStoreOffset(), si->docCount); + } + + + if (!deletionsUpToDate) { + // load deleted docs + clone->deletedDocs = NULL; + clone->loadDeletedDocs(); + } else { + clone->deletedDocs = this->deletedDocs; + } + + if (!normsUpToDate) { + // load norms + for (size_t i = 0; i < fieldNormsChanged.length; i++) { + // copy unchanged norms to the cloned reader and incRef those norms + if (!fieldNormsChanged[i]) { + const TCHAR* curField = _fieldInfos->fieldInfo(i)->name; + Norm* norm = this->_norms.get(curField); + norm->incRef(); + norm->_this = clone; //give the norm to the clone + clone->_norms.put(curField, norm); + } + } + + clone->openNorms(si->getUseCompoundFile() ? cfsReader : directory(), readBufferSize); + } else { + NormsType::iterator it = _norms.begin(); + while (it != _norms.end()) { + const TCHAR* field = it->first; + Norm* norm = _norms[field]; + norm->incRef(); + norm->_this = clone; //give the norm to the clone + clone->_norms.put(field, norm); + it++; + } + } + + if (clone->singleNormStream == NULL) { + for (size_t i = 0; i < _fieldInfos->size(); i++) { + FieldInfo* fi = _fieldInfos->fieldInfo(i); + if (fi->isIndexed && !fi->omitNorms) { + Directory* d = si->getUseCompoundFile() ? cfsReader : directory(); + string fileName = si->getNormFileName(fi->number); + if (si->hasSeparateNorms(fi->number)) { + continue; + } + + string ext = string(".") + IndexFileNames::NORMS_EXTENSION; + if (fileName.compare(fileName.length()-ext.length(),ext.length(),ext)==0) { + clone->singleNormStream = d->openInput(fileName.c_str(), readBufferSize); + break; + } + } + } + } + + success = true; + } _CLFINALLY ( + if (!success) { + // An exception occured during reopen, we have to decRef the norms + // that we incRef'ed already and close singleNormsStream and FieldsReader + clone->decRefNorms(); + } + ) + + //disown this memory + this->freqStream = NULL; + this->_fieldInfos = NULL; + this->tis = NULL; + this->deletedDocs = NULL; + this->ones = NULL; + this->termVectorsReaderOrig = NULL; + this->cfsReader = NULL; + this->freqStream = NULL; + this->proxStream = NULL; + this->termVectorsReaderOrig = NULL; + this->cfsReader = NULL; + this->storeCFSReader = NULL; + _CLDELETE( this->singleNormStream ); + + return clone; + } + + + + /** Returns the field infos of this segment */ + FieldInfos* SegmentReader::fieldInfos() { + return _fieldInfos; + } + + /** + * Return the name of the segment this reader is reading. + */ + const char* SegmentReader::getSegmentName() { + return segment.c_str(); + } + + /** + * Return the SegmentInfo of the segment this reader is reading. + */ + SegmentInfo* SegmentReader::getSegmentInfo() { + return si; + } + + void SegmentReader::setSegmentInfo(SegmentInfo* info) { + si = info; + } + + void SegmentReader::startCommit() { + DirectoryIndexReader::startCommit(); + rollbackDeletedDocsDirty = deletedDocsDirty; + rollbackNormsDirty = normsDirty; + rollbackUndeleteAll = undeleteAll; + NormsType::iterator it = _norms.begin(); + while (it != _norms.end()) { + Norm* norm = it->second; + norm->rollbackDirty = norm->dirty; + } + } + + void SegmentReader::rollbackCommit() { + DirectoryIndexReader::rollbackCommit(); + deletedDocsDirty = rollbackDeletedDocsDirty; + normsDirty = rollbackNormsDirty; + undeleteAll = rollbackUndeleteAll; + NormsType::iterator it = _norms.begin(); + while (it != _norms.end()) { + Norm* norm = it->second; + norm->dirty = norm->rollbackDirty; + } + } + + const char* SegmentReader::getClassName(){ + return "SegmentReader"; + } + const char* SegmentReader::getObjectName() const{ + return getClassName(); + } + + bool SegmentReader::normsClosed() { + if (singleNormStream != NULL) { + return false; + } + NormsType::iterator it = _norms.begin(); + while ( it != _norms.end() ) { + Norm* norm = it->second; + if (norm->refCount > 0) { + return false; + } + } + return true; + } +CL_NS_END diff --git a/Pods/BRCLucene/src/core/CLucene/index/SegmentTermDocs.cpp b/Pods/BRCLucene/src/core/CLucene/index/SegmentTermDocs.cpp new file mode 100644 index 0000000..838a9b7 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/index/SegmentTermDocs.cpp @@ -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. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "_SegmentHeader.h" + +#include "CLucene/store/IndexInput.h" +#include "Term.h" +#include + +CL_NS_DEF(index) + + SegmentTermDocs::SegmentTermDocs(const SegmentReader* _parent) : parent(_parent),freqStream(_parent->freqStream->clone()), + count(0),df(0),deletedDocs(_parent->deletedDocs),_doc(0),_freq(0),skipInterval(_parent->tis->getSkipInterval()), + maxSkipLevels(_parent->tis->getMaxSkipLevels()),skipListReader(NULL),freqBasePointer(0),proxBasePointer(0), + skipPointer(0),haveSkipped(false) + { + CND_CONDITION(_parent != NULL,"Parent is NULL"); + } + + SegmentTermDocs::~SegmentTermDocs() { + close(); + } + + TermPositions* SegmentTermDocs::__asTermPositions(){ + return NULL; + } + + void SegmentTermDocs::seek(Term* term) { + TermInfo* ti = parent->tis->get(term); + seek(ti, term); + _CLDELETE(ti); + } + + void SegmentTermDocs::seek(TermEnum* termEnum){ + TermInfo* ti=NULL; + Term* term = NULL; + + // use comparison of fieldinfos to verify that termEnum belongs to the same segment as this SegmentTermDocs + if ( termEnum->getObjectName() == SegmentTermEnum::getClassName() && + ((SegmentTermEnum*)termEnum)->fieldInfos == parent->_fieldInfos ){ + SegmentTermEnum* segmentTermEnum = (SegmentTermEnum*) termEnum; + term = segmentTermEnum->term(false); + ti = segmentTermEnum->getTermInfo(); + }else{ + term = termEnum->term(false); + ti = parent->tis->get(term); + } + + seek(ti,term); + _CLDELETE(ti); + } + void SegmentTermDocs::seek(const TermInfo* ti,Term* term) { + count = 0; + FieldInfo* fi = parent->_fieldInfos->fieldInfo(term->field()); + currentFieldStoresPayloads = (fi != NULL) ? fi->storePayloads : false; + if (ti == NULL) { + df = 0; + } else { // punt case + df = ti->docFreq; + _doc = 0; + freqBasePointer = ti->freqPointer; + proxBasePointer = ti->proxPointer; + skipPointer = freqBasePointer + ti->skipOffset; + freqStream->seek(freqBasePointer); + haveSkipped = false; + } + } + + void SegmentTermDocs::close() { + _CLDELETE( freqStream ); + _CLDELETE( skipListReader ); + } + + 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) || (_doc >= 0 && 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 (ireadVInt(); + _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 || (_doc >= 0 && !deletedDocs->get(_doc))) { + docs[i] = _doc; + freqs[i] = _freq; + i++; + } + } + return i; + } + + bool SegmentTermDocs::skipTo(const int32_t target){ + assert(count <= df ); + + if (df >= skipInterval) { // optimized case + if (skipListReader == NULL) + skipListReader = _CLNEW DefaultSkipListReader(freqStream->clone(), maxSkipLevels, skipInterval); // lazily clone + + if (!haveSkipped) { // lazily initialize skip stream + skipListReader->init(skipPointer, freqBasePointer, proxBasePointer, df, currentFieldStoresPayloads); + haveSkipped = true; + } + + int32_t newCount = skipListReader->skipTo(target); + if (newCount > count) { + freqStream->seek(skipListReader->getFreqPointer()); + skipProx(skipListReader->getProxPointer(), skipListReader->getPayloadLength()); + + _doc = skipListReader->getDoc(); + count = newCount; + } + } + + // done skipping, now just scan + do { + if (!next()) + return false; + } while (target > _doc); + return true; + } + + +CL_NS_END diff --git a/Pods/BRCLucene/src/core/CLucene/index/SegmentTermEnum.cpp b/Pods/BRCLucene/src/core/CLucene/index/SegmentTermEnum.cpp new file mode 100644 index 0000000..17191f6 --- /dev/null +++ b/Pods/BRCLucene/src/core/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/_ApiHeader.h" +#include "_SegmentHeader.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; + maxSkipLevels = 1; + + //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_CorruptIndex,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(); + if ( format == -3 ) { + // this new format introduces multi-level skipping + maxSkipLevels = 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; + maxSkipLevels = clone.maxSkipLevels; + + //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 + if ( buffer != NULL ) 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); + } + } + + const char* SegmentTermEnum::getObjectName() const{ return getClassName(); } + const char* SegmentTermEnum::getClassName(){ return "SegmentTermEnum"; } + + 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 ){ + if ( _LUCENE_ATOMIC_INT_GET(prev->__cl_refcount) > 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(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 || _LUCENE_ATOMIC_INT_GET(_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(bufferLength) < totalLength+1) + growBuffer(totalLength, false); //dont copy the buffer over. + + //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 < 8 ) + bufferLength = length+8; + 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/Pods/BRCLucene/src/core/CLucene/index/SegmentTermPositions.cpp b/Pods/BRCLucene/src/core/CLucene/index/SegmentTermPositions.cpp new file mode 100644 index 0000000..e439a1c --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/index/SegmentTermPositions.cpp @@ -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. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "_SegmentHeader.h" + +#include "Terms.h" + +CL_NS_USE(util) +CL_NS_DEF(index) + +SegmentTermPositions::SegmentTermPositions(const SegmentReader* _parent): + SegmentTermDocs(_parent), proxStream(NULL)// the proxStream will be cloned lazily when nextPosition() is called for the first time + ,lazySkipPointer(-1), lazySkipProxCount(0) +{ + CND_CONDITION(_parent != NULL, "Parent is NULL"); +} + +SegmentTermPositions::~SegmentTermPositions() { + close(); +} + +TermDocs* SegmentTermPositions::__asTermDocs(){ + return (TermDocs*) this; +} +TermPositions* SegmentTermPositions::__asTermPositions(){ + return (TermPositions*) this; +} + +void SegmentTermPositions::seek(const TermInfo* ti, Term* term) { + SegmentTermDocs::seek(ti, term); + if (ti != NULL) + lazySkipPointer = ti->proxPointer; + + lazySkipProxCount = 0; + proxCount = 0; + payloadLength = 0; + needToLoadPayload = false; +} + +void SegmentTermPositions::close() { + SegmentTermDocs::close(); + //Check if proxStream still exists + if(proxStream){ + proxStream->close(); + _CLDELETE( proxStream ); + } +} + +int32_t SegmentTermPositions::nextPosition() { + // perform lazy skips if neccessary + lazySkip(); + proxCount--; + return position += readDeltaPosition(); +} + +int32_t SegmentTermPositions::readDeltaPosition() { + int32_t delta = proxStream->readVInt(); + if (currentFieldStoresPayloads) { + // if the current field stores payloads then + // the position delta is shifted one bit to the left. + // if the LSB is set, then we have to read the current + // payload length + if ((delta & 1) != 0) { + payloadLength = proxStream->readVInt(); + } + delta = (int32_t)((uint32_t)delta >> (uint32_t)1); + needToLoadPayload = true; + } + return delta; +} + +void SegmentTermPositions::skippingDoc() { + lazySkipProxCount += _freq; +} + +bool SegmentTermPositions::next() { + // we remember to skip the remaining positions of the current + // document lazily + lazySkipProxCount += proxCount; + + 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_UnsupportedOperation,"TermPositions does not support processing multiple documents in one call. Use TermDocs instead."); +} + +void SegmentTermPositions::skipProx(const int64_t proxPointer, const int32_t _payloadLength){ + // we save the pointer, we might have to skip there lazily + lazySkipPointer = proxPointer; + lazySkipProxCount = 0; + proxCount = 0; + this->payloadLength = _payloadLength; + needToLoadPayload = false; +} + +void SegmentTermPositions::skipPositions(const int32_t n) { + for ( int32_t f = n; f > 0; f-- ) { // skip unread positions + readDeltaPosition(); + skipPayload(); + } +} + +void SegmentTermPositions::skipPayload() { + if (needToLoadPayload && payloadLength > 0) { + proxStream->seek(proxStream->getFilePointer() + payloadLength); + } + needToLoadPayload = false; +} + +void SegmentTermPositions::lazySkip() { + if (proxStream == NULL) { + // clone lazily + proxStream = parent->proxStream->clone(); + } + + // we might have to skip the current payload + // if it was not read yet + skipPayload(); + + if (lazySkipPointer != -1) { + proxStream->seek(lazySkipPointer); + lazySkipPointer = -1; + } + + if (lazySkipProxCount != 0) { + skipPositions(lazySkipProxCount); + lazySkipProxCount = 0; + } +} + +int32_t SegmentTermPositions::getPayloadLength() const { return payloadLength; } + +uint8_t* SegmentTermPositions::getPayload(uint8_t* data) { + if (!needToLoadPayload) { + _CLTHROWA(CL_ERR_IO, "Payload cannot be loaded more than once for the same term position."); + } + + // read payloads lazily + uint8_t* retArray; + // TODO: Complete length logic ( possibly using ValueArray ? ) + if (data == NULL /*|| data.length - offset < payloadLength*/) { + // the array is too small to store the payload data, + // so we allocate a new one + _CLDELETE_ARRAY(data); + retArray = _CL_NEWARRAY(uint8_t, payloadLength); + } else { + retArray = data; + } + proxStream->readBytes(retArray, payloadLength); + needToLoadPayload = false; + return retArray; +} +bool SegmentTermPositions::isPayloadAvailable() const { return needToLoadPayload && (payloadLength > 0); } + +CL_NS_END diff --git a/Pods/BRCLucene/src/core/CLucene/index/SegmentTermVector.cpp b/Pods/BRCLucene/src/core/CLucene/index/SegmentTermVector.cpp new file mode 100644 index 0000000..049cb6c --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/index/SegmentTermVector.cpp @@ -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. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "_FieldInfos.h" +#include "_TermVector.h" +#include "CLucene/util/StringBuffer.h" +#include "CLucene/util/Array.h" + +CL_NS_USE(util) +CL_NS_DEF(index) + +ValueArray SegmentTermPositionVector::EMPTY_TERM_POS; + +SegmentTermVector::SegmentTermVector(const TCHAR* _field, + ArrayBase* _terms, ArrayBase* _termFreqs) { + this->field = STRDUP_TtoT(_field); // TODO: Try and avoid this dup (using intern'ing perhaps?) + this->terms = _terms; + this->termFreqs = _termFreqs; +} + +SegmentTermVector::~SegmentTermVector(){ + _CLDELETE_LCARRAY(field); + _CLDELETE(terms); + _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->values[i] != NULL ){ + if (i>0) + sb.append(_T(", ")); + sb.append(terms->values[i]); + sb.appendChar('/'); + + sb.appendInt((*termFreqs)[i]); + } + sb.appendChar('}'); + return sb.toString(); +} + +int32_t SegmentTermVector::size() { + if ( terms == NULL ) + return 0; + + return terms->length; +} + +const CL_NS(util)::ArrayBase* SegmentTermVector::getTerms() { + return (CL_NS(util)::ArrayBase*)terms; +} + +const ArrayBase* SegmentTermVector::getTermFrequencies() { + return termFreqs; +} + +int32_t SegmentTermVector::binarySearch(const ArrayBase& a, const TCHAR* key) const +{ + int32_t low = 0; + int32_t hi = a.length - 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, termText); + return res >= 0 ? res : -1; +} + +ArrayBase* SegmentTermVector::indexesOf(const CL_NS(util)::ArrayBase& termNumbers, const int32_t start, const int32_t len) { + // 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. + ArrayBase* ret = _CLNEW ValueArray(len); + for (int32_t i=0; ivalues[i] = indexOf(termNumbers[start+ i]); + } + return ret; +} + + +SegmentTermPositionVector::SegmentTermPositionVector(const TCHAR* field, + ArrayBase* terms, ArrayBase* termFreqs, + ArrayBase< ArrayBase* >* _positions, + ArrayBase< ArrayBase* >* _offsets) + : SegmentTermVector(field,terms,termFreqs), + positions(_positions), + offsets(_offsets) +{ +} +SegmentTermPositionVector::~SegmentTermPositionVector(){ + _CLLDELETE(offsets); + _CLLDELETE(positions); +} + +ArrayBase* SegmentTermPositionVector::indexesOf(const ArrayBase& termNumbers, const int32_t start, const int32_t len) +{ + return SegmentTermVector::indexesOf(termNumbers, start, len); +} + +TermPositionVector* SegmentTermPositionVector::__asTermPositionVector(){ + return this; +} + +const ArrayBase* SegmentTermPositionVector::getOffsets(const size_t index) { + if(offsets == NULL) + return NULL; + if (index < offsets->length) + return offsets->values[index]; + else + return TermVectorOffsetInfo_EMPTY_OFFSET_INFO; +} + +const ArrayBase* SegmentTermPositionVector::getTermPositions(const size_t index) { + if(positions == NULL) + return NULL; + + if (index < positions->length) + return positions->values[index]; + else + return &EMPTY_TERM_POS; +} + +CL_NS_END + diff --git a/Pods/BRCLucene/src/core/CLucene/index/SkipListReader.cpp b/Pods/BRCLucene/src/core/CLucene/index/SkipListReader.cpp new file mode 100644 index 0000000..6360c18 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/index/SkipListReader.cpp @@ -0,0 +1,325 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "_SkipListReader.h" + +CL_NS_USE(store) +CL_NS_DEF(index) + +MultiLevelSkipListReader::MultiLevelSkipListReader(IndexInput* _skipStream, const int32_t maxSkipLevels, + const int32_t _skipInterval): + maxNumberOfSkipLevels(maxSkipLevels),numberOfLevelsToBuffer(1), + skipStream(CL_NS(util)::ObjectArray(maxSkipLevels)), + skipPointer(_CL_NEWARRAY(int64_t,maxSkipLevels)), + skipInterval(_CL_NEWARRAY(int32_t,maxSkipLevels)), + numSkipped(_CL_NEWARRAY(int32_t,maxSkipLevels)), + skipDoc(_CL_NEWARRAY(int32_t,maxSkipLevels)), + childPointer(_CL_NEWARRAY(int64_t,maxSkipLevels)) +{ + memset(this->skipPointer,0,sizeof(int64_t) * maxSkipLevels); + memset(this->skipInterval,0,sizeof(int32_t) * maxSkipLevels); + memset(this->numSkipped,0,sizeof(int32_t) * maxSkipLevels); + memset(this->skipDoc,0,sizeof(int32_t) * maxSkipLevels); + memset(this->childPointer,0,sizeof(int32_t) * maxSkipLevels); + + this->numberOfLevelsToBuffer = 0; + this->numberOfSkipLevels = 0; + this->docCount = 0; + this->lastDoc = 0; + this->lastChildPointer = 0; + this->haveSkipped = false; + this->skipStream[0] = _skipStream; + this->inputIsBuffered = _skipStream->instanceOf(BufferedIndexInput::getClassName()); + this->skipInterval[0] = _skipInterval; + for (int32_t i = 1; i < maxSkipLevels; i++) { + // cache skip intervals + this->skipInterval[i] = this->skipInterval[i - 1] * _skipInterval; + } +} +MultiLevelSkipListReader::~MultiLevelSkipListReader(){ + close(); + _CLDELETE_LARRAY(skipPointer); + _CLDELETE_LARRAY(childPointer); + _CLDELETE_LARRAY(numSkipped); + _CLDELETE_LARRAY(skipInterval); + _CLDELETE_LARRAY(skipDoc); +} + +int32_t MultiLevelSkipListReader::getDoc() const { + return lastDoc; +} + +int32_t MultiLevelSkipListReader::skipTo(const int32_t target) { + if (!haveSkipped) { + // first time, load skip levels + loadSkipLevels(); + haveSkipped = true; + } + + // walk up the levels until highest level is found that has a skip + // for this target + int32_t level = 0; + while (level < numberOfSkipLevels - 1 && target > skipDoc[level + 1]) { + level++; + } + + while (level >= 0) { + if (target > skipDoc[level]) { + if (!loadNextSkip(level)) { + continue; + } + } else { + // no more skips on this level, go down one level + if (level > 0 && lastChildPointer > skipStream[level - 1]->getFilePointer()) { + seekChild(level - 1); + } + level--; + } + } + + return numSkipped[0] - skipInterval[0] - 1; +} + +bool MultiLevelSkipListReader::loadNextSkip(const int32_t level) { + // we have to skip, the target document is greater than the current + // skip list entry + setLastSkipData(level); + + numSkipped[level] += skipInterval[level]; + + if (numSkipped[level] > docCount) { + // this skip list is exhausted + skipDoc[level] = LUCENE_INT32_MAX_SHOULDBE; + if (numberOfSkipLevels > level) numberOfSkipLevels = level; + return false; + } + + // read next skip entry + skipDoc[level] += readSkipData(level, skipStream[level]); + + if (level != 0) { + // read the child pointer if we are not on the leaf level + childPointer[level] = skipStream[level]->readVLong() + skipPointer[level - 1]; + } + return true; +} + +void MultiLevelSkipListReader::seekChild(const int32_t level) { + skipStream[level]->seek(lastChildPointer); + numSkipped[level] = numSkipped[level + 1] - skipInterval[level + 1]; + skipDoc[level] = lastDoc; + if (level > 0) { + childPointer[level] = skipStream[level]->readVLong() + skipPointer[level - 1]; + } +} + +void MultiLevelSkipListReader::close() { + for (int32_t i = 1; i < maxNumberOfSkipLevels; i++) { + if (skipStream[i] != NULL) { + //skipStream[i]->close(); + _CLDELETE(skipStream[i]); // ISH: We actually do need to nullify pointer here + } + } +} + +void MultiLevelSkipListReader::init(const int64_t _skipPointer, const int32_t df) { + this->skipPointer[0] = _skipPointer; + this->docCount = df; + memset(skipDoc,0,sizeof(int32_t) * maxNumberOfSkipLevels); + memset(numSkipped,0,sizeof(int32_t) * maxNumberOfSkipLevels); + memset(childPointer,0,sizeof(int64_t) * maxNumberOfSkipLevels); + if ( numberOfSkipLevels > 1 ) + { + for (int i=1;i maxNumberOfSkipLevels) { + numberOfSkipLevels = maxNumberOfSkipLevels; + } + + skipStream[0]->seek(skipPointer[0]); + + int32_t toBuffer = numberOfLevelsToBuffer; + + for (int32_t i = numberOfSkipLevels - 1; i > 0; i--) { + // the length of the current level + int64_t length = skipStream[0]->readVLong(); + + // the start pointer of the current level + skipPointer[i] = skipStream[0]->getFilePointer(); + if (toBuffer > 0) { + // buffer this level + skipStream[i] = _CLNEW SkipBuffer(skipStream[0], (int32_t) length); + toBuffer--; + } else { + // clone this stream, it is already at the start of the current level + skipStream[i] = skipStream[0]->clone(); + if (inputIsBuffered && length < BufferedIndexInput::BUFFER_SIZE) { + ((BufferedIndexInput*) skipStream[i])->setBufferSize((int32_t) length); + } + + // move base stream beyond the current level + skipStream[0]->seek(skipStream[0]->getFilePointer() + length); + } + } + + // use base stream for the lowest level + skipPointer[0] = skipStream[0]->getFilePointer(); +} + +void MultiLevelSkipListReader::setLastSkipData(const int32_t level) { + lastDoc = skipDoc[level]; + lastChildPointer = childPointer[level]; +} + +MultiLevelSkipListReader::SkipBuffer::SkipBuffer(IndexInput* input, const int32_t _length):pos(0) +{ + data = _CL_NEWARRAY(uint8_t,_length); + this->_datalength = _length; + pointer = input->getFilePointer(); + input->readBytes(data, _length); +} +MultiLevelSkipListReader::SkipBuffer::~SkipBuffer() +{ + _CLLDELETE(data); +} + +void MultiLevelSkipListReader::SkipBuffer::close() { + _CLDELETE(data); + _datalength=0; +} + +int64_t MultiLevelSkipListReader::SkipBuffer::getFilePointer() const { + return pointer + pos; +} + +int64_t MultiLevelSkipListReader::SkipBuffer::length() const { + return _datalength; +} + +uint8_t MultiLevelSkipListReader::SkipBuffer::readByte() { + return data[pos++]; +} + +void MultiLevelSkipListReader::SkipBuffer::readBytes(uint8_t* b, const int32_t len) { + memcpy(b,data+pos,len*sizeof(uint8_t)); + pos += len; +} + +void MultiLevelSkipListReader::SkipBuffer::seek(const int64_t _pos) { + this->pos = static_cast(_pos - pointer); +} + +const char* MultiLevelSkipListReader::SkipBuffer::getObjectName() const{ return getClassName(); } +const char* MultiLevelSkipListReader::SkipBuffer::getClassName(){ return "MultiLevelSkipListReader::SkipBuffer"; } + +const char* MultiLevelSkipListReader::SkipBuffer::getDirectoryType() const{ return "SKIP"; } +MultiLevelSkipListReader::SkipBuffer::SkipBuffer(const SkipBuffer& other): + IndexInput(other) +{ + data = _CL_NEWARRAY(uint8_t,other._datalength); + memcpy(data,other.data,other._datalength * sizeof(uint8_t)); + this->_datalength = other._datalength; + this->pointer = other.pointer; + this->pos = other.pos; +} +IndexInput* MultiLevelSkipListReader::SkipBuffer::clone() const{ + return _CLNEW SkipBuffer(*this); +} + + + + + + + +DefaultSkipListReader::DefaultSkipListReader(CL_NS(store)::IndexInput* _skipStream, const int32_t maxSkipLevels, const int32_t _skipInterval) + : MultiLevelSkipListReader(_skipStream, maxSkipLevels, _skipInterval) +{ + freqPointer = _CL_NEWARRAY(int64_t,maxSkipLevels); + proxPointer = _CL_NEWARRAY(int64_t,maxSkipLevels); + payloadLength = _CL_NEWARRAY(int32_t,maxSkipLevels); + memset(freqPointer,0, sizeof(int64_t) * maxSkipLevels); + memset(proxPointer,0, sizeof(int64_t) * maxSkipLevels); + memset(payloadLength,0, sizeof(int32_t) * maxSkipLevels); + this->lastFreqPointer = 0; + this->lastProxPointer = 0; + this->lastPayloadLength = 0; + this->currentFieldStoresPayloads = false; +} + +DefaultSkipListReader::~DefaultSkipListReader(){ + _CLDELETE_LARRAY(freqPointer); + _CLDELETE_LARRAY(proxPointer); + _CLDELETE_LARRAY(payloadLength); +} + +void DefaultSkipListReader::init(const int64_t _skipPointer, const int64_t freqBasePointer, const int64_t proxBasePointer, const int32_t df, const bool storesPayloads) { + MultiLevelSkipListReader::init(_skipPointer, df); + this->currentFieldStoresPayloads = storesPayloads; + lastFreqPointer = freqBasePointer; + lastProxPointer = proxBasePointer; + + for (int32_t j=0; jreadVInt(); + if ((delta & 1) != 0) { + payloadLength[level] = _skipStream->readVInt(); + } + delta = (int32_t)(((uint32_t)delta) >> (uint32_t)1); + } else { + delta = _skipStream->readVInt(); + } + freqPointer[level] += _skipStream->readVInt(); + proxPointer[level] += _skipStream->readVInt(); + + return delta; +} + +CL_NS_END diff --git a/Pods/BRCLucene/src/core/CLucene/index/SkipListWriter.cpp b/Pods/BRCLucene/src/core/CLucene/index/SkipListWriter.cpp new file mode 100644 index 0000000..e0d2f9a --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/index/SkipListWriter.cpp @@ -0,0 +1,176 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "_SkipListWriter.h" +#include "CLucene/util/_Arrays.h" + +CL_NS_USE(store) +CL_NS_USE(util) +CL_NS_DEF(index) + +void MultiLevelSkipListWriter::bufferSkip(int32_t df){ + int32_t numLevels; + + // determine max level + for (numLevels = 0; (df % skipInterval) == 0 && numLevels < numberOfSkipLevels; df /= skipInterval) { + numLevels++; + } + + int64_t childPointer = 0; + + for (int32_t level = 0; level < numLevels; level++) { + writeSkipData(level, (*skipBuffer)[level]); + + int64_t newChildPointer = (*skipBuffer)[level]->getFilePointer(); + + if (level != 0) { + // store child pointers for all levels except the lowest + (*skipBuffer)[level]->writeVLong(childPointer); + } + + //remember the childPointer for the next level + childPointer = newChildPointer; + } +} + +int64_t MultiLevelSkipListWriter::writeSkip(IndexOutput* output){ + int64_t skipPointer = output->getFilePointer(); + if (skipBuffer == NULL || skipBuffer->length == 0) return skipPointer; + + for (int32_t level = numberOfSkipLevels - 1; level > 0; level--) { + int64_t length = (*skipBuffer)[level]->getFilePointer(); + if (length > 0) { + output->writeVLong(length); + (*skipBuffer)[level]->writeTo(output); + } + } + (*skipBuffer)[0]->writeTo(output); + + return skipPointer; +} + +MultiLevelSkipListWriter::MultiLevelSkipListWriter(int32_t skipInterval, int32_t maxSkipLevels, int32_t df) { + this->skipBuffer = NULL; + this->skipInterval = skipInterval; + + // calculate the maximum number of skip levels for this document frequency + numberOfSkipLevels = df == 0 ? 0 : (int32_t) floor(log((float_t)df) / log((float_t)skipInterval)); + + // make sure it does not exceed maxSkipLevels + if (numberOfSkipLevels > maxSkipLevels) { + numberOfSkipLevels = maxSkipLevels; + } +} +MultiLevelSkipListWriter::~MultiLevelSkipListWriter(){ + _CLDELETE(skipBuffer); +} + +void MultiLevelSkipListWriter::init() { + skipBuffer = _CLNEW CL_NS(util)::ObjectArray(numberOfSkipLevels); + for (int32_t i = 0; i < numberOfSkipLevels; i++) { + skipBuffer->values[i] = _CLNEW RAMOutputStream; + } +} + +void MultiLevelSkipListWriter::resetSkip() { + // creates new buffers or empties the existing ones + if (skipBuffer == NULL) { + init(); + } else { + for (size_t i = 0; i < skipBuffer->length; i++) { + (*skipBuffer)[i]->reset(); + } + } +} + + + + +void DefaultSkipListWriter::setSkipData(int32_t doc, bool storePayloads, int32_t payloadLength) { + this->curDoc = doc; + this->curStorePayloads = storePayloads; + this->curPayloadLength = payloadLength; + this->curFreqPointer = freqOutput->getFilePointer(); + this->curProxPointer = proxOutput->getFilePointer(); +} + +void DefaultSkipListWriter::resetSkip() { + MultiLevelSkipListWriter::resetSkip(); + memset(lastSkipDoc, 0, numberOfSkipLevels * sizeof(int32_t) ); + Arrays::fill(lastSkipPayloadLength, numberOfSkipLevels, -1); // we don't have to write the first length in the skip list + Arrays::fill(lastSkipFreqPointer, numberOfSkipLevels, freqOutput->getFilePointer()); + Arrays::fill(lastSkipProxPointer, numberOfSkipLevels, proxOutput->getFilePointer()); +} + +void DefaultSkipListWriter::writeSkipData(int32_t level, IndexOutput* skipBuffer){ + // To efficiently store payloads in the posting lists we do not store the length of + // every payload. Instead we omit the length for a payload if the previous payload had + // the same length. + // However, in order to support skipping the payload length at every skip point must be known. + // So we use the same length encoding that we use for the posting lists for the skip data as well: + // Case 1: current field does not store payloads + // SkipDatum --> DocSkip, FreqSkip, ProxSkip + // DocSkip,FreqSkip,ProxSkip --> VInt + // DocSkip records the document number before every SkipInterval th document in TermFreqs. + // Document numbers are represented as differences from the previous value in the sequence. + // Case 2: current field stores payloads + // SkipDatum --> DocSkip, PayloadLength?, FreqSkip,ProxSkip + // DocSkip,FreqSkip,ProxSkip --> VInt + // PayloadLength --> VInt + // In this case DocSkip/2 is the difference between + // the current and the previous value. If DocSkip + // is odd, then a PayloadLength encoded as VInt follows, + // if DocSkip is even, then it is assumed that the + // current payload length equals the length at the previous + // skip point + if (curStorePayloads) { + int32_t delta = curDoc - lastSkipDoc[level]; + if (curPayloadLength == lastSkipPayloadLength[level]) { + // the current payload length equals the length at the previous skip point, + // so we don't store the length again + skipBuffer->writeVInt(delta * 2); + } else { + // the payload length is different from the previous one. We shift the DocSkip, + // set the lowest bit and store the current payload length as VInt. + skipBuffer->writeVInt(delta * 2 + 1); + skipBuffer->writeVInt(curPayloadLength); + lastSkipPayloadLength[level] = curPayloadLength; + } + } else { + // current field does not store payloads + skipBuffer->writeVInt(curDoc - lastSkipDoc[level]); + } + skipBuffer->writeVInt((int32_t) (curFreqPointer - lastSkipFreqPointer[level])); + skipBuffer->writeVInt((int32_t) (curProxPointer - lastSkipProxPointer[level])); + + lastSkipDoc[level] = curDoc; + //System.out.println("write doc at level " + level + ": " + curDoc); + + lastSkipFreqPointer[level] = curFreqPointer; + lastSkipProxPointer[level] = curProxPointer; +} + +DefaultSkipListWriter::DefaultSkipListWriter(int32_t skipInterval, int32_t numberOfSkipLevels, int32_t docCount, IndexOutput* freqOutput, IndexOutput* proxOutput): + MultiLevelSkipListWriter(skipInterval, numberOfSkipLevels, docCount) +{ + this->freqOutput = freqOutput; + this->proxOutput = proxOutput; + this->curDoc = this->curPayloadLength = 0; + this->curFreqPointer =this->curProxPointer = 0; + + lastSkipDoc = _CL_NEWARRAY(int32_t,numberOfSkipLevels); + lastSkipPayloadLength = _CL_NEWARRAY(int32_t,numberOfSkipLevels); + lastSkipFreqPointer = _CL_NEWARRAY(int64_t,numberOfSkipLevels); + lastSkipProxPointer = _CL_NEWARRAY(int64_t,numberOfSkipLevels); +} +DefaultSkipListWriter::~DefaultSkipListWriter(){ + _CLDELETE_ARRAY(lastSkipDoc); + _CLDELETE_ARRAY(lastSkipPayloadLength); + _CLDELETE_ARRAY(lastSkipFreqPointer); + _CLDELETE_ARRAY(lastSkipProxPointer); +} +CL_NS_END diff --git a/Pods/BRCLucene/src/core/CLucene/index/Term.cpp b/Pods/BRCLucene/src/core/CLucene/index/Term.cpp new file mode 100644 index 0000000..70c7924 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/index/Term.cpp @@ -0,0 +1,260 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "Term.h" +#include "CLucene/util/_StringIntern.h" +#include "CLucene/util/Misc.h" + +CL_NS_USE(util) +CL_NS_DEF(index) + +Term::Term(){ + //Intern fld and assign it to field + _field = LUCENE_BLANK_STRING; + internF = false; + cachedHashCode = 0; + textLen = 0; + + //Duplicate txt and assign it to text + #ifdef LUCENE_TERM_TEXT_LENGTH + _text[0]=0; + #else + _text = STRDUP_TtoT(LUCENE_BLANK_STRING); + textLenBuf = 0; + #endif + textLen = 0; +} + +Term::Term(const TCHAR* fld, const TCHAR* txt, bool internField){ +//Func - 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. +//Pre - fld != NULL and contains the name of the field +// txt != NULL and contains the value of the field +// internF is true or false and indicates if term Field is interned or not +// internT is true or false and indicates if term Text is interned or not +// canDelete defaults to true but can be false and indicates to the IGarbageCollector that the Term can be deleted when finalized +//Post - An instance of Term has been created.Field and txt have not been copied but assigned + + _field = LUCENE_BLANK_STRING; + internF = false; + textLen = 0; + #ifdef LUCENE_TERM_TEXT_LENGTH + _text[0]=0; + #else + _text = STRDUP_TtoT(LUCENE_BLANK_STRING); + textLenBuf = 0; + #endif + + set(fld,txt,internField); +} + + +Term::Term(const Term* fieldTerm, const TCHAR* txt){ + _field = LUCENE_BLANK_STRING; + internF = false; + textLen = 0; + #ifdef LUCENE_TERM_TEXT_LENGTH + _text[0]=0; + #else + _text = STRDUP_TtoT(LUCENE_BLANK_STRING); + textLenBuf = 0; + #endif + + set(fieldTerm,txt); +} + +Term::Term(const TCHAR* fld, const TCHAR* txt){ + _field = LUCENE_BLANK_STRING; + internF = false; + textLen = 0; + #ifdef LUCENE_TERM_TEXT_LENGTH + _text[0]=0; + #else + _text = STRDUP_TtoT(LUCENE_BLANK_STRING); + textLenBuf = 0; + #endif + + set(fld,txt); +} + +Term::~Term(){ +//Func - Destructor. +//Pre - true +//Post - The instance has been destroyed. field and text have been deleted if pre(intrn) is false + + //Unintern field + if ( internF ) + CLStringIntern::unintern(_field); + _field = NULL; + +#ifndef LUCENE_TERM_TEXT_LENGTH + //Deletetext if it is the owner + _CLDELETE_CARRAY( _text ); +#endif +} + +const TCHAR* Term::field() const { +//Func - Returns the field of this term, an interned string. The field indicates +// the part of a document which this term came from. +//Pre - true +//Post - field has been returned + + return _field; +} + +const TCHAR* Term::text() const { +//Func - 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. +//Pre - true +//Post - text has been returned + + 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,const bool internField){ +//Func - Resets the field and text of a Term. +//Pre - fld != NULL and contains the name of the field +// txt != NULL and contains the value of the field +// internF is true or false +// internT is true or false +//Post - field and text of Term have been reset + + CND_PRECONDITION(fld != NULL, "fld contains NULL"); + CND_PRECONDITION(txt != NULL, "txt contains NULL"); + + //save field for unintern later + const TCHAR* oldField = _field; + //bool oldInternF = internF; //Not used + 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){ + _CLDELETE_ARRAY( _text ); + textLenBuf = 0; + } + + if ( _text==NULL ){ + //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); + 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"); +} + +/** Compares two terms, returning true iff they have the same + field and text. */ +bool Term::equals(const Term* other) const{ + if (other == this) + return true; + if (other == NULL) + return false; + + if ( cachedHashCode != 0 && other->cachedHashCode != 0 && other->cachedHashCode != cachedHashCode ) + return false; + + if ( _field==other->_field ){ + //this can be quicker than using compareTo, because checks + //field length first + if ( textLen == other->textLen ){ + return (_tcscmp(_text,other->_text)==0); + }else + return false; + }else + return false; +} + +size_t Term::hashCode(){ + if ( cachedHashCode == 0 ) + cachedHashCode = Misc::thashCode(_field) + Misc::thashCode(_text,textLen); + return cachedHashCode; +} + +size_t Term::textLength() const { return textLen; } + +int32_t Term::compareTo(const Term* other) const { +//Func - Compares two terms, to see if this term belongs before,is equal to or after +// after the argument term. +//Pre - other is a reference to another term +//Post - A negative integer is returned if this term belongs before the argument, +// zero is returned if this term is equal to the argument, and a positive integer +// if this term belongs after the argument. + + //Check ret to see if text needs to be compared + if ( _field == other->_field ){ // fields are interned + //Compare text with text of other and return the result + return _tcscmp(_text,other->_text); + }else{ + int32_t ret = _tcscmp(_field,other->_field); + if ( ret == 0 ){ + return _tcscmp(_text,other->_text); + }else{ + return ret; + } + } +} + +int32_t Term::hashedCompareTo(Term* other) { + size_t hc1 = this->hashCode(); + size_t hc2 = other->hashCode(); + + if ( hc1 == hc2 ) + return compareTo(other); + else if ( hc1 > hc2 ) + return -1; + else + return 1; +} + +TCHAR* Term::toString() const{ +//Func - Forms the contents of Field and term in some kind of tuple notation +// +//Pre - true +//Post - a string formatted as is returned if pre(field) is NULL and +// text is NULL the returned string will be formatted as <:> + + // Note: Should this representation ever change, make sure to update Query and Filter classes + // that may be using this format without calling toString (to save on memory allocations) + // For example: PrefixFilter::toString() + + return CL_NS(util)::Misc::join( _field, _T(":"), _text); +} + +CL_NS_END diff --git a/Pods/BRCLucene/src/core/CLucene/index/Term.h b/Pods/BRCLucene/src/core/CLucene/index/Term.h new file mode 100644 index 0000000..7a7ef1c --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/index/Term.h @@ -0,0 +1,137 @@ +/*------------------------------------------------------------------------------ +* 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_Term_ +#define _lucene_index_Term_ + +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 CLUCENE_EXPORT Term:LUCENE_REFBASE { +private: + size_t cachedHashCode; + const TCHAR* _field; + //CLStringIntern::iterator fielditr; +#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 + //bool dupT; //Indicates if Term Text is duplicated (and therefore must be deleted). +#endif + size_t textLen; //a cache of text len, this allows for a preliminary comparison of text lengths + bool internF; //Indicates if Term Field is interned(and therefore must be uninternd). +public: + + //uses the specified fieldTerm's field. this saves on intern'ing time. + /** Constructs a Term with the given field and text. + *

Note that a null field or null text value results in undefined + * behavior for most Lucene APIs that accept a Term parameter. + */ + Term(const Term* fieldTerm, const TCHAR* txt); + + /** Constructs a blank term */ + Term(); + + /** Constructs a Term with the given field and text. + *

Note that a null field or null text value results in undefined + * behavior for most Lucene APIs that accept a Term parameter. + */ + 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. + *

Note that a null field or null text value results in undefined + * behavior for most Lucene APIs that accept a Term parameter. + */ + 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; /// + TCHAR* toString() const; + + size_t hashCode(); +}; + +class Term_UnorderedCompare:LUCENE_BASE, public CL_NS(util)::Compare::_base // +{ +public: + bool operator()( Term* t1, Term* t2 ) const{ + return ( t1->hashedCompareTo(t2) < 0 ); + } + size_t operator()( Term* t ) const{ + return t->hashCode(); + } +}; + +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/index/TermInfo.cpp b/Pods/BRCLucene/src/core/CLucene/index/TermInfo.cpp new file mode 100644 index 0000000..4eea2f6 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/index/TermInfo.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/_ApiHeader.h" +#include "_TermInfo.h" + + +CL_NS_DEF(index) + +TermInfo::TermInfo(){ +//Func - Constructor +//Pre - true +//Post - Instance has been created + + docFreq = 0; + freqPointer = 0; + proxPointer = 0; + skipOffset = 0; +} + +TermInfo::~TermInfo(){ +//Func - Destructor. +//Pre - true +//Post - Instance has been destroyed +} + +TermInfo::TermInfo(const int32_t df, const int64_t fp, const int64_t pp){ +//Func - Constructor. +//Pre - df >= 0, fp >= 0 pp >= 0 +//Post - An instance has been created with FreqPointer = fp, proxPointer=pp and docFreq= df + + CND_PRECONDITION(df >= 0, "df contains negative number"); + CND_PRECONDITION(fp >= 0, "fp contains negative number"); + CND_PRECONDITION(pp >= 0, "pp contains negative number"); + + freqPointer = fp; + proxPointer = pp; + docFreq = df; + skipOffset = 0; +} + +TermInfo::TermInfo(const TermInfo* ti) { +//Func - Constructor. +// Initialises this instance by copying the values of another TermInfo ti +//Pre - ti is a reference to another TermInfo +// ti->docFreq >= 0 +// ti->freqPointer >= 0 +// ti->proxPointer >= 0 +//Post - Values of ti have been copied to the values of this Instance. + + CND_PRECONDITION(ti->docFreq >= 0, "ti->docFreq contains negative number"); + CND_PRECONDITION(ti->freqPointer >= 0, "ti->freqPointer contains negative number"); + CND_PRECONDITION(ti->proxPointer >= 0, "ti->proxPointer contains negative number"); + + docFreq = ti->docFreq; + freqPointer = ti->freqPointer; + proxPointer = ti->proxPointer; + skipOffset = ti->skipOffset; +} + +void TermInfo::set(const int32_t df, const int64_t fp, const int64_t pp, int32_t so) { +//Func - Sets a new document frequency, a new freqPointer and a new proxPointer +//Pre - df >= 0, fp >= 0 pp >= 0 +//Post - The new document frequency, a new freqPointer and a new proxPointer +// have been set + + 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; +} + +void TermInfo::set(const TermInfo* ti) { +//Func - Sets a new document frequency, a new freqPointer and a new proxPointer +// by copying these values from another instance of TermInfo +//Pre - ti is a reference to another TermInfo +// ti->docFreq >= 0 +// ti->freqPointer >= 0 +// ti->proxPointer >= 0 +//Post - Values of ti have been copied to the values of this Instance. + + CND_PRECONDITION(ti->docFreq >= 0, "ti->docFreq contains negative number"); + CND_PRECONDITION(ti->freqPointer >= 0, "ti->freqPointer contains negative number"); + CND_PRECONDITION(ti->proxPointer >= 0, "ti->proxPointer contains negative number"); + + docFreq = ti->docFreq; + freqPointer = ti->freqPointer; + proxPointer = ti->proxPointer; + skipOffset = ti->skipOffset; +} +CL_NS_END diff --git a/Pods/BRCLucene/src/core/CLucene/index/TermInfosReader.cpp b/Pods/BRCLucene/src/core/CLucene/index/TermInfosReader.cpp new file mode 100644 index 0000000..ebbb315 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/index/TermInfosReader.cpp @@ -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. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" + +#include "Term.h" +#include "Terms.h" +#include "CLucene/util/Misc.h" +#include "CLucene/store/Directory.h" +#include "CLucene/store/IndexInput.h" + +#include "_TermInfo.h" +#include "_FieldInfos.h" +#include "_SegmentTermEnum.h" +#include "_FieldInfos.h" +#include "_TermInfo.h" +#include "_TermInfosWriter.h" +#include "_TermInfosReader.h" + +CL_NS_USE(store) +CL_NS_USE(util) +CL_NS_DEF(index) + + + TermInfosReader::TermInfosReader(Directory* dir, const char* seg, FieldInfos* fis, const int32_t readBufferSize): + directory (dir),fieldInfos (fis), indexTerms(NULL), indexInfos(NULL), indexPointers(NULL), indexDivisor(1) + { + //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 != NULL, "seg is NULL"); + + //Initialize the name of the segment + segment = seg; + + //Create a filname fo a Term Info File + string tisFile = Misc::segmentname(segment,".tis"); + string tiiFile = Misc::segmentname(segment,".tii"); + bool success = false; + origEnum = indexEnum = NULL; + _size = indexTermsLength = totalIndexInterval = 0; + + try { + //Create an SegmentTermEnum for storing all the terms read of the segment + origEnum = _CLNEW SegmentTermEnum( directory->openInput( tisFile.c_str(), readBufferSize ), fieldInfos, false); + _size = origEnum->size; + totalIndexInterval = origEnum->indexInterval; + indexEnum = _CLNEW SegmentTermEnum( directory->openInput( tiiFile.c_str(), readBufferSize ), 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"); + + success = true; + } _CLFINALLY({ + // With lock-less commits, it's entirely possible (and + // fine) to hit a FileNotFound exception above. In + // this case, we want to explicitly close any subset + // of things that were opened so that we don't have to + // wait for a GC to do so. + if (!success) { + close(); + } + }); + + } + + 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(); + } + int32_t TermInfosReader::getSkipInterval() const { + return origEnum->skipInterval; + } + + int32_t TermInfosReader::getMaxSkipLevels() const { + return origEnum->maxSkipLevels; + } + + void TermInfosReader::setIndexDivisor(const int32_t _indexDivisor) { + if (indexDivisor < 1) + _CLTHROWA(CL_ERR_IllegalArgument, "indexDivisor must be > 0"); + + if (indexTerms != NULL) + _CLTHROWA(CL_ERR_IllegalArgument, "index terms are already loaded"); + + this->indexDivisor = _indexDivisor; + totalIndexInterval = origEnum->indexInterval * _indexDivisor; + } + + int32_t TermInfosReader::getIndexDivisor() const { return indexDivisor; } + void TermInfosReader::close() { + + //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; iclose(); + + //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); + } + enumerators.setNull(); + } + + 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 + totalIndexInterval) + ) + { + return scanEnum(position); // can avoid seek + } + + //random-access: must seek + seekEnum(position / totalIndexInterval); + + //Get the Term at position + return scanEnum(position); + } + + 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 AND + enumerator->term(false) != NULL && + ( + //there exists a previous current called prev and term is positioned after this prev OR + ( enumerator->prev != NULL && term->compareTo(enumerator->prev) > 0) || + //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/totalIndexInterval)+1; + + // but before end of block + if ( + //the length of indexTerms (the number of terms in enumerator) equals + //_enum_offset OR + indexTermsLength == _enumOffset || + //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; + }else + 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); + _CLLDELETE(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 = new Term[indexTermsLength]; + CND_CONDITION(indexTerms != NULL,"No memory could be allocated for indexTerms");//Check if is indexTerms is a valid array + + //Instantiate an big block of TermInfo's, so that each one doesn't have to be new'd + indexInfos = _CL_NEWARRAY(TermInfo,indexTermsLength); + CND_CONDITION(indexInfos != NULL,"No memory could be allocated for indexInfos"); //Check if is indexInfos is a valid array + + //Instantiate an array indexPointers that contains pointers to the term info index file + indexPointers = _CL_NEWARRAY(int64_t,indexTermsLength); + CND_CONDITION(indexPointers != NULL,"No memory could be allocated for indexPointers");//Check if is indexPointers is a valid array + + //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; + + for (int32_t j = 1; j < indexDivisor; j++) + if (!indexEnum->next()) + break; + } + }_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 * totalIndexInterval) - 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(); + }else{ + //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/Pods/BRCLucene/src/core/CLucene/index/TermInfosWriter.cpp b/Pods/BRCLucene/src/core/CLucene/index/TermInfosWriter.cpp new file mode 100644 index 0000000..cc9d779 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/index/TermInfosWriter.cpp @@ -0,0 +1,245 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "CLucene/store/Directory.h" +#include "CLucene/store/IndexOutput.h" +#include "CLucene/util/Misc.h" +#include "Term.h" +#include "_TermInfo.h" +#include "IndexWriter.h" +#include "_FieldInfos.h" +#include "_TermInfosWriter.h" +#include + +CL_NS_USE(util) +CL_NS_USE(store) +CL_NS_DEF(index) + + TermInfosWriter::TermInfosWriter(Directory* directory, const char* 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 != NULL, "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 char* 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 != NULL, "segment is NULL"); + initialise(directory,segment,interval,isIndex); + } + + void TermInfosWriter::initialise(Directory* directory, const char* 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 + + + maxSkipLevels = 10; + lastTermTextLength = 0; + lastFieldNumber = -1; + + lastTi = _CLNEW TermInfo(); + + CND_CONDITION(lastTi != NULL, "Could not allocate memory for lastTi"); + + lastIndexPointer = 0; + size = 0; + isIndex = IsIndex; + indexInterval = interval; + skipInterval = TermInfosWriter::DEFAULT_TERMDOCS_SKIP_INTERVAL; + + output = directory->createOutput( Misc::segmentname(segment, (isIndex ? ".tii" : ".tis")).c_str() ); + + output->writeInt(FORMAT); // write format + output->writeLong(0); // leave space for size + output->writeInt(indexInterval);// write indexInterval + output->writeInt(skipInterval); // write skipInterval + + output->writeInt(maxSkipLevels); // write maxSkipLevels + + //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, TermInfo* ti){ + const size_t length = term->textLength(); + if ( termTextBuffer.values == NULL || termTextBuffer.length < length ){ + termTextBuffer.resize( (int32_t)(length*1.25) ); + } + _tcsncpy(termTextBuffer.values, term->text(), length); + + add(fieldInfos->fieldNumber(term->field()), termTextBuffer.values, length, ti); + } + + // Currently used only by assert statement + int32_t TermInfosWriter::compareToLastTerm(int32_t fieldNumber, const TCHAR* termText, int32_t length) { + int32_t pos = 0; + + if (lastFieldNumber != fieldNumber) { + const int32_t cmp = _tcscmp(fieldInfos->fieldName(lastFieldNumber), fieldInfos->fieldName(fieldNumber)); + // If there is a field named "" (empty string) then we + // will get 0 on this comparison, yet, it's "OK". But + // it's not OK if two different field numbers map to + // the same name. + if (cmp != 0 || lastFieldNumber != -1) + return cmp; + } + + //TODO: is this just a _tcsncmp??? + while(pos < length && pos < lastTermTextLength) { + const TCHAR c1 = lastTermText[pos]; + const TCHAR c2 = termText[pos]; + if (c1 < c2) + return -1; + else if (c1 > c2) + return 1; + pos++; + } + + if (pos < lastTermTextLength) + // Last term was longer + return 1; + else if (pos < length) + // Last term was shorter + return -1; + else + return 0; + } + + void TermInfosWriter::add(int32_t fieldNumber, const TCHAR* termText, int32_t termTextLength, 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. + +// TODO: This is a hack. If _ASCII is defined, Misc::toString(const TCHAR*, int) will cause linking errors, +// at least on VS. Needs a prettier fix no doubt... ISH 2009-11-08 +#ifdef _ASCII + assert(compareToLastTerm(fieldNumber, termText, termTextLength) < 0 || + (isIndex && termTextLength == 0 && lastTermTextLength == 0)); +#else + CND_PRECONDITION(compareToLastTerm(fieldNumber, termText, termTextLength) < 0 || + (isIndex && termTextLength == 0 && lastTermTextLength == 0), + (string("Terms are out of order: field=") + Misc::toString(fieldInfos->fieldName(fieldNumber)) + + " (number " + Misc::toString(fieldNumber) + ")" + + " lastField=" + Misc::toString(fieldInfos->fieldName(lastFieldNumber)) + + " (number " + Misc::toString(lastFieldNumber) + ")" + + " text=" + Misc::toString(termText, termTextLength) + + " lastText=" + Misc::toString(lastTermText.values, lastTermTextLength) + ).c_str() ); +#endif + + CND_PRECONDITION(ti->freqPointer >= lastTi->freqPointer, ("freqPointer out of order (" + Misc::toString(ti->freqPointer) + " < " + Misc::toString(lastTi->freqPointer) + ")").c_str()); + CND_PRECONDITION(ti->proxPointer >= lastTi->proxPointer, ("proxPointer out of order (" + Misc::toString(ti->proxPointer) + " < " + Misc::toString(lastTi->proxPointer) + ")").c_str()); + + if (!isIndex && size % indexInterval == 0){ + //add an index term + other->add(lastFieldNumber, lastTermText.values, lastTermTextLength, lastTi); // add an index term + } + + //write term + writeTerm(fieldNumber, termText, termTextLength); + // 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 + } + if (lastTermText.length < termTextLength || lastTermText.length == 0){ + lastTermText.resize( (int32_t)cl_max(10.0,termTextLength*1.25) ); + } + if ( termText != NULL ) + _tcsncpy(lastTermText.values,termText,termTextLength); + else + lastTermText.values[0] = 0; + + lastTermTextLength = termTextLength; + lastFieldNumber = fieldNumber; + + 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 ); + } + } + _CLDELETE(lastTi); + } + } + + void TermInfosWriter::writeTerm(int32_t fieldNumber, const TCHAR* termText, int32_t termTextLength){ + + // Compute prefix in common with last term: + int32_t start = 0; + const int32_t limit = termTextLength < lastTermTextLength ? termTextLength : lastTermTextLength; + while(start < limit) { + if (termText[start] != lastTermText.values[start]) + break; + start++; + } + + int32_t length = termTextLength - start; + + output->writeVInt(start); // write shared prefix length + output->writeVInt(length); // write delta length + output->writeChars(termText+start, length); // write delta chars + output->writeVInt(fieldNumber); // write field num + } + + + +CL_NS_END diff --git a/Pods/BRCLucene/src/core/CLucene/index/TermVector.h b/Pods/BRCLucene/src/core/CLucene/index/TermVector.h new file mode 100644 index 0000000..9b843c3 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/index/TermVector.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_index_termvector_h +#define _lucene_index_termvector_h + + +//#include "FieldInfos.h" +#include "CLucene/util/Array.h" + +CL_NS_DEF(index) + +class TermPositionVector; + + +/** Provides access to stored term vector of + * a document field. The vector consists of the name of the field, an array of the terms tha occur in the field of the + * {@link org.apache.lucene.document.Document} and a parallel array of frequencies. Thus, getTermFrequencies()[5] corresponds with the + * frequency of getTerms()[5], assuming there are at least 5 terms in the Document. + */ +class CLUCENE_EXPORT TermFreqVector:LUCENE_BASE { +public: + virtual ~TermFreqVector(){ + } + + /** + * The Field name. + * @return The name of 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 CL_NS(util)::ArrayBase* getTerms() = 0; + + + /** Array of term frequencies. Locations of the array correspond one to one + * to the terms in the array obtained from getTerms + * 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 CL_NS(util)::ArrayBase* getTermFrequencies() = 0; + + + /** Return an index in the term numbers array returned from + * getTerms at which the term with the specified + * term appears. If this term does not appear in the array, + * return -1. + */ + virtual int32_t indexOf(const TCHAR* term) = 0; + + /** Just like indexOf(int32_t) 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 CL_NS(util)::ArrayBase* indexesOf(const CL_NS(util)::ArrayBase& terms, const int32_t start, const int32_t len) = 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; +}; + + +/** +* The TermVectorOffsetInfo class holds information pertaining to a Term in a {@link TermPositionVector}'s +* offset information. This offset information is the character offset as set during the Analysis phase (and thus may not be the actual offset in the +* original content). +*/ +struct CLUCENE_EXPORT TermVectorOffsetInfo { +private: + int32_t startOffset; + int32_t endOffset; +public: // TODO: Remove after TermVectorWriter has been ported; + TermVectorOffsetInfo(); + ~TermVectorOffsetInfo(); + TermVectorOffsetInfo(int32_t startOffset, int32_t endOffset); + + /** + * The accessor for the ending offset for the term + * @return The offset + */ + int32_t getEndOffset() const; + void setEndOffset(const int32_t _endOffset); + + /** + * The accessor for the starting offset of the term. + * + * @return The offset + */ + int32_t getStartOffset() const; + void setStartOffset(const int32_t _startOffset); + + /** + * Two TermVectorOffsetInfos are equals if both the start and end offsets are the same + * @param o The comparison Object + * @return true if both {@link #getStartOffset()} and {@link #getEndOffset()} are the same for both objects. + */ + bool equals(TermVectorOffsetInfo* o); + size_t hashCode() const; +}; + + +/** +* Convenience declaration when creating a {@link org.apache.lucene.index.TermPositionVector} that stores only position information. +*/ +extern CL_NS(util)::ObjectArray* TermVectorOffsetInfo_EMPTY_OFFSET_INFO; + +/** Extends TermFreqVector 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 CLUCENE_EXPORT 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 indexOf method. + * May return null if positions have not been stored. + */ + virtual const CL_NS(util)::ArrayBase* getTermPositions(const size_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 const CL_NS(util)::ArrayBase* getOffsets(const size_t index) = 0; + + virtual ~TermPositionVector(){ + } +}; + + + +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/index/TermVectorReader.cpp b/Pods/BRCLucene/src/core/CLucene/index/TermVectorReader.cpp new file mode 100644 index 0000000..55f79b3 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/index/TermVectorReader.cpp @@ -0,0 +1,559 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "_TermVector.h" +#include "CLucene/util/StringBuffer.h" +#include "CLucene/store/IndexInput.h" +#include "CLucene/store/IndexOutput.h" +#include "_IndexFileNames.h" + +CL_NS_USE(util) +CL_NS_DEF(index) + +TermVectorsReader::TermVectorsReader(CL_NS(store)::Directory* d, const char* segment, FieldInfos* fieldInfos, + int32_t readBufferSize, int32_t docStoreOffset, int32_t size): + fieldInfos(NULL), tvx(NULL), tvd(NULL), tvf(NULL), _size(0), docStoreOffset(0) + { + + bool success = false; + + char fbuf[CL_MAX_NAME]; + strcpy(fbuf,segment); + strcat(fbuf,"."); + char* fpbuf=fbuf+strlen(fbuf); + + strcpy(fpbuf,IndexFileNames::VECTORS_INDEX_EXTENSION); + try { + if (d->fileExists(fbuf)) { + tvx = d->openInput(fbuf, readBufferSize); + checkValidFormat(tvx); + + strcpy(fpbuf,IndexFileNames::VECTORS_DOCUMENTS_EXTENSION); + tvd = d->openInput(fbuf, readBufferSize); + tvdFormat = checkValidFormat(tvd); + + strcpy(fpbuf,IndexFileNames::VECTORS_FIELDS_EXTENSION); + tvf = d->openInput(fbuf, readBufferSize); + tvfFormat = checkValidFormat(tvf); + if (-1 == docStoreOffset) { + this->docStoreOffset = 0; + this->_size = static_cast(tvx->length() >> 3); + } else { + this->docStoreOffset = docStoreOffset; + this->_size = size; + // Verify the file is long enough to hold all of our + // docs + CND_CONDITION( ((int64_t) (tvx->length() / 8)) >= size + docStoreOffset , "file is not long enough to hold all of our docs"); + } + } + + this->fieldInfos = fieldInfos; + success = true; + } _CLFINALLY ({ + // With lock-less commits, it's entirely possible (and + // fine) to hit a FileNotFound exception above. In + // this case, we want to explicitly close any subset + // of things that were opened so that we don't have to + // wait for a GC to do so. + if (!success) { + close(); + } + }); +} + +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; + docStoreOffset = copy.docStoreOffset; +} +TermVectorsReader* TermVectorsReader::clone() const{ + if (tvx == NULL || tvd == NULL || tvf == NULL) + return NULL; + return _CLNEW TermVectorsReader(*this); +} + +TermVectorsReader::~TermVectorsReader(){ + close(); +} + +int32_t TermVectorsReader::checkValidFormat(CL_NS(store)::IndexInput* in){ + int32_t format = in->readInt(); + if (format > TermVectorsReader::FORMAT_VERSION) + { + CL_NS(util)::StringBuffer err; + err.append(_T("Incompatible format version: ")); + err.appendInt(format); + err.append(_T(" expected ")); + err.appendInt(TermVectorsReader::FORMAT_VERSION); + err.append(_T(" or less")); + _CLTHROWT(CL_ERR_CorruptIndex,err.getBuffer()); + } + return format; +} + +void TermVectorsReader::close(){ + // make all effort to close up. Keep the first exception + // and throw it as a new one. + // todo: why don't we trap the exception and at least make sure that + // all streams that we can close are closed? + CLuceneError keep; + 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; +} + +int64_t TermVectorsReader::size() const{ + return _size; +} + +void TermVectorsReader::get(const int32_t docNum, const TCHAR* field, TermVectorMapper* mapper){ + if (tvx != NULL) { + int32_t fieldNumber = fieldInfos->fieldNumber(field); + //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 + docStoreOffset) * 8L) + 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 == 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++) // TODO: Was ++i, make sure its still good + position += tvd->readVLong(); + + mapper->setDocumentNumber(docNum); + readTermVector(field, position, mapper); + } else { + // "Field not found" + } + } else { + // "No tvx file" + } +} + +TermFreqVector* TermVectorsReader::get(const int32_t docNum, const TCHAR* field){ + // Check if no term vectors are available for this segment at all + ParallelArrayTermVectorMapper* mapper = _CLNEW ParallelArrayTermVectorMapper(); + try + { + get(docNum, field, (TermVectorMapper*)mapper); + } + catch(...) + { + _CLLDELETE(mapper); + throw; + } + + TermFreqVector* ret = mapper->materializeVector(); + _CLLDELETE(mapper); + return ret; +} + + +ArrayBase* TermVectorsReader::get(const int32_t docNum){ + ObjectArray* result = NULL; + // Check if no term vectors are available for this segment at all + if (tvx != NULL) { + //We need to offset by + tvx->seek(((docNum + docStoreOffset) * 8L) + 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 == 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; + } + } + + result = (ObjectArray*)readTermVectors(docNum, fields, tvfPointers, fieldCount); + + _CLDELETE_ARRAY(tvfPointers); + _CLDELETE_ARRAY(fields); + } + } else { + // "No tvx file" + } + return result; +} + +void TermVectorsReader::get(const int32_t docNumber, TermVectorMapper* mapper) { + // Check if no term vectors are available for this segment at all + if (tvx != NULL) { + //We need to offset by + tvx->seek((docNumber * 8L) + 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 == 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; + } + } + + mapper->setDocumentNumber(docNumber); + readTermVectors(fields, tvfPointers, fieldCount, mapper); + + _CLDELETE_ARRAY(tvfPointers); + _CLDELETE_ARRAY(fields); + } + } else { + // "No tvx file" + } + } + +ObjectArray* TermVectorsReader::readTermVectors(const int32_t docNum, + const TCHAR** fields, const int64_t* tvfPointers, const int32_t len){ + ObjectArray* res = _CLNEW CL_NS(util)::ObjectArray(len); + ParallelArrayTermVectorMapper* mapper = _CLNEW ParallelArrayTermVectorMapper(); + for (int32_t i = 0; i < len; i++) { + mapper->setDocumentNumber(docNum); + readTermVector(fields[i], tvfPointers[i], mapper); + res->values[i] = static_cast(mapper->materializeVector()); + mapper->reset(); + } + _CLLDELETE(mapper); + return res; +} + +void TermVectorsReader::readTermVectors(const TCHAR** fields, const int64_t* tvfPointers, + const int32_t len, TermVectorMapper* mapper){ + for (int32_t i = 0; i < len; i++) { + readTermVector(fields[i], tvfPointers[i], mapper); + } +} + +void TermVectorsReader::readTermVector(const TCHAR* field, const int64_t tvfPointer, TermVectorMapper* mapper){ + //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; + + bool storePositions; + bool storeOffsets; + + if(tvfFormat == FORMAT_VERSION){ + uint8_t bits = tvf->readByte(); + storePositions = (bits & STORE_POSITIONS_WITH_TERMVECTOR) != 0; + storeOffsets = (bits & STORE_OFFSET_WITH_TERMVECTOR) != 0; + } + else{ + tvf->readVInt(); + storePositions = false; + storeOffsets = false; + } + mapper->setExpectations(field, numTerms, storeOffsets, storePositions); + + int32_t start = 0; + int32_t deltaLength = 0; + int32_t totalLength = 0; + ValueArray buffer(10); // init the buffer with a length of 10 character + + for (int32_t i = 0; i < numTerms; ++i) { + start = tvf->readVInt(); + deltaLength = tvf->readVInt(); + totalLength = start + deltaLength; + if (buffer.length < totalLength + 1) // increase buffer + { + buffer.resize(totalLength+1); + } + + //read the term + tvf->readChars(buffer.values, start, deltaLength); + buffer.values[totalLength] = '\0'; //null terminate term + + //read the frequency + int32_t freq = tvf->readVInt(); + ValueArray* positions = NULL; + + if (storePositions) { //read in the positions + //does the mapper even care about positions? + if (mapper->isIgnoringPositions() == false) { + positions = _CLNEW ValueArray(freq); + int32_t prevPosition = 0; + for (int32_t j = 0; j < freq; j++) + { + positions->values[j] = prevPosition + tvf->readVInt(); + prevPosition = positions->values[j]; + } + } else { + //we need to skip over the positions. Since these are VInts, I don't believe there is anyway to know for sure how far to skip + // + for (int32_t j = 0; j < freq; j++) + { + tvf->readVInt(); + } + } + } + + ArrayBase* offsets = NULL; + if (storeOffsets) { + //does the mapper even care about offsets? + if (mapper->isIgnoringOffsets() == false) { + offsets = _CLNEW ObjectArray(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(); + offsets->values[j] = _CLNEW TermVectorOffsetInfo(startOffset, endOffset); + prevOffset = endOffset; + } + } else { + for (int32_t j = 0; j < freq; j++){ + tvf->readVInt(); + tvf->readVInt(); + } + } + } + mapper->map(buffer.values, totalLength, freq, offsets, positions); + } +} + +ObjectArray* TermVectorOffsetInfo_EMPTY_OFFSET_INFO = _CLNEW ObjectArray; + +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(const int32_t _endOffset) { + this->endOffset = _endOffset; +} + +int32_t TermVectorOffsetInfo::getStartOffset() const{ + return startOffset; +} + +void TermVectorOffsetInfo::setStartOffset(const 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; +} + +TermVectorMapper::TermVectorMapper(){ + this->ignoringPositions = false; + this->ignoringOffsets = false; +} + +TermVectorMapper::TermVectorMapper(const bool _ignoringPositions, const bool _ignoringOffsets){ + this->ignoringPositions = _ignoringPositions; + this->ignoringOffsets = _ignoringOffsets; +} + +bool TermVectorMapper::isIgnoringPositions() const +{ + return ignoringPositions; +} + +bool TermVectorMapper::isIgnoringOffsets() const +{ + return ignoringOffsets; +} + +void TermVectorMapper::setDocumentNumber(const int32_t /*documentNumber*/) +{ + //default implementation does nothing... +} + +ParallelArrayTermVectorMapper::ParallelArrayTermVectorMapper(): + terms(NULL), + termFreqs(NULL), + positions(NULL), + offsets(NULL), + currentPosition(0), + field(NULL) +{ +} +ParallelArrayTermVectorMapper::~ParallelArrayTermVectorMapper(){ + _CLDELETE_LCARRAY(field); +} + +void ParallelArrayTermVectorMapper::setExpectations(const TCHAR* _field, const int32_t numTerms, + const bool storeOffsets, const bool storePositions) { + _CLDELETE_LCARRAY(field); + this->field = STRDUP_TtoT(_field); + + terms = _CLNEW CL_NS(util)::TCharArray(numTerms); + termFreqs = _CLNEW ValueArray(numTerms); + + this->storingOffsets = storeOffsets; + this->storingPositions = storePositions; + if(storePositions){ + positions = (ArrayBase< ArrayBase* >*)_CLNEW ObjectArray< ValueArray >(numTerms); + } + if(storeOffsets){ + offsets = _CLNEW ObjectArray< ArrayBase >(numTerms); + } +} + +void ParallelArrayTermVectorMapper::map(const TCHAR* term, int32_t termLen, const int32_t frequency, + ArrayBase* _offsets, + ArrayBase* _positions) { + terms->values[currentPosition] = STRDUP_TtoT(term); + + termFreqs->values[currentPosition] = frequency; + + if (storingOffsets) + { + this->offsets->values[currentPosition] = _offsets; + } + if (storingPositions) + { + this->positions->values[currentPosition] = _positions; + } + currentPosition++; +} + +TermFreqVector* ParallelArrayTermVectorMapper::materializeVector() { + SegmentTermVector* tv = NULL; + if (field != NULL && terms != NULL) { + if (storingPositions || storingOffsets) { + tv = _CLNEW SegmentTermPositionVector(field, terms, termFreqs, positions, offsets); + } else { + tv = _CLNEW SegmentTermVector(field, terms, termFreqs); + } + } + return tv; +} + +CL_NS_END diff --git a/Pods/BRCLucene/src/core/CLucene/index/TermVectorWriter.cpp b/Pods/BRCLucene/src/core/CLucene/index/TermVectorWriter.cpp new file mode 100644 index 0000000..a37b69e --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/index/TermVectorWriter.cpp @@ -0,0 +1,230 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "_TermVector.h" +#include "_IndexFileNames.h" +#include "CLucene/util/Misc.h" +#include "CLucene/store/IndexInput.h" +#include "CLucene/store/IndexOutput.h" +#include + +CL_NS_USE(util) +CL_NS_DEF(index) + + TermVectorsWriter::TermVectorsWriter(CL_NS(store)::Directory* directory, + const char* segment,FieldInfos* fieldInfos) + { + // Open files for TermVector storage + char fbuf[CL_MAX_NAME]; + strcpy(fbuf,segment); + strcat(fbuf,"."); + char* fpbuf=fbuf+strlen(fbuf); + + strcpy(fpbuf,IndexFileNames::VECTORS_INDEX_EXTENSION); + tvx = directory->createOutput(fbuf); + tvx->writeInt(TermVectorsReader::FORMAT_VERSION); + + strcpy(fpbuf,IndexFileNames::VECTORS_DOCUMENTS_EXTENSION); + tvd = directory->createOutput(fbuf); + tvd->writeInt(TermVectorsReader::FORMAT_VERSION); + + strcpy(fpbuf,IndexFileNames::VECTORS_FIELDS_EXTENSION); + tvf = directory->createOutput(fbuf); + tvf->writeInt(TermVectorsReader::FORMAT_VERSION); + + this->fieldInfos = fieldInfos; + } + + void TermVectorsWriter::close(CLuceneError* err){ + CLuceneError keep; + bool bError = false; + + if ( tvx != NULL ){ + try{ + tvx->close(); + }catch(CLuceneError& ioerr){ + if ( ioerr.number() != CL_ERR_IO ) + { + _CLDELETE(tvx); + _CLDELETE(tvd); + _CLDELETE(tvf); + throw ioerr; + } + if (!bError) + { + bError = true; + keep.set(ioerr.number(), ioerr.what()); + } + } + _CLDELETE(tvx); + } + + if ( tvd != NULL ){ + try{ + tvd->close(); + }catch(CLuceneError& ioerr){ + if ( ioerr.number() != CL_ERR_IO ) + { + _CLDELETE(tvd); + _CLDELETE(tvf); + throw ioerr; + } + if (!bError) + { + bError = true; + keep.set(ioerr.number(), ioerr.what()); + } + } + _CLDELETE(tvd); + } + + if ( tvf != NULL ){ + try{ + tvf->close(); + }catch(CLuceneError& ioerr){ + if ( ioerr.number() != CL_ERR_IO ) + { + _CLDELETE(tvf); + throw ioerr; + } + if (!bError) + { + bError = true; + keep.set(ioerr.number(), ioerr.what()); + } + } + _CLDELETE(tvf); + } + + if (bError) + { + if ( err != NULL ) + err->set(keep.number(), keep.what()); + else + throw keep; + } + } + + TermVectorsWriter::~TermVectorsWriter(){ + CLuceneError err; + close(&err); + } + + + void TermVectorsWriter::addAllDocVectors(ArrayBase* _vectors){ + + tvx->writeLong(tvd->getFilePointer()); + + if (_vectors != NULL) { + ArrayBase& vectors = *_vectors; + + const int32_t numFields = vectors.length; + tvd->writeVInt(numFields); + + ValueArray fieldPointers(numFields); + + for (int32_t i=0; igetFilePointer(); + + const int32_t fieldNumber = fieldInfos->fieldNumber(vectors[i]->getField()); + + // 1st pass: write field numbers to tvd + tvd->writeVInt(fieldNumber); + + const int32_t numTerms = vectors[i]->size(); + tvf->writeVInt(numTerms); + + TermPositionVector* tpVector = NULL; + + uint8_t bits = 0; + bool storePositions = false; + bool storeOffsets = false; + + if ( vectors[i]->__asTermPositionVector() != NULL ) { + // May have positions & offsets + tpVector = vectors[i]->__asTermPositionVector(); + storePositions = tpVector->size() > 0 && tpVector->getTermPositions(0) != NULL; + storeOffsets = tpVector->size() > 0 && tpVector->getOffsets(0) != NULL; + bits = ((storePositions ? TermVectorsReader::STORE_POSITIONS_WITH_TERMVECTOR : 0) + + (storeOffsets ? TermVectorsReader::STORE_OFFSET_WITH_TERMVECTOR : 0)); + } else { + tpVector = NULL; + bits = 0; + storePositions = false; + storeOffsets = false; + } + + tvf->writeVInt(bits); + + const ArrayBase& terms = *vectors[i]->getTerms(); + const ArrayBase& freqs = *vectors[i]->getTermFrequencies(); + + const TCHAR* lastTermText = LUCENE_BLANK_STRING; + size_t lastTermTextLen = 0; + + for (int32_t j=0; jwriteVInt(start); // write shared prefix length + tvf->writeVInt(length); // write delta length + tvf->writeChars(termText + start, length); // write delta chars + lastTermText = termText; + + const int32_t termFreq = freqs[j]; + + tvf->writeVInt(termFreq); + + if (storePositions) { + const ArrayBase* _positions = tpVector->getTermPositions(j); + if (_positions == NULL) + _CLTHROWA(CL_ERR_IllegalState, "Trying to write positions that are NULL!"); + const ArrayBase& positions = *_positions; + assert (positions.length == termFreq); + + // use delta encoding for positions + int32_t lastPosition = 0; + for(int32_t k=0;kwriteVInt(position-lastPosition); + lastPosition = position; + } + } + + if (storeOffsets) { + const ArrayBase* _offsets = tpVector->getOffsets(j); + if (_offsets == NULL) + _CLTHROWA(CL_ERR_IllegalState, "Trying to write offsets that are NULL!"); + const ArrayBase& offsets = *_offsets; + assert (offsets.length == termFreq); + + // use delta encoding for offsets + int32_t lastEndOffset = 0; + for(int k=0;kgetStartOffset(); + const int32_t endOffset = offsets[k]->getEndOffset(); + tvf->writeVInt(startOffset-lastEndOffset); + tvf->writeVInt(endOffset-startOffset); + lastEndOffset = endOffset; + } + } + } + } + + // 2nd pass: write field pointers to tvd + int64_t lastFieldPointer = 0; + for (int32_t i=0; iwriteVLong(fieldPointer-lastFieldPointer); + lastFieldPointer = fieldPointer; + } + } else + tvd->writeVInt(0); + } + +CL_NS_END diff --git a/Pods/BRCLucene/src/core/CLucene/index/Terms.cpp b/Pods/BRCLucene/src/core/CLucene/index/Terms.cpp new file mode 100644 index 0000000..7899f81 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/index/Terms.cpp @@ -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. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "Terms.h" +#include "Term.h" + +CL_NS_DEF(index) + +TermDocs::~TermDocs(){ +} + +TermEnum::~TermEnum(){ +} + +bool TermEnum::skipTo(Term* target){ + do { + if (!next()) + return false; + } while (target->compareTo(term(false)) > 0); + return true; +} + +TermPositions::~TermPositions(){ +} + +CL_NS_END diff --git a/Pods/BRCLucene/src/core/CLucene/index/Terms.h b/Pods/BRCLucene/src/core/CLucene/index/Terms.h new file mode 100644 index 0000000..1744fa4 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/index/Terms.h @@ -0,0 +1,189 @@ +/*------------------------------------------------------------------------------ +* 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_ + +#include "CLucene/util/Equators.h" +CL_NS_DEF(index) + +//predefine +class Term; +class TermEnum; +class TermPositions; + +/** TermDocs provides an interface for enumerating <document, frequency> + pairs for a term.

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.

The pairs are + ordered by document number. + + @see IndexReader#termDocs() + */ +class CLUCENE_EXPORT TermDocs { +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.

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.

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.

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 + // docs. Document numbers are stored in docs, and term + // frequencies are stored in freqs. The freqs array must be as + // int64_t as the docs array. + // + //

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 target.

Returns true iff there is such + // an entry.

Behaves as if written:

+	//   bool skipTo(int32_t target) {
+	//     do {
+	//       if (!next())
+	// 	     return false;
+	//     } while (target > doc());
+	//     return true;
+	//   }
+	// 
+ // 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. + +

Term enumerations are always ordered by Term.compareTo(). Each term in + the enumeration is greater than all that precede it. +*/ +class CLUCENE_EXPORT TermEnum: LUCENE_BASE, public CL_NS(util)::NamedObject { +public: + /** Increments the enumeration to the next element. True if one exists.*/ + virtual bool next()=0; + + /** + * Returns the current Term in the enumeration. + * @param pointer if true, then increment the reference count before returning + */ + virtual Term* term(bool pointer=true)=0; + + /** 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 target.

Returns true iff there is such + * an entry.

Behaves as if written:

+	*   public boolean skipTo(Term target) {
+	*     do {
+	*       if (!next())
+	* 	     return false;
+	*     } while (target > term());
+	*     return true;
+	*   }
+	* 
+ * Some implementations are considerably more efficient than that. + */ + virtual bool skipTo(Term* target); +}; + + + +/** + * TermPositions provides an interface for enumerating the <document, + * frequency, <position>* > tuples for a term.

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 CLUCENE_EXPORT 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()}

This is + invalid until {@link #next()} is called for + the first time. + */ + virtual int32_t nextPosition() = 0; + + virtual ~TermPositions(); + + /** + * Returns the length of the payload at the current term position. + * This is invalid until {@link #nextPosition()} is called for + * the first time.
+ * @return length of the current payload in number of bytes + */ + virtual int32_t getPayloadLength() const = 0; + + /** + * Returns the payload data at the current term position. + * This is invalid until {@link #nextPosition()} is called for + * the first time. + * This method must not be called more than once after each call + * of {@link #nextPosition()}. However, payloads are loaded lazily, + * so if the payload data for the current position is not needed, + * this method may not be called at all for performance reasons.
+ * + * @param data the array into which the data of this payload is to be + * stored, if it is big enough; otherwise, a new byte[] array + * is allocated for this purpose. + * @return a byte[] array containing the data of this payload + */ + virtual uint8_t* getPayload(uint8_t* data) = 0; + + /** + * Checks if a payload can be loaded at this position. + *

+ * Payloads can only be loaded once per call to + * {@link #nextPosition()}. + * + * @return true if there is a payload available at this position that can be loaded + */ + virtual bool isPayloadAvailable() const = 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 TermDocs* __asTermDocs()=0; + virtual TermPositions* __asTermPositions()=0; +}; +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/index/_CompoundFile.h b/Pods/BRCLucene/src/core/CLucene/index/_CompoundFile.h new file mode 100644 index 0000000..5577610 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/index/_CompoundFile.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_index_compoundfile_h +#define _lucene_index_compoundfile_h + + +CL_CLASS_DEF(store,Lock) +#include "CLucene/store/Directory.h" +#include "CLucene/store/IndexInput.h" +#include "_SegmentMerger.h" + +CL_NS_DEF(index) + +class WriterFileEntry; +class ReaderFileEntry; + +/** + * 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: + int32_t readBufferSize; + + // Base info + CL_NS(store)::Directory* directory; + char* fileName; + + CL_NS(store)::IndexInput* stream; + + typedef CL_NS(util)::CLHashMap > EntriesType; + EntriesType* entries; +protected: + /** Removes an existing file in the directory-> */ + bool doDeleteFile(const char* name); + +public: + CompoundFileReader(CL_NS(store)::Directory* dir, const char* name, int32_t _readBufferSize=CL_NS(store)::BufferedIndexInput::BUFFER_SIZE); + virtual ~CompoundFileReader(); + CL_NS(store)::Directory* getDirectory(); + const char* getName() const; + + void close(); + bool openInput(const char * name, CL_NS(store)::IndexInput *& ret, CLuceneError& error, int32_t bufferSize=0); + + /** Returns an array of strings, one for each file in the directory-> */ + bool list(std::vector* names) const; + /** Returns true iff a file with the given name exists. */ + bool fileExists(const char* name) const; + /** Returns the time the named file was last modified. */ + int64_t fileModified(const char* name) const; + /** Set the modified time of an existing file to now. */ + void touchFile(const char* 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 char* from, const char* to); + /** Returns the length of a file in the directory. + * @throws IOException if the file does not exist */ + int64_t fileLength(const char* name) const; + /** Not implemented + * @throws UnsupportedOperationException */ + CL_NS(store)::IndexOutput* createOutput(const char* name); + /** Not implemented + * @throws UnsupportedOperationException */ + CL_NS(store)::LuceneLock* makeLock(const char* name); + + std::string toString() const; + + static const char* getClassName(); + const char* getObjectName() const; +}; + + +/** + * Combines multiple files into a single compound file. + * The file format:
+ *

    + *
  • VInt fileCount
  • + *
  • {Directory} + * fileCount entries with the following structure:
  • + *
      + *
    • int64_t dataOffset
    • + *
    • UTFString extension
    • + *
    + *
  • {File Data} + * fileCount entries with the raw data of the corresponding file
  • + *
+ * + * 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 Internal; + Internal* _internal; + + /** 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 char* name, SegmentMerger::CheckAbort* checkAbort = NULL); + ~CompoundFileWriter(); + /** Returns the directory of the compound file. */ + CL_NS(store)::Directory* getDirectory(); + const char* getName() const ; + /** Add a source stream. file 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 file is null + * @throws IllegalArgumentException if a file with the same name + * has been added already + */ + void addFile(const char* 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/Pods/BRCLucene/src/core/CLucene/index/_DocumentsWriter.h b/Pods/BRCLucene/src/core/CLucene/index/_DocumentsWriter.h new file mode 100644 index 0000000..6a3ac7e --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/index/_DocumentsWriter.h @@ -0,0 +1,968 @@ +/*------------------------------------------------------------------------------ +* 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_DocumentsWriter_ +#define _lucene_index_DocumentsWriter_ + +#include "CLucene/store/IndexInput.h" +#include "CLucene/config/_threads.h" +#include "CLucene/util/Array.h" +#include "CLucene/store/_RAMDirectory.h" +#include "_TermInfo.h" + +CL_CLASS_DEF(analysis,Analyzer) +CL_CLASS_DEF(analysis,Token) +CL_CLASS_DEF(analysis,TokenStream) +CL_CLASS_DEF(document,Field) +CL_CLASS_DEF(store,IndexOutput) +CL_CLASS_DEF(document,Document) +CL_CLASS_DEF(util,StringReader) + +CL_NS_DEF(index) + +class DocumentsWriter; +class DefaultSkipListWriter; +class FieldInfos; +class FieldsWriter; +class FieldInfos; +class IndexWriter; +class TermInfo; +class TermInfosWriter; +class Term; +class FieldInfo; +class Term_Compare; +class Term_Equals; + +/** Used only internally to DW to call abort "up the stack" */ +class AbortException{ +public: + CLuceneError err; + AbortException(CLuceneError& _err, DocumentsWriter* docWriter); +}; + +/** + * This class accepts multiple added documents and directly + * writes a single segment file. It does this more + * efficiently than creating a single segment per document + * (with DocumentWriter) and doing standard merges on those + * segments. + * + * When a document is added, its stored fields (if any) and + * term vectors (if any) are immediately written to the + * Directory (ie these do not consume RAM). The freq/prox + * postings are accumulated into a Postings hash table keyed + * by term. Each entry in this hash table holds a separate + * uint8_t stream (allocated as incrementally growing slices + * into large shared uint8_t[] arrays) for freq and prox, that + * contains the postings data for multiple documents. If + * vectors are enabled, each unique term for each document + * also allocates a PostingVector instance to similarly + * track the offsets & positions uint8_t stream. + * + * Once the Postings hash is full (ie is consuming the + * allowed RAM) or the number of added docs is large enough + * (in the case we are flushing by doc count instead of RAM + * usage), we create a real segment and flush it to disk and + * reset the Postings hash. + * + * In adding a document we first organize all of its fields + * by field name. We then process field by field, and + * record the Posting hash per-field. After each field we + * flush its term vectors. When it's time to flush the full + * segment we first sort the fields by name, and then go + * field by field and sorts its postings. + * + * + * Threads: + * + * Multiple threads are allowed into addDocument at once. + * There is an initial synchronized call to getThreadState + * which allocates a ThreadState for this thread. The same + * thread will get the same ThreadState over time (thread + * affinity) so that if there are consistent patterns (for + * example each thread is indexing a different content + * source) then we make better use of RAM. Then + * processDocument is called on that ThreadState without + * synchronization (most of the "heavy lifting" is in this + * call). Finally the synchronized "finishDocument" is + * called to flush changes to the directory. + * + * Each ThreadState instance has its own Posting hash. Once + * we're using too much RAM, we flush all Posting hashes to + * a segment by merging the docIDs in the posting lists for + * the same term across multiple thread states (see + * writeSegment and appendPostings). + * + * When flush is called by IndexWriter, or, we flush + * internally when autoCommit=false, we forcefully idle all + * threads and flush only once they are all idle. This + * means you can call flush with a given thread even while + * other threads are actively adding/deleting documents. + * + * + * Exceptions: + * + * Because this class directly updates in-memory posting + * lists, and flushes stored fields and term vectors + * directly to files in the directory, there are certain + * limited times when an exception can corrupt this state. + * For example, a disk full while flushing stored fields + * leaves this file in a corrupt state. Or, an OOM + * exception while appending to the in-memory posting lists + * can corrupt that posting list. We call such exceptions + * "aborting exceptions". In these cases we must call + * abort() to discard all docs added since the last flush. + * + * All other exceptions ("non-aborting exceptions") can + * still partially update the index structures. These + * updates are consistent, but, they represent only a part + * of the document seen up until the exception was hit. + * When this happens, we immediately mark the document as + * deleted so that the document is always atomically ("all + * or none") added to the index. + */ +class DocumentsWriter { +public: + + // Number of documents a delete term applies to. + class Num { + private: + int32_t num; + public: + Num(int32_t num) { + this->num = num; + } + int32_t getNum() { + return num; + } + void setNum(int32_t num) { + // Only record the new number if it's greater than the + // current one. This is important because if multiple + // threads are replacing the same doc at nearly the + // same time, it's possible that one thread that got a + // higher docID is scheduled before the other + // threads. + if (num > this->num) + this->num = num; + } + }; + typedef CL_NS(util)::CLHashMap, CL_NS(util)::Deletor::Object > TermNumMapType; + +private: + IndexWriter* writer; + CL_NS(store)::Directory* directory; + DEFINE_MUTEX(THIS_LOCK) + DEFINE_CONDITION(THIS_WAIT_CONDITION) + + FieldInfos* fieldInfos; // All fields we've seen + CL_NS(store)::IndexOutput *tvx, *tvf, *tvd; // To write term vectors + FieldsWriter* fieldsWriter; // To write stored fields + + std::string segment; // Current segment we are working on + std::string docStoreSegment; // Current doc-store segment we are writing + int32_t docStoreOffset; // Current starting doc-store offset of current segment + + int32_t nextDocID; // Next docID to be added + int32_t numDocsInRAM; // # docs buffered in RAM + int32_t numDocsInStore; // # docs written to doc stores + int32_t nextWriteDocID; // Next docID to be written + + std::ostream* infoStream; + + // Currently used only for deleting a doc on hitting an non-aborting exception + std::vector bufferedDeleteDocIDs; + + // The max number of delete terms that can be buffered before + // they must be flushed to disk. + int32_t maxBufferedDeleteTerms; + + // How much RAM we can use before flushing. This is 0 if + // we are flushing by doc count instead. + int64_t ramBufferSize; + + // Flush @ this number of docs. If rarmBufferSize is + // non-zero we will flush by RAM usage instead. + int32_t maxBufferedDocs; + + bool closed; + + // Coarse estimates used to measure RAM usage of buffered deletes + static int32_t OBJECT_HEADER_BYTES; + static int32_t OBJECT_POINTER_BYTES; // TODO: should be 8 on 64-bit platform + static int32_t BYTES_PER_CHAR; + static int32_t BYTES_PER_INT; + + + // This Hashmap buffers delete terms in ram before they + // are applied. The key is delete term; the value is + // number of buffered documents the term applies to. + TermNumMapType* bufferedDeleteTerms; + int32_t numBufferedDeleteTerms; + + + /* Simple StringReader that can be reset to a new string; + * we use this when tokenizing the string value from a + * Field. */ + typedef CL_NS(util)::StringReader ReusableStringReader; + + class ByteBlockPool; + class CharBlockPool; + class FieldMergeState; + + /* IndexInput that knows how to read the byte slices written + * by Posting and PostingVector. We read the bytes in + * each slice until we hit the end of that slice at which + * point we read the forwarding address of the next slice + * and then jump to it.*/ + class ByteSliceReader: public CL_NS(store)::IndexInput { + ByteBlockPool* pool; + int32_t bufferUpto; + const uint8_t* buffer; + int32_t limit; + int32_t level; + + int32_t upto; + int32_t bufferOffset; + int32_t endIndex; + public: + ByteSliceReader(); + virtual ~ByteSliceReader(); + void init(ByteBlockPool* pool, int32_t startIndex, int32_t endIndex); + + uint8_t readByte(); + int64_t writeTo(CL_NS(store)::IndexOutput* out); + void nextSlice(); + void readBytes(uint8_t* b, const int32_t len); + int64_t getFilePointer() const; + int64_t length() const; + void seek(const int64_t pos); + void close(); + + IndexInput* clone() const; + const char* getDirectoryType() const; + const char* getObjectName() const; + static const char* getClassName(); + + friend class FieldMergeState; + }; + + + struct PostingVector; //predefine... + + /* Used to track postings for a single term. One of these + * exists per unique term seen since the last flush. */ + struct Posting { + int32_t textStart; // Address into char[] blocks where our text is stored + int32_t docFreq; // # times this term occurs in the current doc + int32_t freqStart; // Address of first uint8_t[] slice for freq + int32_t freqUpto; // Next write address for freq + int32_t proxStart; // Address of first uint8_t[] slice + int32_t proxUpto; // Next write address for prox + int32_t lastDocID; // Last docID where this term occurred + int32_t lastDocCode; // Code for prior doc + int32_t lastPosition; // Last position where this term occurred + PostingVector* vector; // Corresponding PostingVector instance + }; + + /* Used to track data for term vectors. One of these + * exists per unique term seen in each field in the + * document. */ + struct PostingVector { + Posting* p; // Corresponding Posting instance for this term + int32_t lastOffset; // Last offset we saw + int32_t offsetStart; // Address of first slice for offsets + int32_t offsetUpto; // Next write address for offsets + int32_t posStart; // Address of first slice for positions + int32_t posUpto; // Next write address for positions + }; + + + /* Stores norms, buffered in RAM, until they are flushed + * to a partial segment. */ + class BufferedNorms { + public: + CL_NS(store)::RAMOutputStream out; + int32_t upto; + + BufferedNorms(); + void add(float_t norm); + void reset(); + void fill(int32_t docID); + }; + + + // Used only when infoStream != null + int64_t segmentSize(const std::string& segmentName); + + static const int32_t POINTER_NUM_BYTE; + static const int32_t INT_NUM_BYTE; + static const int32_t CHAR_NUM_BYTE; + + // Holds free pool of Posting instances + CL_NS(util)::ObjectArray postingsFreeListDW; + int32_t postingsFreeCountDW; + int32_t postingsAllocCountDW; + + typedef CL_NS(util)::CLArrayList FreeCharBlocksType; + FreeCharBlocksType freeCharBlocks; + + /* We have three pools of RAM: Postings, uint8_t blocks + * (holds freq/prox posting data) and char blocks (holds + * characters in the term). Different docs require + * varying amount of storage from these three classes. + * For example, docs with many unique single-occurrence + * short terms will use up the Postings RAM and hardly any + * of the other two. Whereas docs with very large terms + * will use alot of char blocks RAM and relatively less of + * the other two. This method just frees allocations from + * the pools once we are over-budget, which balances the + * pools to match the current docs. */ + void balanceRAM(); + + std::vector* _files; // Cached list of files we've created + std::vector* _abortedFiles; // List of files that were written before last abort() + + bool allThreadsIdle(); + + bool hasNorms; // Whether any norms were seen since last flush + + DefaultSkipListWriter* skipListWriter; + + bool currentFieldStorePayloads; + + /** Creates a segment from all Postings in the Postings + * hashes across all ThreadStates & FieldDatas. */ + void writeSegment(std::vector& flushedFiles); + + /** Returns the name of the file with this extension, on + * the current segment we are working on. */ + std::string segmentFileName(const std::string& extension); + std::string segmentFileName(const char* extension); + + TermInfo termInfo; // minimize consing + + + /** Reset after a flush */ + void resetPostingsData(); + + static const uint8_t defaultNorm; ///=Similarity::encodeNorm(1.0f) + + bool timeToFlushDeletes(); + + // Buffer a term in bufferedDeleteTerms, which records the + // current number of documents buffered in ram so that the + // delete term will be applied to those documents as well + // as the disk segments. + void addDeleteTerm(Term* term, int32_t docCount); + + // Buffer a specific docID for deletion. Currently only + // used when we hit a exception when adding a document + void addDeleteDocID(int32_t docId); + + typedef CL_NS(util)::CLArrayList > FreeByteBlocksType; + FreeByteBlocksType freeByteBlocks; + + + /** Per-thread state. We keep a separate Posting hash and + * other state for each thread and then merge postings * + * hashes from all threads when writing the segment. */ + class ThreadState { + public: + /** Holds data associated with a single field, including + * the Postings hash. A document may have many * + * occurrences for a given field name; we gather all * + * such occurrences here (in docFields) so that we can + * * process the entire field at once. */ + class FieldData: public CL_NS(util)::Comparable { + private: + ThreadState* threadState; + + int32_t fieldCount; + CL_NS(util)::ValueArray docFields; + + FieldData* next; + + bool postingsCompacted; + + CL_NS(util)::ValueArray postingsHash; + int32_t postingsHashSize; + int32_t postingsHashHalfSize; + int32_t postingsHashMask; + + int32_t postingsVectorsUpto; + DocumentsWriter* _parent; + + int32_t offsetEnd; + CL_NS(analysis)::Token* localToken; + + int32_t offsetStartCode; + int32_t offsetStart; + + ByteSliceReader* vectorSliceReader; + + void initPostingArrays(); + + /** Only called when term vectors are enabled. This + * is called the first time we see a given term for + * each * document, to allocate a PostingVector + * instance that * is used to record data needed to + * write the posting * vectors. */ + PostingVector* addNewVector(); + + /** This is the hotspot of indexing: it's called once + * for every term of every document. Its job is to * + * update the postings uint8_t stream (Postings hash) * + * based on the occurence of a single term. */ + void addPosition(CL_NS(analysis)::Token* token); + + /** Called when postings hash is too small (> 50% + * occupied) or too large (< 20% occupied). */ + void rehashPostings(int32_t newSize); + + /** Called once per field per document if term vectors + * are enabled, to write the vectors to * + * RAMOutputStream, which is then quickly flushed to + * the real term vectors files in the Directory. */ + void writeVectors(FieldInfo* fieldInfo); + + void compactPostings(); + + public: + int32_t numPostings; + FieldInfo* fieldInfo; + int32_t lastGen; + int32_t position; + int32_t length; + int32_t offset; + float_t boost; + bool doNorms; + bool doVectors; + bool doVectorPositions; + bool doVectorOffsets; + void resetPostingArrays(); + + FieldData(DocumentsWriter* _parent, ThreadState* __threadState, FieldInfo* fieldInfo); + ~FieldData(); + + /** So Arrays.sort can sort us. */ + int32_t compareTo(const void* o); + + /** Collapse the hash table & sort in-place. */ + CL_NS(util)::ValueArray* sortPostings(); + + /** Process all occurrences of one field in the document. */ + void processField(CL_NS(analysis)::Analyzer* analyzer); + + /* Invert one occurrence of one field in the document */ + void invertField(CL_NS(document)::Field* field, CL_NS(analysis)::Analyzer* analyzer, int32_t maxFieldLength); + + static bool sort(FieldData*, FieldData*); + + const char* getObjectName() const; + static const char* getClassName(); + int32_t compareTo(lucene::util::NamedObject *); + friend class ThreadState; + friend class FieldMergeState; + }; + + private: + CL_NS(util)::ValueArray postingsFreeListTS; // Free Posting instances + int32_t postingsFreeCountTS; + + CL_NS(util)::ValueArray vectorFieldPointers; + CL_NS(util)::ValueArray vectorFieldNumbers; + + int32_t numStoredFields; // How many stored fields in current doc + float_t docBoost; // Boost for current doc + + CL_NS(util)::ValueArray fieldDataArray; // Fields touched by current doc + int32_t numFieldData; // How many fields in current doc + int32_t numVectorFields; // How many vector fields in current doc + + CL_NS(util)::ValueArray fieldDataHash; // Hash FieldData instances by field name + int32_t fieldDataHashMask; + TCHAR* maxTermPrefix; // Non-null prefix of a too-large term if this + // doc has one + + int32_t fieldGen; + + CL_NS(util)::ObjectArray postingsVectors; + int32_t maxPostingsVectors; + + // Used to read a string value for a field + ReusableStringReader* stringReader; + + + ByteBlockPool* postingsPool; + ByteBlockPool* vectorsPool; + CharBlockPool* charPool; + + // Current posting we are working on + Posting* p; + PostingVector* vector; + + //writeFreqByte... + uint8_t* freq; + int32_t freqUpto; + + //writeProxByte... + uint8_t* prox; + int32_t proxUpto; + + //writeOffsetByte... + uint8_t* offsets; + int32_t offsetUpto; + + //writePosByte... + uint8_t* pos; + int32_t posUpto; + + + /** Do in-place sort of Posting array */ + void doPostingSort(Posting** postings, int32_t numPosting); + + void quickSort(Posting** postings, int32_t lo, int32_t hi); + + /** Do in-place sort of PostingVector array */ + void doVectorSort(CL_NS(util)::ArrayBase& postings, int32_t numPosting); + + void quickSort(CL_NS(util)::ArrayBase& postings, int32_t lo, int32_t hi); + + // USE ONLY FOR DEBUGGING! + /* + public String getPostingText() { + char[] text = charPool.buffers[p.textStart >> CHAR_BLOCK_SHIFT]; + int32_t upto = p.textStart & CHAR_BLOCK_MASK; + while(text[upto] != CLUCENE_END_OF_WORD) + upto++; + return new String(text, p.textStart, upto-(p.textStart & BYTE_BLOCK_MASK)); + } + */ + + /** Test whether the text for current Posting p equals + * current tokenText. */ + bool postingEquals(const TCHAR* tokenText, int32_t tokenTextLen); + + /** Compares term text for two Posting instance and + * returns -1 if p1 < p2; 1 if p1 > p2; else 0. + */ + int32_t comparePostings(Posting* p1, Posting* p2); + + + public: + bool isIdle; // Whether we are in use + CL_NS(store)::RAMOutputStream* tvfLocal; // Term vectors for one doc + CL_NS(store)::RAMOutputStream* fdtLocal; // Stored fields for one doc + FieldsWriter* localFieldsWriter; // Fields for one doc + int32_t numThreads; // Number of threads that use this instance + int32_t numAllFieldData; + CL_NS(util)::ValueArray allFieldDataArray; // All FieldData instances + bool doFlushAfter; + int32_t docID; // docID we are now working on + + DocumentsWriter* _parent; + + ThreadState(DocumentsWriter* _parent); + virtual ~ThreadState(); + + /** Initializes shared state for this new document */ + void init(CL_NS(document)::Document* doc, int32_t docID); + + /** Tokenizes the fields of a document into Postings */ + void processDocument(CL_NS(analysis)::Analyzer* analyzer); + + /** If there are fields we've seen but did not see again + * in the last run, then free them up. Also reduce + * postings hash size. */ + void trimFields(); + + /** Clear the postings hash and return objects back to + * shared pool */ + void resetPostings(); + + /** Move all per-document state that was accumulated in + * the ThreadState into the "real" stores. */ + void writeDocument(); + + /** Write vInt into freq stream of current Posting */ + void writeFreqVInt(int32_t i); + + /** Write vInt into prox stream of current Posting */ + void writeProxVInt(int32_t i); + + /** Write uint8_t into freq stream of current Posting */ + void writeFreqByte(uint8_t b); + + /** Write uint8_t into prox stream of current Posting */ + void writeProxByte(uint8_t b); + + /** Currently only used to copy a payload into the prox + * stream. */ + void writeProxBytes(uint8_t* b, int32_t offset, int32_t len); + + /** Write vInt into offsets stream of current + * PostingVector */ + void writeOffsetVInt(int32_t i); + + /** Write uint8_t into offsets stream of current + * PostingVector */ + void writeOffsetByte(uint8_t b); + + /** Write vInt into pos stream of current + * PostingVector */ + void writePosVInt(int32_t i); + + /** Write uint8_t into pos stream of current + * PostingVector */ + void writePosByte(uint8_t b); + + friend class FieldMergeState; + }; + + /* Class that Posting and PostingVector use to write uint8_t + * streams into shared fixed-size uint8_t[] arrays. The idea + * is to allocate slices of increasing lengths For + * example, the first slice is 5 bytes, the next slice is + * 14, etc. We start by writing our bytes into the first + * 5 bytes. When we hit the end of the slice, we allocate + * the next slice and then write the address of the new + * slice into the last 4 bytes of the previous slice (the + * "forwarding address"). + * + * Each slice is filled with 0's initially, and we mark + * the end with a non-zero uint8_t. This way the methods + * that are writing into the slice don't need to record + * its length and instead allocate a new slice once they + * hit a non-zero uint8_t. */ + template + class BlockPool { + protected: + bool trackAllocations; + + int32_t numBuffer; + + int32_t bufferUpto; // Which buffer we are upto + int32_t blockSize; + + DocumentsWriter* parent; + public: + CL_NS(util)::ValueArray< T* > buffers; + int32_t tOffset; // Current head offset + int32_t tUpto; // Where we are in head buffer + T* buffer; // Current head buffer + + virtual T* getNewBlock(bool trackAllocations) = 0; + + BlockPool(DocumentsWriter* _parent, int32_t _blockSize, bool trackAllocations): + buffers(CL_NS(util)::ValueArray(10)) + { + this->blockSize = _blockSize; + this->parent = _parent; + bufferUpto = -1; + tUpto = blockSize; + tOffset = -blockSize; + buffer = NULL; + numBuffer = 0; + this->trackAllocations = trackAllocations; + buffer = NULL; + } + virtual ~BlockPool(){ + buffers.deleteValues(); + } + + virtual void reset() = 0; + + void nextBuffer() { + if (1+bufferUpto == buffers.length) { + //expand the number of buffers + buffers.resize( (int32_t)(buffers.length * 1.5)); + } + buffer = buffers.values[1+bufferUpto] = getNewBlock(trackAllocations); + bufferUpto++; + + tUpto = 0; + tOffset += blockSize; + } + + friend class DocumentsWriter; + friend class DocumentsWriter::ThreadState; + friend class DocumentsWriter::ThreadState::FieldData; + friend class DocumentsWriter::FieldMergeState; + friend class DocumentsWriter::ByteSliceReader; + }; + + class CharBlockPool: public BlockPool{ + public: + CharBlockPool(DocumentsWriter* _parent); + virtual ~CharBlockPool(); + TCHAR* getNewBlock(bool trackAllocations); + void reset(); + friend class DocumentsWriter::FieldMergeState; + }; + class ByteBlockPool: public BlockPool{ + public: + ByteBlockPool( bool _trackAllocations, DocumentsWriter* _parent); + virtual ~ByteBlockPool(); + uint8_t* getNewBlock(bool trackAllocations); + int32_t newSlice(const int32_t size); + int32_t allocSlice(uint8_t* slice, const int32_t upto); + void reset(); + + friend class DocumentsWriter::ThreadState; + }; + + + + // Max # ThreadState instances; if there are more threads + // than this they share ThreadStates + static const int32_t MAX_THREAD_STATE; + CL_NS(util)::ValueArray threadStates; + CL_NS(util)::CLHashMap<_LUCENE_THREADID_TYPE, ThreadState*, + CL_NS (util)::CLuceneThreadIdCompare,CL_NS (util)::CLuceneThreadIdCompare, + CL_NS (util)::Deletor::ConstNullVal<_LUCENE_THREADID_TYPE>, + CL_NS (util)::Deletor::Object > threadBindings; + int32_t numWaiting; + CL_NS(util)::ValueArray waitingThreadStates; + int32_t pauseThreads; // Non-zero when we need all threads to + // pause (eg to flush) + bool flushPending; // True when a thread has decided to flush + bool bufferIsFull; // True when it's time to write segment + int32_t abortCount; // Non-zero while abort is pending or running + + CL_NS(util)::ObjectArray norms; // Holds norms until we flush + + /** Does the synchronized work to finish/flush the + * inverted document. */ + void finishDocument(ThreadState* state); + + + /** Used to merge the postings from multiple ThreadStates + * when creating a segment */ + class FieldMergeState { + private: + ThreadState::FieldData* field; + CL_NS(util)::ValueArray* postings; + + Posting* p; + TCHAR* text; + int32_t textOffset; + + int32_t postingUpto; + + ByteSliceReader freq; + ByteSliceReader prox; + + int32_t docID; + int32_t termFreq; + public: + FieldMergeState(); + ~FieldMergeState(); + bool nextTerm(); + bool nextDoc(); + + friend class DocumentsWriter; + }; + + +public: + DocumentsWriter(CL_NS(store)::Directory* directory, IndexWriter* writer); + ~DocumentsWriter(); + + /** If non-null, various details of indexing are printed + * here. */ + void setInfoStream(std::ostream* infoStream); + + /** Set how much RAM we can use before flushing. */ + void setRAMBufferSizeMB(float_t mb); + + float_t getRAMBufferSizeMB(); + + /** Set max buffered docs, which means we will flush by + * doc count instead of by RAM usage. */ + void setMaxBufferedDocs(int32_t count); + + int32_t getMaxBufferedDocs(); + + /** Get current segment name we are writing. */ + std::string getSegment(); + + /** Returns how many docs are currently buffered in RAM. */ + int32_t getNumDocsInRAM(); + + /** Returns the current doc store segment we are writing + * to. This will be the same as segment when autoCommit + * * is true. */ + const std::string& getDocStoreSegment(); + + /** Returns the doc offset into the shared doc store for + * the current buffered docs. */ + int32_t getDocStoreOffset(); + + /** Closes the current open doc stores an returns the doc + * store segment name. This returns a blank string if there are + * no buffered documents. */ + std::string closeDocStore(); + + const std::vector* abortedFiles(); + + /* Returns list of files in use by this instance, + * including any flushed segments. */ + const std::vector& files(); + + void setAborting(); + + /** Called if we hit an exception when adding docs, + * flushing, etc. This resets our state, discarding any + * docs added since last flush. If ae is non-null, it + * contains the root cause exception (which we re-throw + * after we are done aborting). */ + void abort(AbortException* ae); + + // Returns true if an abort is in progress + bool pauseAllThreads(); + + void resumeAllThreads(); + + std::vector newFiles; + + /** Flush all pending docs to a new segment */ + int32_t flush(bool closeDocStore); + + /** Build compound file for the segment we just flushed */ + void createCompoundFile(const std::string& segment); + + /** Set flushPending if it is not already set and returns + * whether it was set. This is used by IndexWriter to * + * trigger a single flush even when multiple threads are + * * trying to do so. */ + bool setFlushPending(); + + void clearFlushPending(); + + /** Write norms in the "true" segment format. This is + * called only during commit, to create the .nrm file. */ + void writeNorms(const std::string& segmentName, int32_t totalNumDoc); + + int32_t compareText(const TCHAR* text1, const TCHAR* text2); + + /* Walk through all unique text tokens (Posting + * instances) found in this field and serialize them + * into a single RAM segment. */ + void appendPostings(CL_NS(util)::ArrayBase* fields, + TermInfosWriter* termsOut, + CL_NS(store)::IndexOutput* freqOut, + CL_NS(store)::IndexOutput* proxOut); + + void close(); + + /** Returns a free (idle) ThreadState that may be used for + * indexing this one document. This call also pauses if a + * flush is pending. If delTerm is non-null then we + * buffer this deleted term after the thread state has + * been acquired. */ + ThreadState* getThreadState(CL_NS(document)::Document* doc, Term* delTerm); + + /** Returns true if the caller (IndexWriter) should now + * flush. */ + bool addDocument(CL_NS(document)::Document* doc, CL_NS(analysis)::Analyzer* analyzer); + + bool updateDocument(Term* t, CL_NS(document)::Document* doc, CL_NS(analysis)::Analyzer* analyzer); + + bool updateDocument(CL_NS(document)::Document* doc, CL_NS(analysis)::Analyzer* analyzer, Term* delTerm); + + int32_t getNumBufferedDeleteTerms(); + + const TermNumMapType& getBufferedDeleteTerms(); + + const std::vector* getBufferedDeleteDocIDs(); + + // Reset buffered deletes. + void clearBufferedDeletes(); + + bool bufferDeleteTerms(const CL_NS(util)::ArrayBase* terms); + + bool bufferDeleteTerm(Term* term); + + void setMaxBufferedDeleteTerms(int32_t maxBufferedDeleteTerms); + + int32_t getMaxBufferedDeleteTerms(); + + bool hasDeletes(); + + int64_t getRAMUsed(); + + int64_t numBytesAlloc; + int64_t numBytesUsed; + + /* Used only when writing norms to fill in default norm + * value into the holes in docID stream for those docs + * that didn't have this field. */ + static void fillBytes(CL_NS(store)::IndexOutput* out, uint8_t b, int32_t numBytes); + + uint8_t* copyByteBuffer; + + /** Copy numBytes from srcIn to destIn */ + void copyBytes(CL_NS(store)::IndexInput* srcIn, CL_NS(store)::IndexOutput* destIn, int64_t numBytes); + + + // Size of each slice. These arrays should be at most 16 + // elements. First array is just a compact way to encode + // X+1 with a max. Second array is the length of each + // slice, ie first slice is 5 bytes, next slice is 14 + // bytes, etc. + static const int32_t nextLevelArray[10]; + static const int32_t levelSizeArray[10]; + + // Why + 5*POINTER_NUM_BYTE below? + // 1: Posting has "vector" field which is a pointer + // 2: Posting is referenced by postingsFreeList array + // 3,4,5: Posting is referenced by postings hash, which + // targets 25-50% fill factor; approximate this + // as 3X # pointers + //TODO: estimate this accurately for C++! + static const int32_t POSTING_NUM_BYTE; /// = OBJECT_HEADER_BYTES + 9*INT_NUM_BYTE + 5*POINTER_NUM_BYTE; + + /* Allocate more Postings from shared pool */ + void getPostings(CL_NS(util)::ValueArray& postings); + void recyclePostings(CL_NS(util)::ValueArray& postings, int32_t numPostings); + + /* Initial chunks size of the shared uint8_t[] blocks used to + store postings data */ + static const int32_t BYTE_BLOCK_SHIFT; + static const int32_t BYTE_BLOCK_SIZE; + static const int32_t BYTE_BLOCK_MASK; + static const int32_t BYTE_BLOCK_NOT_MASK; + + /* Allocate another uint8_t[] from the shared pool */ + uint8_t* getByteBlock(bool trackAllocations); + + /* Return a uint8_t[] to the pool */ + void recycleBlocks(CL_NS(util)::ArrayBase& blocks, int32_t start, int32_t end); + + /* Initial chunk size of the shared char[] blocks used to + store term text */ + static const int32_t CHAR_BLOCK_SHIFT; + static const int32_t CHAR_BLOCK_SIZE; + static const int32_t CHAR_BLOCK_MASK; + + static const int32_t MAX_TERM_LENGTH; + + /* Allocate another char[] from the shared pool */ + TCHAR* getCharBlock(); + + /* Return a char[] to the pool */ + void recycleBlocks(CL_NS(util)::ArrayBase& blocks, int32_t start, int32_t numBlocks); + + std::string toMB(int64_t v); + + +}; + +#define CLUCENE_END_OF_WORD 0x0 + +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/index/_FieldInfo.h b/Pods/BRCLucene/src/core/CLucene/index/_FieldInfo.h new file mode 100644 index 0000000..506499f --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/index/_FieldInfo.h @@ -0,0 +1,13 @@ +/*------------------------------------------------------------------------------ +* 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_ + + +#error "This header is deprecated, use _FieldInfos.h instead" + +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/index/_FieldInfos.h b/Pods/BRCLucene/src/core/CLucene/index/_FieldInfos.h new file mode 100644 index 0000000..fe2acfe --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/index/_FieldInfos.h @@ -0,0 +1,198 @@ +/*------------------------------------------------------------------------------ +* 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_FieldInfos_ +#define _lucene_index_FieldInfos_ + +#include "CLucene/store/Directory.h" + +CL_CLASS_DEF(document,Document) +CL_CLASS_DEF(document,Field) + +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 + + bool storePayloads; // whether this field stores payloads together with term positions + + //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, + const bool isIndexed, + const int32_t fieldNumber, + const bool storeTermVector, + const bool storeOffsetWithTermVector, + const bool storePositionWithTermVector, + const bool omitNorms, + const bool storePayloads); + + //Func - Destructor + //Pre - true + //Post - The instance has been destroyed + ~FieldInfo(); + + /* Clones this + * @memory - caller is responsible for deleting the returned object + */ + FieldInfo* clone(); +}; + +/** 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 CLUCENE_EXPORT FieldInfos :LUCENE_BASE{ + //we now use internd field names, so we can use the voidCompare + //to directly compare the strings + typedef CL_NS(util)::CLHashMap defByName; + defByName byName; + + CL_NS(util)::CLArrayList > byNumber; +public: + enum{ + IS_INDEXED = 0x1, + STORE_TERMVECTOR = 0x2, + STORE_POSITIONS_WITH_TERMVECTOR = 0x4, + STORE_OFFSET_WITH_TERMVECTOR = 0x8, + OMIT_NORMS = 0x10, + STORE_PAYLOADS = 0x20 + }; + + 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 The name of the file to open the IndexInput from in the Directory + * @throws IOException + */ + FieldInfos(CL_NS(store)::Directory* d, const char* name); + + /** + * Returns a deep clone of this FieldInfos instance. + * @memory caller is responisble for deleting returned object + */ + FieldInfos* clone(); + + /** Adds field info for a Document. */ + void add(const CL_NS(document)::Document* doc); + + /** + * Add fields that are indexed. Whether they have termvectors has to be specified. + * + * @param names The names of the fields. An array of TCHARs, last item has to be NULL + * @param storeTermVectors Whether the fields store term vectors or not + * @param storePositionWithTermVector treu if positions should be stored. + * @param storeOffsetWithTermVector true if offsets should be stored + */ + void addIndexed(const TCHAR** names, const bool storeTermVectors, const bool storePositionWithTermVector, const bool storeOffsetWithTermVector); + + /** + * Assumes the fields are not storing term vectors. + * + * @param names The names of the fields + * @param isIndexed Whether the fields are indexed or not + * + * @see #add(TCHAR*, bool) + */ + void add(const TCHAR** names, const bool isIndexed, const bool storeTermVector=false, + const bool storePositionWithTermVector=false, const bool storeOffsetWithTermVector=false, + const bool omitNorms=false, const bool storePayloads=false); + + // 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 + * @param omitNorms true if the norms for the indexed field should be omitted + * @param storePayloads true if payloads should be stored for this field + */ + FieldInfo* add(const TCHAR* name, const bool isIndexed, const bool storeTermVector=false, + const bool storePositionWithTermVector=false, const bool storeOffsetWithTermVector=false, const bool omitNorms=false, const bool storePayloads=false); + + // was void + FieldInfo* addInternal( const TCHAR* name,const bool isIndexed, const bool storeTermVector, + const bool storePositionWithTermVector, const bool storeOffsetWithTermVector, const bool omitNorms, const bool storePayloads); + + 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; + + /** + * 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 int32_t fieldNumber) const; + + size_t size()const; + bool hasVectors() const; + + + void write(CL_NS(store)::Directory* d, const char* name) const; + void write(CL_NS(store)::IndexOutput* output) const; + +private: + void read(CL_NS(store)::IndexInput* input); + +}; +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/index/_FieldsReader.h b/Pods/BRCLucene/src/core/CLucene/index/_FieldsReader.h new file mode 100644 index 0000000..33aec75 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/index/_FieldsReader.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. +------------------------------------------------------------------------------*/ +#ifndef _lucene_index_FieldsReader_ +#define _lucene_index_FieldsReader_ + +#include "CLucene/util/_ThreadLocal.h" +CL_CLASS_DEF(store,Directory) +CL_CLASS_DEF(document,Document) +#include "CLucene/document/Field.h" +CL_CLASS_DEF(document,FieldSelector) +CL_CLASS_DEF(index, FieldInfo) +CL_CLASS_DEF(index, FieldInfos) +CL_CLASS_DEF(store,IndexInput) + +CL_NS_DEF(index) + + /** + * Class responsible for access to stored document fields. + *

+ * It uses <segment>.fdt and <segment>.fdx; files. + */ + class FieldsReader :LUCENE_BASE{ + private: + const FieldInfos* fieldInfos; + + // The main fieldStream, used only for cloning. + CL_NS(store)::IndexInput* cloneableFieldsStream; + + // This is a clone of cloneableFieldsStream used for reading documents. + // It should not be cloned outside of a synchronized context. + CL_NS(store)::IndexInput* fieldsStream; + + CL_NS(store)::IndexInput* indexStream; + int32_t numTotalDocs; + int32_t _size; + bool closed; + + // The docID offset where our docs begin in the index + // file. This will be 0 if we have our own private file. + int32_t docStoreOffset; + + DEFINE_MUTEX(THIS_LOCK) + CL_NS(util)::ThreadLocal > fieldsStreamTL; + static void uncompress(const CL_NS(util)::ValueArray& input, CL_NS(util)::ValueArray& output); + public: + FieldsReader(CL_NS(store)::Directory* d, const char* segment, FieldInfos* fn, + int32_t readBufferSize = CL_NS(store)::BufferedIndexInput::BUFFER_SIZE, int32_t docStoreOffset = -1, int32_t size = 0); + virtual ~FieldsReader(); + + //protected: + /** + * @throws an exception (CL_ERR_IllegalState) if this FieldsReader is closed + */ + void ensureOpen(); + + /** + * Closes the underlying {@link org.apache.lucene.store.IndexInput} streams, including any ones associated with a + * lazy implementation of a Field. This means that the Fields values will not be accessible. + * + * @throws IOException + */ + 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, const CL_NS(document)::FieldSelector* fieldSelector = NULL); + + protected: + /** Returns the length in bytes of each raw document in a + * contiguous range of length numDocs starting with + * startDocID. Returns the IndexInput (the fieldStream), + * already seeked to the starting point for startDocID.*/ + CL_NS(store)::IndexInput* rawDocs(int32_t* lengths, const int32_t startDocID, const int32_t numDocs); + + private: + /** + * Skip the field. We still have to read some of the information about the field, but can skip past the actual content. + * This will have the most payoff on large fields. + */ + void skipField(const bool binary, const bool compressed); + void skipField(const bool binary, const bool compressed, const int32_t toRead); + + void addFieldLazy(CL_NS(document)::Document& doc, const FieldInfo* fi, const bool binary, const bool compressed, const bool tokenize); + + /** Add the size of field as a byte[] containing the 4 bytes of the integer byte size (high order byte first; char = 2 bytes) + * Read just the size -- caller must skip the field content to continue reading fields + * Return the size in bytes or chars, depending on field type + */ + int32_t addFieldSize(CL_NS(document)::Document& doc, const FieldInfo* fi, const bool binary, const bool compressed); + + // in merge mode we don't uncompress the data of a compressed field + void addFieldForMerge(CL_NS(document)::Document& doc, const FieldInfo* fi, const bool binary, const bool compressed, const bool tokenize); + + void addField(CL_NS(document)::Document& doc, const FieldInfo* fi, const bool binary, const bool compressed, const bool tokenize); + + CL_NS(document)::Field::TermVector getTermVectorType(const FieldInfo* fi); + CL_NS(document)::Field::Index getIndexType(const FieldInfo* fi, const bool tokenize); + + private: + /** + * A Lazy implementation of Field that differs loading of fields until asked for, instead of when the Document is + * loaded. + */ + class LazyField : public CL_NS(document)::Field { + private: + int32_t toRead; + int64_t pointer; + FieldsReader* parent; + + public: + LazyField(FieldsReader* _parent, const TCHAR* _name, int config, const int32_t _toRead, const int64_t _pointer); + virtual ~LazyField(); + private: + CL_NS(store)::IndexInput* getFieldStream(); + + public: + /** The value of the field in Binary, or null. If null, the Reader value, + * String value, or TokenStream value is used. Exactly one of stringValue(), + * readerValue(), binaryValue(), and tokenStreamValue() must be set. */ + virtual const CL_NS(util)::ValueArray* binaryValue(); + + /** The value of the field as a Reader, or null. If null, the String value, + * binary value, or TokenStream value is used. Exactly one of stringValue(), + * readerValue(), binaryValue(), and tokenStreamValue() must be set. */ + virtual CL_NS(util)::Reader* readerValue(); + + /** The value of the field as a String, or null. If null, the Reader value, + * binary value, or TokenStream value is used. Exactly one of stringValue(), + * readerValue(), binaryValue(), and tokenStreamValue() must be set. */ + virtual const TCHAR* stringValue(); + + /** The value of the field as a TokesStream, or null. If null, the Reader value, + * String value, or binary value is used. Exactly one of stringValue(), + * readerValue(), binaryValue(), and tokenStreamValue() must be set. */ + virtual CL_NS(analysis)::TokenStream* tokenStreamValue(); + + int64_t getPointer() const; + void setPointer(const int64_t _pointer); + + int32_t getToRead() const; + void setToRead(const int32_t _toRead); + }; + friend class LazyField; + friend class SegmentMerger; + friend class FieldsWriter; + + // Instances of this class hold field properties and data + // for merge + class FieldForMerge : public CL_NS(document)::Field { + public: + const TCHAR* stringValue() const; + CL_NS(util)::Reader* readerValue() const; + const CL_NS(util)::ValueArray* binaryValue(); + CL_NS(analysis)::TokenStream* tokenStreamValue() const; + + FieldForMerge(void* _value, ValueType _type, const FieldInfo* fi, const bool binary, const bool compressed, const bool tokenize); + virtual ~FieldForMerge(); + + virtual const char* getObjectName() const; + static const char* getClassName(); + }; + }; +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/index/_FieldsWriter.h b/Pods/BRCLucene/src/core/CLucene/index/_FieldsWriter.h new file mode 100644 index 0000000..d0622aa --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/index/_FieldsWriter.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_index_FieldsWriter_ +#define _lucene_index_FieldsWriter_ + +CL_CLASS_DEF(store,Directory) +CL_CLASS_DEF(store,IndexOutput) +CL_CLASS_DEF(store,IndexInput) +CL_CLASS_DEF(index,FieldInfo) +CL_CLASS_DEF(store,RAMOutputStream) +CL_CLASS_DEF(document,Document) +CL_CLASS_DEF(document,Field) +CL_CLASS_DEF(index,FieldInfos) +#include "CLucene/util/Array.h" + +CL_NS_DEF(index) +class FieldsWriter :LUCENE_BASE{ +private: + FieldInfos* fieldInfos; + + CL_NS(store)::IndexOutput* fieldsStream; + CL_NS(store)::IndexOutput* indexStream; + + bool doClose; + + static void compress(const CL_NS(util)::ValueArray& input, CL_NS(util)::ValueArray& output); + +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 char* segment, FieldInfos* fn); + FieldsWriter(CL_NS(store)::IndexOutput* fdx, CL_NS(store)::IndexOutput* fdt, FieldInfos* fn); + ~FieldsWriter(); + + // Writes the contents of buffer into the fields stream + // and adds a new entry for this document into the index + // stream. This assumes the buffer was already written + // in the correct fields format. + void flushDocument(int32_t numStoredFields, CL_NS(store)::RAMOutputStream* buffer); + + void flush(); + + void writeField(FieldInfo* fi, CL_NS(document)::Field* field); + + void close(); + + /** Bulk write a contiguous series of documents. The + * lengths array is the length (in bytes) of each raw + * document. The stream IndexInput is the + * fieldsStream from which we should bulk-copy all + * bytes. */ + void addRawDocuments(CL_NS(store)::IndexInput* stream, const int32_t* lengths, const int32_t numDocs); + void addDocument(CL_NS(document)::Document* doc); +}; +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/index/_IndexFileDeleter.h b/Pods/BRCLucene/src/core/CLucene/index/_IndexFileDeleter.h new file mode 100644 index 0000000..edf1f9b --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/index/_IndexFileDeleter.h @@ -0,0 +1,224 @@ +/*------------------------------------------------------------------------------ +* 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_IndexFileDeleter_ +#define _lucene_index_IndexFileDeleter_ + +#include "CLucene/util/Equators.h" +#include "IndexDeletionPolicy.h" + +CL_CLASS_DEF(store,Directory) +CL_NS_DEF(index) +class SegmentInfos; +class DocumentsWriter; +class IndexDeletionPolicy; + +/* + * This class keeps track of each SegmentInfos instance that + * is still "live", either because it corresponds to a + * segments_N file in the Directory (a "commit", i.e. a + * committed SegmentInfos) or because it's the in-memory SegmentInfos + * that a writer is actively updating but has not yet committed + * (currently this only applies when autoCommit=false in IndexWriter). + * This class uses simple reference counting to map the live + * SegmentInfos instances to individual files in the Directory. + * + * The same directory file may be referenced by more than + * one IndexCommitPoints, i.e. more than one SegmentInfos. + * Therefore we count how many commits reference each file. + * When all the commits referencing a certain file have been + * deleted, the refcount for that file becomes zero, and the + * file is deleted. + * + * A separate deletion policy interface + * (IndexDeletionPolicy) is consulted on creation (onInit) + * and once per commit (onCommit), to decide when a commit + * should be removed. + * + * It is the business of the IndexDeletionPolicy to choose + * when to delete commit points. The actual mechanics of + * file deletion, retrying, etc, derived from the deletion + * of commit points is the business of the IndexFileDeleter. + * + * The current default deletion policy is {@link + * KeepOnlyLastCommitDeletionPolicy}, which removes all + * prior commits when a new commit has completed. This + * matches the behavior before 2.2. + * + * Note that you must hold the write.lock before + * instantiating this class. It opens segments_N file(s) + * directly with no retry logic. + */ +class IndexFileDeleter { +private: + /** + * Tracks the reference count for a single index file: + */ + class RefCount { + public: + int count; + int IncRef() { + return ++count; + } + int DecRef() { + return --count; + } + }; + + /** + * Holds details for each commit point. This class is + * also passed to the deletion policy. Note: this class + * has a natural ordering that is inconsistent with + * equals. + */ + class CommitPoint: public IndexCommitPoint, public CL_NS(util)::Comparable { + int64_t gen; + std::string segmentsFileName; + IndexFileDeleter* _this; + public: + std::vector files; + bool deleted; + + CommitPoint(IndexFileDeleter* _this, SegmentInfos* segmentInfos); + virtual ~CommitPoint(); + + /** + * Get the segments_N file for this commit point. + */ + std::string getSegmentsFileName(); + + const std::vector& getFileNames(); + + /** + * Called only be the deletion policy, to remove this + * commit point from the index. + */ + void deleteCommitPoint(); + + int32_t compareTo(NamedObject* obj); + + static const char* getClassName(); + const char* getObjectName() const; + static bool sort(IndexCommitPoint* elem1, IndexCommitPoint* elem2); + }; + +private: + /* Files that we tried to delete but failed (likely + * because they are open and we are running on Windows), + * so we will retry them again later: */ + std::vector deletable; + + typedef CL_NS(util)::CLHashMap > RefCountsType; + /* Reference count for all files in the index. + * Counts how many existing commits reference a file. + * Maps String to RefCount (class below) instances: */ + RefCountsType refCounts; + + typedef CL_NS(util)::CLVector > CommitsType; + /* Holds all commits (segments_N) currently in the index. + * This will have just 1 commit if you are using the + * default delete policy (KeepOnlyLastCommitDeletionPolicy). + * Other policies may leave commit points live for longer + * in which case this list would be longer than 1: */ + CommitsType commits; + + /* Holds files we had incref'd from the previous + * non-commit checkpoint: */ + std::vector lastFiles; + + /* Commits that the IndexDeletionPolicy have decided to delete: */ + CL_NS(util)::CLArrayList commitsToDelete; + + std::ostream* infoStream; + CL_NS(store)::Directory* directory; + IndexDeletionPolicy* policy; + DocumentsWriter* docWriter; + + +public: + void deletePendingFiles(); + + void setInfoStream(std::ostream* infoStream); + void message(std::string message); + void decRef(const std::string& fileName); + RefCount* getRefCount(const char* fileName); + + /** + * Remove the CommitPoints in the commitsToDelete List by + * DecRef'ing all files from each SegmentInfos. + */ + void deleteCommits(); + + /** Change to true to see details of reference counts when + * infoStream != null */ + static bool VERBOSE_REF_COUNTS; + + /** + * Initialize the deleter: find all previous commits in + * the Directory, incref the files they reference, call + * the policy to let it delete commits. The incoming + * segmentInfos must have been loaded from a commit point + * and not yet modified. This will remove any files not + * referenced by any of the commits. + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + IndexFileDeleter(CL_NS(store)::Directory* directory, IndexDeletionPolicy* policy, SegmentInfos* segmentInfos, std::ostream* infoStream, DocumentsWriter* docWriter); + ~IndexFileDeleter(); + + /** + * Writer calls this when it has hit an error and had to + * roll back, to tell us that there may now be + * unreferenced files in the filesystem. So we re-list + * the filesystem and delete such files. If segmentName + * is non-null, we will only delete files corresponding to + * that segment. + */ + void refresh(const char* segmentName); + void refresh(); + void close(); + + /** + * For definition of "check point" see IndexWriter comments: + * "Clarification: Check Points (and commits)". + * + * Writer calls this when it has made a "consistent + * change" to the index, meaning new files are written to + * the index and the in-memory SegmentInfos have been + * modified to point to those files. + * + * This may or may not be a commit (segments_N may or may + * not have been written). + * + * We simply incref the files referenced by the new + * SegmentInfos and decref the files we had previously + * seen (if any). + * + * If this is a commit, we also call the policy to give it + * a chance to remove other commits. If any commits are + * removed, we decref their files as well. + */ + void checkpoint(SegmentInfos* segmentInfos, bool isCommit); + + + void CLUCENE_LOCAL_DECL incRef(SegmentInfos* segmentInfos, bool isCommit); + void CLUCENE_LOCAL_DECL incRef(const std::vector& files); + void CLUCENE_LOCAL_DECL decRef(const std::vector& files) ; + void CLUCENE_LOCAL_DECL decRef(SegmentInfos* segmentInfos); + void CLUCENE_LOCAL_DECL deleteFiles(std::vector& files); + + /** Delets the specified files, but only if they are new + * (have not yet been incref'd). */ + void CLUCENE_LOCAL_DECL deleteNewFiles(const std::vector& files); + void CLUCENE_LOCAL_DECL deleteFile(const char* fileName); +}; + +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/index/_IndexFileNameFilter.h b/Pods/BRCLucene/src/core/CLucene/index/_IndexFileNameFilter.h new file mode 100644 index 0000000..c825e6a --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/index/_IndexFileNameFilter.h @@ -0,0 +1,54 @@ +/*------------------------------------------------------------------------------ +* 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_IndexFileNameFilter_ +#define _lucene_index_IndexFileNameFilter_ + +#include "CLucene/util/Equators.h" +#include "CLucene/util/VoidList.h" + +CL_NS_DEF(index) +class FilenameFilter{ +public: + virtual bool accept(const char* dir, const char* name) const = 0; + virtual ~FilenameFilter(); +}; + +/** + * Filename filter that accept filenames and extensions only created by Lucene. + * + * @author Daniel Naber / Bernhard Messer + * @version $rcs = ' $Id: Exp $ ' ; + */ +class IndexFileNameFilter: public FilenameFilter { + static IndexFileNameFilter* _singleton; + static IndexFileNameFilter* singleton(); + CL_NS(util)::CLHashSet extensions; + CL_NS(util)::CLHashSet extensionsInCFS; +public: + IndexFileNameFilter(); + virtual ~IndexFileNameFilter(); + + /* (non-Javadoc) + * @see java.io.FilenameFilter#accept(java.io.File, java.lang.String) + */ + bool accept(const char* dir, const char* name) const; + + /** + * Returns true if this is a file that would be contained + * in a CFS file. This function should only be called on + * files that pass the above "accept" (ie, are already + * known to be a Lucene index file). + */ + bool isCFSFile(const char* name) const; + static const IndexFileNameFilter* getFilter(); + + static void _shutdown(); +}; + + +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/index/_IndexFileNames.h b/Pods/BRCLucene/src/core/CLucene/index/_IndexFileNames.h new file mode 100644 index 0000000..e93687e --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/index/_IndexFileNames.h @@ -0,0 +1,55 @@ + +#ifndef _lucene_index_IndexFileNames_ +#define _lucene_index_IndexFileNames_ + +#include "CLucene/util/Array.h" + +CL_NS_DEF(index) + +class CLUCENE_EXPORT IndexFileNames { + static CL_NS(util)::ConstValueArray _INDEX_EXTENSIONS; + static CL_NS(util)::ConstValueArray _INDEX_EXTENSIONS_IN_COMPOUND_FILE; + static CL_NS(util)::ConstValueArray _STORE_INDEX_EXTENSIONS; + static CL_NS(util)::ConstValueArray _NON_STORE_INDEX_EXTENSIONS; + static CL_NS(util)::ConstValueArray _COMPOUND_EXTENSIONS; + static CL_NS(util)::ConstValueArray _VECTOR_EXTENSIONS; +public: + static const char* SEGMENTS; + static const char* SEGMENTS_GEN; + static const char* DELETABLE; + static const char* NORMS_EXTENSION; + static const char* FREQ_EXTENSION; + static const char* PROX_EXTENSION; + static const char* TERMS_EXTENSION; + static const char* TERMS_INDEX_EXTENSION; + static const char* FIELDS_INDEX_EXTENSION; + static const char* FIELDS_EXTENSION; + static const char* VECTORS_FIELDS_EXTENSION; + static const char* VECTORS_DOCUMENTS_EXTENSION; + static const char* VECTORS_INDEX_EXTENSION; + static const char* COMPOUND_FILE_EXTENSION; + static const char* COMPOUND_FILE_STORE_EXTENSION; + static const char* DELETES_EXTENSION; + static const char* FIELD_INFOS_EXTENSION; + static const char* PLAIN_NORMS_EXTENSION; + static const char* SEPARATE_NORMS_EXTENSION; + static const char* GEN_EXTENSION; + + LUCENE_STATIC_CONSTANT(int32_t,COMPOUND_EXTENSIONS_LENGTH=7); + LUCENE_STATIC_CONSTANT(int32_t,VECTOR_EXTENSIONS_LENGTH=3); + LUCENE_STATIC_CONSTANT(int32_t,STORE_INDEX_EXTENSIONS_LENGTH=5); + + static CL_NS(util)::ConstValueArray& INDEX_EXTENSIONS(); + static CL_NS(util)::ConstValueArray& INDEX_EXTENSIONS_IN_COMPOUND_FILE(); + static CL_NS(util)::ConstValueArray& STORE_INDEX_EXTENSIONS(); + static CL_NS(util)::ConstValueArray& NON_STORE_INDEX_EXTENSIONS(); + static CL_NS(util)::ConstValueArray& COMPOUND_EXTENSIONS(); + static CL_NS(util)::ConstValueArray& VECTOR_EXTENSIONS(); + + static std::string fileNameFromGeneration( const char* base, const char* extension, int64_t gen ); + static bool isDocStoreFile( const char* fileName ); + +}; + +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/index/_MultiSegmentReader.h b/Pods/BRCLucene/src/core/CLucene/index/_MultiSegmentReader.h new file mode 100644 index 0000000..1ad94a8 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/index/_MultiSegmentReader.h @@ -0,0 +1,232 @@ +/*------------------------------------------------------------------------------ +* 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_MultiSegmentReader +#define _lucene_index_MultiSegmentReader + + +#include "DirectoryIndexReader.h" +#include "IndexReader.h" +CL_CLASS_DEF(document,Document) +//#include "Terms.h" +#include "_SegmentHeader.h" + +CL_NS_DEF(index) +class SegmentMergeQueue; + +class MultiSegmentReader:public DirectoryIndexReader{ + static int32_t readerIndex(const int32_t n, int32_t* starts, int32_t numSubReaders); +public: + typedef CL_NS(util)::CLHashtable > NormsCacheType; +private: + int32_t readerIndex(int32_t n) const; + bool hasNorms(const TCHAR* field); + uint8_t* fakeNorms(); + + void startCommit(); + void rollbackCommit(); + + bool _hasDeletions; + uint8_t* ones; + NormsCacheType normsCache; + int32_t _maxDoc; + int32_t _numDocs; + +protected: + CL_NS(util)::ArrayBase* subReaders; + int32_t* starts; // 1st docno for each segment + + void doSetNorm(int32_t n, const TCHAR* field, uint8_t value); + void doUndeleteAll(); + void commitChanges(); + // synchronized + void doClose(); + + // synchronized + void doDelete(const int32_t n); + DirectoryIndexReader* doReopen(SegmentInfos* infos); + + void initialize( CL_NS(util)::ArrayBase* subReaders); + +public: + + /** Construct reading the named set of readers. */ + MultiSegmentReader(CL_NS(store)::Directory* directory, SegmentInfos* sis, bool closeDirectory); + + /** This contructor is only used for {@link #reopen()} */ + CLUCENE_LOCAL_DECL MultiSegmentReader( + CL_NS(store)::Directory* directory, + SegmentInfos* sis, + bool closeDirectory, + CL_NS(util)::ArrayBase* oldReaders, + int32_t* oldStarts, + NormsCacheType* oldNormsCache); + + virtual ~MultiSegmentReader(); + + /** 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. + */ + TermFreqVector* getTermFreqVector(int32_t docNumber, const TCHAR* field=NULL); + CL_NS(util)::ArrayBase* getTermFreqVectors(int32_t docNumber); + void getTermFreqVector(int32_t docNumber, const TCHAR* field, TermVectorMapper* mapper); + void getTermFreqVector(int32_t docNumber, TermVectorMapper* mapper); + bool isOptimized(); + + // synchronized + int32_t numDocs(); + + int32_t maxDoc() const; + + bool document(int32_t n, CL_NS(document)::Document& doc, const CL_NS(document)::FieldSelector* fieldSelector); + + bool isDeleted(const int32_t n); + bool hasDeletions() const; + + // synchronized + uint8_t* norms(const TCHAR* field); + void norms(const TCHAR* field, uint8_t* result); + + TermEnum* terms(); + TermEnum* terms(const Term* term); + + //Returns the document frequency of the current term in the set + int32_t docFreq(const Term* t=NULL); + TermDocs* termDocs(); + TermPositions* termPositions(); + + void getFieldNames (FieldOption fldOption, StringArrayWithDeletor& retarray); + static void getFieldNames(FieldOption fldOption, StringArrayWithDeletor& retarray, CL_NS(util)::ArrayBase* subReaders); + + void setTermInfosIndexDivisor(int32_t indexDivisor); + int32_t getTermInfosIndexDivisor(); + + const CL_NS(util)::ArrayBase* getSubReaders() const; + + friend class MultiReader; + friend class SegmentReader; + friend class DirectoryIndexReader; + + static const char* getClassName(); + const char* getObjectName() const; +}; + + +class MultiTermDocs:public virtual TermDocs { +protected: + CL_NS(util)::ArrayBase* readerTermDocs; + + CL_NS(util)::ArrayBase* subReaders; + const int32_t* starts; + Term* term; + + int32_t base; + size_t pointer; + + TermDocs* current; // == segTermDocs[pointer] + TermDocs* termDocs(const int32_t i); //< internal use only + virtual TermDocs* termDocs(IndexReader* reader); + void init(CL_NS(util)::ArrayBase* subReaders, const int32_t* starts); +public: + MultiTermDocs(); + MultiTermDocs(CL_NS(util)::ArrayBase* 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); + + /* A Possible future optimization could skip entire segments */ + bool skipTo(const int32_t target); + + void close(); + + virtual TermPositions* __asTermPositions(); +}; + + +//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(CL_NS(util)::ArrayBase* 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(bool pointer=true); + + //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() const; + static const char* getClassName(); +}; + + +#ifdef _MSC_VER + #pragma warning(disable : 4250) +#endif +class MultiTermPositions:public MultiTermDocs,public TermPositions { +protected: + TermDocs* termDocs(IndexReader* reader); +public: + MultiTermPositions(CL_NS(util)::ArrayBase* subReaders, const int32_t* s); + virtual ~MultiTermPositions() {}; + int32_t nextPosition(); + + /** + * Not implemented. + * @throws UnsupportedOperationException + */ + int32_t getPayloadLength() const; + + /** + * Not implemented. + * @throws UnsupportedOperationException + */ + uint8_t* getPayload(uint8_t* data); + + /** + * + * @return false + */ + // TODO: Remove warning after API has been finalized + bool isPayloadAvailable() const; + + virtual TermDocs* __asTermDocs(); + virtual TermPositions* __asTermPositions(); +}; + +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/index/_SegmentHeader.h b/Pods/BRCLucene/src/core/CLucene/index/_SegmentHeader.h new file mode 100644 index 0000000..5265d5a --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/index/_SegmentHeader.h @@ -0,0 +1,447 @@ +/*------------------------------------------------------------------------------ + * 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_SegmentHeader_ +#define _lucene_index_SegmentHeader_ + +#include "_SegmentInfos.h" +#include "CLucene/util/BitSet.h" +//#include "CLucene/util/VoidMap.h" +#include "CLucene/store/IndexInput.h" +#include "CLucene/store/IndexOutput.h" +#include "CLucene/index/IndexReader.h" +#include "Term.h" +#include "Terms.h" +#include "_TermInfo.h" +//#include "FieldInfos.h" +#include "_FieldsReader.h" +#include "_TermVector.h" +//#include "IndexReader.h" +#include "_TermInfosReader.h" +#include "_CompoundFile.h" +#include "DirectoryIndexReader.h" +#include "_SkipListReader.h" +#include "CLucene/util/_ThreadLocal.h" + +CL_NS_DEF(index) +class SegmentReader; + +class SegmentTermDocs:public virtual TermDocs { +protected: + const SegmentReader* parent; + CL_NS(store)::IndexInput* freqStream; + int32_t count; + int32_t df; + CL_NS(util)::BitSet* deletedDocs; + int32_t _doc; + int32_t _freq; + +private: + int32_t skipInterval; + int32_t maxSkipLevels; + DefaultSkipListReader* skipListReader; + + int64_t freqBasePointer; + int64_t proxBasePointer; + + int64_t skipPointer; + bool haveSkipped; + +protected: + bool currentFieldStoresPayloads; + +public: + ///\param Parent must be a segment reader + SegmentTermDocs( const SegmentReader* Parent); + virtual ~SegmentTermDocs(); + + virtual void seek(Term* term); + virtual void seek(TermEnum* termEnum); + virtual void seek(const TermInfo* ti,Term* term); + + 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(); + +protected: + virtual void skippingDoc(){} + virtual void skipProx(const int64_t /*proxPointer*/, const int32_t /*payloadLength*/){} +}; + + +class SegmentTermPositions: public SegmentTermDocs, public TermPositions { +private: + CL_NS(store)::IndexInput* proxStream; + int32_t proxCount; + int32_t position; + + // the current payload length + int32_t payloadLength; + // indicates whether the payload of the currend position has + // been read from the proxStream yet + bool needToLoadPayload; + + // these variables are being used to remember information + // for a lazy skip + int64_t lazySkipPointer; + int32_t lazySkipProxCount; + +public: + ///\param Parent must be a segment reader + SegmentTermPositions(const SegmentReader* Parent); + virtual ~SegmentTermPositions(); + +private: + void seek(const TermInfo* ti, Term* term); + +public: + void close(); + + int32_t nextPosition(); +private: + int32_t readDeltaPosition(); + +protected: + void skippingDoc(); + +public: + bool next(); + int32_t read(int32_t* docs, int32_t* freqs, int32_t length); + +protected: + /** Called by super.skipTo(). */ + void skipProx(const int64_t proxPointer, const int32_t _payloadLength); + +private: + void skipPositions( int32_t n ); + void skipPayload(); + + // It is not always neccessary to move the prox pointer + // to a new document after the freq pointer has been moved. + // Consider for example a phrase query with two terms: + // the freq pointer for term 1 has to move to document x + // to answer the question if the term occurs in that document. But + // only if term 2 also matches document x, the positions have to be + // read to figure out if term 1 and term 2 appear next + // to each other in document x and thus satisfy the query. + // So we move the prox pointer lazily to the document + // as soon as positions are requested. + void lazySkip(); + +public: + int32_t getPayloadLength() const; + + uint8_t* getPayload(uint8_t* data); + + bool isPayloadAvailable() const; + +private: + 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); } +}; + + + + +/** + * An IndexReader responsible for reading 1 segment of an index + */ +class SegmentReader: public DirectoryIndexReader { + /** + * 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; + int64_t normSeek; + SegmentReader* _this; + const char* segment; ///< pointer to segment name + volatile int32_t refCount; + bool useSingleNormStream; + bool rollbackDirty; + + + /** Closes the underlying IndexInput for this norm. + * It is still valid to access all other norm properties after close is called. + * @throws IOException + */ + void close(); + public: + DEFINE_MUTEX(THIS_LOCK) + + CL_NS(store)::IndexInput* in; + uint8_t* bytes; + bool dirty; + //Constructor + Norm(CL_NS(store)::IndexInput* instrm, bool useSingleNormStream, int32_t number, int64_t normSeek, SegmentReader* reader, const char* segment); + //Destructor + ~Norm(); + + void reWrite(SegmentInfo* si); + + void incRef(); + void decRef(); + friend class SegmentReader; + + static void doDelete(Norm* norm); + }; + friend class SegmentReader::Norm; + + //Holds the name of the segment that is being read + std::string segment; + SegmentInfo* si; + int32_t readBufferSize; + + //Indicates if there are documents marked as deleted + bool deletedDocsDirty; + bool normsDirty; + bool undeleteAll; + + bool rollbackDeletedDocsDirty; + bool rollbackNormsDirty; + bool rollbackUndeleteAll; + + + //Holds all norms for all fields in the segment + typedef CL_NS(util)::CLHashtable NormsType; + NormsType _norms; + + uint8_t* ones; + uint8_t* fakeNorms(); + + // optionally used for the .nrm file shared by multiple norms + CL_NS(store)::IndexInput* singleNormStream; + + // Compound File Reader when based on a compound file segment + CompoundFileReader* cfsReader; + CompoundFileReader* storeCFSReader; + + ///Reads the Field Info file + FieldsReader* fieldsReader; + TermVectorsReader* termVectorsReaderOrig; + CL_NS(util)::ThreadLocal >termVectorsLocal; + + void initialize(SegmentInfo* si, int32_t readBufferSize, bool doOpenStores, bool doingReopen); + + /** + * Create a clone from the initial TermVectorsReader and store it in the ThreadLocal. + * @return TermVectorsReader + */ + TermVectorsReader* getTermVectorsReader(); + + FieldsReader* getFieldsReader(); + FieldInfos* getFieldInfos(); + +protected: + ///Marks document docNum as deleted + void doDelete(const int32_t docNum); + void doUndeleteAll(); + void commitChanges(); + 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); + + /** + * Decrements the RC of the norms this reader is using + */ + void decRefNorms(); + + + DirectoryIndexReader* doReopen(SegmentInfos* infos); + +public: + /** + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + static SegmentReader* get(SegmentInfo* si, bool doOpenStores=true); + + /** + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + static SegmentReader* get(SegmentInfo* si, int32_t readBufferSize, bool doOpenStores=true); + + /** + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + static SegmentReader* get(SegmentInfos* sis, SegmentInfo* si, bool closeDir); + + /** + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + * @param readBufferSize defaults to BufferedIndexInput::BUFFER_SIZE + */ + static SegmentReader* get(CL_NS(store)::Directory* dir, SegmentInfo* si, + SegmentInfos* sis, + bool closeDir, bool ownDir, + int32_t readBufferSize=-1, + bool doOpenStores=true); + + + + SegmentReader(); + ///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); + + ///Returns all file names managed by this SegmentReader + void files(std::vector& retarray); + ///Returns an enumeration of all the Terms and TermInfos in the set. + TermEnum* terms(); + ///Returns an enumeration of terms starting at or after the named term t + TermEnum* terms(const Term* t); + + ///Gets the document identified by n + bool document(int32_t n, CL_NS(document)::Document& doc, const CL_NS(document)::FieldSelector* fieldSelector); + + ///Checks if the n-th document has been marked deleted + bool isDeleted(const int32_t n); + + ///Returns an unpositioned TermDocs enumerator. + TermDocs* termDocs(); + ///Returns an unpositioned TermPositions enumerator. + TermPositions* termPositions(); + + ///Returns the number of documents which contain the term t + int32_t docFreq(const Term* t); + + ///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; + + + void setTermInfosIndexDivisor(int32_t indexDivisor); + + int32_t getTermInfosIndexDivisor(); + + ///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 + std::string SegmentName(const char* ext, const int32_t x=-1); + ///Creates a filename in buffer by concatenating segment with ext and x + void SegmentName(char* buffer,int32_t bufferLen,const char* ext, const int32_t x=-1 ); + + /** + * @see IndexReader#getFieldNames(IndexReader.FieldOption fldOption) + */ + void getFieldNames(FieldOption fldOption, 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); + + void getTermFreqVector(int32_t docNumber, const TCHAR* field, TermVectorMapper* mapper); + void getTermFreqVector(int32_t docNumber, TermVectorMapper* mapper); + + /** 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 + */ + CL_NS(util)::ArrayBase* getTermFreqVectors(int32_t docNumber); + + static const char* getClassName(); + const char* getObjectName() const; + + // for testing only + bool normsClosed(); + +private: + //Open all norms files for all fields + void openNorms(CL_NS(store)::Directory* cfsDir, int32_t readBufferSize); + + ///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); + + void loadDeletedDocs(); + SegmentReader* reopenSegment(SegmentInfo* si); + + /** Returns the field infos of this segment */ + FieldInfos* fieldInfos(); + + /** + * Return the name of the segment this reader is reading. + */ + const char* getSegmentName(); + + /** + * Return the SegmentInfo of the segment this reader is reading. + */ + SegmentInfo* getSegmentInfo(); + void setSegmentInfo(SegmentInfo* info); + void startCommit(); + void rollbackCommit(); + + //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; + friend class MultiSegmentReader; + friend class SegmentMerger; +}; + +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/index/_SegmentInfos.h b/Pods/BRCLucene/src/core/CLucene/index/_SegmentInfos.h new file mode 100644 index 0000000..e79d9e5 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/index/_SegmentInfos.h @@ -0,0 +1,532 @@ +/*------------------------------------------------------------------------------ +* 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_SegmentInfos_ +#define _lucene_index_SegmentInfos_ + + +//#include "IndexReader.h" +#include "CLucene/util/Misc.h" +#include "_IndexFileNames.h" +CL_CLASS_DEF(store,Directory) +CL_CLASS_DEF(store,IndexInput) +CL_CLASS_DEF(store,IndexOutput) + +CL_NS_DEF(index) + + class SegmentInfo :LUCENE_BASE{ + public: + + LUCENE_STATIC_CONSTANT(int32_t, NO = -1); // e.g. no norms; no deletes; + LUCENE_STATIC_CONSTANT(int32_t, YES = 1); // e.g. have norms; have deletes; + LUCENE_STATIC_CONSTANT(int32_t, CHECK_DIR = 0); // e.g. must check dir to see if there are norms/deletions + LUCENE_STATIC_CONSTANT(int32_t, WITHOUT_GEN = 0); // a file name that has no GEN in it. + + std::string name; // unique name in dir + int32_t docCount; // number of docs in seg + CL_NS(store)::Directory* dir; // where segment resides + + private: + bool preLockless; // true if this is a segments file written before + // lock-less commits (2.1) + + int64_t delGen; // current generation of del file; NO if there + // are no deletes; CHECK_DIR if it's a pre-2.1 segment + // (and we must check filesystem); YES or higher if + // there are deletes at generation N + + CL_NS(util)::ValueArray normGen; // current generation of each field's norm file. + // If this array is null, for lockLess this means no + // separate norms. For preLockLess this means we must + // check filesystem. If this array is not null, its + // values mean: NO says this field has no separate + // norms; CHECK_DIR says it is a preLockLess segment and + // filesystem must be checked; >= YES says this field + // has separate norms with the specified generation + + int8_t isCompoundFile; // NO if it is not; YES if it is; CHECK_DIR if it's + // pre-2.1 (ie, must check file system to see + // if .cfs and .nrm exist) + + bool hasSingleNormFile; // true if this segment maintains norms in a single file; + // false otherwise + // this is currently false for segments populated by DocumentWriter + // and true for newly created merged segments (both + // compound and non compound). + + private: + + std::vector _files; // cached list of files that this segment uses + // in the Directory + + int64_t _sizeInBytes; // total byte size of all of our files (computed on demand) + + int32_t docStoreOffset; // if this segment shares stored fields & vectors, this + // offset is where in that file this segment's docs begin + std::string docStoreSegment; // name used to derive fields/vectors file we share with + // other segments + // This string is being interned. There might be a way around this, + // and if found, this would greatly improve perfomance. + + bool docStoreIsCompoundFile; // whether doc store files are stored in compound file (*.cfx) + + /* Called whenever any change is made that affects which + * files this segment has. */ + void clearFiles(); + + void addIfExists(std::vector& files, const std::string& fileName); + + public: + SegmentInfo(const char* _name, const int32_t _docCount, CL_NS(store)::Directory* _dir, + bool _isCompoundFile=SegmentInfo::CHECK_DIR, + bool _hasSingleNormFile=false, + int32_t _docStoreOffset = -1, + const char* _docStoreSegment = NULL, + bool _docStoreIsCompoundFile = false); + + /** + * Construct a new SegmentInfo instance by reading a + * previously saved SegmentInfo from input. + * + * @param dir directory to load from + * @param format format of the segments info file + * @param input input handle to read segment info from + */ + SegmentInfo(CL_NS(store)::Directory* dir, int32_t format, CL_NS(store)::IndexInput* input); + + ~SegmentInfo(); + + void setNumFields(const int32_t numFields); + int64_t sizeInBytes(); + bool hasDeletions() const; + + void advanceDelGen(); + void clearDelGen(); + + SegmentInfo* clone (); + + std::string getDelFileName() const; + + /** + * Returns true if this field for this segment has saved a separate norms file (__N.sX). + * + * @param fieldNumber the field index to check + */ + bool hasSeparateNorms(const int32_t fieldNumber) const; + + /** + * Returns true if any fields in this segment have separate norms. + */ + bool hasSeparateNorms() const; + + /** + * Get the file name for the norms file for this field. + * + * @param number field index + */ + std::string getNormFileName(const int32_t number) const; + + /** + * Increment the generation count for the norms file for + * this field. + * + * @param fieldIndex field whose norm file will be rewritten + */ + void advanceNormGen(const int32_t fieldIndex); + + /** + * Mark whether this segment is stored as a compound file. + * + * @param isCompoundFile true if this is a compound file; + * else, false + */ + void setUseCompoundFile(const bool isCompoundFile); + + /** + * Returns true if this segment is stored as a compound + * file; else, false. + */ + bool getUseCompoundFile() const; + + /* + * Return all files referenced by this SegmentInfo. The + * returns List is a locally cached List so you should not + * modify it. + */ + const std::vector& files(); + + /** + * Copy everything from src SegmentInfo into our instance. + */ + void reset(const SegmentInfo* src); + + /** + * Save this segment's info. + */ + void write(CL_NS(store)::IndexOutput* output); + + int32_t getDocStoreOffset() const; + + bool getDocStoreIsCompoundFile() const; + + void setDocStoreIsCompoundFile(const bool v); + + /** + * Returns a reference to docStoreSegment + */ + const std::string& getDocStoreSegment() const; + + void setDocStoreOffset(const int32_t offset); + + /** We consider another SegmentInfo instance equal if it + * has the same dir and same name. */ + bool equals(const SegmentInfo* obj); + + ///Gets the Directory where the segment resides + CL_NS(store)::Directory* getDir() const{ return dir; } //todo: since dir is public, consider removing this function + + friend class SegmentReader; + + /** Used for debugging */ + std::string segString(CL_NS(store)::Directory* dir); + }; + + typedef CL_NS(util)::CLVector > 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, + // + //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, SegCount + // + //Format, SegCount, SegSize --> UInt32 + // + //Format and Version have not been implemented yet + + class IndexReader; + + class SegmentInfos: LUCENE_BASE { + public: + DEFINE_MUTEX(THIS_LOCK) + + /** The file format version, a negative number. */ + /* Works since counter, the old 1st entry, is always >= 0 */ + LUCENE_STATIC_CONSTANT(int32_t,FORMAT=-1); + + /** This format adds details used for lockless commits. It differs + * slightly from the previous format in that file names + * are never re-used (write once). Instead, each file is + * written to the next generation. For example, + * segments_1, segments_2, etc. This allows us to not use + * a commit lock. See file + * formats for details. + */ + LUCENE_STATIC_CONSTANT(int32_t,FORMAT_LOCKLESS=-2); + + /** This format adds a "hasSingleNormFile" flag into each segment info. + * See LUCENE-756 + * for details. + */ + LUCENE_STATIC_CONSTANT(int32_t,FORMAT_SINGLE_NORM_FILE=-3); + + /** This format allows multiple segments to share a single + * vectors and stored fields file. */ + LUCENE_STATIC_CONSTANT(int32_t,FORMAT_SHARED_DOC_STORE=-4); + + private: + /* This must always point to the most recent file format. */ + LUCENE_STATIC_CONSTANT(int32_t,CURRENT_FORMAT=FORMAT_SHARED_DOC_STORE); + + public: + int32_t counter; // used to name new segments + + /** + * 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; + + private: + int64_t generation; // generation of the "segments_N" for the next commit + int64_t lastGeneration; // generation of the "segments_N" file we last successfully read + // or wrote; this is normally the same as generation except if + // there was an IOException that had interrupted a commit + + /** + * If non-null, information about loading segments_N files + * will be printed here. @see #setInfoStream. + */ + static std::ostream* infoStream; + + LUCENE_STATIC_CONSTANT(int32_t,defaultGenFileRetryCount=10); + LUCENE_STATIC_CONSTANT(int32_t,defaultGenFileRetryPauseMsec=50); + LUCENE_STATIC_CONSTANT(int32_t,defaultGenLookaheadCount=10); + + segmentInfosType infos; + + friend class IndexWriter; //allow IndexWriter to use counter + + static void message(const char* _message, ...); + + public: + SegmentInfos(bool deleteMembers=true, int32_t reserveCount=0); + ~SegmentInfos(); + + //Returns a reference to the i-th SegmentInfo in the list. + SegmentInfo* info(int32_t i) const; + + /** + * Get the generation (N) of the current segments_N file + * from a list of files. + * + * @param files -- array of file names to check + */ + static int64_t getCurrentSegmentGeneration( std::vector& files ); + + /** + * Get the generation (N) of the current segments_N file + * in the directory. + * + * @param directory -- directory to search for the latest segments_N file + */ + static int64_t getCurrentSegmentGeneration( const CL_NS(store)::Directory* directory ); + + /** + * Get the filename of the current segments_N file + * from a list of files. + * + * @param files -- array of file names to check + */ + static std::string getCurrentSegmentFileName( std::vector& files ); + + /** + * Get the filename of the current segments_N file + * in the directory. + * + * @param directory -- directory to search for the latest segments_N file + */ + static std::string getCurrentSegmentFileName( CL_NS(store)::Directory* directory ); + + /** + * Get the segments_N filename in use by this segment infos. + */ + std::string getCurrentSegmentFileName(); + + /** + * Parse the generation off the segments file name and + * return it. + */ + static int64_t generationFromSegmentsFileName( const char* fileName ); + + /** + * Get the next segments_N filename that will be written. + */ + std::string getNextSegmentFileName(); + + /* public vector-like operations */ + //delete and clears objects 'from' from to 'to' + void clearto(size_t to, size_t end); + //count of segment infos + int32_t size() const; + /** add a segment info + * @param pos position to add the info at. -1 for last position + */ + void add(SegmentInfo* info, int32_t pos=-1); + SegmentInfo* elementAt(int32_t pos); + void setElementAt(SegmentInfo* si, int32_t pos); + void clear(); + + void insert(SegmentInfos* infos, bool takeMemory); + void insert(SegmentInfo* info); + int32_t indexOf(const SegmentInfo* info) const; + void range(size_t from, size_t to, SegmentInfos& ret) const; + void remove(size_t index, bool dontDelete=false); + + /** + * Read a particular segmentFileName. Note that this may + * throw an IOException if a commit is in process. + * + * @param directory -- directory containing the segments file + * @param segmentFileName -- segment file to load + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + void read(CL_NS(store)::Directory* directory, const char* segmentFileName); + + /** + * This version of read uses the retry logic (for lock-less + * commits) to find the right segments file to load. + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + void read(CL_NS(store)::Directory* directory); + + //Writes a new segments file based upon the SegmentInfo instances it manages + //note: still does not support lock-less writes (still pre-2.1 format) + void write(CL_NS(store)::Directory* directory); + + /** + * Returns a copy of this instance, also copying each + * SegmentInfo. + */ + SegmentInfos* clone() const; + + /** + * version number when this SegmentInfos was generated. + */ + int64_t getVersion() const; + int64_t getGeneration() const; + int64_t getLastGeneration() const; + + /** + * Current version number from segments file. + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + static int64_t readCurrentVersion(CL_NS(store)::Directory* directory); + + + /** If non-null, information about retries when loading + * the segments file will be printed to this. + */ + static void setInfoStream(std::ostream* infoStream); + + /** + * @see #setInfoStream + */ + static std::ostream* getInfoStream(); + + /** + * Advanced: set how many times to try loading the + * segments.gen file contents to determine current segment + * generation. This file is only referenced when the + * primary method (listing the directory) fails. + */ + //static void setDefaultGenFileRetryCount(const int32_t count); + /** + * @see #setDefaultGenFileRetryCount + */ + static int32_t getDefaultGenFileRetryCount(); + + /** + * Advanced: set how many milliseconds to pause in between + * attempts to load the segments.gen file. + */ + //static void setDefaultGenFileRetryPauseMsec(const int32_t msec); + /** + * @see #setDefaultGenFileRetryPauseMsec + */ + static int32_t getDefaultGenFileRetryPauseMsec(); + + /** + * Advanced: set how many times to try incrementing the + * gen when loading the segments file. This only runs if + * the primary (listing directory) and secondary (opening + * segments.gen file) methods fail to find the segments + * file. + */ + //static void setDefaultGenLookaheadCount(const int32_t count); + /** + * @see #setDefaultGenLookaheadCount + */ + static int32_t getDefaultGenLookahedCount(); + + class _FindSegmentsFile: LUCENE_BASE{ + protected: + const char* fileDirectory; + CL_NS(store)::Directory* directory; + + void doRun(); + virtual bool tryDoBody(const char* segmentFileName, CLuceneError& ret_err) = 0; + }; + + /** + * Utility class for executing code that needs to do + * something with the current segments file. This is + * necessary with lock-less commits because from the time + * you locate the current segments file name, until you + * actually open it, read its contents, or check modified + * time, etc., it could have been deleted due to a writer + * commit finishing. + */ + template + class FindSegmentsFile: public _FindSegmentsFile{ + protected: + virtual RET doBody(const char* segmentFileName) = 0; + RET result; + + //catch only IO errors, return true on success... + bool tryDoBody(const char* segmentFileName, CLuceneError& ret_err){ + try{ + result = doBody(segmentFileName); + return true; + } catch (CLuceneError& err) { + result = 0; + ret_err.set(err.number(),err.what()); + } + return false; + } + public: + FindSegmentsFile( CL_NS(store)::Directory* dir ){ + this->directory = dir; + this->fileDirectory = NULL; + this->result = 0; + } + FindSegmentsFile( const char* dir ){ + this->directory = NULL; + this->fileDirectory = dir; + this->result = 0; + } + ~FindSegmentsFile(){ + } + + RET run(){ + doRun(); + return result; + }; + }; + //friend class SegmentInfos::FindSegmentsFile; + + class FindSegmentsVersion: public FindSegmentsFile { + public: + FindSegmentsVersion( CL_NS(store)::Directory* dir ); + FindSegmentsVersion( const char* dir ); + int64_t doBody( const char* segmentFileName ); + }; + friend class SegmentInfos::FindSegmentsVersion; + + class FindSegmentsRead: public FindSegmentsFile { + SegmentInfos* _this; + public: + FindSegmentsRead( CL_NS(store)::Directory* dir, SegmentInfos* _this ); + FindSegmentsRead( const char* dir, SegmentInfos* _this ); + bool doBody( const char* segmentFileName ); + }; + friend class SegmentInfos::FindSegmentsRead; + }; +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/index/_SegmentMergeInfo.h b/Pods/BRCLucene/src/core/CLucene/index/_SegmentMergeInfo.h new file mode 100644 index 0000000..87b05cb --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/index/_SegmentMergeInfo.h @@ -0,0 +1,48 @@ +/*------------------------------------------------------------------------------ +* 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_ + + +//#include "SegmentTermEnum.h" +//#include "SegmentHeader.h" +#include "Terms.h" + +CL_NS_DEF(index) +class IndexReader; + +class SegmentMergeInfo:LUCENE_BASE { +private: + 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/Pods/BRCLucene/src/core/CLucene/index/_SegmentMergeQueue.h b/Pods/BRCLucene/src/core/CLucene/index/_SegmentMergeQueue.h new file mode 100644 index 0000000..a95a001 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/index/_SegmentMergeQueue.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_index_SegmentMergeQueue_ +#define _lucene_index_SegmentMergeQueue_ + +#include "CLucene/util/PriorityQueue.h" +//#include "SegmentMergeInfo.h" + +CL_NS_DEF(index) + class SegmentMergeQueue :public CL_NS(util)::PriorityQueue > { + 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/Pods/BRCLucene/src/core/CLucene/index/_SegmentMerger.h b/Pods/BRCLucene/src/core/CLucene/index/_SegmentMerger.h new file mode 100644 index 0000000..da24e1d --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/index/_SegmentMerger.h @@ -0,0 +1,198 @@ +/*------------------------------------------------------------------------------ +* 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_SegmentMerger_ +#define _lucene_index_SegmentMerger_ + + +CL_CLASS_DEF(store,Directory) +#include "CLucene/store/_RAMDirectory.h" +#include "_SegmentMergeInfo.h" +#include "_SegmentMergeQueue.h" +#include "IndexReader.h" +#include "_TermInfosWriter.h" +#include "Terms.h" +#include "MergePolicy.h" + +CL_NS_DEF(index) +class DefaultSkipListWriter; +/** +* 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. +*

+* If the compoundFile flag is set, then the segments will be merged into a compound file. +* +* +* @see #merge +* @see #add +*/ +class SegmentMerger:LUCENE_BASE { + CL_NS(util)::ValueArray payloadBuffer; + + //Directory of the segment + CL_NS(store)::Directory* directory; + //name of the new segment + std::string segment; + //Set of IndexReaders + CL_NS(util)::CLVector > readers; + //Field Infos for t he FieldInfo instances of all fields + FieldInfos* fieldInfos; + + int32_t mergedDocs; + + // Whether we should merge doc stores (stored fields and + // vectors files). When all segments we are merging + // already share the same doc store files, we don't need + // to merge the doc stores. + bool mergeDocStores; + + /** Maximum number of contiguous documents to bulk-copy + when merging stored fields */ + static int32_t MAX_RAW_MERGE_DOCS; + + //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; + int32_t maxSkipLevels; + DefaultSkipListWriter* skipListWriter; + +public: + static const uint8_t NORMS_HEADER[]; + static const int NORMS_HEADER_length; + + /** + * + * @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 char* name, MergePolicy::OneMerge* merge ); + + SegmentMerger(IndexWriter* writer, std::string name, MergePolicy::OneMerge* merge); + + void init(); + + //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. + * @param mergeDocStores if false, we will not merge the + * stored fields nor vectors files + * @return The number of documents that were merged + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + int32_t merge(bool mergeDocStores); + /** + * close all IndexReaders that have been added. + * Should not be called before merge(). + * @throws IOException + */ + void closeReaders(); + + + class CheckAbort { + private: + float_t workCount; + MergePolicy::OneMerge* merge; + CL_NS(store)::Directory* dir; + public: + CheckAbort(MergePolicy::OneMerge* merge, CL_NS(store)::Directory* dir); + + /** + * Records the fact that roughly units amount of work + * have been done since this method was last called. + * When adding time-consuming code into SegmentMerger, + * you should test different values for units to ensure + * that the time in between calls to merge.checkAborted + * is up to ~ 1 second. + */ + void work(float_t units); + }; + +private: + CheckAbort* checkAbort; + + void addIndexed(IndexReader* reader, FieldInfos* fieldInfos, StringArrayWithDeletor& names, + bool storeTermVectors, bool storePositionWithTermVector, + bool storeOffsetWithTermVector, bool storePayloads); + + /** + * Merge the fields of all segments + * @return The number of documents in all of the readers + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + 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 smis + * contains segments that are positioned at the same term. N + * 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 + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + int32_t mergeTermInfo( SegmentMergeInfo** smis, int32_t n); + + /** 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 + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + int32_t appendPostings(SegmentMergeInfo** smis, int32_t n); + + //Merges the norms for all fields + void mergeNorms(); + + void createCompoundFile(const char* filename, std::vector* files=NULL); + friend class IndexWriter; //allow IndexWriter to use createCompoundFile +}; +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/index/_SegmentTermEnum.h b/Pods/BRCLucene/src/core/CLucene/index/_SegmentTermEnum.h new file mode 100644 index 0000000..a255908 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/index/_SegmentTermEnum.h @@ -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. +------------------------------------------------------------------------------*/ +#ifndef _lucene_index_SegmentTermEnum_ +#define _lucene_index_SegmentTermEnum_ + + +//#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; + int32_t maxSkipLevels; + + 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 the current term. + */ + Term* term(bool pointer=true); + + /** + * 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() const; + static const char* getClassName(); + +private: + /** + * Reads the next term in the enumeration + */ + Term* readTerm(Term* reuse); + /** + * Instantiate a buffer of length length+1 + * TODO: deprecate this... + */ + void growBuffer(const uint32_t length, bool force_copy); + +}; +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/index/_SkipListReader.h b/Pods/BRCLucene/src/core/CLucene/index/_SkipListReader.h new file mode 100644 index 0000000..b7bf218 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/index/_SkipListReader.h @@ -0,0 +1,181 @@ +/*------------------------------------------------------------------------------ +* 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_SkipListReader_ +#define _lucene_index_SkipListReader_ + +#include "CLucene/store/IndexInput.h" +#include "CLucene/util/Array.h" + +CL_NS_DEF(index) + +/** + * This abstract class reads skip lists with multiple levels. + * + * See {@link MultiLevelSkipListWriter} for the information about the encoding + * of the multi level skip lists. + * + * Subclasses must implement the abstract method {@link #readSkipData(int, IndexInput)} + * which defines the actual format of the skip data. + */ +class MultiLevelSkipListReader : LUCENE_BASE { +protected: + // number of levels in this skip list + int32_t numberOfSkipLevels; + + // the maximum number of skip levels possible for this index + int32_t maxNumberOfSkipLevels; +private: + // Expert: defines the number of top skip levels to buffer in memory. + // Reducing this number results in less memory usage, but possibly + // slower performance due to more random I/Os. + // Please notice that the space each level occupies is limited by + // the skipInterval. The top level can not contain more than + // skipLevel entries, the second top level can not contain more + // than skipLevel^2 entries and so forth. + int32_t numberOfLevelsToBuffer; + + int32_t docCount; + bool haveSkipped; + + CL_NS(util)::ObjectArray skipStream; // skipStream for each level + int64_t* skipPointer; // the start pointer of each skip level + int32_t* skipInterval; // skipInterval of each level + int32_t* numSkipped; // number of docs skipped per level + + int32_t* skipDoc; // doc id of current skip entry per level + int32_t lastDoc; // doc id of last read skip entry with docId <= target + int64_t* childPointer; // child pointer of current skip entry per level + int64_t lastChildPointer; // childPointer of last read skip entry with docId <= target + + bool inputIsBuffered; + +public: + /** + * @memory consumes _skipStream + */ + MultiLevelSkipListReader(CL_NS(store)::IndexInput* _skipStream, const int32_t maxSkipLevels, const int32_t _skipInterval); + virtual ~MultiLevelSkipListReader(); + + /** Returns the id of the doc to which the last call of {@link #skipTo(int)} + * has skipped. */ + int32_t getDoc() const; + + /** Skips entries to the first beyond the current whose document number is + * greater than or equal to target. Returns the current doc count. + */ + int32_t skipTo(const int32_t target); + +private: + bool loadNextSkip(const int32_t level); + +protected: + /** Seeks the skip entry on the given level */ + virtual void seekChild(const int32_t level); + + void close(); + + /** initializes the reader */ + void init(const int64_t _skipPointer, const int32_t df); + +private: + /** Loads the skip levels */ + void loadSkipLevels(); + +protected: + /** + * Subclasses must implement the actual skip data encoding in this method. + * + * @param level the level skip data shall be read from + * @param skipStream the skip stream to read from + */ + virtual int32_t readSkipData(const int32_t level, CL_NS(store)::IndexInput* skipStream) = 0; + + /** Copies the values of the last read skip entry on this level */ + virtual void setLastSkipData(const int32_t level); + +protected: + /** used to buffer the top skip levels */ + class SkipBuffer : public CL_NS(store)::IndexInput { + private: + uint8_t* data; + int64_t pointer; + int32_t pos; + size_t _datalength; + + public: + SkipBuffer(CL_NS(store)::IndexInput* input, const int32_t length); + virtual ~SkipBuffer(); + + private: + void close(); + + int64_t getFilePointer() const; + + int64_t length() const; + + uint8_t readByte(); + + /* Make sure b is passed after the offset has been calculated into it, if necessary! */ + void readBytes(uint8_t* b, const int32_t len); + + void seek(const int64_t _pos); + + SkipBuffer(const SkipBuffer& other); + CL_NS(store)::IndexInput* clone() const; + + const char* getDirectoryType() const; + const char* getObjectName() const; + static const char* getClassName(); + }; +}; + + +/** + * Implements the skip list reader for the default posting list format + * that stores positions and payloads. + * + */ +class DefaultSkipListReader: public MultiLevelSkipListReader { +private: + bool currentFieldStoresPayloads; + int64_t* freqPointer; + int64_t* proxPointer; + int32_t* payloadLength; + + int64_t lastFreqPointer; + int64_t lastProxPointer; + int32_t lastPayloadLength; + +public: + DefaultSkipListReader(CL_NS(store)::IndexInput* _skipStream, const int32_t maxSkipLevels, const int32_t _skipInterval); + virtual ~DefaultSkipListReader(); + + void init(const int64_t _skipPointer, const int64_t freqBasePointer, const int64_t proxBasePointer, const int32_t df, const bool storesPayloads); + + /** Returns the freq pointer of the doc to which the last call of + * {@link MultiLevelSkipListReader#skipTo(int)} has skipped. */ + int64_t getFreqPointer() const; + + /** Returns the prox pointer of the doc to which the last call of + * {@link MultiLevelSkipListReader#skipTo(int)} has skipped. */ + int64_t getProxPointer() const; + + /** Returns the payload length of the payload stored just before + * the doc to which the last call of {@link MultiLevelSkipListReader#skipTo(int)} + * has skipped. */ + int32_t getPayloadLength() const; + +protected: + void seekChild(const int32_t level); + + void setLastSkipData(const int32_t level); + + int32_t readSkipData(const int32_t level, CL_NS(store)::IndexInput* _skipStream); +}; + +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/index/_SkipListWriter.h b/Pods/BRCLucene/src/core/CLucene/index/_SkipListWriter.h new file mode 100644 index 0000000..4808a8a --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/index/_SkipListWriter.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_index_SkipListWriter_ +#define _lucene_index_SkipListWriter_ + +#include "CLucene/store/IndexInput.h" +#include "CLucene/store/_RAMDirectory.h" +#include "CLucene/util/Array.h" + +CL_NS_DEF(index) + +/** + * This abstract class writes skip lists with multiple levels. + * + * Example for skipInterval = 3: + * c (skip level 2) + * c c c (skip level 1) + * x x x x x x x x x x (skip level 0) + * d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d (posting list) + * 3 6 9 12 15 18 21 24 27 30 (df) + * + * d - document + * x - skip data + * c - skip data with child pointer + * + * Skip level i contains every skipInterval-th entry from skip level i-1. + * Therefore the number of entries on level i is: floor(df / ((skipInterval ^ (i + 1))). + * + * Each skip entry on a level i>0 contains a pointer to the corresponding skip entry in list i-1. + * This guarantess a logarithmic amount of skips to find the target document. + * + * While this class takes care of writing the different skip levels, + * subclasses must define the actual format of the skip data. + * + */ +class MultiLevelSkipListWriter { +private: + // the skip interval in the list with level = 0 + int32_t skipInterval; + + // for every skip level a different buffer is used + CL_NS(util)::ArrayBase* skipBuffer; + + + /** + * Writes the current skip data to the buffers. The current document frequency determines + * the max level is skip data is to be written to. + * + * @param df the current document frequency + * @throws IOException + */ + void bufferSkip(int32_t df); + + /** + * Writes the buffered skip lists to the given output. + * + * @param output the IndexOutput the skip lists shall be written to + * @return the pointer the skip list starts + */ + int64_t writeSkip(CL_NS(store)::IndexOutput* output); + +protected: + // number of levels in this skip list + int32_t numberOfSkipLevels; + + MultiLevelSkipListWriter(int32_t skipInterval, int32_t maxSkipLevels, int32_t df); + virtual ~MultiLevelSkipListWriter(); + void init(); + + void resetSkip(); + + /** + * Subclasses must implement the actual skip data encoding in this method. + * + * @param level the level skip data shall be writting for + * @param skipBuffer the skip buffer to write to + */ + virtual void writeSkipData(int32_t level, CL_NS(store)::IndexOutput* skipBuffer) = 0; + + friend class SegmentMerger; + friend class DocumentsWriter; +}; + +/** + * Implements the skip list writer for the default posting list format + * that stores positions and payloads. + * + */ +class DefaultSkipListWriter: public MultiLevelSkipListWriter { +private: + int32_t* lastSkipDoc; + int32_t* lastSkipPayloadLength; + int64_t* lastSkipFreqPointer; + int64_t* lastSkipProxPointer; + + CL_NS(store)::IndexOutput* freqOutput; + CL_NS(store)::IndexOutput* proxOutput; + + int32_t curDoc; + bool curStorePayloads; + int32_t curPayloadLength; + int64_t curFreqPointer; + int64_t curProxPointer; + + /** + * Sets the values for the current skip data. + */ + void setSkipData(int32_t doc, bool storePayloads, int32_t payloadLength); + +protected: + void resetSkip(); + + void writeSkipData(int32_t level, CL_NS(store)::IndexOutput* skipBuffer); +public: + + DefaultSkipListWriter(int32_t skipInterval, int32_t numberOfSkipLevels, int32_t docCount, + CL_NS(store)::IndexOutput* freqOutput, CL_NS(store)::IndexOutput* proxOutput); + ~DefaultSkipListWriter(); + + friend class SegmentMerger; + friend class DocumentsWriter; +}; + + +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/index/_Term.h b/Pods/BRCLucene/src/core/CLucene/index/_Term.h new file mode 100644 index 0000000..28baf13 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/index/_Term.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_index_internal_Term_ +#define _lucene_index_internal_Term_ + +#include "Term.h" +#include + +CL_NS_DEF(index) + + +class Term_Equals:public CL_NS_STD(binary_function) +{ +public: + bool operator()( const Term* val1, const Term* val2 ) const{ + return val1->equals(val2); + } +}; + +class Term_Compare:LUCENE_BASE, public CL_NS(util)::Compare::_base // +{ +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/Pods/BRCLucene/src/core/CLucene/index/_TermInfo.h b/Pods/BRCLucene/src/core/CLucene/index/_TermInfo.h new file mode 100644 index 0000000..7404117 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/index/_TermInfo.h @@ -0,0 +1,52 @@ +/*------------------------------------------------------------------------------ +* 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_TermInfo +#define _lucene_index_TermInfo + + +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(const int32_t df, const int64_t fp, const 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(const int32_t docFreq, const int64_t freqPointer, const 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/Pods/BRCLucene/src/core/CLucene/index/_TermInfosReader.h b/Pods/BRCLucene/src/core/CLucene/index/_TermInfosReader.h new file mode 100644 index 0000000..f7fafaf --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/index/_TermInfosReader.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_index_TermInfosReader_ +#define _lucene_index_TermInfosReader_ + + +//#include "Terms.h" +#include "_SegmentTermEnum.h" +CL_CLASS_DEF(store,Directory) +//CL_CLASS_DEF(store,IndexInput) +#include "CLucene/util/_ThreadLocal.h" +//#include "FieldInfos.h" +//#include "TermInfo.h" +//#include "TermInfosWriter.h" + +CL_NS_DEF(index) +/** This stores a monotonically increasing set of pairs in a +* Directory. Pairs are accessed either by Term or by ordinal position the +* set. +* +* PORT STATUS: 365707 (jlucene 1.9) -- started port to JLucene 2.3.2 +*/ + class TermInfosReader :LUCENE_BASE{ + private: + CL_NS(store)::Directory* directory; + const char* segment; + FieldInfos* fieldInfos; + + CL_NS(util)::ThreadLocal > enumerators; + + SegmentTermEnum* getEnum(); + SegmentTermEnum* origEnum; + SegmentTermEnum* indexEnum; + int64_t _size; + + Term* indexTerms; //note: this is a list of objects, not arrays! + int32_t indexTermsLength; + TermInfo* indexInfos; + int64_t* indexPointers; + + int32_t indexDivisor; + int32_t totalIndexInterval; + + DEFINE_MUTEX(THIS_LOCK) + + public: + /** + * Constructor. + * Reads the TermInfos file (.tis) and eventually the Term Info Index file (.tii) + */ + TermInfosReader(CL_NS(store)::Directory* dir, const char* segment, FieldInfos* fis, + const int32_t readBufferSize = CL_NS(store)::BufferedIndexInput::BUFFER_SIZE); + ~TermInfosReader(); + + int32_t getSkipInterval() const; + int32_t getMaxSkipLevels() const; + + /** + *

Sets the indexDivisor, which subsamples the number + * of indexed terms loaded into memory. This has a + * similar effect as {@link + * IndexWriter#setTermIndexInterval} except that setting + * must be done at indexing time while this setting can be + * set per reader. When set to N, then one in every + * N*termIndexInterval terms in the index is loaded into + * memory. By setting this to a value > 1 you can reduce + * memory usage, at the expense of higher latency when + * loading a TermInfo. The default value is 1.

+ * + * NOTE: you must call this before the term + * index is loaded. If the index is already loaded, + * an IllegalStateException is thrown. + * + * @throws IllegalStateException if the term index has + * already been loaded into memory. + */ + void setIndexDivisor(const int32_t _indexDivisor); + + /** Returns the indexDivisor. + * @see #setIndexDivisor + */ + int32_t getIndexDivisor() const; + + /** Close the enumeration of TermInfos */ + void close(); + + /** Returns the number of term/value pairs in the set. */ + int64_t size() const; + + /** + * 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, or null. */ + 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 or equal to 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 or -1. */ + 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/Pods/BRCLucene/src/core/CLucene/index/_TermInfosWriter.h b/Pods/BRCLucene/src/core/CLucene/index/_TermInfosWriter.h new file mode 100644 index 0000000..7ddf5c3 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/index/_TermInfosWriter.h @@ -0,0 +1,100 @@ +/*------------------------------------------------------------------------------ +* 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_TermInfosWriter_ +#define _lucene_index_TermInfosWriter_ + +#include "CLucene/util/Array.h" + +CL_CLASS_DEF(store,Directory) +//#include "FieldInfos.h" +//#include "TermInfo.h" +//#include "Term.h" + +CL_NS_DEF(index) +class FieldInfos; +class TermInfo; + + // This stores a monotonically increasing set of pairs in a + // Directory. A TermInfos can be written once, in order. + class TermInfosWriter :LUCENE_BASE{ + private: + FieldInfos* fieldInfos; + CL_NS(store)::IndexOutput* output; + TermInfo* lastTi; + int64_t size; + + int64_t lastIndexPointer; + bool isIndex; + CL_NS(util)::ValueArray lastTermText; + int32_t lastTermTextLength; + int32_t lastFieldNumber; + + CL_NS(util)::ValueArray termTextBuffer; + + TermInfosWriter* other; + + //inititalize + TermInfosWriter(CL_NS(store)::Directory* directory, const char* segment, FieldInfos* fis, int32_t interval, bool isIndex); + + int32_t compareToLastTerm(int32_t fieldNumber, const TCHAR* termText, int32_t length); + public: + /** Expert: The maximum number of skip levels. Smaller values result in + * slightly smaller indexes, but slower skipping in big posting lists. + */ + int32_t maxSkipLevels; + + /** The file format version, a negative number. */ + LUCENE_STATIC_CONSTANT(int32_t,FORMAT=-3); + + //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. */ + LUCENE_STATIC_CONSTANT(int32_t, DEFAULT_TERMDOCS_SKIP_INTERVAL=16); + + + /** + * 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 char* segment, FieldInfos* fis, int32_t interval); + + ~TermInfosWriter(); + + + void add(Term* term, TermInfo* ti); + + /** Adds a new <, 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(int32_t fieldNumber, const TCHAR* termText, int32_t termTextLength, const TermInfo* ti); + + /** Called to complete TermInfos creation. */ + void close(); + + private: + /** Helps constructors to initialize instances */ + void initialise(CL_NS(store)::Directory* directory, const char* segment, int32_t interval, bool IsIndex); + void writeTerm(int32_t fieldNumber, const TCHAR* termText, int32_t termTextLength); + }; +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/index/_TermVector.h b/Pods/BRCLucene/src/core/CLucene/index/_TermVector.h new file mode 100644 index 0000000..faf165d --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/index/_TermVector.h @@ -0,0 +1,330 @@ +/*------------------------------------------------------------------------------ +* 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_internal_termvector_h +#define _lucene_index_internal_termvector_h + +#include "CLucene/util/Array.h" +#include "_FieldInfos.h" +#include "TermVector.h" +//#include "FieldInfos.h" + +CL_NS_DEF(index) + +class TermVectorsWriter:LUCENE_BASE { +private: + CL_NS(store)::IndexOutput* tvx, *tvd, *tvf; + FieldInfos* fieldInfos; + +public: + TermVectorsWriter(CL_NS(store)::Directory* directory, const char* segment, + FieldInfos* fieldInfos); + ~TermVectorsWriter(); + + /** + * 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(CL_NS(util)::ArrayBase* vectors); + + /** Close all streams. + * to suppress exceptions from being thrown, pass an error object to be filled in + */ + void close(CLuceneError* err = NULL); +}; + +/** + */ +class SegmentTermVector: public /*virtual*/ TermFreqVector { +private: + TCHAR* field; + CL_NS(util)::ArrayBase* terms; + CL_NS(util)::ArrayBase* termFreqs; + + int32_t binarySearch(const CL_NS(util)::ArrayBase& array, const TCHAR* key) const; +public: + //note: termFreqs must be the same length as terms + SegmentTermVector(const TCHAR* field, CL_NS(util)::ArrayBase* terms, + CL_NS(util)::ArrayBase* termFreqs); + virtual ~SegmentTermVector(); + + /** + * + * @return The number of the field this vector is associated with + */ + const TCHAR* getField(); + TCHAR* toString() const; + int32_t size(); + const CL_NS(util)::ArrayBase* getTerms(); + const CL_NS(util)::ArrayBase* getTermFrequencies(); + int32_t indexOf(const TCHAR* termText); + CL_NS(util)::ArrayBase* indexesOf(const CL_NS(util)::ArrayBase& termNumbers, const int32_t start, const int32_t len); + + virtual TermPositionVector* __asTermPositionVector(); +}; + + + +/** +* @version $Id: +*/ +class TermVectorMapper; // Forward declaration + +class CLUCENE_EXPORT TermVectorsReader:LUCENE_BASE { +public: + LUCENE_STATIC_CONSTANT(int32_t, FORMAT_VERSION = 2); + LUCENE_STATIC_CONSTANT(uint8_t, STORE_POSITIONS_WITH_TERMVECTOR = 0x1); + LUCENE_STATIC_CONSTANT(uint8_t, STORE_OFFSET_WITH_TERMVECTOR = 0x2); +private: + + //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); + + FieldInfos* fieldInfos; + + CL_NS(store)::IndexInput* tvx; + CL_NS(store)::IndexInput* tvd; + CL_NS(store)::IndexInput* tvf; + int64_t _size; // TODO: size_t ? + + // The docID offset where our docs begin in the index + // file. This will be 0 if we have our own private file. + int32_t docStoreOffset; + + int32_t tvdFormat; + int32_t tvfFormat; + +public: + TermVectorsReader(CL_NS(store)::Directory* d, const char* segment, FieldInfos* fieldInfos, + int32_t readBufferSize=LUCENE_STREAM_BUFFER_SIZE, int32_t docStoreOffset=-1, int32_t size=0); + ~TermVectorsReader(); + +private: + int32_t checkValidFormat(CL_NS(store)::IndexInput* in); + +public: + void close(); + + /** + * + * @return The number of documents in the reader + */ + int64_t size() const; + +public: + void get(const int32_t docNum, const TCHAR* field, TermVectorMapper* mapper); + + /** + * 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 + */ + CL_NS(util)::ArrayBase* get(const int32_t docNum); + //bool get(int32_t docNum, CL_NS(util)::ObjectArray& result); + + void get(const int32_t docNumber, TermVectorMapper* mapper); + +private: + CL_NS(util)::ObjectArray* readTermVectors(const int32_t docNum, + const TCHAR** fields, const int64_t* tvfPointers, const int32_t len); + + void readTermVectors(const TCHAR** fields, const int64_t* tvfPointers, + const int32_t len, TermVectorMapper* mapper); + + /** + * + * @param field The field to read in + * @param tvfPointer The pointer within the tvf file where we should start reading + * @param mapper The mapper used to map the TermVector + * @return The TermVector located at that position + * @throws IOException + */ + void readTermVector(const TCHAR* field, const int64_t tvfPointer, TermVectorMapper* mapper); + + + DEFINE_MUTEX(THIS_LOCK) + TermVectorsReader(const TermVectorsReader& copy); + +public: + TermVectorsReader* clone() const; +}; + + +class SegmentTermPositionVector: public SegmentTermVector, public TermPositionVector { +protected: + CL_NS(util)::ArrayBase< CL_NS(util)::ArrayBase* >* positions; + CL_NS(util)::ArrayBase< CL_NS(util)::ArrayBase* >* offsets; + static CL_NS(util)::ValueArray EMPTY_TERM_POS; +public: + SegmentTermPositionVector(const TCHAR* field, + CL_NS(util)::ArrayBase* terms, + CL_NS(util)::ArrayBase* termFreqs, + CL_NS(util)::ArrayBase< CL_NS(util)::ArrayBase* >* _positions, + CL_NS(util)::ArrayBase< CL_NS(util)::ArrayBase* >* _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 + */ + const CL_NS(util)::ArrayBase* getOffsets(const size_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 indexOf method. + */ + const CL_NS(util)::ArrayBase* getTermPositions(const size_t index); + + // disambiguation + const TCHAR* getField(){ return SegmentTermVector::getField(); } + TCHAR* toString() const{ return SegmentTermVector::toString(); } + int32_t size(){ return SegmentTermVector::size(); } + const CL_NS(util)::ArrayBase* getTerms(){ return SegmentTermVector::getTerms(); } + const CL_NS(util)::ArrayBase* getTermFrequencies(){ return SegmentTermVector::getTermFrequencies(); } + int32_t indexOf(const TCHAR* termText){ return SegmentTermVector::indexOf(termText); } + CL_NS(util)::ArrayBase* indexesOf(const CL_NS(util)::ArrayBase& termNumbers, const int32_t start, const int32_t len); + + virtual TermPositionVector* __asTermPositionVector(); +}; + +/** + * The TermVectorMapper can be used to map Term Vectors into your own + * structure instead of the parallel array structure used by + * {@link org.apache.lucene.index.IndexReader#getTermFreqVector(int,String)}. + *

+ * It is up to the implementation to make sure it is thread-safe. + * + * + **/ +class CLUCENE_EXPORT TermVectorMapper : LUCENE_BASE{ +private: + bool ignoringPositions; + bool ignoringOffsets; + +protected: + TermVectorMapper(); + virtual ~TermVectorMapper(){}; + + /** + * + * @param ignoringPositions true if this mapper should tell Lucene to ignore positions even if they are stored + * @param ignoringOffsets similar to ignoringPositions + */ + TermVectorMapper(const bool _ignoringPositions, const bool _ignoringOffsets); + +public: + /** + * Tell the mapper what to expect in regards to field, number of terms, offset and position storage. + * This method will be called once before retrieving the vector for a field. + * + * This method will be called before {@link #map(String,int,TermVectorOffsetInfo[],int[])}. + * @param field The field the vector is for + * @param numTerms The number of terms that need to be mapped + * @param storeOffsets true if the mapper should expect offset information + * @param storePositions true if the mapper should expect positions info + */ + virtual void setExpectations(const TCHAR* _field, const int32_t numTerms, const bool storeOffsets, + const bool storePositions) = 0; + + /** + * Map the Term Vector information into your own structure + * @param term The term to add to the vector + * @param frequency The frequency of the term in the document + * @param offsets null if the offset is not specified, otherwise the offset into the field of the term + * @param positions null if the position is not specified, otherwise the position in the field of the term + * @memory offset and position objects must be cleaned up by implementing class + */ + virtual void map(const TCHAR* term, const int32_t termLen, const int32_t frequency, + CL_NS(util)::ArrayBase* _offsets, + CL_NS(util)::ArrayBase* _positions) = 0; + + /** + * Indicate to Lucene that even if there are positions stored, this mapper is not interested in them and they + * can be skipped over. Derived classes should set this to true if they want to ignore positions. The default + * is false, meaning positions will be loaded if they are stored. + * @return false + */ + bool isIgnoringPositions() const; + + /** + * + * @see #isIgnoringPositions() Same principal as {@link #isIgnoringPositions()}, but applied to offsets. false by default. + * @return false + */ + bool isIgnoringOffsets() const; + + /** + * Passes down the index of the document whose term vector is currently being mapped, + * once for each top level call to a term vector reader. + *

+ * Default implementation IGNORES the document number. Override if your implementation needs the document number. + *

+ * NOTE: Document numbers are internal to Lucene and subject to change depending on indexing operations. + * + * @param documentNumber index of document currently being mapped + */ + virtual void setDocumentNumber(const int32_t documentNumber); +}; + +/** + * Models the existing parallel array structure + */ +class ParallelArrayTermVectorMapper : public TermVectorMapper +{ +private: + CL_NS(util)::ArrayBase* terms; + CL_NS(util)::ArrayBase* termFreqs; + CL_NS(util)::ArrayBase< CL_NS(util)::ArrayBase* >* positions; + CL_NS(util)::ArrayBase< CL_NS(util)::ArrayBase* >* offsets; + int32_t currentPosition; + bool storingOffsets; + bool storingPositions; + TCHAR* field; + +public: + ParallelArrayTermVectorMapper(); + virtual ~ParallelArrayTermVectorMapper(); + + void setExpectations(const TCHAR* _field, const int32_t numTerms, + const bool storeOffsets, const bool storePositions); + + void map(const TCHAR* term, const int32_t termLen, const int32_t frequency, + CL_NS(util)::ArrayBase* _offsets, + CL_NS(util)::ArrayBase* _positions); + + /** + * Construct the vector + * @return The {@link TermFreqVector} based on the mappings. + * @memory Caller is responsible for freeing up the returned object + */ + TermFreqVector* materializeVector(); + + void reset() + { + currentPosition = 0; + } +}; + +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/queryParser/FastCharStream.cpp b/Pods/BRCLucene/src/core/CLucene/queryParser/FastCharStream.cpp new file mode 100644 index 0000000..007afd5 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/queryParser/FastCharStream.cpp @@ -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. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "_CharStream.h" +#include "_FastCharStream.h" +#include "CLucene/util/CLStreams.h" + +CL_NS_DEF(queryParser) + +FastCharStream::FastCharStream(CL_NS(util)::Reader* r, bool ownsReader) : + buffer(NULL), + _bufferSize(0), + bufferLength(0), + bufferPosition(0), + tokenStart(0), + bufferStart(0), + input(r), + _ownsReader(ownsReader) +{ +} + +FastCharStream::~FastCharStream() +{ + if (_ownsReader ){ + _CLLDELETE(input); + } + _CLDELETE_LCARRAY(buffer); +} + +TCHAR FastCharStream::readChar() { + if (bufferPosition >= bufferLength) + refill(); + return buffer[bufferPosition++]; +} + +void FastCharStream::refill() { + int32_t newPosition = bufferLength - tokenStart; + + if (tokenStart == 0) { // token won't fit in buffer + if (buffer == NULL) { // first time: alloc buffer + buffer = _CL_NEWARRAY(TCHAR, 2048); + _bufferSize = 2048; + } else if (bufferLength == _bufferSize) { // grow buffer + _bufferSize *= 2; + TCHAR* newBuffer = _CL_NEWARRAY(TCHAR, _bufferSize); + _tcsncpy(newBuffer, buffer, bufferLength); + _CLDELETE_LCARRAY(buffer); + buffer = newBuffer; + } + } else { // shift token to front + _tcsncpy(buffer, buffer+tokenStart,newPosition); + } + + bufferLength = newPosition; // update state + bufferPosition = newPosition; + bufferStart += tokenStart; + tokenStart = 0; + + const TCHAR* charBuf = NULL; + int32_t charsRead = // fill space in buffer + input->read(charBuf, newPosition, _bufferSize-newPosition); + if (charsRead == -1){ + _CLTHROWA(CL_ERR_IO, "read past eof"); + } + else { + memcpy(buffer, charBuf, charsRead * sizeof(TCHAR)); // TODO: Can we use the reader buffer instead of copying to our own? + bufferLength += charsRead; + } +} + +void FastCharStream::backup(const int32_t amount) { + bufferPosition -= amount; +} + +TCHAR* FastCharStream::GetImage() { + size_t len = bufferPosition - tokenStart; + TCHAR* ret = _CL_NEWARRAY(TCHAR, len + 1); + _tcsncpy(ret, buffer+tokenStart, len); + ret[len] = 0; // NULL terminated string + return ret; +} + +TCHAR* FastCharStream::GetSuffix(const int32_t len) { + TCHAR* value = _CL_NEWARRAY(TCHAR, len + 1); + _tcsncpy(value, buffer+(bufferPosition - len), len); + value[len] = 0; // NULL terminated string + return value; +} + +void FastCharStream::Done() { +} + +TCHAR FastCharStream::BeginToken() { + tokenStart = bufferPosition; + return readChar(); +} + +int32_t FastCharStream::getColumn() const { + return bufferStart + bufferPosition; +} +int32_t FastCharStream::getLine() const { + return 1; +} +int32_t FastCharStream::getEndColumn() const { + return bufferStart + bufferPosition; +} +int32_t FastCharStream::getEndLine() const { + return 1; +} +int32_t FastCharStream::getBeginColumn() const { + return bufferStart + tokenStart; +} +int32_t FastCharStream::getBeginLine() const { + return 1; +} + +CL_NS_END diff --git a/Pods/BRCLucene/src/core/CLucene/queryParser/MultiFieldQueryParser.cpp b/Pods/BRCLucene/src/core/CLucene/queryParser/MultiFieldQueryParser.cpp new file mode 100644 index 0000000..6566fa2 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/queryParser/MultiFieldQueryParser.cpp @@ -0,0 +1,181 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "MultiFieldQueryParser.h" +#include "CLucene/analysis/AnalysisHeader.h" +#include "CLucene/search/BooleanQuery.h" +#include "CLucene/search/BooleanClause.h" +#include "CLucene/search/PhraseQuery.h" +#include "CLucene/search/MultiPhraseQuery.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), fields(_fields), boosts(_boosts) +{ +} +MultiFieldQueryParser::~MultiFieldQueryParser(){ +} + +Query* MultiFieldQueryParser::getFieldQuery(const TCHAR* field, TCHAR* queryText, const int32_t slop){ + if (field == NULL) { + vector 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((TCHAR*)fields[i]); + if (itr != boosts->end()) { + q->setBoost(itr->second); + } + } + if (q->instanceOf(PhraseQuery::getClassName())) { + ((PhraseQuery*)q)->setSlop(slop); + } + if (q->instanceOf(MultiPhraseQuery::getClassName())) { + ((MultiPhraseQuery*) q)->setSlop(slop); + } + clauses.push_back(_CLNEW BooleanClause(q, true, BooleanClause::SHOULD)); + } + } + if (clauses.size() == 0) // happens for stopwords + return NULL; + return QueryParser::getBooleanQuery(clauses, true); + }else{ + return QueryParser::getFieldQuery(field, queryText); + } +} + +Query* MultiFieldQueryParser::getFuzzyQuery(const TCHAR* field, TCHAR* termStr, const float_t minSimilarity){ + if (field == NULL) { + vector clauses; + for (int i = 0; fields[i]!=NULL; ++i) { + Query* q = QueryParser::getFuzzyQuery(fields[i], termStr, minSimilarity); + if (q) clauses.push_back(_CLNEW BooleanClause(q,true, BooleanClause::SHOULD) ); + } + return QueryParser::getBooleanQuery(clauses, true); + } + return QueryParser::getFuzzyQuery(field, termStr, minSimilarity); +} + +Query* MultiFieldQueryParser::getPrefixQuery(const TCHAR* field, TCHAR* termStr){ + if (field == NULL) { + vector clauses; + for (int i = 0; fields[i]!=NULL; ++i) { + Query* q = QueryParser::getPrefixQuery(fields[i], termStr); + if (q) clauses.push_back(_CLNEW BooleanClause(q,true,BooleanClause::SHOULD)); + } + return QueryParser::getBooleanQuery(clauses, true); + } + return QueryParser::getPrefixQuery(field, termStr); +} + +Query* MultiFieldQueryParser::getWildcardQuery(const TCHAR* field, TCHAR* termStr){ + if (field == NULL) { + vector clauses; + for (int i = 0; fields[i]!=NULL; ++i) { + Query* q = QueryParser::getWildcardQuery(fields[i], termStr); + if (q) clauses.push_back(_CLNEW BooleanClause(q,true,BooleanClause::SHOULD)); + } + return QueryParser::getBooleanQuery(clauses, true); + } + return QueryParser::getWildcardQuery(field, termStr); +} + + +Query* MultiFieldQueryParser::getRangeQuery(const TCHAR* field, TCHAR* part1, TCHAR* part2, const bool inclusive){ + if (field == NULL) { + vector clauses; + for (int i = 0; fields[i]!=NULL; ++i) { + Query* q = QueryParser::getRangeQuery(fields[i], part1, part2, inclusive); + if (q) clauses.push_back(_CLNEW BooleanClause(q,true,BooleanClause::SHOULD)); + } + return QueryParser::getBooleanQuery(clauses, true); + }else{ + return QueryParser::getRangeQuery(field, part1, part2, inclusive); + } +} + +//static +Query* MultiFieldQueryParser::parse(const TCHAR** _queries, const TCHAR** _fields, Analyzer* analyzer) +{ + BooleanQuery* bQuery = _CLNEW BooleanQuery(); + for (size_t i = 0; _fields[i]!=NULL; i++) + { + if (_queries[i] == NULL) { + _CLLDELETE(bQuery); + _CLTHROWA(CL_ERR_IllegalArgument, "_queries.length != _fields.length"); + } + // TODO: Reuse qp instead of creating it over and over again + QueryParser* qp = _CLNEW QueryParser(_fields[i], analyzer); + Query* q = qp->parse(_queries[i]); + if (q!=NULL && // q never null, just being defensive + (!(q->instanceOf(BooleanQuery::getClassName()) || ((BooleanQuery*)q)->getClauseCount() > 0))) { + bQuery->add(q, true, BooleanClause::SHOULD); + } else + _CLLDELETE(q); + _CLLDELETE(qp); + } + return bQuery; +} + +// static +Query* MultiFieldQueryParser::parse(const TCHAR* query, const TCHAR** _fields, const uint8_t* flags, Analyzer* analyzer) { + BooleanQuery* bQuery = _CLNEW BooleanQuery(); + for (size_t i = 0; _fields[i]!=NULL; i++) { + //TODO: this is really confusing... why not refactor _fields and flags to use a array object. + //flags can be NULL since NULL == 0... + /*if (flags[i] == NULL) { + _CLLDELETE(bQuery); + _CLTHROWA(CL_ERR_IllegalArgument, "_fields.length != flags.length"); + }*/ + QueryParser* qp = _CLNEW QueryParser(_fields[i], analyzer); + Query* q = qp->parse(query); + if (q!=NULL && // q never null, just being defensive + (!(q->instanceOf(BooleanQuery::getClassName())) || ((BooleanQuery*)q)->getClauseCount()>0)) { + bQuery->add(q, true, (BooleanClause::Occur)flags[i]); + } else + _CLLDELETE(q); + _CLLDELETE(qp); + } + return bQuery; +} + +//static +Query* MultiFieldQueryParser::parse(const TCHAR** _queries, const TCHAR** _fields, const uint8_t* flags, Analyzer* analyzer){ + BooleanQuery* bQuery = _CLNEW BooleanQuery(); + for (size_t i = 0; _fields[i]!=NULL; i++) + { + //TODO: this is really confusing... why not refactor _fields and flags to use a array object. + //flags can be NULL since NULL == 0... + if (_queries[i] == NULL ) { //|| flags[i] == NULL + _CLLDELETE(bQuery); + _CLTHROWA(CL_ERR_IllegalArgument, "_queries, _fields, and flags array have have different length"); + } + QueryParser* qp = _CLNEW QueryParser(_fields[i], analyzer); + Query* q = qp->parse(_queries[i]); + if (q!=NULL && // q never null, just being defensive + (!(q->instanceOf(BooleanQuery::getClassName())) || ((BooleanQuery*)q)->getClauseCount()>0)) { + bQuery->add(q, true, (BooleanClause::Occur)flags[i]); + } else + _CLLDELETE(q); + _CLLDELETE(qp); + } + return bQuery; +} + +CL_NS_END diff --git a/Pods/BRCLucene/src/core/CLucene/queryParser/MultiFieldQueryParser.h b/Pods/BRCLucene/src/core/CLucene/queryParser/MultiFieldQueryParser.h new file mode 100644 index 0000000..a10168b --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/queryParser/MultiFieldQueryParser.h @@ -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. +------------------------------------------------------------------------------*/ +#ifndef _lucene_queryParser_MultiFieldQueryParser_ +#define _lucene_queryParser_MultiFieldQueryParser_ + +#include "QueryParser.h" +#include "CLucene/util/VoidMap.h" + + +CL_NS_DEF(queryParser) + +typedef CL_NS(util)::CLHashMap BoostMap; + +/** +* A QueryParser which constructs queries to search multiple fields. +* +*/ +class CLUCENE_EXPORT MultiFieldQueryParser: public QueryParser +{ +protected: + const TCHAR** fields; + BoostMap* boosts; +public: + /** + * Creates a MultiFieldQueryParser. + * Allows passing of a map with term to Boost, and the boost to apply to each term. + * + *

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 title and body):

+ * + * + * (title:term1 body:term1) (title:term2 body:term2) + * + * + *

When setDefaultOperator(AND_OPERATOR) is set, the result will be:

+ * + * + * +(title:term1 body:term1) +(title:term2 body:term2) + * + * + *

When you pass a boost (title=>5 body=>10) you can get

+ * + * + * +(title:term1^5.0 body:term1^10.0) +(title:term2^5.0 body:term2^10.0) + * + * + *

In other words, all the query's terms must appear, but it doesn't matter in + * what fields they appear.

+ */ + MultiFieldQueryParser(const TCHAR** _fields, CL_NS(analysis)::Analyzer* a, BoostMap* _boosts = NULL); + virtual ~MultiFieldQueryParser(); + + +protected: + CL_NS(search)::Query* getFieldQuery(const TCHAR* field, TCHAR* queryText, const int32_t slop); + CL_NS(search)::Query* getFieldQuery(const TCHAR* field, TCHAR* queryText) { return getFieldQuery(field,queryText,0); } + CL_NS(search)::Query* getFuzzyQuery(const TCHAR* field, TCHAR* termStr, const float_t minSimilarity); + CL_NS(search)::Query* getPrefixQuery(const TCHAR* field, TCHAR* termStr); + CL_NS(search)::Query* getWildcardQuery(const TCHAR* field, TCHAR* termStr); + CL_NS(search)::Query* getRangeQuery(const TCHAR* field, TCHAR* part1, TCHAR* part2, const bool inclusive); + +public: + /** + * Parses a query which searches on the fields specified. + *

+ * If x fields are specified, this effectively constructs: + *

+  * 
+  * (field1:query1) (field2:query2) (field3:query3)...(fieldx:queryx)
+  * 
+  * 
+ * @param queries Queries strings to parse + * @param fields Fields to search on + * @param analyzer Analyzer to use + * @throws ParseException if query parsing fails + * @throws IllegalArgumentException if the length of the queries array differs + * from the length of the fields array + */ + static CL_NS(search)::Query* parse(const TCHAR** _queries, const TCHAR** _fields, + CL_NS(analysis)::Analyzer* analyzer); + + /** + * Parses a query, searching on the fields specified. + * Use this if you need to specify certain fields as required, + * and others as prohibited. + *

+  * Usage:
+  * 
+  * String[] fields = {"filename", "contents", "description"};
+  * BooleanClause.Occur[] flags = {BooleanClause.Occur.SHOULD,
+  *                BooleanClause.Occur.MUST,
+  *                BooleanClause.Occur.MUST_NOT};
+  * MultiFieldQueryParser.parse("query", fields, flags, analyzer);
+  * 
+  * 
+ *

+ * The code above would construct a query: + *

+  * 
+  * (filename:query) +(contents:query) -(description:query)
+  * 
+  * 
+ * + * @param query Query string to parse + * @param fields Fields to search on + * @param flags Flags describing the fields + * @param analyzer Analyzer to use + * @throws ParseException if query parsing fails + * @throws IllegalArgumentException if the length of the fields array differs + * from the length of the flags array + */ + static CL_NS(search)::Query* parse(const TCHAR* query, const TCHAR** _fields, + const uint8_t* flags, CL_NS(analysis)::Analyzer* analyzer); + + /** + * Parses a query, searching on the fields specified. + * Use this if you need to specify certain fields as required, + * and others as prohibited. + *

+  * Usage:
+  * 
+  * String[] query = {"query1", "query2", "query3"};
+  * String[] fields = {"filename", "contents", "description"};
+  * BooleanClause.Occur[] flags = {BooleanClause.Occur.SHOULD,
+  *                BooleanClause.Occur.MUST,
+  *                BooleanClause.Occur.MUST_NOT};
+  * MultiFieldQueryParser.parse(query, fields, flags, analyzer);
+  * 
+  * 
+ *

+ * The code above would construct a query: + *

+  * 
+  * (filename:query1) +(contents:query2) -(description:query3)
+  * 
+  * 
+ * + * @param queries Queries string to parse + * @param fields Fields to search on + * @param flags Flags describing the fields + * @param analyzer Analyzer to use + * @throws ParseException if query parsing fails + * @throws IllegalArgumentException if the length of the queries, fields, + * and flags array differ + */ + static CL_NS(search)::Query* parse(const TCHAR** _queries, const TCHAR** _fields, const uint8_t* flags, + CL_NS(analysis)::Analyzer* analyzer); + + CL_NS(search)::Query* parse(const TCHAR* _query){return QueryParser::parse(_query);} +}; +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/queryParser/QueryParser.cpp b/Pods/BRCLucene/src/core/CLucene/queryParser/QueryParser.cpp new file mode 100644 index 0000000..aa1d4ab --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/queryParser/QueryParser.cpp @@ -0,0 +1,1502 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "_CharStream.h" +#include "_FastCharStream.h" +#include "QueryParserConstants.h" +#include "QueryParserTokenManager.h" +#include "QueryParser.h" + +#include "CLucene/analysis/AnalysisHeader.h" + +#include "CLucene/search/SearchHeader.h" + +#include "CLucene/search/Query.h" +#include "CLucene/search/TermQuery.h" +#include "CLucene/search/BooleanQuery.h" +#include "CLucene/search/FuzzyQuery.h" +#include "CLucene/search/PhraseQuery.h" +#include "CLucene/search/WildcardQuery.h" +#include "CLucene/search/PrefixQuery.h" +#include "CLucene/search/RangeQuery.h" +#include "CLucene/search/MatchAllDocsQuery.h" +#include "CLucene/search/MultiPhraseQuery.h" +#include "CLucene/search/ConstantScoreQuery.h" + +#include "CLucene/document/DateField.h" +#include "CLucene/document/DateTools.h" + +#include "CLucene/index/Term.h" +#include "QueryToken.h" + +#include "CLucene/util/CLStreams.h" +#include "CLucene/util/StringBuffer.h" + +CL_NS_USE(util) +CL_NS_USE(index) +CL_NS_USE(analysis) +CL_NS_USE(search) + +CL_NS_DEF(queryParser) + +const TCHAR* QueryParserConstants::tokenImage[] = { + _T(""), + _T("<_NUM_CHAR>"), + _T("<_ESCAPED_CHAR>"), + _T("<_TERM_START_CHAR>"), + _T("<_TERM_CHAR>"), + _T("<_WHITESPACE>"), + _T(""), + _T(""), + _T(""), + _T(""), + _T("\"+\""), + _T("\"-\""), + _T("\"(\""), + _T("\")\""), + _T("\":\""), + _T("\"*\""), + _T("\"^\""), + _T(""), + _T(""), + _T(""), + _T(""), + _T(""), + _T("\"[\""), + _T("\"{\""), + _T(""), + _T("\"TO\""), + _T("\"]\""), + _T(""), + _T(""), + _T("\"TO\""), + _T("\"}\""), + _T(""), + _T("") +}; + +const int32_t QueryParser::jj_la1_0[] = {0x180,0x180,0xe00,0xe00,0x1f69f80,0x48000,0x10000,0x1f69000,0x1348000,0x80000,0x80000,0x10000,0x18000000,0x2000000,0x18000000,0x10000,int32_t(0x80000000),0x20000000,int32_t(0x80000000),0x10000,0x80000,0x10000,0x1f68000}; +const int32_t QueryParser::jj_la1_1[] = {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x0,0x0,0x0}; + +struct QueryParser::JJCalls { +public: + int32_t gen; + QueryToken* first; + int32_t arg; + JJCalls* next; + + JJCalls(); + ~JJCalls(); +}; + +QueryParser::QueryParser(const TCHAR* f, Analyzer* a) : _operator(OR_OPERATOR), + lowercaseExpandedTerms(true),useOldRangeQuery(false),allowLeadingWildcard(false),enablePositionIncrements(false), + analyzer(a),field(NULL),phraseSlop(0),fuzzyMinSim(FuzzyQuery::defaultMinSimilarity), + fuzzyPrefixLength(FuzzyQuery::defaultPrefixLength),/*locale(NULL),*/ + dateResolution(CL_NS(document)::DateTools::NO_RESOLUTION),fieldToDateResolution(NULL), + token_source(NULL),token(NULL),jj_nt(NULL),_firstToken(NULL),jj_ntk(-1),jj_scanpos(NULL),jj_lastpos(NULL),jj_la(0), + lookingAhead(false),jj_gen(0),jj_2_rtns(NULL),jj_rescan(false),jj_gc(0),jj_expentries(NULL),jj_expentry(NULL), + jj_kind(-1),jj_endpos(0) +{ + StringReader* rdr = _CLNEW StringReader(_T("")); + _init(_CLNEW FastCharStream(rdr, true)); + + if ( f ) + field = STRDUP_TtoT(f); +} + +void QueryParser::_deleteTokens(){ + QueryToken* t = _firstToken; + while (true){ + if (_firstToken == NULL) break; + t = _firstToken->next; + _CLLDELETE(_firstToken); + _firstToken = t; + } +} + +QueryParser::~QueryParser(){ + _CLLDELETE(fieldToDateResolution); + _CLLDELETE(token_source); + + _deleteTokens(); + + _CLLDELETE(jj_expentries); + _CLLDELETE(jj_expentry); + _CLLDELETE(jj_2_rtns); + + _CLDELETE_CARRAY(field); +} + +CL_NS(search)::Query* QueryParser::parse(const TCHAR* q, const TCHAR* f, CL_NS(analysis)::Analyzer* a){ + QueryParser* qp = _CLNEW QueryParser(f, a); + CL_NS(search)::Query* qry = qp->parse(q); + _CLDELETE(qp); + return qry; +} + +Query* QueryParser::parse(const TCHAR* _query) +{ + StringReader* rdr = _CLNEW StringReader(_query); + ReInit(_CLNEW FastCharStream(rdr, true)); + try { + // TopLevelQuery is a Query followed by the end-of-input (EOF) + Query* res = TopLevelQuery(field); + return (res!=NULL) ? res : _CLNEW BooleanQuery(); + } + catch (CLuceneError& e) { + // rethrow to include the original query: + if (e.number()==CL_ERR_Parse || e.number()==CL_ERR_TokenMgr) { + TCHAR* _twhat = e.twhat(); + const size_t errLen = _tcslen(_twhat) + _tcslen(_query) + 20; // make sure we have enough room for our error message + TCHAR *err = _CL_NEWARRAY(TCHAR,errLen); + cl_stprintf(err, errLen, _T("Cannot parse '%s': %s"), _query,_twhat); + _CLTHROWT_DEL(CL_ERR_Parse, err); + } else if (e.number()==CL_ERR_TooManyClauses) { + const size_t errLen = _tcslen(_query) + 25; // make sure we have enough room for our error message + TCHAR *err = _CL_NEWARRAY(TCHAR,errLen); + cl_stprintf(err, errLen, _T("Cannot parse '%s': too many boolean clauses"), _query); + _CLTHROWT_DEL(CL_ERR_Parse, err); + } else + throw e; + } +} + +Analyzer* QueryParser::getAnalyzer() const { + return analyzer; +} + +const TCHAR* QueryParser::getField() const { + return field; +} + +float_t QueryParser::getFuzzyMinSim() const { + return fuzzyMinSim; +} + +void QueryParser::setFuzzyMinSim(const float_t _fuzzyMinSim) { + fuzzyMinSim = _fuzzyMinSim; +} + +int32_t QueryParser::getFuzzyPrefixLength() const { + return fuzzyPrefixLength; +} + +void QueryParser::setFuzzyPrefixLength(const int32_t _fuzzyPrefixLength) { + fuzzyPrefixLength = _fuzzyPrefixLength; +} + +void QueryParser::setPhraseSlop(const int32_t _phraseSlop) { + phraseSlop = _phraseSlop; +} +int32_t QueryParser::getPhraseSlop() const { + return phraseSlop; +} +void QueryParser::setAllowLeadingWildcard(const bool _allowLeadingWildcard) { + allowLeadingWildcard = _allowLeadingWildcard; +} +bool QueryParser::getAllowLeadingWildcard() const { + return allowLeadingWildcard; +} +void QueryParser::setEnablePositionIncrements(const bool _enable) { + enablePositionIncrements = _enable; +} +bool QueryParser::getEnablePositionIncrements() const { + return enablePositionIncrements; +} +void QueryParser::setDefaultOperator(Operator _op) { + _operator = _op; +} +QueryParser::Operator QueryParser::getDefaultOperator() const { + return _operator; +} +void QueryParser::setLowercaseExpandedTerms(const bool _lowercaseExpandedTerms) { + lowercaseExpandedTerms = _lowercaseExpandedTerms; +} +bool QueryParser::getLowercaseExpandedTerms() const { + return lowercaseExpandedTerms; +} +void QueryParser::setUseOldRangeQuery(const bool _useOldRangeQuery) { + useOldRangeQuery = _useOldRangeQuery; +} +bool QueryParser::getUseOldRangeQuery() const { + return useOldRangeQuery; +} +void QueryParser::setDateResolution(const CL_NS(document)::DateTools::Resolution _dateResolution) { + dateResolution = _dateResolution; +} +void QueryParser::setDateResolution(const TCHAR* fieldName, const CL_NS(document)::DateTools::Resolution _dateResolution) { + if (fieldName == NULL) + _CLTHROWA(CL_ERR_IllegalArgument, "Field cannot be null."); + + if (fieldToDateResolution == NULL) { + // lazily initialize HashMap + fieldToDateResolution = _CLNEW FieldToDateResolutionType(); + } + + fieldToDateResolution->put(fieldName, _dateResolution); +} +CL_NS(document)::DateTools::Resolution QueryParser::getDateResolution(const TCHAR* fieldName) const { + if (fieldName == NULL) + _CLTHROWA(CL_ERR_IllegalArgument,"Field cannot be null."); + + if (fieldToDateResolution == NULL) { + // no field specific date resolutions set; return default date resolution instead + return dateResolution; + } + + CL_NS(document)::DateTools::Resolution resolution = fieldToDateResolution->get(fieldName); + if (resolution == CL_NS(document)::DateTools::NO_RESOLUTION) { + // no date resolutions set for the given field; return default date resolution instead + resolution = dateResolution; + } + + return resolution; +} + +void QueryParser::addClause(std::vector& clauses, int32_t conj, int32_t mods, Query* q){ + 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->isProhibited()) + c->setOccur(BooleanClause::MUST); + } + + if (nPreviousClauses > 0 && _operator == 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 parsed as +a OR b + BooleanClause* c = clauses[nPreviousClauses-1]; + if (!c->isProhibited()) + c->setOccur(BooleanClause::SHOULD); + } + + // We might have been passed a null query; the term might have been + // filtered away by the analyzer. + if (q == NULL) + return; + + if (_operator == 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) + clauses.push_back(_CLNEW BooleanClause(q,true, BooleanClause::MUST)); + else if (!required && !prohibited) + clauses.push_back(_CLNEW BooleanClause(q,true, BooleanClause::SHOULD)); + else if (!required && prohibited) + clauses.push_back(_CLNEW BooleanClause(q,true, BooleanClause::MUST_NOT)); + else { + _CLTHROWA(CL_ERR_Runtime, "Clause cannot be both required and prohibited"); + } +} + +Query* QueryParser::getFieldQuery(const TCHAR* _field, TCHAR* queryText) { + // Use the analyzer to get all the tokens, and then build a TermQuery, + // PhraseQuery, or nothing based on the term count + + StringReader reader(queryText); + TokenStream* source = analyzer->tokenStream(_field, &reader); + + CLVector > v; + CL_NS(analysis)::Token* t = NULL; + int32_t positionCount = 0; + bool severalTokensAtSamePosition = false; + + while (true) { + t = _CLNEW Token(); + try { + Token* _t = source->next(t); + if (_t == NULL) _CLDELETE(t); + }_CLCATCH_ERR(CL_ERR_IO, _CLLDELETE(source);_CLLDELETE(t);_CLDELETE_LCARRAY(queryText);,{ + t = NULL; + }); + if (t == NULL) + break; + v.push_back(t); + if (t->getPositionIncrement() != 0) + positionCount += t->getPositionIncrement(); + else + severalTokensAtSamePosition = true; + } + try { + source->close(); + } + _CLCATCH_ERR_CLEANUP(CL_ERR_IO, {_CLLDELETE(source);_CLLDELETE(t);_CLDELETE_LCARRAY(queryText);} ); /* cleanup */ + _CLLDELETE(source); + + if (v.size() == 0) + return NULL; + else if (v.size() == 1) { + Term* tm = _CLNEW Term(_field, v.at(0)->termBuffer()); + Query* ret = _CLNEW TermQuery( tm ); + _CLDECDELETE(tm); + return ret; + } else { + if (severalTokensAtSamePosition) { + if (positionCount == 1) { + // no phrase query: + BooleanQuery* q = _CLNEW BooleanQuery(true); + for(size_t i=0; itermBuffer()); + q->add(_CLNEW TermQuery(tm), true, BooleanClause::SHOULD); + _CLDECDELETE(tm); + } + return q; + }else { + MultiPhraseQuery* mpq = _CLNEW MultiPhraseQuery(); + mpq->setSlop(phraseSlop); + CLArrayList multiTerms; + int32_t position = -1; + for (size_t i = 0; i < v.size(); i++) { + t = v.at(i); + if (t->getPositionIncrement() > 0 && multiTerms.size() > 0) { + ValueArray termsArray(multiTerms.size()); + multiTerms.toArray(termsArray.values); + if (enablePositionIncrements) { + mpq->add(&termsArray,position); + } else { + mpq->add(&termsArray); + } + multiTerms.clear(); + } + position += t->getPositionIncrement(); + multiTerms.push_back(_CLNEW Term(field, t->termBuffer())); + } + ValueArray termsArray(multiTerms.size()); + multiTerms.toArray(termsArray.values); + if (enablePositionIncrements) { + mpq->add(&termsArray,position); + } else { + mpq->add(&termsArray); + } + return mpq; + } + }else { + PhraseQuery* pq = _CLNEW PhraseQuery(); + pq->setSlop(phraseSlop); + int32_t position = -1; + + for (size_t i = 0; i < v.size(); i++) { + t = v.at(i); + Term* tm = _CLNEW Term(_field, t->termBuffer()); + if (enablePositionIncrements) { + position += t->getPositionIncrement(); + pq->add(tm,position); + } else { + pq->add(tm); + } + _CLDECDELETE(tm); + } + return pq; + } + } +} + +Query* QueryParser::getFieldQuery(const TCHAR* _field, TCHAR* queryText, const int32_t slop) { + Query* query = getFieldQuery(_field, queryText); + + if (query) { + if ( query->instanceOf(PhraseQuery::getClassName()) ) { + static_cast(query)->setSlop(slop); + } else if ( query->instanceOf(MultiPhraseQuery::getClassName()) ) { + static_cast(query)->setSlop(slop); + } + } + return query; +} + +Query* QueryParser::getRangeQuery(const TCHAR* _field, TCHAR* part1, TCHAR* part2, const bool inclusive) +{ + if (lowercaseExpandedTerms) { + _tcslwr(part1); + _tcslwr(part2); + } + + TCHAR* _part1 = part1, *_part2 = part2; // just in case anything go wrong... + try { + /*DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, locale); // SHORT means completely numeric + df.setLenient(true); + Date d1 = df.parse(part1); + Date d2 = df.parse(part2); + */ + const int64_t d1 = CL_NS(document)::DateTools::stringToTime(part1); + int64_t d2 = CL_NS(document)::DateTools::stringToTime(part2); + if (inclusive) { + // The user can only specify the date, not the time, so make sure + // the time is set to the latest possible time of that date to really + // include all documents: + d2 = CL_NS(document)::DateTools::timeMakeInclusive(d2); + } + + CL_NS(document)::DateTools::Resolution resolution = getDateResolution(_field); + if (resolution == CL_NS(document)::DateTools::NO_RESOLUTION) { + // no default or field specific date resolution has been set, + // use deprecated DateField to maintain compatibilty with + // pre-1.9 Lucene versions. + _part1 = CL_NS(document)::DateField::timeToString(d1); + _part2 = CL_NS(document)::DateField::timeToString(d2); + } else { + _part1 = CL_NS(document)::DateTools::timeToString(d1, resolution); + _part2 = CL_NS(document)::DateTools::timeToString(d2, resolution); + } + } + catch (...) { } + + if(useOldRangeQuery) + { + Term* t1 = _CLNEW Term(_field,part1); + Term* t2 = _CLNEW Term(_field,part2); + Query* ret = _CLNEW RangeQuery(t1, t2, inclusive); + _CLDECDELETE(t1); + _CLDECDELETE(t2); + + // Make sure to delete the date strings we allocated only if we indeed allocated them + if (part1 != _part1) _CLDELETE_LCARRAY(_part1); + if (part2 != _part2) _CLDELETE_LCARRAY(_part2); + + return ret; + } + else + { + Query* q = _CLNEW ConstantScoreRangeQuery(_field,part1,part2,inclusive,inclusive); + + // Make sure to delete the date strings we allocated only if we indeed allocated them + if (part1 != _part1) _CLDELETE_LCARRAY(_part1); + if (part2 != _part2) _CLDELETE_LCARRAY(_part2); + + return q; + } +} + +Query* QueryParser::getBooleanQuery(std::vector& clauses, bool disableCoord) +{ + if (clauses.size()==0) { + return NULL; // all clause words were filtered away by the analyzer. + } + BooleanQuery* query = _CLNEW BooleanQuery(disableCoord); + + for (size_t i = 0; i < clauses.size(); i++) { + query->add(clauses[i]); + } + return query; +} + +Query* QueryParser::getWildcardQuery(const TCHAR* _field, TCHAR* termStr) +{ + if (_tcscmp(_T("*"), _field) == 0) { + if (_tcscmp(_T("*"), termStr) == 0) + return _CLNEW MatchAllDocsQuery(); + } + if (!allowLeadingWildcard && (termStr[0]==_T('*') || termStr[0]==_T('?'))){ + _CLDELETE_LCARRAY(termStr); + _CLTHROWT(CL_ERR_Parse,_T("'*' or '?' not allowed as first character in WildcardQuery")); + } + if (lowercaseExpandedTerms) { + _tcslwr(termStr); + } + + Term* t = _CLNEW Term(_field, termStr); + Query* q = _CLNEW WildcardQuery(t); + _CLDECDELETE(t); + + return q; +} + +Query* QueryParser::getPrefixQuery(const TCHAR* _field, TCHAR* _termStr) +{ + if (!allowLeadingWildcard && _termStr[0] == _T('*')){ + _CLDELETE_LCARRAY(_termStr); + _CLTHROWT(CL_ERR_Parse,_T("'*' not allowed as first character in PrefixQuery")); + } + if (lowercaseExpandedTerms) { + _tcslwr(_termStr); + } + Term* t = _CLNEW Term(_field, _termStr); + Query *q = _CLNEW PrefixQuery(t); + _CLDECDELETE(t); + return q; +} + +Query* QueryParser::getFuzzyQuery(const TCHAR* _field, TCHAR* termStr, const float_t minSimilarity) +{ + if (lowercaseExpandedTerms) { + _tcslwr(termStr); + } + + Term* t = _CLNEW Term(_field, termStr); + Query *q = _CLNEW FuzzyQuery(t, minSimilarity, fuzzyPrefixLength); + _CLDECDELETE(t); + return q; +} + +TCHAR* QueryParser::discardEscapeChar(TCHAR* input, TCHAR* output) { + // Create char array to hold unescaped char sequence + const size_t inputLen = _tcslen(input); + bool outputOwned=false; + if (output == NULL){ + // TODO: Perhaps we can re-use an inner buffer instead of creating new char arrays here and in several other places + output = _CL_NEWARRAY(TCHAR, inputLen + 1); + outputOwned=true; + } + + // The length of the output can be less than the input + // due to discarded escape chars. This variable holds + // the actual length of the output + int32_t length = 0; + + // We remember whether the last processed character was + // an escape character + bool lastCharWasEscapeChar = false; + + // The multiplier the current unicode digit must be multiplied with. + // E. g. the first digit must be multiplied with 16^3, the second with 16^2... + uint32_t codePointMultiplier = 0; + + // Used to calculate the codepoint of the escaped unicode character + int32_t codePoint = 0; + + for (size_t i = 0; i < inputLen; i++) { + TCHAR curChar = input[i]; + if (codePointMultiplier > 0) { + try { + codePoint += hexToInt(curChar) * codePointMultiplier; + } catch (CLuceneError& e) { + if (outputOwned)_CLDELETE_LCARRAY(output); + throw e; + } + codePointMultiplier = codePointMultiplier >> 4; + if (codePointMultiplier == 0) { + output[length++] = (TCHAR)codePoint; + codePoint = 0; + } + } else if (lastCharWasEscapeChar) { + if (curChar == _T('u')) { + // found an escaped unicode character + codePointMultiplier = 16 * 16 * 16; + } else { + // this character was escaped + output[length] = curChar; + length++; + } + lastCharWasEscapeChar = false; + } else { + if (curChar == _T('\\')) { + lastCharWasEscapeChar = true; + } else { + output[length] = curChar; + length++; + } + } + } + + if (codePointMultiplier > 0) { + if (outputOwned)_CLDELETE_LCARRAY(output); + _CLTHROWT(CL_ERR_Parse, _T("Truncated unicode escape sequence.")); + } + + if (lastCharWasEscapeChar) { + if (outputOwned)_CLDELETE_LCARRAY(output); + _CLTHROWT(CL_ERR_Parse,_T("Term can not end with escape character.")); + } + + output[length]=0; + return output; +} + +//static +int32_t QueryParser::hexToInt(TCHAR c) { + if (_T('0') <= c && c <= _T('9')) { + return c - _T('0'); + } else if (_T('a') <= c && c <= _T('f')){ + return c - _T('a') + 10; + } else if (_T('A') <= c && c <= _T('F')) { + return c - _T('A') + 10; + } else { + TCHAR err[50]; + cl_stprintf(err,50, _T("Non-hex character in unicode escape sequence: %c"), c); + _CLTHROWT(CL_ERR_Parse,err); + } +} + +//static +TCHAR* QueryParser::escape(const TCHAR* s) { + size_t len = _tcslen(s); + // Create a StringBuffer object a bit longer from the length of the query (to prevent some reallocations), + // and declare we are the owners of the buffer (to save on a copy) + // TODO: 1. Test to see what is the optimal initial length + // 2. Allow re-using the provided string buffer (argument s) instead of creating another one? + StringBuffer sb(len+5); + for (size_t i = 0; i < len; i++) { + const TCHAR c = s[i]; + // These characters are part of the query syntax and must be escaped + if (c == '\\' || c == '+' || c == '-' || c == '!' || c == '(' || c == ')' || c == ':' + || c == '^' || c == '[' || c == ']' || c == '"' || c == '{' || c == '}' || c == '~' + || c == '*' || c == '?' || c == '|' || c == '&') { + sb.appendChar(_T('\\')); + } + sb.appendChar(c); + } + return sb.giveBuffer(); +} + +int32_t QueryParser::Conjunction() { + int32_t ret = CONJ_NONE; + switch ((jj_ntk==-1)?f_jj_ntk():jj_ntk) + { + case AND: + case OR: + switch ((jj_ntk==-1)?f_jj_ntk():jj_ntk) + { + case AND: + jj_consume_token(AND); + ret = CONJ_AND; + break; + case OR: + jj_consume_token(OR); + ret = CONJ_OR; + break; + default: + jj_la1[0] = jj_gen; + jj_consume_token(-1); + _CLTHROWT(CL_ERR_Parse,_T("")); + } + break; + default: + jj_la1[1] = jj_gen; + } + return ret; +} + +int32_t QueryParser::Modifiers() { + int32_t ret = MOD_NONE; + switch ((jj_ntk==-1)?f_jj_ntk():jj_ntk) + { + case NOT: + case PLUS: + case MINUS: + switch ((jj_ntk==-1)?f_jj_ntk():jj_ntk) + { + case PLUS: + jj_consume_token(PLUS); + ret = MOD_REQ; + break; + case MINUS: + jj_consume_token(MINUS); + ret = MOD_NOT; + break; + case NOT: + jj_consume_token(NOT); + ret = MOD_NOT; + break; + default: + jj_la1[2] = jj_gen; + jj_consume_token(-1); + _CLTHROWT(CL_ERR_Parse,_T("")); + } + break; + default: + jj_la1[3] = jj_gen; + } + return ret; +} + +Query* QueryParser::TopLevelQuery(TCHAR* _field) { + Query* q = NULL;; + try { + q = fQuery(_field); + jj_consume_token(0); + } catch (CLuceneError& e) { + _CLLDELETE(q); + throw e; + } + return q; +} + +Query* QueryParser::fQuery(TCHAR* _field) { + CLVector > clauses; + Query *q, *firstQuery=NULL; + int32_t conj, mods; + mods = Modifiers(); + q = fClause(_field); + addClause(clauses, CONJ_NONE, mods, q); + if (mods == MOD_NONE) + firstQuery=q; + while (true) { + switch ((jj_ntk==-1)?f_jj_ntk():jj_ntk) + { + case AND: + case OR: + case NOT: + case PLUS: + case MINUS: + case LPAREN: + case STAR: + case QUOTED: + case TERM: + case PREFIXTERM: + case WILDTERM: + case RANGEIN_START: + case RANGEEX_START: + case NUMBER: + break; + default: + jj_la1[4] = jj_gen; + goto label_1_brk; + } + + conj = Conjunction(); + mods = Modifiers(); + q = fClause(_field); + addClause(clauses, conj, mods, q); + } + +label_1_brk: + if (clauses.size() == 1 && firstQuery != NULL){ + clauses[0]->deleteQuery = false; + return firstQuery; + }else{ + clauses.setDoDelete(false); + return getBooleanQuery(clauses); + } +} + +Query* QueryParser::fClause(TCHAR* _field) { + Query* q=NULL; + QueryToken *fieldToken=NULL, *boost=NULL; + TCHAR* tmpField=NULL; + if (jj_2_1(2)) { + switch ((jj_ntk==-1)?f_jj_ntk():jj_ntk) + { + case TERM: + { + fieldToken = jj_consume_token(TERM); + jj_consume_token(COLON); + // make sure to delete _field only if it's not contained already by the QP + tmpField=discardEscapeChar(fieldToken->image); + break; + } + case STAR: + jj_consume_token(STAR); + jj_consume_token(COLON); + tmpField=_CL_NEWARRAY(TCHAR,2); + tmpField[0]=_T('*'); + tmpField[1]=0; + break; + default: + jj_la1[5] = jj_gen; + jj_consume_token(-1); + _CLTHROWT(CL_ERR_Parse,_T("")); + } + } + + switch ((jj_ntk==-1)?f_jj_ntk():jj_ntk) + { + case STAR: + case QUOTED: + case TERM: + case PREFIXTERM: + case WILDTERM: + case RANGEIN_START: + case RANGEEX_START: + case NUMBER: + { + q = fTerm( tmpField==NULL ? _field : tmpField ); + break; + } + case LPAREN: + { + jj_consume_token(LPAREN); + q = fQuery( tmpField==NULL ? _field : tmpField ); + jj_consume_token(RPAREN); + if (((jj_ntk==-1)?f_jj_ntk():jj_ntk) == CARAT) + { + jj_consume_token(CARAT); + boost = jj_consume_token(NUMBER); + } + else + jj_la1[6] = jj_gen; + break; + } + default: + { + jj_la1[7] = jj_gen; + jj_consume_token(-1); + _CLDELETE_LCARRAY(tmpField); + _CLTHROWT(CL_ERR_Parse,_T("")); + } + } + _CLDELETE_LCARRAY(tmpField); + if (q && boost != NULL) { + float_t f = 1.0; + try { + f = _tcstod(boost->image, NULL); + q->setBoost(f); + } catch (...) { /* ignore errors */ } + } + return q; +} + +Query* QueryParser::fTerm(const TCHAR* _field) { + QueryToken *term, *boost=NULL, *fuzzySlop=NULL, *goop1, *goop2; + bool prefix = false; + bool wildcard = false; + bool fuzzy = false; + //bool rangein = false; + Query* q = NULL; + switch ((jj_ntk==-1)?f_jj_ntk():jj_ntk) + { + case STAR: + case TERM: + case PREFIXTERM: + case WILDTERM: + case NUMBER: + { + switch ((jj_ntk==-1)?f_jj_ntk():jj_ntk) + { + case TERM: + term = jj_consume_token(TERM); + break; + case STAR: + term = jj_consume_token(STAR); + wildcard=true; + break; + case PREFIXTERM: + term = jj_consume_token(PREFIXTERM); + prefix=true; + break; + case WILDTERM: + term = jj_consume_token(WILDTERM); + wildcard=true; + break; + case NUMBER: + term = jj_consume_token(NUMBER); + break; + default: + jj_la1[8] = jj_gen; + jj_consume_token(-1); + _CLTHROWT(CL_ERR_Parse,_T("")); + } + + if (((jj_ntk==-1)?f_jj_ntk():jj_ntk) == FUZZY_SLOP) + { + fuzzySlop = jj_consume_token(FUZZY_SLOP); + fuzzy=true; + } + else + jj_la1[9] = jj_gen; + + if (((jj_ntk==-1)?f_jj_ntk():jj_ntk) == CARAT) + { + jj_consume_token(CARAT); + boost = jj_consume_token(NUMBER); + if (((jj_ntk==-1)?f_jj_ntk():jj_ntk) == FUZZY_SLOP) + { + fuzzySlop = jj_consume_token(FUZZY_SLOP); + fuzzy=true; + } + else + jj_la1[10] = jj_gen; + } + else + jj_la1[11] = jj_gen; + + TCHAR* termImage=NULL; + if (wildcard) { + termImage=discardEscapeChar(term->image); + q = getWildcardQuery(_field, termImage); + } else if (prefix) { + termImage = STRDUP_TtoT(term->image); + size_t tiLen = _tcslen(termImage); + termImage[tiLen-1]=0; + q = getPrefixQuery(_field,discardEscapeChar(termImage, termImage)); + } else if (fuzzy) { + float_t fms = fuzzyMinSim; + try { + if (fuzzySlop->image[1] != 0) + fms = _tcstod(fuzzySlop->image + 1, NULL); + } catch (...) { /* ignore exceptions */ } + if(fms < 0.0f || fms > 1.0f){ + _CLTHROWT(CL_ERR_Parse, _T("Minimum similarity for a FuzzyQuery has to be between 0.0f and 1.0f !")); + } + termImage=discardEscapeChar(term->image); + q = getFuzzyQuery(_field, termImage,fms); + } else { + termImage=discardEscapeChar(term->image); + q = getFieldQuery(_field, termImage); + } + _CLDELETE_LCARRAY(termImage); + break; + } + case RANGEIN_START: + { + jj_consume_token(RANGEIN_START); + switch ((jj_ntk==-1)?f_jj_ntk():jj_ntk) + { + case RANGEIN_GOOP: + goop1 = jj_consume_token(RANGEIN_GOOP); + break; + case RANGEIN_QUOTED: + goop1 = jj_consume_token(RANGEIN_QUOTED); + break; + default: + jj_la1[12] = jj_gen; + jj_consume_token(-1); + _CLTHROWT(CL_ERR_Parse,_T("")); + } + if (((jj_ntk==-1)?f_jj_ntk():jj_ntk) == RANGEIN_TO) + jj_consume_token(RANGEIN_TO); + else + jj_la1[13] = jj_gen; + + switch ((jj_ntk==-1)?f_jj_ntk():jj_ntk) + { + case RANGEIN_GOOP: + goop2 = jj_consume_token(RANGEIN_GOOP); + break; + case RANGEIN_QUOTED: + goop2 = jj_consume_token(RANGEIN_QUOTED); + break; + default: + jj_la1[14] = jj_gen; + jj_consume_token(-1); + _CLTHROWT(CL_ERR_Parse,_T("")); + } + jj_consume_token(RANGEIN_END); + if (((jj_ntk==-1)?f_jj_ntk():jj_ntk) == CARAT) + { + jj_consume_token(CARAT); + boost = jj_consume_token(NUMBER); + } + else + jj_la1[15] = jj_gen; + + // TODO: Allow analysis::Term to accept ownership on a TCHAR* and save on extra dup's + if (goop1->kind == RANGEIN_QUOTED) { + _tcscpy(goop1->image, goop1->image+1); + goop1->image[_tcslen(goop1->image)-1]='\0'; + } + if (goop2->kind == RANGEIN_QUOTED) { + _tcscpy(goop2->image, goop2->image+1); + goop2->image[_tcslen(goop2->image)-1]='\0'; + } + TCHAR* t1 = discardEscapeChar(goop1->image); + TCHAR* t2 = discardEscapeChar(goop2->image); + q = getRangeQuery(_field, t1, t2, true); + _CLDELETE_LCARRAY(t1); + _CLDELETE_LCARRAY(t2); + break; + } + case RANGEEX_START: + { + jj_consume_token(RANGEEX_START); + switch ((jj_ntk==-1)?f_jj_ntk():jj_ntk) + { + case RANGEEX_GOOP: + goop1 = jj_consume_token(RANGEEX_GOOP); + break; + case RANGEEX_QUOTED: + goop1 = jj_consume_token(RANGEEX_QUOTED); + break; + default: + jj_la1[16] = jj_gen; + jj_consume_token(-1); + _CLTHROWT(CL_ERR_Parse,_T("")); + } + + if (((jj_ntk==-1)?f_jj_ntk():jj_ntk) == RANGEEX_TO) + jj_consume_token(RANGEEX_TO); + else + jj_la1[17] = jj_gen; + + switch ((jj_ntk==-1)?f_jj_ntk():jj_ntk) + { + case RANGEEX_GOOP: + goop2 = jj_consume_token(RANGEEX_GOOP); + break; + case RANGEEX_QUOTED: + goop2 = jj_consume_token(RANGEEX_QUOTED); + break; + default: + jj_la1[18] = jj_gen; + jj_consume_token(-1); + _CLTHROWT(CL_ERR_Parse,_T("")); + } + jj_consume_token(RANGEEX_END); + if (((jj_ntk==-1)?f_jj_ntk():jj_ntk) == CARAT) + { + jj_consume_token(CARAT); + boost = jj_consume_token(NUMBER); + } + else + jj_la1[19] = jj_gen; + + if (goop1->kind == RANGEEX_QUOTED) + goop1->image = goop1->image + 1; + + if (goop2->kind == RANGEEX_QUOTED) + goop2->image = goop2->image + 1; + + TCHAR* t1 = discardEscapeChar(goop1->image); + TCHAR* t2 = discardEscapeChar(goop2->image); + q = getRangeQuery(_field, t1, t2, false); + _CLDELETE_LCARRAY(t1); + _CLDELETE_LCARRAY(t2); + break; + } + case QUOTED: + { + term = jj_consume_token(QUOTED); + if (((jj_ntk==-1)?f_jj_ntk():jj_ntk) == FUZZY_SLOP) + fuzzySlop = jj_consume_token(FUZZY_SLOP); + else + jj_la1[20] = jj_gen; + + if (((jj_ntk==-1)?f_jj_ntk():jj_ntk) == CARAT) + { + jj_consume_token(CARAT); + boost = jj_consume_token(NUMBER); + } + else + jj_la1[21] = jj_gen; + + int32_t s = phraseSlop; + + if (fuzzySlop != NULL) { + try { + s = _ttoi(fuzzySlop->image + 1); + } + catch (...) { /* ignore exceptions */ } + } + // TODO: Make sure this hack, save an extra dup, is legal and not harmful + const size_t st = _tcslen(term->image); + term->image[st-1]='\0'; + TCHAR* tmp = discardEscapeChar(term->image+1); + q = getFieldQuery(_field, tmp, s); + _CLDELETE_LCARRAY(tmp); + break; + } + default: + { + jj_la1[22] = jj_gen; + jj_consume_token(-1); + _CLTHROWT(CL_ERR_Parse,_T("")); + } + } + if (boost != NULL) { + float_t f = 1.0; + try { + f = _tcstod(boost->image, NULL); + } + catch (...) { + /* Should this be handled somehow? (defaults to "no boost", if + * boost number is invalid) + */ + } + + // avoid boosting null queries, such as those caused by stop words + if (q != NULL) { + q->setBoost(f); + } + } + return q; +} + +bool QueryParser::jj_2_1(const int32_t xla) { + jj_la = xla; jj_lastpos = jj_scanpos = token; + try { return !jj_3_1(); } + catch(CLuceneError& e) { + // TODO: Improve this handling + if (e.number()==CL_ERR_Parse && _tcscmp(e.twhat(),_T("LookaheadSuccess"))==0) + return true; + else + throw e; + } + _CLFINALLY( jj_save(0, xla); ); +} + +bool QueryParser::jj_3R_2() { + if (jj_scan_token(TERM)) return true; + if (jj_scan_token(COLON)) return true; + return false; +} + +bool QueryParser::jj_3_1() { + QueryToken* xsp = jj_scanpos; + if (jj_3R_2()) { + jj_scanpos = xsp; + if (jj_3R_3()) return true; + } + return false; +} + +bool QueryParser::jj_3R_3() { + if (jj_scan_token(STAR)) return true; + if (jj_scan_token(COLON)) return true; + return false; +} + +QueryParser::QueryParser(CharStream* stream):_operator(OR_OPERATOR), + lowercaseExpandedTerms(true),useOldRangeQuery(false),allowLeadingWildcard(false),enablePositionIncrements(false), + analyzer(NULL),field(NULL),phraseSlop(0),fuzzyMinSim(FuzzyQuery::defaultMinSimilarity), + fuzzyPrefixLength(FuzzyQuery::defaultPrefixLength),/*locale(NULL),*/ + dateResolution(CL_NS(document)::DateTools::NO_RESOLUTION),fieldToDateResolution(NULL), + token_source(NULL),token(NULL),jj_nt(NULL),_firstToken(NULL),jj_ntk(-1),jj_scanpos(NULL),jj_lastpos(NULL),jj_la(0), + lookingAhead(false),jj_gen(0),jj_2_rtns(NULL),jj_rescan(false),jj_gc(0),jj_expentries(NULL),jj_expentry(NULL), + jj_kind(-1),jj_endpos(0) +{ + _init(stream); +} + +void QueryParser::_init(CharStream* stream){ + if (token_source == NULL) + token_source = _CLNEW QueryParserTokenManager(stream); + _firstToken = token = _CLNEW QueryToken(); + jj_ntk = -1; + jj_gen = 0; + for (int32_t i = 0; i < 23; i++) jj_la1[i] = -1; + jj_2_rtns = new JJCalls(); +} + +QueryToken* QueryParser::jj_consume_token(const int32_t kind) +{ + QueryToken* oldToken = token; + if (token->next != NULL) + token = token->next; + else + token = token->next = token_source->getNextToken(); + jj_ntk = -1; + if (token->kind == kind) { + jj_gen++; + if (++jj_gc > 100) { + jj_gc = 0; + JJCalls* c = jj_2_rtns; + while (c != NULL) { + if (c->gen < jj_gen) c->first = NULL; + c = c->next; + } + } + return token; + } + token = oldToken; + jj_kind = kind; + generateParseException(); + return NULL; +} + +bool QueryParser::jj_scan_token(const int32_t kind) { + if (jj_scanpos == jj_lastpos) { + jj_la--; + if (jj_scanpos->next == NULL) { + jj_lastpos = jj_scanpos = jj_scanpos->next = token_source->getNextToken(); + } else { + jj_lastpos = jj_scanpos = jj_scanpos->next; + } + } else { + jj_scanpos = jj_scanpos->next; + } + if (jj_rescan) { + int32_t i = 0; QueryToken* tok = token; + while (tok != NULL && tok != jj_scanpos) { i++; tok = tok->next; } + if (tok != NULL) jj_add_error_token(kind, i); + } + if (jj_scanpos->kind != kind) return true; + if (jj_la == 0 && jj_scanpos == jj_lastpos) _CLTHROWT(CL_ERR_Parse, _T("LookaheadSuccess")); + return false; +} + +void QueryParser::ReInit(CharStream* stream) { + token_source->ReInit(stream); + delete jj_2_rtns; + _deleteTokens(); + _init(NULL); +} + +QueryParser::QueryParser(QueryParserTokenManager* tm):_operator(OR_OPERATOR), + lowercaseExpandedTerms(true),useOldRangeQuery(false),allowLeadingWildcard(false),enablePositionIncrements(false), + analyzer(NULL),field(NULL),phraseSlop(0),fuzzyMinSim(FuzzyQuery::defaultMinSimilarity), + fuzzyPrefixLength(FuzzyQuery::defaultPrefixLength),/*locale(NULL),*/ + dateResolution(CL_NS(document)::DateTools::NO_RESOLUTION),fieldToDateResolution(NULL), + token_source(NULL),token(NULL),jj_nt(NULL),_firstToken(NULL),jj_ntk(-1),jj_scanpos(NULL),jj_lastpos(NULL),jj_la(0), + lookingAhead(false),jj_gen(0),jj_2_rtns(NULL),jj_rescan(false),jj_gc(0),jj_expentries(NULL),jj_expentry(NULL), + jj_kind(-1),jj_endpos(0) +{ + ReInit(tm); +} + +void QueryParser::ReInit(QueryParserTokenManager* tm){ + _CLLDELETE(token_source); + token_source = tm; + _deleteTokens(); + _firstToken = token = _CLNEW QueryToken(); + jj_ntk = -1; + jj_gen = 0; + for (int32_t i = 0; i < 23; i++) jj_la1[i] = -1; + delete jj_2_rtns; + jj_2_rtns = new JJCalls(); +} + +QueryToken* QueryParser::getNextToken() { + if (token->next != NULL) token = token->next; + else token = token->next = token_source->getNextToken(); + jj_ntk = -1; + jj_gen++; + return token; +} + +QueryToken* QueryParser::getToken(int32_t index) { + QueryToken* t = lookingAhead ? jj_scanpos : token; + for (int32_t i = 0; i < index; i++) { + if (t->next != NULL) t = t->next; + else t = t->next = token_source->getNextToken(); + } + return t; +} + +int32_t QueryParser::f_jj_ntk() { + if ((jj_nt=token->next) == NULL){ + token->next=token_source->getNextToken(); + jj_ntk = token->next->kind; + return jj_ntk; + } + else{ + jj_ntk = jj_nt->kind; + return jj_ntk; + } +} + +QueryParser::JJCalls::JJCalls():gen(0),first(NULL),arg(0),next(NULL) +{ +} +QueryParser::JJCalls::~JJCalls(){ + _CLLDELETE(first); + delete next; +} + +void QueryParser::jj_add_error_token(const int32_t kind, int32_t pos) { + if (pos >= 100) return; + if (pos == jj_endpos + 1) { + jj_lasttokens[jj_endpos++] = kind; + } else if (jj_endpos != 0) { + _CLLDELETE(jj_expentry); + jj_expentry = _CLNEW ValueArray(jj_endpos); + for (int32_t i = 0; i < jj_endpos; i++) { + jj_expentry->values[i] = jj_lasttokens[i]; + } + bool exists = false; + if (!jj_expentries) jj_expentries = _CLNEW CL_NS(util)::CLVector*, CL_NS(util)::Deletor::Object< CL_NS(util)::ValueArray > >(); + for (size_t i=0;isize();i++){ + const ValueArray* oldentry = jj_expentries->at(i); + if (oldentry->length == jj_expentry->length) { + exists = true; + for (size_t i = 0; i < jj_expentry->length; i++) { + if (oldentry->values[i] != jj_expentry->values[i]) { + exists = false; + break; + } + } + if (exists) break; + } + } + if (!exists) {jj_expentries->push_back(jj_expentry); jj_expentry=NULL;} + if (pos != 0) jj_lasttokens[(jj_endpos = pos) - 1] = kind; + } +} + +void QueryParser::generateParseException() { + // lazily create the vectors required for this operation + if (!jj_expentries) + jj_expentries = _CLNEW CL_NS(util)::CLVector*, CL_NS(util)::Deletor::Object< CL_NS(util)::ValueArray > >(); + else + jj_expentries->clear(); + bool la1tokens[33]; + for (int32_t i = 0; i < 33; i++) { + la1tokens[i] = false; + } + if (jj_kind >= 0) { + la1tokens[jj_kind] = true; + jj_kind = -1; + } + for (int32_t i = 0; i < 23; i++) { + if (jj_la1[i] == jj_gen) { + for (int32_t j = 0; j < 32; j++) { + if ((jj_la1_0[i] & (1<(1); + jj_expentry->values[0] = i; + jj_expentries->push_back(jj_expentry); + jj_expentry=NULL; + } + } + jj_endpos = 0; + jj_rescan_token(); + jj_add_error_token(0, 0); + + TCHAR* err = getParseExceptionMessage(token, jj_expentries, tokenImage); + _CLTHROWT_DEL(CL_ERR_Parse, err); +} + +void QueryParser::jj_rescan_token() { + jj_rescan = true; + JJCalls* p = jj_2_rtns; + do { + if (p->gen > jj_gen) { + jj_la = p->arg; jj_lastpos = jj_scanpos = p->first; + jj_3_1(); + } + p = p->next; + } while (p != NULL); + jj_rescan = false; +} + +void QueryParser::jj_save(const int32_t /*index*/, int32_t xla) { + JJCalls* p = jj_2_rtns; + while (p->gen > jj_gen) { + if (p->next == NULL) { p = p->next = new JJCalls(); break; } + p = p->next; + } + p->gen = jj_gen + xla - jj_la; + p->first = token; + p->arg = xla; +} + +TCHAR* QueryParserConstants::addEscapes(TCHAR* str) { + const size_t len = _tcslen(str); + StringBuffer retval(len * 2); + TCHAR ch; + for (size_t i = 0; i < len; i++) { + switch (str[i]) + { + case 0 : + continue; + case _T('\b'): + retval.append(_T("\\b")); + continue; + case _T('\t'): + retval.append(_T("\\t")); + continue; + case _T('\n'): + retval.append(_T("\\n")); + continue; + case _T('\f'): + retval.append(_T("\\f")); + continue; + case _T('\r'): + retval.append(_T("\\r")); + continue; + case _T('"'): + retval.append(_T("\\\"")); + continue; + case _T('\''): + retval.append(_T("\\'")); + continue; + case _T('\\'): + retval.append(_T("\\\\")); + continue; + default: + if ((ch = str[i]) < 0x20 || ch > 0x7e) { + TCHAR buf[4]; + _sntprintf(buf, 4, _T("%012X"), static_cast(ch)); + retval.append(_T("\\u")); + retval.append(buf); + } else { + retval.appendChar(ch); + } + continue; + } + } + return retval.giveBuffer(); +} + +TCHAR* QueryParser::getParseExceptionMessage(QueryToken* currentToken, + CL_NS(util)::CLVector< CL_NS(util)::ValueArray*, CL_NS(util)::Deletor::Object< CL_NS(util)::ValueArray > >* expectedTokenSequences, + const TCHAR* tokenImage[]) +{ + // TODO: Check to see what's a realistic initial value for the buffers here + // TODO: Make eol configurable (will be useful for PrintStream implementation as well later)? + const TCHAR* eol = _T("\n"); + + StringBuffer expected(CL_MAX_PATH); + size_t maxSize = 0; + for (size_t i = 0; i < expectedTokenSequences->size(); i++) { + if (maxSize < expectedTokenSequences->at(i)->length) { + maxSize = expectedTokenSequences->at(i)->length; + } + for (size_t j = 0; j < expectedTokenSequences->at(i)->length; j++) { + expected.append(tokenImage[expectedTokenSequences->at(i)->values[j]]); + expected.appendChar(_T(' ')); + } + if (expectedTokenSequences->at(i)->values[expectedTokenSequences->at(i)->length - 1] != 0) { + expected.append(_T("...")); + } + expected.append(eol); + expected.append(_T(" ")); + } + + StringBuffer retval(CL_MAX_PATH); + retval.append(_T("Encountered \"")); + QueryToken* tok = currentToken->next; + for (size_t i = 0; i < maxSize; i++) { + if (i != 0) retval.appendChar(' '); + if (tok->kind == 0) { + retval.append(tokenImage[0]); + break; + } + if (tok->image){ + TCHAR* buf = addEscapes(tok->image); + retval.append(buf); + _CLDELETE_CARRAY(buf); + } + tok = tok->next; + } + retval.append(_T("\" at line ")); + retval.appendInt(currentToken->next->beginLine); + retval.append(_T(", column ")); + retval.appendInt(currentToken->next->beginColumn); + retval.appendChar(_T('.')); + retval.append(eol); + if (expectedTokenSequences->size() == 1) { + retval.append(_T("Was expecting:")); + retval.append(eol); + retval.append(_T(" ")); + } else { + retval.append(_T("Was expecting one of:")); + retval.append(eol); + retval.append(_T(" ")); + } + retval.append(expected.getBuffer()); + + return retval.giveBuffer(); +} + +CL_NS_END diff --git a/Pods/BRCLucene/src/core/CLucene/queryParser/QueryParser.h b/Pods/BRCLucene/src/core/CLucene/queryParser/QueryParser.h new file mode 100644 index 0000000..3ca5c55 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/queryParser/QueryParser.h @@ -0,0 +1,530 @@ +/*------------------------------------------------------------------------------ +* 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_ + +#include "CLucene/util/Array.h" +#include "QueryParserTokenManager.h" +#include "CLucene/document/DateTools.h" +#include "CLucene/util/VoidMap.h" +#include "CLucene/util/VoidList.h" + +CL_CLASS_DEF(index,Term) +CL_CLASS_DEF(analysis,Analyzer) +CL_CLASS_DEF(search,Query) +CL_CLASS_DEF(search,BooleanClause) + +CL_NS_DEF(queryParser) + +class QueryParserConstants; + +/** + * This class is generated by JavaCC. The most important method is + * {@link #parse(String)}. + * + * The syntax for query strings is as follows: + * A Query is a series of clauses. + * A clause may be prefixed by: + *
    + *
  • a plus (+) or a minus (-) sign, indicating + * that the clause is required or prohibited respectively; or + *
  • a term followed by a colon, indicating the field to be searched. + * This enables one to construct queries which search multiple fields. + *
+ * + * A clause may be either: + *
    + *
  • a term, indicating all the documents that contain this term; or + *
  • a nested query, enclosed in parentheses. Note that this may be used + * with a +/- prefix to require any of a set of + * terms. + *
+ * + * Thus, in BNF, the query grammar is: + *
+ *   Query  ::= ( Clause )*
+ *   Clause ::= ["+", "-"] [<TERM> ":"] ( <TERM> | "(" Query ")" )
+ * 
+ * + *

+ * Examples of appropriately formatted queries can be found in the query syntax + * documentation. + *

+ * + *

+ * In {@link RangeQuery}s, QueryParser tries to detect date values, e.g. + * date:[6/1/2005 TO 6/4/2005] produces a range query that searches + * for "date" fields between 2005-06-01 and 2005-06-04. Note that the format + * of the accepted input depends on {@link #setLocale(Locale) the locale}. + * By default a date is converted into a search term using the deprecated + * {@link DateField} for compatibility reasons. + * To use the new {@link DateTools} to convert dates, a + * {@link org.apache.lucene.document.DateTools.Resolution} has to be set. + *

+ *

+ * The date resolution that shall be used for RangeQueries can be set + * using {@link #setDateResolution(DateTools.Resolution)} + * or {@link #setDateResolution(String, DateTools.Resolution)}. The former + * sets the default date resolution for all fields, whereas the latter can + * be used to set field specific date resolutions. Field specific date + * resolutions take, if set, precedence over the default date resolution. + *

+ *

+ * If you use neither {@link DateField} nor {@link DateTools} in your + * index, you can create your own + * query parser that inherits QueryParser and overwrites + * {@link #getRangeQuery(String, String, String, boolean)} to + * use a different method for date conversion. + *

+ * + *

Note that QueryParser is not thread-safe.

+ * + * @author Brian Goetz + * @author Peter Halacsy + * @author Tatu Saloranta + */ +class CLUCENE_EXPORT QueryParser : public virtual QueryParserConstants +{ +private: + LUCENE_STATIC_CONSTANT(int32_t, CONJ_NONE=0); + LUCENE_STATIC_CONSTANT(int32_t, CONJ_AND=1); + LUCENE_STATIC_CONSTANT(int32_t, CONJ_OR=2); + + LUCENE_STATIC_CONSTANT(int32_t, MOD_NONE=0); + LUCENE_STATIC_CONSTANT(int32_t, MOD_NOT=10); + LUCENE_STATIC_CONSTANT(int32_t, MOD_REQ=11); + +public: + /** The default operator for parsing queries. + * Use {@link QueryParser#setDefaultOperator} to change it. + */ + enum Operator { + OR_OPERATOR, + AND_OPERATOR + }; + +private: + /** The actual operator that parser uses to combine query terms */ + Operator _operator; + + bool lowercaseExpandedTerms; + bool useOldRangeQuery; + bool allowLeadingWildcard; + bool enablePositionIncrements; + + CL_NS(analysis)::Analyzer* analyzer; + TCHAR* field; + int32_t phraseSlop; + float_t fuzzyMinSim; + int32_t fuzzyPrefixLength; + //TODO: Locale locale = Locale.getDefault(); + + // the default date resolution + CL_NS(document)::DateTools::Resolution dateResolution; + // maps field names to date resolutions + typedef CL_NS(util)::CLHashMap FieldToDateResolutionType; + FieldToDateResolutionType* fieldToDateResolution; + +public: + /** Constructs a query parser. + * @param f the default field for query terms. + * @param a used to find terms in the query text. + */ + QueryParser(const TCHAR* f, CL_NS(analysis)::Analyzer* a); + virtual ~QueryParser(); + void _deleteTokens(); + + /** For backward compatibility */ + static CL_NS(search)::Query* parse(const TCHAR* q, const TCHAR* f, CL_NS(analysis)::Analyzer* a); + + /** Parses a query string, returning a {@link org.apache.lucene.search.Query}. + * @param query the query string to be parsed. + * @throws ParseException if the parsing fails + */ + CL_NS(search)::Query* parse(const TCHAR* _query); + + /** + * @return Returns the analyzer. + */ + CL_NS(analysis)::Analyzer* getAnalyzer() const; + + /** + * @return Returns the field. + */ + const TCHAR* getField() const; + + /** + * Get the minimal similarity for fuzzy queries. + */ + float_t getFuzzyMinSim() const; + + /** + * Set the minimum similarity for fuzzy queries. + * Default is 0.5f. + */ + void setFuzzyMinSim(const float_t _fuzzyMinSim); + + /** + * Get the prefix length for fuzzy queries. + * @return Returns the fuzzyPrefixLength. + */ + int32_t getFuzzyPrefixLength() const; + + /** + * Set the prefix length for fuzzy queries. Default is 0. + * @param fuzzyPrefixLength The fuzzyPrefixLength to set. + */ + void setFuzzyPrefixLength(const int32_t _fuzzyPrefixLength); + + /** + * Sets the default slop for phrases. If zero, then exact phrase matches + * are required. Default value is zero. + */ + void setPhraseSlop(const int32_t _phraseSlop); + + /** + * Gets the default slop for phrases. + */ + int32_t getPhraseSlop() const; + + /** + * Set to true to allow leading wildcard characters. + *

+ * When set, * or ? are allowed as + * the first character of a PrefixQuery and WildcardQuery. + * Note that this can produce very slow + * queries on big indexes. + *

+ * Default: false. + */ + void setAllowLeadingWildcard(const bool _allowLeadingWildcard); + + /** + * @see #setAllowLeadingWildcard(boolean) + */ + bool getAllowLeadingWildcard() const; + + /** + * Set to true to enable position increments in result query. + *

+ * When set, result phrase and multi-phrase queries will + * be aware of position increments. + * Useful when e.g. a StopFilter increases the position increment of + * the token that follows an omitted token. + *

+ * Default: false. + */ + void setEnablePositionIncrements(const bool _enable); + + /** + * @see #setEnablePositionIncrements(boolean) + */ + bool getEnablePositionIncrements() const; + + /** + * Sets the boolean operator of the QueryParser. + * In default mode (OR_OPERATOR) terms without any modifiers + * are considered optional: for example capital of Hungary is equal to + * capital OR of OR Hungary.
+ * In AND_OPERATOR mode terms are considered to be in conjuction: the + * above mentioned query is parsed as capital AND of AND Hungary + */ + void setDefaultOperator(Operator _op); + + /** + * Gets implicit operator setting, which will be either AND_OPERATOR + * or OR_OPERATOR. + */ + Operator getDefaultOperator() const; + + /** + * Whether terms of wildcard, prefix, fuzzy and range queries are to be automatically + * lower-cased or not. Default is true. + */ + void setLowercaseExpandedTerms(const bool _lowercaseExpandedTerms); + + /** + * @see #setLowercaseExpandedTerms(boolean) + */ + bool getLowercaseExpandedTerms() const; + + /** + * By default QueryParser uses new ConstantScoreRangeQuery in preference to RangeQuery + * for range queries. This implementation is generally preferable because it + * a) Runs faster b) Does not have the scarcity of range terms unduly influence score + * c) avoids any "TooManyBooleanClauses" exception. + * However, if your application really needs to use the old-fashioned RangeQuery and the above + * points are not required then set this option to true + * Default is false. + */ + void setUseOldRangeQuery(const bool _useOldRangeQuery); + + /** + * @see #setUseOldRangeQuery(boolean) + */ + bool getUseOldRangeQuery() const; + + /** + * Set locale used by date range parsing. + * + void setLocale(const Locale _locale) { + locale = _locale; + } + + + * Returns current locale, allowing access by subclasses. + * + Locale getLocale() const { + return locale; + } + */ + + /** + * Sets the default date resolution used by RangeQueries for fields for which no + * specific date resolutions has been set. Field specific resolutions can be set + * with {@link #setDateResolution(String, DateTools.Resolution)}. + * + * @param dateResolution the default date resolution to set + */ + void setDateResolution(const CL_NS(document)::DateTools::Resolution _dateResolution); + + /** + * Sets the date resolution used by RangeQueries for a specific field. + * + * @param fieldName field for which the date resolution is to be set + * @param dateResolution date resolution to set + */ + void setDateResolution(const TCHAR* fieldName, const CL_NS(document)::DateTools::Resolution _dateResolution); + + /** + * Returns the date resolution that is used by RangeQueries for the given field. + * Returns null (NO_RESOLUTION), if no default or field specific date resolution has been set + * for the given field. + * + */ + CL_NS(document)::DateTools::Resolution getDateResolution(const TCHAR* fieldName) const; + +protected: + void addClause(std::vector& clauses, int32_t conj, int32_t mods, CL_NS(search)::Query* q); + + /** + * @exception ParseException throw in overridden method to disallow + */ + virtual CL_NS(search)::Query* getFieldQuery(const TCHAR* _field, TCHAR* queryText); + + /** + * Base implementation delegates to {@link #getFieldQuery(String,String)}. + * This method may be overridden, for example, to return + * a SpanNearQuery instead of a PhraseQuery. + * + * @exception ParseException throw in overridden method to disallow + */ + virtual CL_NS(search)::Query* getFieldQuery(const TCHAR* _field, TCHAR* queryText, const int32_t slop); + + /** + * @exception ParseException throw in overridden method to disallow + */ + virtual CL_NS(search)::Query* getRangeQuery(const TCHAR* field, TCHAR* part1, TCHAR* part2, const bool inclusive); + + /** + * 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. + * @param disableCoord true if coord scoring should be disabled. + * + * @return Resulting {@link Query} object. + * @exception ParseException throw in overridden method to disallow + */ + CL_NS(search)::Query* getBooleanQuery(std::vector& clauses, bool disableCoord = false); + + /** + * 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) + *

+ * 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. + *

+ * 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 + * @exception ParseException throw in overridden method 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 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. + *

+ * 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. + *

+ * 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 + * (without trailing '*' character!) + * + * @return Resulting {@link Query} built for the term + * @exception ParseException throw in overridden method to disallow + */ + virtual CL_NS(search)::Query* getPrefixQuery(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 + * @exception ParseException throw in overridden method to disallow + */ + virtual CL_NS(search)::Query* getFuzzyQuery(const TCHAR* _field, TCHAR* termStr, const float_t minSimilarity); + +private: + /** + * Returns a String where the escape char has been + * removed, or kept only once if there was a double escape. + * + * Supports escaped unicode characters, e. g. translates + * A to A. + * + * @memory caller is responsible to free the returned string + * + */ + TCHAR* discardEscapeChar(TCHAR* input, TCHAR* output=NULL); + + /** Returns the numeric value of the hexadecimal character */ + static int32_t hexToInt(TCHAR c); + + struct JJCalls; + +public: + /** + * Returns a String where those characters that QueryParser + * expects to be escaped are escaped by a preceding \. + * + * @memory caller is responsible to free the returned string + */ + static TCHAR* escape(const TCHAR* s); + + // * Query ::= ( Clause )* + // * Clause ::= ["+", "-"] [ ":"] ( | "(" Query ")" ) + int32_t Conjunction(); + + int32_t Modifiers(); + + // This makes sure that there is no garbage after the query string + CL_NS(search)::Query* TopLevelQuery(TCHAR* _field); + + CL_NS(search)::Query* fQuery(TCHAR* _field); + + CL_NS(search)::Query* fClause(TCHAR* _field); + +public: + CL_NS(search)::Query* fTerm(const TCHAR* _field); + +private: + bool jj_2_1(const int32_t xla); + bool jj_3R_2(); + bool jj_3_1(); + bool jj_3R_3(); + +public: + QueryParserTokenManager* token_source; + QueryToken *token, *jj_nt; +private: + QueryToken *_firstToken; + int32_t jj_ntk; + QueryToken *jj_scanpos, *jj_lastpos; + int32_t jj_la; +public: + bool lookingAhead; +private: + bool jj_semLA; + int32_t jj_gen; + int32_t jj_la1[23]; + static const int32_t jj_la1_0[]; + static const int32_t jj_la1_1[]; + JJCalls* jj_2_rtns; + bool jj_rescan; + int32_t jj_gc; + +public: + QueryParser(CharStream* stream); + void ReInit(CharStream* stream); + QueryParser(QueryParserTokenManager* tm); + void ReInit(QueryParserTokenManager* tm); + +private: + void _init(CharStream* stream); + QueryToken* jj_consume_token(const int32_t kind); + bool jj_scan_token(const int32_t kind); + +public: + QueryToken* getNextToken(); + QueryToken* getToken(int32_t index); + +private: + int32_t f_jj_ntk(); + + CL_NS(util)::CLVector< CL_NS(util)::ValueArray*, + CL_NS(util)::Deletor::Object< CL_NS(util)::ValueArray > + >* jj_expentries; + CL_NS(util)::ValueArray* jj_expentry; + int32_t jj_kind; + int32_t jj_lasttokens[100]; + int32_t jj_endpos; + + void jj_add_error_token(const int32_t kind, int32_t pos); + +public: + void generateParseException(); + + //void enable_tracing() {} + //void disable_tracing() {} + +private: + void jj_rescan_token(); + void jj_save(const int32_t index, int32_t xla); + + TCHAR* getParseExceptionMessage(QueryToken* currentToken, + CL_NS(util)::CLVector< CL_NS(util)::ValueArray*, + CL_NS(util)::Deletor::Object< CL_NS(util)::ValueArray > >* expectedTokenSequences, + const TCHAR* tokenImage[]); +}; +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/queryParser/QueryParserConstants.h b/Pods/BRCLucene/src/core/CLucene/queryParser/QueryParserConstants.h new file mode 100644 index 0000000..96accb4 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/queryParser/QueryParserConstants.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. +------------------------------------------------------------------------------*/ +#ifndef _lucene_queryParser_QueryParserConstants_ +#define _lucene_queryParser_QueryParserConstants_ + +CL_NS_DEF(queryParser) + +class CLUCENE_EXPORT QueryParserConstants { +public: + enum Types { + _EOF = 0, + _NUM_CHAR = 1, + _ESCAPED_CHAR = 2, + _TERM_START_CHAR = 3, + _TERM_CHAR = 4, + _WHITESPACE = 5, + AND = 7, + OR = 8, + NOT = 9, + PLUS = 10, + MINUS = 11, + LPAREN = 12, + RPAREN = 13, + COLON = 14, + STAR = 15, + CARAT = 16, + QUOTED = 17, + TERM = 18, + FUZZY_SLOP = 19, + PREFIXTERM = 20, + WILDTERM = 21, + RANGEIN_START = 22, + RANGEEX_START = 23, + NUMBER = 24, + RANGEIN_TO = 25, + RANGEIN_END = 26, + RANGEIN_QUOTED = 27, + RANGEIN_GOOP = 28, + RANGEEX_TO = 29, + RANGEEX_END = 30, + RANGEEX_QUOTED = 31, + RANGEEX_GOOP = 32 + }; + + enum LexStates { + Boost = 0, + RangeEx = 1, + RangeIn = 2, + DEFAULT = 3 + }; + + static const TCHAR* tokenImage[]; + +protected: + /** + * Used to convert raw characters to their escaped version + * when these raw version cannot be used as part of an ASCII + * string literal, while formatting an error message. + * Called internally only by error reporting tools. + */ + static TCHAR* addEscapes(TCHAR* str); +}; +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/queryParser/QueryParserTokenManager.cpp b/Pods/BRCLucene/src/core/CLucene/queryParser/QueryParserTokenManager.cpp new file mode 100644 index 0000000..9e0c96d --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/queryParser/QueryParserTokenManager.cpp @@ -0,0 +1,1277 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "QueryParserTokenManager.h" +#include "_CharStream.h" +#include "_FastCharStream.h" +#include "QueryToken.h" + +#include "CLucene/util/StringBuffer.h" + +CL_NS_DEF(queryParser) + +const int64_t QueryParserTokenManager::jjbitVec2[]={0x0L, 0x0L, int64_t(_ILONGLONG(0xffffffffffffffff)), int64_t(_ILONGLONG(0xffffffffffffffff))}; +const int64_t QueryParserTokenManager::jjbitVec0[] = { + int64_t(_ILONGLONG(0xfffffffffffffffe)), int64_t(_ILONGLONG(0xffffffffffffffff)), int64_t(_ILONGLONG(0xffffffffffffffff)), int64_t(_ILONGLONG(0xffffffffffffffff)) +}; +const int32_t QueryParserTokenManager::jjnextStates[]={ + 15, 17, 18, 29, 32, 23, 33, 30, 20, 21, 32, 23, 33, 31, 34, 27, + 2, 4, 5, 0, 1 +}; +const TCHAR* QueryParserTokenManager::jjstrLiteralImages[]={ + _T(""), NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, _T("\53"), _T("\55)"), _T("\50)"), + _T("\51"), _T("\72"), _T("\52"), _T("\136"), NULL, NULL, NULL, NULL, NULL, _T("\133"), _T("\173"), NULL, + _T("\124\117"), _T("\135"), NULL, NULL, _T("\124\117"), _T("\175"), NULL, NULL +}; +const TCHAR* QueryParserTokenManager::lexStateNames [] = { + _T("Boost"), + _T("RangeEx"), + _T("RangeIn"), + _T("DEFAULT") +}; +const int32_t QueryParserTokenManager::jjnewLexState [] = { + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, -1, 2, 1, 3, + -1, 3, -1, -1, -1, 3, -1, -1 +}; +const int64_t QueryParserTokenManager::jjtoToken [] = { + _ILONGLONG(0x1ffffff81) +}; +const int64_t QueryParserTokenManager::jjtoSkip [] = { + _ILONGLONG(0x40) +}; + +QueryParserTokenManager::QueryParserTokenManager(CharStream* stream, const int32_t lexState) : + input_stream(stream), curChar(0), curLexState(3), defaultLexState(3),jjnewStateCnt(0),jjround(0), + jjmatchedPos(0),jjmatchedKind(0) +{ + if (lexState > -1) + SwitchTo(lexState); +} +QueryParserTokenManager::~QueryParserTokenManager() +{ + _CLLDELETE(input_stream); +} + +int32_t QueryParserTokenManager::jjStopStringLiteralDfa_3(const int32_t /*pos*/, int64_t /*active0*/) +{ + return -1; +} + +int32_t QueryParserTokenManager::jjStartNfa_3(int32_t pos, int64_t active0) +{ + return jjMoveNfa_3(jjStopStringLiteralDfa_3(pos, active0), pos + 1); +} + +int32_t QueryParserTokenManager::jjStopAtPos(const int32_t pos, const int32_t kind) +{ + jjmatchedKind = kind; + jjmatchedPos = pos; + return pos + 1; +} + +int32_t QueryParserTokenManager::jjStartNfaWithStates_3(int32_t pos, int32_t kind, int32_t state) +{ + jjmatchedKind = kind; + jjmatchedPos = pos; + try { curChar = input_stream->readChar(); } + catch(CLuceneError& e) { + if (e.number() != CL_ERR_IO) + { + throw e; + } + else + return pos + 1; + } + return jjMoveNfa_3(state, pos + 1); +} + +int32_t QueryParserTokenManager::jjMoveStringLiteralDfa0_3() +{ + switch(curChar) + { + case 40: + return jjStopAtPos(0, 12); + case 41: + return jjStopAtPos(0, 13); + case 42: + return jjStartNfaWithStates_3(0, 15, 36); + case 43: + return jjStopAtPos(0, 10); + case 45: + return jjStopAtPos(0, 11); + case 58: + return jjStopAtPos(0, 14); + case 91: + return jjStopAtPos(0, 22); + case 94: + return jjStopAtPos(0, 16); + case 123: + return jjStopAtPos(0, 23); + default : + return jjMoveNfa_3(0, 0); + } +} + +void QueryParserTokenManager::jjCheckNAdd(const int32_t state) +{ + if (jjrounds[state] != jjround) + { + jjstateSet[jjnewStateCnt++] = state; + jjrounds[state] = jjround; + } +} + +void QueryParserTokenManager::jjAddStates(int32_t start, const int32_t end) +{ + do { + jjstateSet[jjnewStateCnt++] = jjnextStates[start]; + } while (start++ != end); +} + +void QueryParserTokenManager::jjCheckNAddTwoStates(const int32_t state1, const int32_t state2) +{ + jjCheckNAdd(state1); + jjCheckNAdd(state2); +} + +void QueryParserTokenManager::jjCheckNAddStates(int32_t start, const int32_t end) +{ + do { + jjCheckNAdd(jjnextStates[start]); + } while (start++ != end); +} + +void QueryParserTokenManager::jjCheckNAddStates(const int32_t start) +{ + jjCheckNAdd(jjnextStates[start]); + jjCheckNAdd(jjnextStates[start + 1]); +} + +int32_t QueryParserTokenManager::jjMoveNfa_3(const int32_t startState, int32_t curPos) +{ + int32_t startsAt = 0; + jjnewStateCnt = 36; + int32_t i = 1; + jjstateSet[0] = startState; + int32_t kind = 0x7fffffff; + for (;;) + { + if (++jjround == 0x7fffffff) + ReInitRounds(); + if (curChar < 64) + { + uint64_t l = (uint64_t) (((uint64_t)1L) << ((int32_t)curChar)); + do + { + switch(jjstateSet[--i]) + { + case 36: + case 25: + if (( _ILONGLONG(0xfbfffcf8ffffd9ff) & l) == 0L) + break; + if (kind > 21) + kind = 21; + jjCheckNAddTwoStates(25, 26); + break; + case 0: + if (( _ILONGLONG(0xfbffd4f8ffffd9ff) & l) != 0L) + { + if (kind > 21) + kind = 21; + jjCheckNAddTwoStates(25, 26); + } + else if ((_ILONGLONG(0x100002600) & l) != 0L) + { + if (kind > 6) + kind = 6; + } + else if (curChar == 34) + jjCheckNAddStates(0, 2); + else if (curChar == 33) + { + if (kind > 9) + kind = 9; + } + if ((_ILONGLONG(0x7bffd0f8ffffd9ff) & l) != 0L) + { + if (kind > 18) + kind = 18; + jjCheckNAddStates(3, 7); + } + else if (curChar == 42) + { + if (kind > 20) + kind = 20; + } + if (curChar == 38) + jjstateSet[jjnewStateCnt++] = 4; + break; + case 4: + if (curChar == 38 && kind > 7) + kind = 7; + break; + case 5: + if (curChar == 38) + jjstateSet[jjnewStateCnt++] = 4; + break; + case 13: + if (curChar == 33 && kind > 9) + kind = 9; + break; + case 14: + case 16: + if (curChar == 34) + jjCheckNAddStates(0, 2); + break; + case 15: + if ((_ILONGLONG(0xfffffffbffffffff) & l) != 0L) + jjCheckNAddStates(0, 2); + break; + case 18: + if (curChar == 34 && kind > 17) + kind = 17; + break; + case 20: + if ((_ILONGLONG(0x3ff000000000000) & l) == 0L) + break; + if (kind > 19) + kind = 19; + jjAddStates(8, 9); + break; + case 21: + if (curChar == 46) + jjCheckNAdd(22); + break; + case 22: + if ((_ILONGLONG(0x3ff000000000000) & l) == 0L) + break; + if (kind > 19) + kind = 19; + jjCheckNAdd(22); + break; + case 23: + if (curChar == 42 && kind > 20) + kind = 20; + break; + case 24: + if ((_ILONGLONG(0xfbffd4f8ffffd9ff) & l) == 0L) + break; + if (kind > 21) + kind = 21; + jjCheckNAddTwoStates(25, 26); + break; + case 27: + if (kind > 21) + kind = 21; + jjCheckNAddTwoStates(25, 26); + break; + case 28: + if ((_ILONGLONG(0x7bffd0f8ffffd9ff) & l) == 0L) + break; + if (kind > 18) + kind = 18; + jjCheckNAddStates(3, 7); + break; + case 29: + if ((_ILONGLONG(0x7bfff8f8ffffd9ff) & l) == 0L) + break; + if (kind > 18) + kind = 18; + jjCheckNAddTwoStates(29, 30); + break; + case 31: + if (kind > 18) + kind = 18; + jjCheckNAddTwoStates(29, 30); + break; + case 32: + if ((_ILONGLONG(0x7bfff8f8ffffd9ff) & l) != 0L) + jjCheckNAddStates(10, 12); + break; + case 34: + jjCheckNAddStates(10, 12); + break; + default : break; + } + } while(i != startsAt); + } + else if (curChar < 128) + { + uint64_t l = ((uint64_t)1L) << (curChar & 63); + + do + { + switch(jjstateSet[--i]) + { + case 36: + if ((_ILONGLONG(0x97ffffff87ffffff) & l) != 0L) + { + if (kind > 21) + kind = 21; + jjCheckNAddTwoStates(25, 26); + } + else if (curChar == 92) + jjCheckNAddTwoStates(27, 27); + break; + case 0: + if ((_ILONGLONG(0x97ffffff87ffffff) & l) != 0L) + { + if (kind > 18) + kind = 18; + jjCheckNAddStates(3, 7); + } + else if (curChar == 92) + jjCheckNAddStates(13, 15); + else if (curChar == 126) + { + if (kind > 19) + kind = 19; + jjstateSet[jjnewStateCnt++] = 20; + } + if ((_ILONGLONG(0x97ffffff87ffffff) & l) != 0L) + { + if (kind > 21) + kind = 21; + jjCheckNAddTwoStates(25, 26); + } + if (curChar == 78) + jjstateSet[jjnewStateCnt++] = 11; + else if (curChar == 124) + jjstateSet[jjnewStateCnt++] = 8; + else if (curChar == 79) + jjstateSet[jjnewStateCnt++] = 6; + else if (curChar == 65) + jjstateSet[jjnewStateCnt++] = 2; + break; + case 1: + if (curChar == 68 && kind > 7) + kind = 7; + break; + case 2: + if (curChar == 78) + jjstateSet[jjnewStateCnt++] = 1; + break; + case 3: + if (curChar == 65) + jjstateSet[jjnewStateCnt++] = 2; + break; + case 6: + if (curChar == 82 && kind > 8) + kind = 8; + break; + case 7: + if (curChar == 79) + jjstateSet[jjnewStateCnt++] = 6; + break; + case 8: + if (curChar == 124 && kind > 8) + kind = 8; + break; + case 9: + if (curChar == 124) + jjstateSet[jjnewStateCnt++] = 8; + break; + case 10: + if (curChar == 84 && kind > 9) + kind = 9; + break; + case 11: + if (curChar == 79) + jjstateSet[jjnewStateCnt++] = 10; + break; + case 12: + if (curChar == 78) + jjstateSet[jjnewStateCnt++] = 11; + break; + case 15: + jjAddStates(0, 2); + break; + case 17: + if (curChar == 92) + jjstateSet[jjnewStateCnt++] = 16; + break; + case 19: + if (curChar != 126) + break; + if (kind > 19) + kind = 19; + jjstateSet[jjnewStateCnt++] = 20; + break; + case 24: + if ((_ILONGLONG(0x97ffffff87ffffff) & l) == 0L) + break; + if (kind > 21) + kind = 21; + jjCheckNAddTwoStates(25, 26); + break; + case 25: + if ((_ILONGLONG(0x97ffffff87ffffff) & l) == 0L) + break; + if (kind > 21) + kind = 21; + jjCheckNAddTwoStates(25, 26); + break; + case 26: + if (curChar == 92) + jjCheckNAddTwoStates(27, 27); + break; + case 27: + if (kind > 21) + kind = 21; + jjCheckNAddTwoStates(25, 26); + break; + case 28: + if ((_ILONGLONG(0x97ffffff87ffffff) & l) == 0L) + break; + if (kind > 18) + kind = 18; + jjCheckNAddStates(3, 7); + break; + case 29: + if ((_ILONGLONG(0x97ffffff87ffffff) & l) == 0L) + break; + if (kind > 18) + kind = 18; + jjCheckNAddTwoStates(29, 30); + break; + case 30: + if (curChar == 92) + jjCheckNAddTwoStates(31, 31); + break; + case 31: + if (kind > 18) + kind = 18; + jjCheckNAddTwoStates(29, 30); + break; + case 32: + if ((_ILONGLONG(0x97ffffff87ffffff) & l) != 0L) + jjCheckNAddStates(10, 12); + break; + case 33: + if (curChar == 92) + jjCheckNAddTwoStates(34, 34); + break; + case 34: + jjCheckNAddStates(10, 12); + break; + case 35: + if (curChar == 92) + jjCheckNAddStates(13, 15); + break; + default : break; + } + } while(i != startsAt); + } + else + { + int32_t hiByte = (int32_t)(curChar >> 8); + int32_t i1 = hiByte >> 6; + uint64_t l1 = ((uint64_t)1L) << (hiByte & 63); + int32_t i2 = (curChar & 0xff) >> 6; + uint64_t l2 = ((uint64_t)1L) << (curChar & 63); + + do + { + switch(jjstateSet[--i]) + { + case 36: + case 25: + case 27: + if (!jjCanMove_0(hiByte, i1, i2, l1, l2)) + break; + if (kind > 21) + kind = 21; + jjCheckNAddTwoStates(25, 26); + break; + case 0: + if (jjCanMove_0(hiByte, i1, i2, l1, l2)) + { + if (kind > 21) + kind = 21; + jjCheckNAddTwoStates(25, 26); + } + if (jjCanMove_0(hiByte, i1, i2, l1, l2)) + { + if (kind > 18) + kind = 18; + jjCheckNAddStates(3, 7); + } + break; + case 15: + if (jjCanMove_0(hiByte, i1, i2, l1, l2)) + jjAddStates(0, 2); + break; + case 24: + if (!jjCanMove_0(hiByte, i1, i2, l1, l2)) + break; + if (kind > 21) + kind = 21; + jjCheckNAddTwoStates(25, 26); + break; + case 28: + if (!jjCanMove_0(hiByte, i1, i2, l1, l2)) + break; + if (kind > 18) + kind = 18; + jjCheckNAddStates(3, 7); + break; + case 29: + case 31: + if (!jjCanMove_0(hiByte, i1, i2, l1, l2)) + break; + if (kind > 18) + kind = 18; + jjCheckNAddTwoStates(29, 30); + break; + case 32: + case 34: + if (jjCanMove_0(hiByte, i1, i2, l1, l2)) + jjCheckNAddStates(10, 12); + break; + default : break; + } + } while(i != startsAt); + } + if (kind != 0x7fffffff) + { + jjmatchedKind = kind; + jjmatchedPos = curPos; + kind = 0x7fffffff; + } + ++curPos; + i = jjnewStateCnt; + jjnewStateCnt = startsAt; + startsAt = 36 - jjnewStateCnt; + if (i == startsAt) + return curPos; + try { curChar = input_stream->readChar(); } + catch(CLuceneError& e) { + if (e.number() != CL_ERR_IO) + { + throw e; + } + else + return curPos; + } + } +} + +int32_t QueryParserTokenManager::jjStopStringLiteralDfa_1(const int32_t pos, const int64_t active0) +{ + switch (pos) + { + case 0: + if ((active0 & 0x20000000L) != 0L) + { + jjmatchedKind = 32; + return 6; + } + return -1; + default : + return -1; + } +} + +int32_t QueryParserTokenManager::jjStartNfa_1(int32_t pos, int64_t active0) +{ + return jjMoveNfa_1(jjStopStringLiteralDfa_1(pos, active0), pos + 1); +} + +int32_t QueryParserTokenManager::jjStartNfaWithStates_1(const int32_t pos, const int32_t kind, const int32_t state) +{ + jjmatchedKind = kind; + jjmatchedPos = pos; + try { curChar = input_stream->readChar(); } + catch(CLuceneError& e) { + if (e.number() != CL_ERR_IO) + { + throw e; + } + else + return pos + 1; + } + return jjMoveNfa_1(state, pos + 1); +} + +int32_t QueryParserTokenManager::jjMoveStringLiteralDfa0_1() +{ + switch(curChar) + { + case 84: + return jjMoveStringLiteralDfa1_1(0x20000000L); + case 125: + return jjStopAtPos(0, 30); + default : + return jjMoveNfa_1(0, 0); + } +} + +int32_t QueryParserTokenManager::jjMoveStringLiteralDfa1_1(int64_t active0) +{ + try { curChar = input_stream->readChar(); } + catch(CLuceneError& e) { + if (e.number() != CL_ERR_IO) + { + throw e; + } + else { + jjStopStringLiteralDfa_1(0, active0); + return 1; + } + } + switch(curChar) + { + case 79: + if ((active0 & 0x20000000L) != 0L) + return jjStartNfaWithStates_1(1, 29, 6); + break; + default : + break; + } + return jjStartNfa_1(0, active0); +} + +int32_t QueryParserTokenManager::jjMoveNfa_1(const int32_t startState, int32_t curPos) +{ + int32_t startsAt = 0; + jjnewStateCnt = 7; + int32_t i = 1; + jjstateSet[0] = startState; + int32_t kind = 0x7fffffff; + for (;;) + { + if (++jjround == 0x7fffffff) + ReInitRounds(); + if (curChar < 64) + { + uint64_t l = ((uint64_t)1L) << curChar; + + do + { + switch(jjstateSet[--i]) + { + case 0: + if ((_ILONGLONG(0xfffffffeffffffff) & l) != 0L) + { + if (kind > 32) + kind = 32; + jjCheckNAdd(6); + } + if ((_ILONGLONG(0x100002600) & l) != 0L) + { + if (kind > 6) + kind = 6; + } + else if (curChar == 34) + jjCheckNAddTwoStates(2, 4); + break; + case 1: + if (curChar == 34) + jjCheckNAddTwoStates(2, 4); + break; + case 2: + if ((_ILONGLONG(0xfffffffbffffffff) & l) != 0L) + jjCheckNAddStates(16, 18); + break; + case 3: + if (curChar == 34) + jjCheckNAddStates(16, 18); + break; + case 5: + if (curChar == 34 && kind > 31) + kind = 31; + break; + case 6: + if ((_ILONGLONG(0xfffffffeffffffff) & l) == 0L) + break; + if (kind > 32) + kind = 32; + jjCheckNAdd(6); + break; + default : break; + } + } while(i != startsAt); + } + else if (curChar < 128) + { + uint64_t l = ((uint64_t)1L) << (curChar & 63); + + do + { + switch(jjstateSet[--i]) + { + case 0: + case 6: + if ((_ILONGLONG(0xdfffffffffffffff) & l) == 0L) + break; + if (kind > 32) + kind = 32; + jjCheckNAdd(6); + break; + case 2: + jjAddStates(16, 18); + break; + case 4: + if (curChar == 92) + jjstateSet[jjnewStateCnt++] = 3; + break; + default : break; + } + } while(i != startsAt); + } + else + { + int32_t hiByte = (int32_t)(curChar >> 8); + int32_t i1 = hiByte >> 6; + uint64_t l1 = ((uint64_t)1L) << (hiByte & 63); + int32_t i2 = (curChar & 0xff) >> 6; + uint64_t l2 = ((uint64_t)1L) << (curChar & 63); + + do + { + switch(jjstateSet[--i]) + { + case 0: + case 6: + if (!jjCanMove_0(hiByte, i1, i2, l1, l2)) + break; + if (kind > 32) + kind = 32; + jjCheckNAdd(6); + break; + case 2: + if (jjCanMove_0(hiByte, i1, i2, l1, l2)) + jjAddStates(16, 18); + break; + default : break; + } + } while(i != startsAt); + } + if (kind != 0x7fffffff) + { + jjmatchedKind = kind; + jjmatchedPos = curPos; + kind = 0x7fffffff; + } + ++curPos; + i = jjnewStateCnt; + jjnewStateCnt = startsAt; + startsAt = 7 - jjnewStateCnt; + if (i == startsAt) + return curPos; + try { curChar = input_stream->readChar(); } + catch(CLuceneError& e) { + if (e.number() != CL_ERR_IO) + { + throw e; + } + else + return curPos; + } + } +} + +int32_t QueryParserTokenManager::jjMoveStringLiteralDfa0_0() +{ + return jjMoveNfa_0(0, 0); +} + +int32_t QueryParserTokenManager::jjMoveNfa_0(const int32_t startState, int32_t curPos) +{ + int32_t startsAt = 0; + jjnewStateCnt = 3; + int32_t i = 1; + jjstateSet[0] = startState; + int32_t kind = 0x7fffffff; + for (;;) + { + if (++jjround == 0x7fffffff) + ReInitRounds(); + if (curChar < 64) + { + uint64_t l = ((uint64_t)1L) << curChar; + + do + { + switch(jjstateSet[--i]) + { + case 0: + if ((_ILONGLONG(0x3ff000000000000) & l) == 0L) + break; + if (kind > 24) + kind = 24; + jjAddStates(19, 20); + break; + case 1: + if (curChar == 46) + jjCheckNAdd(2); + break; + case 2: + if ((_ILONGLONG(0x3ff000000000000) & l) == 0L) + break; + if (kind > 24) + kind = 24; + jjCheckNAdd(2); + break; + default : break; + } + } while(i != startsAt); + } + else if (curChar < 128) + { + /* + uint64_t l = ((uint64_t)1L) << (curChar & 63); + do + { + switch(jjstateSet[--i]) + { + default : break; + } + } while(i != startsAt);*/ + i = startsAt; + } + else + { + /* + int32_t hiByte = (int)(curChar >> 8); + int32_t i1 = hiByte >> 6; + uint64_t l1 = ((uint64_t)1L) << (hiByte & 63); + int32_t i2 = (curChar & 0xff) >> 6; + uint64_t l2 = ((uint64_t)1L) << (curChar & 63); + + do + { + switch(jjstateSet[--i]) + { + default : break; + } + } while(i != startsAt);*/ + i = startsAt; + } + if (kind != 0x7fffffff) + { + jjmatchedKind = kind; + jjmatchedPos = curPos; + kind = 0x7fffffff; + } + ++curPos; + i = jjnewStateCnt; + jjnewStateCnt = startsAt; + startsAt = 3 - jjnewStateCnt; + if (i == startsAt) + return curPos; + try { curChar = input_stream->readChar(); } + catch(CLuceneError& e) { + if (e.number() != CL_ERR_IO) + { + throw e; + } + else + return curPos; + } + } +} + +int32_t QueryParserTokenManager::jjStopStringLiteralDfa_2(const int32_t pos, const int64_t active0) +{ + switch (pos) + { + case 0: + if ((active0 & 0x2000000L) != 0L) + { + jjmatchedKind = 28; + return 6; + } + return -1; + default : + return -1; + } +} + +int32_t QueryParserTokenManager::jjStartNfa_2(int32_t pos, int64_t active0) +{ + return jjMoveNfa_2(jjStopStringLiteralDfa_2(pos, active0), pos + 1); +} + +int32_t QueryParserTokenManager::jjStartNfaWithStates_2(const int32_t pos, const int32_t kind, const int32_t state) +{ + jjmatchedKind = kind; + jjmatchedPos = pos; + try { curChar = input_stream->readChar(); } + catch(CLuceneError& e) { + if (e.number() != CL_ERR_IO) + { + throw e; + } + else + return pos+1; + } + return jjMoveNfa_2(state, pos + 1); +} + +int32_t QueryParserTokenManager::jjMoveStringLiteralDfa0_2() +{ + switch(curChar) + { + case 84: + return jjMoveStringLiteralDfa1_2(0x2000000L); + case 93: + return jjStopAtPos(0, 26); + default : + return jjMoveNfa_2(0, 0); + } +} + +int32_t QueryParserTokenManager::jjMoveStringLiteralDfa1_2(const int64_t active0) +{ + try { curChar = input_stream->readChar(); } + catch(CLuceneError& e) { + if (e.number() != CL_ERR_IO) + { + throw e; + } + else { + jjStopStringLiteralDfa_2(0, active0); + return 1; + } + } + switch(curChar) + { + case 79: + if ((active0 & 0x2000000L) != 0L) + return jjStartNfaWithStates_2(1, 25, 6); + break; + default : + break; + } + return jjStartNfa_2(0, active0); +} + +int32_t QueryParserTokenManager::jjMoveNfa_2(const int32_t startState, int32_t curPos) +{ + int32_t startsAt = 0; + jjnewStateCnt = 7; + int32_t i = 1; + jjstateSet[0] = startState; + int32_t kind = 0x7fffffff; + for (;;) + { + if (++jjround == 0x7fffffff) + ReInitRounds(); + if (curChar < 64) + { + uint64_t l = ((uint64_t)1L) << curChar; + + do + { + switch(jjstateSet[--i]) + { + case 0: + if ((_ILONGLONG(0xfffffffeffffffff) & l) != 0L) + { + if (kind > 28) + kind = 28; + jjCheckNAdd(6); + } + if ((_ILONGLONG(0x100002600) & l) != 0L) + { + if (kind > 6) + kind = 6; + } + else if (curChar == 34) + jjCheckNAddTwoStates(2, 4); + break; + case 1: + if (curChar == 34) + jjCheckNAddTwoStates(2, 4); + break; + case 2: + if ((_ILONGLONG(0xfffffffbffffffff) & l) != 0L) + jjCheckNAddStates(16, 18); + break; + case 3: + if (curChar == 34) + jjCheckNAddStates(16, 18); + break; + case 5: + if (curChar == 34 && kind > 27) + kind = 27; + break; + case 6: + if ((_ILONGLONG(0xfffffffeffffffff) & l) == 0L) + break; + if (kind > 28) + kind = 28; + jjCheckNAdd(6); + break; + default : break; + } + } while(i != startsAt); + } + else if (curChar < 128) + { + uint64_t l = ((uint64_t)1L) << (curChar & 63); + + do + { + switch(jjstateSet[--i]) + { + case 0: + case 6: + if ((_ILONGLONG(0xffffffffdfffffff) & l) == 0L) + break; + if (kind > 28) + kind = 28; + jjCheckNAdd(6); + break; + case 2: + jjAddStates(16, 18); + break; + case 4: + if (curChar == 92) + jjstateSet[jjnewStateCnt++] = 3; + break; + default : break; + } + } while(i != startsAt); + } + else + { + int32_t hiByte = (int32_t)(curChar >> 8); + int32_t i1 = hiByte >> 6; + uint64_t l1 = ((uint64_t)1L) << (hiByte & 63); + int32_t i2 = (curChar & 0xff) >> 6; + uint64_t l2 = ((uint64_t)1L) << (curChar & 63); + + do + { + switch(jjstateSet[--i]) + { + case 0: + case 6: + if (!jjCanMove_0(hiByte, i1, i2, l1, l2)) + break; + if (kind > 28) + kind = 28; + jjCheckNAdd(6); + break; + case 2: + if (jjCanMove_0(hiByte, i1, i2, l1, l2)) + jjAddStates(16, 18); + break; + default : break; + } + } while(i != startsAt); + } + if (kind != 0x7fffffff) + { + jjmatchedKind = kind; + jjmatchedPos = curPos; + kind = 0x7fffffff; + } + ++curPos; + i = jjnewStateCnt; + jjnewStateCnt = startsAt; + startsAt = 7 - jjnewStateCnt; + if (i == startsAt) + return curPos; + try { curChar = input_stream->readChar(); } + catch(CLuceneError& e) { + if (e.number() != CL_ERR_IO) + { + throw e; + } + else + return curPos; + } + } +} + +/*static*/ +bool QueryParserTokenManager::jjCanMove_0(const int32_t hiByte, const int32_t i1, const int32_t i2, const int64_t l1, const int64_t l2) +{ + switch(hiByte) + { + case 0: + return ((jjbitVec2[i2] & l2) != 0L); + default : + if ((jjbitVec0[i1] & l1) != 0L) + return true; + return false; + } +} + +void QueryParserTokenManager::ReInit(CharStream* stream) +{ + jjmatchedPos = jjnewStateCnt = 0; + curLexState = defaultLexState; + _CLLDELETE(input_stream); + input_stream = stream; + ReInitRounds(); +} + +void QueryParserTokenManager::ReInitRounds() +{ + jjround = 0x80000001; + for (int32_t i = 36; i-- > 0;) + jjrounds[i] = 0x80000000; +} + +void QueryParserTokenManager::ReInit(CharStream* stream, const int32_t lexState) +{ + ReInit(stream); + SwitchTo(lexState); +} + +void QueryParserTokenManager::SwitchTo(const int32_t lexState) +{ + if (lexState >= 4 || lexState < 0) { + TCHAR err[CL_MAX_PATH]; + // TODO: use TokenMgrError::INVALID_LEXICAL_STATE? + _sntprintf(err,CL_MAX_PATH,_T("Error: Ignoring invalid lexical state : %d. State unchanged."), lexState); + _CLTHROWA(CL_ERR_TokenMgr,err); + } + else + curLexState = lexState; +} + +QueryToken* QueryParserTokenManager::jjFillToken(){ + QueryToken* t = QueryToken::newToken(jjmatchedKind); + t->kind = jjmatchedKind; + const TCHAR* im = jjstrLiteralImages[jjmatchedKind]; + t->image = (im == NULL) ? input_stream->GetImage() : stringDuplicate(im); + t->beginLine = input_stream->getBeginLine(); + t->beginColumn = input_stream->getBeginColumn(); + t->endLine = input_stream->getEndLine(); + t->endColumn = input_stream->getEndColumn(); + return t; +} + +QueryToken* QueryParserTokenManager::getNextToken() { + QueryToken* matchedToken = NULL; + int32_t curPos = 0; + + for (;;) { + try + { + curChar = input_stream->BeginToken(); + } + _CLCATCH_ERR_ELSE(CL_ERR_IO, { /*else*/ + jjmatchedKind = 0; + matchedToken = jjFillToken(); + return matchedToken; + }); + + switch(curLexState){ + case 0: + jjmatchedKind = 0x7fffffff; + jjmatchedPos = 0; + curPos = jjMoveStringLiteralDfa0_0(); + break; + case 1: + jjmatchedKind = 0x7fffffff; + jjmatchedPos = 0; + curPos = jjMoveStringLiteralDfa0_1(); + break; + case 2: + jjmatchedKind = 0x7fffffff; + jjmatchedPos = 0; + curPos = jjMoveStringLiteralDfa0_2(); + break; + case 3: + jjmatchedKind = 0x7fffffff; + jjmatchedPos = 0; + curPos = jjMoveStringLiteralDfa0_3(); + break; + } + if (jjmatchedKind != 0x7fffffff){ + if (jjmatchedPos + 1 < curPos) + input_stream->backup(curPos - jjmatchedPos - 1); + if ((jjtoToken[jjmatchedKind >> 6] & ((uint64_t)(1L << (jjmatchedKind & 63)))) != (uint64_t)0L) + { + matchedToken = jjFillToken(); + if (jjnewLexState[jjmatchedKind] != -1) + curLexState = jjnewLexState[jjmatchedKind]; + return matchedToken; + } + else + { + if (jjnewLexState[jjmatchedKind] != -1) + curLexState = jjnewLexState[jjmatchedKind]; + continue; + } + } + int32_t error_line = input_stream->getEndLine(); + int32_t error_column = input_stream->getEndColumn(); + TCHAR* error_after = NULL; + bool EOFSeen = false; + try { input_stream->readChar(); input_stream->backup(1); } + _CLCATCH_ERR_ELSE(CL_ERR_IO, { /*else*/ + EOFSeen = true; + if (curPos <= 1) { + error_after = _CL_NEWARRAY(TCHAR,2); + error_after[0] = _T(' '); + error_after[1] = 0; + } else { + error_after = input_stream->GetImage(); + } + if (curChar == _T('\n') || curChar == _T('\r')) { + error_line++; + error_column = 0; + } + else + error_column++; + }); + if (!EOFSeen) { + input_stream->backup(1); + if (curPos <= 1) { + error_after = _CL_NEWARRAY(TCHAR,2); + error_after[0] = _T(' '); + error_after[1] = 0; + } else { + error_after = input_stream->GetImage(); + } + } + // TODO: TokenMgrError.LEXICAL_ERROR ? + TCHAR* err = getLexicalError(EOFSeen, curLexState, error_line, error_column, error_after, curChar); + _CLDELETE_LCARRAY(error_after); + _CLTHROWT_DEL(CL_ERR_TokenMgr,err); + } +} + +TCHAR* QueryParserTokenManager::getLexicalError(bool EOFSeen, int32_t /*lexState*/, int32_t errorLine, + int32_t errorColumn, TCHAR* errorAfter, TCHAR curChar) +{ + TCHAR* tmp = NULL; + CL_NS(util)::StringBuffer sb(100); + sb.append(_T("Lexical error at line ")); + sb.appendInt(errorLine); + sb.append(_T(", column ")); + sb.appendInt(errorColumn); + sb.append(_T(". Encountered: ")); + if (EOFSeen){ + sb.append(_T(" ")); + }else{ + sb.appendChar(_T('"')); + sb.appendChar(curChar); // TODO: addEscapes ? + sb.appendChar(_T('"')); + sb.append(_T(" (")); + sb.appendInt((int32_t)curChar); + sb.append(_T("), ")); + } + sb.append(_T("after : \"")); + + tmp = addEscapes(errorAfter); + sb.append(tmp); + _CLDELETE_LCARRAY(tmp); + + sb.appendChar(_T('"')); + return sb.giveBuffer(); +} + +CL_NS_END // QueryParserTokenManager diff --git a/Pods/BRCLucene/src/core/CLucene/queryParser/QueryParserTokenManager.h b/Pods/BRCLucene/src/core/CLucene/queryParser/QueryParserTokenManager.h new file mode 100644 index 0000000..834c324 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/queryParser/QueryParserTokenManager.h @@ -0,0 +1,112 @@ +/*------------------------------------------------------------------------------ +* 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_QueryParserTokenManager_ +#define _lucene_queryParser_QueryParserTokenManager_ + +#include "QueryParserConstants.h" + +CL_NS_DEF(queryParser) + +class CharStream; +class QueryToken; + +class CLUCENE_EXPORT QueryParserTokenManager: public virtual QueryParserConstants +{ +public: + // TODO: PrintStream debugStream = System.out; + // TODO: setDebugStream(PrintStream ds) { debugStream = ds; } + +private: + int32_t jjStopStringLiteralDfa_3(const int32_t pos, int64_t active0); + int32_t jjStartNfa_3(int32_t pos, int64_t active0); + int32_t jjStopAtPos(const int32_t pos, const int32_t kind); + + int32_t jjStartNfaWithStates_3(int32_t pos, int32_t kind, int32_t state); + + int32_t jjMoveStringLiteralDfa0_3(); + + void jjCheckNAdd(const int32_t state); + void jjAddStates(int32_t start, const int32_t end); + void jjCheckNAddTwoStates(const int32_t state1, const int32_t state2); + void jjCheckNAddStates(int32_t start, const int32_t end); + void jjCheckNAddStates(const int32_t start); + + static const int64_t jjbitVec0[]; + static const int64_t jjbitVec2[]; + + int32_t jjMoveNfa_3(const int32_t startState, int32_t curPos); + + int32_t jjStopStringLiteralDfa_1(const int32_t pos, const int64_t active0); + + int32_t jjStartNfa_1(int32_t pos, int64_t active0); + + int32_t jjStartNfaWithStates_1(const int32_t pos, const int32_t kind, const int32_t state); + + int32_t jjMoveStringLiteralDfa0_1(); + int32_t jjMoveStringLiteralDfa1_1(int64_t active0); + int32_t jjMoveNfa_1(const int32_t startState, int32_t curPos); + int32_t jjMoveStringLiteralDfa0_0(); + + int32_t jjMoveNfa_0(const int32_t startState, int32_t curPos); + int32_t jjStopStringLiteralDfa_2(const int32_t pos, const int64_t active0); + int32_t jjStartNfa_2(int32_t pos, int64_t active0); + + int32_t jjStartNfaWithStates_2(const int32_t pos, const int32_t kind, const int32_t state); + + int32_t jjMoveStringLiteralDfa0_2(); + int32_t jjMoveStringLiteralDfa1_2(const int64_t active0); + + int32_t jjMoveNfa_2(const int32_t startState, int32_t curPos); + + static const int32_t jjnextStates[]; + + static bool jjCanMove_0(const int32_t hiByte, const int32_t i1, const int32_t i2, const int64_t l1, + const int64_t l2); + +public: + static const TCHAR* jjstrLiteralImages []; + static const TCHAR* lexStateNames []; + static const int32_t jjnewLexState []; + static const int64_t jjtoToken []; + static const int64_t jjtoSkip []; +protected: + CharStream* input_stream; +private: + int32_t jjrounds[36]; + int32_t jjstateSet[72]; +protected: + TCHAR curChar; +public: + QueryParserTokenManager(CharStream* stream, const int32_t lexState = -1); + virtual ~QueryParserTokenManager(); + + void ReInit(CharStream* stream); +private: + void ReInitRounds(); +public: + void ReInit(CharStream* stream, const int32_t lexState); + void SwitchTo(const int32_t lexState); + +protected: + QueryToken* jjFillToken(); + + int32_t curLexState; + int32_t defaultLexState; + int32_t jjnewStateCnt; + uint32_t jjround; + int32_t jjmatchedPos; + int32_t jjmatchedKind; + +public: + QueryToken* getNextToken(); + +private: + static TCHAR* getLexicalError(bool EOFSeen, int32_t lexState, int32_t errorLine, int32_t errorColumn, + TCHAR* errorAfter, TCHAR curChar); +}; +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/queryParser/QueryToken.cpp b/Pods/BRCLucene/src/core/CLucene/queryParser/QueryToken.cpp new file mode 100644 index 0000000..d16f1cd --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/queryParser/QueryToken.cpp @@ -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. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "QueryToken.h" + +CL_NS_DEF(queryParser) + + +QueryToken::QueryToken() : + kind(0), + beginLine(0), + beginColumn(0), + endLine(0), + endColumn(0), + image(NULL), + next(NULL), + specialToken(NULL) +{ +} + +QueryToken::~QueryToken() +{ +#ifndef LUCENE_TOKEN_WORD_LENGTH + _CLDELETE_LCARRAY( image ); +#endif +} + +TCHAR* QueryToken::toString() const +{ +#ifndef LUCENE_TOKEN_WORD_LENGTH + return image; +#else + return STRDUP_TtoT(image); +#endif +} + +/*static*/ +QueryToken* QueryToken::newToken(const int32_t /*ofKind*/) +{ + //switch(ofKind) + //{ + //default : return _CLNEW Token(); + //} + return _CLNEW QueryToken(); +} + +CL_NS_END diff --git a/Pods/BRCLucene/src/core/CLucene/queryParser/QueryToken.h b/Pods/BRCLucene/src/core/CLucene/queryParser/QueryToken.h new file mode 100644 index 0000000..5e3c91e --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/queryParser/QueryToken.h @@ -0,0 +1,94 @@ +/*------------------------------------------------------------------------------ +* 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_Token_ +#define _lucene_queryParser_Token_ + +CL_NS_DEF(queryParser) + +/** + * Describes the input token stream. + */ +class CLUCENE_EXPORT QueryToken{ +public: + QueryToken(); + ~QueryToken(); + + /** + * An integer that describes the kind of this token. This numbering + * system is determined by JavaCCParser, and a table of these numbers is + * stored in the file ...Constants.java. + */ + int32_t kind; + + /** + * beginLine and beginColumn describe the position of the first character + * of this token; endLine and endColumn describe the position of the + * last character of this token. + */ + int32_t beginLine, beginColumn, endLine, endColumn; + + /** + * The string image of the token. + */ + TCHAR* image; + + /* + TODO: If LUCENE_TOKEN_WORD_LENGTH is still necessary, use the #defines below + #ifdef LUCENE_TOKEN_WORD_LENGTH + TCHAR image[LUCENE_TOKEN_WORD_LENGTH+1]; + #else + TCHAR* image; + #endif + */ + + /** + * A reference to the next regular (non-special) token from the input + * stream. If this is the last token from the input stream, or if the + * token manager has not read tokens beyond this one, this field is + * set to null. This is true only if this token is also a regular + * token. Otherwise, see below for a description of the contents of + * this field. + */ + QueryToken* next; + + /** + * This field is used to access special tokens that occur prior to this + * token, but after the immediately preceding regular (non-special) token. + * If there are no such special tokens, this field is set to null. + * When there are more than one such special token, this field refers + * to the last of these special tokens, which in turn refers to the next + * previous special token through its specialToken field, and so on + * until the first special token (whose specialToken field is null). + * The next fields of special tokens refer to other special tokens that + * immediately follow it (without an intervening regular token). If there + * is no such token, this field is null. + */ + QueryToken* specialToken; + + /** + * Returns the image. + */ + TCHAR* toString() const; + + /** + * Returns a new Token object, by default. However, if you want, you + * can create and return subclass objects based on the value of ofKind. + * Simply add the cases to the switch for all those special cases. + * For example, if you have a subclass of Token called IDToken that + * you want to create if ofKind is ID, simlpy add something like : + * + * case MyParserConstants.ID : return new IDToken(); + * + * to the following switch statement. Then you can cast matchedToken + * variable to the appropriate type and use it in your lexical actions. + */ + static QueryToken* newToken(const int32_t ofKind); + +}; +CL_NS_END +#endif + diff --git a/Pods/BRCLucene/src/core/CLucene/queryParser/_CharStream.h b/Pods/BRCLucene/src/core/CLucene/queryParser/_CharStream.h new file mode 100644 index 0000000..74bfbba --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/queryParser/_CharStream.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_queryParser_CharStream_ +#define _lucene_queryParser_CharStream_ + +CL_NS_DEF(queryParser) + +/** + * This interface describes a character stream that maintains line and + * column number positions of the characters. It also has the capability + * to backup the stream to some extent. An implementation of this + * interface is used in the TokenManager implementation generated by + * JavaCCParser. + * + * All the methods except backup can be implemented in any fashion. backup + * needs to be implemented correctly for the correct operation of the lexer. + * Rest of the methods are all used to get information like line number, + * column number and the String that constitutes a token and are not used + * by the lexer. Hence their implementation won't affect the generated lexer's + * operation. + */ +class CharStream :LUCENE_BASE { +public: + /** + * Returns the next character from the selected input. The method + * of selecting the input is the responsibility of the class + * implementing this interface. Can throw any java.io.IOException. + */ + virtual TCHAR readChar() = 0; + + /** + * Returns the column position of the character last read. + * @deprecated + * @see #getEndColumn + */ + virtual int32_t getColumn() const = 0; + + /** + * Returns the line number of the character last read. + * @deprecated + * @see #getEndLine + */ + virtual int32_t getLine() const = 0; + + /** + * Returns the column number of the last character for current token (being + * matched after the last call to BeginTOken). + */ + virtual int32_t getEndColumn() const = 0; + + /** + * Returns the line number of the last character for current token (being + * matched after the last call to BeginTOken). + */ + virtual int32_t getEndLine() const = 0; + + /** + * Returns the column number of the first character for current token (being + * matched after the last call to BeginTOken). + */ + virtual int32_t getBeginColumn() const = 0; + + /** + * Returns the line number of the first character for current token (being + * matched after the last call to BeginTOken). + */ + virtual int32_t getBeginLine() const = 0; + + /** + * Backs up the input stream by amount steps. Lexer calls this method if it + * had already read some characters, but could not use them to match a + * (longer) token. So, they will be used again as the prefix of the next + * token and it is the implemetation's responsibility to do this right. + */ + virtual void backup(const int32_t amount) = 0; + + /** + * Returns the next character that marks the beginning of the next token. + * All characters must remain in the buffer between two successive calls + * to this method to implement backup correctly. + */ + virtual TCHAR BeginToken() = 0; + + /** + * Returns a string made up of characters from the marked token beginning + * to the current buffer position. Implementations have the choice of returning + * anything that they want to. For example, for efficiency, one might decide + * to just return null, which is a valid implementation. + */ + virtual TCHAR* GetImage() = 0; + + /** + * Returns an array of characters that make up the suffix of length 'len' for + * the currently matched token. This is used to build up the matched string + * for use in actions in the case of MORE. A simple and inefficient + * implementation of this is as follows : + * + * { + * String t = GetImage(); + * return t.substring(t.length() - len, t.length()).toCharArray(); + * } + */ + virtual TCHAR* GetSuffix(const int32_t len) = 0; + + /** + * The lexer calls this function to indicate that it is done with the stream + * and hence implementations can free any resources held by this class. + * Again, the body of this function can be just empty and it will not + * affect the lexer's operation. + */ + virtual void Done() = 0; + + //CharStream(){}; + //virtual ~CharStream(){}; +}; +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/queryParser/_FastCharStream.h b/Pods/BRCLucene/src/core/CLucene/queryParser/_FastCharStream.h new file mode 100644 index 0000000..40d9fdc --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/queryParser/_FastCharStream.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_queryParser_FastCharStream_ +#define _lucene_queryParser_FastCharStream_ + +CL_CLASS_DEF(util,Reader) + +CL_NS_DEF(queryParser) + +class CharStream; + +/** An efficient implementation of JavaCC's CharStream interface.

Note that + * this does not do line-number counting, but instead keeps track of the + * character position of the token in the input, as required by Lucene's {@link + * org.apache.lucene.analysis.Token} API. */ +class FastCharStream : public CharStream { +protected: + TCHAR* buffer; + size_t _bufferSize; // To keep track of the buffer size in memory + + int32_t bufferLength; // end of valid chars + int32_t bufferPosition; // next char to read + + int32_t tokenStart; // offset in buffer + int32_t bufferStart; // position in file of buffer + + CL_NS(util)::Reader* input; // source of chars + bool _ownsReader; // Should we delete the reader once done with it, or in destructor? + + +public: + /** Constructs from a Reader. */ + FastCharStream(CL_NS(util)::Reader* r, bool ownsReader = false); + virtual ~FastCharStream(); + + TCHAR readChar(); + +private: + void refill(); + +public: + void backup(const int32_t amount); + + /*@memory Caller is responsible for deleting the returned string */ + TCHAR* GetImage(); + + /*@memory Caller is responsible for deleting the returned string */ + TCHAR* GetSuffix(const int32_t len); + + void Done(); + + TCHAR BeginToken(); + + int32_t getColumn() const; + int32_t getLine() const; + int32_t getEndColumn() const; + int32_t getEndLine() const; + int32_t getBeginColumn() const; + int32_t getBeginLine() const; +}; +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/search/BooleanClause.h b/Pods/BRCLucene/src/core/CLucene/search/BooleanClause.h new file mode 100644 index 0000000..4071f35 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/BooleanClause.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. +------------------------------------------------------------------------------*/ +#ifndef _lucene_search_BooleanClause_ +#define _lucene_search_BooleanClause_ + +CL_CLASS_DEF(util,StringBuffer) +CL_CLASS_DEF(search,Query) + +CL_NS_DEF(search) + +// A clause in a BooleanQuery. +class CLUCENE_EXPORT BooleanClause:LUCENE_BASE { +public: + /** Specifies how clauses are to occur in matching documents. */ + enum Occur { + /** Use this operator for clauses that must appear in the matching documents. */ + MUST=1, + + /** Use this operator for clauses that should appear in the + * matching documents. For a BooleanQuery with no MUST + * clauses one or more SHOULD clauses must match a document + * for the BooleanQuery to match. + * @see BooleanQuery#setMinimumNumberShouldMatch + */ + SHOULD=2, + + /** Use this operator for clauses that must not appear in the matching documents. + * Note that it is not possible to search for queries that only consist + * of a MUST_NOT clause. */ + MUST_NOT=4 + }; +private: + /** The query whose matching documents are combined by the boolean query. + * @deprecated use {@link #setQuery(Query)} instead */ + Query* query; + + Occur occur; + + /* Middle layer for the Occur enum; will be removed soon enough. */ + void setFields(Occur occur); +public: + bool deleteQuery; + + + int32_t getClauseCount(); + + + /** Constructs a BooleanClause with query q, required + * r and prohibited p. + * @deprecated use BooleanClause(Query, Occur) instead + *

    + *
  • For BooleanClause(query, true, false) use BooleanClause(query, BooleanClause.Occur.MUST) + *
  • For BooleanClause(query, false, false) use BooleanClause(query, BooleanClause.Occur.SHOULD) + *
  • For BooleanClause(query, false, true) use BooleanClause(query, BooleanClause.Occur.MUST_NOT) + *
+ */ + BooleanClause(Query* q, const bool DeleteQuery,const bool req, const bool p); + + BooleanClause(const BooleanClause& clone); + + /** Constructs a BooleanClause. + */ + BooleanClause(Query* q, const bool DeleteQuery, Occur o); + + + BooleanClause* clone() const; + + ~BooleanClause(); + + + /** Returns true if o is equal to this. */ + bool equals(const BooleanClause* other) const; + + /** Returns a hash code value for this object.*/ + size_t hashCode() const; + + Occur getOccur() const; + void setOccur(Occur o); + + Query* getQuery() const; + void setQuery(Query* q); + + bool isProhibited() const; + bool isRequired() const; + + TCHAR* toString() const; + +public: // TODO: Make private and remove for CLucene 2.3.2 + /** If true, documents documents which do not + match this sub-query will not match the boolean query. + @deprecated use {@link #setOccur(BooleanClause.Occur)} instead */ + bool required; + + /** If true, documents documents which do + match this sub-query will not match the boolean query. + @deprecated use {@link #setOccur(BooleanClause.Occur)} instead */ + bool prohibited; +}; + + +CL_NS_END +#endif + diff --git a/Pods/BRCLucene/src/core/CLucene/search/BooleanQuery.cpp b/Pods/BRCLucene/src/core/CLucene/search/BooleanQuery.cpp new file mode 100644 index 0000000..29a1ef7 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/BooleanQuery.cpp @@ -0,0 +1,561 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.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 "_ConjunctionScorer.h" +#include "Similarity.h" +#include "Explanation.h" +#include "_BooleanScorer2.h" +#include "Scorer.h" + +#include + +CL_NS_USE(index) +CL_NS_USE(util) +CL_NS_DEF(search) + + class BooleanClause_Compare:public CL_NS_STD(binary_function) + { + public: + bool operator()( const BooleanClause* val1, const BooleanClause* val2 ) const { + return val1->equals(val2); + } + }; + + + class BooleanWeight: public Weight { + protected: + Searcher* searcher; + Similarity* similarity; + CL_NS(util)::CLVector > weights; + BooleanQuery::ClausesType* clauses; + BooleanQuery* parentQuery; + public: + BooleanWeight(Searcher* searcher, + CL_NS(util)::CLVector >* clauses, + BooleanQuery* parentQuery); + virtual ~BooleanWeight(); + Query* getQuery(); + float_t getValue(); + float_t sumOfSquaredWeights(); + void normalize(float_t norm); + Scorer* scorer(CL_NS(index)::IndexReader* reader); + Explanation* explain(CL_NS(index)::IndexReader* reader, int32_t doc); + };// BooleanWeight + + + BooleanQuery::BooleanQuery( bool disableCoord ): + clauses(_CLNEW BooleanQuery::ClausesType(true)) + { + this->minNrShouldMatch = 0; + this->disableCoord = disableCoord; + } + + Weight* BooleanQuery::_createWeight(Searcher* searcher) { + return _CLNEW BooleanWeight(searcher, clauses,this); + } + + BooleanQuery::BooleanQuery(const BooleanQuery& clone): + Query(clone), + clauses(_CLNEW ClausesType(true)), + disableCoord(clone.disableCoord) + { + minNrShouldMatch = clone.minNrShouldMatch; + for ( uint32_t i=0;isize();i++ ){ + BooleanClause* clause = (*clone.clauses)[i]->clone(); + clause->deleteQuery=true; + add(clause); + } + } + + BooleanQuery::~BooleanQuery(){ + clauses->clear(); + _CLDELETE(clauses); + } + + 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 char* BooleanQuery::getObjectName() const{ + return getClassName(); + } + const char* BooleanQuery::getClassName(){ + return "BooleanQuery"; + } + + /** + * Default value is 1024. Use org.apache.lucene.maxClauseCount + * system property to override. + */ + size_t BooleanQuery::maxClauseCount = LUCENE_BOOLEANQUERY_MAXCLAUSECOUNT; + size_t BooleanQuery::getMaxClauseCount(){ + return maxClauseCount; + } + + void BooleanQuery::setMaxClauseCount(const size_t maxClauseCount){ + if (maxClauseCount < 1) + _CLTHROWA(CL_ERR_IllegalArgument, "maxClauseCount must be >= 1"); + BooleanQuery::maxClauseCount = maxClauseCount; + } + + Similarity* BooleanQuery::getSimilarity( Searcher* searcher ) { + + Similarity* result = Query::getSimilarity( searcher ); + return result; + + } + + 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(Query* query, const bool deleteQuery, BooleanClause::Occur occur) { + BooleanClause* bc = _CLNEW BooleanClause(query,deleteQuery,occur); + 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); + } + + int32_t BooleanQuery::getMinNrShouldMatch(){ + return minNrShouldMatch; + } + bool BooleanQuery::getUseScorer14() { + return getAllowDocsOutOfOrder(); + } + + bool BooleanQuery::allowDocsOutOfOrder = false; + + void BooleanQuery::setUseScorer14( bool use14 ) { + setAllowDocsOutOfOrder(use14); + } + + void BooleanQuery::setAllowDocsOutOfOrder(bool allow) { + allowDocsOutOfOrder = allow; + } + + bool BooleanQuery::getAllowDocsOutOfOrder() { + return allowDocsOutOfOrder; + } + + + size_t BooleanQuery::getClauseCount() const { + return (int32_t) clauses->size(); + } + + TCHAR* BooleanQuery::toString(const TCHAR* field) const{ + StringBuffer buffer; + bool needParens=(getBoost() != 1.0) /* TODO: || (getMinimumNumberShouldMatch()>0)*/ ; + if (needParens) { + 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->getQuery()->instanceOf(BooleanQuery::getClassName()) ) { // wrap sub-bools in parens + buffer.append(_T("(")); + + TCHAR* buf = c->getQuery()->toString(field); + buffer.append(buf); + _CLDELETE_CARRAY( buf ); + + buffer.append(_T(")")); + } else { + TCHAR* buf = c->getQuery()->toString(field); + buffer.append(buf); + _CLDELETE_CARRAY( buf ); + } + if (i != clauses->size()-1) + buffer.append(_T(" ")); + } + + if (needParens) { + buffer.append(_T(")")); + } + + if (getBoost() != 1.0) { + buffer.appendChar(_T('^')); + buffer.appendFloat(getBoost(),1); + } + return buffer.toString(); + } + + bool BooleanQuery::isCoordDisabled() { return disableCoord; } + void BooleanQuery::setCoordDisabled( bool disableCoord ) { this->disableCoord = disableCoord; } + + 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;isize() == 1) { // optimize 1-clause queries + BooleanClause* c = (*clauses)[0]; + if (!c->prohibited) { // just return clause + Query* query = c->getQuery()->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->getQuery() ) + 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->getQuery()->rewrite(reader); + if (query != c->getQuery()) { // clause rewrote: must clone + if (clone == NULL) + clone = (BooleanQuery*)this->clone(); + clone->clauses->set (i, _CLNEW BooleanClause(query, true, c->getOccur())); + } + } + if (clone != NULL) { + return clone; // some clauses rewrote + } else + return this; // no clauses rewrote + } + + void BooleanQuery::extractTerms( TermSet * termset ) const + { + for (size_t i = 0 ; i < clauses->size(); i++) + { + BooleanClause* clause = (*clauses)[i]; + clause->getQuery()->extractTerms( termset ); + } + } + + Query* BooleanQuery::clone() const{ + BooleanQuery* clone = _CLNEW BooleanQuery(*this); + return clone; + } + + /** Returns true iff o 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 comp; + ret = comp.equals(this->clauses,other->clauses); + } + return ret; + } + + + float_t BooleanWeight::getValue() { return parentQuery->getBoost(); } + Query* BooleanWeight::getQuery() { return (Query*)parentQuery; } + + BooleanWeight::BooleanWeight(Searcher* searcher, + CLVector >* clauses, BooleanQuery* parentQuery) + { + this->searcher = searcher; + this->similarity = parentQuery->getSimilarity( searcher ); + this->parentQuery = parentQuery; + this->clauses = clauses; + for (uint32_t i = 0 ; i < clauses->size(); i++) { + weights.push_back((*clauses)[i]->getQuery()->_createWeight(searcher)); + } + } + BooleanWeight::~BooleanWeight(){ + this->weights.clear(); + } + + float_t BooleanWeight::sumOfSquaredWeights() { + float_t sum = 0.0f; + for (uint32_t i = 0 ; i < weights.size(); i++) { + BooleanClause* c = (*clauses)[i]; + Weight* w = weights[i]; + float_t s = w->sumOfSquaredWeights(); // sum sub weights + if (!c->isProhibited()) + // only add to sum for non-prohibited clauses + sum += s; + } + sum *= parentQuery->getBoost() * parentQuery->getBoost(); // boost each sub-weight + return sum ; + } + + void BooleanWeight::normalize(float_t norm) { + norm *= parentQuery->getBoost(); // incorporate boost + for (uint32_t i = 0 ; i < weights.size(); i++) { + Weight* w = weights[i]; + // normalize all clauses, (even if prohibited in case of side affects) + w->normalize(norm); + } + } + + Scorer* BooleanWeight::scorer(IndexReader* reader){ + BooleanScorer2* result = _CLNEW BooleanScorer2(similarity, + parentQuery->minNrShouldMatch, + parentQuery->allowDocsOutOfOrder); + + for (size_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->isRequired(), c->isProhibited()); + else if (c->isRequired()){ + _CLDELETE(result); + return NULL; + } + } + + return result; + + } + + Explanation* BooleanWeight::explain(IndexReader* reader, int32_t doc){ + const int32_t minShouldMatch = parentQuery->getMinNrShouldMatch(); + ComplexExplanation* sumExpl = _CLNEW ComplexExplanation(); + sumExpl->setDescription(_T("sum of:")); + int32_t coord = 0; + int32_t maxCoord = 0; + float_t sum = 0.0f; + bool fail = false; + int32_t shouldMatchCount = 0; + for (size_t i = 0 ; i < weights.size(); i++) { + BooleanClause* c = (*clauses)[i]; + Weight* w = weights[i]; + Explanation* e = w->explain(reader, doc); + if (!c->isProhibited()) maxCoord++; + if (e->isMatch()){ + if (!c->isProhibited()) { + sumExpl->addDetail(e); + sum += e->getValue(); + coord++; + } else { + StringBuffer buf(100); + buf.append(_T("match on prohibited clause (")); + TCHAR* tmp = c->getQuery()->toString(); + buf.append(tmp); + _CLDELETE_LCARRAY(tmp); + buf.appendChar(_T(')')); + + Explanation* r = _CLNEW Explanation(0.0f, buf.getBuffer()); + r->addDetail(e); + sumExpl->addDetail(r); + fail = true; + } + if (c->getOccur() == BooleanClause::SHOULD) + shouldMatchCount++; + } else if (c->isRequired()) { + StringBuffer buf(100); + buf.append(_T("no match on required clause (")); + TCHAR* tmp = c->getQuery()->toString(); + buf.append(tmp); + _CLDELETE_LCARRAY(tmp); + buf.appendChar(_T(')')); + + Explanation* r = _CLNEW Explanation(0.0f, buf.getBuffer()); + r->addDetail(e); + sumExpl->addDetail(r); + fail = true; + } else { + _CLLDELETE(e); + } + } + if (fail) { + sumExpl->setMatch(false); + sumExpl->setValue(0.0f); + sumExpl->setDescription(_T("Failure to meet condition(s) of required/prohibited clause(s)")); + return sumExpl; + } else if (shouldMatchCount < minShouldMatch) { + sumExpl->setMatch(false); + sumExpl->setValue(0.0f); + + StringBuffer buf(60); + buf.append(_T("Failure to match minimum number of optional clauses: ")); + buf.appendInt(minShouldMatch); + sumExpl->setDescription(buf.getBuffer()); + return sumExpl; + } + + sumExpl->setMatch(0 < coord ? true : false); + sumExpl->setValue(sum); + + float_t coordFactor = similarity->coord(coord, maxCoord); + if (coordFactor == 1.0f) // coord is no-op + return sumExpl; // eliminate wrapper + else { + ComplexExplanation* result = _CLNEW ComplexExplanation(sumExpl->isMatch(), + sum*coordFactor, + _T("product of:")); + result->addDetail(sumExpl); + + StringBuffer buf(30); + buf.append(_T("coord(")); + buf.appendInt(coord); + buf.appendChar(_T('/')); + buf.appendInt(maxCoord); + buf.appendChar(_T(')')); + result->addDetail(_CLNEW Explanation(coordFactor,buf.getBuffer())); + return result; + } + } + + BooleanClause::BooleanClause(Query* q, const bool DeleteQuery,const bool req, const bool p): + query(q), + occur(SHOULD), + deleteQuery(DeleteQuery), + required(req), + prohibited(p) + { + if (required) { + if (prohibited) { + // prohibited && required doesn't make sense, but we want the old behaviour: + occur = MUST_NOT; + } else { + occur = MUST; + } + } else { + if (prohibited) { + occur = MUST_NOT; + } else { + occur = SHOULD; + } + } + } + + BooleanClause::BooleanClause(const BooleanClause& clone): + query(clone.query->clone()), + occur(clone.occur), + deleteQuery(true), + required(clone.required), + prohibited(clone.prohibited) + { + } + + BooleanClause::BooleanClause(Query* q, const bool DeleteQuery, Occur o): + query(q), + occur(o), + deleteQuery(DeleteQuery) + { + setFields(occur); + } + + + BooleanClause* BooleanClause::clone() const { + BooleanClause* ret = _CLNEW BooleanClause(*this); + return ret; + } + + BooleanClause::~BooleanClause(){ + if ( deleteQuery ) + _CLDELETE( query ); + } + + + /** Returns true if o is equal to this. */ + bool BooleanClause::equals(const BooleanClause* other) const { + return this->query->equals(other->query) + && (this->required == other->required) + && (this->prohibited == other->prohibited) // TODO: Remove these + && (this->occur == other->getOccur() ); + } + + /** Returns a hash code value for this object.*/ + size_t BooleanClause::hashCode() const { + return query->hashCode() ^ ( (occur == MUST) ?1:0) ^ ( (occur == MUST_NOT)?2:0); + } + + BooleanClause::Occur BooleanClause::getOccur() const { return occur; } + void BooleanClause::setOccur(Occur o) { + occur = o; + setFields(o); + } + + Query* BooleanClause::getQuery() const { return query; } + void BooleanClause::setQuery(Query* q) { + if ( deleteQuery ) + _CLDELETE( query ); + query = q; + } + + bool BooleanClause::isProhibited() const { return prohibited; /* TODO: return (occur == MUST_NOT); */ } + bool BooleanClause::isRequired() const { return required; /* TODO: return (occur == MUST); */ } + + TCHAR* BooleanClause::toString() const { + CL_NS(util)::StringBuffer buffer; + if (occur == MUST) + buffer.append(_T("+")); + else if (occur == MUST_NOT) + buffer.append(_T("-")); + buffer.append( query->toString() ); + return buffer.toString(); + } + + void BooleanClause::setFields(Occur occur) { + if (occur == MUST) { + required = true; + prohibited = false; + } else if (occur == SHOULD) { + required = false; + prohibited = false; + } else if (occur == MUST_NOT) { + required = false; + prohibited = true; + } else { + _CLTHROWT (CL_ERR_UnknownOperator, _T("Unknown operator")); + } + } + +CL_NS_END diff --git a/Pods/BRCLucene/src/core/CLucene/search/BooleanQuery.h b/Pods/BRCLucene/src/core/CLucene/search/BooleanQuery.h new file mode 100644 index 0000000..9129265 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/BooleanQuery.h @@ -0,0 +1,157 @@ +/*------------------------------------------------------------------------------ +* 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_ + +CL_CLASS_DEF(util,StringBuffer) +CL_CLASS_DEF(search,Weight) +#include "Query.h" +#include "BooleanClause.h" +#include "CLucene/util/VoidList.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 CLUCENE_EXPORT BooleanQuery:public Query { + public: + typedef CL_NS(util)::CLVector > ClausesType; + private: + ClausesType* clauses; + static size_t maxClauseCount; + + /** Whether hit docs may be collected out of docid order. */ + static bool allowDocsOutOfOrder; + + bool disableCoord; + protected: + int32_t minNrShouldMatch; + Weight* _createWeight(Searcher* searcher); + BooleanQuery(const BooleanQuery& clone); + + public: + /** Constructs an empty boolean query. */ + BooleanQuery( bool disableCoord = false ); + + ~BooleanQuery(); + const char* getObjectName() const; + static const char* 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(const size_t maxClauseCount); + + /** Adds a clause to a boolean query. Clauses may be: + *
    + *
  • required which means that documents which do not + * match this sub-query will not match the boolean query; + *
  • prohibited which means that documents which do + * match this sub-query will not match the boolean query; or + *
  • 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. + *
+ * It is an error to specify a clause as both required and + * prohibited. + * + * @deprecated use {@link #add(Query, BooleanClause.Occur)} instead: + *
    + *
  • For add(query, true, false) use add(query, BooleanClause.Occur.MUST) + *
  • For add(query, false, false) use add(query, BooleanClause.Occur.SHOULD) + *
  • For add(query, false, true) use add(query, BooleanClause.Occur.MUST_NOT) + *
+ */ + 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); + + void add(Query* query, const bool deleteQuery, BooleanClause::Occur occur); + void add(Query* query, BooleanClause::Occur occur) { add(query,false,occur); }; + + /** 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; + + /** Expert: adds all terms occurring in this query to the termset set. */ + void extractTerms( TermSet * termset ) const; + + bool equals(Query* o) const; + Similarity* getSimilarity( Searcher* searcher ); + + bool isCoordDisabled(); + void setCoordDisabled( bool disableCoord ); + + static bool getUseScorer14(); + static void setUseScorer14( bool use14 ); + + /** + * Expert: Indicates whether hit docs may be collected out of docid + * order. + * + *

+ * Background: although the contract of the Scorer class requires that + * documents be iterated in order of doc id, this was not true in early + * versions of Lucene. Many pieces of functionality in the current + * Lucene code base have undefined behavior if this contract is not + * upheld, but in some specific simple cases may be faster. (For + * example: disjunction queries with less than 32 prohibited clauses; + * This setting has no effect for other queries.) + *

+ * + *

+ * Specifics: By setting this option to true, calls to + * {@link HitCollector#collect(int,float)} might be + * invoked first for docid N and only later for docid N-1. + * Being static, this setting is system wide. + *

+ */ + static void setAllowDocsOutOfOrder(bool allow); + + /** + * Whether hit docs may be collected out of docid order. + * @see #setAllowDocsOutOfOrder(boolean) + */ + static bool getAllowDocsOutOfOrder(); + + + /** 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; + + //internal + int32_t getMinNrShouldMatch(); + friend class BooleanWeight; + }; + +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/search/BooleanScorer.cpp b/Pods/BRCLucene/src/core/CLucene/search/BooleanScorer.cpp new file mode 100644 index 0000000..d1d48a4 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/BooleanScorer.cpp @@ -0,0 +1,302 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "SearchHeader.h" +#include "_BooleanScorer.h" + +#include "Scorer.h" +#include "Similarity.h" +#include "CLucene/util/StringBuffer.h" + +CL_NS_USE(util) +CL_NS_DEF(search) + + BooleanScorer::BooleanScorer(Similarity* similarity, int32_t minNrShouldMatch, const bool isTakingOwnership ): + Scorer(similarity), + scorers(NULL), + maxCoord(1), + nextMask(1), + end(0), + current(NULL), + minNrShouldMatch(minNrShouldMatch), + requiredMask(0), + prohibitedMask(0), + coordFactors(NULL), + isTakingOwnership(isTakingOwnership) + { + 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; + } + + float_t BooleanScorer::score(){ + if (coordFactors == NULL) + computeCoordFactors(); + return current->score * coordFactors[current->coord]; + } + + void BooleanScorer::score( HitCollector* results ) { + next(); + score( results, LUCENE_INT32_MAX_SHOULDBE ); + } + + bool BooleanScorer::skipTo(int32_t /*target*/) { + _CLTHROWA(CL_ERR_UnsupportedOperation,"UnsupportedOperationException: BooleanScorer::skipTo"); + } + + Explanation* BooleanScorer::explain(int32_t /*doc*/) { + _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) { + TCHAR* tmp = sub->scorer->toString(); + buffer.append(tmp); + _CLDELETE_LCARRAY(tmp); + buffer.appendChar(_T(' ')); + } + buffer.appendChar(_T(')')); + 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, isTakingOwnership); + } + + void BooleanScorer::computeCoordFactors(){ + coordFactors = _CL_NEWARRAY(float_t,maxCoord); + for (int32_t i = 0; i < maxCoord; i++) + coordFactors[i] = getSimilarity()->coord(i, maxCoord-1); + } + + bool BooleanScorer::score( HitCollector* results, const int32_t maxDoc ) { + if ( coordFactors == NULL ) { + computeCoordFactors(); + } + + bool more; + Bucket* tmp; + + do { + bucketTable->first = NULL; + while ( current != NULL ) { + + if (( current->bits & prohibitedMask ) == 0 && + ( current->bits & requiredMask ) == requiredMask ) { + + if ( current->doc >= maxDoc ) { + tmp = current; + current = current->next; + tmp->next = bucketTable->first; + bucketTable->first = tmp; + continue; + } + + if ( current->coord >= minNrShouldMatch ) { + results->collect( current->doc, current->score * coordFactors[current->coord] ); + } + } + + current = current->next; + } + + if ( bucketTable->first != NULL ) { + current = bucketTable->first; + bucketTable->first = current->next; + return true; + } + + more = false; + end += BucketTable_SIZE; + + for ( SubScorer* sub = scorers; sub != NULL; sub = sub->next ) { + if ( !sub->done ) { + sub->done = !sub->scorer->score( sub->collector, end ); + if ( !sub->done ) + more = true; + } + } + current = bucketTable->first; + + } while ( current != NULL || more ); + + return false; + } + + + + BooleanScorer::SubScorer::SubScorer(Scorer* scr, const bool r, const bool p, HitCollector* c, SubScorer* nxt, const bool o): + scorer(scr), + required(r), + prohibited(p), + collector(c), + next(nxt), + hasOwnership(o) + { + //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; + } + if (hasOwnership) { + _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 = new Bucket[BucketTable_SIZE]; + } + BooleanScorer::BucketTable::~BucketTable(){ + clear(); + delete [] 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 float_t 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/Pods/BRCLucene/src/core/CLucene/search/BooleanScorer2.cpp b/Pods/BRCLucene/src/core/CLucene/search/BooleanScorer2.cpp new file mode 100644 index 0000000..fcc9616 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/BooleanScorer2.cpp @@ -0,0 +1,690 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "_BooleanScorer2.h" + +#include "Scorer.h" +#include "SearchHeader.h" +#include "Similarity.h" +#include "ScorerDocQueue.h" +#include "Explanation.h" + +#include "_BooleanScorer.h" +#include "_BooleanScorer.h" +#include "_ConjunctionScorer.h" +#include "_DisjunctionSumScorer.h" + +CL_NS_USE(util) +CL_NS_DEF(search) + + +class BooleanScorer2::Coordinator { +public: + int32_t maxCoord; + int32_t nrMatchers; // to be increased by score() of match counting scorers. + float_t* coordFactors; + Scorer* parentScorer; + + Coordinator( Scorer* parent ): + maxCoord(0), + nrMatchers(0), + coordFactors(NULL), + parentScorer(parent) + { + } + + virtual ~Coordinator() + { + _CLDELETE_ARRAY(coordFactors); + } + + void init() + { + coordFactors = _CL_NEWARRAY( float_t, maxCoord+1 ); + Similarity* sim = parentScorer->getSimilarity(); + for ( int32_t i = 0; i <= maxCoord; i++ ) { + coordFactors[i] = sim->coord(i, maxCoord); + } + } + + + void initDoc() { + nrMatchers = 0; + } + + float_t coordFactor() { + return coordFactors[nrMatchers]; + } +}; + +class BooleanScorer2::SingleMatchScorer: public Scorer { +public: + Scorer* scorer; + Coordinator* coordinator; + int32_t lastScoredDoc; + + SingleMatchScorer( Scorer* _scorer, Coordinator* _coordinator ) : + Scorer( _scorer->getSimilarity() ), scorer(_scorer), coordinator(_coordinator), lastScoredDoc(-1) + { + } + + virtual ~SingleMatchScorer() + { + _CLDELETE( scorer ); + } + + float_t score() + { + if ( doc() >= lastScoredDoc ) { + lastScoredDoc = this->doc(); + coordinator->nrMatchers++; + } + return scorer->score(); + } + + int32_t doc() const { + return scorer->doc(); + } + + bool next() { + return scorer->next(); + } + + bool skipTo( int32_t docNr ) { + return scorer->skipTo( docNr ); + } + + virtual TCHAR* toString() { + return scorer->toString(); + } + + Explanation* explain(int32_t doc) { + return scorer->explain( doc ); + } + +}; + +/** A scorer that matches no document at all. */ +class BooleanScorer2::NonMatchingScorer: public Scorer { +public: + + NonMatchingScorer() : + Scorer( NULL ) + { + } + virtual ~NonMatchingScorer() {}; + + int32_t doc() const { + _CLTHROWA(CL_ERR_UnsupportedOperation, "UnsupportedOperationException: BooleanScorer2::NonMatchingScorer::doc"); + return 0; + } + bool next() { return false; } + float_t score() { + _CLTHROWA(CL_ERR_UnsupportedOperation, "UnsupportedOperationException: BooleanScorer2::NonMatchingScorer::score"); + return 0.0; + } + bool skipTo( int32_t /*target*/ ) { return false; } + virtual TCHAR* toString() { return stringDuplicate(_T("NonMatchingScorer")); } + + Explanation* explain( int32_t /*doc*/ ) { + Explanation* e = _CLNEW Explanation(); + e->setDescription(_T("No document matches.")); + return e; + } + +}; + +/** A Scorer for queries with a required part and an optional part. + * Delays skipTo() on the optional part until a score() is needed. + *
+ * This Scorer implements {@link Scorer#skipTo(int)}. + */ +class BooleanScorer2::ReqOptSumScorer: public Scorer { +private: + /** The scorers passed from the constructor. + * These are set to null as soon as their next() or skipTo() returns false. + */ + Scorer* reqScorer; + Scorer* optScorer; + bool firstTimeOptScorer; + +public: + /** Construct a ReqOptScorer. + * @param reqScorer The required scorer. This must match. + * @param optScorer The optional scorer. This is used for scoring only. + */ + ReqOptSumScorer( Scorer* _reqScorer, Scorer* _optScorer ) : + Scorer( NULL ), reqScorer(_reqScorer), optScorer(_optScorer), firstTimeOptScorer(true) + { + } + + virtual ~ReqOptSumScorer() + { + _CLDELETE( reqScorer ); + _CLDELETE( optScorer ); + } + + /** Returns the score of the current document matching the query. + * Initially invalid, until {@link #next()} is called the first time. + * @return The score of the required scorer, eventually increased by the score + * of the optional scorer when it also matches the current document. + */ + float_t score() + { + int32_t curDoc = reqScorer->doc(); + float_t reqScore = reqScorer->score(); + + if ( firstTimeOptScorer ) { + firstTimeOptScorer = false; + if ( !optScorer->skipTo( curDoc ) ) { + _CLDELETE(optScorer); + return reqScore; + } + } else if ( optScorer == NULL ) { + return reqScore; + } else if (( optScorer->doc() < curDoc ) && ( !optScorer->skipTo( curDoc ))) { + _CLDELETE(optScorer); + return reqScore; + } + + return ( optScorer->doc() == curDoc ) + ? reqScore + optScorer->score() + : reqScore; + } + + int32_t doc() const { + return reqScorer->doc(); + } + + bool next() { + return reqScorer->next(); + } + + bool skipTo( int32_t target ) { + return reqScorer->skipTo( target ); + } + + virtual TCHAR* toString() { + return stringDuplicate(_T("ReqOptSumScorer")); + } + + /** Explain the score of a document. + * @todo Also show the total score. + * See BooleanScorer.explain() on how to do this. + */ + Explanation* explain( int32_t doc ) { + Explanation* res = _CLNEW Explanation(); + res->setDescription(_T("required, optional")); + res->addDetail(reqScorer->explain(doc)); + res->addDetail(optScorer->explain(doc)); + return res; + } +}; + + +/** A Scorer for queries with a required subscorer and an excluding (prohibited) subscorer. +*
+* This Scorer implements {@link Scorer#skipTo(int)}, +* and it uses the skipTo() on the given scorers. +*/ +class BooleanScorer2::ReqExclScorer: public Scorer { +private: + Scorer* reqScorer; + Scorer* exclScorer; + bool firstTime; + +public: + /** Construct a ReqExclScorer. + * @param reqScorer The scorer that must match, except where + * @param exclScorer indicates exclusion. + */ + ReqExclScorer( Scorer* _reqScorer, Scorer* _exclScorer ) : + Scorer( NULL ), reqScorer(_reqScorer), exclScorer(_exclScorer), firstTime(true) + { + } + + virtual ~ReqExclScorer() + { + _CLDELETE( reqScorer ); + _CLDELETE( exclScorer ); + } + + int32_t doc() const { + return reqScorer->doc(); + } + + /** Returns the score of the current document matching the query. + * Initially invalid, until {@link #next()} is called the first time. + * @return The score of the required scorer. + */ + float_t score() { + return reqScorer->score(); + } + + virtual TCHAR* toString() { + return stringDuplicate(_T("ReqExclScorer")); + } + + Explanation* explain( int32_t doc ) { + Explanation* res = _CLNEW Explanation(); + if (exclScorer->skipTo(doc) && (exclScorer->doc() == doc)) { + res->setDescription(_T("excluded")); + } else { + res->setDescription(_T("not excluded")); + res->addDetail(reqScorer->explain(doc)); + } + return res; + } + + + bool next() + { + if ( firstTime ) { + if ( !exclScorer->next() ) { + _CLDELETE( exclScorer ); + } + firstTime = false; + } + if ( reqScorer == NULL ) { + return false; + } + if ( !reqScorer->next() ) { + _CLDELETE( reqScorer ); // exhausted, nothing left + return false; + } + if ( exclScorer == NULL ) { + return true;// reqScorer.next() already returned true + } + return toNonExcluded(); + } + + + /** Skips to the first match beyond the current whose document number is + * greater than or equal to a given target. + *
When this method is used the {@link #explain(int)} method should not be used. + * @param target The target document number. + * @return true iff there is such a match. + */ + bool skipTo( int32_t target ) + { + if ( firstTime ) { + firstTime = false; + if ( !exclScorer->skipTo( target )) { + _CLDELETE( exclScorer ); // exhausted + } + } + if ( reqScorer == NULL ) { + return false; + } + if ( exclScorer == NULL ) { + return reqScorer->skipTo( target ); + } + if ( !reqScorer->skipTo( target )) { + _CLDELETE( reqScorer ); + return false; + } + return toNonExcluded(); + } + + +private: + /** Advance to non excluded doc. + *
On entry: + *
    + *
  • reqScorer != null, + *
  • exclScorer != null, + *
  • reqScorer was advanced once via next() or skipTo() + * and reqScorer.doc() may still be excluded. + *
+ * Advances reqScorer a non excluded required doc, if any. + * @return true iff there is a non excluded required doc. + */ + bool toNonExcluded() + { + int32_t exclDoc = exclScorer->doc(); + + do { + int32_t reqDoc = reqScorer->doc(); + if ( reqDoc < exclDoc ) { + return true; // reqScorer advanced to before exclScorer, ie. not excluded + } else if ( reqDoc > exclDoc ) { + if (! exclScorer->skipTo(reqDoc)) { + _CLDELETE( exclScorer ); // exhausted, no more exclusions + return true; + } + exclDoc = exclScorer->doc(); + if ( exclDoc > reqDoc ) { + return true; // not excluded + } + } + } while ( reqScorer->next() ); + + _CLDELETE( reqScorer ); // exhausted, nothing left + return false; + } + +}; + +class BooleanScorer2::BSConjunctionScorer: public CL_NS(search)::ConjunctionScorer { +private: + CL_NS(search)::BooleanScorer2::Coordinator* coordinator; + int32_t lastScoredDoc; + int32_t requiredNrMatchers; + typedef CL_NS(util)::CLVector > ScorersType; +public: + BSConjunctionScorer( CL_NS(search)::BooleanScorer2::Coordinator* _coordinator, ScorersType* _requiredScorers, int32_t _requiredNrMatchers ): + ConjunctionScorer( Similarity::getDefault(), _requiredScorers ), + coordinator(_coordinator), + lastScoredDoc(-1), + requiredNrMatchers(_requiredNrMatchers) + { + } + + virtual ~BSConjunctionScorer(){ + } + float_t score() + { + if ( this->doc() >= lastScoredDoc ) { + lastScoredDoc = this->doc(); + coordinator->nrMatchers += requiredNrMatchers; + } + return ConjunctionScorer::score(); + } + virtual TCHAR* toString() {return stringDuplicate(_T("BSConjunctionScorer"));} +}; + +class BooleanScorer2::BSDisjunctionSumScorer: public CL_NS(search)::DisjunctionSumScorer { +private: + CL_NS(search)::BooleanScorer2::Coordinator* coordinator; + int32_t lastScoredDoc; + typedef CL_NS(util)::CLVector > ScorersType; +public: + BSDisjunctionSumScorer( + CL_NS(search)::BooleanScorer2::Coordinator* _coordinator, + ScorersType* subScorers, + int32_t minimumNrMatchers ): + DisjunctionSumScorer( subScorers, minimumNrMatchers ), + coordinator(_coordinator), + lastScoredDoc(-1) + { + } + + float_t score() { + if ( this->doc() >= lastScoredDoc ) { + lastScoredDoc = this->doc(); + coordinator->nrMatchers += _nrMatchers; + } + return DisjunctionSumScorer::score(); + } + + virtual ~BSDisjunctionSumScorer(){ + } + virtual TCHAR* toString() {return stringDuplicate(_T("BSDisjunctionSumScorer"));} +}; + +class BooleanScorer2::Internal{ +public: + typedef CL_NS(util)::CLVector > ScorersType; + + ScorersType requiredScorers; + ScorersType optionalScorers; + ScorersType prohibitedScorers; + + BooleanScorer2::Coordinator *coordinator; + Scorer* countingSumScorer; + + size_t minNrShouldMatch; + bool allowDocsOutOfOrder; + + + void initCountingSumScorer() + { + coordinator->init(); + countingSumScorer = makeCountingSumScorer(); + } + + Scorer* countingDisjunctionSumScorer( ScorersType* scorers, int32_t minNrShouldMatch ) + { + return _CLNEW BSDisjunctionSumScorer( coordinator, scorers, minNrShouldMatch ); + } + + Scorer* countingConjunctionSumScorer( ScorersType* requiredScorers ) + { + return _CLNEW BSConjunctionScorer( coordinator, requiredScorers, requiredScorers->size() ); + } + + Scorer* dualConjunctionSumScorer( Scorer* req1, Scorer* req2 ) + { + ValueArray scorers(2); + scorers[0] = req1; + scorers[1] = req2; + return _CLNEW CL_NS(search)::ConjunctionScorer( Similarity::getDefault(), &scorers ); + + } + + Scorer* makeCountingSumScorer() + { + return ( requiredScorers.size() == 0 ) ? + makeCountingSumScorerNoReq() : + makeCountingSumScorerSomeReq(); + } + + Scorer* makeCountingSumScorerNoReq() + { + if ( optionalScorers.size() == 0 ) { + optionalScorers.setDoDelete(true); + return _CLNEW NonMatchingScorer(); + } else { + size_t nrOptRequired = ( minNrShouldMatch < 1 ) ? 1 : minNrShouldMatch; + if ( optionalScorers.size() < nrOptRequired ) { + optionalScorers.setDoDelete(true); + return _CLNEW NonMatchingScorer(); + } else { + Scorer* requiredCountingSumScorer = + ( optionalScorers.size() > nrOptRequired ) + ? countingDisjunctionSumScorer( &optionalScorers, nrOptRequired ) + : + ( optionalScorers.size() == 1 ) + ? _CLNEW SingleMatchScorer((Scorer*) optionalScorers[0], coordinator) + : countingConjunctionSumScorer( &optionalScorers ); + return addProhibitedScorers( requiredCountingSumScorer ); + } + } + } + + Scorer* makeCountingSumScorerSomeReq() + { + if ( optionalScorers.size() < minNrShouldMatch ) { + requiredScorers.setDoDelete(true); + optionalScorers.setDoDelete(true); + return _CLNEW NonMatchingScorer(); + } else if ( optionalScorers.size() == minNrShouldMatch ) { + Internal::ScorersType allReq( false ); + for ( Internal::ScorersType::iterator it = requiredScorers.begin(); it != requiredScorers.end(); it++ ) { + allReq.push_back( *it ); + } + for ( Internal::ScorersType::iterator it2 = optionalScorers.begin(); it2 != optionalScorers.end(); it2++ ) { + allReq.push_back( *it2 ); + } + return addProhibitedScorers( countingConjunctionSumScorer( &allReq )); + } else { + Scorer* requiredCountingSumScorer = + ( requiredScorers.size() == 1 ) + ? _CLNEW SingleMatchScorer( (Scorer*)requiredScorers[0], coordinator ) + : countingConjunctionSumScorer( &requiredScorers ); + if ( minNrShouldMatch > 0 ) { + return addProhibitedScorers( + dualConjunctionSumScorer( + requiredCountingSumScorer, + countingDisjunctionSumScorer( + &optionalScorers, + minNrShouldMatch ))); + } else { + return _CLNEW ReqOptSumScorer( + addProhibitedScorers( requiredCountingSumScorer ), + (( optionalScorers.size() == 1 ) + ? _CLNEW SingleMatchScorer( (Scorer*)optionalScorers[0], coordinator ) + : countingDisjunctionSumScorer( &optionalScorers, 1 ))); + } + } + } + + Scorer* addProhibitedScorers( Scorer* requiredCountingSumScorer ) + { + return ( prohibitedScorers.size() == 0 ) + ? requiredCountingSumScorer + : _CLNEW ReqExclScorer( requiredCountingSumScorer, + (( prohibitedScorers.size() == 1 ) + ? (Scorer*)prohibitedScorers[0] + : _CLNEW CL_NS(search)::DisjunctionSumScorer( &prohibitedScorers ))); + } + + + Internal( BooleanScorer2* parent, int32_t _minNrShouldMatch, bool _allowDocsOutOfOrder ): + requiredScorers(false), + optionalScorers(false), + prohibitedScorers(false), + countingSumScorer(NULL), + minNrShouldMatch(_minNrShouldMatch), + allowDocsOutOfOrder(_allowDocsOutOfOrder) + { + if ( _minNrShouldMatch < 0 ) { + _CLTHROWA(CL_ERR_IllegalArgument, "Minimum number of optional scorers should not be negative"); + } + + this->coordinator = _CLNEW Coordinator( parent ); + + } + ~Internal(){ + _CLDELETE( coordinator ); + _CLDELETE( countingSumScorer ); + /* TODO: these leak memory... haven't figure out how it should be fixed though... + requiredScorers.clear(); + optionalScorers.clear(); + prohibitedScorers.clear(); + */ + } + +}; + + + + + +BooleanScorer2::BooleanScorer2( Similarity* similarity, int32_t minNrShouldMatch, bool allowDocsOutOfOrder ): + Scorer( similarity ) +{ + _internal = new Internal(this, minNrShouldMatch, allowDocsOutOfOrder); +} + +BooleanScorer2::~BooleanScorer2() +{ + delete _internal; +} + +void BooleanScorer2::add( Scorer* scorer, bool required, bool prohibited ) +{ + if ( !prohibited ) { + _internal->coordinator->maxCoord++; + } + + if ( required ) { + if ( prohibited ) { + _CLTHROWA(CL_ERR_IllegalArgument, "scorer cannot be required and prohibited"); + } + _internal->requiredScorers.push_back( scorer ); + } else if ( prohibited ) { + _internal->prohibitedScorers.push_back( scorer ); + } else { + _internal->optionalScorers.push_back( scorer ); + } + +} + +void BooleanScorer2::score( HitCollector* hc ) +{ + if ( _internal->allowDocsOutOfOrder && _internal->requiredScorers.size() == 0 && _internal->prohibitedScorers.size() < 32 ) { + _internal->prohibitedScorers.setDoDelete(true); + _internal->optionalScorers.setDoDelete(true); + BooleanScorer* bs = _CLNEW BooleanScorer( getSimilarity(), _internal->minNrShouldMatch, false ); + Internal::ScorersType::iterator si = _internal->optionalScorers.begin(); + while ( si != _internal->optionalScorers.end() ) { + bs->add( (*si), false /* required */, false /* prohibited */ ); + si++; + } + si = _internal->prohibitedScorers.begin(); + while ( si != _internal->prohibitedScorers.end() ) { + bs->add( (*si), false /* required */, true /* prohibited */ ); + si++; + } + bs->score( hc ); + _CLLDELETE(bs); + } else { + if ( _internal->countingSumScorer == NULL ) { + _internal->initCountingSumScorer(); + } + while ( _internal->countingSumScorer->next() ) { + hc->collect( _internal->countingSumScorer->doc(), score() ); + } + } +} + +int32_t BooleanScorer2::doc() const +{ + return _internal->countingSumScorer->doc(); +} + +bool BooleanScorer2::next() +{ + if ( _internal->countingSumScorer == NULL ) { + _internal->initCountingSumScorer(); + } + return _internal->countingSumScorer->next(); +} + +float_t BooleanScorer2::score() +{ + _internal->coordinator->initDoc(); + float_t sum = _internal->countingSumScorer->score(); + return sum * _internal->coordinator->coordFactor(); +} + +bool BooleanScorer2::skipTo( int32_t target ) +{ + if ( _internal->countingSumScorer == NULL ) { + _internal->initCountingSumScorer(); + } + return _internal->countingSumScorer->skipTo( target ); +} + +TCHAR* BooleanScorer2::toString() +{ + return stringDuplicate(_T("BooleanScorer2")); +} + +Explanation* BooleanScorer2::explain( int32_t /*doc*/ ) +{ + _CLTHROWA(CL_ERR_UnsupportedOperation,"UnsupportedOperationException: BooleanScorer2::explain"); + /* How to explain the coordination factor? + initCountingSumScorer(); + return countingSumScorer.explain(doc); // misses coord factor. + */ +} + +bool BooleanScorer2::score( HitCollector* hc, int32_t max ) +{ + int32_t docNr = _internal->countingSumScorer->doc(); + while ( docNr < max ) { + hc->collect( docNr, score() ); + if ( !_internal->countingSumScorer->next() ) { + return false; + } + docNr = _internal->countingSumScorer->doc(); + } + return true; +} +CL_NS_END diff --git a/Pods/BRCLucene/src/core/CLucene/search/CachingSpanFilter.cpp b/Pods/BRCLucene/src/core/CLucene/search/CachingSpanFilter.cpp new file mode 100644 index 0000000..9830077 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/CachingSpanFilter.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/_ApiHeader.h" +#include "CachingSpanFilter.h" +#include "CLucene/index/IndexReader.h" + + +CL_NS_DEF(search) + +/** + * Result wrapper for the cache + */ +class ResultHolder : LUCENE_BASE +{ + bool deleteResult; +public: + SpanFilterResult * result; + + ResultHolder(SpanFilterResult * result, bool deleteResult ) + { + this->result = result; + this->deleteResult = deleteResult; + } + ~ResultHolder() + { + if ( deleteResult ) + _CLDELETE( result ); + } +}; + +struct CachingSpanFilter::Internal +{ + typedef CL_NS(util)::CLHashMap< + CL_NS(index)::IndexReader *, + ResultHolder *, + CL_NS(util)::Compare::Void, + CL_NS(util)::Equals::Void, + CL_NS(util)::Deletor::Object, + CL_NS(util)::Deletor::Object + > ResultCacheType; + + ResultCacheType cache; + DEFINE_MUTEX(cache_LOCK) + + Internal() : cache(false,true) + {} +}; + +CachingSpanFilter::CachingSpanFilter( SpanFilter * filter, bool deleteFilter ) +{ + _internal = _CLNEW Internal(); + this->filter = filter; + this->deleteFilter = deleteFilter; +} + +CachingSpanFilter::CachingSpanFilter( const CachingSpanFilter& copy ) +{ + _internal = _CLNEW Internal(); + this->filter = (SpanFilter*)copy.filter->clone(); + this->deleteFilter = true; +} + +CachingSpanFilter::~CachingSpanFilter() +{ + _CLDELETE( _internal ); + if( deleteFilter ) + { + _CLDELETE( filter ); + } + else + filter = NULL; +} + +Filter* CachingSpanFilter::clone() const +{ + return _CLNEW CachingSpanFilter( *this ); +} + +CL_NS(util)::BitSet* CachingSpanFilter::bits( CL_NS(index)::IndexReader * reader ) +{ + SpanFilterResult * result = getCachedResult( reader ); + return result != NULL ? result->getBits() : NULL; +} + +SpanFilterResult * CachingSpanFilter::getCachedResult( CL_NS(index)::IndexReader * reader ) +{ + SCOPED_LOCK_MUTEX( _internal->cache_LOCK ) + + ResultHolder * resultHolder = _internal->cache.get( reader ); + if( ! resultHolder ) + { + SpanFilterResult * result = filter->bitSpans( reader ); + resultHolder = _CLNEW ResultHolder( result, true ); + _internal->cache.put( reader, resultHolder ); + } + + return resultHolder->result; +} + +SpanFilterResult * CachingSpanFilter::bitSpans( CL_NS(index)::IndexReader * reader ) +{ + return getCachedResult( reader ); +} + +TCHAR* CachingSpanFilter::toString() +{ + TCHAR* ft = filter->toString(); + size_t len = _tcslen( ft ) + 20; + TCHAR* ret = _CL_NEWARRAY( TCHAR, len ); + ret[0] = 0; + _sntprintf( ret, len, _T( "CachingSpanFilter(%s)" ), ft ); + _CLDELETE_CARRAY( ft ); + return ret; +} + +CL_NS_END \ No newline at end of file diff --git a/Pods/BRCLucene/src/core/CLucene/search/CachingSpanFilter.h b/Pods/BRCLucene/src/core/CLucene/search/CachingSpanFilter.h new file mode 100644 index 0000000..abe32bb --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/CachingSpanFilter.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. + ------------------------------------------------------------------------------*/ +#ifndef _lucene_search_CachingSpanFilter_ +#define _lucene_search_CachingSpanFilter_ + +#include "SpanFilter.h" + +CL_NS_DEF(search) + +/** + * Wraps another SpanFilter's result and caches it. The purpose is to allow + * filters to simply filter, and then wrap with this class to add caching. + */ +class CachingSpanFilter : public SpanFilter +{ + struct Internal; + Internal* _internal; + +protected: + SpanFilter * filter; + bool deleteFilter; + +protected: + CachingSpanFilter( const CachingSpanFilter& copy ); + +public: + /** + * @param filter Filter to cache results of + */ + CachingSpanFilter( SpanFilter * filter, bool deleteFilter=true ); + + virtual ~CachingSpanFilter(); + + virtual Filter* clone() const; + + virtual CL_NS(util)::BitSet* bits( CL_NS(index)::IndexReader * reader ); + + virtual SpanFilterResult * bitSpans( CL_NS(index)::IndexReader * reader ); + + virtual TCHAR* toString(); + +private: + SpanFilterResult * getCachedResult( CL_NS(index)::IndexReader * reader ); + +// public boolean equals(Object o) { +// if (!(o instanceof CachingSpanFilter)) return false; +// return this.filter.equals(((CachingSpanFilter)o).filter); +// } +// +// public int hashCode() { +// return filter.hashCode() ^ 0x1117BF25; +// } +}; + +CL_NS_END +#endif // _lucene_search_CachingSpanFilter_ diff --git a/Pods/BRCLucene/src/core/CLucene/search/CachingWrapperFilter.cpp b/Pods/BRCLucene/src/core/CLucene/search/CachingWrapperFilter.cpp new file mode 100644 index 0000000..0fd5ff1 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/CachingWrapperFilter.cpp @@ -0,0 +1,114 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "CachingWrapperFilter.h" +#include "CLucene/util/BitSet.h" +#include "CLucene/index/IndexReader.h" + +CL_NS_DEF(search) +CL_NS_USE(index) +CL_NS_USE(util) + + +class BitSetHolder: LUCENE_BASE{ + bool deleteBs; +public: + CL_NS(util)::BitSet* bits; + + BitSetHolder(CL_NS(util)::BitSet* bits, bool deleteBs){ + this->bits = bits; + this->deleteBs = deleteBs; + } + ~BitSetHolder(){ + if ( deleteBs ) + _CLDELETE(bits); + } +}; + +struct AbstractCachingFilter::Internal{ + typedef CL_NS(util)::CLHashMap, + CL_NS(util)::Equals::Void, + CL_NS(util)::Deletor::Object, + CL_NS(util)::Deletor::Object > CacheType; + + CacheType cache; + DEFINE_MUTEX(cache_LOCK) + Internal(): + cache(false,true) + { + } +}; + +AbstractCachingFilter::AbstractCachingFilter(): + _internal(new Internal) +{ +} +AbstractCachingFilter::AbstractCachingFilter(const AbstractCachingFilter& /*copy*/): + _internal(new Internal) +{ +} +AbstractCachingFilter::~AbstractCachingFilter(){ + delete _internal; +} + +BitSet* AbstractCachingFilter::bits(IndexReader* reader){ + SCOPED_LOCK_MUTEX(_internal->cache_LOCK) + BitSetHolder* cached = _internal->cache.get(reader); + if ( cached != NULL ) + return cached->bits; + BitSet* bs = doBits(reader); + BitSetHolder* bsh = _CLNEW BitSetHolder(bs, doShouldDeleteBitSet(bs)); + _internal->cache.put(reader,bsh); + return bs; +} +void AbstractCachingFilter::closeCallback(CL_NS(index)::IndexReader* reader, void*){ + SCOPED_LOCK_MUTEX(_internal->cache_LOCK) + _internal->cache.remove(reader); +} + + + + +CachingWrapperFilter::CachingWrapperFilter(Filter* filter, bool deleteFilter): + AbstractCachingFilter() +{ + 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/Pods/BRCLucene/src/core/CLucene/search/CachingWrapperFilter.h b/Pods/BRCLucene/src/core/CLucene/search/CachingWrapperFilter.h new file mode 100644 index 0000000..9647c96 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/CachingWrapperFilter.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_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 CLUCENE_EXPORT AbstractCachingFilter: public Filter +{ + struct Internal; + Internal* _internal; + void closeCallback(CL_NS(index)::IndexReader* reader, void* param); +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 CLUCENE_EXPORT 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/Pods/BRCLucene/src/core/CLucene/search/ChainedFilter.cpp b/Pods/BRCLucene/src/core/CLucene/search/ChainedFilter.cpp new file mode 100644 index 0000000..8721473 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/ChainedFilter.cpp @@ -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. +------------------------------------------------------------------------------*/ + +#include "CLucene/_ApiHeader.h" +#include "CLucene/util/Misc.h" +#include "CLucene/util/BitSet.h" +#include "CLucene/util/StringBuffer.h" +#include "CLucene/index/IndexReader.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 ): + Filter(), + filters(_filters), + logicArray(NULL), + logic(_op) +{ +} +ChainedFilter::ChainedFilter( Filter** _filters, int* _array ): + Filter(), + filters(_filters), + logicArray(_array), + logic(-1) +{ +} +ChainedFilter::ChainedFilter( const ChainedFilter& copy ) : + Filter(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;iset(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;iset(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/Pods/BRCLucene/src/core/CLucene/search/ChainedFilter.h b/Pods/BRCLucene/src/core/CLucene/search/ChainedFilter.h new file mode 100644 index 0000000..e7047cd --- /dev/null +++ b/Pods/BRCLucene/src/core/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 "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 CLUCENE_EXPORT 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/Pods/BRCLucene/src/core/CLucene/search/Compare.cpp b/Pods/BRCLucene/src/core/CLucene/search/Compare.cpp new file mode 100644 index 0000000..bb85951 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/Compare.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/_ApiHeader.h" +#include "Compare.h" +#include "SearchHeader.h" + +CL_NS_DEF(search) + +ScoreDocComparators::ScoreDocComparators(){} +ScoreDocComparators::~ScoreDocComparators(){ +} + +int32_t ScoreDocComparators::Relevance::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* ScoreDocComparators::Relevance::sortValue (struct ScoreDoc* i) { + return _CLNEW CL_NS(util)::Compare::Float (i->score); +} +int32_t ScoreDocComparators::Relevance::sortType() { + return SortField::DOCSCORE; +} + + + +ScoreDocComparators::IndexOrder::IndexOrder(): + ScoreDocComparator() +{ + +} +int32_t ScoreDocComparators::IndexOrder::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* ScoreDocComparators::IndexOrder::sortValue (struct ScoreDoc* i) { + return _CLNEW CL_NS(util)::Compare::Int32(i->doc); +} +int32_t ScoreDocComparators::IndexOrder::sortType() { + return SortField::DOC; +} + + + +ScoreDocComparators::String::String(FieldCache::StringIndex* index, int32_t len) +{ + this->length = len; + this->index = index; +} + +int32_t ScoreDocComparators::String::compare (struct ScoreDoc* i, struct ScoreDoc* j) { + CND_PRECONDITION(i->docdoc>=length") + CND_PRECONDITION(j->docdoc>=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* ScoreDocComparators::String::sortValue (struct ScoreDoc* i) { + return _CLNEW CL_NS(util)::Compare::TChar(index->lookup[index->order[i->doc]]); +} + +int32_t ScoreDocComparators::String::sortType() { + return SortField::STRING; +} + + +ScoreDocComparators::Int32::Int32(int32_t* fieldOrder, int32_t len) +{ + this->fieldOrder = fieldOrder; + this->length = len; +} + + +int32_t ScoreDocComparators::Int32::compare (struct ScoreDoc* i, struct ScoreDoc* j) { + CND_PRECONDITION(i->docdoc>=length") + CND_PRECONDITION(j->docdoc>=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* ScoreDocComparators::Int32::sortValue (struct ScoreDoc* i) { + CND_PRECONDITION(i->docdoc>=length") + return _CLNEW CL_NS(util)::Compare::Int32(fieldOrder[i->doc]); +} + +int32_t ScoreDocComparators::Int32::sortType() { + return SortField::INT; +} + +ScoreDocComparators::Float::Float(float_t* fieldOrder, int32_t len) +{ + this->fieldOrder = fieldOrder; + this->length = len; +} + +int32_t ScoreDocComparators::Float::compare (struct ScoreDoc* i, struct ScoreDoc* j) { + CND_PRECONDITION(i->docdoc>=length") + CND_PRECONDITION(j->docdoc>=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* ScoreDocComparators::Float::sortValue (struct ScoreDoc* i) { + CND_PRECONDITION(i->docdoc>=length") + return _CLNEW CL_NS(util)::Compare::Float(fieldOrder[i->doc]); +} + +int32_t ScoreDocComparators::Float::sortType() { + return SortField::FLOAT; +} + +CL_NS_END diff --git a/Pods/BRCLucene/src/core/CLucene/search/Compare.h b/Pods/BRCLucene/src/core/CLucene/search/Compare.h new file mode 100644 index 0000000..e3122a5 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/Compare.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_search_Compare_ +#define _lucene_search_Compare_ + + +//#include "FieldSortedHitQueue.h" +#include "Sort.h" +#include "FieldCache.h" + +CL_NS_DEF(search) + + +class CLUCENE_EXPORT ScoreDocComparators:LUCENE_BASE { +protected: + ScoreDocComparators(); +public: + ~ScoreDocComparators(); + + class CLUCENE_EXPORT Relevance:public ScoreDocComparator { + public: + int32_t compare (struct ScoreDoc* i, struct ScoreDoc* j); + CL_NS(util)::Comparable* sortValue (struct ScoreDoc* i); + int32_t sortType(); + }; + + class CLUCENE_EXPORT IndexOrder:public ScoreDocComparator{ + public: + IndexOrder(); + int32_t compare (struct ScoreDoc* i, struct ScoreDoc* j); + CL_NS(util)::Comparable* sortValue (struct ScoreDoc* i); + int32_t sortType(); + }; + + + class CLUCENE_EXPORT String: public ScoreDocComparator { + FieldCache::StringIndex* index; + int32_t length; + public: + String(FieldCache::StringIndex* index, int32_t len); + int32_t compare (struct ScoreDoc* i, struct ScoreDoc* j); + CL_NS(util)::Comparable* sortValue (struct ScoreDoc* i); + + int32_t sortType(); + }; + + class CLUCENE_EXPORT Int32:public ScoreDocComparator{ + int32_t* fieldOrder; + int32_t length; + public: + Int32(int32_t* fieldOrder, int32_t len); + int32_t compare (struct ScoreDoc* i, struct ScoreDoc* j); + CL_NS(util)::Comparable* sortValue (struct ScoreDoc* i); + int32_t sortType(); + }; + + class CLUCENE_EXPORT Float:public ScoreDocComparator { + float_t* fieldOrder; + int32_t length; + public: + Float(float_t* fieldOrder, int32_t len); + int32_t compare (struct ScoreDoc* i, struct ScoreDoc* j); + CL_NS(util)::Comparable* sortValue (struct ScoreDoc* i); + int32_t sortType(); + }; +}; + + +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/search/ConjunctionScorer.cpp b/Pods/BRCLucene/src/core/CLucene/search/ConjunctionScorer.cpp new file mode 100644 index 0000000..317faaa --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/ConjunctionScorer.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/_ApiHeader.h" +#include "_ConjunctionScorer.h" +#include "Similarity.h" +#include "CLucene/util/_Arrays.h" +#include +#include + +CL_NS_USE(index) +CL_NS_USE(util) +CL_NS_DEF(search) + + ConjunctionScorer::ConjunctionScorer(Similarity* similarity, ScorersType* _scorers): + Scorer(similarity), + firstTime(true), + more(false), + coord(0.0), + lastDoc(-1) + { + this->scorers = _CLNEW CL_NS(util)::ObjectArray(_scorers->size()); + _scorers->toArray(this->scorers->values); + coord = getSimilarity()->coord(this->scorers->length, this->scorers->length); + } + ConjunctionScorer::ConjunctionScorer(Similarity* similarity, const CL_NS(util)::ArrayBase* _scorers): + Scorer(similarity), + firstTime(true), + more(false), + coord(0.0), + lastDoc(-1) + { + this->scorers = _CLNEW CL_NS(util)::ObjectArray(_scorers->length); + memcpy(this->scorers->values, _scorers->values, _scorers->length * sizeof(Scorer*)); + coord = getSimilarity()->coord(this->scorers->length, this->scorers->length); + } + ConjunctionScorer::~ConjunctionScorer(){ + _CLLDELETE(scorers); + } + + TCHAR* ConjunctionScorer::toString(){ + return stringDuplicate(_T("ConjunctionScorer")); + } + + int32_t ConjunctionScorer::doc() const{ + return lastDoc; + } + + bool ConjunctionScorer::next() { + if (firstTime) { + init(0); + } else if (more) { + more = scorers->values[(scorers->length-1)]->next(); + } + return doNext(); + } + + bool ConjunctionScorer::doNext() { + int32_t first=0; + Scorer* lastScorer = scorers->values[scorers->length-1]; + Scorer* firstScorer; + while (more && (firstScorer=scorers->values[first])->doc() < (lastDoc=lastScorer->doc())) { + more = firstScorer->skipTo(lastDoc); + lastScorer = firstScorer; + first = (first == (scorers->length-1)) ? 0 : first+1; + } + return more; + } + + bool ConjunctionScorer::skipTo(int32_t target) { + if (firstTime) + return init(target); + else if (more) + more = scorers->values[(scorers->length-1)]->skipTo(target); + return doNext(); + } + int ConjunctionScorer_sort(const void* _elem1, const void* _elem2){ + const Scorer* elem1 = *(const Scorer**)_elem1; + const Scorer* elem2 = *(const Scorer**)_elem2; + return elem1->doc() - elem2->doc(); + } + + bool ConjunctionScorer::init(int32_t target) { + firstTime = false; + more = scorers->length>1; + + + for (size_t i=0; ilength; i++) { + more = target==0 ? scorers->values[i]->next() : scorers->values[i]->skipTo(target); + if (!more) + return false; + } + + // Sort the array the first time... + // We don't need to sort the array in any future calls because we know + // it will already start off sorted (all scorers on same doc). + + // note that this comparator is not consistent with equals! + qsort(scorers->values,scorers->length, sizeof(Scorer*), ConjunctionScorer_sort); + + doNext(); + + // If first-time skip distance is any predictor of + // scorer sparseness, then we should always try to skip first on + // those scorers. + // Keep last scorer in it's last place (it will be the first + // to be skipped on), but reverse all of the others so that + // they will be skipped on in order of original high skip. + int32_t end=(scorers->length-1)-1; + for (int32_t i=0; i<(end>>1); i++) { + Scorer* tmp = scorers->values[i]; + scorers->values[i] = scorers->values[end-i]; + scorers->values[end-i] = tmp; + } + return more; + } + + float_t ConjunctionScorer::score(){ + float_t sum = 0.0f; + for (size_t i = 0; i < scorers->length; i++) { + sum += scorers->values[i]->score(); + } + return sum * coord; + } + Explanation* ConjunctionScorer::explain(int32_t /*doc*/) { + _CLTHROWA(CL_ERR_UnsupportedOperation,"UnsupportedOperationException: ConjunctionScorer::explain"); + } + + +CL_NS_END diff --git a/Pods/BRCLucene/src/core/CLucene/search/ConstantScoreQuery.cpp b/Pods/BRCLucene/src/core/CLucene/search/ConstantScoreQuery.cpp new file mode 100644 index 0000000..98cda26 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/ConstantScoreQuery.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/_ApiHeader.h" +#include "ConstantScoreQuery.h" + +#include "SearchHeader.h" +#include "Scorer.h" +#include "RangeFilter.h" +#include "Similarity.h" +#include "CLucene/index/IndexReader.h" +#include "CLucene/util/BitSet.h" +#include "CLucene/util/StringBuffer.h" +#include "CLucene/util/_StringIntern.h" +#include "CLucene/util/Misc.h" + +CL_NS_USE(index) +CL_NS_USE(util) +CL_NS_DEF(search) + +class ConstantScorer : public Scorer { + BitSet* bits; + const float_t theScore; + int32_t _doc; + bool shouldDelete; + +public: + ConstantScorer(Similarity* similarity, IndexReader* reader, Weight* w, Filter* filter) : Scorer(similarity), + bits(filter->bits(reader)), theScore(w->getValue()), _doc(-1) + { + shouldDelete = filter->shouldDeleteBitSet(bits); + } + virtual ~ConstantScorer() { + if ( shouldDelete) + _CLLDELETE(bits); + } + + bool next() { + _doc = bits->nextSetBit(_doc+1); + return _doc >= 0; + } + + int32_t doc() const { + return _doc; + } + + float_t score() { + return theScore; + } + + bool skipTo(int32_t target) { + _doc = bits->nextSetBit(target); + return _doc >= 0; + } + + Explanation* explain(int32_t /*doc*/) { + _CLTHROWA(CL_ERR_UnsupportedOperation, "Unsupported operation at ConstantScoreQuery::explain"); + } + + TCHAR* toString(){ + return STRDUP_TtoT(_T("ConstantScorer")); + } + + friend class ConstantWeight; +}; + +class ConstantWeight : public Weight { +private: + Similarity* similarity; + float_t queryNorm; + float_t queryWeight; + const ConstantScoreQuery* parentQuery; + +public: + ConstantWeight(ConstantScoreQuery* enclosingInstance, Searcher* searcher) : + similarity(enclosingInstance->getSimilarity(searcher)), + queryNorm(0), queryWeight(0), + parentQuery(enclosingInstance) + { + } + virtual ~ConstantWeight(){} + + Query* getQuery() { + return (Query*)parentQuery; + } + + float_t getValue() { + return queryWeight; + } + + float_t sumOfSquaredWeights() { + queryWeight = parentQuery->getBoost(); + return queryWeight * queryWeight; + } + + void normalize(float_t norm) { + this->queryNorm = norm; + queryWeight *= this->queryNorm; + } + + Scorer* scorer(IndexReader* reader) { + return _CLNEW ConstantScorer(similarity, reader, this, parentQuery->filter); + } + + Explanation* explain(IndexReader* reader, int32_t doc) { + ConstantScorer* cs = (ConstantScorer*)scorer(reader); + bool exists = cs->bits->get(doc); + _CLDELETE(cs); + + ComplexExplanation* result = _CLNEW ComplexExplanation(); + + if (exists) { + StringBuffer buf(100); + buf.append(_T("ConstantScoreQuery(")); + + TCHAR* tmp = parentQuery->filter->toString(); + buf.append(tmp); + _CLDELETE_LCARRAY(tmp); + + buf.append(_T("), product of:")); + + result->setDescription(buf.getBuffer()); + result->setValue(queryWeight); + result->setMatch(true); + result->addDetail(_CLNEW Explanation(parentQuery->getBoost(), _T("boost"))); + result->addDetail(_CLNEW Explanation(queryNorm, _T("queryNorm"))); + } else { + StringBuffer buf(100); + buf.append(_T("ConstantScoreQuery(")); + + TCHAR* tmp = parentQuery->filter->toString(); + buf.append(tmp); + _CLDELETE_LCARRAY(tmp); + + buf.append(_T(") doesn't match id ")); + buf.appendInt(doc); + + result->setDescription(buf.getBuffer()); + result->setValue(0); + result->setMatch(true); + } + + _CLLDELETE(cs); + return result; + } +}; + +ConstantScoreQuery::ConstantScoreQuery(Filter* _filter) : filter(_filter) { +} + +ConstantScoreQuery::~ConstantScoreQuery() { + _CLLDELETE(filter); +} + +Filter* ConstantScoreQuery::getFilter() const { + return filter; +} + +Query* ConstantScoreQuery::rewrite(IndexReader* reader) { + return this; +} + +void ConstantScoreQuery::extractTerms( TermSet * termset ) const +{ + // OK to not add any terms when used for MultiSearcher, + // but may not be OK for highlighting +} + +Weight* ConstantScoreQuery::_createWeight(Searcher* searcher) { + return _CLNEW /*ConstantScoreQuery::*/ConstantWeight(this, searcher); +} + +TCHAR* ConstantScoreQuery::toString(const TCHAR* /*field*/) const +{ + StringBuffer buf; + buf.append(_T("ConstantScore(")); + TCHAR* tmp = filter->toString(); + buf.append(tmp); + _CLLDELETE(tmp); + buf.appendBoost(getBoost()); + buf.appendChar(_T(')')); + return buf.giveBuffer(); +} + +// TODO: Filter is missing an equals() function, hence this equals() is incomplete +bool ConstantScoreQuery::equals(Query* o) const { + if (this == o) return true; + if (!(o->instanceOf("ConstantScoreQuery"))) return false; + ConstantScoreQuery* other = (ConstantScoreQuery*)o; + return this->getBoost()==other->getBoost() + /*&& filter->equals(other->filter)*/; +} + +// TODO: Filter is missing hashCode() +size_t ConstantScoreQuery::hashCode() const { + // Simple add is OK since no existing filter hashcode has a float component. + //return filter->hashCode() + FloatToIntBits(getBoost()); + return 0; +} + +ConstantScoreQuery::ConstantScoreQuery( const ConstantScoreQuery& copy ) : filter(copy.getFilter()->clone()) +{ +} + +const char* ConstantScoreQuery::getObjectName() const { return "ConstantScoreQuery"; } +Query* ConstantScoreQuery::clone() const{ + return _CLNEW ConstantScoreQuery(*this); +} + +ConstantScoreRangeQuery::ConstantScoreRangeQuery( const ConstantScoreRangeQuery& copy ): + fieldName(const_cast(CLStringIntern::intern(copy.fieldName))), + lowerVal(STRDUP_TtoT(copy.lowerVal)), upperVal(STRDUP_TtoT(copy.upperVal)), + includeLower(copy.includeLower),includeUpper(copy.includeUpper) +{ +} + +ConstantScoreRangeQuery::ConstantScoreRangeQuery(const TCHAR* _fieldName, const TCHAR* _lowerVal, const TCHAR* _upperVal, + bool _includeLower, bool _includeUpper) : fieldName(NULL), lowerVal(NULL), upperVal(NULL) +{ + // do a little bit of normalization... + // open ended range queries should always be inclusive. + if (_lowerVal==NULL) { + _includeLower=true; + } else if (_includeLower && _tcscmp(_lowerVal, _T(""))==0) { + _lowerVal=NULL; + } + if (_upperVal==NULL) { + _includeUpper=true; + } + + this->fieldName = const_cast(CLStringIntern::intern(_fieldName)); // intern it, just like terms... + if (_lowerVal != NULL) + this->lowerVal = STRDUP_TtoT(_lowerVal); + if (_upperVal != NULL) + this->upperVal = STRDUP_TtoT(_upperVal); + this->includeLower = _includeLower; + this->includeUpper = _includeUpper; +} +ConstantScoreRangeQuery::~ConstantScoreRangeQuery(){ + _CLDELETE_LCARRAY(lowerVal); + _CLDELETE_LCARRAY(upperVal); + CLStringIntern::unintern(this->fieldName); +} + +Query* ConstantScoreRangeQuery::rewrite(CL_NS(index)::IndexReader* reader) { + // Map to RangeFilter semantics which are slightly different... + const TCHAR* lowerSafe = lowerVal!=NULL?lowerVal:_T(""); + RangeFilter* rangeFilt = _CLNEW RangeFilter(fieldName, + lowerSafe, + upperVal, + (_tcscmp(lowerSafe, _T(""))==0)?false:includeLower, + upperVal==NULL?false:includeUpper); + Query* q = _CLNEW ConstantScoreQuery(rangeFilt); + q->setBoost(getBoost()); + return q; +} + +TCHAR* ConstantScoreRangeQuery::toString(const TCHAR* field) const +{ + StringBuffer buffer(30); + if (_tcscmp(getField(), field) != 0) + { + buffer.append(getField()); + buffer.appendChar(_T(':')); + } + buffer.appendChar(includeLower ? _T('[') : _T('{')); + buffer.append(lowerVal != NULL ? lowerVal : _T("*")); + buffer.append(_T(" TO ")); + buffer.append(upperVal != NULL ? upperVal : _T("*")); + buffer.appendChar(includeUpper ? _T(']') : _T('}')); + buffer.appendBoost(getBoost()); + return buffer.giveBuffer(); +} + +bool ConstantScoreRangeQuery::equals(Query* o) const { + if (this == o) return true; + if (!(o->instanceOf("ConstantScoreRangeQuery"))) return false; + ConstantScoreRangeQuery* other = (ConstantScoreRangeQuery*) o; + + if (this->fieldName != other->fieldName // interned comparison + || this->includeLower != other->includeLower + || this->includeUpper != other->includeUpper + ) { return false; } + if (this->lowerVal != NULL ? _tcscmp(this->lowerVal, other->lowerVal) != 0 : other->lowerVal != NULL) return false; + if (this->upperVal != NULL ? _tcscmp(this->upperVal, other->upperVal) != 0 : other->upperVal != NULL) return false; + return this->getBoost() == other->getBoost(); +} + +// TODO: Complete this +size_t ConstantScoreRangeQuery::hashCode() const +{ + int32_t h = Similarity::floatToByte( getBoost() ) ^ Misc::thashCode( fieldName ); + // hashCode of "" is 0, so don't use that for null... + + h ^= ( lowerVal != NULL ) ? Misc::thashCode( lowerVal ) : 0x965a965a; + // don't just XOR upperVal with out mixing either it or h, as it will cancel + // out lowerVal if they are equal. + + h ^= (h << 17) | (h >> 16); // a reversible (one to one) 32 bit mapping mix + h ^= (upperVal != NULL) ? Misc::thashCode( upperVal ) : 0x5a695a69; + h ^= (includeLower ? 0x665599aa : 0) ^ (includeUpper ? 0x99aa5566 : 0); + + return h; +} + +const char* ConstantScoreRangeQuery::getObjectName() const { return "ConstantScoreRangeQuery"; } +Query* ConstantScoreRangeQuery::clone() const{ + return _CLNEW ConstantScoreRangeQuery(*this); +} + +CL_NS_END + diff --git a/Pods/BRCLucene/src/core/CLucene/search/ConstantScoreQuery.h b/Pods/BRCLucene/src/core/CLucene/search/ConstantScoreQuery.h new file mode 100644 index 0000000..e6278db --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/ConstantScoreQuery.h @@ -0,0 +1,125 @@ +/*------------------------------------------------------------------------------ +* 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_ConstantScoreQuery_ +#define _lucene_search_ConstantScoreQuery_ + +CL_CLASS_DEF(index,IndexReader) + +#include "Query.h" +#include "Filter.h" +#include "Explanation.h" + +CL_NS_DEF(search) + +/** + * A query that wraps a filter and simply returns a constant score equal to the + * query boost for every document in the filter. + * + */ +class CLUCENE_EXPORT ConstantScoreQuery : public Query { +protected: + Filter* filter; + +public: + /** + * Constructs a new ConstantScoreQuery, and takes ownership of the filter object + * + * @memory this object consumes _filter + */ + ConstantScoreQuery(Filter* _filter); + virtual ~ConstantScoreQuery(); + + /** Returns the encapsulated filter */ + Filter* getFilter() const; + + Query* rewrite(CL_NS(index)::IndexReader* reader); + + /** Constant score query does not return any terms */ + void extractTerms( TermSet * termset ) const; + +protected: + Weight* _createWeight(Searcher* searcher); + +public: + /** Prints a user-readable version of this query. */ + TCHAR* toString(const TCHAR* field) const; + + /** Returns true if o is equal to this. */ + bool equals(Query* o) const; + + /** Returns a hash code value for this object. */ + size_t hashCode() const; + + const char* getObjectName() const; + static const char* getClassName(){ return "ConstantScoreQuery"; } + Query* clone() const; + + friend class ConstantWeight; + +protected: + ConstantScoreQuery( const ConstantScoreQuery& copy ); +}; + + +/** + * A range query that returns a constant score equal to its boost for + * all documents in the range. + *

+ * It does not have an upper bound on the number of clauses covered in the range. + *

+ * If an endpoint is null, it is said to be "open". + * Either or both endpoints may be open. Open endpoints may not be exclusive + * (you can't select all but the first or last term without explicitly specifying the term to exclude.) + * + */ +class CLUCENE_EXPORT ConstantScoreRangeQuery : public Query +{ +private: + TCHAR* fieldName; + TCHAR* lowerVal; + TCHAR* upperVal; + bool includeLower; + bool includeUpper; + +public: + ConstantScoreRangeQuery(const TCHAR* _fieldName, const TCHAR* _lowerVal, const TCHAR* _upperVal, + bool _includeLower, bool _includeUpper); + virtual ~ConstantScoreRangeQuery(); + + /** Returns the field name for this query */ + TCHAR* getField() const { return fieldName; } + /** Returns the value of the lower endpoint of this range query, null if open ended */ + TCHAR* getLowerVal() const { return lowerVal; } + /** Returns the value of the upper endpoint of this range query, null if open ended */ + TCHAR* getUpperVal() const { return upperVal; } + /** Returns true if the lower endpoint is inclusive */ + bool includesLower() const { return includeLower; } + /** Returns true if the upper endpoint is inclusive */ + bool includesUpper() const { return includeUpper; } + + Query* rewrite(CL_NS(index)::IndexReader* reader); + + /** Prints a user-readable version of this query. */ + TCHAR* toString(const TCHAR* field) const; + + /** Returns true if o is equal to this. */ + bool equals(Query* o) const; + + /** Returns a hash code value for this object.*/ + size_t hashCode() const; + + const char* getObjectName() const; + static const char* getClassName(){ return "ConstantScoreRangeQuery"; } + Query* clone() const; +protected: + ConstantScoreRangeQuery( const ConstantScoreRangeQuery& copy ); +}; + +CL_NS_END + +#endif + diff --git a/Pods/BRCLucene/src/core/CLucene/search/DateFilter.cpp b/Pods/BRCLucene/src/core/CLucene/search/DateFilter.cpp new file mode 100644 index 0000000..a8a2825 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/DateFilter.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/_ApiHeader.h" +#include "DateFilter.h" +#include "CLucene/document/DateField.h" +#include "CLucene/index/Term.h" +#include "CLucene/index/IndexReader.h" +#include "CLucene/index/Terms.h" +#include "CLucene/util/BitSet.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 f matching times between + from and to. */ + 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 f matching times before + time. */ + DateFilter* DateFilter::Before(const TCHAR* field, int64_t time) { + return _CLNEW DateFilter(field, 0,time); + } + + /** Constructs a filter for field f matching times after + time. */ + 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/Pods/BRCLucene/src/core/CLucene/search/DateFilter.h b/Pods/BRCLucene/src/core/CLucene/search/DateFilter.h new file mode 100644 index 0000000..91b3da8 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/DateFilter.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_DateFilter_ +#define _lucene_search_DateFilter_ + + +//#include "CLucene/document/DateField.h" +CL_CLASS_DEF(index,Term) +//#include "CLucene/index/Terms.h" +//#include "CLucene/index/IndexReader.h" +//#include "CLucene/util/BitSet.h" +#include "Filter.h" + +CL_NS_DEF(search) + + +// Deprecated. Instead, use RangeFilter combined with DateTools. + + + /** + * A Filter that restricts search results to a range of time. + * + *

For this to work, documents must have been indexed with a + * {@link DateField}. + */ + class CLUCENE_EXPORT 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 f matching times between + from and to. */ + DateFilter(const TCHAR* f, int64_t from, int64_t to); + + /** Constructs a filter for field f matching times before + time. */ + static DateFilter* Before(const TCHAR* field, int64_t time) ; + + /** Constructs a filter for field f matching times after + time. */ + 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/Pods/BRCLucene/src/core/CLucene/search/DisjunctionSumScorer.cpp b/Pods/BRCLucene/src/core/CLucene/search/DisjunctionSumScorer.cpp new file mode 100644 index 0000000..6e45658 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/DisjunctionSumScorer.cpp @@ -0,0 +1,201 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "Scorer.h" +#include "ScorerDocQueue.h" +#include "SearchHeader.h" +#include "Explanation.h" + +#include "CLucene/util/StringBuffer.h" + +#include "_DisjunctionSumScorer.h" + + +CL_NS_DEF(search) + +DisjunctionSumScorer::DisjunctionSumScorer( DisjunctionSumScorer::ScorersType* _subScorers, const int32_t _minimumNrMatchers ) : + Scorer( NULL ), + minimumNrMatchers(_minimumNrMatchers), + scorerDocQueue(NULL), + queueSize(-1), + currentDoc(-1), + currentScore(-1.0f), + nrScorers(0), + _nrMatchers(-1) +{ + if ( minimumNrMatchers <= 0 ) { + _CLTHROWA(CL_ERR_IllegalArgument,"Minimum nr of matchers must be positive"); + } + + nrScorers = _subScorers->size(); + + if ( nrScorers <= 1 ) { + _CLTHROWA(CL_ERR_IllegalArgument,"There must be at least 2 subScorers"); + } + + for ( DisjunctionSumScorer::ScorersType::iterator itr = _subScorers->begin(); itr != _subScorers->end(); itr++ ) { + subScorers.push_back( *itr ); + } +} + +DisjunctionSumScorer::~DisjunctionSumScorer() +{ + _CLLDELETE( scorerDocQueue ); +} + +void DisjunctionSumScorer::score( HitCollector* hc ) +{ + while( next() ) { + hc->collect( currentDoc, currentScore ); + } +} + +bool DisjunctionSumScorer::next() +{ + if ( scorerDocQueue == NULL ) { + initScorerDocQueue(); + } + return ( scorerDocQueue->size() >= minimumNrMatchers ) && advanceAfterCurrent(); +} + +float_t DisjunctionSumScorer::score() +{ + return currentScore; +} +int32_t DisjunctionSumScorer::doc() const +{ + return currentDoc; +} + +int32_t DisjunctionSumScorer::nrMatchers() const +{ + return _nrMatchers; +} + +bool DisjunctionSumScorer::skipTo( int32_t target ) +{ + if ( scorerDocQueue == NULL ) { + initScorerDocQueue(); + } + if ( queueSize < minimumNrMatchers ) { + return false; + } + if ( target <= currentDoc ) { + return true; + } + do { + if ( scorerDocQueue->topDoc() >= target ) { + return advanceAfterCurrent(); + } else if ( !scorerDocQueue->topSkipToAndAdjustElsePop( target )) { + if ( --queueSize < minimumNrMatchers ) { + return false; + } + } + } while ( true ); +} + +TCHAR* DisjunctionSumScorer::toString() +{ + return stringDuplicate(_T("DisjunctionSumScorer")); +} + +Explanation* DisjunctionSumScorer::explain( int32_t doc ){ + Explanation* res = _CLNEW Explanation(); + float_t sumScore = 0.0f; + int32_t nrMatches = 0; + ScorersType::iterator ssi = subScorers.begin(); + while (ssi != subScorers.end()) { + Explanation* es = reinterpret_cast(*ssi)->explain(doc); + if (es->getValue() > 0.0f) { // indicates match + sumScore += es->getValue(); + nrMatches++; + } + res->addDetail(es); + ++ssi; + } + + CL_NS(util)::StringBuffer buf(50); + if (_nrMatchers >= minimumNrMatchers) { + buf.append(_T("sum over at least ")); + buf.appendInt(minimumNrMatchers); + buf.append(_T(" of ")); + buf.appendInt(subScorers.size()); + buf.appendChar(_T(':')); + + res->setValue(sumScore); + res->setDescription(buf.getBuffer()); + } else { + buf.appendInt(nrMatches); + buf.append(_T(" match(es) but at least ")); + buf.appendInt(minimumNrMatchers); + buf.append(_T(" of ")); + buf.appendInt(subScorers.size()); + buf.append(_T(" needed")); + + res->setValue(0.0f); + res->setDescription(buf.getBuffer()); + } + return res; +} + +bool DisjunctionSumScorer::score( HitCollector* hc, const int32_t max ) +{ + while ( currentDoc < max ) { + hc->collect( currentDoc, currentScore ); + if ( !next() ) { + return false; + } + } + return true; +} + +bool DisjunctionSumScorer::advanceAfterCurrent() +{ + do { // repeat until minimum nr of matchers + currentDoc = scorerDocQueue->topDoc(); + currentScore = scorerDocQueue->topScore(); + + _nrMatchers = 1; + do { // Until all subscorers are after currentDoc + if ( !scorerDocQueue->topNextAndAdjustElsePop() ) { + if ( --queueSize == 0 ) { + break; // nothing more to advance, check for last match. + } + } + if ( scorerDocQueue->topDoc() != currentDoc ) { + break; // All remaining subscorers are after currentDoc. + } + currentScore += scorerDocQueue->topScore(); + _nrMatchers++; + } while( true ); + + if ( _nrMatchers >= minimumNrMatchers ) { + return true; + } else if ( queueSize < minimumNrMatchers ) { + return false; + } + } while( true ); +} + +void DisjunctionSumScorer::initScorerDocQueue() +{ + // No need to _CLLDELETE here since this function since this function is only called if scorerDocQueue==NULL + scorerDocQueue = _CLNEW ScorerDocQueue( nrScorers ); + queueSize = 0; + + for ( ScorersType::iterator it = subScorers.begin(); it != subScorers.end(); ++it ) { + Scorer* scorer = (Scorer*)(*it); + if ( scorer->next() ) { // doc() method will be used in scorerDocQueue. + if ( scorerDocQueue->insert( scorer )) { + queueSize++; + } + } + } +} + +CL_NS_END diff --git a/Pods/BRCLucene/src/core/CLucene/search/ExactPhraseScorer.cpp b/Pods/BRCLucene/src/core/CLucene/search/ExactPhraseScorer.cpp new file mode 100644 index 0000000..6856784 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/ExactPhraseScorer.cpp @@ -0,0 +1,91 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "CLucene/index/Terms.h" +#include "SearchHeader.h" +#include "SearchHeader.h" +#include "Scorer.h" +#include "_ExactPhraseScorer.h" + +CL_NS_USE(index) +CL_NS_DEF(search) + + ExactPhraseScorer::ExactPhraseScorer(Weight* weight, TermPositions** tps, + int32_t* offsets, Similarity* similarity, uint8_t* norms): + PhraseScorer(weight, tps, offsets, 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 + + } + + ExactPhraseScorer::~ExactPhraseScorer(){} + + float_t 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"); + + // sort list with pq + pq->clear(); + + //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(); + + // for counting how many times the exact phrase is found in current document, + // just count how many times all PhrasePosition's have exactly the same position. + int32_t freq = 0; + do { //find position with all terms + while (first->position < last->position){ //scan forward in first + do{ + if (!first->nextPosition()){ + return (float_t)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 (float_t)freq; + } + + TCHAR* ExactPhraseScorer::toString(){ + return stringDuplicate(_T("ExactPhraseScorer")); + } +CL_NS_END diff --git a/Pods/BRCLucene/src/core/CLucene/search/Explanation.cpp b/Pods/BRCLucene/src/core/CLucene/search/Explanation.cpp new file mode 100644 index 0000000..57a77ba --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/Explanation.cpp @@ -0,0 +1,176 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "Explanation.h" +#include "CLucene/util/StringBuffer.h" + +CL_NS_USE(util) +CL_NS_DEF(search) + + +Explanation::Explanation(float_t _value, const TCHAR* _description):value(_value),details(NULL) +{ + _tcsncpy(this->description,_description,LUCENE_SEARCH_EXPLANATION_DESC_LEN); +} + +Explanation::Explanation():value(0), details(NULL) +{ + this->description[0]=0; +} + +Explanation::Explanation(const Explanation& copy):details(NULL) +{ + set(copy); +} +void Explanation::set(const Explanation& copy){ + this->value = copy.value; + _tcsncpy(description,copy.description,LUCENE_SEARCH_EXPLANATION_DESC_LEN); + + _CLDELETE(this->details); + + if (copy.details != NULL) { + this->details = _CLNEW CL_NS(util)::CLArrayList >(true); + CL_NS(util)::CLArrayList >::const_iterator itr; + itr = copy.details->begin(); + while ( itr != copy.details->end() ){ + details->push_back( (*itr)->clone() ); + ++itr; + } + } +} +Explanation* Explanation::clone() const{ + return _CLNEW Explanation(*this); +} + +Explanation::~Explanation(){ + _CLLDELETE(this->details); +} + +bool Explanation::isMatch() const { + return (0.0f < getValue()); +} + +float_t Explanation::getValue() const{ + return value; +} +void Explanation::setValue(const float_t value) { + this->value = value; +} + +const TCHAR* Explanation::getDescription() const { + return description; +} +void Explanation::setDescription(const TCHAR* description) { + _tcsncpy(this->description,description,LUCENE_SEARCH_EXPLANATION_DESC_LEN); +} + +TCHAR* Explanation::getSummary() { + StringBuffer buf(210); + buf.appendFloat(getValue(), 2); + buf.append(_T(" = ")); + buf.append(getDescription()); + return buf.giveBuffer(); +} + +size_t Explanation::getDetailsLength() const {return (details==NULL)?0:details->size();} +void Explanation::getDetails(Explanation** ret) { + if (details==NULL){ + ret[0]=NULL; + return; + } + size_t size = details->size(); + for ( size_t i=0;iclone(); + } + ret[size] = NULL; +} +Explanation* Explanation::getDetail(const size_t i){return (*details)[i];} + +void Explanation::addDetail(Explanation* detail) { + if (details==NULL) details = _CLNEW CL_NS(util)::CLArrayList >(true); + details->push_back(detail); +} + +TCHAR* Explanation::toString() { + return toString(0); +} + +TCHAR* Explanation::toString(int32_t depth) { + StringBuffer buffer; + for (int32_t i = 0; i < depth; i++) { + buffer.append(_T(" ")); + } + TCHAR* tSum = getSummary(); + buffer.append(tSum); + _CLDELETE_LCARRAY(tSum); + buffer.appendChar(_T('\n')); + + if (details != NULL){ + for ( size_t j=0;jsize();j++ ){ + TCHAR* tmp = (*details)[j]->toString(depth+1); + buffer.append(tmp); + _CLDELETE_LCARRAY(tmp); + } + } + return buffer.toString(); +} + +TCHAR* Explanation::toHtml() { + StringBuffer buffer; + TCHAR* tmp; + buffer.append(_T("

    \n")); + + buffer.append(_T("
  • ")); + TCHAR* tSum = getSummary(); + buffer.append(tSum); + _CLDELETE_LCARRAY(tSum); + buffer.append(_T("
    \n")); + + if (details != NULL){ + for ( size_t i=0;isize();i++ ){ + tmp = (*details)[i]->toHtml(); + buffer.append(tmp); + _CLDELETE_LCARRAY(tmp); + } + } + buffer.append(_T("
  • \n")); + buffer.append(_T("
\n")); + + return buffer.toString(); +} + +ComplexExplanation::ComplexExplanation():Explanation(){} +ComplexExplanation::ComplexExplanation(const ComplexExplanation& copy): + Explanation(copy) +{ + this->match = copy.match; +} +ComplexExplanation::ComplexExplanation(const bool _match, const float_t _value, const TCHAR* _description): + Explanation(_value, _description), match(_match) +{ +} +ComplexExplanation::~ComplexExplanation(){ +} + +bool ComplexExplanation::getMatch() const { return match; } +void ComplexExplanation::setMatch(const bool _match) { this->match = _match; } +bool ComplexExplanation::isMatch() const {return getMatch();} + +TCHAR* ComplexExplanation::getSummary() { + StringBuffer buf(220); + buf.appendFloat(getValue(),2); + buf.append(_T(" = ")); + buf.append(isMatch() ? _T("(MATCH) ") : _T("(NON-MATCH) ")); + buf.append(getDescription()); + return buf.giveBuffer(); +} + +Explanation* ComplexExplanation::clone() const{ + return _CLNEW ComplexExplanation(*this); +} + +CL_NS_END diff --git a/Pods/BRCLucene/src/core/CLucene/search/Explanation.h b/Pods/BRCLucene/src/core/CLucene/search/Explanation.h new file mode 100644 index 0000000..a99ba8e --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/Explanation.h @@ -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. +------------------------------------------------------------------------------*/ +#ifndef _lucene_search_Explanation +#define _lucene_search_Explanation + +#include "CLucene/util/VoidList.h" + +CL_NS_DEF(search) + +#define LUCENE_SEARCH_EXPLANATION_DESC_LEN 200 + +/** Expert: Describes the score computation for document and query. */ +class CLUCENE_EXPORT Explanation { +private: + float_t value; // the value of this node + TCHAR description[LUCENE_SEARCH_EXPLANATION_DESC_LEN]; // what it represents + CL_NS(util)::CLArrayList >* details; // sub-explanations + +public: + Explanation(); + Explanation(float_t _value, const TCHAR* _description); + virtual ~Explanation(); + + /** + * Indicates whether or not this Explanation models a good match. + * + *

+ * By default, an Explanation represents a "match" if the value is positive. + *

+ * @see #getValue + */ + virtual bool isMatch() const; + + /** The value assigned to this explanation node. */ + float_t getValue() const; + /** Sets the value assigned to this explanation node. */ + void setValue(const float_t value); + + /** A description of this explanation node. */ + const TCHAR* getDescription() const; /// + * If the match statis is explicitly set (ie: not null) this method + * uses it; otherwise it defers to the superclass. + *

+ * @see #getMatch + */ + bool isMatch() const; + + Explanation* clone() const; + +protected: + TCHAR* getSummary(); +}; + +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/search/FieldCache.cpp b/Pods/BRCLucene/src/core/CLucene/search/FieldCache.cpp new file mode 100644 index 0000000..f2f3a28 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/FieldCache.cpp @@ -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. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "FieldCache.h" +#include "_FieldCacheImpl.h" +#include "Sort.h" + +CL_NS_DEF(search) + +FieldCache* FieldCache_DEFAULT = NULL; +int32_t FieldCache::STRING_INDEX = -1; + +FieldCache* FieldCache::DEFAULT(){ + if ( FieldCache_DEFAULT == NULL ) + FieldCache_DEFAULT = _CLNEW FieldCacheImpl(); + return FieldCache_DEFAULT; +} +void FieldCache::_shutdown(){ + _CLDELETE(FieldCache_DEFAULT); +} + +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;ifield as integers and returns an array + * of size reader.maxDoc() 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 field as floats and returns an array + * of size reader.maxDoc() 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 field and returns an array + * of size reader.maxDoc() 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 field 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 field 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 AUTO and the actual found type. + * @param reader Used to get field values. + * @param field Which field contains the values. + * @return int32_t[], float_t[] 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 field and calls the given SortComparator + * to get the sort values. A hit in the cache will happen if reader, + * field, and comparator are the same (using equals()) + * 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; + + /** Cleanup static data */ + static CLUCENE_LOCAL void _shutdown(); +}; + +/** 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 CLUCENE_EXPORT 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 + float_t* 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/Pods/BRCLucene/src/core/CLucene/search/FieldCacheImpl.cpp b/Pods/BRCLucene/src/core/CLucene/search/FieldCacheImpl.cpp new file mode 100644 index 0000000..bc3a29c --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/FieldCacheImpl.cpp @@ -0,0 +1,577 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "_FieldCacheImpl.h" +#include "CLucene/index/IndexReader.h" +#include "CLucene/index/Term.h" +#include "CLucene/index/Terms.h" +#include "CLucene/util/_StringIntern.h" +#include "CLucene/util/Misc.h" +#include "Sort.h" + +CL_NS_USE(util) +CL_NS_USE(index) +CL_NS_DEF(search) + +///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, + CL_NS(util)::Deletor::Object >{ +public: + fieldcacheCacheReaderType(){ + setDeleteKey(false); + setDeleteValue(false); + } + ~fieldcacheCacheReaderType(){ + iterator itr = begin(); + while ( itr != end() ){ + FieldCacheImpl::FileEntry* f = itr->first; + if ( f->getType() != SortField::AUTO ) + _CLDELETE( itr->second ); + _CLDELETE( f ); + ++itr; + } + clear(); + } +}; + +//note: typename gets too long if using cacheReaderType as a typename +class fieldcacheCacheType: public CL_NS(util)::CLHashMap< + CL_NS(index)::IndexReader*, + fieldcacheCacheReaderType*, + CL_NS(util)::Compare::Void, + CL_NS(util)::Equals::Void, + CL_NS(util)::Deletor::Object, + CL_NS(util)::Deletor::Object >{ +public: + fieldcacheCacheType ( const bool deleteKey, const bool deleteValue) + { + setDeleteKey(deleteKey); + setDeleteValue(deleteValue); + } + virtual ~fieldcacheCacheType(){ + + } +}; + +FieldCache::StringIndex::StringIndex (int32_t* values, TCHAR** lookup, int count) { + this->count = count; + this->order = values; + this->lookup = lookup; +} + +FieldCache::StringIndex::~StringIndex(){ + _CLDELETE_ARRAY(order); + + for ( int i=0;iclear(); + _CLDELETE(cache); +} + +FieldCacheImpl::FileEntry::FileEntry (const TCHAR* field, int32_t type) { + this->field = CLStringIntern::intern(field); + 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); + 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); + 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; + + int32_t termval = _ttoi(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::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); + FieldCacheAuto* ret = lookup (reader, field, SortField::FLOAT); + if (ret == NULL) { + int32_t retLen = reader->maxDoc(); + float_t* retArray = _CL_NEWARRAY(float_t,retLen); + memset(retArray,0,sizeof(float_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: make richer error + field); + } + do { + Term* term = termEnum->term(false); + if (term->field() != field) + break; + + float_t termval = _tcstod(term->text(),NULL); + 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); + 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); + 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(tclose(); + _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); + 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;iclose(); _CLDELETE(enumerator) ); + + } + CLStringIntern::unintern(field); + return ret; + } + + + // inherit javadocs + FieldCacheAuto* FieldCacheImpl::getCustom (IndexReader* reader, const TCHAR* field, SortComparator* comparator){ + field = CLStringIntern::intern(field); + + 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; + } + + +CL_NS_END diff --git a/Pods/BRCLucene/src/core/CLucene/search/FieldDoc.h b/Pods/BRCLucene/src/core/CLucene/search/FieldDoc.h new file mode 100644 index 0000000..07835c9 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/FieldDoc.h @@ -0,0 +1,52 @@ +/*------------------------------------------------------------------------------ +* 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_ + +#include "SearchHeader.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 fields 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 CLUCENE_EXPORT 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, float_t score); + /** Expert: Creates one of these objects with the given sort information. */ + FieldDoc (int32_t doc, float_t score, CL_NS(util)::Comparable** fields); + ~FieldDoc(); +}; + +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/search/FieldDocSortedHitQueue.cpp b/Pods/BRCLucene/src/core/CLucene/search/FieldDocSortedHitQueue.cpp new file mode 100644 index 0000000..67e4939 --- /dev/null +++ b/Pods/BRCLucene/src/core/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/_ApiHeader.h" +#include "_FieldDocSortedHitQueue.h" + + +CL_NS_USE(util) +CL_NS_DEF(search) + + +FieldDoc::FieldDoc (int32_t doc, float_t score) +{ + this->scoreDoc.doc = doc; + this->scoreDoc.score = score; + fields=NULL; +} + +FieldDoc::FieldDoc (int32_t doc, float_t 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) { + const int32_t n = fieldsLen; + int32_t c = 0; + float_t f1,f2,r1,r2; + int32_t i1,i2; + const TCHAR *s1, *s2; + + for (int32_t i=0; igetType(); + if (fields[i]->getReverse()) { + switch (type) { + case SortField::DOCSCORE: + r1 = reinterpret_cast(docA->fields[i])->getValue(); + r2 = reinterpret_cast(docB->fields[i])->getValue(); + if (r1 < r2) c = -1; + if (r1 > r2) c = 1; + break; + case SortField::DOC: + case SortField::INT: + i1 = reinterpret_cast(docA->fields[i])->getValue(); + i2 = reinterpret_cast(docB->fields[i])->getValue(); + if (i1 > i2) c = -1; + if (i1 < i2) c = 1; + break; + case SortField::STRING: + s1 = reinterpret_cast(docA->fields[i])->getValue(); + s2 = reinterpret_cast(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(docA->fields[i])->getValue(); + f2 = reinterpret_cast(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 (float_t or + // Integer), we don't necessarily know how to compare them (both SCORE and + // float_t 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(docA->fields[i])->getValue(); + r2 = reinterpret_cast(docB->fields[i])->getValue(); + if (r1 > r2) c = -1; + if (r1 < r2) c = 1; + break; + case SortField::DOC: + case SortField::INT: + i1 = reinterpret_cast(docA->fields[i])->getValue(); + i2 = reinterpret_cast(docB->fields[i])->getValue(); + if (i1 < i2) c = -1; + if (i1 > i2) c = 1; + break; + case SortField::STRING: + s1 = reinterpret_cast(docA->fields[i])->getValue(); + s2 = reinterpret_cast(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(docA->fields[i])->getValue(); + f2 = reinterpret_cast(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 (float_t or + // Integer), we don't necessarily know how to compare them (both SCORE and + // float_t 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/Pods/BRCLucene/src/core/CLucene/search/FieldSortedHitQueue.cpp b/Pods/BRCLucene/src/core/CLucene/search/FieldSortedHitQueue.cpp new file mode 100644 index 0000000..ef6100c --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/FieldSortedHitQueue.cpp @@ -0,0 +1,258 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "FieldSortedHitQueue.h" +#include "_FieldDocSortedHitQueue.h" +#include "_FieldCacheImpl.h" +#include "Compare.h" +#include "CLucene/index/IndexReader.h" + +CL_NS_USE(util) +CL_NS_USE(index) +CL_NS_DEF(search) + + +//note: typename gets too long if using cacheReaderType as a typename +class hitqueueCacheType: public CL_NS(util)::CLHashMap, + CL_NS(util)::Equals::Void, + CL_NS(util)::Deletor::Object, + CL_NS(util)::Deletor::Object >{ +public: + hitqueueCacheType(bool deleteKey, bool deleteValue){ + setDeleteKey(deleteKey); + setDeleteValue(deleteValue); + } + ~hitqueueCacheType(){ + clear(); + } +}; + + +///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, + CL_NS(util)::Deletor::Object >{ + +public: + hitqueueCacheReaderType(bool deleteValue){ + setDeleteKey(true); + setDeleteValue(deleteValue); + } + ~hitqueueCacheReaderType(){ + clear(); + } +}; + +hitqueueCacheType* FieldSortedHitQueue::Comparators = _CLNEW hitqueueCacheType(false,true); +DEFINE_MUTEX(FieldSortedHitQueue::Comparators_LOCK) + +void FieldSortedHitQueue::_shutdown(){ + Comparators->clear(); + _CLDELETE(Comparators); +} + +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; igetField(); + //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 && igetReverse()) ? 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); + 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); + 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); + 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); + 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; isortValue(&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_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_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_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/Pods/BRCLucene/src/core/CLucene/search/FieldSortedHitQueue.h b/Pods/BRCLucene/src/core/CLucene/search/FieldSortedHitQueue.h new file mode 100644 index 0000000..4a82762 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/FieldSortedHitQueue.h @@ -0,0 +1,196 @@ +/*------------------------------------------------------------------------------ +* 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_ + + +CL_CLASS_DEF(search,FieldDoc) +CL_CLASS_DEF(search,SortComparatorSource) +CL_CLASS_DEF(search,SortField) +#include "FieldDoc.h" //required to expose destructor +#include "CLucene/util/PriorityQueue.h" +#include "CLucene/util/Equators.h" +#include "CLucene/LuceneThreads.h" + +CL_CLASS_DEF(index,IndexReader) + +CL_NS_DEF(search) + +class hitqueueCacheReaderType; +class hitqueueCacheType; +class ScoreDocComparator; + +/** + * Expert: A hit queue for sorting by hits by terms in more than one field. + * Uses FieldCache.DEFAULT for maintaining internal term lookup tables. + * + * @see Searchable#search(Query,Filter,int32_t,Sort) + * @see FieldCache + */ +class CLUCENE_EXPORT FieldSortedHitQueue: public CL_NS(util)::PriorityQueue > { + +public: //todo: remove this and below after close callback is implemented + + /** Internal cache of comparators. Similar to FieldCache, only + * caches comparators instead of term values. + */ + static hitqueueCacheType* Comparators; + STATIC_DEFINE_MUTEX(Comparators_LOCK) + + /** Cleanup static data */ + static CLUCENE_LOCAL void _shutdown(); +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. */ + float_t maxscore; + + /** + * Returns whether a is less relevant than b. + * @param a ScoreDoc + * @param b ScoreDoc + * @return true if document a should be sorted after document b. + */ + 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 null 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/Pods/BRCLucene/src/core/CLucene/search/Filter.h b/Pods/BRCLucene/src/core/CLucene/search/Filter.h new file mode 100644 index 0000000..a2c35fc --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/Filter.h @@ -0,0 +1,42 @@ +/*------------------------------------------------------------------------------ +* 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_ + +CL_CLASS_DEF(util,BitSet) +CL_CLASS_DEF(index,IndexReader) + +CL_NS_DEF(search) + // Abstract base class providing a mechanism to restrict searches to a subset + // of an index. + class CLUCENE_EXPORT 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 see {@link #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*) 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/Pods/BRCLucene/src/core/CLucene/search/FilteredTermEnum.cpp b/Pods/BRCLucene/src/core/CLucene/search/FilteredTermEnum.cpp new file mode 100644 index 0000000..9ac7f31 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/FilteredTermEnum.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. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "FilteredTermEnum.h" +#include "CLucene/index/Term.h" + +CL_NS_USE(index) +CL_NS_DEF(search) + + +FilteredTermEnum::FilteredTermEnum():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(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"); + + _CLLDELETE(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/Pods/BRCLucene/src/core/CLucene/search/FilteredTermEnum.h b/Pods/BRCLucene/src/core/CLucene/search/FilteredTermEnum.h new file mode 100644 index 0000000..39385df --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/FilteredTermEnum.h @@ -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. +------------------------------------------------------------------------------*/ +#ifndef _lucene_search_FilteredTermEnum_ +#define _lucene_search_FilteredTermEnum_ + + +CL_CLASS_DEF(index,Term) +#include "CLucene/index/Terms.h" + +CL_NS_DEF(search) +/** 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 CLUCENE_EXPORT FilteredTermEnum: public CL_NS(index)::TermEnum { +public: + FilteredTermEnum(); + virtual ~FilteredTermEnum(); + + /** Equality measure on the term */ + virtual float_t difference() = 0; + + /** + * Returns the docFreq of the current Term in the enumeration. + * Returns -1 if no Term matches or all terms have been enumerated. + */ + int32_t docFreq() const; + + /** Increments the enumeration to the next element. True if one exists. */ + bool next() ; + + /** Returns the current Term in the enumeration. + * Returns null if no Term matches or all terms have been enumerated. */ + CL_NS(index)::Term* term(bool pointer=true); + + /** 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; + + /** Indicates 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/Pods/BRCLucene/src/core/CLucene/search/FuzzyQuery.cpp b/Pods/BRCLucene/src/core/CLucene/search/FuzzyQuery.cpp new file mode 100644 index 0000000..16071a0 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/FuzzyQuery.cpp @@ -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. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "CLucene/index/Term.h" +#include "CLucene/index/IndexReader.h" +#include "Similarity.h" +#include "FuzzyQuery.h" +#include "BooleanQuery.h" +#include "BooleanClause.h" +#include "TermQuery.h" + +#include "CLucene/util/StringBuffer.h" +#include "CLucene/util/PriorityQueue.h" + +CL_NS_USE(index) +CL_NS_USE(util) +CL_NS_DEF(search) + + +/** 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; + + + FuzzyTermEnum::FuzzyTermEnum(IndexReader* reader, Term* term, float_t minSimilarity, size_t _prefixLength): + FilteredTermEnum(),d(NULL),dLen(0),_similarity(0),_endEnum(false),searchTerm(_CL_POINTER(term)), + text(NULL),textLen(0),prefix(NULL)/* ISH: was STRDUP_TtoT(LUCENE_BLANK_STRING)*/,prefixLength(0), + minimumSimilarity(minSimilarity) + { + CND_PRECONDITION(term != NULL,"term is NULL"); + + if (minSimilarity >= 1.0f) + _CLTHROWA(CL_ERR_IllegalArgument,"minimumSimilarity cannot be greater than or equal to 1"); + else if (minSimilarity < 0.0f) + _CLTHROWA(CL_ERR_IllegalArgument,"minimumSimilarity cannot be less than 0"); + + scale_factor = 1.0f / (1.0f - minimumSimilarity); // only now we are safe from a division by zero + //TODO: this.field = searchTerm.field(); + + //The prefix could be longer than the word. + //It's kind of silly though. It means we must match the entire word. + const size_t fullSearchTermLength = searchTerm->textLength(); + const size_t realPrefixLength = _prefixLength > fullSearchTermLength ? fullSearchTermLength : _prefixLength; + + text = STRDUP_TtoT(searchTerm->text() + realPrefixLength); + textLen = fullSearchTermLength - realPrefixLength; + + prefix = _CL_NEWARRAY(TCHAR,realPrefixLength+1); + _tcsncpy(prefix, searchTerm->text(), realPrefixLength); + prefix[realPrefixLength]='\0'; + prefixLength = realPrefixLength; + + initializeMaxDistances(); + + Term* trm = _CLNEW Term(searchTerm->field(), prefix); // _CLNEW Term(term, prefix); -- not intern'd? + setEnum(reader->terms(trm)); + _CLLDECDELETE(trm); + + + /* LEGACY: + //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'; + } + */ + } + + FuzzyTermEnum::~FuzzyTermEnum(){ + close(); + } + + const char* FuzzyTermEnum::getObjectName() const{ return getClassName(); } + const char* FuzzyTermEnum::getClassName(){ return "FuzzyTermEnum"; } + + bool FuzzyTermEnum::endEnum() { + return _endEnum; + } + + void FuzzyTermEnum::close(){ + + FilteredTermEnum::close(); + + //Finalize the searchTerm + _CLDECDELETE(searchTerm); + + free(d); + d=NULL; + + _CLDELETE_CARRAY(text); + + _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(); + const 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; + const size_t targetLen = termTextLen-prefixLength; + _similarity = similarity(target, targetLen); + return (_similarity > minimumSimilarity); + } + _endEnum = true; + return false; + } + + float_t FuzzyTermEnum::difference() { + return (float_t)((_similarity - minimumSimilarity) * scale_factor ); + } + + // TODO: had synchronized in definition + float_t FuzzyTermEnum::similarity(const TCHAR* target, const size_t m) { + const size_t n = textLen; // TODO: remove after replacing n with textLen + if (n == 0) { + //we don't have anything to compare. That means if we just add + //the letters for m we get the new word + return prefixLength == 0 ? 0.0f : 1.0f - ((float_t) m / prefixLength); + } + if (m == 0) { + return prefixLength == 0 ? 0.0f : 1.0f - ((float_t) n / prefixLength); + } + + const uint32_t maxDistance = getMaxDistance(m); + + if ( maxDistance < (uint32_t)(abs((int32_t)(m-n))) ) { + //just adding the characters of m to n or vice-versa results in + //too many edits + //for example "pre" length is 3 and "prefixes" length is 8. We can see that + //given this optimal circumstance, the edit distance cannot be less than 5. + //which is 8-3 or more precisesly Math.abs(3-8). + //if our maximum edit distance is 4, then we can discard this word + //without looking at it. + return 0.0f; + } + + //let's make sure we have enough room in our array to do the distance calculations. + //Check if the array must be reallocated because it is too small or does not exist + size_t dWidth = n+1; + size_t dHeight = m+1; + if (d == NULL){ + dLen = dWidth*dHeight; + d = (int32_t*)(malloc(sizeof(int32_t)*dLen)); + } else if (dLen < dWidth*dHeight) { + dLen = dWidth*dHeight; + d = (int32_t*)(realloc(d, sizeof(int32_t)*dLen)); + } + memset(d,0,dLen); + + size_t i; // iterates through the source string + size_t j; // iterates through the target string + + // init matrix d + for (i = 0; i <= n; i++){ + d[i + (0*dWidth)] = i; + } + for (j = 0; j <= m; j++){ + d[0 + (j*dWidth)] = j; + } + + int32_t __t; //temporary variable for min3 + + // start computing edit distance + TCHAR s_i; // ith character of s + for (i = 1; i <= n; i++) { + size_t bestPossibleEditDistance = m; + s_i = text[i - 1]; + for (j = 1; j <= m; j++) { + if (s_i != target[j-1]) { + min3(d[i-1 + (j*dWidth)], d[i + ((j-1)*dWidth)], d[i-1 + ((j-1)*dWidth)]); + d[i + (j*dWidth)] = __t+1; + } + else { + min3(d[i-1 + (j*dWidth)]+1, d[i + ((j-1)*dWidth)]+1, d[i-1 + ((j-1)*dWidth)]); + d[i + (j*dWidth)] = __t; + } + bestPossibleEditDistance = cl_min(bestPossibleEditDistance, d[i + (j*dWidth)]); + } + + //After calculating row i, the best possible edit distance + //can be found by finding the smallest value in a given column. + //If the bestPossibleEditDistance is greater than the max distance, abort. + + if (i > maxDistance && bestPossibleEditDistance > maxDistance) { //equal is okay, but not greater + //the closest the target can be to the text is just too far away. + //this target is leaving the party early. + return 0.0f; + } + } + + // this will return less than 0.0 when the edit distance is + // greater than the number of characters in the shorter word. + // but this was the formula that was previously used in FuzzyTermEnum, + // so it has not been changed (even though minimumSimilarity must be + // greater than 0.0) + return 1.0f - ((float_t)d[n + m*dWidth] / (float_t) (prefixLength + cl_min(n, m))); + } + + int32_t FuzzyTermEnum::getMaxDistance(const size_t m) { + return (m < LUCENE_TYPICAL_LONGEST_WORD_IN_INDEX) ? maxDistances[m] : calculateMaxDistance(m); + } + + void FuzzyTermEnum::initializeMaxDistances() { + for (int32_t i = 0; i < LUCENE_TYPICAL_LONGEST_WORD_IN_INDEX; i++) { + maxDistances[i] = calculateMaxDistance(i); + } + } + + int32_t FuzzyTermEnum::calculateMaxDistance(const size_t m) const { + return (int32_t) ((1-minimumSimilarity) * (cl_min(textLen, m) + prefixLength)); + } + + // TODO: Make ScoreTerm and ScoreTermQueue reside under FuzzyQuery + class ScoreTerm { + public: + Term* term; + float_t score; + + ScoreTerm(Term* _term, float_t _score):term(_term),score(_score){ + } + virtual ~ScoreTerm(){ + _CLLDECDELETE(term); + } + }; + + class ScoreTermQueue : public PriorityQueue > { + public: + ScoreTermQueue(int32_t size){ + initialize(size, true); + } + virtual ~ScoreTermQueue(){ + } + + protected: + bool lessThan(ScoreTerm* termA, ScoreTerm* termB) { + if (termA->score == termB->score) + return termA->term->compareTo(termB->term) > 0; + else + return termA->score < termB->score; + } + }; + + + FuzzyQuery::FuzzyQuery(Term* term, float_t _minimumSimilarity, size_t _prefixLength): + MultiTermQuery(term), + minimumSimilarity(_minimumSimilarity), + prefixLength(_prefixLength) + { + if ( minimumSimilarity < 0 ) + minimumSimilarity = defaultMinSimilarity; + + 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"); + } + + float_t FuzzyQuery::defaultMinSimilarity = 0.5f; + int32_t FuzzyQuery::defaultPrefixLength = 0; + + FuzzyQuery::~FuzzyQuery(){ + } + + float_t FuzzyQuery::getMinSimilarity() const { + return minimumSimilarity; + } + + size_t FuzzyQuery::getPrefixLength() const { + return prefixLength; + } + + TCHAR* FuzzyQuery::toString(const TCHAR* field) const{ + StringBuffer buffer(100); // TODO: Have a better estimation for the initial buffer length + Term* term = getTerm(false); // no need to increase ref count + if ( field==NULL || _tcscmp(term->field(),field)!=0 ) { + buffer.append(term->field()); + buffer.appendChar( _T(':')); + } + buffer.append(term->text()); + buffer.appendChar( _T('~') ); + buffer.appendFloat(minimumSimilarity,1); + buffer.appendBoost(getBoost()); + return buffer.giveBuffer(); + } + + const char* FuzzyQuery::getObjectName() const{ + //Func - Returns the name of the query + //Pre - true + //post - The string FuzzyQuery has been returned + + return getClassName(); + } + const char* FuzzyQuery::getClassName(){ + //Func - Returns the name of the query + //Pre - true + //post - The string FuzzyQuery has been returned + + return "FuzzyQuery"; + } + + 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 + // TODO: does not conform with JL + 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 (this == other) return true; + if (!(other->instanceOf(FuzzyQuery::getClassName()))) + return false; + + FuzzyQuery* fq = static_cast(other); + return (this->getBoost() == fq->getBoost()) + && this->minimumSimilarity == fq->getMinSimilarity() + && this->prefixLength == fq->getPrefixLength() + && getTerm()->equals(fq->getTerm()); + } + + FilteredTermEnum* FuzzyQuery::getEnum(IndexReader* reader){ + Term* term = getTerm(false); + FuzzyTermEnum* ret = _CLNEW FuzzyTermEnum(reader, term, minimumSimilarity, prefixLength); + return ret; + } + + Query* FuzzyQuery::rewrite(IndexReader* reader) { + FilteredTermEnum* enumerator = getEnum(reader); + const size_t maxClauseCount = BooleanQuery::getMaxClauseCount(); + ScoreTermQueue* stQueue = _CLNEW ScoreTermQueue(maxClauseCount); + ScoreTerm* reusableST = NULL; + + try { + do { + float_t score = 0.0f; + Term* t = enumerator->term(); + if (t != NULL) { + score = enumerator->difference(); + if (reusableST == NULL) { + reusableST = _CLNEW ScoreTerm(t, score); + } else if (score >= reusableST->score) { + // reusableST holds the last "rejected" entry, so, if + // this new score is not better than that, there's no + // need to try inserting it + reusableST->score = score; + reusableST->term = t; + } else { + continue; + } + + reusableST = stQueue->insertWithOverflow(reusableST); + } + } while (enumerator->next()); + } _CLFINALLY({ + enumerator->close(); + _CLLDELETE(enumerator); + //_CLLDELETE(reusableST); + }); + + BooleanQuery* query = _CLNEW BooleanQuery(true); + const size_t size = stQueue->size(); + for(size_t i = 0; i < size; i++){ + ScoreTerm* st = stQueue->pop(); + TermQuery* tq = _CLNEW TermQuery(st->term); // found a match + tq->setBoost(getBoost() * st->score); // set the boost + query->add(tq, true, BooleanClause::SHOULD); // add to query + _CLLDELETE(st); + } + _CLLDELETE(stQueue); + + return query; + } + + +CL_NS_END diff --git a/Pods/BRCLucene/src/core/CLucene/search/FuzzyQuery.h b/Pods/BRCLucene/src/core/CLucene/search/FuzzyQuery.h new file mode 100644 index 0000000..9c8a58a --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/FuzzyQuery.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_search_FuzzyQuery_ +#define _lucene_search_FuzzyQuery_ + +#include "MultiTermQuery.h" +#include "FilteredTermEnum.h" + +CL_CLASS_DEF(index,Term) + +CL_NS_DEF(search) + +/** Implements the fuzzy search query. The similiarity measurement +* is based on the Levenshtein (edit distance) algorithm. +*/ +class CLUCENE_EXPORT FuzzyQuery : public MultiTermQuery { +private: + float_t minimumSimilarity; + size_t prefixLength; +protected: + FuzzyQuery(const FuzzyQuery& clone); +public: + static float_t defaultMinSimilarity; + static int32_t defaultPrefixLength; + + /** + * Create a new FuzzyQuery that will match terms with a similarity + * of at least minimumSimilarity to term. + * If a prefixLength > 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 + * minimumSimilarity of 0.5 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 length(term)*0.5 + * @param prefixLength length of common (non-fuzzy) prefix + * @throws IllegalArgumentException if minimumSimilarity is > 1 or < 0 + * or if prefixLength < 0 or > term.text().length(). + */ + FuzzyQuery(CL_NS(index)::Term* term, float_t minimumSimilarity=-1, size_t prefixLength=0); + virtual ~FuzzyQuery(); + + /** + * Returns the minimum similarity that is required for this query to match. + * @return float value between 0.0 and 1.0 + */ + float_t 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; + + Query* rewrite(CL_NS(index)::IndexReader* reader); + + TCHAR* toString(const TCHAR* field) const; + + //Returns the name "FuzzyQuery" + static const char* getClassName(); + const char* getObjectName() const; + + Query* clone() const; + bool equals(Query * other) const; + size_t hashCode() const; + +protected: + FilteredTermEnum* getEnum(CL_NS(index)::IndexReader* reader); +}; + +/** 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 CLUCENE_EXPORT FuzzyTermEnum: public FilteredTermEnum { +private: + /* Allows us save time required to create a new array + * everytime similarity is called. + */ + int32_t* d; + size_t dLen; + + //float_t distance; + float_t _similarity; + bool _endEnum; + + CL_NS(index)::Term* searchTerm; + //String field; + TCHAR* text; + size_t textLen; + TCHAR* prefix; + size_t prefixLength; + + float_t minimumSimilarity; + double scale_factor; + int32_t maxDistances[LUCENE_TYPICAL_LONGEST_WORD_IN_INDEX]; + + /****************************** + * Compute Levenshtein distance + ******************************/ + + /** + *

Similarity returns a number that is 1.0f or less (including negative numbers) + * based on how similar the Term is compared to a target term. It returns + * exactly 0.0f when + *

+	*    editDistance < maximumEditDistance
+ * Otherwise it returns: + *
+	*    1 - (editDistance / length)
+ * where length is the length of the shortest term (text or target) including a + * prefix that are identical and editDistance is the Levenshtein distance for + * the two words.

+ * + *

Embedded within this algorithm is a fail-fast Levenshtein distance + * algorithm. The fail-fast algorithm differs from the standard Levenshtein + * distance algorithm in that it is aborted if it is discovered that the + * mimimum distance between the words is greater than some threshold. + * + *

To calculate the maximum distance threshold we use the following formula: + *

+	*     (1 - minimumSimilarity) * length
+ * where length is the shortest term including any prefix that is not part of the + * similarity comparision. This formula was derived by solving for what maximum value + * of distance returns false for the following statements: + *
+	*   similarity = 1 - ((float)distance / (float) (prefixLength + Math.min(textlen, targetlen)));
+	*   return (similarity > minimumSimilarity);
+ * where distance is the Levenshtein distance for the two words. + *

+ *

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. + * @param target the target word or phrase + * @return the similarity, 0.0 or less indicates that it matches less than the required + * threshold and 1.0 indicates that the text and target are identical + */ + float_t similarity(const TCHAR* target, const size_t targetLen); + + /** + * The max Distance is the maximum Levenshtein distance for the text + * compared to some other value that results in score that is + * better than the minimum similarity. + * @param m the length of the "other value" + * @return the maximum levenshtein distance that we care about + */ + int32_t getMaxDistance(const size_t m); + + void initializeMaxDistances(); + + int32_t calculateMaxDistance(const size_t m) const; + +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: + + /** + * Constructor for enumeration of all terms from specified reader which share a prefix of + * length prefixLength with term and which have a fuzzy similarity > + * minSimilarity. + *

+ * After calling the constructor the enumeration is already pointing to the first + * valid term if such a term exists. + * + * @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(CL_NS(index)::IndexReader* reader, CL_NS(index)::Term* term, float_t minSimilarity=FuzzyQuery::defaultMinSimilarity, size_t prefixLength=0); + virtual ~FuzzyTermEnum(); + + /** Close the enumeration */ + void close(); + + /** Returns the difference between the distance and the fuzzy threshold + * multiplied by the scale factor + */ + float_t difference(); + + const char* getObjectName() const; + static const char* getClassName(); +}; + +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/search/HitQueue.cpp b/Pods/BRCLucene/src/core/CLucene/search/HitQueue.cpp new file mode 100644 index 0000000..0d4191b --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/HitQueue.cpp @@ -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. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "SearchHeader.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 = new ScoreDoc[heapSize]; +} +HitQueue::~HitQueue(){ + delete [] 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/Pods/BRCLucene/src/core/CLucene/search/Hits.cpp b/Pods/BRCLucene/src/core/CLucene/search/Hits.cpp new file mode 100644 index 0000000..3fe3de9 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/Hits.cpp @@ -0,0 +1,218 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "Hits.h" +#include "SearchHeader.h" +#include "CLucene/document/Document.h" +#include "CLucene/index/IndexReader.h" +#include "Filter.h" +#include "CLucene/search/SearchHeader.h" +#include "CLucene/search/IndexSearcher.h" + +CL_NS_USE(document) +CL_NS_USE(util) +CL_NS_USE(index) + +CL_NS_DEF(search) + + + + HitDoc::HitDoc(const float_t 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 + + _CLLDELETE(doc); + } + + + Hits::Hits(Searcher* s, Query* q, Filter* f, const Sort* _sort): + query(q), searcher(s), filter(f), sort(_sort) , _length(0), first(NULL), last(NULL), + numDocs(0), maxDocs(200), nDeletedHits(0), debugCheckedForDeletions(false) + { + //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 + + hitDocs = _CLNEW CL_NS(util)::CLVector >; + nDeletions = countDeletions(s); + + //retrieve 100 initially + getMoreDocs(50); + + _lengthAtStart = _length; + } + + Hits::~Hits(){ + _CLLDELETE(hitDocs); + } + + // count # deletions, return -1 if unknown. + int32_t Hits::countDeletions(CL_NS(search)::Searcher* s) { + int32_t cnt = -1; + if ( s->getObjectName() == IndexSearcher::getClassName() ) { + cnt = s->maxDoc() - static_cast(s)->getReader()->numDocs(); + } + return cnt; + } + + size_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 + + _CLLDELETE( 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; + } + + float_t Hits::score(const int32_t n){ + return getHitDoc(n)->score; + } + + void Hits::getMoreDocs(const size_t m){ + size_t _min = m; + if ( hitDocs->size() > _min) + _min = hitDocs->size(); + + 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; + size_t scoreDocsLength = topDocs->scoreDocsLength; + + float_t 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 start = hitDocs->size() - nDeletedHits; + + // any new deletions? + int32_t nDels2 = countDeletions(searcher); + debugCheckedForDeletions = false; + if (nDeletions < 0 || nDels2 > nDeletions) { + // either we cannot count deletions, or some "previously valid hits" might have been deleted, so find exact start point + nDeletedHits = 0; + debugCheckedForDeletions = true; + size_t i2 = 0; + for (size_t i1=0; i1size() && i2 < scoreDocsLength; i1++) { + int32_t id1 = ((*hitDocs)[i1])->id; + int32_t id2 = scoreDocs[i2].doc; + if (id1 == id2) { + i2++; + } else { + nDeletedHits++; + } + } + start = i2; + } + + size_t end = scoreDocsLength < _length ? scoreDocsLength : _length; + _length += nDeletedHits; + for (size_t i = start; i < end; i++) { + hitDocs->push_back(_CLNEW HitDoc(scoreDocs[i].score * scoreNorm, scoreDocs[i].doc)); + } + + nDeletions = nDels2; + } + + _CLDELETE(topDocs); + } + + HitDoc* Hits::getHitDoc(const size_t n){ + if (n >= _lengthAtStart){ + TCHAR buf[100]; + _sntprintf(buf, 100,_T("Not a valid hit number: %d"), (int)n); + _CLTHROWT(CL_ERR_IndexOutOfBounds, buf ); + } + if (n >= hitDocs->size()) + getMoreDocs(n); + + if (n >= _length) { + TCHAR buf[100]; + _sntprintf(buf, 100,_T("Not a valid hit number: %d"), (int)n); + _CLTHROWT(CL_ERR_ConcurrentModification, buf ); + } + + 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/Pods/BRCLucene/src/core/CLucene/search/Hits.h b/Pods/BRCLucene/src/core/CLucene/search/Hits.h new file mode 100644 index 0000000..7dfb85b --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/Hits.h @@ -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. +------------------------------------------------------------------------------*/ +#ifndef _lucene_search_Hits_h +#define _lucene_search_Hits_h + +#include "CLucene/util/VoidList.h" +CL_CLASS_DEF(index,Term) +CL_CLASS_DEF(document,Document) + +CL_NS_DEF(search) + + class Query; + class Searcher; + class Filter; + class HitDoc; + class Sort; + + /** A ranked list of documents, used to hold search results. + *

+ * Caution: Iterate only over the hits needed. Iterating over all + * hits is generally not desirable and may be the source of + * performance issues. If you need to iterate over many or all hits, consider + * using the search method that takes a {@link HitCollector}. + *

+ *

Note: Deleting matching documents concurrently with traversing + * the hits, might, when deleting hits that were not yet retrieved, decrease + * {@link #length()}. In such case, + * {@link java.util.ConcurrentModificationException ConcurrentModificationException} + * is thrown when accessing hit n ≥ current_{@link #length()} + * (but n < {@link #length()}_at_start). + */ + class CLUCENE_EXPORT Hits { + private: + Query* query; + Searcher* searcher; + Filter* filter; + const Sort* sort; + + size_t _length; // the total number of hits + CL_NS(util)::CLVector >* 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 + + int32_t nDeletions; // # deleted docs in the index. + size_t _lengthAtStart; // this is the number apps usually count on (although deletions can bring it down). + int32_t nDeletedHits; // # of already collected hits that were meanwhile deleted. + + bool debugCheckedForDeletions; // for test purposes. + + /** + * Tries to add new documents to hitDocs. + * Ensures that the hit numbered _min has been retrieved. + */ + void getMoreDocs(const size_t _min); + + /** Returns the score for the nth document in this set. */ + HitDoc* getHitDoc(const size_t n); + + void addToFront(HitDoc* hitDoc); + + void remove(const HitDoc* hitDoc); + + public: + Hits(Searcher* s, Query* q, Filter* f, const Sort* sort=NULL); + virtual ~Hits(); + + /** Returns the total number of hits available in this set. */ + size_t length() const; + + /** Returns the stored fields of the nth document in this set. + *

Documents are cached, so that repeated requests for the same element may + * return the same Document object. + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + * + * @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. + * Note that ids may change when the index changes, so you cannot + * rely on the id to be stable. + */ + int32_t id (const int32_t n); + + /** Returns the score for the nth document in this set. */ + float_t score(const int32_t n); + + /** count # deletions, return -1 if unknown. */ + int32_t countDeletions(CL_NS(search)::Searcher* s); + }; + +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/search/IndexSearcher.cpp b/Pods/BRCLucene/src/core/CLucene/search/IndexSearcher.cpp new file mode 100644 index 0000000..04dbbe1 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/IndexSearcher.cpp @@ -0,0 +1,385 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "IndexSearcher.h" + +#include "SearchHeader.h" +#include "Scorer.h" +#include "_HitQueue.h" +#include "Query.h" +#include "Filter.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" +#include "Explanation.h" + +CL_NS_USE(index) +CL_NS_USE(util) +CL_NS_USE(document) + +CL_NS_DEF(search) + + class SimpleTopDocsCollector:public HitCollector{ + private: + float_t 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 float_t ms=-1.0f): + minScore(ms), + bits(bs), + hq(hitQueue), + nDocs(ndocs), + totalHits(totalhits) + { + } + ~SimpleTopDocsCollector(){} + void collect(const int32_t doc, const float_t 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 float_t score){ + if (score > 0.0f && // ignore zeroed buckets + (bits==NULL || bits->get(doc))) { // skip docs not in bits + ++totalHits[0]; + FieldDoc* fd = _CLNEW FieldDoc(doc, score); //todo: see jlucene way... with fields def??? + 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 float_t score){ + if (bits->get(doc)) { // skip docs not in bits + results->collect(doc, score); + } + } + }; + + + IndexSearcher::IndexSearcher(const char* 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 != NULL, "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); + } + + _CL_DEPRECATED( doc(i, document) ) CL_NS(document)::Document* IndexSearcher::doc(int32_t i){ + CL_NS(document)::Document* ret = _CLNEW CL_NS(document)::Document; + if (!doc(i,ret) ) + _CLDELETE(ret); + return ret; + } + + // 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); + } + 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(); + } + + //todo: find out why we are passing Query* and not Weight*, as Weight is being extracted anyway from Query* + 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) { + Query* wq = weight->getQuery(); + if (wq != query) + _CLLDELETE(wq); + _CLLDELETE(weight); + 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 = new 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); + _CLLDELETE(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); + _CLLDELETE(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) ) + _CLLDELETE(bits); + _CLDELETE_LARRAY(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); + } + + _CLLDELETE(fc); + Query* wq = weight->getQuery(); + if (wq != query) // query was rewritten + _CLLDELETE(wq); + _CLLDELETE(weight); + if ( bits != NULL && filter->shouldDeleteBitSet(bits) ) + _CLLDELETE(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 ){ + _CLLDELETE(last); + } + last = query; + } + return query; + } + + void IndexSearcher::explain(Query* query, int32_t doc, Explanation* ret){ + Weight* weight = query->weight(this); + ret->addDetail(weight->explain(reader, doc)); // TODO: A hack until this function will return Explanation* as well + + Query* wq = weight->getQuery(); + if ( query != wq ) //query was re-written + _CLLDELETE(wq); + _CLDELETE(weight); + } + + CL_NS(index)::IndexReader* IndexSearcher::getReader(){ + return reader; + } + + const char* IndexSearcher::getClassName(){ + return "IndexSearcher"; + } + const char* IndexSearcher::getObjectName() const{ + return IndexSearcher::getClassName(); + } + +CL_NS_END diff --git a/Pods/BRCLucene/src/core/CLucene/search/IndexSearcher.h b/Pods/BRCLucene/src/core/CLucene/search/IndexSearcher.h new file mode 100644 index 0000000..4f267c9 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/IndexSearcher.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_IndexSearcher_ +#define _lucene_search_IndexSearcher_ + + +#include "Searchable.h" +CL_CLASS_DEF(store,Directory) +CL_CLASS_DEF(document,Document) +CL_CLASS_DEF(index,Term) +CL_CLASS_DEF(search,TopDocs) +CL_CLASS_DEF(search,TopFieldDocs) +CL_CLASS_DEF(search,Query) +CL_CLASS_DEF(search,Filter) +CL_CLASS_DEF(search,Sort) +CL_CLASS_DEF(search,HitCollector) +CL_CLASS_DEF(search,Explanation) +CL_CLASS_DEF(index,IndexReader) +//#include "CLucene/index/IndexReader.h" +//#include "CLucene/util/BitSet.h" +//#include "HitQueue.h" +//#include "FieldSortedHitQueue.h" + +CL_NS_DEF(search) +/** Implements search over a single IndexReader. +* +*

Applications usually need only call the inherited {@link search(Query*)} +* or {@link search(Query*,Filter*)} methods. +*/ +class CLUCENE_EXPORT IndexSearcher:public Searcher{ + CL_NS(index)::IndexReader* reader; + bool readerOwner; + +public: + /** Creates a searcher searching the index in the named directory. + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + IndexSearcher(const char* path); + + /** Creates a searcher searching the index in the provided directory. + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + IndexSearcher(CL_NS(store)::Directory* directory); + + /** Creates a searcher searching the provided index. */ + IndexSearcher(CL_NS(index)::IndexReader* r); + + ~IndexSearcher(); + + /** + * Note that the underlying IndexReader is not closed, if + * IndexSearcher was constructed with IndexSearcher(IndexReader r). + * If the IndexReader was supplied implicitly by specifying a directory, then + * the IndexReader gets closed. + */ + void close(); + + int32_t docFreq(const CL_NS(index)::Term* term) const; + + bool doc(int32_t i, CL_NS(document)::Document& document); + bool doc(int32_t i, CL_NS(document)::Document* document); + _CL_DEPRECATED( doc(i, document) ) CL_NS(document)::Document* doc(int32_t i); + + 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(); + + Query* rewrite(Query* original); + void explain(Query* query, int32_t doc, Explanation* ret); + + virtual const char* getObjectName() const; + static const char* getClassName(); +}; +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/search/MatchAllDocsQuery.cpp b/Pods/BRCLucene/src/core/CLucene/search/MatchAllDocsQuery.cpp new file mode 100644 index 0000000..79f194a --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/MatchAllDocsQuery.cpp @@ -0,0 +1,201 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "Query.h" +#include "MatchAllDocsQuery.h" +#include "Explanation.h" +#include "SearchHeader.h" +#include "Searchable.h" + +#include "CLucene/index/IndexReader.h" +#include "CLucene/util/StringBuffer.h" + +CL_NS_DEF(search) + +class MatchAllDocsQuery::MatchAllDocsWeight : public Weight { +private: + Similarity* similarity; + float_t queryWeight; + float_t queryNorm; + MatchAllDocsQuery* parentQuery; + +public: + MatchAllDocsWeight(MatchAllDocsQuery* enclosingInstance, Searcher* searcher); + virtual ~MatchAllDocsWeight(){} + + virtual TCHAR* toString(); + + Query* getQuery(); + + float_t getValue(); + + float_t sumOfSquaredWeights(); + + void normalize(float_t _queryNorm); + + Scorer* scorer(CL_NS(index)::IndexReader* reader); + + Explanation* explain(CL_NS(index)::IndexReader* reader, int32_t doc); +}; + +class MatchAllDocsQuery::MatchAllScorer : public Scorer { + CL_NS(index)::IndexReader* reader; + int32_t id; + int32_t maxId; + float_t _score; + +public: + MatchAllScorer(CL_NS(index)::IndexReader* _reader, Similarity* similarity, Weight* w); + virtual ~MatchAllScorer(){} + + Explanation* explain(int32_t doc); + + int32_t doc() const; + + bool next(); + + float_t score(); + + bool skipTo(int32_t target); + + virtual TCHAR* toString(); +}; + +MatchAllDocsQuery::MatchAllScorer::MatchAllScorer(CL_NS(index)::IndexReader* _reader, Similarity* similarity, Weight* w) + :Scorer(similarity),reader(_reader),id(-1) +{ + maxId = reader->maxDoc() - 1; + _score = w->getValue(); +} + +Explanation* MatchAllDocsQuery::MatchAllScorer::explain(int32_t doc) { + // not called... see MatchAllDocsWeight::explain() + return NULL; +} + +int32_t MatchAllDocsQuery::MatchAllScorer::doc() const { + return id; +} + +bool MatchAllDocsQuery::MatchAllScorer::next() { + while (id < maxId) { + id++; + if (!reader->isDeleted(id)) { + return true; + } + } + return false; +} + +float_t MatchAllDocsQuery::MatchAllScorer::score() { + return _score; +} + +bool MatchAllDocsQuery::MatchAllScorer::skipTo(int32_t target) { + id = target - 1; + return next(); +} + +TCHAR* MatchAllDocsQuery::MatchAllScorer::toString(){ + return stringDuplicate(_T("MatchAllScorer")); +} + +MatchAllDocsQuery::MatchAllDocsWeight::MatchAllDocsWeight(MatchAllDocsQuery* enclosingInstance, Searcher* searcher): + parentQuery(enclosingInstance){ + this->similarity = searcher->getSimilarity(); +} + +TCHAR* MatchAllDocsQuery::MatchAllDocsWeight::toString() { + CL_NS(util)::StringBuffer buf(50); + buf.append(_T("weight(")); + + TCHAR* t = parentQuery->toString(); + buf.append(t); + _CLDELETE_LCARRAY(t); + + buf.appendChar(_T(')')); + return buf.giveBuffer(); +} + +Query* MatchAllDocsQuery::MatchAllDocsWeight::getQuery() { + return parentQuery; +} + +float_t MatchAllDocsQuery::MatchAllDocsWeight::getValue() { + return queryWeight; +} + +float_t MatchAllDocsQuery::MatchAllDocsWeight::sumOfSquaredWeights() { + queryWeight = parentQuery->getBoost(); + return queryWeight * queryWeight; +} + +void MatchAllDocsQuery::MatchAllDocsWeight::normalize(float_t _queryNorm) { + this->queryNorm = _queryNorm; + queryWeight *= this->queryNorm; +} + +Scorer* MatchAllDocsQuery::MatchAllDocsWeight::scorer(CL_NS(index)::IndexReader* reader) { + return _CLNEW MatchAllScorer(reader, similarity, this); +} + +Explanation* MatchAllDocsQuery::MatchAllDocsWeight::explain(CL_NS(index)::IndexReader* reader, int32_t doc) { + // explain query weight + Explanation* queryExpl = _CLNEW ComplexExplanation(true, getValue(), _T("MatchAllDocsQuery, product of:")); + if (parentQuery->getBoost() != 1.0f) { + queryExpl->addDetail(_CLNEW Explanation(parentQuery->getBoost(),_T("boost"))); + } + queryExpl->addDetail(_CLNEW Explanation(queryNorm,_T("queryNorm"))); + return queryExpl; +} + +MatchAllDocsQuery::MatchAllDocsQuery(){} +MatchAllDocsQuery::~MatchAllDocsQuery(){} + +Weight* MatchAllDocsQuery::_createWeight(Searcher* searcher){ + return _CLNEW MatchAllDocsWeight(this, searcher); +} + +const char* MatchAllDocsQuery::getClassName() { + return "MatchAllDocsQuery"; +} +const char* MatchAllDocsQuery::getObjectName() const{ + return getClassName(); +} + +TCHAR* MatchAllDocsQuery::toString(const TCHAR* /*field*/) const{ + CL_NS(util)::StringBuffer buffer(25); + buffer.append(_T("MatchAllDocsQuery")); + buffer.appendBoost(getBoost()); + return buffer.giveBuffer(); +} + +MatchAllDocsQuery::MatchAllDocsQuery(const MatchAllDocsQuery& clone): + Query(clone) +{ +} + +Query* MatchAllDocsQuery::clone() const{ + return _CLNEW MatchAllDocsQuery(*this); +} + +void MatchAllDocsQuery::extractTerms( TermSet * termset ) const +{ +} + +bool MatchAllDocsQuery::equals(Query* o) const{ + if (!(o->instanceOf(MatchAllDocsQuery::getClassName()))) + return false; + MatchAllDocsQuery* other = static_cast(o); + return this->getBoost() == other->getBoost(); +} + +size_t MatchAllDocsQuery::hashCode() const{ + return (static_cast(getBoost())) ^ 0x1AA71190; +} + +CL_NS_END diff --git a/Pods/BRCLucene/src/core/CLucene/search/MatchAllDocsQuery.h b/Pods/BRCLucene/src/core/CLucene/search/MatchAllDocsQuery.h new file mode 100644 index 0000000..febe6f7 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/MatchAllDocsQuery.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_search_MatchAllDocsQuery_h +#define _lucene_search_MatchAllDocsQuery_h + +#include "Scorer.h" +#include "SearchHeader.h" +#include "Query.h" + +CL_CLASS_DEF(search,Explanation) +CL_CLASS_DEF(search,Similarity) +CL_CLASS_DEF(index,IndexReader) + +CL_NS_DEF(search) + class Weight; + + /** + * A query that matches all documents. + * + */ + class CLUCENE_EXPORT MatchAllDocsQuery : public Query { + protected: + MatchAllDocsQuery(const MatchAllDocsQuery& clone); + public: + MatchAllDocsQuery(); + virtual ~MatchAllDocsQuery(); + + class MatchAllScorer; + class MatchAllDocsWeight; + + /** Prints a query to a string, with field assumed to be the + * default field and omitted. + *

The representation used is one that is supposed to be readable + * by {@link org.apache.lucene.queryParser.QueryParser QueryParser}. However, + * there are the following limitations: + *

    + *
  • If the query was created by the parser, the printed + * representation may not be exactly what was parsed. For example, + * characters that need to be escaped will be represented without + * the required backslash.
  • + *
  • Some of the more complicated queries (e.g. span queries) + * don't have a representation that can be parsed by QueryParser.
  • + *
+ */ + virtual TCHAR* toString(const TCHAR* field = NULL) const; + + protected: + /** Expert: Constructs an appropriate Weight implementation for this query. + * + *

Only implemented by primitive queries, which re-write to themselves. + * This is an Internal function + */ + virtual Weight* _createWeight(Searcher* searcher); + + public: + /** Returns a clone of this query. */ + virtual Query* clone() const; + + /** Expert: MatchAllDocsQuery provides no terms at all. */ + void extractTerms( TermSet * termset ) const; + + virtual bool equals(Query* o) const; + virtual size_t hashCode() const; + + static const char* getClassName(); + const char* getObjectName() const; + }; + +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/search/MultiPhraseQuery.cpp b/Pods/BRCLucene/src/core/CLucene/search/MultiPhraseQuery.cpp new file mode 100644 index 0000000..0bd5acb --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/MultiPhraseQuery.cpp @@ -0,0 +1,445 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "MultiPhraseQuery.h" +#include "SearchHeader.h" + +#include "BooleanClause.h" +#include "BooleanQuery.h" +#include "TermQuery.h" +#include "Explanation.h" +#include "Similarity.h" + +#include "CLucene/index/_Term.h" +#include "CLucene/index/Term.h" +#include "CLucene/index/Terms.h" +#include "CLucene/index/IndexReader.h" +#include "CLucene/index/MultipleTermPositions.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) + +class MultiPhraseWeight : public Weight { +private: + Similarity* similarity; + float_t value; + float_t idf; + float_t queryNorm; + float_t queryWeight; + + MultiPhraseQuery* parentQuery; + +public: + MultiPhraseWeight(Searcher* searcher, MultiPhraseQuery* _parentQuery) : similarity(_parentQuery->getSimilarity(searcher)), + value(0), idf(0), queryNorm(0), queryWeight(0), parentQuery(_parentQuery) { + + // compute idf + for (size_t i = 0; i < parentQuery->termArrays->size(); i++){ + ArrayBase* terms = parentQuery->termArrays->at(i); + for ( size_t j=0;jlength;j++ ){ + idf += parentQuery->getSimilarity(searcher)->idf(terms->values[j], searcher); + } + } + } + virtual ~MultiPhraseWeight(){}; + + Query* getQuery() { return parentQuery; } + float_t getValue() { return value; } + + float_t sumOfSquaredWeights() { + queryWeight = idf * parentQuery->getBoost(); // compute query weight + return queryWeight * queryWeight; // square it + } + + void normalize(float_t _queryNorm) { + this->queryNorm = _queryNorm; + queryWeight *= _queryNorm; // normalize query weight + value = queryWeight * idf; // idf for document + } + + Scorer* scorer(IndexReader* reader) { + const size_t termArraysSize = parentQuery->termArrays->size(); + if (termArraysSize == 0) // optimize zero-term case + return NULL; + + TermPositions** tps = _CL_NEWARRAY(TermPositions*,termArraysSize+1); + for (size_t i=0; i* terms = parentQuery->termArrays->at(i); + + TermPositions* p; + if (terms->length > 1 ) + p = _CLNEW MultipleTermPositions(reader, terms); + else + p = reader->termPositions((*terms)[0]); + + if (p == NULL) + return NULL; + + tps[i] = p; + } + tps[termArraysSize] = NULL; + + Scorer* ret = NULL; + + ValueArray positions; + parentQuery->getPositions(positions); + const int32_t slop = parentQuery->getSlop(); + if (slop == 0) + ret = _CLNEW ExactPhraseScorer(this, tps, positions.values, similarity, + reader->norms(parentQuery->field)); + else + ret = _CLNEW SloppyPhraseScorer(this, tps, positions.values, similarity, + slop, reader->norms(parentQuery->field)); + + positions.deleteArray(); + + //tps can be deleted safely. SloppyPhraseScorer or ExactPhraseScorer will take care + //of its values + _CLDELETE_LARRAY(tps); + + return ret; + } + + Explanation* explain(IndexReader* reader, int32_t doc){ + ComplexExplanation* result = _CLNEW ComplexExplanation(); + + StringBuffer buf(100); + buf.append(_T("weight(")); + TCHAR* queryString = getQuery()->toString(); + buf.append(queryString); + buf.append(_T(" in ")); + buf.appendInt(doc); + buf.append(_T("), product of:")); + result->setDescription(buf.getBuffer()); + buf.clear(); + + buf.append(_T("idf(")); + buf.append(queryString); + buf.appendChar(_T(')')); + Explanation* idfExpl = _CLNEW Explanation(idf, buf.getBuffer()); + buf.clear(); + + // explain query weight + Explanation* queryExpl = _CLNEW Explanation(); + buf.append(_T("queryWeight(")); + buf.append(queryString); + buf.append(_T("), product of:")); + queryExpl->setDescription(buf.getBuffer()); + buf.clear(); + + Explanation* boostExpl = _CLNEW Explanation(parentQuery->getBoost(), _T("boost")); + if (parentQuery->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 + ComplexExplanation* fieldExpl = _CLNEW ComplexExplanation(); + buf.append(_T("fieldWeight(")); + buf.append(queryString); + buf.append(_T(" in ")); + buf.appendInt(doc); + buf.append(_T("), product of:")); + fieldExpl->setDescription(buf.getBuffer()); + buf.clear(); + _CLDELETE_LCARRAY(queryString); + + Explanation* tfExpl = scorer(reader)->explain(doc); + fieldExpl->addDetail(tfExpl); + if( idfExpl ) + { + Explanation* idfExpl2 = _CLNEW Explanation(*idfExpl); + fieldExpl->addDetail(idfExpl2); + } + + Explanation* fieldNormExpl = _CLNEW Explanation(); + uint8_t* fieldNorms = reader->norms(parentQuery->field); + float_t fieldNorm = + fieldNorms!=NULL ? Similarity::decodeNorm(fieldNorms[doc]) : 0.0f; + fieldNormExpl->setValue(fieldNorm); + + buf.append(_T("fieldNorm(field=")); + buf.append(parentQuery->field); + buf.append(_T(", doc=")); + buf.appendInt(doc); + buf.appendChar(_T(')')); + fieldNormExpl->setDescription(buf.getBuffer()); + buf.clear(); + + fieldExpl->addDetail(fieldNormExpl); + + fieldExpl->setMatch(tfExpl->isMatch()); + fieldExpl->setValue(tfExpl->getValue() * + idfExpl->getValue() * + fieldNormExpl->getValue()); + + if (queryExpl->getValue() == 1.0f){ + _CLLDELETE(result); + return fieldExpl; + } + + result->addDetail(fieldExpl); + result->setMatch(fieldExpl->getMatch()); + + // combine them + result->setValue(queryExpl->getValue() * fieldExpl->getValue()); + + return result; + } +}; + +Query* MultiPhraseQuery::rewrite(IndexReader* /*reader*/) { + if (termArrays->size() == 1) { // optimize one-term case + ArrayBase* terms = termArrays->at(0); + BooleanQuery* boq = _CLNEW BooleanQuery(true); + for ( size_t i=0;ilength;i++ ){ + boq->add(_CLNEW TermQuery((*terms)[i]), BooleanClause::SHOULD); + } + boq->setBoost(getBoost()); + return boq; + } else { + return this; + } +} + +void MultiPhraseQuery::extractTerms( TermSet * termset ) const +{ + for( size_t i = 0; i < termArrays->size(); i++ ) + { + ArrayBase * terms = termArrays->at( i ); + for( size_t j=0; j < terms->length; j++ ) + { + Term * pTerm = terms->values[ j ]; + if( pTerm && termset->end() == termset->find( pTerm )) + termset->insert( _CL_POINTER( pTerm )); + } + } +} + +MultiPhraseQuery::MultiPhraseQuery(): + field(NULL), + termArrays(_CLNEW CL_NS(util)::CLArrayList*>), + positions(_CLNEW CL_NS(util)::CLVector), + slop(0) +{ +} + +MultiPhraseQuery::MultiPhraseQuery( const MultiPhraseQuery& clone ): + Query(clone) +{ + this->field = clone.field ? STRDUP_TtoT( clone.field ) : NULL; + this->slop = clone.slop; + + this->termArrays = _CLNEW CL_NS(util)::CLArrayList*>(); + this->positions = _CLNEW CL_NS(util)::CLVector(); + + size_t size = clone.positions->size(); + for( size_t i = 0; i < size; i++ ) + { + int32_t n = (*clone.positions)[i]; + this->positions->push_back( n ); + } + + size = clone.termArrays->size(); + for( size_t j = 0; j < size; j++ ) + { + CL_NS(util)::ArrayBase* termsToClone = (*clone.termArrays)[ j ]; + CL_NS(util)::ArrayBase* terms = _CLNEW CL_NS(util)::ValueArray( termsToClone->length ); + for( size_t t = 0; t < termsToClone->length; t++ ) + terms->values[ t ] = _CL_POINTER( termsToClone->values[ t ] ); + + this->termArrays->push_back( terms ); + } +} + +MultiPhraseQuery::~MultiPhraseQuery(){ + for (size_t i = 0; i < termArrays->size(); i++){ + for ( size_t j=0;jat(i)->length;j++ ) { + _CLLDECDELETE(termArrays->at(i)->values[j]); + } + _CLLDELETE(termArrays->at(i)); + } + _CLLDELETE(termArrays); + _CLLDELETE(positions); + _CLDELETE_LCARRAY(field); +} + +Query * MultiPhraseQuery::clone() const +{ + return _CLNEW MultiPhraseQuery( *this ); +} + +void MultiPhraseQuery::setSlop(const int32_t s) { slop = s; } + +int32_t MultiPhraseQuery::getSlop() const { return slop; } + +void MultiPhraseQuery::add(CL_NS(index)::Term* term) { + ValueArray _terms(1); + _terms[0] = term; + add(&_terms); +} + +void MultiPhraseQuery::add(const CL_NS(util)::ArrayBase* terms) { + int32_t position = 0; + if (positions->size() > 0) + position = (*positions)[positions->size()-1] + 1; + + add(terms, position); +} + +void MultiPhraseQuery::add(const CL_NS(util)::ArrayBase* _terms, const int32_t position) { + if (termArrays->size() == 0) + field = STRDUP_TtoT((*_terms)[0]->field()); + + CL_NS(util)::ArrayBase* terms = _CLNEW CL_NS(util)::ValueArray(_terms->length); + for ( size_t i=0;i<_terms->length;i++ ){ + if ( _tcscmp(_terms->values[i]->field(), field) != 0) { + TCHAR buf[250]; + _sntprintf(buf,250,_T("All phrase terms must be in the same field (%s): %s"),field, (*terms)[i]->field()); + _CLTHROWT(CL_ERR_IllegalArgument,buf); + } + terms->values[i] = _CL_POINTER(_terms->values[i]); + } + termArrays->push_back(terms); + positions->push_back(position); +} +const CL_NS(util)::CLArrayList*>* MultiPhraseQuery::getTermArrays() { + return termArrays; +} + +void MultiPhraseQuery::getPositions(ValueArray& result) const { + result.length = positions->size(); + result.values = _CL_NEWARRAY(int32_t,result.length); + for (size_t i = 0; i < result.length; i++) + result.values[i] = (*positions)[i]; +} + +Weight* MultiPhraseQuery::_createWeight(Searcher* searcher) { + return _CLNEW MultiPhraseWeight(searcher, this); +} + +TCHAR* MultiPhraseQuery::toString(const TCHAR* f) const { + StringBuffer buffer(100); + if (_tcscmp(f, field)!=0) { + buffer.append(field); + buffer.appendChar(_T(':')); + } + + buffer.appendChar(_T('"')); + + CL_NS(util)::CLArrayList*>::iterator i; + i = termArrays->begin(); + while (i != termArrays->end()){ + CL_NS(util)::ArrayBase& terms = *(*i); + if (terms.length > 1) { + buffer.appendChar(_T('(')); + for (size_t j = 0; j < terms.length; j++) { + buffer.append(terms[j]->text()); + if (j < terms.length-1) + buffer.appendChar(_T(' ')); + } + buffer.appendChar(_T(')')); + } else { + buffer.append(terms[0]->text()); + } + if (i+1 != termArrays->end() ) + buffer.appendChar(_T(' ')); + + i++; + } + buffer.appendChar(_T('"')); + + if (slop != 0) { + buffer.appendChar(_T('~')); + buffer.appendInt(slop); + } + + buffer.appendBoost(getBoost()); + + return buffer.giveBuffer(); +} + +class TermArray_Equals:public CL_NS_STD(binary_function) +{ +public: + bool operator()( CL_NS(util)::ArrayBase* val1, CL_NS(util)::ArrayBase* val2 ) const{ + if ( val1->length != val2->length ) + return false; + for ( size_t i=0;ilength;i++ ){ + if (!val1->values[i]->equals(val2->values[i])) return false; + } + return true; + } +}; + +bool MultiPhraseQuery::equals(Query* o) const { + if (!(o->instanceOf(MultiPhraseQuery::getObjectName()))) return false; + MultiPhraseQuery* other = static_cast(o); + bool ret = (this->getBoost() == other->getBoost()) && (this->slop == other->slop); + + if (ret){ + CLListEquals, + const CL_NS(util)::CLVector > comp; + ret = comp.equals(this->positions,other->positions); + } + + if (ret){ + if (this->termArrays->size() != other->termArrays->size()) + return false; + + for (size_t i=0; itermArrays->size();i++){ + CLListEquals*>, + const CL_NS(util)::CLVector*> > comp; + ret = comp.equals(this->termArrays,other->termArrays); + } + } + return ret; +} + +// TODO: Test hashed value if conforms with JL +size_t MultiPhraseQuery::hashCode() const { + size_t ret = Similarity::floatToByte(getBoost()) ^ slop; + + { //msvc6 scope fix + for( size_t i = 0; i < termArrays->size(); i++ ) + { + for( size_t j = 0; j < termArrays->at( i )->length; j++ ) + { + ret = 31 * ret + termArrays->at(i)->values[j]->hashCode(); + } + } + } + { //msvc6 scope fix + for ( size_t i=0;isize();i++ ) + ret = 31 * ret + (*positions)[i]; + } + ret ^= 0x4AC65113; + + return ret; +} + +CL_NS_END diff --git a/Pods/BRCLucene/src/core/CLucene/search/MultiPhraseQuery.h b/Pods/BRCLucene/src/core/CLucene/search/MultiPhraseQuery.h new file mode 100644 index 0000000..86419e5 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/MultiPhraseQuery.h @@ -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. +------------------------------------------------------------------------------*/ +#ifndef _lucene_search_MultiPhraseQuery_ +#define _lucene_search_MultiPhraseQuery_ + +#include "Query.h" +#include "CLucene/util/Array.h" +#include "CLucene/util/VoidList.h" + +CL_CLASS_DEF(index,Term) + +CL_NS_DEF(search) + +class MultiPhraseWeight; + +/** +* MultiPhraseQuery is a generalized version of PhraseQuery, with an added +* method {@link #add(Term[])}. +* To use this class, to search for the phrase "Microsoft app*" first use +* add(Term) on the term "Microsoft", then find all terms that have "app" as +* prefix using IndexReader.terms(Term), and use MultiPhraseQuery.add(Term[] +* terms) to add them to the query. +* +* @author Anders Nielsen +* @version 1.0 +*/ +class CLUCENE_EXPORT MultiPhraseQuery : public Query { +private: + TCHAR* field; + CL_NS(util)::CLArrayList*>* termArrays; + CL_NS(util)::CLVector* positions; + + int32_t slop; + +protected: + MultiPhraseQuery( const MultiPhraseQuery& clone ); + +public: + MultiPhraseQuery(); + virtual ~MultiPhraseQuery(); + friend class MultiPhraseWeight; + + /** Sets the phrase slop for this query. + * @see PhraseQuery#setSlop(int) + */ + void setSlop(const int32_t s); + + /** Sets the phrase slop for this query. + * @see PhraseQuery#getSlop() + */ + int32_t getSlop() const; + + /** Add a single term at the next position in the phrase. + * @see PhraseQuery#add(Term) + * @memory A pointer is taken to term + */ + void add(CL_NS(index)::Term* term); + + /** Add multiple terms at the next position in the phrase. Any of the terms + * may match. + * @memory A pointer is taken of each term, the array memory must be cleaned up by calle + * @see PhraseQuery#add(Term) + */ + void add(const CL_NS(util)::ArrayBase* terms); + + /** + * Allows to specify the relative position of terms within the phrase. + * + * @see PhraseQuery#add(Term, int) + * @param terms + * @param position + * @memory A pointer is taken of each term, the array memory must be cleaned up by calle + */ + void add(const CL_NS(util)::ArrayBase* terms, const int32_t position); + + /** + * Returns a ArrayBase of the terms in the multiphrase. + * Do not modify the List or its contents. + */ + const CL_NS(util)::CLArrayList*>* getTermArrays(); + + + /** + * Returns the relative positions of terms in this phrase. + */ + void getPositions(CL_NS(util)::ValueArray& result) const; + + Query* rewrite(CL_NS(index)::IndexReader* reader); + + /** Expert: adds all terms occurring in this query to the terms set. */ + void extractTerms( TermSet * termset ) const; + +protected: + Weight* _createWeight(Searcher* searcher); + +public: + /** Prints a user-readable version of this query. */ + TCHAR* toString(const TCHAR* f) const; + + /** Returns true if o is equal to this. */ + bool equals(Query* o) const; + + /** Returns a hash code value for this object.*/ + size_t hashCode() const; + + Query* clone() const; + + const char* getObjectName() const { return getClassName(); } + static const char* getClassName(){ return "MultiPhraseQuery"; } +}; +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/search/MultiSearcher.cpp b/Pods/BRCLucene/src/core/CLucene/search/MultiSearcher.cpp new file mode 100644 index 0000000..0f2a686 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/MultiSearcher.cpp @@ -0,0 +1,244 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "CLucene/index/IndexReader.h" +#include "MultiSearcher.h" +#include "SearchHeader.h" +#include "Query.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) + + class MultiHitCollector: public HitCollector{ + private: + HitCollector* results; + int32_t start; + public: + MultiHitCollector(HitCollector* _results, int32_t _start); + void collect(const int32_t doc, const float_t score) ; + }; + + + /** Creates a searcher which searches searchers. */ + 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); + } + + int32_t* MultiSearcher::getStarts() { + return starts; + } + int32_t MultiSearcher::getLength() { + return searchablesLen; + } + + // 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 n 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 n 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 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 = new 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. + * + *

{@link HitCollector#collect(int32_t,float_t)} is called for every non-zero + * scoring document. + * + *

Applications should only use this if they need all 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;jscoreDocsLength;++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;xsize(); + 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* query) { + // this is a bit of a hack. We know that a query which + // creates a Weight based on this Dummy-Searcher is + // always already rewritten (see preparedWeight()). + // Therefore we just return the unmodified query here + return query; + } + + 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 float_t score) { + results->collect(doc + start, score); + } + +CL_NS_END diff --git a/Pods/BRCLucene/src/core/CLucene/search/MultiSearcher.h b/Pods/BRCLucene/src/core/CLucene/search/MultiSearcher.h new file mode 100644 index 0000000..17adba0 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/MultiSearcher.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_multisearcher +#define _lucene_search_multisearcher + + +//#include "SearchHeader.h" +#include "Searchable.h" +CL_CLASS_DEF(document,Document) +CL_CLASS_DEF(index,Term) + +CL_NS_DEF(search) + + /** Implements search over a set of Searchables. + * + *

Applications usually need only call the inherited {@link #search(Query)} + * or {@link #search(Query,Filter)} methods. + */ + class CLUCENE_EXPORT MultiSearcher: public Searcher { + private: + Searchable** searchables; + int32_t searchablesLen; + int32_t* starts; + int32_t _maxDoc; + protected: + int32_t* getStarts(); + int32_t getLength(); + public: + /** Creates a searcher which searches Searchables. */ + MultiSearcher(Searchable** searchables); + + ~MultiSearcher(); + + /** Frees resources associated with this Searcher. */ + 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. + * + *

{@link HitCollector#collect(int32_t,float_t)} is called for every non-zero + * scoring document. + * + *

Applications should only use this if they need all 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/Pods/BRCLucene/src/core/CLucene/search/MultiTermQuery.cpp b/Pods/BRCLucene/src/core/CLucene/search/MultiTermQuery.cpp new file mode 100644 index 0000000..c781c40 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/MultiTermQuery.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/_ApiHeader.h" +#include "MultiTermQuery.h" +#include "BooleanQuery.h" +#include "FilteredTermEnum.h" +#include "TermQuery.h" +#include "CLucene/index/Term.h" +#include "CLucene/util/StringBuffer.h" + +CL_NS_USE(index) +CL_NS_USE(util) +CL_NS_DEF(search) + +/** Constructs a query for terms matching term. */ + + 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( true ); + 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->getQuery(); + + _CLDELETE(query); + return ret; + } + } + return query; + } + + Query* MultiTermQuery::combine(CL_NS(util)::ArrayBase* 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()); + // todo: use ToStringUtils.boost() + if (getBoost() != 1.0f) { + buffer.appendChar ( '^' ); + buffer.appendFloat( getBoost(),1); + } + return buffer.toString(); + } + +CL_NS_END diff --git a/Pods/BRCLucene/src/core/CLucene/search/MultiTermQuery.h b/Pods/BRCLucene/src/core/CLucene/search/MultiTermQuery.h new file mode 100644 index 0000000..c92f65f --- /dev/null +++ b/Pods/BRCLucene/src/core/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_ + + +CL_CLASS_DEF(util,StringBuffer) +//#include "CLucene/index/IndexReader.h" +CL_CLASS_DEF(index,Term) +CL_CLASS_DEF(search,FilteredTermEnum) +CL_CLASS_DEF(index,IndexReader) +//#include "CLucene/index/Terms.h" +//#include "FilteredTermEnum.h" +//#include "SearchHeader.h" +//#include "BooleanQuery.h" +//#include "TermQuery.h" +#include "Query.h" + +CL_NS_DEF(search) + /** + * A {@link lucene::search::Query} that matches documents containing a subset of terms provided + * by a {@link lucene::search::FilteredTermEnum} enumeration. + *

+ * MultiTermQuery is not designed to be used by itself. + *
+ * The reason being that it is not intialized with a {@link FilteredTermEnum} + * enumeration. A {@link FilteredTermEnum} enumeration needs to be provided. + *

+ * For example, {@link WildcardQuery} and {@link FuzzyQuery} extend + * MultiTermQuery to provide {@link WildcardTermEnum} and + * {@link FuzzyTermEnum}, respectively. + */ + class CLUCENE_EXPORT 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 term. */ + MultiTermQuery(CL_NS(index)::Term* t); + + virtual ~MultiTermQuery(); + + /** Returns the pattern term. */ + CL_NS(index)::Term* getTerm(bool pointer=true) const; + + Query* combine(CL_NS(util)::ArrayBase* queries); + + /** Prints a user-readable version of this query. */ + TCHAR* toString(const TCHAR* field) const; + + virtual Query* rewrite(CL_NS(index)::IndexReader* reader); + }; +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/search/PhrasePositions.cpp b/Pods/BRCLucene/src/core/CLucene/search/PhrasePositions.cpp new file mode 100644 index 0000000..b8d1773 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/PhrasePositions.cpp @@ -0,0 +1,114 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "_PhrasePositions.h" + +CL_NS_USE(index) +CL_NS_DEF(search) + +PhrasePositions::PhrasePositions(TermPositions* t, const int32_t OffSet) { + //Func - Constructor + //Pre - t != NULL + // OffSet != NULL + //Post - The instance has been created + + CND_PRECONDITION(t != NULL,"Tp is NULL"); + CND_PRECONDITION(OffSet >= 0 ,"OffSet is a negative number"); + + tp = t; + 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 = LUCENE_INT32_MAX_SHOULDBE; + 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/Pods/BRCLucene/src/core/CLucene/search/PhraseQuery.cpp b/Pods/BRCLucene/src/core/CLucene/search/PhraseQuery.cpp new file mode 100644 index 0000000..2942d0d --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/PhraseQuery.cpp @@ -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. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "PhraseQuery.h" + +#include "SearchHeader.h" +#include "Scorer.h" +#include "BooleanQuery.h" +#include "TermQuery.h" +#include "Similarity.h" +#include "Searchable.h" +#include "Explanation.h" + +#include "CLucene/index/_Term.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" + +#include + +CL_NS_USE(index) +CL_NS_USE(util) +CL_NS_DEF(search) + + + + class PhraseWeight: public Weight { + private: + Searcher* searcher; + float_t value; + float_t idf; + float_t queryNorm; + float_t queryWeight; + + PhraseQuery* parentQuery; + public: + PhraseWeight(Searcher* searcher, PhraseQuery* parentQuery); + virtual ~PhraseWeight(); + TCHAR* toString(); + + Query* getQuery(); + float_t getValue(); + + float_t sumOfSquaredWeights(); + void normalize(float_t queryNorm); + Scorer* scorer(CL_NS(index)::IndexReader* reader); + Explanation* explain(CL_NS(index)::IndexReader* reader, int32_t doc); + TCHAR* toString(TCHAR* f); + bool equals(PhraseWeight* o); + }; + + PhraseQuery::PhraseQuery(): + field(NULL), terms(_CLNEW CL_NS(util)::CLVector(false) ), + positions(_CLNEW CL_NS(util)::CLVector), slop(0) + { + } + + PhraseQuery::PhraseQuery(const PhraseQuery& clone): + Query(clone), + terms(_CLNEW CL_NS(util)::CLVector(false) ), + positions(_CLNEW CL_NS(util)::CLVector) + { + slop = clone.slop; + field = clone.field; + int32_t size=clone.positions->size(); + { //msvc6 scope fix + for ( int32_t i=0;ipositions->push_back( n ); + } + } + size=clone.terms->size(); + { //msvc6 scope fix + for ( int32_t i=0;iterms->push_back( _CL_POINTER((*clone.terms)[i])); + } + } + } + Query* PhraseQuery::clone() const{ + return _CLNEW PhraseQuery(*this); + } + + const TCHAR* PhraseQuery::getFieldName() const{ return field; } + + void PhraseQuery::setSlop(const int32_t s) { slop = s; } + int32_t PhraseQuery::getSlop() const { return slop; } + + 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, + const CL_NS(util)::CLVector > comp; + ret = comp.equals(this->terms,pq->terms); + } + + if ( ret ){ + CLListEquals, + const CL_NS(util)::CLVector > 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 (size_t i = 0; i < terms->size(); i++){ + _CLLDECDELETE((*terms)[i]); + } + _CLLDELETE(terms); + _CLLDELETE(positions); + } + + 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 ( size_t i=0;isize();i++ ) + ret = 31 * ret + (*terms)[i]->hashCode(); + } + { //msvc6 scope fix + for ( size_t i=0;isize();i++ ) + ret = 31 * ret + (*positions)[i]; + } + return ret; + } + + const char* PhraseQuery::getClassName(){ + return "PhraseQuery"; + } + const char* PhraseQuery::getObjectName() const{ + //Func - Returns the string "PhraseQuery" + //Pre - true + //Post - The string "PhraseQuery" has been returned + return getClassName(); + } + + 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) { + + 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){ + 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(ValueArray& result) const{ + result.length = positions->size(); + result.values = _CL_NEWARRAY(int32_t,result.length); + for(size_t i = 0; i < result.length; i++){ + result.values[i] = (*positions)[i]; + } + } + + 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); + _CLLDELETE(termQuery); + return ret; + } + return _CLNEW PhraseWeight(searcher,this); + } + + + Term** PhraseQuery::getTerms() const{ + //Func - added by search highlighter + + //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;isize()== 0 ) + return NULL; + + StringBuffer buffer(32); + if ( f==NULL || _tcscmp(field,f)!=0) { + buffer.append(field); + buffer.appendChar(_T(':')); + } + + buffer.appendChar( _T('"') ); + + Term *T = NULL; + + //iterate through all terms + for (size_t i = 0; i < terms->size(); i++) { + //Get the i-th term + T = (*terms)[i]; + + buffer.append( T->text() ); + //Check if i is at the end of terms + if (i != terms->size()-1){ + buffer.appendChar(_T(' ')); + } + } + buffer.appendChar( _T('"') ); + + if (slop != 0) { + buffer.appendChar(_T('~')); + buffer.appendFloat(slop, 0); + } + + buffer.appendBoost(getBoost()); + + return buffer.giveBuffer(); + } + +void PhraseQuery::extractTerms( TermSet * termset ) const +{ + for( size_t i = 0; i < terms->size(); i++ ) + { + Term * pTerm = (*terms)[i]; + if( pTerm && termset->end() == termset->find( pTerm )) + termset->insert( _CL_POINTER( pTerm )); + } +} + + + PhraseWeight::PhraseWeight(Searcher* searcher, PhraseQuery* _parentQuery) { + this->parentQuery=_parentQuery; + this->value = 0; + this->idf = 0; + this->queryNorm = 0; + this->queryWeight = 0; + this->searcher = searcher; + } + + TCHAR* PhraseWeight::toString() { + return STRDUP_TtoT(_T("weight(PhraseQuery)")); + } + PhraseWeight::~PhraseWeight(){ + } + + + Query* PhraseWeight::getQuery() { return parentQuery; } + float_t PhraseWeight::getValue() { return value; } + + float_t PhraseWeight::sumOfSquaredWeights(){ + idf = parentQuery->getSimilarity(searcher)->idf(parentQuery->terms, searcher); + queryWeight = idf * parentQuery->getBoost(); // compute query weight + return queryWeight * queryWeight; // square it + } + + void PhraseWeight::normalize(float_t queryNorm) { + this->queryNorm = queryNorm; + queryWeight *= queryNorm; // normalize query weight + value = queryWeight * idf; // idf for document + } + + Scorer* PhraseWeight::scorer(IndexReader* reader) { + //Func - + //Pre - + //Post - + + //Get the length of terms + const int32_t tpsLength = (const int32_t)parentQuery->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 + for (int32_t i = 0; i < tpsLength; i++) { + //Get the termPostitions for the i-th term + p = reader->termPositions((*parentQuery->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; + + ValueArray positions; + parentQuery->getPositions(positions); + int32_t slop = parentQuery->getSlop(); + if ( slop != 0) + // optimize exact case + //todo: need to pass these: this, tps, + ret = _CLNEW SloppyPhraseScorer(this,tps,positions.values, + parentQuery->getSimilarity(searcher), + slop, reader->norms(parentQuery->field)); + else + ret = _CLNEW ExactPhraseScorer(this, tps, positions.values, + parentQuery->getSimilarity(searcher), + reader->norms(parentQuery->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_LARRAY(tps); + return ret; + } + + Explanation* PhraseWeight::explain(IndexReader* reader, int32_t doc){ + Explanation* result = _CLNEW Explanation(); + 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_LCARRAY(tmp); + result->setDescription(descbuf); + + StringBuffer docFreqs; + StringBuffer query; + query.appendChar('"'); + for (size_t i = 0; i < parentQuery->terms->size(); i++) { + if (i != 0) { + docFreqs.appendChar(' '); + query.appendChar(' '); + } + + Term* term = (*parentQuery->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)"),parentQuery->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_LCARRAY(tmp); + queryExpl->setDescription(descbuf); + + Explanation* boostExpl = _CLNEW Explanation(parentQuery->getBoost(), _T("boost")); + bool deleteBoostExpl = false; + if (parentQuery->getBoost() != 1.0f) + queryExpl->addDetail(boostExpl); + else + deleteBoostExpl = true; + queryExpl->addDetail(idfExpl); + + Explanation* queryNormExpl = _CLNEW Explanation(queryNorm,_T("queryNorm")); + queryExpl->addDetail(queryNormExpl); + + queryExpl->setValue(boostExpl->getValue() * + idfExpl->getValue() * + queryNormExpl->getValue()); + + if (deleteBoostExpl) + _CLLDELETE(boostExpl); + + 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:"), + parentQuery->field,query.getBuffer(),doc); + fieldExpl->setDescription(descbuf); + + + Scorer* sc = scorer(reader); + Explanation* tfExpl = sc->explain(doc); + _CLLDELETE(sc); + fieldExpl->addDetail(tfExpl); + fieldExpl->addDetail( _CLNEW Explanation(idfExpl->getValue(), idfExpl->getDescription()) ); + + Explanation* fieldNormExpl = _CLNEW Explanation(); + uint8_t* fieldNorms = reader->norms(parentQuery->field); + float_t 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)"),parentQuery->field,doc); + fieldNormExpl->setDescription(descbuf); + fieldExpl->addDetail(fieldNormExpl); + + fieldExpl->setValue(tfExpl->getValue() * + idfExpl->getValue() * + fieldNormExpl->getValue()); + + if (queryExpl->getValue() == 1.0f){ + _CLLDELETE(result); + return fieldExpl; + } + + result->addDetail(fieldExpl); + + // combine them + result->setValue(queryExpl->getValue() * fieldExpl->getValue()); + + return result; + } + + +CL_NS_END diff --git a/Pods/BRCLucene/src/core/CLucene/search/PhraseQuery.h b/Pods/BRCLucene/src/core/CLucene/search/PhraseQuery.h new file mode 100644 index 0000000..33c7a8b --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/PhraseQuery.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. +------------------------------------------------------------------------------*/ +#ifndef _lucene_search_PhraseQuery_ +#define _lucene_search_PhraseQuery_ + +#include "Query.h" +CL_CLASS_DEF(index,Term) +CL_CLASS_DEF(search,Scorer) +#include "CLucene/util/Array.h" +#include "CLucene/util/VoidList.h" + +CL_NS_DEF(search) + /** A Query that matches documents containing a particular sequence of terms. + * A PhraseQuery is built by QueryParser for input like "new york". + * + *

This query may be combined with other terms or queries with a {@link BooleanQuery}. + */ + class CLUCENE_EXPORT PhraseQuery: public Query { + private: + const TCHAR* field; + CL_NS(util)::CLVector* terms; + CL_NS(util)::CLVector* positions; + int32_t slop; + + friend class PhraseWeight; + protected: + Weight* _createWeight(Searcher* searcher); + PhraseQuery(const PhraseQuery& clone); + public: + /** Constructs an empty phrase query. */ + PhraseQuery(); + virtual ~PhraseQuery(); + + /** 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); + + /** Returns the slop. See setSlop(). */ + int32_t getSlop() const; + + /** + * 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 add(CL_NS(index)::Term* term); + + /** + * Adds a term to the end of the query phrase. + * The relative position of the term within the phrase is specified explicitly. + * This allows e.g. phrases with more than one term at the same position + * or phrases with gaps (e.g. in connection with stopwords). + * + * @param term + * @param position + */ + void add(CL_NS(index)::Term* term, int32_t position); + + /** Returns the set of terms in this phrase. */ + CL_NS(index)::Term** getTerms() const; + + /** + * Returns the relative positions of terms in this phrase. + */ + void getPositions(CL_NS(util)::ValueArray& result) const; + + //Returns the sum of squared weights + float_t sumOfSquaredWeights(Searcher* searcher); + + //Normalizes the Weight + void normalize(const float_t norm); + + Scorer* scorer(CL_NS(index)::IndexReader* reader); + + const TCHAR* getFieldName() const; + + /** Prints a user-readable version of this query. */ + TCHAR* toString(const TCHAR* f) const; + + Query* clone() const; + bool equals(Query *) const; + + size_t hashCode() const; + + const char* getObjectName() const; + static const char* getClassName(); + + /** Expert: adds all terms occurring in this query to the terms set. */ + void extractTerms( TermSet * termset ) const; + }; +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/search/PhraseScorer.cpp b/Pods/BRCLucene/src/core/CLucene/search/PhraseScorer.cpp new file mode 100644 index 0000000..06d8836 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/PhraseScorer.cpp @@ -0,0 +1,223 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "Scorer.h" +#include "Explanation.h" +#include "Similarity.h" +#include "SearchHeader.h" +#include "CLucene/util/StringBuffer.h" +#include "CLucene/index/Terms.h" +#include "_PhraseQueue.h" +#include "_PhraseScorer.h" + +CL_NS_USE(index) +CL_NS_USE(util) +CL_NS_DEF(search) + + + PhraseScorer::PhraseScorer(Weight* _weight, TermPositions** tps, + int32_t* offsets, Similarity* similarity, uint8_t* _norms): + Scorer(similarity), weight(_weight), norms(_norms), value(_weight->getValue()), firstTime(true), more(true), freq(0.0f), + first(NULL), last(NULL) + { + //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"); + + // convert tps to a list of phrase positions. + // note: phrase-position differs from term-position in that its position + // reflects the phrase offset: pp.pos = tp.pos - offset. + // this allows to easily identify a matching (exact) phrase + // when all PhrasePositions have exactly the same position. + int32_t i = 0; + while(tps[i] != NULL){ + PhrasePositions *pp = _CLNEW PhrasePositions(tps[i], offsets[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. + _CLLDELETE(first); + _CLLDELETE(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 + } + + float_t PhraseScorer::score(){ + //System.out.println("scoring " + first.doc); + float_t raw = getSimilarity()->tf(freq) * value; // raw score + return raw * Similarity::decodeNorm(norms[first->doc]); // normalize + } + + bool PhraseScorer::skipTo(int32_t target) { + firstTime = false; + 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; + } + } + + + Explanation* PhraseScorer::explain(int32_t _doc) { + Explanation* tfExplanation = _CLNEW Explanation(); + + while (next() && doc() < _doc){ + } + + float_t 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()); + + return tfExplanation; + } + + 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(); + } + + int32_t PhraseScorer::doc() const { return first->doc; } + +CL_NS_END diff --git a/Pods/BRCLucene/src/core/CLucene/search/PrefixQuery.cpp b/Pods/BRCLucene/src/core/CLucene/search/PrefixQuery.cpp new file mode 100644 index 0000000..7dc9afb --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/PrefixQuery.cpp @@ -0,0 +1,311 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "CLucene/index/Term.h" +#include "CLucene/index/Terms.h" +#include "CLucene/index/IndexReader.h" +#include "Similarity.h" +#include "PrefixQuery.h" +#include "BooleanClause.h" +#include "BooleanQuery.h" +#include "TermQuery.h" +#include "CLucene/util/BitSet.h" +#include "CLucene/util/StringBuffer.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 char* PrefixQuery::getObjectName()const{ + //Func - Returns the name "PrefixQuery" + //Pre - true + //Post - The string "PrefixQuery" has been returned + + return getClassName(); + } + const char* PrefixQuery::getClassName(){ + //Func - Returns the name "PrefixQuery" + //Pre - true + //Post - The string "PrefixQuery" has been returned + + return "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( true ); + 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; + size_t prefixLen = prefix->textLength(); + do { + lastTerm = enumerator->term(); + if (lastTerm != NULL && + lastTerm->field() == prefixField ) // interned comparison + { + + //now see if term->text() starts with prefixText + size_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->getQuery(); + + _CLDELETE(query); + return ret; + } + } + + return query; + } + + Query* PrefixQuery::combine(CL_NS(util)::ArrayBase* 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(); + } + + + + + +//todo: this needs to be exposed, but java is still a bit confused about how... +class PrefixFilter::PrefixGenerator{ + const Term* prefix; +public: + PrefixGenerator(const Term* prefix){ + this->prefix = prefix; + } + virtual ~PrefixGenerator(){ + } + + virtual void handleDoc(int doc) = 0; + + void generate(IndexReader* reader) { + TermEnum* enumerator = reader->terms(prefix); + TermDocs* termDocs = reader->termDocs(); + const TCHAR* prefixText = prefix->text(); + const TCHAR* prefixField = prefix->field(); + const TCHAR* tmp; + size_t i; + size_t prefixLen = prefix->textLength(); + Term* term = NULL; + + try{ + do{ + term = enumerator->term(false); + if (term != NULL && + term->field() == prefixField // interned comparison + ){ + //now see if term->text() starts with prefixText + size_t termLen = term->textLength(); + if ( prefixLen>termLen ) + break; //the prefix is longer than the term, can't be matched + + tmp = term->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; + + termDocs->seek(enumerator); + while (termDocs->next()) { + handleDoc(termDocs->doc()); + } + } + }while(enumerator->next()); + } _CLFINALLY( + termDocs->close(); + _CLDELETE(termDocs); + enumerator->close(); + _CLDELETE(enumerator); + ) + } +}; + +class DefaultPrefixGenerator: public PrefixFilter::PrefixGenerator{ +public: + BitSet* bts; + DefaultPrefixGenerator(BitSet* bts, const Term* prefix): + PrefixGenerator(prefix) + { + this->bts = bts; + } + virtual ~DefaultPrefixGenerator(){ + } + void handleDoc(int doc) { + bts->set(doc); + } +}; + +PrefixFilter::PrefixFilter( Term* prefix ) +{ + this->prefix = _CL_POINTER(prefix); +} + +PrefixFilter::~PrefixFilter() +{ + _CLDECDELETE(prefix); +} + +PrefixFilter::PrefixFilter( const PrefixFilter& copy ) : + Filter(), + 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; + buffer.append(_T("PrefixFilter(")); + buffer.append(prefix->field()); + 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() ); + DefaultPrefixGenerator gen(bts, prefix); + gen.generate(reader); + return bts; +} + +CL_NS(index)::Term* PrefixFilter::getPrefix() const { return prefix; } + +CL_NS_END diff --git a/Pods/BRCLucene/src/core/CLucene/search/PrefixQuery.h b/Pods/BRCLucene/src/core/CLucene/search/PrefixQuery.h new file mode 100644 index 0000000..c5d5767 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/PrefixQuery.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_PrefixQuery +#define _lucene_search_PrefixQuery + +CL_CLASS_DEF(index,Term) +//#include "CLucene/index/Terms.h" +//#include "CLucene/index/IndexReader.h" +//#include "SearchHeader.h" +//#include "BooleanQuery.h" +//#include "TermQuery.h" +#include "Query.h" +#include "Filter.h" +CL_CLASS_DEF(util,StringBuffer) + +CL_NS_DEF(search) +/** A Query that matches documents containing terms with a specified prefix. A PrefixQuery +* is built by QueryParser for input like app*. */ + class CLUCENE_EXPORT 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 char* getObjectName() const; + static const char* getClassName(); + + /** Returns the prefix of this query. */ + CL_NS(index)::Term* getPrefix(bool pointer=true); + + Query* combine(CL_NS(util)::ArrayBase* 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 CLUCENE_EXPORT PrefixFilter: public Filter + { + private: + CL_NS(index)::Term* prefix; + protected: + PrefixFilter( const PrefixFilter& copy ); + public: + class PrefixGenerator; + + 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; + + /** Prints a user-readable version of this query. */ + TCHAR* toString(); + + // Returns a reference of internal prefix + CL_NS(index)::Term* getPrefix() const; + }; +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/search/Query.h b/Pods/BRCLucene/src/core/CLucene/search/Query.h new file mode 100644 index 0000000..389cffe --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/Query.h @@ -0,0 +1,154 @@ +/*------------------------------------------------------------------------------ +* 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_Query_h +#define _lucene_search_Query_h + + +#include "CLucene/util/Array.h" +#include "CLucene/index/Term.h" +#include "CLucene/util/Equators.h" + +CL_CLASS_DEF(index,IndexReader) + + +CL_NS_DEF(search) + class Weight; + class Similarity; + class Searcher; + + typedef std::set TermSet; + + /** The abstract base class for queries. +

Instantiable subclasses are: +

    +
  • {@link TermQuery} +
  • {@link MultiTermQuery} +
  • {@link BooleanQuery} +
  • {@link WildcardQuery} +
  • {@link PhraseQuery} +
  • {@link PrefixQuery} +
  • {@link PhrasePrefixQuery} +
  • {@link FuzzyQuery} +
  • {@link RangeQuery} +
  • {@link spans.SpanQuery} +
+

A parser for queries is contained in: +

    +
  • {@link queryParser.QueryParser QueryParser} +
+ */ + class CLUCENE_EXPORT Query : public CL_NS(util)::NamedObject { + private: + // query boost factor + float_t boost; + protected: + Query(); + Query(const Query& clone); + public: + virtual ~Query(); + + /** Sets the boost for this query clause to b. Documents + * matching this clause will (in addition to the normal weightings) have + * their score multiplied by b. + */ + void setBoost(float_t b); + + /** Gets the boost for this clause. Documents matching + * this clause will (in addition to the normal weightings) have their score + * multiplied by b. The boost is 1.0 by default. + */ + float_t 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. + * + * @memory: + * The caller has to clean up. When rewrite() returns a pointer which + * differs from the pointer to the initial query, the pointer points + * to a newly allocated object and has also to be cleaned up. */ + virtual Query* rewrite(CL_NS(index)::IndexReader* reader); + + /** Expert: called when re-writing queries under MultiSearcher. + * + * Create a single query suitable for use by all subsearchers (in 1-1 + * correspondence with queries). This is an optimization of the OR of + * all queries. We handle the common optimization cases of equal + * queries and overlapping clauses of boolean OR queries (as generated + * by MultiTermQuery.rewrite() and RangeQuery.rewrite()). + * Be careful overriding this method as queries[0] determines which + * method will be called and is not necessarily of the same type as + * the other queries. + */ + virtual Query* combine(CL_NS(util)::ArrayBase* queries); + + /** Expert: adds all terms occurring in this query to the terms set. Only + * works if this query is in its {@link #rewrite rewritten} form. + * + * @memory: + * CLucene specific - all terms in the list have their reference counter + * increased by one. + * + * @throws CLuceneError with CL_ERR_UnsupportedOperation + */ + virtual void extractTerms( TermSet * termset ) const; + + /** Expert: merges the clauses of a set of BooleanQuery's into a single + * BooleanQuery. + * + *

A utility for use by {@link #combine(Query[])} implementations. + */ + static Query* mergeBooleanQueries(CL_NS(util)::ArrayBase* 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; + _CL_DEPRECATED(getObjectName) const char* getQueryName() const; + + /** Prints a query to a string, with field assumed to be the + * default field and omitted. + *

The representation used is one that is supposed to be readable + * by {@link org.apache.lucene.queryParser.QueryParser QueryParser}. However, + * there are the following limitations: + *

    + *
  • If the query was created by the parser, the printed + * representation may not be exactly what was parsed. For example, + * characters that need to be escaped will be represented without + * the required backslash.
  • + *
  • Some of the more complicated queries (e.g. span queries) + * don't have a representation that can be parsed by QueryParser.
  • + *
+ * + * @memory always returns a newly allocated string, which the caller is + * responsible for deleting + * + */ + 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. + * + *

Only implemented by primitive queries, which re-write to themselves. + * This is an Internal function + */ + virtual Weight* _createWeight(Searcher* searcher); + }; + +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/search/QueryFilter.cpp b/Pods/BRCLucene/src/core/CLucene/search/QueryFilter.cpp new file mode 100644 index 0000000..7da64f1 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/QueryFilter.cpp @@ -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. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "QueryFilter.h" +#include "IndexSearcher.h" +#include "CLucene/index/IndexReader.h" +#include "CLucene/util/BitSet.h" +#include "SearchHeader.h" +#include "Query.h" + +CL_NS_DEF(search) +CL_NS_USE(util) +CL_NS_USE(index) + + +class QFHitCollector: public HitCollector{ + CL_NS(util)::BitSet* bits; +public: + QFHitCollector(CL_NS(util)::BitSet* bits){ + this->bits = bits; + } + void collect(const int32_t doc, const float_t /*score*/){ + bits->set(doc); // set bit for hit + } +}; + + +QueryFilter::QueryFilter( const Query* query ) +{ + this->query = query->clone(); + bDeleteQuery = true; +} + +QueryFilter::QueryFilter( Query* query, bool bDeleteQuery ) +{ + this->query = query; + this->bDeleteQuery = bDeleteQuery; +} + +QueryFilter::~QueryFilter() +{ + if( bDeleteQuery ) + _CLDELETE( query ); +} + + +QueryFilter::QueryFilter( const QueryFilter& copy ) +{ + this->query = copy.query->clone(); + bDeleteQuery = true; +} + + +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; +} + + +CL_NS_END diff --git a/Pods/BRCLucene/src/core/CLucene/search/QueryFilter.h b/Pods/BRCLucene/src/core/CLucene/search/QueryFilter.h new file mode 100644 index 0000000..452dd4e --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/QueryFilter.h @@ -0,0 +1,40 @@ +/*------------------------------------------------------------------------------ +* 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 "Filter.h" +CL_CLASS_DEF(search,Query) +//#include "CachingWrapperFilter.h" + +CL_NS_DEF(search) + +class CLUCENE_EXPORT QueryFilter: public Filter +{ +private: + Query* query; + bool bDeleteQuery; +protected: + QueryFilter( const QueryFilter& copy ); +public: + QueryFilter( const Query* query ); + QueryFilter( Query* query, bool bDeleteQuery ); + + ~QueryFilter(); + + CL_NS(util)::BitSet* bits( CL_NS(index)::IndexReader* reader ); + + Filter *clone() const; + + TCHAR *toString(); +}; + +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/search/RangeFilter.cpp b/Pods/BRCLucene/src/core/CLucene/search/RangeFilter.cpp new file mode 100644 index 0000000..f802ea9 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/RangeFilter.cpp @@ -0,0 +1,148 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "CLucene/index/Term.h" +#include "CLucene/index/Terms.h" +#include "CLucene/index/IndexReader.h" +#include "CLucene/util/BitSet.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 ) + : fieldName(NULL), lowerTerm(NULL), upperTerm(NULL) + , includeLower(_includeLower), includeUpper(_includeUpper) +{ + if (NULL == _lowerTerm && NULL == _upperTerm) { + _CLTHROWT(CL_ERR_IllegalArgument, _T("At least one value must be non-null")); + } + if (_includeLower && NULL == _lowerTerm) { + _CLTHROWT(CL_ERR_IllegalArgument, _T("The lower bound must be non-null to be inclusive")); + } + if (_includeUpper && NULL == _upperTerm) { + _CLTHROWT(CL_ERR_IllegalArgument, _T("The upper bound must be non-null to be inclusive")); + } + + this->fieldName = STRDUP_TtoT(_fieldName); + if ( _lowerTerm != NULL ) + this->lowerTerm = STRDUP_TtoT(_lowerTerm); + if ( _upperTerm != NULL ) + this->upperTerm = STRDUP_TtoT(_upperTerm); +} + +RangeFilter::RangeFilter( const RangeFilter& copy ) : + fieldName( STRDUP_TtoT(copy.fieldName) ), + lowerTerm( STRDUP_TtoT(copy.lowerTerm) ), + upperTerm( STRDUP_TtoT(copy.upperTerm) ), + includeLower( copy.includeLower ), + includeUpper( copy.includeUpper ) +{ +} + +RangeFilter::~RangeFilter() +{ + _CLDELETE_LCARRAY( fieldName ); + _CLDELETE_LCARRAY( lowerTerm ); + _CLDELETE_LCARRAY( upperTerm ); +} + +RangeFilter* RangeFilter::Less( const TCHAR* _fieldName, const TCHAR* _upperTerm ) { + return _CLNEW RangeFilter( _fieldName, NULL, _upperTerm, false, true ); +} + +RangeFilter* RangeFilter::More( const TCHAR* _fieldName, const TCHAR* _lowerTerm ) { + return _CLNEW RangeFilter( _fieldName, _lowerTerm, NULL, true, false ); +} + +BitSet* RangeFilter::bits( IndexReader* reader ) +{ + BitSet* bts = _CLNEW BitSet( reader->maxDoc() ); + Term* term = NULL; + + Term* t = _CLNEW Term( fieldName, (lowerTerm ? lowerTerm : _T("")), false ); + TermEnum* enumerator = reader->terms( t ); // get enumeration of all terms after lowerValue + _CLDECDELETE( t ); + + if( enumerator->term(false) == NULL ) { + _CLLDELETE( enumerator ); + return bts; + } + + bool checkLower = false; + if( !includeLower ) // make adjustments to set to exclusive + checkLower = true; + + TermDocs* termDocs = reader->termDocs(); + + #define CLEANUP \ + _CLLDECDELETE( term ); \ + termDocs->close(); \ + _CLLDELETE( termDocs ); \ + enumerator->close(); \ + _CLLDELETE( enumerator ) + + try + { + do + { + term = enumerator->term(); + + if( term == NULL || _tcscmp(term->field(), fieldName) ) + break; + + if( !checkLower || lowerTerm == NULL || _tcscmp(term->text(), lowerTerm) > 0 ) + { + checkLower = false; + if( upperTerm != NULL ) + { + int compare = _tcscmp( upperTerm, 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() ); + }catch(CLuceneError& err){ + _CLDELETE(bts); + CLEANUP; + throw err; + } + CLEANUP; + + return bts; +} + +TCHAR* RangeFilter::toString() +{ + size_t len = (fieldName ? _tcslen(fieldName) : 0) + (lowerTerm ? _tcslen(lowerTerm) : 0) + (upperTerm ? _tcslen(upperTerm) : 0) + 8; + TCHAR* ret = _CL_NEWARRAY( TCHAR, len ); + ret[0] = 0; + _sntprintf( ret, len, _T("%s: [%s-%s]"), fieldName, (lowerTerm?lowerTerm:_T("")), (upperTerm?upperTerm:_T("")) ); + + return ret; +} + +Filter* RangeFilter::clone() const { + return _CLNEW RangeFilter(*this ); +} + +CL_NS_END diff --git a/Pods/BRCLucene/src/core/CLucene/search/RangeFilter.h b/Pods/BRCLucene/src/core/CLucene/search/RangeFilter.h new file mode 100644 index 0000000..e30925e --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/RangeFilter.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_RangeFilter_ +#define _lucene_search_RangeFilter_ + +#include "Filter.h" + +CL_CLASS_DEF(index,Term) + +CL_NS_DEF(search) + +/** + * A Filter that restricts search results to a range of values in a given + * field. + * + *

+ * This code borrows heavily from {@link RangeQuery}, but is implemented as a Filter + * + *

+ */ +class CLUCENE_EXPORT RangeFilter: public Filter +{ +private: + TCHAR* fieldName; + TCHAR* lowerTerm; + TCHAR* upperTerm; + bool includeLower; + bool includeUpper; + +public: + /** + * @param fieldName The field this range applies to + * @param lowerTerm The lower bound on this range + * @param upperTerm The upper bound on this range + * @param includeLower Does this range include the lower bound? + * @param includeUpper Does this range include the upper bound? + */ + RangeFilter( const TCHAR* fieldName, const TCHAR* lowerTerm, const TCHAR* upperTerm, + bool includeLower, bool includeUpper ); + virtual ~RangeFilter(); + + /** + * Constructs a filter for field fieldName matching + * less than or equal to upperTerm. + */ + static RangeFilter* Less( const TCHAR* fieldName, const TCHAR* upperTerm ); + + /** + * Constructs a filter for field fieldName matching + * more than or equal to lowerTerm. + */ + static RangeFilter* More( const TCHAR* fieldName, const TCHAR* lowerTerm ); + + /** + * 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(); + +protected: + RangeFilter( const RangeFilter& copy ); +}; + +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/search/RangeQuery.cpp b/Pods/BRCLucene/src/core/CLucene/search/RangeQuery.cpp new file mode 100644 index 0000000..8fe5643 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/RangeQuery.cpp @@ -0,0 +1,194 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "RangeQuery.h" + +#include "SearchHeader.h" +#include "Scorer.h" +#include "BooleanQuery.h" +#include "TermQuery.h" +#include "Similarity.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 char* RangeQuery::getObjectName() const{ + return getClassName(); + } + const char* RangeQuery::getClassName(){ + return "RangeQuery"; + } + + Query* RangeQuery::combine(CL_NS(util)::ArrayBase* 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; + } + + + Query* RangeQuery::rewrite(IndexReader* reader){ + + BooleanQuery* query = _CLNEW BooleanQuery( true ); + 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; + } + + 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()); + } + + Term* RangeQuery::getLowerTerm(bool pointer) const { + if ( pointer ) + return _CL_POINTER(lowerTerm); + else + return lowerTerm; + } + + Term* RangeQuery::getUpperTerm(bool pointer) const { + if ( pointer ) + return _CL_POINTER(upperTerm); + else + return upperTerm; + } + + bool RangeQuery::isInclusive() const { return inclusive; } + + +CL_NS_END diff --git a/Pods/BRCLucene/src/core/CLucene/search/RangeQuery.h b/Pods/BRCLucene/src/core/CLucene/search/RangeQuery.h new file mode 100644 index 0000000..841ff25 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/RangeQuery.h @@ -0,0 +1,92 @@ +/*------------------------------------------------------------------------------ +* 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_ + +//#include "SearchHeader.h" +//#include "Scorer.h" +//#include "TermQuery.h" +#include "Query.h" + +CL_CLASS_DEF(index,Term) +//#include "CLucene/index/Terms.h" + +CL_CLASS_DEF(util,StringBuffer) + + +CL_NS_DEF(search) + +/** + * A Query that matches documents within an exclusive range. A RangeQuery + * is built by QueryParser for input like [010 TO 120] but only if the QueryParser has + * the useOldRangeQuery property set to true. The QueryParser default behaviour is to use + * the newer ConstantScoreRangeQuery class. This is generally preferable because: + *
    + *
  • It is faster than RangeQuery
  • + *
  • Unlike RangeQuery, it does not cause a BooleanQuery.TooManyClauses exception if the range of values is large
  • + *
  • Unlike RangeQuery it does not influence scoring based on the scarcity of individual terms that may match
  • + *
+ * + * + * @see ConstantScoreRangeQuery + * + * + * @version $Id: RangeQuery.java 520891 2007-03-21 13:58:47Z yonik $ + */ +class CLUCENE_EXPORT 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 + * lowerTerm but less than upperTerm. + * 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 must be for the same field. + */ + RangeQuery(CL_NS(index)::Term* LowerTerm, CL_NS(index)::Term* UpperTerm, const bool Inclusive); + ~RangeQuery(); + + const char* getObjectName() const; + static const char* getClassName(); + + /** + * FIXME: Describe rewrite method here. + * + * @param reader an IndexReader value + * @return a Query value + * @exception IOException if an error occurs + */ + Query* rewrite(CL_NS(index)::IndexReader* reader); + + Query* combine(CL_NS(util)::ArrayBase* queries); + + /** Prints a user-readable version of this query. */ + TCHAR* toString(const TCHAR* field) const; + + Query* clone() const; + + bool equals(Query * other) const; + + /** Returns the lower term of this range query */ + CL_NS(index)::Term* getLowerTerm(bool pointer=true) const; + /** Returns the upper term of this range query */ + CL_NS(index)::Term* getUpperTerm(bool pointer=true) const; + bool isInclusive() const; + /** Returns true if the range query is inclusive */ + const TCHAR* getField() const; + + size_t hashCode() const; +}; + +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/search/Scorer.cpp b/Pods/BRCLucene/src/core/CLucene/search/Scorer.cpp new file mode 100644 index 0000000..9aa20fd --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/Scorer.cpp @@ -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. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "Scorer.h" +#include "SearchHeader.h" + +CL_NS_DEF(search) + +Scorer::Scorer(Similarity* _similarity) : similarity(_similarity){ +} + +Scorer::~Scorer(){ +} + +Similarity* Scorer::getSimilarity() const{ + return this->similarity; +} + +void Scorer::score(HitCollector* hc) { + while (next()) { + hc->collect(doc(), score()); + } +} + +bool Scorer::score( HitCollector* results, const int32_t maxDoc ) { + while( doc() < maxDoc ) { + results->collect( doc(), score() ); + if ( !next() ) + return false; + } + return true; +} +bool Scorer::sort(const Scorer* elem1, const Scorer* elem2){ + return elem1->doc() < elem2->doc(); +} + +CL_NS_END diff --git a/Pods/BRCLucene/src/core/CLucene/search/Scorer.h b/Pods/BRCLucene/src/core/CLucene/search/Scorer.h new file mode 100644 index 0000000..dab85fb --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/Scorer.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. +------------------------------------------------------------------------------*/ +#ifndef _lucene_search_Scorer_ +#define _lucene_search_Scorer_ + +CL_CLASS_DEF(search,Similarity) +CL_CLASS_DEF(search,HitCollector) +CL_CLASS_DEF(search,Explanation) + +CL_NS_DEF(search) + +/** +* Expert: Common scoring functionality for different types of queries. +* +*

+* A Scorer either iterates over documents matching a +* query in increasing order of doc Id, or provides an explanation of +* the score for a query for a given document. +*

+*

+* Document scores are computed using a given Similarity +* implementation. +*

+* @see BooleanQuery#setAllowDocsOutOfOrder +*/ +class CLUCENE_EXPORT Scorer { +private: + Similarity* similarity; +protected: + /** Constructs a Scorer. + * @param similarity The Similarity implementation used by this scorer. + */ + Scorer(Similarity* _similarity); + +public: + virtual ~Scorer(); + + /** Returns the Similarity implementation used by this scorer. */ + Similarity* getSimilarity() const; + + /** Scores and collects all matching documents. + * @param hc The collector to which all matching documents are passed through + * {@link HitCollector#collect(int, float)}. + *
When this method is used the {@link #explain(int)} method should not be used. + */ + virtual void score(HitCollector* hc) ; + + /** Expert: Collects matching documents in a range. Hook for optimization. + * Note that {@link #next()} must be called once before this method is called + * for the first time. + * @param hc The collector to which all matching documents are passed through + * {@link HitCollector#collect(int, float)}. + * @param max Do not score documents past this. + * @return true if more matching documents may remain. + */ + virtual bool score( HitCollector* results, const int32_t maxDoc ); + + /** + * Advances to the document matching this Scorer with the lowest doc Id + * greater than the current value of {@link #doc()} (or to the matching + * document with the lowest doc Id if next has never been called on + * this Scorer). + * + *

+ * When this method is used the {@link #explain(int)} method should not + * be used. + *

+ * + * @return true iff there is another document matching the query. + * @see BooleanQuery#setAllowDocsOutOfOrder + */ + virtual bool next() = 0; + + /** Returns the current document number matching the query. + * Initially invalid, until {@link #next()} is called the first time. + */ + virtual int32_t doc() const = 0; + + /** Returns the score of the current document matching the query. + * Initially invalid, until {@link #next()} or {@link #skipTo(int)} + * is called the first time. + */ + virtual float_t score() = 0; + + /** + * Skips to the document matching this Scorer with the lowest doc Id + * greater than or equal to a given target. + * + *

+ * The behavior of this method is undefined if the target specified is + * less than or equal to the current value of {@link #doc()}. + *

+ * Behaves as if written: + *

+	*   boolean skipTo(int target) {
+	*     do {
+	*       if (!next())
+	* 	     return false;
+	*     } while (target > doc());
+	*     return true;
+	*   }
+	* 
+ * Most implementations are considerably more efficient than that. + *

+ * + *

+ * When this method is used the {@link #explain(int)} method should not + * be used. + *

+ * + * @param target The target document number. + * @return true iff there is such a match. + * @see BooleanQuery#setAllowDocsOutOfOrder + */ + virtual bool skipTo(int32_t target) = 0; + + /** Returns an explanation of the score for a document. + *
When this method is used, the {@link #next()}, {@link #skipTo(int)} and + * {@link #score(HitCollector)} methods should not be used. + * @param doc The document number for the explanation. + */ + virtual Explanation* explain(int32_t doc) = 0; + + /** Returns a string which explains the object */ + virtual TCHAR* toString() = 0; + + static bool sort(const Scorer* elem1, const Scorer* elem2); +}; +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/search/ScorerDocQueue.cpp b/Pods/BRCLucene/src/core/CLucene/search/ScorerDocQueue.cpp new file mode 100644 index 0000000..514d1af --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/ScorerDocQueue.cpp @@ -0,0 +1,191 @@ +#include "CLucene/_ApiHeader.h" +#include "ScorerDocQueue.h" +#include "Scorer.h" + +CL_NS_DEF(util) + +class ScorerDocQueue::HeapedScorerDoc:LUCENE_BASE { +public: + Scorer* _scorer; + int32_t _doc; + + HeapedScorerDoc( Scorer* s ); + HeapedScorerDoc( Scorer* s, int32_t doc ); + ~HeapedScorerDoc(); + + void adjust(); +}; + +ScorerDocQueue::HeapedScorerDoc::HeapedScorerDoc( Scorer* scorer ) : _scorer(scorer), _doc(scorer->doc()) +{ +} + +ScorerDocQueue::HeapedScorerDoc::HeapedScorerDoc( Scorer* scorer, int32_t doc ) : _scorer(scorer), _doc(doc) +{ +} + +ScorerDocQueue::HeapedScorerDoc::~HeapedScorerDoc() +{ +} + +void ScorerDocQueue::HeapedScorerDoc::adjust() +{ + this->_doc = _scorer->doc(); +} + +ScorerDocQueue::ScorerDocQueue( int32_t maxSize ) : maxSize(maxSize), _size(0) +{ + int heapSize = maxSize + 1; + heap = _CL_NEWARRAY( HeapedScorerDoc*, heapSize ); + for ( int32_t i = 0; i < heapSize; i++ ) { + heap[i] = NULL; + } + topHsd = heap[1]; +} + +ScorerDocQueue::~ScorerDocQueue() +{ + clear(); + _CLDELETE_ARRAY( heap ); +} + +void ScorerDocQueue::put( Scorer* scorer ) +{ + _size++; + heap[ _size ] = _CLNEW HeapedScorerDoc( scorer ); + upHeap(); +} + +bool ScorerDocQueue::insert( Scorer* scorer ) +{ + if ( _size < maxSize ) { + put( scorer ); + return true; + } else { + int32_t docNr = scorer->doc(); + if (( _size > 0 ) && ( !( docNr < topHsd->_doc ))) { + _CLDELETE( heap[1] ); + heap[1] = _CLNEW HeapedScorerDoc( scorer, docNr ); + downHeap(); + return true; + } else { + return false; + } + } +} + +Scorer* ScorerDocQueue::pop() +{ + Scorer* result = topHsd->_scorer; + popNoResult(); + return result; +} + +void ScorerDocQueue::adjustTop() +{ + topHsd->adjust(); + downHeap(); +} + +int32_t ScorerDocQueue::size() +{ + return _size; +} + +void ScorerDocQueue::clear() +{ + for ( int32_t i = 0; i <= _size; i++ ) { + _CLDELETE( heap[i] ); + } + _size = 0; +} + +Scorer* ScorerDocQueue::top() +{ + return topHsd->_scorer; +} + +int32_t ScorerDocQueue::topDoc() +{ + return topHsd->_doc; +} + +float_t ScorerDocQueue::topScore() +{ + return topHsd->_scorer->score(); +} + +bool ScorerDocQueue::topNextAndAdjustElsePop() +{ + return checkAdjustElsePop( topHsd->_scorer->next() ); +} + +bool ScorerDocQueue::topSkipToAndAdjustElsePop( int32_t target ) +{ + return checkAdjustElsePop( topHsd->_scorer->skipTo( target )); +} + +bool ScorerDocQueue::checkAdjustElsePop( bool cond ) +{ + if ( cond ) { + topHsd->_doc = topHsd->_scorer->doc(); + } else { + _CLLDELETE( heap[1] ); + heap[1] = heap[_size]; + heap[_size] = NULL; + _size--; + } + downHeap(); + return cond; +} + +void ScorerDocQueue::popNoResult() +{ + _CLLDELETE( heap[1] ); + heap[1] = heap[_size]; + heap[_size] = NULL; + _size--; + downHeap(); +} + +void ScorerDocQueue::upHeap() +{ + int32_t i = _size; + HeapedScorerDoc* node = heap[i]; + int32_t j = i >> 1; + while (( j > 0 ) && ( node->_doc < heap[j]->_doc )) { + heap[i] = heap[j]; + i = j; + j = j >> 1; + } + heap[i] = node; + topHsd = heap[1]; +} + +void ScorerDocQueue::downHeap() +{ + int32_t i = 1; + HeapedScorerDoc* node = heap[i]; + int32_t j = i << 1; + int32_t k = j + 1; + + if (( k <= _size ) && ( heap[k]->_doc < heap[j]->_doc )) { + j = k; + } + + while (( j <= _size ) && ( heap[j]->_doc < node->_doc )) { + heap[i] = heap[j]; + i = j; + j = i << 1; + k = j + 1; + if (( k <= _size ) && ( heap[k]->_doc < heap[j]->_doc )) { + j = k; + } + } + + heap[i] = node; + topHsd = heap[1]; +} + +CL_NS_END + diff --git a/Pods/BRCLucene/src/core/CLucene/search/ScorerDocQueue.h b/Pods/BRCLucene/src/core/CLucene/search/ScorerDocQueue.h new file mode 100644 index 0000000..34e8c81 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/ScorerDocQueue.h @@ -0,0 +1,54 @@ +/*------------------------------------------------------------------------------ +* 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_ScorerDocQueue_ +#define _lucene_util_ScorerDocQueue_ + + +CL_CLASS_DEF(search,Scorer) + +CL_NS_USE(search) +CL_NS_DEF(util) + +class CLUCENE_EXPORT ScorerDocQueue:LUCENE_BASE { +private: + class HeapedScorerDoc; + + HeapedScorerDoc** heap; + HeapedScorerDoc* topHsd; + + int32_t maxSize; + int32_t _size; + +public: + + ScorerDocQueue( int32_t maxSize ); + virtual ~ScorerDocQueue(); + + void put( Scorer* scorer ); + bool insert( Scorer* scorer ); + Scorer* pop(); + void adjustTop(); + int32_t size(); + void clear(); + + Scorer* top(); + int32_t topDoc(); + float_t topScore(); + bool topNextAndAdjustElsePop(); + bool topSkipToAndAdjustElsePop( int32_t target ); + +private: + + bool checkAdjustElsePop( bool cond ); + void popNoResult(); + void upHeap(); + void downHeap(); + +}; + +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/search/SearchHeader.cpp b/Pods/BRCLucene/src/core/CLucene/search/SearchHeader.cpp new file mode 100644 index 0000000..3c48083 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/SearchHeader.cpp @@ -0,0 +1,232 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "SearchHeader.h" +#include "CLucene/document/Document.h" +#include "Similarity.h" +#include "BooleanQuery.h" +#include "Searchable.h" +#include "Hits.h" +#include "_FieldDocSortedHitQueue.h" +#include + +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(CL_NS(util)::ArrayBase* queries) { + std::vector allClauses; + + CL_NS(util)::ValueArray clauses; + for (size_t i = 0; i < queries->length; i++) { + assert(BooleanQuery::getClassName() == queries->values[i]->getObjectName()); + BooleanQuery* booleanQuery = (BooleanQuery*)queries->values[i]; + clauses.resize((booleanQuery->getClauseCount())); + booleanQuery->getClauses(clauses.values); + for (size_t j = 0; j < clauses.length; j++) { + allClauses.push_back(clauses.values[j]->clone()); + } + } + + bool coordDisabled = ( queries->length == 0 ) ? false : ((BooleanQuery*)queries->values[0])->isCoordDisabled(); + BooleanQuery* result = _CLNEW BooleanQuery(coordDisabled); + std::vector::iterator i = allClauses.begin(); + while ( i != allClauses.end() ){ + result->add(*i); + i++; + } + return result; +} + +Query::Query(const Query& clone):boost(clone.boost){ +} +Weight* Query::_createWeight(Searcher* /*searcher*/){ + _CLTHROWA(CL_ERR_UnsupportedOperation,"UnsupportedOperationException: Query::_createWeight"); +} + +Query::Query(): + boost(1.0f) +{ +} +Query::~Query(){ +} + +const char* Query::getQueryName() const{ return getObjectName(); } +/** Expert: called to re-write queries into primitive queries. */ +Query* Query::rewrite(CL_NS(index)::IndexReader* /*reader*/){ + return this; +} + +Query* Query::combine(CL_NS(util)::ArrayBase* queries){ + std::vector uniques; + for (size_t i = 0; i < queries->length; i++) { + Query* query = queries->values[i]; + CL_NS(util)::ValueArray clauses; + // check if we can split the query into clauses + bool splittable = query->instanceOf(BooleanQuery::getClassName()); + if(splittable){ + BooleanQuery* bq = (BooleanQuery*) query; + splittable = bq->isCoordDisabled(); + clauses.resize(bq->getClauseCount()); + bq->getClauses(clauses.values); + for (size_t j = 0; splittable && j < clauses.length; j++) { + splittable = (clauses[j]->getOccur() == BooleanClause::SHOULD); + } + } + if(splittable){ + for (size_t j = 0; j < clauses.length; j++) { + uniques.push_back(clauses[j]->getQuery()); + } + } else { + uniques.push_back(query); + } + } + // optimization: if we have just one query, just return it + if(uniques.size() == 1){ + return *uniques.begin(); + } + std::vector::iterator it = uniques.begin(); + BooleanQuery* result = _CLNEW BooleanQuery(true); + while (it != uniques.end() ){ + result->add(*it, BooleanClause::SHOULD); + + it++; + } + return result; +} +Similarity* Query::getSimilarity(Searcher* searcher) { + return searcher->getSimilarity(); +} +TCHAR* Query::toString() const{ + return toString(LUCENE_BLANK_STRING); +} + +void Query::setBoost(float_t b) { boost = b; } + +float_t Query::getBoost() const { return boost; } + +Weight* Query::weight(Searcher* searcher){ + Query* query = searcher->rewrite(this); + Weight* weight = query->_createWeight(searcher); + float_t sum = weight->sumOfSquaredWeights(); + float_t norm = getSimilarity(searcher)->queryNorm(sum); + weight->normalize(norm); + return weight; +} + +void Query::extractTerms( TermSet * termset ) const +{ + _CLTHROWA( CL_ERR_UnsupportedOperation,"UnsupportedOperationException: Query::extractTerms" ); +} + +TopFieldDocs::TopFieldDocs (int32_t totalHits, FieldDoc** fieldDocs, int32_t scoreDocsLen, SortField** fields): + TopDocs (totalHits, NULL, scoreDocsLen) +{ + this->fields = fields; + this->fieldDocs = fieldDocs; + this->scoreDocs = new ScoreDoc[scoreDocsLen]; + for (int32_t i=0;iscoreDocs[i] = this->fieldDocs[i]->scoreDoc; +} +TopFieldDocs::~TopFieldDocs(){ + if ( fieldDocs ){ + for (int32_t i=0;i= 0 +//Post - The instance has been created + +} + +TopDocs::~TopDocs(){ +//Func - Destructor +//Pre - true +//Post - The instance has been destroyed + + delete[] scoreDocs; +} + + + +Searcher::Searcher(){ + similarity = Similarity::getDefault(); +} +Searcher::~Searcher(){ +} + +Hits* Searcher::search(Query* query) { + return search(query, (Filter*)NULL ); +} + +Hits* Searcher::search(Query* query, Filter* filter) { + return _CLNEW Hits(this, query, filter); +} + +Hits* Searcher::search(Query* query, const Sort* sort){ + return _CLNEW Hits(this, query, NULL, sort); +} + +Hits* Searcher::search(Query* query, Filter* filter, const Sort* sort){ + return _CLNEW Hits(this, query, filter, sort); +} + +void Searcher::_search(Query* query, HitCollector* results) { + _search(query, NULL, results); +} + +void Searcher::setSimilarity(Similarity* similarity) { + this->similarity = similarity; +} + +Similarity* Searcher::getSimilarity(){ + return this->similarity; +} + +const char* Searcher::getClassName(){ + return "Searcher"; +} + +const char* Searcher::getObjectName() const{ + return Searcher::getClassName(); +} + + +Weight::~Weight(){ +} + +TCHAR* Weight::toString(){ + return STRDUP_TtoT(_T("Weight")); +} + + +Searchable::~Searchable(){ +} + + +CL_NS_END diff --git a/Pods/BRCLucene/src/core/CLucene/search/SearchHeader.h b/Pods/BRCLucene/src/core/CLucene/search/SearchHeader.h new file mode 100644 index 0000000..c7aa941 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/SearchHeader.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_search_SearchHeader_ +#define _lucene_search_SearchHeader_ + + +//#include "CLucene/index/IndexReader.h" +CL_CLASS_DEF(index,Term) +CL_CLASS_DEF(index,IndexReader) +//#include "Filter.h" +CL_CLASS_DEF(document,Document) +CL_CLASS_DEF(util,Comparable) +//#include "Sort.h" +//#include "CLucene/util/VoidList.h" +//#include "Explanation.h" +//#include "Similarity.h" + +CL_NS_DEF(search) + + class Query; + class Scorer; + class Explanation; + class Hits; + class Sort; + class FieldDoc; + class TopFieldDocs; + + /** Expert: Returned by low-level search implementations. + * @see TopDocs */ + struct CLUCENE_EXPORT ScoreDoc { + /** Expert: A hit document's number. + * @see Searcher#doc(int32_t) + */ + int32_t doc; + + /** Expert: The score of this document for the query. */ + float_t score; + }; + + /** Expert: Returned by low-level search implementations. + * @see Searcher#search(Query,Filter,int32_t) */ + class CLUCENE_EXPORT 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); + virtual ~TopDocs(); + + private: + /** Expert: Stores the maximum score value encountered, needed for normalizing. */ + //float_t maxScore; + }; + + /** Lower-level search API. + *
HitCollectors are primarily meant to be used to implement queries, + * sorting and filtering. + * @see Searcher#search(Query,HitCollector) + */ + class CLUCENE_EXPORT HitCollector: LUCENE_BASE { + public: + /** Called once for every non-zero scoring document, with the document number + * and its score. + * + *

If, for example, an application wished to collect all of the hits for a + * query in a BitSet, then it might:

+      *   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);
+      *       }
+      *     });
+      * 
+ * + *

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. + *

Note: The score 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 float_t score) = 0; + virtual ~HitCollector(){} + }; + + /** Expert: Calculate query weights and build query scorers. + * + *

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(float_t)}). This factor is then passed to + * {@link #normalize(float_t)}. At this point the weighting is complete and a + * scorer may be constructed by calling {@link #scorer(IndexReader)}. + */ + class CLUCENE_EXPORT Weight + { + public: + virtual ~Weight(); + + /** The query that this concerns. */ + virtual Query* getQuery() = 0; + + /** The weight for this query. */ + virtual float_t getValue() = 0; + + /** The sum of squared weights of contained query clauses. */ + virtual float_t sumOfSquaredWeights() = 0; + + /** Assigns the query normalization factor to this. */ + virtual void normalize(float_t 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 Explanation* explain(CL_NS(index)::IndexReader* reader, int32_t doc) = 0; + + virtual TCHAR* toString(); + }; + + class CLUCENE_EXPORT HitDoc + { + public: + float_t score; + int32_t id; + CL_NS(document)::Document* doc; + + HitDoc* next; // in doubly-linked cache + HitDoc* prev; // in doubly-linked cache + + HitDoc(const float_t s, const int32_t i); + virtual ~HitDoc(); + }; + + +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/search/Searchable.h b/Pods/BRCLucene/src/core/CLucene/search/Searchable.h new file mode 100644 index 0000000..86ab605 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/Searchable.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_Searcher_ +#define _lucene_search_Searcher_ + + +//#include "CLucene/index/IndexReader.h" +CL_CLASS_DEF(index,Term) +//#include "Filter.h" +CL_CLASS_DEF(document,Document) +//#include "Sort.h" +//#include "CLucene/util/VoidList.h" +//#include "Explanation.h" +//#include "Similarity.h" + +CL_NS_DEF(search) + + //predefine classes + class Query; + class Filter; + class HitCollector; + class TopDocs; + class Explanation; + class Hits; + class Similarity; + class TopFieldDocs; + class Sort; + + + /** The interface for search implementations. + * + *

Implementations provide search over a single index, over multiple + * indices, and over indices on remote servers. + */ + class CLUCENE_EXPORT Searchable: LUCENE_BASE { + public: + virtual ~Searchable(); + + /** Lower-level search API. + * + *

{@link HitCollector#collect(int32_t,float_t)} is called for every non-zero + * scoring document. + * + *

Applications should only use this if they need all 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 term. + * 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 n + * hits for query, applying filter if non-null. + * + *

Called by {@link Hits}. + * + *

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 i. + * 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 doc scored against + * query. + * + *

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 n hits for query, applying + * filter if non-null, and sorting the hits by the criteria in + * sort. + * + *

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 CLUCENE_EXPORT Searcher:public Searchable { + private: + /** The Similarity implementation used by this searcher. */ + Similarity* similarity; + public: + Searcher(); + virtual ~Searcher(); + + // Returns the documents matching query. + Hits* search(Query* query); + + // Returns the documents matching query and + // filter. + Hits* search(Query* query, Filter* filter); + + /** Returns documents matching query sorted by + * sort. + */ + Hits* search(Query* query, const Sort* sort); + + /** Returns documents matching query and filter, + * sorted by sort. + */ + Hits* search(Query* query, Filter* filter, const Sort* sort); + + /** Lower-level search API. + * + *

{@link HitCollector#collect(int32_t ,float_t)} is called for every non-zero + * scoring document. + * + *

Applications should only use this if they need all of the + * matching documents. The high-level search API ({@link + * Searcher#search(Query*)}) is usually more efficient, as it skips + * non-high-scoring hits. + *

Note: The score 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); + + /** Expert: Set the Similarity implementation used by this Searcher. + * + * @see Similarity#setDefault(Similarity) + */ + void setSimilarity(Similarity* similarity); + + /** Expert: Return the Similarity implementation used by this Searcher. + * + *

This defaults to the current value of {@link Similarity#getDefault()}. + */ + Similarity* getSimilarity(); + + virtual const char* getObjectName() const; + static const char* getClassName(); + + virtual void _search(Query* query, Filter* filter, HitCollector* results) = 0; + }; + +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/search/Similarity.cpp b/Pods/BRCLucene/src/core/CLucene/search/Similarity.cpp new file mode 100644 index 0000000..21da809 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/Similarity.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. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "Similarity.h" + +#include "CLucene/index/Term.h" +#include "SearchHeader.h" +#include "Searchable.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. + float_t 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 + }; + + float_t Similarity::byteToFloat(uint8_t b) { + return NORM_TABLE[b]; + } + + uint8_t Similarity::floatToByte(float_t f) { + return Similarity::encodeNorm(f); + } + +#else + + /** Cache of decoded bytes. */ + float_t 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(float_t 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; + } + + float_t intBitsToFloat(int32_t bits) + { + clvalue u; + u.i = bits; + return u.f; + } + + + float_t 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(float_t 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 float_t 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* Similarity_defaultImpl=NULL; + + void Similarity::setDefault(Similarity* similarity) { + _CLDELETE(Similarity_defaultImpl); + Similarity_defaultImpl = similarity; + } + + Similarity* Similarity::getDefault() { + if ( Similarity_defaultImpl == NULL ){ + Similarity_defaultImpl = _CLNEW DefaultSimilarity(); + } + return Similarity_defaultImpl; + } + void Similarity::_shutdown(){ + _CLDELETE(Similarity_defaultImpl); + } + + float_t 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(float_t 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 + } + + + float_t Similarity::idf(Term* term, Searcher* searcher) { + return idf(searcher->docFreq(term), searcher->maxDoc()); + } + + + float_t Similarity::idf(CL_NS(util)::CLVector* terms, Searcher* searcher) { + float_t _idf = 0.0f; + for (CL_NS(util)::CLVector::iterator i = terms->begin(); i != terms->end(); i++ ) { + _idf += idf((Term*)*i, searcher); + } + return _idf; + } + + Similarity::~Similarity(){ + } + + + + + DefaultSimilarity::DefaultSimilarity(){ + } + DefaultSimilarity::~DefaultSimilarity(){ + } + + float_t DefaultSimilarity::lengthNorm(const TCHAR* /*fieldName*/, int32_t numTerms) { + if ( numTerms == 0 ) //prevent div by zero + return 0; + return (1.0 / sqrt((float_t)numTerms)); + } + + float_t DefaultSimilarity::queryNorm(float_t sumOfSquaredWeights) { + if ( sumOfSquaredWeights == 0 ) //prevent div by zero + return 0.0f; + return (float_t)(1.0 / sqrt(sumOfSquaredWeights)); + } + + float_t DefaultSimilarity::tf(float_t freq) { + return sqrt(freq); + } + + float_t DefaultSimilarity::sloppyFreq(int32_t distance) { + return 1.0f / (distance + 1); + } + + float_t DefaultSimilarity::idf(int32_t docFreq, int32_t numDocs) { + return (float_t)(log(numDocs/(float_t)(docFreq+1)) + 1.0); + } + + float_t DefaultSimilarity::coord(int32_t overlap, int32_t maxOverlap) { + if ( maxOverlap == 0 ) + return 0.0f; + return overlap / (float_t)maxOverlap; + } +CL_NS_END diff --git a/Pods/BRCLucene/src/core/CLucene/search/Similarity.h b/Pods/BRCLucene/src/core/CLucene/search/Similarity.h new file mode 100644 index 0000000..388898a --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/Similarity.h @@ -0,0 +1,279 @@ +/*------------------------------------------------------------------------------ +* 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_ + +#include "CLucene/util/VoidList.h" +CL_CLASS_DEF(index,Term) + +CL_NS_DEF(search) + +class Searcher; +class DefaultSimilarity; + +/** Expert: Scoring API. +*

Subclasses implement search scoring. +* +*

The score of query q for document d is defined +* in terms of these methods as follows: +* +* +* +* +* +* +* +* +* +* +* +*
score(q,d) =
+* Σ +* {@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) +*  * +* {@link #coord(int32_t,int32_t) coord}(q,d) * +* {@link #queryNorm(float_t) queryNorm}(q) +*
+* t in q +*
+* +* @see #setDefault(Similarity) +* @see IndexWriter#setSimilarity(Similarity) +* @see Searcher#setSimilarity(Similarity) +*/ +class CLUCENE_EXPORT 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. + * + *

This is initially an instance of {@link DefaultSimilarity}. + * + * @see Searcher#setSimilarity(Similarity) + * @see IndexWriter#setSimilarity(Similarity) + */ + static Similarity* getDefault(); + + /** Cleanup static data */ + static CLUCENE_LOCAL void _shutdown(); + + /** Encodes a normalization factor for storage in an index. + * + *

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(float_t) + */ + static uint8_t encodeNorm(float_t f); + + /** Decodes a normalization factor stored in an index. + * @see #encodeNorm(float_t) + */ + static float_t decodeNorm(uint8_t b); + + static uint8_t floatToByte(float_t f); + static float_t byteToFloat(uint8_t b); + + /** Computes a score factor for a phrase. + * + *

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 + */ + float_t idf(CL_NS(util)::CLVector* terms, Searcher* searcher); + + template + float_t idf( TermIterator first, TermIterator last, Searcher* searcher ) + { + float_t _idf = 0.0f; + for( ; first != last; first++ ) { + _idf += idf(*first, searcher); + } + return _idf; + } + + //float_t idf(Term** terms, Searcher* searcher); + + + /** Computes a score factor for a simple term. + * + *

The default implementation is:

+   *   return idf(searcher.docFreq(term), searcher.maxDoc());
+   * 
+ * + * 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 + */ + float_t 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. + * + *

Terms and phrases repeated in a document indicate the topic of the + * document, so implementations of this method usually return larger values + * when freq is large, and smaller values when freq + * is small. + * + *

The default implementation calls {@link #tf(float_t)}. + * + * @param freq the frequency of a term within a document + * @return a score factor based on a term's within-document frequency + */ + inline float_t tf(int32_t freq){ return tf((float_t)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. + * + *

Matches in longer fields are less precise, so implemenations of this + * method usually return smaller values when numTokens is large, + * and larger values when numTokens is small. + * + *

That these values are computed under {@link + * IndexWriter#addDocument(Document)} and stored then using + * {#encodeNorm(float_t)}. 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 + * fieldName of doc. + * @return a normalization factor for hits on this field of this document + * + * @see Field#setBoost(float_t) + */ + virtual float_t 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. + * + *

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 float_t queryNorm(float_t 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(float_t)}. + * + *

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 float_t 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. + * + *

Terms and phrases repeated in a document indicate the topic of the + * document, so implemenations of this method usually return larger values + * when freq is large, and smaller values when freq + * 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 float_t tf(float_t 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. + * + *

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 float_t 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. + * + *

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 float_t coord(int32_t overlap, int32_t maxOverlap) = 0; +}; + + +/** Expert: Default scoring implementation. */ +class CLUCENE_EXPORT DefaultSimilarity: public Similarity { +public: + DefaultSimilarity(); + ~DefaultSimilarity(); + + /** Implemented as 1/sqrt(numTerms). */ + float_t lengthNorm(const TCHAR* fieldName, int32_t numTerms); + + /** Implemented as 1/sqrt(sumOfSquaredWeights). */ + float_t queryNorm(float_t sumOfSquaredWeights); + + /** Implemented as sqrt(freq). */ + inline float_t tf(float_t freq); + + /** Implemented as 1 / (distance + 1). */ + float_t sloppyFreq(int32_t distance); + + /** Implemented as log(numDocs/(docFreq+1)) + 1. */ + float_t idf(int32_t docFreq, int32_t numDocs); + + /** Implemented as overlap / maxOverlap. */ + float_t coord(int32_t overlap, int32_t maxOverlap); +}; + +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/search/SloppyPhraseScorer.cpp b/Pods/BRCLucene/src/core/CLucene/search/SloppyPhraseScorer.cpp new file mode 100644 index 0000000..be9d38c --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/SloppyPhraseScorer.cpp @@ -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. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "Scorer.h" +#include "CLucene/index/Terms.h" +#include "SearchHeader.h" +#include "_PhrasePositions.h" +#include "_SloppyPhraseScorer.h" +#include "Similarity.h" + +CL_NS_USE(index) +CL_NS_DEF(search) + + SloppyPhraseScorer::SloppyPhraseScorer(Weight* _weight, TermPositions** tps, int32_t* offsets, + Similarity* similarity, int32_t _slop, uint8_t* norms): + PhraseScorer(_weight,tps,offsets,similarity,norms),slop(_slop),repeats(NULL),repeatsLen(0){ + //Func - Constructor + //Pre - tps != NULL + // tpsLength >= 0 + // n != NULL + //Post - Instance has been created + + CND_PRECONDITION(tps != NULL, "tps is NULL"); + } + + SloppyPhraseScorer::~SloppyPhraseScorer(){ + _CLDELETE_LARRAY(repeats); + } + + float_t SloppyPhraseScorer::phraseFreq() { + + CND_PRECONDITION(first != NULL,"first is NULL"); + CND_PRECONDITION(last != NULL,"last is NULL"); + CND_PRECONDITION(pq != NULL,"pq is NULL"); + + int32_t end = initPhrasePositions(); + float_t freq = 0.0f; + bool done = (end<0); + + while (!done) { + PhrasePositions* pp = pq->pop(); + int32_t start = pp->position; + int32_t next = pq->top()->position; + + bool tpsDiffer = true; + for (int32_t pos = start; pos <= next || !tpsDiffer; pos = pp->position) { + if (pos<=next && tpsDiffer) + start = pos; // advance pp to min window + if (!pp->nextPosition()) { + done = true; // ran out of a term -- done + break; + } + tpsDiffer = !pp->repeats || termPositionsDiffer(pp); + } + + const int32_t matchLength = end - start; + if (matchLength <= slop) + freq += getSimilarity()->sloppyFreq(matchLength); // score match + + if (pp->position > end) + end = pp->position; + pq->put(pp); // restore pq + + } + return freq; + } + + int32_t SloppyPhraseScorer::initPhrasePositions() { + int32_t end = 0; + PhrasePositions* pp = NULL; // used in order to solve msvc6 scope issues + + // no repeats at all (most common case is also the simplest one) + if (checkedRepeats && repeats==NULL) { + // build queue from list + pq->clear(); + for (pp = first; pp != NULL; pp = pp->_next) { + pp->firstPosition(); + if (pp->position > end) + end = pp->position; + pq->put(pp); // build pq from list + } + return end; + } + + // position the pp's + for (pp = first; pp != NULL; pp = pp->_next) + pp->firstPosition(); + + // one time initializatin for this scorer + if (!checkedRepeats) { + checkedRepeats = true; + // check for repeats + // TODO: is this correct, filtering clones using CLHashMap??? + PhrasePositionsMap* m = NULL; + for (pp = first; pp != NULL; pp = pp->_next) { + int32_t tpPos = pp->position + pp->offset; + for (PhrasePositions* pp2 = pp->_next; pp2 != NULL; pp2 = pp2->_next) { + int32_t tpPos2 = pp2->position + pp2->offset; + if (tpPos2 == tpPos) { + if (m == NULL) + m = new PhrasePositionsMap(false,false); + pp->repeats = true; + pp2->repeats = true; + m->put(pp,NULL); + m->put(pp2,NULL); + } + } + } + if (m!=NULL) { + repeatsLen = m->size(); + repeats = _CL_NEWARRAY(PhrasePositions*, repeatsLen + 1); + PhrasePositionsMap::iterator itr = m->begin(); + size_t pos = 0; + while ( itr!=m->end() ){ + repeats[pos] = itr->first; + ++itr; + ++pos; + } + repeats[repeatsLen + 1] = NULL; // NULL terminate the array + } + delete m; + } + + // with repeats must advance some repeating pp's so they all start with differing tp's + if (repeats!=NULL) { + // must propagate higher offsets first (otherwise might miss matches). + qsort(repeats, repeatsLen, sizeof(PhrasePositions*), comparePhrasePositions); + // now advance them + for (size_t i = 0; i < repeatsLen; i++) { + PhrasePositions* pp = repeats[i]; + while (!termPositionsDiffer(pp)) { + if (!pp->nextPosition()) + return -1; // ran out of a term -- done + } + } + } + + // build queue from list + pq->clear(); + for (pp = first; pp != NULL; pp = pp->_next) { + if (pp->position > end) + end = pp->position; + pq->put(pp); // build pq from list + } + + return end; + } + + // disalow two pp's to have the same tp position, so that same word twice + // in query would go elswhere in the matched doc + bool SloppyPhraseScorer::termPositionsDiffer(PhrasePositions* pp) { + // efficiency note: a more efficient implemention could keep a map between repeating + // pp's, so that if pp1a, pp1b, pp1c are repeats term1, and pp2a, pp2b are repeats + // of term2, pp2a would only be checked against pp2b but not against pp1a, pp1b, pp1c. + // However this would complicate code, for a rather rare case, so choice is to compromise here. + const int32_t tpPos = pp->position + pp->offset; + for (size_t i = 0; i < repeatsLen; i++) { + PhrasePositions* pp2 = repeats[i]; + if (pp2 == pp) + continue; + const int32_t tpPos2 = pp2->position + pp2->offset; + if (tpPos2 == tpPos) + return false; + } + return true; + } + + TCHAR* SloppyPhraseScorer::toString(){ + return stringDuplicate(_T("SloppyPhraseScorer")); + } +CL_NS_END diff --git a/Pods/BRCLucene/src/core/CLucene/search/Sort.cpp b/Pods/BRCLucene/src/core/CLucene/search/Sort.cpp new file mode 100644 index 0000000..03e0af5 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/Sort.cpp @@ -0,0 +1,340 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "Sort.h" +#include "Compare.h" +#include "SearchHeader.h" +#include "CLucene/util/_StringIntern.h" +#include "CLucene/util/StringBuffer.h" + +CL_NS_USE(util) +CL_NS_DEF(search) + + + SortField* SortField_FIELD_SCORE = NULL; + SortField* SortField_FIELD_DOC = NULL; + SortField* SortField::FIELD_SCORE(){ + if ( SortField_FIELD_SCORE == NULL ) + SortField_FIELD_SCORE = _CLNEW SortField (NULL, DOCSCORE,false); + return SortField_FIELD_SCORE; + } + SortField* SortField::FIELD_DOC(){ + if ( SortField_FIELD_DOC == NULL ) + SortField_FIELD_DOC = _CLNEW SortField (NULL, DOC,false); + return SortField_FIELD_DOC; + } + void SortField::_shutdown(){ + _CLDELETE(SortField_FIELD_SCORE); + _CLDELETE(SortField_FIELD_DOC); + } + + Sort* Sort_RELEVANCE = NULL; + Sort* Sort_INDEXORDER = NULL; + Sort* Sort::RELEVANCE(){ + if ( Sort_RELEVANCE == NULL ) + Sort_RELEVANCE = _CLNEW Sort(); + return Sort_RELEVANCE; + } + Sort* Sort::INDEXORDER(){ + if ( Sort_INDEXORDER == NULL ) + Sort_INDEXORDER = _CLNEW Sort (SortField::FIELD_DOC()); + return Sort_INDEXORDER; + } + void Sort::_shutdown(){ + _CLDELETE(Sort_RELEVANCE); + _CLDELETE(Sort_INDEXORDER); + } + + ScoreDocComparator* ScoreDocComparator_INDEXORDER = NULL; + ScoreDocComparator* ScoreDocComparator_RELEVANCE = NULL; + ScoreDocComparator* ScoreDocComparator::INDEXORDER(){ + if ( ScoreDocComparator_INDEXORDER == NULL ) + ScoreDocComparator_INDEXORDER = _CLNEW ScoreDocComparators::IndexOrder; + return ScoreDocComparator_INDEXORDER; + } + ScoreDocComparator* ScoreDocComparator::RELEVANCE(){ + if ( ScoreDocComparator_RELEVANCE == NULL ) + ScoreDocComparator_RELEVANCE = _CLNEW ScoreDocComparators::Relevance; + return ScoreDocComparator_RELEVANCE; + } + void ScoreDocComparator::_shutdown(){ + _CLDELETE(ScoreDocComparator_INDEXORDER); + _CLDELETE(ScoreDocComparator_RELEVANCE); + } + + + + SortField::SortField (const TCHAR* field) { + this->type = AUTO; + this->reverse = false; + this->field = CLStringIntern::intern(field); + this->factory = NULL; + } + + SortField::SortField (const TCHAR* field, int32_t type, bool reverse) { + this->field = (field != NULL) ? CLStringIntern::intern(field) : field; + this->type = type; + this->reverse = reverse; + this->factory = NULL; + } + + SortField::SortField(const SortField& clone){ + this->field = (clone.field != NULL) ? CLStringIntern::intern(clone.field) : clone.field; + this->type = clone.type; + this->reverse = clone.reverse; + this->factory = clone.factory; + } + SortField* SortField::clone() const{ + return _CLNEW SortField(*this); + } + + const TCHAR* SortField::getField() const { + return field; + } + int32_t SortField::getType() const { + return type; + } + bool SortField::getReverse() const { + return reverse; + } + SortComparatorSource* SortField::getFactory() const { + return factory; + } + + /** 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 null. + * @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 null. + * @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; + }*/ + + + SortField::SortField (const TCHAR* field, SortComparatorSource* comparator, bool reverse) { + this->field = (field != NULL) ? CLStringIntern::intern(field): 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("")); + break; + + case DOC: + buffer.append(_T("")); + break; + + case CUSTOM: + buffer.append (_T("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(); + } + + + + + + + + + + + + + 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); + } + } + + Sort::Sort (const TCHAR* field, bool reverse) { + this->fields=NULL; + setSort (field, reverse); + } + + Sort::Sort (const TCHAR** fields) { + this->fields=NULL; + setSort (fields); + } + Sort::Sort (SortField* field) { + this->fields=NULL; + setSort (field); + } + + Sort::Sort (SortField** fields) { + this->fields=NULL; + setSort (fields); + } + + 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; + } + + 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; + } + + + void Sort::setSort (SortField* field) { + clear(); + + this->fields = _CL_NEWARRAY(SortField*,2); + this->fields[0] = field; + this->fields[1] = NULL; + } + + 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;ifields[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(','); + + TCHAR* p = fields[i]->toString(); + buffer.append(p); + _CLDELETE_CARRAY(p); + + i++; + } + + return buffer.toString(); + } + + + + + + + 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/Pods/BRCLucene/src/core/CLucene/search/Sort.h b/Pods/BRCLucene/src/core/CLucene/search/Sort.h new file mode 100644 index 0000000..e917293 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/Sort.h @@ -0,0 +1,426 @@ +/*------------------------------------------------------------------------------ +* 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_ + + +//#include "CLucene/index/IndexReader.h" +//#include "SearchHeader.h" +//#include "CLucene/util/Equator.h" +CL_CLASS_DEF(index,IndexReader) +CL_CLASS_DEF(util,Comparable) + +CL_NS_DEF(search) + +//predefine + class SortField; + class Sort; + +/** + * Expert: Compares two ScoreDoc objects for sorting. + * + */ + class CLUCENE_EXPORT ScoreDocComparator { + protected: + ScoreDocComparator(){} + public: + virtual ~ScoreDocComparator(); + + /** + * Compares two ScoreDoc objects and returns a result indicating their + * sort order. + * @param i First ScoreDoc + * @param j Second ScoreDoc + * @return a negative integer if i should come before j
+ * a positive integer if i should come after j
+ * 0 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 SortField.SCORE, + * SortField.DOC, SortField.STRING, + * SortField.INTEGER, SortField.FLOAT or + * SortField.CUSTOM. It is not valid to return + * SortField.AUTO. + * 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(); + + /** Cleanup static data */ + static CLUCENE_LOCAL void _shutdown(); + }; + +/** + * Expert: returns a comparator for sorting ScoreDocs. + * + */ +class CLUCENE_EXPORT 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 Name of the 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. + * + *

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 CLUCENE_EXPORT 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. + *

For example, if the Terms contained integer values, this method + * would return new Integer(termtext). 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 termtext that sorts + * according to the natural order of termtext. + * @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 CLUCENE_EXPORT 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 term values as encoded Longs. Sort values are Long and + * lower values are at the front. */ + LUCENE_STATIC_CONSTANT(int32_t, LONG=6); + + /** Sort using term values as encoded Doubles. Sort values are Double and + * lower values are at the front. */ + LUCENE_STATIC_CONSTANT(int32_t, DOUBLE=7); + + + /** 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(); + + /** Cleanup static data */ + static CLUCENE_LOCAL void _shutdown(); + + /** 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 null. + */ + 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 + + /** 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 null if + * type is SCORE or DOC. + * @param type Type of values in the terms. + * @param reverse True if natural order should be reversed (default=false). + */ + SortField (const TCHAR* field, int32_t type, bool reverse); + + /* + SortField (TCHAR* field, Locale* locale) { + SortField (TCHAR* field, Locale* locale, bool reverse);*/ + + /** Creates a sort, possibly in reverse, with a custom comparison function. + * @param field Name of field to sort by; cannot be null. + * @param comparator Returns a comparator for sorting hits. + * @param reverse True if natural order should be reversed (default=false). + */ + SortField (const TCHAR* field, SortComparatorSource* comparator, bool reverse=false); + + /** Returns the name of the field. Could return null + * if the sort is by SCORE or DOC. + * @return Name of field, possibly null. + */ + const TCHAR* getField() const; + + 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; + + /** Returns the Locale by which term values are interpreted. + * May return null if no Locale was specified. + * @return Locale, or null. + */ + /*Locale getLocale() { + return locale; + }*/ + + /** Returns whether the sort should be reversed. + * @return True if natural order should be reversed. + */ + bool getReverse() const; + + SortComparatorSource* getFactory() const; + + TCHAR* toString() const; +}; + + + +/** + * Encapsulates sort criteria for returned hits. + * + *

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: + * + *

document.add (new Field ("byNumber", Integer.toString(x), false, true, false)); + *
+ * + *

Valid Types of Values

+ * + *

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. + * + *

Integer term values should contain only digits and an optional + * preceeding negative sign. Values must be base 10 and in the range + * Integer.MIN_VALUE and Integer.MAX_VALUE 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 1..n where + * 1 is the first and n the last). + * + *

Float term values should conform to values accepted by + * {@link Float Float.valueOf(String)} (except that NaN + * and Infinity are not supported). + * Documents which should appear first in the sort + * should have low values, later documents high values. + * + *

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. + * + *

Object Reuse

+ * + *

One of these objects can be + * used multiple times and the sort order changed between usages. + * + *

This class is thread safe. + * + *

Memory Usage

+ * + *

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 IndexReader.maxDoc() for each field + * name for which a sort is performed. In other words, the size of the + * cache in bytes is: + * + *

4 * IndexReader.maxDoc() * (# of different fields actually used to sort) + * + *

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. + * + *

Note that the size of the cache is not affected by how many + * fields are in the index and might be used to sort - only by + * the ones actually used to sort a result set. + * + *

The cache is cleared each time a new IndexReader is + * passed in, or if the value returned by maxDoc() + * 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 CLUCENE_EXPORT 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(); + + /** Cleanup static data */ + static CLUCENE_LOCAL void _shutdown(); + + + /** 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(); + + /** Sorts possibly in reverse by the terms in field then by + * index order (document number). The type of value in field is determined + * automatically. + * @see SortField#AUTO + */ + Sort (const TCHAR* field, bool reverse=false); + + /** Sorts in succession by the terms in each field. + * The type of value in field is determined + * automatically. + * @see SortField#AUTO + */ + Sort (const TCHAR** fields); + + /** Sorts by the criteria in the given SortField. */ + Sort (SortField* field); + + /** Sorts in succession by the criteria in each SortField. */ + Sort (SortField** fields); + + /** Sets the sort to the terms in field possibly in reverse, + * then by index order (document number). */ + void setSort (const TCHAR* field, bool reverse=false); + + /** Sets the sort to the terms in each field in succession. */ + void setSort (const TCHAR** fieldnames); + + /** Sets the sort to the given criteria. */ + void setSort (SortField* field); + + /** Sets the sort to the given criteria in succession. */ + 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/Pods/BRCLucene/src/core/CLucene/search/SpanFilter.h b/Pods/BRCLucene/src/core/CLucene/search/SpanFilter.h new file mode 100644 index 0000000..88721cf --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/SpanFilter.h @@ -0,0 +1,39 @@ +/*------------------------------------------------------------------------------ + * 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_SpanFilter_ +#define _lucene_search_SpanFilter_ + +#include "Filter.h" +#include "SpanFilterResult.h" + +CL_NS_DEF(search) + +/** Abstract base class providing a mechanism to restrict searches to a subset + of an index and also maintains and returns position information. + + This is useful if you want to compare the positions from a SpanQuery with the positions of items in + a filter. For instance, if you had a SpanFilter that marked all the occurrences of the word "foo" in documents, + and then you entered a new SpanQuery containing bar, you could not only filter by the word foo, but you could + then compare position information for post processing. + */ +class CLUCENE_EXPORT SpanFilter : public Filter +{ +public: + virtual ~SpanFilter() {} + + /** Returns a SpanFilterResult with true for documents which should be permitted in + * search results, and false for those that should not and Spans for where the true docs match. + * @param reader The {@link org.apache.lucene.index.IndexReader} to load position and bitset information from + * @return A {@link SpanFilterResult} + * @throws CLuceneError if there was an issue accessing the necessary information + */ + virtual SpanFilterResult * bitSpans( CL_NS(index)::IndexReader * reader ) = 0; + +}; + +CL_NS_END +#endif // _lucene_search_SpanFilter_ diff --git a/Pods/BRCLucene/src/core/CLucene/search/SpanFilterResult.h b/Pods/BRCLucene/src/core/CLucene/search/SpanFilterResult.h new file mode 100644 index 0000000..c262282 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/SpanFilterResult.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_search_SpanFilterResult_ +#define _lucene_search_SpanFilterResult_ + +#include "CLucene/util/BitSet.h" +#include "CLucene/util/VoidList.h" + +CL_NS_DEF(search) + +/** + * The results of a SpanQueryFilter. + * Wraps the BitSet and the position information from the SpanQuery + * + * NOTE: This API is still experimental and subject to change. + **/ +class CLUCENE_EXPORT SpanFilterResult +{ +public: + class StartEnd + { + private: + int32_t start; + int32_t end; + + public: + StartEnd( int32_t _start, int32_t _end ) : start(_start), end(_end) + {} + + virtual ~StartEnd() + {} + + /** + * @return The end position of this match + */ + int32_t getEnd() + { + return end; + } + + /** + * The Start position + * @return The start position of this match + */ + int32_t getStart() + { + return start; + } + }; + + + class PositionInfo + { + private: + int32_t doc; + CL_NS(util)::CLList* positions; + + public: + PositionInfo( int32_t _doc ) : doc(_doc) + { + positions = _CLNEW CL_NS(util)::CLList(); + } + + virtual ~PositionInfo() + { + _CLLDELETE( positions ); + } + + void addPosition( int32_t start, int32_t end ) + { + positions->push_back( _CLNEW StartEnd( start, end )); + } + + int32_t getDoc() + { + return doc; + } + + /** + * @return A List of {@link org.apache.lucene.search.SpanFilterResult.StartEnd} objects + */ + CL_NS(util)::CLList* getPositions() + { + return positions; + } + }; + + +private: + CL_NS(util)::BitSet * bits; + CL_NS(util)::CLList * positions; //Spans spans; + +public: + /** + * Constructor + * @param bits The bits for the Filter + * @param positions A List of {@link org.apache.lucene.search.SpanFilterResult.PositionInfo} objects + */ + SpanFilterResult( CL_NS(util)::BitSet * _bits, CL_NS(util)::CLList * _positions ) : + bits( _bits ), positions( _positions ) + {} + + virtual ~SpanFilterResult() + {} + + /** + * The first entry in the array corresponds to the first "on" bit. + * Entries are increasing by document order + * @return A List of PositionInfo objects + */ + CL_NS(util)::CLList * getPositions() + { + return positions; + } + + CL_NS(util)::BitSet * getBits() + { + return bits; + } +}; + +CL_NS_END +#endif // _lucene_search_SpanFilterResult_ + + + diff --git a/Pods/BRCLucene/src/core/CLucene/search/SpanQueryFilter.cpp b/Pods/BRCLucene/src/core/CLucene/search/SpanQueryFilter.cpp new file mode 100644 index 0000000..2d55f42 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/SpanQueryFilter.cpp @@ -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. + ------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "SpanQueryFilter.h" +#include "CLucene/index/IndexReader.h" +#include "CLucene/search/spans/Spans.h" + + +CL_NS_DEF(search) + +SpanQueryFilter::SpanQueryFilter() : query( NULL ) +{} + +SpanQueryFilter::SpanQueryFilter( const CL_NS2(search,spans)::SpanQuery * query ) +{ + this->query = (CL_NS2(search,spans)::SpanQuery *) query->clone(); + bDeleteQuery = true; +} + +SpanQueryFilter::SpanQueryFilter( CL_NS2(search,spans)::SpanQuery * query, bool bDeleteQuery ) +{ + this->query = query; + this->bDeleteQuery = bDeleteQuery; +} + +SpanQueryFilter::SpanQueryFilter( const SpanQueryFilter& copy ) +{ + this->query = (CL_NS2(search,spans)::SpanQuery *) copy.query->clone(); + bDeleteQuery = true; +} + +SpanQueryFilter::~SpanQueryFilter() +{ + if( bDeleteQuery ) + _CLDELETE( query ); +} + +Filter* SpanQueryFilter::clone() const +{ + return _CLNEW SpanQueryFilter( *this ); +} + +CL_NS(util)::BitSet * SpanQueryFilter::bits( CL_NS(index)::IndexReader * reader ) +{ + SpanFilterResult * result = bitSpans( reader ); + CL_NS(util)::BitSet * bits = result->getBits(); + _CLLDELETE( result ); + return bits; +} + +SpanFilterResult * SpanQueryFilter::bitSpans( CL_NS(index)::IndexReader * reader ) +{ + CL_NS(util)::BitSet * bits = _CLNEW CL_NS(util)::BitSet( reader->maxDoc() ); + CL_NS2(search,spans)::Spans * spans = query->getSpans( reader ); + CL_NS(util)::CLList * tmp = new CL_NS(util)::CLList(); + int32_t currentDoc = -1; + SpanFilterResult::PositionInfo * currentInfo = NULL; + + while( spans->next() ) + { + int32_t doc = spans->doc(); + bits->set( doc ); + if( currentDoc != doc ) + { + currentInfo = _CLNEW SpanFilterResult::PositionInfo( doc ); + tmp->push_back( currentInfo ); + currentDoc = doc; + } + currentInfo->addPosition( spans->start(), spans->end() ); + } + return _CLNEW SpanFilterResult( bits, tmp ); +} + +TCHAR* SpanQueryFilter::toString() +{ + TCHAR* qt = query->toString(); + size_t len = _tcslen( qt ) + 21; + TCHAR* ret = _CL_NEWARRAY( TCHAR, len ); + ret[0] = 0; + _sntprintf( ret, len, _T( "QueryWrapperFilter(%s)" ), qt ); + _CLDELETE_CARRAY( qt ); + return ret; +} + +CL_NS_END diff --git a/Pods/BRCLucene/src/core/CLucene/search/SpanQueryFilter.h b/Pods/BRCLucene/src/core/CLucene/search/SpanQueryFilter.h new file mode 100644 index 0000000..33cbbac --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/SpanQueryFilter.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_search_SpanQueryFilter_ +#define _lucene_search_SpanQueryFilter_ + +#include "SpanFilter.h" +#include "spans/SpanQuery.h" + +CL_NS_DEF(search) + +/** + * Constrains search results to only match those which also match a provided + * query. Also provides position information about where each document matches + * at the cost of extra space compared with the QueryWrapperFilter. + * There is an added cost to this above what is stored in a {@link QueryWrapperFilter}. Namely, + * the position information for each matching document is stored. + *

+ * This filter does not cache. See the {@link org.apache.lucene.search.CachingSpanFilter} for a wrapper that + * caches. + * + * @version $Id:$ + */ +class CLUCENE_EXPORT SpanQueryFilter : public SpanFilter +{ +protected: + CL_NS2(search,spans)::SpanQuery * query; + bool bDeleteQuery; + +protected: + SpanQueryFilter(); + SpanQueryFilter( const SpanQueryFilter& copy ); + +public: + /** Constructs a filter which only matches documents matching + * query. + * @param query The {@link org.apache.lucene.search.spans.SpanQuery} to use as the basis for the Filter. + */ + SpanQueryFilter( const CL_NS2(search,spans)::SpanQuery * query ); + + SpanQueryFilter( CL_NS2(search,spans)::SpanQuery * query, bool bDeleteQuery ); + + virtual ~SpanQueryFilter(); + + virtual Filter* clone() const; + + virtual CL_NS(util)::BitSet* bits( CL_NS(index)::IndexReader * reader ); + + virtual SpanFilterResult * bitSpans( CL_NS(index)::IndexReader * reader ); + + CL_NS2(search,spans)::SpanQuery * getQuery(); + + virtual TCHAR* toString(); + + +// public boolean equals( Object o ) { +// return o instanceof SpanQueryFilter && this.query.equals(((SpanQueryFilter) o).query); +// } +// +// public int hashCode() { +// return query.hashCode() ^ 0x923F64B9; +// } +}; + +inline CL_NS2(search,spans)::SpanQuery * SpanQueryFilter::getQuery() +{ + return query; +} + +CL_NS_END +#endif // _lucene_search_SpanQueryFilter_ diff --git a/Pods/BRCLucene/src/core/CLucene/search/TermQuery.cpp b/Pods/BRCLucene/src/core/CLucene/search/TermQuery.cpp new file mode 100644 index 0000000..79b4fd5 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/TermQuery.cpp @@ -0,0 +1,251 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "TermQuery.h" + +#include "SearchHeader.h" +#include "Scorer.h" +#include "CLucene/index/Term.h" +#include "Explanation.h" +#include "Similarity.h" +#include "Searchable.h" +#include "_TermScorer.h" +#include "CLucene/index/IndexReader.h" +#include "CLucene/util/StringBuffer.h" +#include "CLucene/index/Terms.h" + +#include + +CL_NS_USE(index) +CL_NS_DEF(search) + + + + class TermWeight: public Weight { + private: + Similarity* similarity; // ISH: was Searcher*, for no apparent reason + float_t value; + float_t idf; + float_t queryNorm; + float_t queryWeight; + + TermQuery* parentQuery; // CLucene specific + CL_NS(index)::Term* _term; + + public: + TermWeight(Searcher* searcher, TermQuery* parentQuery, CL_NS(index)::Term* _term); + virtual ~TermWeight(); + + // return a *new* string describing this object + TCHAR* toString(); + Query* getQuery() { return (Query*)parentQuery; } + float_t getValue() { return value; } + + float_t sumOfSquaredWeights(); + void normalize(float_t queryNorm); + Scorer* scorer(CL_NS(index)::IndexReader* reader); + Explanation* explain(CL_NS(index)::IndexReader* reader, int32_t doc); + }; + + + /** Constructs a query for the term t. */ + TermQuery::TermQuery(Term* t): + term( _CL_POINTER(t) ) + { + } + TermQuery::TermQuery(const TermQuery& clone): + Query(clone){ + this->term=_CL_POINTER(clone.term); + } + TermQuery::~TermQuery(){ + _CLLDECDELETE(term); + } + + Query* TermQuery::clone() const{ + return _CLNEW TermQuery(*this); + } + + const char* TermQuery::getClassName(){ + return "TermQuery"; + } + const char* TermQuery::getObjectName() 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; + } + + 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(); + } + + 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); + } + + TermWeight::TermWeight(Searcher* _searcher, TermQuery* _parentQuery, Term* term):similarity(_searcher->getSimilarity()), + value(0), queryNorm(0),queryWeight(0), parentQuery(_parentQuery),_term(term) + { + idf = similarity->idf(term, _searcher); // compute idf + } + + TermWeight::~TermWeight(){ + } + + // + TCHAR* TermWeight::toString() { + int32_t size=strlen(parentQuery->getObjectName()) + 10; + TCHAR* tmp = _CL_NEWARRAY(TCHAR, size); + _sntprintf(tmp,size,_T("weight(%S)"),parentQuery->getObjectName()); + return tmp; + } + + float_t TermWeight::sumOfSquaredWeights() { + // legacy // idf = parentQuery->getSimilarity(searcher)->idf(_term, searcher); // compute idf + queryWeight = idf * parentQuery->getBoost(); // compute query weight + return queryWeight * queryWeight; // square it + } + + void TermWeight::normalize(float_t _queryNorm) { + this->queryNorm = _queryNorm; + queryWeight *= queryNorm; // normalize query weight + value = queryWeight * idf; // idf for document + } + + Scorer* TermWeight::scorer(IndexReader* reader) { + TermDocs* termDocs = reader->termDocs(_term); + + if (termDocs == NULL) + return NULL; + + return _CLNEW TermScorer(this, termDocs, similarity, + reader->norms(_term->field())); + } + + Explanation* TermWeight::explain(IndexReader* reader, int32_t doc){ + ComplexExplanation* result = _CLNEW ComplexExplanation(); + + 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_LCARRAY(tmp); + result->setDescription(buf); + + _sntprintf(buf,LUCENE_SEARCH_EXPLANATION_DESC_LEN, + _T("idf(docFreq=%d, numDocs=%d)"), reader->docFreq(_term), reader->numDocs() ); + 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_LCARRAY(tmp); + queryExpl->setDescription(buf); + + Explanation* boostExpl = _CLNEW Explanation(parentQuery->getBoost(), _T("boost")); + if (parentQuery->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(parentQuery->getBoost()* // always 1.0 | TODO: original Java code is boostExpl.getValue() + idfExpl->getValue() * + queryNormExpl->getValue()); + result->addDetail(queryExpl); + + // explain field weight + const TCHAR* field = _term->field(); + ComplexExplanation* fieldExpl = _CLNEW ComplexExplanation(); + + tmp = _term->toString(); + _sntprintf(buf,LUCENE_SEARCH_EXPLANATION_DESC_LEN, + _T("fieldWeight(%s in %d), product of:"),tmp,doc); + _CLDELETE_LCARRAY(tmp); + fieldExpl->setDescription(buf); + + Scorer* sc = scorer(reader); + Explanation* tfExpl = sc->explain(doc); + _CLLDELETE(sc); + fieldExpl->addDetail(tfExpl); + fieldExpl->addDetail(idfExpl); + + Explanation* fieldNormExpl = _CLNEW Explanation(); + uint8_t* fieldNorms = reader->norms(field); + float_t 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->setMatch(tfExpl->isMatch()); + fieldExpl->setValue(tfExpl->getValue() * + idfExpl->getValue() * + fieldNormExpl->getValue()); + + if (queryExpl->getValue() == 1.0f){ + _CLLDELETE(result); + return fieldExpl; + } + + // combine them + result->setValue(queryExpl->getValue() * fieldExpl->getValue()); + + result->addDetail(fieldExpl); + result->setMatch(fieldExpl->getMatch()); + + return result; + } + + Weight* TermQuery::_createWeight(Searcher* _searcher) { + return _CLNEW TermWeight(_searcher,this,term); + } + + void TermQuery::extractTerms( TermSet * termset ) const + { + if( term && termset->end() == termset->find( term )) + termset->insert( _CL_POINTER( term )); + } + + +CL_NS_END + diff --git a/Pods/BRCLucene/src/core/CLucene/search/TermQuery.h b/Pods/BRCLucene/src/core/CLucene/search/TermQuery.h new file mode 100644 index 0000000..da4170d --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/TermQuery.h @@ -0,0 +1,52 @@ +/*------------------------------------------------------------------------------ +* 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_ + +CL_CLASS_DEF(index,Term) +CL_CLASS_DEF(util,StringBuffer) + +#include "Query.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 CLUCENE_EXPORT TermQuery: public Query { + private: + CL_NS(index)::Term* term; + protected: + Weight* _createWeight(Searcher* searcher); + TermQuery(const TermQuery& clone); + public: + // Constructs a query for the term t. + TermQuery(CL_NS(index)::Term* t); + virtual ~TermQuery(); + + static const char* getClassName(); + const char* getObjectName() const; + + /** Returns the term of this query. */ + CL_NS(index)::Term* getTerm(bool pointer=true) const; + + /** Prints a user-readable version of this query. */ + TCHAR* toString(const TCHAR* field) const; + + /** Returns true if o is equal to this. */ + bool equals(Query* other) const; + Query* clone() const; + + /** Returns a hash code value for this object.*/ + size_t hashCode() const; + + /** Expert: adds all terms occurring in this query to the termset set. */ + void extractTerms( TermSet * termset ) const; + + }; +CL_NS_END +#endif + diff --git a/Pods/BRCLucene/src/core/CLucene/search/TermScorer.cpp b/Pods/BRCLucene/src/core/CLucene/search/TermScorer.cpp new file mode 100644 index 0000000..2433fc4 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/TermScorer.cpp @@ -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. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "_TermScorer.h" +#include "SearchHeader.h" +#include "Explanation.h" +#include "CLucene/index/Term.h" +#include "CLucene/index/Terms.h" +#include "TermQuery.h" +#include "Similarity.h" +#include "Explanation.h" + +CL_NS_USE(index) +CL_NS_DEF(search) + + 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(){ + _CLLDELETE(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; + } + + Explanation* TermScorer::explain(int32_t doc) { + TermQuery* query = (TermQuery*)weight->getQuery(); + Explanation* tfExplanation = _CLNEW Explanation(); + int32_t tf = 0; + while (pointer < pointerMax) { + if (docs[pointer] == doc) + tf = freqs[pointer]; + pointer++; + } + if (tf == 0) { + if (termDocs->skipTo(doc)) { + 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_LCARRAY(termToString); + tfExplanation->setDescription(buf); + return tfExplanation; + } + + 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_LCARRAY(wb); + return ret; + } + + float_t TermScorer::score(){ + int32_t f = freqs[pointer]; + float_t 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 + } + + int32_t TermScorer::doc() const { return _doc; } + +CL_NS_END diff --git a/Pods/BRCLucene/src/core/CLucene/search/WildcardQuery.cpp b/Pods/BRCLucene/src/core/CLucene/search/WildcardQuery.cpp new file mode 100644 index 0000000..fd9c8c9 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/WildcardQuery.cpp @@ -0,0 +1,151 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "WildcardQuery.h" +#include "TermQuery.h" +#include "WildcardTermEnum.h" +#include "Similarity.h" +#include "CLucene/index/Term.h" +#include "CLucene/util/BitSet.h" +#include "CLucene/util/StringBuffer.h" +#include "CLucene/index/IndexReader.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 + termContainsWildcard = (_tcschr(term->text(), _T('*')) != NULL || _tcschr(term->text(), _T('?')) != NULL); +} + +WildcardQuery::~WildcardQuery(){ + //Func - Destructor + //Pre - true + //Post - true + +} + +const char* WildcardQuery::getObjectName() const{ + //Func - Returns the string "WildcardQuery" + //Pre - true + //Post - The string "WildcardQuery" has been returned + return getClassName(); +} + +const char* WildcardQuery::getClassName(){ + return "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()); +} + + +Query* WildcardQuery::rewrite(CL_NS(index)::IndexReader* reader) { + if (termContainsWildcard) + return MultiTermQuery::rewrite(reader); + + return _CLNEW TermQuery( getTerm(false) ); +} + + +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/Pods/BRCLucene/src/core/CLucene/search/WildcardQuery.h b/Pods/BRCLucene/src/core/CLucene/search/WildcardQuery.h new file mode 100644 index 0000000..38ff226 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/WildcardQuery.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_WildcardQuery_ +#define _lucene_search_WildcardQuery_ + +//#include "CLucene/index/IndexReader.h" +CL_CLASS_DEF(index,Term) +#include "MultiTermQuery.h" +#include "Filter.h" +//#include "WildcardTermEnum.h" + +CL_NS_DEF(search) + +/** Implements the wildcard search query. Supported wildcards are *, which + * matches any character sequence (including the empty one), and ?, + * 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 * or + * ?. + * + * @see WildcardTermEnum + */ +class CLUCENE_EXPORT WildcardQuery: public MultiTermQuery { +protected: + FilteredTermEnum* getEnum(CL_NS(index)::IndexReader* reader); + WildcardQuery(const WildcardQuery& clone); +public: + WildcardQuery(CL_NS(index)::Term* term); + ~WildcardQuery(); + + const char* getObjectName() const; + static const char* getClassName(); + + size_t hashCode() const; + bool equals(Query* other) const; + Query* clone() const; + + Query* rewrite(CL_NS(index)::IndexReader* reader); +private: + bool termContainsWildcard; +}; + + + +class CLUCENE_EXPORT 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/Pods/BRCLucene/src/core/CLucene/search/WildcardTermEnum.cpp b/Pods/BRCLucene/src/core/CLucene/search/WildcardTermEnum.cpp new file mode 100644 index 0000000..3b52f6e --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/WildcardTermEnum.cpp @@ -0,0 +1,155 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "WildcardTermEnum.h" +#include "CLucene/index/Term.h" +#include "CLucene/index/IndexReader.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 = cl_min(sidx, cidx); + CND_PRECONDITION(tidx != NULL, "tidx==NULL"); + int32_t idx = (int32_t)(tidx - pre); + preLen = idx; + CND_PRECONDITION(preLentextLength(), "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(); + } + + float_t WildcardTermEnum::difference() { + return 1.0f; + } + + bool WildcardTermEnum::endEnum() { + return _endEnum; + } + const char* WildcardTermEnum::getObjectName() const{ return getClassName(); } + const char* WildcardTermEnum::getClassName(){ return "WildcardTermEnum"; } + + 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/Pods/BRCLucene/src/core/CLucene/search/WildcardTermEnum.h b/Pods/BRCLucene/src/core/CLucene/search/WildcardTermEnum.h new file mode 100644 index 0000000..370d9ce --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/WildcardTermEnum.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_WildcardTermEnum_ +#define _lucene_search_WildcardTermEnum_ + +//#include "CLucene/index/IndexReader.h" +CL_CLASS_DEF(index,Term) +CL_CLASS_DEF(index,IndexReader) +//#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-> + *

+ * Term enumerations are always ordered by term->compareTo(). Each term in + * the enumeration is greater than all that precede it. + */ + class CLUCENE_EXPORT 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 WildcardTermEnum. Passing in a + * {@link Term Term} that does not contain a + * LUCENE_WILDCARDTERMENUM_WILDCARD_STRING or + * LUCENE_WILDCARDTERMENUM_WILDCARD_CHAR will cause an exception to be thrown. + */ + WildcardTermEnum(CL_NS(index)::IndexReader* reader, CL_NS(index)::Term* term); + ~WildcardTermEnum(); + + float_t 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() const; + static const char* getClassName(); + }; +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/search/_BooleanScorer.h b/Pods/BRCLucene/src/core/CLucene/search/_BooleanScorer.h new file mode 100644 index 0000000..5935a76 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/_BooleanScorer.h @@ -0,0 +1,103 @@ +/*------------------------------------------------------------------------------ +* 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_BooleanScorer_ +#define _lucene_search_BooleanScorer_ + + +#include "Scorer.h" + +CL_NS_DEF(search) + + class BooleanScorer: public Scorer { + private: + + class Bucket { + public: + int32_t doc; // tells if bucket is valid + float_t score; // incremental score + int32_t bits; // used for bool constraints + int32_t coord; // count of terms in score + Bucket* next; // next valid bucket + + Bucket(); + virtual ~Bucket(); + }; + + class SubScorer { + public: + bool done; + Scorer* scorer; + bool required; + bool prohibited; + const bool hasOwnership; + HitCollector* collector; + SubScorer* next; + SubScorer(Scorer* scr, const bool r, const bool p, HitCollector* c, SubScorer* nxt, const bool o); + virtual ~SubScorer(); + }; + + class BucketTable { + 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(); + virtual ~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 float_t score); + }; + + SubScorer* scorers; + BucketTable* bucketTable; + + int32_t maxCoord; + int32_t nextMask; + + int32_t end; + Bucket* current; + + int32_t minNrShouldMatch; + bool isTakingOwnership; + + public: + LUCENE_STATIC_CONSTANT(int32_t,BucketTable_SIZE=1024); + int32_t requiredMask; + int32_t prohibitedMask; + float_t* coordFactors; + + BooleanScorer( Similarity* similarity, int32_t minNrShouldMatch = 1, const bool isTakingOwnership = true ); + virtual ~BooleanScorer(); + void add(Scorer* scorer, const bool required, const bool prohibited); + int32_t doc() const { return current->doc; } + bool next(); + float_t score(); + void score( HitCollector* hc ); + bool skipTo(int32_t target); + Explanation* explain(int32_t doc); + virtual TCHAR* toString(); + void computeCoordFactors(); + + protected: + bool score( HitCollector* hc, const int32_t max ); + + }; + +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/search/_BooleanScorer2.h b/Pods/BRCLucene/src/core/CLucene/search/_BooleanScorer2.h new file mode 100644 index 0000000..ce0b258 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/_BooleanScorer2.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_BooleanScorer2_ +#define _lucene_search_BooleanScorer2_ + +#include "Scorer.h" + +CL_NS_DEF(search) + + class CLUCENE_EXPORT BooleanScorer2: public Scorer { + private: + class Internal; + friend class Internal; + Internal* _internal; + + class Coordinator; + class SingleMatchScorer; + class NonMatchingScorer; + class ReqOptSumScorer; + class ReqExclScorer; + class BSConjunctionScorer; + class BSDisjunctionSumScorer; + protected: + bool score( HitCollector* hc, const int32_t max ); + public: + + BooleanScorer2( Similarity* similarity, int32_t minNrShouldMatch = 0, bool allowDocsOutOfOrder = false ); + virtual ~BooleanScorer2(); + + void add( Scorer* scorer, bool required, bool prohibited ); + void score( HitCollector* hc ); + int32_t doc() const; + bool next(); + float_t score(); + bool skipTo( int32_t target ); + Explanation* explain( int32_t doc ); + virtual TCHAR* toString(); + }; + +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/search/_ConjunctionScorer.h b/Pods/BRCLucene/src/core/CLucene/search/_ConjunctionScorer.h new file mode 100644 index 0000000..e02bec7 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/_ConjunctionScorer.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_ConjunctionScorer_ +#define _lucene_search_ConjunctionScorer_ + +#include "Scorer.h" +#include "CLucene/util/Array.h" +CL_NS_DEF(search) + +/** Scorer for conjunctions, sets of queries, all of which are required. */ +class ConjunctionScorer: public Scorer { +private: + CL_NS(util)::ArrayBase* scorers; + typedef CL_NS(util)::CLVector > ScorersType; + bool firstTime; + bool more; + float_t coord; + int32_t lastDoc; + + Scorer* last(); + bool doNext(); + + bool init(int32_t target); +public: + ConjunctionScorer(Similarity* similarity, ScorersType* scorers); + ConjunctionScorer(Similarity* similarity, const CL_NS(util)::ArrayBase* scorers); + virtual ~ConjunctionScorer(); + virtual TCHAR* toString(); + int32_t doc() const; + bool next(); + bool skipTo(int32_t target); + virtual float_t score(); + virtual Explanation* explain(int32_t doc); +}; + +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/search/_DisjunctionSumScorer.h b/Pods/BRCLucene/src/core/CLucene/search/_DisjunctionSumScorer.h new file mode 100644 index 0000000..5f25d3b --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/_DisjunctionSumScorer.h @@ -0,0 +1,139 @@ +/*------------------------------------------------------------------------------ +* 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_DisjunctionSumScorer_ +#define _lucene_search_DisjunctionSumScorer_ + +CL_NS_USE(util) +CL_NS_DEF(search) + +/** A Scorer for OR like queries, counterpart of ConjunctionScorer. +* This Scorer implements {@link Scorer#skipTo(int)} and uses skipTo() on the given Scorers. +* @java-todo Implement score(HitCollector, int). +*/ +class DisjunctionSumScorer : public Scorer { +public: + typedef CL_NS(util)::CLVector > ScorersType; +private: + /** The minimum number of scorers that should match. */ + int32_t minimumNrMatchers; + + /** The scorerDocQueue contains all subscorers ordered by their current doc(), + * with the minimum at the top. + *
The scorerDocQueue is initialized the first time next() or skipTo() is called. + *
An exhausted scorer is immediately removed from the scorerDocQueue. + *
If less than the minimumNrMatchers scorers + * remain in the scorerDocQueue next() and skipTo() return false. + *

+ * After each to call to next() or skipTo() + * currentSumScore is the total score of the current matching doc, + * nrMatchers is the number of matching scorers, + * and all scorers are after the matching doc, or are exhausted. + */ + ScorerDocQueue* scorerDocQueue; + int32_t queueSize; // used to avoid size() method calls on scorerDocQueue + + /** The document number of the current match. */ + int32_t currentDoc; + float_t currentScore; + + /** Called the first time next() or skipTo() is called to + * initialize scorerDocQueue. + */ + void initScorerDocQueue(); + +protected: + /** The number of subscorers. */ + int32_t nrScorers; + + /** The subscorers. */ + DisjunctionSumScorer::ScorersType subScorers; + + /** The number of subscorers that provide the current match. */ + int32_t _nrMatchers; + + /** Expert: Collects matching documents in a range. Hook for optimization. + * Note that {@link #next()} must be called once before this method is called + * for the first time. + * @param hc The collector to which all matching documents are passed through + * {@link HitCollector#collect(int, float)}. + * @param max Do not score documents past this. + * @return true if more matching documents may remain. + */ + bool score( HitCollector* hc, const int32_t max ); + + /** Advance all subscorers after the current document determined by the + * top of the scorerDocQueue. + * Repeat until at least the minimum number of subscorers match on the same + * document and all subscorers are after that document or are exhausted. + *
On entry the scorerDocQueue has at least minimumNrMatchers + * available. At least the scorer with the minimum document number will be advanced. + * @return true iff there is a match. + *
In case there is a match, currentDoc, currentSumScore, + * and nrMatchers describe the match. + * + * @todo Investigate whether it is possible to use skipTo() when + * the minimum number of matchers is bigger than one, ie. try and use the + * character of ConjunctionScorer for the minimum number of matchers. + * Also delay calling score() on the sub scorers until the minimum number of + * matchers is reached. + *
For this, a Scorer array with minimumNrMatchers elements might + * hold Scorers at currentDoc that are temporarily popped from scorerQueue. + */ + bool advanceAfterCurrent(); + +public: + /** Construct a DisjunctionScorer, using one as the minimum number + * of matching subscorers. + * @param subScorers A collection of at least two subscorers. + * @param minimumNrMatchers The positive minimum number of subscorers that should + * match to match this query. + *
When minimumNrMatchers is bigger than + * the number of subScorers, + * no matches will be produced. + *
When minimumNrMatchers equals the number of subScorers, + * it more efficient to use ConjunctionScorer. + */ + DisjunctionSumScorer( DisjunctionSumScorer::ScorersType* _subScorers, const int32_t _minimumNrMatchers = 1); + virtual ~DisjunctionSumScorer(); + + /** Scores and collects all matching documents. + * @param hc The collector to which all matching documents are passed through + * {@link HitCollector#collect(int, float)}. + *
When this method is used the {@link #explain(int)} method should not be used. + */ + void score( HitCollector* hc ); + bool next(); + + /** Returns the score of the current document matching the query. + * Initially invalid, until {@link #next()} is called the first time. + */ + virtual float_t score(); + + int32_t doc() const; + + /** Returns the number of subscorers matching the current document. + * Initially invalid, until {@link #next()} is called the first time. + */ + int32_t nrMatchers() const; + + /** Skips to the first match beyond the current whose document number is + * greater than or equal to a given target. + *
When this method is used the {@link #explain(int)} method should not be used. + *
The implementation uses the skipTo() method on the subscorers. + * @param target The target document number. + * @return true iff there is such a match. + */ + bool skipTo( int32_t target ); + + virtual TCHAR* toString(); + + /** @return An explanation for the score of a given document. */ + Explanation* explain( int32_t doc ); +}; + +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/search/_ExactPhraseScorer.h b/Pods/BRCLucene/src/core/CLucene/search/_ExactPhraseScorer.h new file mode 100644 index 0000000..c88dcaa --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/_ExactPhraseScorer.h @@ -0,0 +1,28 @@ +/*------------------------------------------------------------------------------ +* 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_ + +#include "_PhraseScorer.h" + +CL_NS_DEF(search) + + class ExactPhraseScorer: public PhraseScorer { + public: + ExactPhraseScorer(Weight* weight, CL_NS(index)::TermPositions** tps, int32_t* offsets, + Similarity* similarity, uint8_t* norms ); + + virtual ~ExactPhraseScorer(); + + virtual TCHAR* toString(); + + protected: + //Returns the exact freqency of the phrase + float_t phraseFreq(); + }; +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/search/_FieldCacheImpl.h b/Pods/BRCLucene/src/core/CLucene/search/_FieldCacheImpl.h new file mode 100644 index 0000000..98bbcdd --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/_FieldCacheImpl.h @@ -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. +------------------------------------------------------------------------------*/ +#ifndef _lucene_search_FieldCacheImpl_ +#define _lucene_search_FieldCacheImpl_ + +CL_CLASS_DEF(index,IndexReader) +CL_CLASS_DEF(search,SortComparator) +CL_CLASS_DEF(search,SortComparatorSource) +#include "FieldCache.h" +#include "CLucene/LuceneThreads.h" +CL_NS_DEF(search) + +class fieldcacheCacheType; + +/** + * 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 // + { + 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 // + { + public: + bool operator()( FileEntry* f1, FileEntry* f2 ) const{ + return ( f1->compareTo(f2) == 0 ); + } + }; + }; + + FieldCacheImpl(); + virtual ~FieldCacheImpl(); +private: + /** 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/Pods/BRCLucene/src/core/CLucene/search/_FieldDocSortedHitQueue.h b/Pods/BRCLucene/src/core/CLucene/search/_FieldDocSortedHitQueue.h new file mode 100644 index 0000000..a4dae1b --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/_FieldDocSortedHitQueue.h @@ -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. +------------------------------------------------------------------------------*/ +#ifndef _lucene_search_FieldDocSortedHitQueue_ +#define _lucene_search_FieldDocSortedHitQueue_ + + +#include "Sort.h" +#include "FieldDoc.h" +#include "CLucene/util/PriorityQueue.h" + +CL_NS_DEF(search) + +/** + * 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 > +{ +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 NULL. + * 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 NULL. The collators + * correspond to any SortFields which were given a specific locale. + * @param fields Array of sort fields. + * @return Array, possibly NULL. + + private Collator[] hasCollators (SortField[] fields) { + if (fields == NULL) return NULL; + Collator[] ret = new Collator[fields.length]; + for (int32_t i=0; ia is less relevant than b. + * @param a FieldDoc + * @param b FieldDoc + * @return true if document a should be sorted after document b. + */ + 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/Pods/BRCLucene/src/core/CLucene/search/_HitQueue.h b/Pods/BRCLucene/src/core/CLucene/search/_HitQueue.h new file mode 100644 index 0000000..3058aab --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/_HitQueue.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_HitQueue_ +#define _lucene_search_HitQueue_ + +CL_NS_DEF(search) +struct ScoreDoc; + +/** +* 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/Pods/BRCLucene/src/core/CLucene/search/_PhrasePositions.h b/Pods/BRCLucene/src/core/CLucene/search/_PhrasePositions.h new file mode 100644 index 0000000..db1f517 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/_PhrasePositions.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_PhrasePositions_ +#define _lucene_search_PhrasePositions_ + +#include "CLucene/index/Terms.h" + +CL_NS_DEF(search) + +/** + * Position of a term in a document that takes into account the term offset within the phrase. + */ +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 + bool repeats; // there's other pp for same term (e.g. query="1st word 2nd word"~1) + + PhrasePositions(CL_NS(index)::TermPositions* Tp, const int32_t o); + ~PhrasePositions(); + + bool next(); + bool skipTo(int32_t target); + + void firstPosition(); + + /** + * Go to next location of this term current document, and set + * position as location - offset, so that a + * matching exact phrase is easily identified when all PhrasePositions + * have exactly the same position. + */ + bool nextPosition(); +}; +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/search/_PhraseQueue.h b/Pods/BRCLucene/src/core/CLucene/search/_PhraseQueue.h new file mode 100644 index 0000000..3f7ea3d --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/_PhraseQueue.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_search_PhraseQueue_ +#define _lucene_search_PhraseQueue_ + + +#include "CLucene/util/PriorityQueue.h" +#include "_PhrasePositions.h" + +CL_NS_DEF(search) + class PhraseQueue: public CL_NS(util)::PriorityQueue > { + public: + PhraseQueue(const int32_t size) { + initialize(size,false); + } + virtual ~PhraseQueue(){ + } + + protected: + bool lessThan(PhrasePositions* pp1, PhrasePositions* pp2) { + if (pp1->doc == pp2->doc){ + if (pp1->position == pp2->position) + // same doc and pp.position, so decide by actual term positions. + // rely on: pp.position == tp.position - offset. + return pp1->offset < pp2->offset; + else + return pp1->position < pp2->position; + }else + return pp1->doc < pp2->doc; + } + }; +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/search/_PhraseScorer.h b/Pods/BRCLucene/src/core/CLucene/search/_PhraseScorer.h new file mode 100644 index 0000000..1760596 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/_PhraseScorer.h @@ -0,0 +1,78 @@ +/*------------------------------------------------------------------------------ +* 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_ + +#include "_PhraseQueue.h" +#include "Scorer.h" + +CL_NS_DEF(search) + +class Explanation; +/** Expert: Scoring functionality for phrase queries. +*
A document is considered matching if it contains the phrase-query terms +* at "valid" positons. What "valid positions" are +* depends on the type of the phrase query: for an exact phrase query terms are required +* to appear in adjacent locations, while for a sloppy phrase query some distance between +* the terms is allowed. The abstract method {@link #phraseFreq()} of extending classes +* is invoked for each document containing all the phrase query terms, in order to +* compute the frequency of the phrase query in that document. A non zero frequency +* means a match. +*/ +class PhraseScorer: public Scorer { +private: + Weight* weight; +protected: + uint8_t* norms; + float_t value; +private: + bool firstTime; + bool more; +protected: + float_t freq; //phrase frequency in current doc as computed by phraseFreq(). + + 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* offsets, Similarity* similarity, uint8_t* _norms); + virtual ~PhraseScorer(); + + int32_t doc() const; + bool next(); + float_t score(); + bool skipTo(int32_t target); + + + Explanation* explain(int32_t doc); + virtual TCHAR* toString(); +protected: + /** + * For a document containing all the phrase query terms, compute the + * frequency of the phrase in that document. + * A non zero frequency means a match. + *
Note, that containing all phrase terms does not guarantee a match - they have to be found in matching locations. + * @return frequency of the phrase in current doc, 0 if not found. + */ + virtual float_t 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/Pods/BRCLucene/src/core/CLucene/search/_SloppyPhraseScorer.h b/Pods/BRCLucene/src/core/CLucene/search/_SloppyPhraseScorer.h new file mode 100644 index 0000000..6498475 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/_SloppyPhraseScorer.h @@ -0,0 +1,78 @@ +/*------------------------------------------------------------------------------ +* 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_ + +#include "_PhraseScorer.h" + +CL_NS_DEF(search) + class SloppyPhraseScorer: public PhraseScorer { + private: + int32_t slop; + PhrasePositions** repeats; + size_t repeatsLen; + bool checkedRepeats; + public: + SloppyPhraseScorer(Weight* weight, CL_NS(index)::TermPositions** tps, + int32_t* offsets, Similarity* similarity, + int32_t _slop, uint8_t* norms); + virtual ~SloppyPhraseScorer(); + protected: + /** + * Score a candidate doc for all slop-valid position-combinations (matches) + * encountered while traversing/hopping the PhrasePositions. + *
The score contribution of a match depends on the distance: + *
- highest score for distance=0 (exact match). + *
- score gets lower as distance gets higher. + *
Example: for query "a b"~2, a document "x a b a y" can be scored twice: + * once for "a b" (distance=0), and once for "b a" (distance=2). + *
Pssibly not all valid combinations are encountered, because for efficiency + * we always propagate the least PhrasePosition. This allows to base on + * PriorityQueue and move forward faster. + * As result, for example, document "a b c b a" + * would score differently for queries "a b c"~4 and "c b a"~4, although + * they really are equivalent. + * Similarly, for doc "a b c b a f g", query "c b"~2 + * would get same score as "g f"~2, although "c b"~2 could be matched twice. + * We may want to fix this in the future (currently not, for performance reasons). + */ + float_t phraseFreq(); + private: + typedef CL_NS(util)::CLHashMap, + CL_NS(util)::Equals::Void > + PhrasePositionsMap; + static int comparePhrasePositions(const void* x, const void* y){ + return static_cast(y)->offset - static_cast(x)->offset; + } + + /** + * Init PhrasePositions in place. + * There is a one time initializatin for this scorer: + *
- Put in repeats[] each pp that has another pp with same position in the doc. + *
- Also mark each such pp by pp.repeats = true. + *
Later can consult with repeats[] in termPositionsDiffer(pp), making that check efficient. + * In particular, this allows to score queries with no repetiotions with no overhead due to this computation. + *
- Example 1 - query with no repetitions: "ho my"~2 + *
- Example 2 - query with repetitions: "ho my my"~2 + *
- Example 3 - query with repetitions: "my ho my"~2 + *
Init per doc w/repeats in query, includes propagating some repeating pp's to avoid false phrase detection. + * @return end (max position), or -1 if any term ran out (i.e. done) + * @throws IOException + */ + int32_t initPhrasePositions(); + + // disalow two pp's to have the same tp position, so that same word twice + // in query would go elswhere in the matched doc + bool termPositionsDiffer(PhrasePositions* pp); + + public: + virtual TCHAR* toString(); + }; +CL_NS_END +#endif + diff --git a/Pods/BRCLucene/src/core/CLucene/search/_TermScorer.h b/Pods/BRCLucene/src/core/CLucene/search/_TermScorer.h new file mode 100644 index 0000000..2095cb2 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/_TermScorer.h @@ -0,0 +1,82 @@ +/*------------------------------------------------------------------------------ +* 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_ + + +#include "Scorer.h" +#include "CLucene/index/Terms.h" +CL_CLASS_DEF(search,Similarity) +#include "SearchHeader.h" + +CL_NS_DEF(search) + +/** Expert: A Scorer for documents matching a Term. +*/ +class TermScorer: public Scorer { +private: + CL_NS(index)::TermDocs* termDocs; + uint8_t* norms; + Weight* weight; + const float_t weightValue; + int32_t _doc; + + int32_t docs[32]; // buffered doc numbers + int32_t freqs[32]; // buffered term freqs + int32_t pointer; + int32_t pointerMax; + + float_t scoreCache[LUCENE_SCORE_CACHE_SIZE]; +public: + + /** Construct a TermScorer. + * @param weight The weight of the Term in the query. + * @param td An iterator over the documents matching the Term. + * @param similarity The Similarity implementation to be used for score computations. + * @param norms The field norms of the document fields for the Term. + * + * @memory TermScorer takes TermDocs and deletes it when TermScorer is cleaned up */ + TermScorer(Weight* weight, CL_NS(index)::TermDocs* td, + Similarity* similarity, uint8_t* _norms); + + virtual ~TermScorer(); + + /** Returns the current document number matching the query. + * Initially invalid, until {@link #next()} is called the first time. + */ + int32_t doc() const; + + + /** Advances to the next document matching the query. + *
The iterator over the matching documents is buffered using + * {@link TermDocs#read(int[],int[])}. + * @return true iff there is another document matching the query. + */ + bool next(); + + float_t score(); + + /** Skips to the first match beyond the current whose document number is + * greater than or equal to a given target. + *
The implementation uses {@link TermDocs#skipTo(int)}. + * @param target The target document number. + * @return true iff there is such a match. + */ + bool skipTo(int32_t target); + + /** Returns an explanation of the score for a document. + *
When this method is used, the {@link #next()} method + * and the {@link #score(HitCollector)} method should not be used. + * @param doc The document number for the explanation. + */ + Explanation* explain(int32_t doc); + + /** Returns a string representation of this TermScorer. */ + virtual TCHAR* toString(); +}; +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/search/spans/NearSpansOrdered.cpp b/Pods/BRCLucene/src/core/CLucene/search/spans/NearSpansOrdered.cpp new file mode 100644 index 0000000..a745ec2 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/spans/NearSpansOrdered.cpp @@ -0,0 +1,285 @@ +/*------------------------------------------------------------------------------ + * 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/_ApiHeader.h" +#include "CLucene/index/IndexReader.h" +#include "CLucene/util/StringBuffer.h" + +#include +#include + +#include "_NearSpansOrdered.h" +#include "SpanNearQuery.h" + + +CL_NS_DEF2( search, spans ) + +bool spanDocCompare( Spans * s1, Spans * s2 ) +{ + return s1->doc() < s2->doc(); +} + +NearSpansOrdered::NearSpansOrdered( SpanNearQuery * spanNearQuery, CL_NS(index)::IndexReader * reader ) +{ + firstTime = true; + more = false; + + inSameDoc = false; + + matchDoc = -1; + matchStart = -1; + matchEnd = -1; + + if( spanNearQuery->getClausesCount() < 2 ) + { + TCHAR * tszQry = spanNearQuery->toString(); + size_t bBufLen = _tcslen( tszQry ) + 25; + TCHAR * tszMsg = _CL_NEWARRAY( TCHAR, bBufLen ); + _sntprintf( tszMsg, bBufLen, _T( "Less than 2 clauses: %s" ), tszQry ); + _CLDELETE_LCARRAY( tszQry ); + _CLTHROWT_DEL( CL_ERR_IllegalArgument, tszMsg ); + } + + allowedSlop = spanNearQuery->getSlop(); + + subSpansCount = spanNearQuery->getClausesCount(); + subSpans = _CL_NEWARRAY( Spans *, subSpansCount ); + subSpansByDoc = _CL_NEWARRAY( Spans *, subSpansCount ); + + SpanQuery ** clauses = spanNearQuery->getClauses(); + for( size_t i = 0; i < subSpansCount; i++ ) + { + subSpans[ i ] = clauses[ i ]->getSpans( reader ); + subSpansByDoc[ i ] = subSpans[ i ]; // used in toSameDoc() + } + clauses = NULL; + + query = spanNearQuery; // kept for toString() only. +} + +NearSpansOrdered::~NearSpansOrdered() +{ + for( size_t i = 0; i < subSpansCount; i++ ) + _CLLDELETE( subSpans[ i ] ); + + _CLDELETE_LARRAY( subSpans ); + _CLDELETE_LARRAY( subSpansByDoc ); +} + +bool NearSpansOrdered::next() +{ + if( firstTime ) + { + firstTime = false; + for( size_t i = 0; i < subSpansCount; i++ ) + { + if( ! subSpans[ i ]->next() ) + { + more = false; + return false; + } + } + more = true; + } + return advanceAfterOrdered(); +} + +bool NearSpansOrdered::skipTo( int32_t target ) +{ + if( firstTime ) + { + firstTime = false; + for( size_t i = 0; i < subSpansCount; i++ ) + { + if( ! subSpans[ i ]->skipTo( target )) + { + more = false; + return false; + } + } + more = true; + } + else if( more && ( subSpans[ 0 ]->doc() < target )) + { + if( subSpans[ 0 ]->skipTo( target )) + { + inSameDoc = false; + } + else + { + more = false; + return false; + } + } + return advanceAfterOrdered(); +} + +bool NearSpansOrdered::advanceAfterOrdered() +{ + while( more && ( inSameDoc || toSameDoc() )) + { + if( stretchToOrder() && shrinkToAfterShortestMatch() ) + return true; + } + return false; // no more matches +} + +bool NearSpansOrdered::toSameDoc() +{ + sort( subSpansByDoc, subSpansByDoc + subSpansCount, spanDocCompare ); + size_t firstIndex = 0; + int32_t maxDoc = subSpansByDoc[ subSpansCount-1 ]->doc(); + while( subSpansByDoc[ firstIndex ]->doc() != maxDoc ) + { + if( ! subSpansByDoc[ firstIndex ]->skipTo( maxDoc )) + { + more = false; + inSameDoc = false; + return false; + } + maxDoc = subSpansByDoc[ firstIndex ]->doc(); + if( ++firstIndex == subSpansCount ) + firstIndex = 0; + } + +#ifdef _DEBUG + for( size_t i = 0; i < subSpansCount; i++ ) + { + assert( subSpansByDoc[ i ]->doc() == maxDoc ); +// : " NearSpansOrdered.toSameDoc() spans " + subSpansByDoc[0] +// + "\n at doc " + subSpansByDoc[i].doc() +// + ", but should be at " + maxDoc; + } +#endif //_DEBUG + + inSameDoc = true; + return true; +} + +bool NearSpansOrdered::docSpansOrdered( Spans * spans1, Spans * spans2 ) +{ + assert( spans1->doc() == spans2->doc() ); // "doc1 " + spans1.doc() + " != doc2 " + spans2.doc(); + int32_t start1 = spans1->start(); + int32_t start2 = spans2->start(); + + /* Do not call docSpansOrdered(int,int,int,int) to avoid invoking .end() : */ // CLucene - why? + return ( start1 == start2 ) ? ( spans1->end() < spans2->end() ) : ( start1 < start2 ); +} + +bool NearSpansOrdered::docSpansOrdered(int start1, int end1, int start2, int end2) +{ + return ( start1 == start2 ) ? ( end1 < end2 ) : ( start1 < start2 ); +} + +bool NearSpansOrdered::stretchToOrder() +{ + matchDoc = subSpans[ 0 ]->doc(); + for( size_t i = 1; inSameDoc && ( i < subSpansCount ); i++ ) + { + while( ! docSpansOrdered( subSpans[ i-1 ], subSpans[ i ] )) + { + if( ! subSpans[ i ]->next() ) + { + inSameDoc = false; + more = false; + break; + } + else if( matchDoc != subSpans[ i ]->doc() ) + { + inSameDoc = false; + break; + } + } + } + return inSameDoc; +} + +bool NearSpansOrdered::shrinkToAfterShortestMatch() +{ + matchStart = subSpans[ subSpansCount - 1 ]->start(); + matchEnd = subSpans[ subSpansCount - 1]->end(); + + int32_t matchSlop = 0; + int32_t lastStart = matchStart; + int32_t lastEnd = matchEnd; + + for( int32_t i = (int32_t)subSpansCount - 2; i >= 0; i-- ) + { + Spans * prevSpans = subSpans[ i ]; + int32_t prevStart = prevSpans->start(); + int32_t prevEnd = prevSpans->end(); + + while( true ) // Advance prevSpans until after (lastStart, lastEnd) + { + if( ! prevSpans->next() ) + { + inSameDoc = false; + more = false; + break; // Check remaining subSpans for final match. + } + else if( matchDoc != prevSpans->doc() ) + { + inSameDoc = false; // The last subSpans is not advanced here. + break; // Check remaining subSpans for last match in this document. + } + else + { + int32_t ppStart = prevSpans->start(); + int32_t ppEnd = prevSpans->end(); // Cannot avoid invoking .end() + if( ! docSpansOrdered( ppStart, ppEnd, lastStart, lastEnd )) + { + break; // Check remaining subSpans. + } + else + { // prevSpans still before (lastStart, lastEnd) + prevStart = ppStart; + prevEnd = ppEnd; + } + } + } + + assert( prevStart <= matchStart ); + if( matchStart > prevEnd ) // Only non overlapping spans add to slop. + matchSlop += ( matchStart - prevEnd ); + + /* Do not break on (matchSlop > allowedSlop) here to make sure + * that subSpans[0] is advanced after the match, if any. + */ + matchStart = prevStart; + lastStart = prevStart; + lastEnd = prevEnd; + } + + return matchSlop <= allowedSlop; // ordered and allowed slop +} + +TCHAR* NearSpansOrdered::toString() const +{ + CL_NS(util)::StringBuffer buffer; + TCHAR * tszQuery = query->toString(); + + buffer.append( _T( "NearSpansOrdered(" )); + buffer.append( tszQuery ); + buffer.append( _T( ")@" )); + if( firstTime ) + buffer.append( _T( "START" )); + else if( more ) + { + buffer.appendInt( doc() ); + buffer.append( _T( ":" )); + buffer.appendInt( start() ); + buffer.append( _T( "-" )); + buffer.appendInt( end() ); + } + else + buffer.append( _T( "END" )); + + _CLDELETE_ARRAY( tszQuery ); + + return buffer.toString(); +} + +CL_NS_END2 diff --git a/Pods/BRCLucene/src/core/CLucene/search/spans/NearSpansUnordered.cpp b/Pods/BRCLucene/src/core/CLucene/search/spans/NearSpansUnordered.cpp new file mode 100644 index 0000000..1fb4733 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/spans/NearSpansUnordered.cpp @@ -0,0 +1,271 @@ +/*------------------------------------------------------------------------------ + * 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/_ApiHeader.h" +#include "CLucene/index/IndexReader.h" +#include "CLucene/util/StringBuffer.h" + +#include "_NearSpansUnordered.h" +#include "_NearSpansOrdered.h" +#include "SpanNearQuery.h" + +CL_NS_DEF2( search, spans ) + + +///////////////////////////////////////////////////////////////////////////// +NearSpansUnordered::SpansCell::SpansCell( NearSpansUnordered * parentSpans, Spans * spans, int32_t index ) +{ + this->parentSpans = parentSpans; + this->spans = spans; + this->index = index; + this->length = -1; +} + +NearSpansUnordered::SpansCell::~SpansCell() +{ + _CLLDELETE( spans ); +} + +bool NearSpansUnordered::SpansCell::adjust( bool condition ) +{ + if( length != -1 ) + parentSpans->totalLength -= length; // subtract old length + + if( condition ) + { + length = end() - start(); + parentSpans->totalLength += length; // add new length + + if( ! parentSpans->max + || doc() > parentSpans->max->doc() + || ( doc() == parentSpans->max->doc() && end() > parentSpans->max->end())) + { + parentSpans->max = this; + } + } + parentSpans->more = condition; + return condition; +} + +TCHAR* NearSpansUnordered::SpansCell::toString() const +{ + CL_NS(util)::StringBuffer buffer; + TCHAR * tszSpans = spans->toString(); + + buffer.append( tszSpans ); + buffer.append( _T( "#" )); + buffer.appendInt( index ); + + _CLDELETE_LARRAY( tszSpans ); + return buffer.toString(); +} + + +///////////////////////////////////////////////////////////////////////////// +bool NearSpansUnordered::CellQueue::lessThan(SpansCell * spans1, SpansCell* spans2 ) +{ + if( spans1->doc() == spans2->doc() ) + return NearSpansOrdered::docSpansOrdered( spans1, spans2 ); + else + return spans1->doc() < spans2->doc(); +} + + +///////////////////////////////////////////////////////////////////////////// +NearSpansUnordered::NearSpansUnordered( SpanNearQuery * query, CL_NS(index)::IndexReader * reader ) +{ + // this->ordered = new ArrayList(); + this->more = true; + this->firstTime = true; + + this->max = NULL; // CLucene specific, SpansCell::adjust tests this member to NULL + this->first = NULL; // CLucene specific + this->last = NULL; // CLucene specific, addToList test this member to NULL + this->totalLength = 0; // CLucene specific + + this->query = query; + this->slop = query->getSlop(); + + SpanQuery ** clauses = query->getClauses(); + this->queue = _CLNEW CellQueue( query->getClausesCount() ); + for( size_t i = 0; i < query->getClausesCount(); i++ ) + { + SpansCell * cell = _CLNEW SpansCell( this, clauses[ i ]->getSpans( reader ), i ); + ordered.push_back( cell ); + } + clauses = NULL; +} + +NearSpansUnordered::~NearSpansUnordered() +{ + for( list::iterator iCell = ordered.begin(); iCell != ordered.end(); iCell++ ) + _CLLDELETE( *iCell ); + + _CLLDELETE( queue ); +} + +bool NearSpansUnordered::next() +{ + if( firstTime ) + { + initList( true ); + listToQueue(); // initialize queue + firstTime = false; + } + else if( more ) + { + if( min()->next() ) // trigger further scanning + queue->adjustTop(); // maintain queue + else + more = false; + } + + while( more ) + { + bool queueStale = false; + if( min()->doc() != max->doc() ) // maintain list + { + queueToList(); + queueStale = true; + } + + // skip to doc w/ all clauses + while( more && first->doc() < last->doc() ) + { + more = first->skipTo( last->doc() );// skip first upto last + firstToLast(); // and move it to the end + queueStale = true; + } + + if( ! more ) + return false; + + // found doc w/ all clauses + if( queueStale ) // maintain the queue + { + listToQueue(); + queueStale = false; + } + + if( atMatch() ) + return true; + + more = min()->next(); + if( more ) + queue->adjustTop(); // maintain queue + } + + return false; // no more matches +} + +bool NearSpansUnordered::skipTo( int32_t target ) +{ + if( firstTime ) // initialize + { + initList( false ); + for( SpansCell * cell = first; more && cell; cell = cell->nextCell ) + { + more = cell->skipTo( target ); // skip all + } + + if( more ) + listToQueue(); + + firstTime = false; + } + else + { // normal case + while( more && min()->doc() < target ) // skip as needed + { + if( min()->skipTo( target )) + queue->adjustTop(); + else + more = false; + } + } + + return more && ( atMatch() || next() ); +} + +TCHAR* NearSpansUnordered::toString() const +{ + CL_NS(util)::StringBuffer buffer; + TCHAR * tszQuery = query->toString(); + + buffer.append( _T( "NearSpansUnordered(" )); + buffer.append( tszQuery ); + buffer.append( _T( ")@" )); + if( firstTime ) + buffer.append( _T( "START" )); + else if( more ) + { + buffer.appendInt( doc() ); + buffer.append( _T( ":" )); + buffer.appendInt( start() ); + buffer.append( _T( "-" )); + buffer.appendInt( end() ); + } + else + buffer.append( _T( "END" )); + + _CLDELETE_ARRAY( tszQuery ); + + return buffer.toString(); +} + +void NearSpansUnordered::initList( bool next ) +{ + for( list::iterator iCell = ordered.begin(); more && iCell != ordered.end(); iCell++ ) + { + if( next ) + more = (*iCell)->next(); // move to first entry + + if( more ) + addToList( *iCell ); // add to list + } +} + +void NearSpansUnordered::addToList( SpansCell * cell ) +{ + if( last ) // add next to end of list + last->nextCell = cell; + else + first = cell; + + last = cell; + cell->nextCell = NULL; +} + +void NearSpansUnordered::firstToLast() +{ + last->nextCell = first; // move first to end of list + last = first; + first = first->nextCell; + last->nextCell = NULL; +} + +void NearSpansUnordered::queueToList() +{ + last = NULL; + first = NULL; + while( queue->top() ) + addToList( queue->pop() ); +} + +void NearSpansUnordered::listToQueue() +{ + queue->clear(); // rebuild queue + for( SpansCell * cell = first; cell; cell = cell->nextCell ) + queue->put( cell ); // add to queue from list +} + +bool NearSpansUnordered::atMatch() +{ + return ( min()->doc() == max->doc() ) + && (( max->end() - min()->start() - totalLength ) <= slop ); +} + +CL_NS_END2 diff --git a/Pods/BRCLucene/src/core/CLucene/search/spans/SpanFirstQuery.cpp b/Pods/BRCLucene/src/core/CLucene/search/spans/SpanFirstQuery.cpp new file mode 100644 index 0000000..6921b4b --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/spans/SpanFirstQuery.cpp @@ -0,0 +1,205 @@ +/*------------------------------------------------------------------------------ + * 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/_ApiHeader.h" +#include "CLucene/index/IndexReader.h" +#include "CLucene/search/Similarity.h" +#include "CLucene/util/StringBuffer.h" + +#include "SpanFirstQuery.h" +#include "Spans.h" + +CL_NS_DEF2( search, spans ) + + +///////////////////////////////////////////////////////////////////////////// +class SpanFirstQuery::SpanFirstQuerySpans : public Spans +{ +private: + Spans * spans; + int32_t end_; + SpanFirstQuery * parentQuery; + +public: + SpanFirstQuerySpans( SpanFirstQuery * parentQuery, CL_NS(index)::IndexReader * reader ); + virtual ~SpanFirstQuerySpans(); + + bool next(); + bool skipTo( int32_t target ); + + int32_t doc() const { return spans->doc(); } + int32_t start() const { return spans->start(); } + int32_t end() const { return spans->end(); } + + TCHAR* toString() const; +}; + +SpanFirstQuery::SpanFirstQuerySpans::SpanFirstQuerySpans( SpanFirstQuery * parentQuery, CL_NS(index)::IndexReader * reader ) +{ + this->parentQuery = parentQuery; + this->end_ = parentQuery->end; + this->spans = parentQuery->match->getSpans( reader ); +} + +SpanFirstQuery::SpanFirstQuerySpans::~SpanFirstQuerySpans() +{ + _CLLDELETE( spans ); +} + +bool SpanFirstQuery::SpanFirstQuerySpans::next() +{ + while( spans->next() ) // scan to next match + { + if( spans->end() <= end_ ) + return true; + } + return false; +} + +bool SpanFirstQuery::SpanFirstQuerySpans::skipTo( int32_t target ) +{ + if( ! spans->skipTo( target )) + return false; + + if( spans->end() <= end_ ) // there is a match + return true; + + return next(); // scan to next match +} + +TCHAR* SpanFirstQuery::SpanFirstQuerySpans::toString() const +{ + CL_NS(util)::StringBuffer buffer; + TCHAR * tszQry = parentQuery->toString(); + + buffer.append( _T( "spans(" )); + buffer.append( tszQry ); + buffer.append( _T( ")" )); + + _CLDELETE_LARRAY( tszQry ); + return buffer.toString(); +} + + +///////////////////////////////////////////////////////////////////////////// +SpanFirstQuery::SpanFirstQuery( SpanQuery * match, int32_t end, bool bDeleteQuery ) +{ + this->match = match; + this->end = end; + this->bDeleteQuery = bDeleteQuery; +} + +SpanFirstQuery::SpanFirstQuery( const SpanFirstQuery& clone ) : + SpanQuery( clone ) +{ + this->match = (SpanQuery *) clone.match->clone(); + this->end = clone.end; + this->bDeleteQuery = true; +} + +SpanFirstQuery::~SpanFirstQuery() +{ + if( bDeleteQuery ) + { + _CLLDELETE( match ); + } +} + +CL_NS(search)::Query * SpanFirstQuery::clone() const +{ + return _CLNEW SpanFirstQuery( *this ); +} + +const char * SpanFirstQuery::getClassName() +{ + return "SpanFirstQuery"; +} + +const char * SpanFirstQuery::getObjectName() const +{ + return getClassName(); +} + +SpanQuery * SpanFirstQuery::getMatch() const +{ + return match; +} + +int32_t SpanFirstQuery::getEnd() const +{ + return end; +} + +const TCHAR * SpanFirstQuery::getField() const +{ + return match->getField(); +} + +void SpanFirstQuery::extractTerms( CL_NS(search)::TermSet * terms ) const +{ + match->extractTerms( terms ); +} + +CL_NS(search)::Query * SpanFirstQuery::rewrite( CL_NS(index)::IndexReader * reader ) +{ + SpanFirstQuery * clone = NULL; + + SpanQuery * rewritten = (SpanQuery *) match->rewrite( reader ); + if( rewritten != match ) + { + clone = (SpanFirstQuery *) this->clone(); + _CLLDELETE( clone->match ); + clone->match = rewritten; + } + + if( clone ) + return clone; // some clauses rewrote + else + return this; // no clauses rewrote +} + +TCHAR* SpanFirstQuery::toString( const TCHAR* field ) const +{ + CL_NS(util)::StringBuffer buffer; + TCHAR * tszMatch = match->toString( field ); + + buffer.append( _T( "spanFirst(" )); + buffer.append( tszMatch ); + buffer.append( _T( ", " )); + buffer.appendInt( end ); + buffer.append( _T( ")" )); + buffer.appendBoost( getBoost() ); + _CLDELETE_LARRAY( tszMatch ); + + return buffer.toString(); +} + +bool SpanFirstQuery::equals( Query * other ) const +{ + if( this == other ) return true; + if( other == NULL || !( other->instanceOf( SpanFirstQuery::getClassName() ))) + return false; + + SpanFirstQuery * that = (SpanFirstQuery *) other; + return end == that->end + && getBoost() == that->getBoost() + && match->equals( that->match ); +} + +size_t SpanFirstQuery::hashCode() const +{ + size_t h = match->hashCode(); + h ^= (h << 8) | (h >> 25); // reversible + h ^= Similarity::floatToByte( getBoost() ) ^ end; + return h; +} + +Spans * SpanFirstQuery::getSpans( CL_NS(index)::IndexReader * reader ) +{ + return _CLNEW SpanFirstQuerySpans( this, reader ); +} + +CL_NS_END2 diff --git a/Pods/BRCLucene/src/core/CLucene/search/spans/SpanFirstQuery.h b/Pods/BRCLucene/src/core/CLucene/search/spans/SpanFirstQuery.h new file mode 100644 index 0000000..4b62b9e --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/spans/SpanFirstQuery.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_spans_FirstSpanQuery_ +#define _lucene_search_spans_FirstSpanQuery_ + +CL_CLASS_DEF(index, IndexReader); +#include "SpanQuery.h" + +CL_NS_DEF2( search, spans ) + +/** Matches spans near the beginning of a field. */ +class CLUCENE_EXPORT SpanFirstQuery : public SpanQuery +{ +private: + class SpanFirstQuerySpans; + +private: + SpanQuery * match; + bool bDeleteQuery; + int32_t end; + +protected: + SpanFirstQuery( const SpanFirstQuery& clone ); + +public: + /** Construct a SpanFirstQuery matching spans in match whose end + * position is less than or equal to end. */ + SpanFirstQuery( SpanQuery * match, int32_t end, bool bDeleteQuery ); + virtual ~SpanFirstQuery(); + + CL_NS(search)::Query * clone() const; + + static const char * getClassName(); + const char * getObjectName() const; + + /** Return the SpanQuery whose matches are filtered. */ + SpanQuery * getMatch() const; + + /** Return the maximum end position permitted in a match. */ + int32_t getEnd() const; + + const TCHAR * getField() const; + + /** Returns a collection of all terms matched by this query. + * @deprecated use extractTerms instead + * @see #extractTerms(Set) + */ +// public Collection getTerms() { return match.getTerms(); } + void extractTerms( CL_NS(search)::TermSet * terms ) const; + + CL_NS(search)::Query * rewrite( CL_NS(index)::IndexReader * reader ); + + using Query::toString; + TCHAR* toString( const TCHAR* field ) const; + bool equals( Query* other ) const; + size_t hashCode() const; + + Spans * getSpans( CL_NS(index)::IndexReader * reader ); +}; + +CL_NS_END2 +#endif // _lucene_search_spans_FirstSpanQuery_ diff --git a/Pods/BRCLucene/src/core/CLucene/search/spans/SpanNearQuery.cpp b/Pods/BRCLucene/src/core/CLucene/search/spans/SpanNearQuery.cpp new file mode 100644 index 0000000..ae67658 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/spans/SpanNearQuery.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/_ApiHeader.h" +#include "CLucene/search/Similarity.h" +#include "CLucene/util/StringBuffer.h" + +#include "SpanNearQuery.h" +#include "_EmptySpans.h" +#include "_NearSpansOrdered.h" +#include "_NearSpansUnordered.h" + +CL_NS_DEF2( search, spans ) + +SpanNearQuery::SpanNearQuery( const SpanNearQuery& clone ) : + SpanQuery( clone ) +{ + this->clauses = _CL_NEWARRAY( SpanQuery *, clone.clausesCount ); + for( size_t i = 0; i < clone.clausesCount; i++ ) + this->clauses[ i ] = (SpanQuery *) clone.clauses[ i ]->clone(); + + this->clausesCount = clone.clausesCount; + this->bDeleteClauses = true; + + this->slop = clone.slop; + this->inOrder = clone.inOrder; + + this->field = NULL; + setField( clone.field ); +} + +SpanNearQuery::~SpanNearQuery() +{ + if( bDeleteClauses ) + { + for( size_t i = 0; i < clausesCount; i++ ) + _CLLDELETE( clauses[ i ] ); + } + + clausesCount = 0; + _CLDELETE_LARRAY( clauses ); + _CLDELETE_LARRAY( field ); +} + +CL_NS(search)::Query * SpanNearQuery::clone() const +{ + return _CLNEW SpanNearQuery( *this ); +} + +const char * SpanNearQuery::getClassName() +{ + return "SpanNearQuery"; +} + +const char * SpanNearQuery::getObjectName() const +{ + return getClassName(); +} + +SpanQuery ** SpanNearQuery::getClauses() const +{ + return clauses; +} + +size_t SpanNearQuery::getClausesCount() const +{ + return clausesCount; +} + +void SpanNearQuery::setField( const TCHAR * field ) +{ + _CLDELETE_LARRAY( this->field ); + this->field = STRDUP_TtoT( field ); +} + +const TCHAR * SpanNearQuery::getField() const +{ + return field; +} + +int32_t SpanNearQuery::getSlop() const +{ + return slop; +} + +bool SpanNearQuery::isInOrder() const +{ + return inOrder; +} + +void SpanNearQuery::extractTerms( CL_NS(search)::TermSet * terms ) const +{ + for( size_t i = 0; i < clausesCount; i++ ) + clauses[ i ]->extractTerms( terms ); +} + +CL_NS(search)::Query * SpanNearQuery::rewrite( CL_NS(index)::IndexReader * reader ) +{ + SpanNearQuery * clone = NULL; + + for( size_t i = 0; i < clausesCount; i++ ) + { + SpanQuery * c = clauses[ i ]; + SpanQuery * query = (SpanQuery *) c->rewrite( reader ); + if( query != c ) + { // clause rewrote: must clone + if( clone == NULL ) + clone = (SpanNearQuery *) this->clone(); + + _CLLDELETE( clone->clauses[ i ] ); + clone->clauses[ i ] = query; + } + } + if( clone ) + return clone; // some clauses rewrote + else + return this; // no clauses rewrote +} + +TCHAR* SpanNearQuery::toString( const TCHAR* field ) const +{ + CL_NS(util)::StringBuffer buffer; + + buffer.append( _T( "spanNear([" )); + for( size_t i = 0; i < clausesCount; i++ ) + { + if( i != 0 ) + buffer.append( _T( ", " )); + + TCHAR * tszClause = clauses[ i ]->toString( field ); + buffer.append( tszClause ); + _CLDELETE_ARRAY( tszClause ); + } + + buffer.append( _T( "], " )); + buffer.appendInt( slop ); + buffer.append( _T( ", " )); + buffer.appendBool( inOrder ); + buffer.append( _T( ")" )); + buffer.appendBoost( getBoost() ); + + return buffer.toString(); +} + +bool SpanNearQuery::equals( Query* other ) const +{ + if( this == other ) return true; + if( other == NULL || !( other->instanceOf( SpanNearQuery::getClassName() ))) + return false; + + SpanNearQuery * that = (SpanNearQuery *) other; + if( inOrder != that->inOrder + || slop != that->slop + || getBoost() != that->getBoost() + || 0 != _tcscmp( field, that->field ) ) // CLucene: java version does not compare field names + { + return false; + } + + if( clausesCount != that->clausesCount ) + return false; + for( size_t i = 0; i < clausesCount; i++ ) + { + if( ! clauses[ i ]->equals( that->clauses[ i ] )) + return false; + } + + return true; +} + +size_t SpanNearQuery::hashCode() const +{ + size_t result = 1; + for( size_t i = 0; i < clausesCount; i++ ) + result = 31*result + clauses[ i ]->hashCode(); + + // Mix bits before folding in things like boost, since it could cancel the + // last element of clauses. This particular mix also serves to + // differentiate SpanNearQuery hash codes from others. + result ^= (result << 14) | (result >> 19); // reversible + result += Similarity::floatToByte( getBoost() ); + result += slop; + result ^= ( inOrder ? 0x99AFD3BD : 0 ); + + return result; +} + +Spans * SpanNearQuery::getSpans( CL_NS(index)::IndexReader * reader ) +{ + if( clausesCount == 0 ) + return _CLNEW EmptySpans(); // CLucene: 0-clause case - different to java version, because java creates SpanOrQuery to call its function to create empty spans + + if( clausesCount == 1 ) // optimize 1-clause case + return clauses[ 0 ]->getSpans( reader ); + + return inOrder + ? (Spans *) _CLNEW NearSpansOrdered( this, reader ) + : (Spans *) _CLNEW NearSpansUnordered( this, reader ); +} + +CL_NS_END2 diff --git a/Pods/BRCLucene/src/core/CLucene/search/spans/SpanNearQuery.h b/Pods/BRCLucene/src/core/CLucene/search/spans/SpanNearQuery.h new file mode 100644 index 0000000..c88b5f7 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/spans/SpanNearQuery.h @@ -0,0 +1,112 @@ +/*------------------------------------------------------------------------------ + * 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_spans_SpanNearQuery_ +#define _lucene_search_spans_SpanNearQuery_ + +CL_CLASS_DEF(index, IndexReader); +#include "SpanQuery.h" + +CL_NS_DEF2( search, spans ) + +/** Matches spans which are near one another. One can specify slop, the + * maximum number of intervening unmatched positions, as well as whether + * matches are required to be in-order. */ +class CLUCENE_EXPORT SpanNearQuery : public SpanQuery +{ +private: + SpanQuery ** clauses; + size_t clausesCount; + bool bDeleteClauses; + + int32_t slop; + bool inOrder; + + TCHAR * field; + +protected: + SpanNearQuery( const SpanNearQuery& clone ); + +public: + /** Construct a SpanNearQuery. Matches spans matching a span from each + * clause, with up to slop total unmatched positions between + * them. * When inOrder is true, the spans from each clause + * must be * ordered as in clauses. */ + template + SpanNearQuery( ClauseIterator first, ClauseIterator last, int32_t slop, bool inOrder, bool bDeleteClauses ) + { + // CLucene specific: at least one clause must be here + if( first == last ) + _CLTHROWA( CL_ERR_IllegalArgument, "Missing query clauses." ); + + this->bDeleteClauses = bDeleteClauses; + this->clausesCount = last - first; + this->clauses = _CL_NEWARRAY( SpanQuery *, clausesCount ); + this->field = NULL; + + // copy clauses array into an array and check fields + for( size_t i = 0; first != last; first++, i++ ) + { + SpanQuery * clause = *first; + if( i == 0 ) + { + setField( clause->getField() ); + } + else if( 0 != _tcscmp( clause->getField(), field )) + { + _CLTHROWA( CL_ERR_IllegalArgument, "Clauses must have same field." ); + } + this->clauses[ i ] = clause; + } + + this->slop = slop; + this->inOrder = inOrder; + } + + virtual ~SpanNearQuery(); + + CL_NS(search)::Query * clone() const; + + static const char * getClassName(); + const char * getObjectName() const; + + /** Return the clauses whose spans are matched. + * CLucene: pointer to the internal array + */ + SpanQuery ** getClauses() const; + size_t getClausesCount() const; + + /** Return the maximum number of intervening unmatched positions permitted.*/ + int32_t getSlop() const; + + /** Return true if matches are required to be in-order.*/ + bool isInOrder() const; + + const TCHAR * getField() const; + + /** Returns a collection of all terms matched by this query. + * @deprecated use extractTerms instead + * @see #extractTerms(Set) + */ +// public Collection getTerms() + + void extractTerms( CL_NS(search)::TermSet * terms ) const; + + CL_NS(search)::Query * rewrite( CL_NS(index)::IndexReader * reader ); + + using Query::toString; + TCHAR* toString( const TCHAR* field ) const; + bool equals( Query* other ) const; + size_t hashCode() const; + + Spans * getSpans( CL_NS(index)::IndexReader * reader ); + +protected: + void setField( const TCHAR * field ); +}; + +CL_NS_END2 +#endif // _lucene_search_spans_SpanNearQuery_ diff --git a/Pods/BRCLucene/src/core/CLucene/search/spans/SpanNotQuery.cpp b/Pods/BRCLucene/src/core/CLucene/search/spans/SpanNotQuery.cpp new file mode 100644 index 0000000..d751258 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/spans/SpanNotQuery.cpp @@ -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. + ------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "CLucene/index/IndexReader.h" +#include "CLucene/search/Similarity.h" +#include "CLucene/util/StringBuffer.h" + +#include "SpanNotQuery.h" +#include "Spans.h" + +CL_NS_DEF2( search, spans ) + + +///////////////////////////////////////////////////////////////////////////// +class SpanNotQuery::SpanNotQuerySpans : public Spans +{ +private: + SpanNotQuery * parentQuery; + Spans * includeSpans; + bool moreInclude; + + Spans * excludeSpans; + bool moreExclude; + +public: + SpanNotQuerySpans( SpanNotQuery * parentQuery, CL_NS(index)::IndexReader * reader ); + virtual ~SpanNotQuerySpans(); + + bool next(); + bool skipTo( int32_t target ); + + int32_t doc() const { return includeSpans->doc(); } + int32_t start() const { return includeSpans->start(); } + int32_t end() const { return includeSpans->end(); } + + TCHAR* toString() const; +}; + +SpanNotQuery::SpanNotQuerySpans::SpanNotQuerySpans( SpanNotQuery * parentQuery, CL_NS(index)::IndexReader * reader ) +{ + this->parentQuery = parentQuery; + + includeSpans = parentQuery->include->getSpans( reader ); + moreInclude = true; + + excludeSpans = parentQuery->exclude->getSpans( reader ); + moreExclude = excludeSpans->next(); +} + +SpanNotQuery::SpanNotQuerySpans::~SpanNotQuerySpans() +{ + _CLLDELETE( includeSpans ); + _CLLDELETE( excludeSpans ); +} + +bool SpanNotQuery::SpanNotQuerySpans::next() +{ + if( moreInclude ) // move to next include + moreInclude = includeSpans->next(); + + while( moreInclude && moreExclude ) + { + if( includeSpans->doc() > excludeSpans->doc() ) // skip exclude + moreExclude = excludeSpans->skipTo( includeSpans->doc() ); + + while( moreExclude // while exclude is before + && includeSpans->doc() == excludeSpans->doc() + && excludeSpans->end() <= includeSpans->start()) + { + moreExclude = excludeSpans->next(); // increment exclude + } + + if( ! moreExclude // if no intersection + || includeSpans->doc() != excludeSpans->doc() + || includeSpans->end() <= excludeSpans->start()) + break; // we found a match + + moreInclude = includeSpans->next(); // intersected: keep scanning + } + + return moreInclude; +} + + +bool SpanNotQuery::SpanNotQuerySpans::skipTo( int32_t target ) +{ + if( moreInclude ) // skip include + moreInclude = includeSpans->skipTo( target ); + + if( ! moreInclude ) + return false; + + if( moreExclude // skip exclude + && includeSpans->doc() > excludeSpans->doc()) + { + moreExclude = excludeSpans->skipTo( includeSpans->doc() ); + } + + while( moreExclude // while exclude is before + && includeSpans->doc() == excludeSpans->doc() + && excludeSpans->end() <= includeSpans->start()) + { + moreExclude = excludeSpans->next(); // increment exclude + } + + if( ! moreExclude // if no intersection + || includeSpans->doc() != excludeSpans->doc() + || includeSpans->end() <= excludeSpans->start()) + { + return true; // we found a match + } + + return next(); // scan to next match +} + +TCHAR* SpanNotQuery::SpanNotQuerySpans::toString() const +{ + CL_NS(util)::StringBuffer buffer; + TCHAR * tszQry = parentQuery->toString(); + + buffer.append( _T( "spans(" )); + buffer.append( tszQry ); + buffer.append( _T( ")" )); + + _CLDELETE_LARRAY( tszQry ); + return buffer.toString(); +} + + +///////////////////////////////////////////////////////////////////////////// +SpanNotQuery::SpanNotQuery( SpanQuery * include, SpanQuery * exclude, bool bDeleteQueries ) +{ + this->include = include; + this->exclude = exclude; + this->bDeleteQueries = bDeleteQueries; + + if( 0 != _tcscmp( include->getField(), exclude->getField())) + _CLTHROWA( CL_ERR_IllegalArgument, "Clauses must have same field." ); +} + +SpanNotQuery::SpanNotQuery( const SpanNotQuery& clone ) : + SpanQuery( clone ) +{ + include = (SpanQuery *) clone.include->clone(); + exclude = (SpanQuery *) clone.exclude->clone(); + bDeleteQueries = true; +} + +SpanNotQuery::~SpanNotQuery() +{ + if( bDeleteQueries ) + { + _CLLDELETE( include ); + _CLLDELETE( exclude ); + } +} + +CL_NS(search)::Query * SpanNotQuery::clone() const +{ + return _CLNEW SpanNotQuery( *this ); +} + +const char * SpanNotQuery::getClassName() +{ + return "SpanNotQuery"; +} + +const char * SpanNotQuery::getObjectName() const +{ + return getClassName(); +} + +SpanQuery * SpanNotQuery::getInclude() const +{ + return include; +} + +SpanQuery * SpanNotQuery::getExclude() const +{ + return exclude; +} + +const TCHAR * SpanNotQuery::getField() const +{ + return include->getField(); +} + +void SpanNotQuery::extractTerms( CL_NS(search)::TermSet * terms ) const +{ + include->extractTerms( terms ); +} + +TCHAR* SpanNotQuery::toString( const TCHAR* field ) const +{ + CL_NS(util)::StringBuffer buffer; + + TCHAR * tmp; + + buffer.append( _T( "spanNot(" )); + tmp = include->toString( field ); + buffer.append( tmp ); + _CLDELETE_ARRAY( tmp ); + + buffer.append( _T( ", " )); + tmp = exclude->toString( field ); + buffer.append( tmp ); + _CLDELETE_ARRAY( tmp ); + + buffer.append( _T( ")" )); + buffer.appendFloat( getBoost(), 1 ); + + return buffer.toString(); +} + +CL_NS(search)::Query * SpanNotQuery::rewrite( CL_NS(index)::IndexReader * reader ) +{ + SpanNotQuery * clone = NULL; + + SpanQuery * rewrittenInclude = (SpanQuery *) include->rewrite( reader ); + if( rewrittenInclude != include ) + { + clone = (SpanNotQuery *) this->clone(); + _CLLDELETE( clone->include ); + clone->include = rewrittenInclude; + } + + SpanQuery * rewrittenExclude = (SpanQuery *) exclude->rewrite( reader ); + if( rewrittenExclude != exclude ) + { + if( ! clone ) + clone = (SpanNotQuery *) this->clone(); + _CLLDELETE( clone->exclude ); + clone->exclude = rewrittenExclude; + } + + if( clone ) + return clone; // some clauses rewrote + else + return this; // no clauses rewrote +} + +bool SpanNotQuery::equals( Query* other ) const +{ + if( this == other ) return true; + if( other == NULL || !( other->instanceOf( SpanNotQuery::getClassName() ))) + return false; + + SpanNotQuery * that = (SpanNotQuery *) other; + return include->equals( that->include ) + && exclude->equals( that->exclude ) + && getBoost() == that->getBoost(); +} + +size_t SpanNotQuery::hashCode() const +{ + size_t h = include->hashCode(); + h = (h << 1) | (h >> 31); // rotate left + h ^= exclude->hashCode(); + h = (h << 1) | (h >> 31); // rotate left + h ^= Similarity::floatToByte( getBoost() ); + + return h; +} + +Spans * SpanNotQuery::getSpans( CL_NS(index)::IndexReader * reader ) +{ + return _CLNEW SpanNotQuerySpans( this, reader ); +} + +CL_NS_END2 diff --git a/Pods/BRCLucene/src/core/CLucene/search/spans/SpanNotQuery.h b/Pods/BRCLucene/src/core/CLucene/search/spans/SpanNotQuery.h new file mode 100644 index 0000000..2254105 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/spans/SpanNotQuery.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_spans_SpanNotQuery_ +#define _lucene_search_spans_SpanNotQuery_ + +CL_CLASS_DEF(index, IndexReader); +#include "SpanQuery.h" + +CL_NS_DEF2( search, spans ) + +/** Removes matches which overlap with another SpanQuery. */ +class CLUCENE_EXPORT SpanNotQuery : public SpanQuery +{ +private: + class SpanNotQuerySpans; + +private: + SpanQuery * include; + SpanQuery * exclude; + bool bDeleteQueries; + +protected: + SpanNotQuery( const SpanNotQuery& clone ); + +public: + /** Construct a SpanNotQuery matching spans from include which + * have no overlap with spans from exclude.*/ + SpanNotQuery( SpanQuery * include, SpanQuery * exclude, bool bDeleteQueries ); + virtual ~SpanNotQuery(); + + CL_NS(search)::Query * clone() const; + + static const char * getClassName(); + const char * getObjectName() const; + + /** Return the SpanQuery whose matches are filtered. */ + SpanQuery * getInclude() const; + + /** Return the SpanQuery whose matches must not overlap those returned. */ + SpanQuery * getExclude() const; + + const TCHAR * getField() const; + + /** Returns a collection of all terms matched by this query. + * @deprecated use extractTerms instead + * @see #extractTerms(Set) + */ +// public Collection getTerms() { return include.getTerms(); } + + void extractTerms( CL_NS(search)::TermSet * terms ) const; + + CL_NS(search)::Query * rewrite( CL_NS(index)::IndexReader * reader ); + + using Query::toString; + TCHAR* toString( const TCHAR* field ) const; + bool equals( Query* other ) const; + size_t hashCode() const; + + Spans * getSpans( CL_NS(index)::IndexReader * reader ); +}; + +CL_NS_END2 +#endif // _lucene_search_spans_SpanNotQuery_ diff --git a/Pods/BRCLucene/src/core/CLucene/search/spans/SpanOrQuery.cpp b/Pods/BRCLucene/src/core/CLucene/search/spans/SpanOrQuery.cpp new file mode 100644 index 0000000..05209d5 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/spans/SpanOrQuery.cpp @@ -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. + ------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "CLucene/search/Similarity.h" +#include "CLucene/util/StringBuffer.h" +#include "CLucene/util/PriorityQueue.h" + +#include "SpanOrQuery.h" +#include "_EmptySpans.h" + + +CL_NS_DEF2( search, spans ) + + +///////////////////////////////////////////////////////////////////////////// +class SpanOrQuery::SpanQueue : public CL_NS(util)::PriorityQueue > +{ +public: + SpanQueue( int32_t size ) { initialize( size, true ); } + virtual ~SpanQueue() {} + +protected: + bool lessThan(Spans* spans1, Spans* spans2 ) + { + if( spans1->doc() == spans2->doc() ) + { + if( spans1->start() == spans2->start()) + return spans1->end() < spans2->end(); + else + return spans1->start() < spans2->start(); + } + else + return spans1->doc() < spans2->doc(); + } +}; + + +///////////////////////////////////////////////////////////////////////////// +class SpanOrQuery::SpanOrQuerySpans : public Spans +{ +private: + SpanQueue * queue; + SpanOrQuery * parentQuery; + CL_NS(index)::IndexReader * reader; + +public: + SpanOrQuerySpans( SpanOrQuery * parentQuery, CL_NS(index)::IndexReader * reader ); + virtual ~SpanOrQuerySpans(); + + bool next(); + bool skipTo( int32_t target ); + + int32_t doc() const { return top()->doc(); } + int32_t start() const { return top()->start(); } + int32_t end() const { return top()->end(); } + + TCHAR* toString() const; + +private: + Spans * top() const { return queue->top(); } + bool initSpanQueue( int32_t target ); +}; + + +SpanOrQuery::SpanOrQuerySpans::SpanOrQuerySpans( SpanOrQuery * parentQuery, CL_NS(index)::IndexReader * reader ) +{ + this->parentQuery = parentQuery; + this->reader = reader; + this->queue = NULL; +} + +SpanOrQuery::SpanOrQuerySpans::~SpanOrQuerySpans() +{ + _CLLDELETE( queue ); +} + +bool SpanOrQuery::SpanOrQuerySpans::next() +{ + if( ! queue ) + return initSpanQueue( -1 ); + + if( queue->size() == 0 ) // all done + return false; + + if( top()->next() ) // move to next + { + queue->adjustTop(); + return true; + } + + _CLLDELETE( queue->pop() ); // exhausted a clause + return queue->size() != 0; +} + +bool SpanOrQuery::SpanOrQuerySpans::skipTo( int32_t target ) +{ + if( ! queue ) + return initSpanQueue( target ); + + while( queue->size() != 0 && top()->doc() < target ) + { + if( top()->skipTo( target )) + queue->adjustTop(); + else + _CLLDELETE( queue->pop() ); + } + + return queue->size() != 0; +} + +TCHAR* SpanOrQuery::SpanOrQuerySpans::toString() const +{ + CL_NS(util)::StringBuffer buffer; + TCHAR * tszQry = parentQuery->toString(); + + buffer.append( _T( "spans(" )); + buffer.append( tszQry ); + buffer.append( _T( ")" )); + + _CLDELETE_LARRAY( tszQry ); + return buffer.toString(); +} + +bool SpanOrQuery::SpanOrQuerySpans::initSpanQueue( int32_t target ) +{ + queue = _CLNEW SpanQueue( parentQuery->clausesCount ); + + for( size_t i = 0; i < parentQuery->clausesCount; i++ ) + { + Spans * spans = parentQuery->clauses[ i ]->getSpans( reader ); + if(( target == -1 && spans->next()) || ( target != -1 && spans->skipTo( target ))) + queue->put( spans ); + else + _CLLDELETE( spans ); + } + return ( queue->size() != 0 ); +} + + +///////////////////////////////////////////////////////////////////////////// +SpanOrQuery::SpanOrQuery( const SpanOrQuery& clone ) : + SpanQuery( clone ) +{ + this->clauses = _CL_NEWARRAY( SpanQuery *, clone.clausesCount ); + for( size_t i = 0; i < clone.clausesCount; i++ ) + this->clauses[ i ] = (SpanQuery *) clone.clauses[ i ]->clone(); + + this->clausesCount = clone.clausesCount; + this->bDeleteClauses = true; + + this->field = NULL; + setField( clone.field ); +} + +SpanOrQuery::~SpanOrQuery() +{ + if( bDeleteClauses ) + { + for( size_t i = 0; i < clausesCount; i++ ) + _CLLDELETE( clauses[ i ] ); + } + + clausesCount = 0; + _CLDELETE_LARRAY( clauses ); + _CLDELETE_LARRAY( field ); +} + +CL_NS(search)::Query * SpanOrQuery::clone() const +{ + return _CLNEW SpanOrQuery( *this ); +} + +const char * SpanOrQuery::getClassName() +{ + return "SpanOrQuery"; +} + +const char * SpanOrQuery::getObjectName() const +{ + return getClassName(); +} + +SpanQuery ** SpanOrQuery::getClauses() const +{ + return clauses; +} + +size_t SpanOrQuery::getClausesCount() const +{ + return clausesCount; +} + +void SpanOrQuery::setField( const TCHAR * field ) +{ + _CLDELETE_LARRAY( this->field ); + this->field = STRDUP_TtoT( field ); +} + +const TCHAR * SpanOrQuery::getField() const +{ + return field; +} + +void SpanOrQuery::extractTerms( CL_NS(search)::TermSet * terms ) const +{ + for( size_t i = 0; i < clausesCount; i++ ) + clauses[ i ]->extractTerms( terms ); +} + +CL_NS(search)::Query * SpanOrQuery::rewrite( CL_NS(index)::IndexReader * reader ) +{ + SpanOrQuery * clone = NULL; + for( size_t i = 0; i < clausesCount; i++ ) + { + SpanQuery * c = clauses[ i ]; + SpanQuery * query = (SpanQuery *) c->rewrite( reader ); + if( query != c ) + { // clause rewrote: must clone + if( clone == NULL ) + clone = (SpanOrQuery *) this->clone(); + + _CLLDELETE( clone->clauses[ i ] ); + clone->clauses[ i ] = query; + } + } + if( clone ) + return clone; // some clauses rewrote + else + return this; // no clauses rewrote +} + +TCHAR* SpanOrQuery::toString( const TCHAR* field ) const +{ + CL_NS(util)::StringBuffer buffer; + + buffer.append( _T( "spanOr([" )); + for( size_t i = 0; i < clausesCount; i++ ) + { + if( i != 0 ) + buffer.append( _T( ", " )); + + TCHAR * tszClause = clauses[ i ]->toString( field ); + buffer.append( tszClause ); + _CLDELETE_ARRAY( tszClause ); + } + + buffer.append( _T( "])" )); + buffer.appendBoost( getBoost() ); + + return buffer.toString(); +} + +bool SpanOrQuery::equals( Query* other ) const +{ + if( this == other ) return true; + if( other == NULL || !( other->instanceOf( SpanOrQuery::getClassName() ))) + return false; + + SpanOrQuery * that = (SpanOrQuery *) other; + if( 0 != _tcscmp( field, that->field ) + || getBoost() != that->getBoost()) + { + return false; + } + + if( clausesCount != that->clausesCount ) + return false; + for( size_t i = 0; i < clausesCount; i++ ) + { + if( ! clauses[ i ]->equals( that->clauses[ i ] )) + return false; + } + + return true; +} + +size_t SpanOrQuery::hashCode() const +{ + size_t h = 1; + for( size_t i = 0; i < clausesCount; i++ ) + h = 31*h + clauses[ i ]->hashCode(); + + h ^= (h << 10) | (h >> 23); + h ^= Similarity::floatToByte( getBoost() ); + + return h; +} + +Spans * SpanOrQuery::getSpans( CL_NS(index)::IndexReader * reader ) +{ + if( clausesCount == 0 ) + return _CLNEW EmptySpans(); // CLucene: 0-clause case + + if( clausesCount == 1 ) // optimize 1-clause case + return clauses[ 0 ]->getSpans( reader ); + + return _CLNEW SpanOrQuerySpans( this, reader ); +} + +CL_NS_END2 diff --git a/Pods/BRCLucene/src/core/CLucene/search/spans/SpanOrQuery.h b/Pods/BRCLucene/src/core/CLucene/search/spans/SpanOrQuery.h new file mode 100644 index 0000000..ade7a5d --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/spans/SpanOrQuery.h @@ -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. + ------------------------------------------------------------------------------*/ +#ifndef _lucene_search_spans_SpanOrQuery_ +#define _lucene_search_spans_SpanOrQuery_ + +CL_CLASS_DEF(index, IndexReader); +#include "SpanQuery.h" + +CL_NS_DEF2( search, spans ) + +/** + * Matches the union of its clauses. + */ +class CLUCENE_EXPORT SpanOrQuery : public SpanQuery +{ +private: + class SpanQueue; + class SpanOrQuerySpans; + +private: + SpanQuery ** clauses; + size_t clausesCount; + bool bDeleteClauses; + + TCHAR * field; + +protected: + SpanOrQuery( const SpanOrQuery& clone ); + +public: + /** Construct a SpanOrQuery merging the provided clauses. */ + template + SpanOrQuery( ClauseIterator first, ClauseIterator last, bool bDeleteClauses ) + { + // CLucene specific: at least one clause must be here + if( first == last ) + _CLTHROWA( CL_ERR_IllegalArgument, "Missing query clauses." ); + + this->bDeleteClauses = bDeleteClauses; + this->clausesCount = last - first; + this->clauses = _CL_NEWARRAY( SpanQuery *, clausesCount ); + this->field = NULL; + + // copy clauses array into an array and check fields + for( size_t i = 0; first != last; first++, i++ ) + { + SpanQuery * clause = *first; + if( i == 0 ) + { + setField( clause->getField() ); + } + else if( 0 != _tcscmp( clause->getField(), field )) + { + _CLTHROWA( CL_ERR_IllegalArgument, "Clauses must have same field." ); + } + this->clauses[ i ] = clause; + } + } + + virtual ~SpanOrQuery(); + + CL_NS(search)::Query * clone() const; + + static const char * getClassName(); + const char * getObjectName() const; + + /** Return the clauses whose spans are matched. + * CLucene: pointer to the internal array + */ + SpanQuery ** getClauses() const; + size_t getClausesCount() const; + + const TCHAR * getField() const; + + /** Returns a collection of all terms matched by this query. + * @deprecated use extractTerms instead + * @see #extractTerms(Set) + */ +// public Collection getTerms() + + void extractTerms( CL_NS(search)::TermSet * terms ) const; + + CL_NS(search)::Query * rewrite( CL_NS(index)::IndexReader * reader ); + + using Query::toString; + TCHAR* toString( const TCHAR* field ) const; + bool equals( Query* other ) const; + size_t hashCode() const; + + /** This returns some kind of lazy spans. The set will be evaluated with the first call + * and this query and the given reader must exists at this time + */ + Spans * getSpans( CL_NS(index)::IndexReader * reader ); + +protected: + void setField( const TCHAR * field ); +}; + +CL_NS_END2 +#endif // _lucene_search_spans_SpanOrQuery_ diff --git a/Pods/BRCLucene/src/core/CLucene/search/spans/SpanQuery.h b/Pods/BRCLucene/src/core/CLucene/search/spans/SpanQuery.h new file mode 100644 index 0000000..cb7f20b --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/spans/SpanQuery.h @@ -0,0 +1,40 @@ +/*------------------------------------------------------------------------------ + * 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_spans_SpanQuery_ +#define _lucene_search_spans_SpanQuery_ + +#include "CLucene/search/Query.h" +#include "CLucene/search/spans/SpanWeight.h" +CL_CLASS_DEF2( search, spans, Spans ) + +CL_NS_DEF2( search, spans ) + +/** Base class for span-based queries. */ +class CLUCENE_EXPORT SpanQuery : public CL_NS(search)::Query +{ +public: + /** Expert: Returns the matches for this query in an index. Used internally + * to search for spans. */ + virtual Spans * getSpans( CL_NS(index)::IndexReader * reader ) = 0; + + /** Returns the name of the field matched by this query.*/ + virtual const TCHAR* getField() const = 0; + + /** Returns a collection of all terms matched by this query. + * @deprecated use extractTerms instead + * @see Query#extractTerms(Set) + */ +// public abstract Collection getTerms(); + + Weight * _createWeight( CL_NS(search)::Searcher * searcher ) + { + return _CLNEW SpanWeight( this, searcher ); + } +}; + +CL_NS_END2 +#endif // _lucene_search_spans_SpanQuery_ diff --git a/Pods/BRCLucene/src/core/CLucene/search/spans/SpanScorer.cpp b/Pods/BRCLucene/src/core/CLucene/search/spans/SpanScorer.cpp new file mode 100644 index 0000000..feee566 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/spans/SpanScorer.cpp @@ -0,0 +1,122 @@ +/*------------------------------------------------------------------------------ + * 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/_ApiHeader.h" +#include "CLucene/search/SearchHeader.h" +#include "CLucene/search/Similarity.h" +#include "CLucene/search/Explanation.h" +#include "CLucene/util/StringBuffer.h" + +#include "SpanScorer.h" +#include "Spans.h" + +CL_NS_DEF2(search, spans) + +SpanScorer::SpanScorer( Spans * spans, Weight * weight, Similarity * similarity, uint8_t* norms ) : +Scorer( similarity ), firstTime( true ), more( true ) +{ + this->spans = spans; + this->norms = norms; + this->weight = weight; + this->value = weight->getValue(); + doc_ = -1; +} + +SpanScorer::~SpanScorer() +{ + _CLLDELETE( spans ); +} + +bool SpanScorer::next() +{ + if( firstTime ) + { + more = spans->next(); + firstTime = false; + } + return setFreqCurrentDoc(); +} + +bool SpanScorer::skipTo( int32_t target ) +{ + if( firstTime ) + { + more = spans->skipTo( target ); + firstTime = false; + } + + if( ! more ) + return false; + + if( spans->doc() < target ) + { + // setFreqCurrentDoc() leaves spans.doc() ahead + more = spans->skipTo( target ); + } + + return setFreqCurrentDoc(); +} + +bool SpanScorer::setFreqCurrentDoc() +{ + if( ! more ) + return false; + + doc_ = spans->doc(); + freq = 0.0f; + while( more && doc_ == spans->doc() ) + { + int32_t matchLength = spans->end() - spans->start(); + freq += getSimilarity()->sloppyFreq( matchLength ); + more = spans->next(); + } + + return more || ( freq != 0 ); +} + +int32_t SpanScorer::doc() const +{ + return doc_; +} + +float_t SpanScorer::score() +{ + float_t raw = getSimilarity()->tf( freq ) * value; // raw score + return raw * Similarity::decodeNorm( norms[ doc_ ]); // normalize +} + +CL_NS(search)::Explanation * SpanScorer::explain( int32_t docIn ) +{ + Explanation * tfExplanation = _CLNEW Explanation(); + + skipTo( docIn ); + float_t phraseFreq = (doc() == docIn ) ? freq : 0.0f; + tfExplanation->setValue( getSimilarity()->tf( phraseFreq )); + + CL_NS(util)::StringBuffer strBuf( 50 ); + strBuf.append( _T( "tf(phraseFreq=" )); + strBuf.appendFloat( phraseFreq, 2 ); + strBuf.append( _T( ")" )); + tfExplanation->setDescription( strBuf.getBuffer() ); + + return tfExplanation; +} + +TCHAR* SpanScorer::toString() +{ + CL_NS(util)::StringBuffer buf; + buf.append( _T( "SpanScorer(" )); + + TCHAR* tmp = weight->toString(); + buf.append( tmp ); + _CLDELETE_CARRAY( tmp ); + + buf.append( _T( ")" )); + + return buf.toString(); +} + +CL_NS_END2 diff --git a/Pods/BRCLucene/src/core/CLucene/search/spans/SpanScorer.h b/Pods/BRCLucene/src/core/CLucene/search/spans/SpanScorer.h new file mode 100644 index 0000000..bd775f6 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/spans/SpanScorer.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_spans_SpanScorer_ +#define _lucene_search_spans_SpanScorer_ + +#include "CLucene/search/Scorer.h" +CL_CLASS_DEF2(search,spans,Spans) +CL_CLASS_DEF(search,Explanation) +CL_CLASS_DEF(search,Weight) + +CL_NS_DEF2(search, spans) + +/** + * Public for extension only. + */ +class CLUCENE_EXPORT SpanScorer : public CL_NS(search)::Scorer +{ +protected: + Spans * spans; + CL_NS(search)::Weight * weight; + uint8_t* norms; + float_t value; + + bool firstTime; + bool more; + + int32_t doc_; + float_t freq; + + +public: + SpanScorer( Spans * spans, Weight * weight, Similarity * similarity, uint8_t* norms ); + virtual ~SpanScorer(); + + bool next(); + bool skipTo( int32_t target ); + int32_t doc() const; + float_t score(); + CL_NS(search)::Explanation* explain( int32_t docIn ); + TCHAR* toString(); + +protected: + bool setFreqCurrentDoc(); +}; + +CL_NS_END2 +#endif // _lucene_search_spans_SpanScorer_ diff --git a/Pods/BRCLucene/src/core/CLucene/search/spans/SpanTermQuery.cpp b/Pods/BRCLucene/src/core/CLucene/search/spans/SpanTermQuery.cpp new file mode 100644 index 0000000..e7dcc32 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/spans/SpanTermQuery.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/_ApiHeader.h" +#include "CLucene/index/IndexReader.h" +#include "CLucene/index/Term.h" +#include "CLucene/search/Similarity.h" +#include "CLucene/util/StringBuffer.h" + +#include "SpanTermQuery.h" +#include "_TermSpans.h" + +CL_NS_DEF2( search, spans ) + +SpanTermQuery::SpanTermQuery( CL_NS(index)::Term * term ) +{ + this->term = _CL_POINTER( term ); +} + +SpanTermQuery::SpanTermQuery( const SpanTermQuery& clone ) : + SpanQuery( clone ) +{ + this->term = _CL_POINTER( clone.term ); +} + +SpanTermQuery::~SpanTermQuery() +{ + _CLLDECDELETE( term ); +} + +CL_NS(search)::Query * SpanTermQuery::clone() const +{ + return _CLNEW SpanTermQuery( *this ); +} + +const char* SpanTermQuery::getClassName() +{ + return "SpanTermQuery"; +} + +const char* SpanTermQuery::getObjectName() const +{ + return getClassName(); +} + +size_t SpanTermQuery::hashCode() const +{ + return Similarity::floatToByte(getBoost()) ^ term->hashCode() ^ 0xD23FE494; +} + +CL_NS(index)::Term * SpanTermQuery::getTerm( bool pointer ) const +{ + if ( pointer ) + return _CL_POINTER( term ); + else + return term; +} + +const TCHAR * SpanTermQuery::getField() const +{ + return term->field(); +} + +void SpanTermQuery::extractTerms( CL_NS(search)::TermSet * terms ) const +{ + if( term && terms->end() == terms->find( term )) + terms->insert( _CL_POINTER( term )); +} + +Spans * SpanTermQuery::getSpans( CL_NS(index)::IndexReader * reader ) +{ + return _CLNEW TermSpans( reader->termPositions( term ), term ); +} + +TCHAR* SpanTermQuery::toString( const TCHAR* field ) const +{ + CL_NS(util)::StringBuffer buffer; + + if( field && 0 == _tcscmp( term->field(), field )) + buffer.append( term->text() ); + else + { + TCHAR * tszTerm = term->toString(); + buffer.append( tszTerm ); + buffer.appendBoost( getBoost() ); + _CLDELETE_CARRAY( tszTerm ); + } + return buffer.toString(); +} + +bool SpanTermQuery::equals( Query* other ) const +{ + if( !( other->instanceOf( SpanTermQuery::getClassName() ))) + return false; + + SpanTermQuery * that = (SpanTermQuery *) other; + return ( this->getBoost() == that->getBoost() ) + && this->term->equals( that->term ); +} + +CL_NS_END2 diff --git a/Pods/BRCLucene/src/core/CLucene/search/spans/SpanTermQuery.h b/Pods/BRCLucene/src/core/CLucene/search/spans/SpanTermQuery.h new file mode 100644 index 0000000..6adf27b --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/spans/SpanTermQuery.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_spans_SpanTermQuery_ +#define _lucene_search_spans_SpanTermQuery_ + +CL_CLASS_DEF(index, Term); +CL_CLASS_DEF(index, IndexReader); +#include "SpanQuery.h" + +CL_NS_DEF2( search, spans ) + +/** Matches spans containing a term. */ +class CLUCENE_EXPORT SpanTermQuery : public SpanQuery +{ +protected: + CL_NS(index)::Term * term; + +protected: + SpanTermQuery( const SpanTermQuery& clone ); + +public: + /** Construct a SpanTermQuery matching the named term's spans. */ + SpanTermQuery( CL_NS(index)::Term * term ); + virtual ~SpanTermQuery(); + + static const char * getClassName(); + const char * getObjectName() const; + + /** Return the term whose spans are matched. */ + CL_NS(index)::Term * getTerm( bool pointer=true ) const; + + const TCHAR * getField() const; + + /** Returns a collection of all terms matched by this query. + * @deprecated use extractTerms instead + * @see #extractTerms(Set) + */ +// public Collection getTerms() + + void extractTerms( CL_NS(search)::TermSet * terms ) const; + Spans * getSpans( CL_NS(index)::IndexReader * reader ); + + CL_NS(search)::Query * clone() const; + + /** Returns true iff o is equal to this. */ + bool equals( Query* other ) const; + + /** Returns a hash code value for this object.*/ + size_t hashCode() const; + + TCHAR* toString( const TCHAR* field ) const; +}; + +CL_NS_END2 +#endif //_lucene_search_spans_SpanTermQuery_ diff --git a/Pods/BRCLucene/src/core/CLucene/search/spans/SpanWeight.cpp b/Pods/BRCLucene/src/core/CLucene/search/spans/SpanWeight.cpp new file mode 100644 index 0000000..767721f --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/spans/SpanWeight.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. + ------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "CLucene/index/IndexReader.h" +#include "CLucene/search/Similarity.h" +#include "CLucene/search/Explanation.h" +#include "CLucene/search/Scorer.h" +#include "CLucene/util/StringBuffer.h" + +#include "SpanWeight.h" +#include "SpanQuery.h" +#include "SpanScorer.h" + +CL_NS_USE(util) +CL_NS_DEF2(search, spans) + +SpanWeight::SpanWeight( SpanQuery * query, CL_NS(search)::Searcher * searcher ) +{ + this->similarity = query->getSimilarity( searcher ); + this->query = query; + + terms = _CLNEW TermSet(); + query->extractTerms( terms ); + idf = similarity->idf( terms->begin(), terms->end(), searcher ); +} + +SpanWeight::~SpanWeight() +{ + for( TermSet::iterator iTerm = terms->begin(); iTerm != terms->end(); iTerm++ ) + _CLLDECDELETE( *iTerm ); + + _CLDELETE( terms ); +} + +CL_NS(search)::Query * SpanWeight::getQuery() +{ + return query; +} + +float_t SpanWeight::getValue() +{ + return value; +} + +float_t SpanWeight::sumOfSquaredWeights() +{ + queryWeight = idf * query->getBoost(); // compute query weight + return queryWeight * queryWeight; // square it +} + +void SpanWeight::normalize( float_t norm ) +{ + queryNorm = norm; + queryWeight *= queryNorm; // normalize query weight + value = queryWeight * idf; // idf for document +} + +CL_NS(search)::Scorer * SpanWeight::scorer( CL_NS(index)::IndexReader* reader ) +{ + return _CLNEW SpanScorer( query->getSpans( reader ), + this, + similarity, + reader->norms( query->getField() )); +} + +CL_NS(search)::Explanation * SpanWeight::explain( CL_NS(index)::IndexReader* reader, int32_t doc ) +{ + ComplexExplanation * result = _CLNEW ComplexExplanation(); + StringBuffer strBuf(100); + + const TCHAR * field = ((SpanQuery *)getQuery())->getField(); + TCHAR * tQry = getQuery()->toString(); + TCHAR * tQryF = getQuery()->toString( field ); + + strBuf.append( _T( "weight(" )); + strBuf.append( tQry ); + strBuf.append( _T( " in " )); + strBuf.appendInt( doc ); + strBuf.append( _T( "), product of:" )); + result->setDescription( strBuf.getBuffer() ); + + CL_NS(util)::StringBuffer docFreqs; + for( TermSet::iterator itTerms = terms->begin(); itTerms != terms->end(); itTerms++ ) + { + CL_NS(index)::Term * term = (*itTerms); + docFreqs.append( term->text()); + docFreqs.append( _T( "=" )); + docFreqs.appendInt( reader->docFreq( term )); + if( itTerms != terms->end() ) + docFreqs.append( _T( " " )); + } + + strBuf.clear(); + strBuf.append( _T( "idf(" )); + strBuf.append( field ); + strBuf.append( _T( ": " )); + strBuf.append( docFreqs.getBuffer()); + strBuf.append( _T( ")" )); + Explanation * idfExpl = _CLNEW Explanation( idf, strBuf.getBuffer() ); + + // explain query weight + Explanation * queryExpl = _CLNEW Explanation(); + strBuf.clear(); + strBuf.append( _T( "queryWeight(" )); + strBuf.append( tQry ); + strBuf.append( _T( "), product of:" )); + queryExpl->setDescription( strBuf.getBuffer() ); + + if( getQuery()->getBoost() != 1.0f ) + queryExpl->addDetail( _CLNEW Explanation( getQuery()->getBoost(), _T( "boost" ))); + + queryExpl->addDetail( idfExpl ); + + Explanation * queryNormExpl = _CLNEW Explanation( queryNorm, _T( "queryNorm" )); + queryExpl->addDetail( queryNormExpl ); + queryExpl->setValue( getQuery()->getBoost() * + idfExpl->getValue() * + queryNormExpl->getValue()); + result->addDetail( queryExpl ); + + // explain field weight + ComplexExplanation * fieldExpl = _CLNEW ComplexExplanation(); + strBuf.clear(); + strBuf.append( _T( "fieldWeight(" )); + strBuf.append( field ); + strBuf.append( _T( ":" )); + strBuf.append( tQryF ); + strBuf.append( _T( " in " )); + strBuf.appendInt( doc ); + strBuf.append( _T( "), product of:" )); + fieldExpl->setDescription( strBuf.getBuffer() ); + + Scorer * pScorer = scorer( reader ); + Explanation * tfExpl = pScorer->explain( doc ); + fieldExpl->addDetail( tfExpl ); + fieldExpl->addDetail( idfExpl->clone() ); + + Explanation * fieldNormExpl = _CLNEW Explanation(); + uint8_t * fieldNorms = reader->norms( field ); + float_t fieldNorm = fieldNorms != NULL ? Similarity::decodeNorm( fieldNorms[ doc ] ) : 0.0f; + fieldNormExpl->setValue( fieldNorm ); + strBuf.clear(); + strBuf.append( _T( "fieldNorm(field=" )); + strBuf.append( field ); + strBuf.append( _T( ", doc=" )); + strBuf.appendInt( doc ); + strBuf.append( _T( ")" )); + fieldNormExpl->setDescription( strBuf.getBuffer()); + fieldExpl->addDetail( fieldNormExpl ); + + fieldExpl->setMatch( tfExpl->isMatch() ); + fieldExpl->setValue( tfExpl->getValue() * + idfExpl->getValue() * + fieldNormExpl->getValue() ); + + _CLLDELETE( pScorer ); + _CLDELETE_LCARRAY( tQry ); + _CLDELETE_LCARRAY( tQryF ); + + if( queryExpl->getValue() == 1.0f ) + { + _CLLDELETE( result ); + return fieldExpl; + } + else + { + result->addDetail( fieldExpl ); + result->setMatch( fieldExpl->getMatch() ); + + // combine them + result->setValue( queryExpl->getValue() * fieldExpl->getValue() ); + return result; + } +} + +CL_NS_END2 diff --git a/Pods/BRCLucene/src/core/CLucene/search/spans/SpanWeight.h b/Pods/BRCLucene/src/core/CLucene/search/spans/SpanWeight.h new file mode 100644 index 0000000..dddd56a --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/spans/SpanWeight.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_spans_SpanWeight_ +#define _lucene_search_spans_SpanWeight_ + +#include "CLucene/search/SearchHeader.h" +#include "CLucene/search/Query.h" +CL_CLASS_DEF2(search,spans,SpanQuery) +CL_CLASS_DEF(search,Similarity) +CL_CLASS_DEF(search,Searcher) + +CL_NS_DEF2(search, spans) + +/** + * Expert-only. Public for use by other weight implementations + */ +class CLUCENE_EXPORT SpanWeight : public CL_NS(search)::Weight +{ +protected: + CL_NS(search)::Similarity * similarity; + float_t value; + float_t idf; + float_t queryNorm; + float_t queryWeight; + + CL_NS(search)::TermSet * terms; + SpanQuery * query; + +public: + SpanWeight( SpanQuery * query, CL_NS(search)::Searcher * searcher ); + virtual ~SpanWeight(); + + CL_NS(search)::Scorer * scorer( CL_NS(index)::IndexReader* reader ); + CL_NS(search)::Explanation * explain( CL_NS(index)::IndexReader* reader, int32_t doc ); + CL_NS(search)::Query * getQuery(); + float_t getValue(); + float_t sumOfSquaredWeights(); + void normalize( float_t norm ); +}; + +CL_NS_END2 +#endif // _lucene_search_spans_SpanWeight_ diff --git a/Pods/BRCLucene/src/core/CLucene/search/spans/Spans.h b/Pods/BRCLucene/src/core/CLucene/search/spans/Spans.h new file mode 100644 index 0000000..f552fc2 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/spans/Spans.h @@ -0,0 +1,54 @@ +/*------------------------------------------------------------------------------ + * 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_spans_Spans_ +#define _lucene_search_spans_Spans_ + +CL_NS_DEF2( search, spans ) + +/** Expert: an enumeration of span matches. Used to implement span searching. + * Each span represents a range of term positions within a document. Matches + * are enumerated in order, by increasing document number, within that by + * increasing start position and finally by increasing end position. */ +class CLUCENE_EXPORT Spans +{ +public: + /** Empty base destructor */ + virtual ~Spans() {}; + + /** Move to the next match, returning true iff any such exists. */ + virtual bool next() = 0; + + /** Skips to the first match beyond the current, whose document number is + * greater than or equal to target.

Returns true iff there is such + * a match.

Behaves as if written:

+     *   boolean skipTo(int target) {
+     *     do {
+     *       if (!next())
+     * 	     return false;
+     *     } while (target > doc());
+     *     return true;
+     *   }
+     * 
+ * Most implementations are considerably more efficient than that. + */ + virtual bool skipTo( int32_t target ) = 0; + + /** Returns the document number of the current match. Initially invalid. */ + virtual int32_t doc() const = 0; + + /** Returns the start position of the current match. Initially invalid. */ + virtual int32_t start() const = 0; + + /** Returns the end position of the current match. Initially invalid. */ + virtual int32_t end() const = 0; + + /** Returns the string representation of the spans */ + virtual TCHAR* toString() const = 0; +}; + +CL_NS_END2 +#endif // _lucene_search_spans_Spans_ diff --git a/Pods/BRCLucene/src/core/CLucene/search/spans/TermSpans.cpp b/Pods/BRCLucene/src/core/CLucene/search/spans/TermSpans.cpp new file mode 100644 index 0000000..969207b --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/spans/TermSpans.cpp @@ -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. + ------------------------------------------------------------------------------*/ +#include +#include "CLucene/_ApiHeader.h" + +#include + +#include "CLucene/index/Terms.h" +#include "CLucene/index/Term.h" +#include "CLucene/util/StringBuffer.h" + +#include "_TermSpans.h" + +CL_NS_DEF2(search, spans) + +TermSpans::TermSpans( CL_NS(index)::TermPositions * positions, CL_NS(index)::Term * term ) +{ + this->positions = positions; + this->term = _CL_POINTER( term ); + doc_ = -1; + freq = 0; + count = 0; + position = 0; +} + +TermSpans::~TermSpans() +{ + _CLLDELETE( positions ); + _CLLDECDELETE( term ); +} + +bool TermSpans::next() +{ + if( count == freq ) + { + if( ! positions->next()) + { + doc_ = INT_MAX; + return false; + } + doc_ = positions->doc(); + freq = positions->freq(); + count = 0; + } + position = positions->nextPosition(); + count++; + return true; +} + +bool TermSpans::skipTo( int32_t target ) +{ + // are we already at the correct position? + if( doc_ >= target ) + return true; + + if( !positions->skipTo( target )) + { + doc_ = INT_MAX; + return false; + } + + doc_ = positions->doc(); + freq = positions->freq(); + count = 0; + + position = positions->nextPosition(); + count++; + + return true; +} + +TCHAR* TermSpans::toString() const +{ + CL_NS(util)::StringBuffer strBuf( 50 ); + + TCHAR * tszTerm = term->toString(); + strBuf.append( _T( "spans(" )); + strBuf.append( tszTerm ); + strBuf.append( _T( ")@" )); + if( doc_ == -1 ) + strBuf.append( _T( "START" )); + else if( doc_ == INT_MAX ) + strBuf.append( _T( "END" )); + else + { + strBuf.appendInt( doc_ ); + strBuf.append( _T( "-" )); + strBuf.appendInt( position ); + } + _CLDELETE_CARRAY( tszTerm ); + + return strBuf.toString(); +} + +CL_NS_END2 diff --git a/Pods/BRCLucene/src/core/CLucene/search/spans/_EmptySpans.h b/Pods/BRCLucene/src/core/CLucene/search/spans/_EmptySpans.h new file mode 100644 index 0000000..65b0e01 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/spans/_EmptySpans.h @@ -0,0 +1,35 @@ +/*------------------------------------------------------------------------------ + * 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_spans_EmptySpans_ +#define _lucene_search_spans_EmptySpans_ + +#include "Spans.h" +#include + +CL_NS_DEF2( search, spans ) + +/** CLucene specific: Empty span enumeration, used for optimized cases + * when there are no clauses in SpanNearQuery or SpanOrQuery + */ +class EmptySpans : public Spans +{ +public: + EmptySpans() {} + virtual ~ EmptySpans() {} + + bool next() { return false; } + bool skipTo( int32_t target ) { return false; } + + int32_t doc() const { assert( false ); return -1; } + int32_t start() const { assert( false ); return 0; } + int32_t end() const { assert( false ); return 1; } + + TCHAR* toString() const { return STRDUP_TtoT( _T( "spans()" )); } +}; + +CL_NS_END2 +#endif // _lucene_search_spans_EmptySpans_ diff --git a/Pods/BRCLucene/src/core/CLucene/search/spans/_NearSpansOrdered.h b/Pods/BRCLucene/src/core/CLucene/search/spans/_NearSpansOrdered.h new file mode 100644 index 0000000..092b507 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/spans/_NearSpansOrdered.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 _lucene_search_spans_NearSpansOrdered_ +#define _lucene_search_spans_NearSpansOrdered_ + +CL_CLASS_DEF(index, IndexReader) +CL_CLASS_DEF2(search, spans, SpanNearQuery) +#include "Spans.h" + +CL_NS_DEF2( search, spans ) + +/** A Spans that is formed from the ordered subspans of a SpanNearQuery + * where the subspans do not overlap and have a maximum slop between them. + *

+ * The formed spans only contains minimum slop matches.
+ * The matching slop is computed from the distance(s) between + * the non overlapping matching Spans.
+ * Successive matches are always formed from the successive Spans + * of the SpanNearQuery. + *

+ * The formed spans may contain overlaps when the slop is at least 1. + * For example, when querying using + *

t1 t2 t3
+ * with slop at least 1, the fragment: + *
t1 t2 t1 t3 t2 t3
+ * matches twice: + *
t1 t2 .. t3      
+ *
      t1 .. t2 t3
+ */ +class NearSpansOrdered : public Spans +{ +private: + int32_t allowedSlop; + bool firstTime; + bool more; + + /** The spans in the same order as the SpanNearQuery */ + Spans ** subSpans; + size_t subSpansCount; + + /** Indicates that all subSpans have same doc() */ + bool inSameDoc; + + int32_t matchDoc; + int32_t matchStart; + int32_t matchEnd; + + Spans ** subSpansByDoc; + + SpanNearQuery * query; + +public: + NearSpansOrdered( SpanNearQuery * spanNearQuery, CL_NS(index)::IndexReader * reader ); + virtual ~NearSpansOrdered(); + + bool next(); + bool skipTo( int32_t target ); + + int32_t doc() const { return matchDoc; } + int32_t start() const { return matchStart; } + int32_t end() const { return matchEnd; } + + TCHAR* toString() const; + + /** Check whether two Spans in the same document are ordered. + * @param spans1 + * @param spans2 + * @return true iff spans1 starts before spans2 + * or the spans start at the same position, + * and spans1 ends before spans2. + */ + static bool docSpansOrdered( Spans * spans1, Spans * spans2 ); + +private: + /** Advances the subSpans to just after an ordered match with a minimum slop + * that is smaller than the slop allowed by the SpanNearQuery. + * @return true iff there is such a match. + */ + bool advanceAfterOrdered(); + + /** Advance the subSpans to the same document */ + bool toSameDoc(); + + /** Like {@link #docSpansOrdered(Spans,Spans)}, but use the spans + * starts and ends as parameters. + */ + static bool docSpansOrdered( int32_t start1, int32_t end1, int32_t start2, int32_t end2 ); + + /** Order the subSpans within the same document by advancing all later spans + * after the previous one. + */ + bool stretchToOrder(); + + /** The subSpans are ordered in the same doc, so there is a possible match. + * Compute the slop while making the match as short as possible by advancing + * all subSpans except the last one in reverse order. + */ + bool shrinkToAfterShortestMatch(); +}; + +CL_NS_END2 +#endif // _lucene_search_spans_NearSpansOrdered_ diff --git a/Pods/BRCLucene/src/core/CLucene/search/spans/_NearSpansUnordered.h b/Pods/BRCLucene/src/core/CLucene/search/spans/_NearSpansUnordered.h new file mode 100644 index 0000000..a9912f1 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/spans/_NearSpansUnordered.h @@ -0,0 +1,103 @@ +/*------------------------------------------------------------------------------ + * 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_spans_NearSpansUnordered_ +#define _lucene_search_spans_NearSpansUnordered_ + +CL_CLASS_DEF(index, IndexReader) +CL_CLASS_DEF2(search, spans, SpanNearQuery) +#include "CLucene/util/PriorityQueue.h" +#include "Spans.h" + +CL_NS_DEF2( search, spans ) + +class NearSpansUnordered : public Spans +{ +private: + ///////////////////////////////////////////////////////////////////////////// + class SpansCell : public Spans + { + private: + NearSpansUnordered * parentSpans; + Spans * spans; + int32_t length; + int32_t index; + + public: + SpansCell * nextCell; + + public: + SpansCell( NearSpansUnordered * parentSpans, Spans * spans, int32_t index ); + virtual ~SpansCell(); + + bool next() { return adjust( spans->next() ); } + bool skipTo( int32_t target ) { return adjust( spans->skipTo( target )); } + + int32_t doc() const { return spans->doc(); } + int32_t start() const { return spans->start(); } + int32_t end() const { return spans->end(); } + + TCHAR* toString() const; + + private: + bool adjust( bool condition ); + + }; + + ///////////////////////////////////////////////////////////////////////////// + class CellQueue : public CL_NS(util)::PriorityQueue > + { + public: + CellQueue( int32_t size ) { initialize( size, false ); } // All the span cells will be freed in ~NearSpansUnordered() while frein ordered member + virtual ~CellQueue() {} + + protected: + bool lessThan( SpansCell * spans1, SpansCell* spans2 ); + }; + +private: + SpanNearQuery * query; + + list ordered; // spans in query order + int32_t slop; // from query + + SpansCell * first; // linked list of spans + SpansCell * last; // sorted by doc only + + int32_t totalLength; // sum of current lengths + + CellQueue * queue; // sorted queue of spans + SpansCell * max; // max element in queue + + bool more; // true iff not done + bool firstTime; // true before first next() + +public: + NearSpansUnordered( SpanNearQuery * query, CL_NS(index)::IndexReader * reader ); + virtual ~NearSpansUnordered(); + + bool next(); + bool skipTo( int32_t target ); + + int32_t doc() const { return min()->doc(); } + int32_t start() const { return min()->start(); } + int32_t end() const { return max->end(); } + + TCHAR* toString() const; + +private: + SpansCell * min() const { return queue->top(); } + + void initList( bool next ); + void addToList( SpansCell * cell ); + void firstToLast(); + void queueToList(); + void listToQueue(); + bool atMatch(); +}; + +CL_NS_END2 +#endif // _lucene_search_spans_NearSpansUnordered_ diff --git a/Pods/BRCLucene/src/core/CLucene/search/spans/_TermSpans.h b/Pods/BRCLucene/src/core/CLucene/search/spans/_TermSpans.h new file mode 100644 index 0000000..5a7356a --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/search/spans/_TermSpans.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_search_spans_TermSpans_ +#define _lucene_search_spans_TermSpans_ + +#include "CLucene/search/spans/Spans.h" +CL_CLASS_DEF(index, TermPositions) +CL_CLASS_DEF(index, Term) + +CL_NS_DEF2(search, spans) + +/** + * Expert: + * Public for extension only + */ +class TermSpans : public Spans +{ +protected: + CL_NS(index)::TermPositions * positions; + CL_NS(index)::Term * term; + int32_t doc_; + int32_t freq; + int32_t count; + int32_t position; + +public: + TermSpans( CL_NS(index)::TermPositions * positions, CL_NS(index)::Term * term ); + virtual ~TermSpans(); + + bool next(); + bool skipTo( int32_t target ); + + int32_t doc() const { return doc_; } + int32_t start() const { return position; } + int32_t end() const { return position + 1; } + + TCHAR* toString() const; + + CL_NS(index)::TermPositions * getPositions() { return positions; } +}; + +CL_NS_END2 +#endif // _lucene_search_spans_TermSpans_ diff --git a/Pods/BRCLucene/src/core/CLucene/store/Directory.cpp b/Pods/BRCLucene/src/core/CLucene/store/Directory.cpp new file mode 100644 index 0000000..7fbf495 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/store/Directory.cpp @@ -0,0 +1,78 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" + +#include "Directory.h" +#include "LockFactory.h" +#include "CLucene/util/Misc.h" + +CL_NS_DEF(store) + + +Directory::Directory(){ + this->lockFactory = NULL; +} +Directory::~Directory(){ + if (lockFactory != NULL) + _CLDELETE(lockFactory); +} + +LuceneLock* Directory::makeLock(const char* name) { + return lockFactory->makeLock( name ); +} + +void Directory::setLockFactory( LockFactory* lockFactory ) { + this->lockFactory = lockFactory; + lockFactory->setLockPrefix( getLockID().c_str() ); +} + +LockFactory* Directory::getLockFactory() { + return lockFactory; +} + +string Directory::getLockID() { + return toString(); +} + +void Directory::clearLock(const char* name) { + if ( lockFactory != NULL ) { + lockFactory->clearLock( name ); + } +} + +bool Directory::deleteFile(const char* name, const bool throwError){ + bool ret = doDeleteFile(name); + if ( !ret && throwError ){ + char buffer[200]; + _snprintf(buffer,200,"couldn't delete %s",name); + _CLTHROWA(CL_ERR_IO, buffer ); + } + return ret; +} +IndexInput* Directory::openInput(const char* name, int32_t bufferSize){ + IndexInput* ret; + CLuceneError err; + if ( ! openInput(name, ret, err, bufferSize) ) + throw err; + return ret; +} +char** Directory::list() const{ + vector names; + + list(&names); + + size_t size = names.size(); + char** ret = _CL_NEWARRAY(char*,size+1); + for ( size_t i=0;i& names) const{ + return list(&names); +} +CL_NS_END diff --git a/Pods/BRCLucene/src/core/CLucene/store/Directory.h b/Pods/BRCLucene/src/core/CLucene/store/Directory.h new file mode 100644 index 0000000..a13cc91 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/store/Directory.h @@ -0,0 +1,100 @@ +/*------------------------------------------------------------------------------ +* 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_Directory +#define _lucene_store_Directory + +#include "CLucene/util/Equators.h" +#include "CLucene/LuceneThreads.h" +#include +#include + +CL_CLASS_DEF(store,Lock) +CL_CLASS_DEF(store,IndexInput) +CL_CLASS_DEF(store,IndexOutput) +CL_CLASS_DEF(store,LockFactory) +CL_CLASS_DEF(store,LuceneLock) + +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. + * + *

Direct i/o is not used directly, but rather all i/o is + * through this API. This permits things such as:

    + *
  • implementation of RAM-based indices; + *
  • implementation indices stored in a database, via a database; + *
  • implementation of an index as a single file; + *
+ * + */ +class CLUCENE_EXPORT Directory: LUCENE_REFBASE, public CL_NS(util)::NamedObject { + protected: + LockFactory* lockFactory; + + Directory(); + // Removes an existing file in the directory. + virtual bool doDeleteFile(const char* name) = 0; + public: + DEFINE_MUTEX(THIS_LOCK) + + virtual ~Directory(); + + // Returns an null terminated array of strings, one for each file in the directory. + char** list() const; + virtual bool list(std::vector* names) const = 0; //todo: deprecate this... + bool list(std::vector& names) const; + + // Returns true iff a file with the given name exists. + virtual bool fileExists(const char* name) const = 0; + + // Returns the time the named file was last modified. + virtual int64_t fileModified(const char* name) const = 0; + + // Returns the length of a file in the directory. + virtual int64_t fileLength(const char* name) const = 0; + + // An advanced overload to avoid throwing an error. if result is false, error is filled with the reason + virtual bool openInput(const char* name, IndexInput*& ret, CLuceneError& error, int32_t bufferSize = -1) = 0; + + // Returns a stream reading an existing file. + IndexInput* openInput(const char* name, int32_t bufferSize=-1); + + /// Set the modified time of an existing file to now. */ + virtual void touchFile(const char* name) = 0; + + // Removes an existing file in the directory. + virtual bool deleteFile(const char* name, const bool throwError=true); + + // 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. + virtual void renameFile(const char* from, const char* to) = 0; + + // Creates a new, empty file in the directory with the given name. + // Returns a stream writing this file. + virtual IndexOutput* createOutput(const char* name) = 0; + + // Construct a {@link Lock}. + // @param name the name of the lock file + virtual LuceneLock* makeLock(const char* name); + + virtual void clearLock(const char* name); + + // Closes the store. + virtual void close() = 0; + + virtual std::string toString() const = 0; + + void setLockFactory( LockFactory* lockFactory ); + + LockFactory* getLockFactory(); + + virtual std::string getLockID(); + }; +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/store/FSDirectory.cpp b/Pods/BRCLucene/src/core/CLucene/store/FSDirectory.cpp new file mode 100644 index 0000000..c094292 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/store/FSDirectory.cpp @@ -0,0 +1,692 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" + +#include +#ifdef _CL_HAVE_IO_H + #include +#endif +#ifdef _CL_HAVE_SYS_STAT_H + #include +#endif +#ifdef _CL_HAVE_UNISTD_H + #include +#endif +#ifdef _CL_HAVE_DIRECT_H + #include +#endif +#include + +#include + +#include "FSDirectory.h" +#include "LockFactory.h" +#include "CLucene/index/IndexReader.h" +#include "CLucene/index/IndexWriter.h" +#include "CLucene/util/Misc.h" +#include "CLucene/util/_MD5Digester.h" + +#ifdef LUCENE_FS_MMAP + #include "_MMapIndexInput.h" +#endif + +CL_NS_DEF(store) +CL_NS_USE(util) + + /** 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 DIRECTORIES(false,false); + STATIC_DEFINE_MUTEX(DIRECTORIES_LOCK) + + bool FSDirectory::disableLocks=false; + + class FSDirectory::FSIndexInput:public BufferedIndexInput { + /** + * 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. + * TODO: get rid of this and dup/fctnl or something like that... + */ + class SharedHandle: LUCENE_REFBASE{ + public: + int32_t fhandle; + int64_t _length; + int64_t _fpos; + DEFINE_MUTEX(*SHARED_LOCK) + char path[CL_MAX_DIR]; //todo: this is only used for cloning, better to get information from the fhandle + SharedHandle(const char* path); + ~SharedHandle(); + }; + SharedHandle* handle; + int64_t _pos; + FSIndexInput(SharedHandle* handle, int32_t __bufferSize): + BufferedIndexInput(__bufferSize) + { + this->_pos = 0; + this->handle = handle; + }; + protected: + FSIndexInput(const FSIndexInput& clone); + public: + static bool open(const char* path, IndexInput*& ret, CLuceneError& error, int32_t bufferSize=-1); + ~FSIndexInput(); + + IndexInput* clone() const; + void close(); + int64_t length() const { return handle->_length; } + + const char* getDirectoryType() const{ return FSDirectory::getClassName(); } + const char* getObjectName() const{ return getClassName(); } + static const char* getClassName() { return "FSIndexInput"; } + protected: + // Random-access methods + void seekInternal(const int64_t position); + // IndexInput methods + void readInternal(uint8_t* b, const int32_t len); + }; + + class FSDirectory::FSIndexOutput: public BufferedIndexOutput { + private: + int32_t fhandle; + protected: + // output methods: + void flushBuffer(const uint8_t* b, const int32_t size); + public: + FSIndexOutput(const char* path, int filemode); + ~FSIndexOutput(); + + // output methods: + void close(); + + // Random-access methods + void seek(const int64_t pos); + int64_t length() const; + }; + + bool FSDirectory::FSIndexInput::open(const char* path, IndexInput*& ret, CLuceneError& error, int32_t __bufferSize ) { + //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"); + + if ( __bufferSize == -1 ) + __bufferSize = CL_NS(store)::BufferedIndexOutput::BUFFER_SIZE; + SharedHandle* handle = _CLNEW SharedHandle(path); + + //Open the file + handle->fhandle = ::_cl_open(path, _O_BINARY | O_RDONLY | _O_RANDOM, _S_IREAD ); + + //Check if a valid handle was retrieved + if (handle->fhandle >= 0){ + //Store the file length + handle->_length = fileSize(handle->fhandle); + if ( handle->_length == -1 ) + error.set( CL_ERR_IO,"fileStat error" ); + else{ + handle->_fpos = 0; + ret = _CLNEW FSIndexInput(handle, __bufferSize); + return true; + } + }else{ + int err = errno; + if ( err == ENOENT ) + error.set(CL_ERR_IO, "File does not exist"); + else if ( err == EACCES ) + error.set(CL_ERR_IO, "File Access denied"); + else if ( err == EMFILE ) + error.set(CL_ERR_IO, "Too many open files"); + else + error.set(CL_ERR_IO, "Could not open file"); + } +#ifndef _CL_DISABLE_MULTITHREADING + delete handle->SHARED_LOCK; +#endif + _CLDECDELETE(handle); + return false; + } + + FSDirectory::FSIndexInput::FSIndexInput(const FSIndexInput& other): BufferedIndexInput(other){ + //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 + if ( other.handle == NULL ) + _CLTHROWA(CL_ERR_NullPointer, "other handle is null"); + + SCOPED_LOCK_MUTEX(*other.handle->SHARED_LOCK) + handle = _CL_POINTER(other.handle); + _pos = other.handle->_fpos; //note where we are currently... + } + + FSDirectory::FSIndexInput::SharedHandle::SharedHandle(const char* path){ + fhandle = 0; + _length = 0; + _fpos = 0; + strcpy(this->path,path); + +#ifndef _CL_DISABLE_MULTITHREADING + SHARED_LOCK = new _LUCENE_THREADMUTEX; +#endif + } + FSDirectory::FSIndexInput::SharedHandle::~SharedHandle() { + if ( fhandle >= 0 ){ + if ( ::_close(fhandle) != 0 ) + _CLTHROWA(CL_ERR_IO, "File IO Close error"); + else + fhandle = -1; + } + } + + FSDirectory::FSIndexInput::~FSIndexInput(){ + //Func - Destructor + //Pre - True + //Post - The file for which this instance is responsible has been closed. + // The instance has been destroyed + + FSIndexInput::close(); + } + + IndexInput* FSDirectory::FSIndexInput::clone() const + { + return _CLNEW FSDirectory::FSIndexInput(*this); + } + void FSDirectory::FSIndexInput::close() { + BufferedIndexInput::close(); +#ifndef _CL_DISABLE_MULTITHREADING + if ( handle != NULL ){ + //here we have a bit of a problem... we need to lock the handle to ensure that we can + //safely delete the handle... but if we delete the handle, then the scoped unlock, + //won't be able to unlock the mutex... + + //take a reference of the lock object... + _LUCENE_THREADMUTEX* mutex = handle->SHARED_LOCK; + //lock the mutex + mutex->lock(); + + //determine if we are about to delete the handle... + bool dounlock = ( _LUCENE_ATOMIC_INT_GET(handle->__cl_refcount) > 1 ); + + //decdelete (deletes if refcount is down to 0 + _CLDECDELETE(handle); + + //printf("handle=%d\n", handle->__cl_refcount); + mutex->unlock(); + if ( !dounlock ) { + delete mutex; + } + } +#else + _CLDECDELETE(handle); +#endif + } + + void FSDirectory::FSIndexInput::seekInternal(const int64_t position) { + CND_PRECONDITION(position>=0 &&position_length,"Seeking out of range") + _pos = position; + } + +/** IndexInput methods */ +void FSDirectory::FSIndexInput::readInternal(uint8_t* b, const int32_t len) { + CND_PRECONDITION(handle!=NULL,"shared file handle has closed"); + CND_PRECONDITION(handle->fhandle>=0,"file is not open"); + SCOPED_LOCK_MUTEX(*handle->SHARED_LOCK) + + if ( handle->_fpos != _pos ){ + if ( fileSeek(handle->fhandle,_pos,SEEK_SET) != _pos ){ + _CLTHROWA( CL_ERR_IO, "File IO Seek error"); + } + handle->_fpos = _pos; + } + + bufferLength = _read(handle->fhandle,b,len); // 2004.10.31:SF 1037836 + if (bufferLength == 0){ + _CLTHROWA(CL_ERR_IO, "read past EOF"); + } + if (bufferLength == -1){ + //if (EINTR == errno) we could do something else... but we have + //to guarantee some return, or throw EOF + + _CLTHROWA(CL_ERR_IO, "read error"); + } + _pos+=bufferLength; + handle->_fpos=_pos; +} + + FSDirectory::FSIndexOutput::FSIndexOutput(const char* path, int filemode){ + //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; + if ( filemode <= 0 ){ + filemode = 0644; + } + if ( Misc::dir_Exists(path) ) + fhandle = _cl_open( path, _O_BINARY | O_RDWR | _O_RANDOM | O_TRUNC, filemode); + else // added by JBP + fhandle = _cl_open( path, _O_BINARY | O_RDWR | _O_RANDOM | O_CREAT, filemode); + + if ( fhandle < 0 ){ + int err = errno; + if ( err == ENOENT ) + _CLTHROWA(CL_ERR_IO, "File does not exist"); + else if ( err == EACCES ) + _CLTHROWA(CL_ERR_IO, "File Access denied"); + else if ( err == EMFILE ) + _CLTHROWA(CL_ERR_IO, "Too many open files"); + } + } + FSDirectory::FSIndexOutput::~FSIndexOutput(){ + if ( fhandle >= 0 ){ + try { + FSIndexOutput::close(); + }catch(CLuceneError& err){ + //ignore IO errors... + if ( err.number() != CL_ERR_IO ) + throw; + } + } + } + + /** output methods: */ + void FSDirectory::FSIndexOutput::flushBuffer(const uint8_t* b, const int32_t size) { + CND_PRECONDITION(fhandle>=0,"file is not open"); + if ( size > 0 && _write(fhandle,b,size) != size ) + _CLTHROWA(CL_ERR_IO, "File IO Write error"); + } + void FSDirectory::FSIndexOutput::close() { + try{ + BufferedIndexOutput::close(); + }catch(CLuceneError& err){ + //ignore IO errors... + if ( err.number() != CL_ERR_IO ) + throw; + } + + if ( ::_close(fhandle) != 0 ) + _CLTHROWA(CL_ERR_IO, "File IO Close error"); + else + fhandle = -1; //-1 now indicates closed + } + + void FSDirectory::FSIndexOutput::seek(const int64_t pos) { + CND_PRECONDITION(fhandle>=0,"file is not open"); + BufferedIndexOutput::seek(pos); + int64_t ret = fileSeek(fhandle,pos,SEEK_SET); + if ( ret != pos ){ + _CLTHROWA(CL_ERR_IO, "File IO Seek error"); + } + } + int64_t FSDirectory::FSIndexOutput::length() const { + CND_PRECONDITION(fhandle>=0,"file is not open"); + return fileSize(fhandle); + } + + + const char* FSDirectory::LOCK_DIR=NULL; + const char* FSDirectory::getLockDir(){ + #ifdef LUCENE_LOCK_DIR + LOCK_DIR = LUCENE_LOCK_DIR; + #else + #ifdef LUCENE_LOCK_DIR_ENV_1 + if ( LOCK_DIR == NULL ) + LOCK_DIR = getenv(LUCENE_LOCK_DIR_ENV_1); + #endif + #ifdef LUCENE_LOCK_DIR_ENV_2 + if ( LOCK_DIR == NULL ) + LOCK_DIR = getenv(LUCENE_LOCK_DIR_ENV_2); + #endif + #ifdef LUCENE_LOCK_DIR_ENV_FALLBACK + if ( LOCK_DIR == NULL ) + LOCK_DIR=LUCENE_LOCK_DIR_ENV_FALLBACK; + #endif + if ( LOCK_DIR == NULL ) + _CLTHROWA(CL_ERR_IO, "Couldn't get determine lock dir"); + #endif + + return LOCK_DIR; + } + + FSDirectory::FSDirectory(): + Directory(), + refCount(0), + useMMap(LUCENE_USE_MMAP) + { + filemode = 0644; + this->lockFactory = NULL; + } + + void FSDirectory::init(const char* _path, LockFactory* lockFactory) + { + directory = _path; + bool doClearLockID = false; + + if ( lockFactory == NULL ) { + if ( disableLocks ) { + lockFactory = NoLockFactory::getNoLockFactory(); + } else { + lockFactory = _CLNEW FSLockFactory( directory.c_str(), this->filemode ); + doClearLockID = true; + } + } + + setLockFactory( lockFactory ); + + if ( doClearLockID ) { + lockFactory->setLockPrefix(NULL); + } + + if (!Misc::dir_Exists(directory.c_str())){ + char* err = _CL_NEWARRAY(char,19+directory.length()+1); //19: len of " is not a directory" + strcpy(err,directory.c_str()); + strcat(err," is not a directory"); + _CLTHROWA_DEL(CL_ERR_IO, err ); + } + } + + + void FSDirectory::create(){ + SCOPED_LOCK_MUTEX(THIS_LOCK) + + //clear old files + vector files; + Misc::listFiles(directory.c_str(), files, false); + vector::iterator itr = files.begin(); + while ( itr != files.end() ){ + if ( CL_NS(index)::IndexReader::isLuceneFile(itr->c_str()) ){ + if ( _unlink( (directory + PATH_DELIMITERA + *itr).c_str() ) == -1 ) { + _CLTHROWA(CL_ERR_IO, "Couldn't delete file "); //todo: make richer error + } + } + itr++; + } + lockFactory->clearLock( CL_NS(index)::IndexWriter::WRITE_LOCK_NAME ); + + } + + void FSDirectory::priv_getFN(char* buffer, const char* name) const{ + buffer[0] = 0; + strcpy(buffer,directory.c_str()); + strcat(buffer, PATH_DELIMITERA ); + strcat(buffer,name); + } + + FSDirectory::~FSDirectory(){ + } + + void FSDirectory::setFileMode(int mode){ + this->filemode = mode; + } + int FSDirectory::getFileMode(){ + return this->filemode; + } + void FSDirectory::setUseMMap(bool value){ useMMap = value; } + bool FSDirectory::getUseMMap() const{ return useMMap; } + const char* FSDirectory::getClassName(){ + return "FSDirectory"; + } + const char* FSDirectory::getObjectName() const{ + return getClassName(); + } + + void FSDirectory::setDisableLocks(bool doDisableLocks) { disableLocks = doDisableLocks; } + bool FSDirectory::getDisableLocks() { return disableLocks; } + + + bool FSDirectory::list(vector* names) const{ //todo: fix this, ugly!!! + CND_PRECONDITION(!directory.empty(),"directory is not open"); + return Misc::listFiles(directory.c_str(), *names, false); + } + + bool FSDirectory::fileExists(const char* name) const { + CND_PRECONDITION(directory[0]!=0,"directory is not open"); + char fl[CL_MAX_DIR]; + priv_getFN(fl, name); + return Misc::dir_Exists( fl ); + } + + const char* FSDirectory::getDirName() const{ + return directory.c_str(); + } + + FSDirectory* FSDirectory::getDirectory(const char* file, bool create, LockFactory* lockFactory){ + FSDirectory* dir = getDirectory(file, (LockFactory*)NULL); + + // This is now deprecated (creation should only be done + // by IndexWriter): + if (create) { + dir->create(); + } + + return dir; + } + //static + FSDirectory* FSDirectory::getDirectory(const char* _file, LockFactory* lockFactory){ + FSDirectory* dir = NULL; + { + if ( !_file || !*_file ) + _CLTHROWA(CL_ERR_IO,"Invalid directory"); + + char buf[CL_MAX_PATH]; + char* file = _realpath(_file,buf);//set a realpath so that if we change directory, we can still function + if ( !file || !*file ){ + strncpy(buf, _file, CL_MAX_PATH); + file = buf; + } + + struct cl_stat_t fstat; + if ( fileStat(file,&fstat) == 0 && !(fstat.st_mode & S_IFDIR) ){ + char tmp[1024]; + _snprintf(tmp,1024,"%s not a directory", file); + _CLTHROWA(CL_ERR_IO,tmp); + } + + if ( fileStat(file,&fstat) != 0 ) { + //todo: should construct directory using _mkdirs... have to write replacement + if ( _mkdir(file) == -1 ){ + string err = "Couldn't create directory: "; + err += string(file); + _CLTHROWA(CL_ERR_IO, err.c_str() ); + } + } + + + SCOPED_LOCK_MUTEX(DIRECTORIES_LOCK) + dir = DIRECTORIES.get(file); + if ( dir == NULL ){ + dir = _CLNEW FSDirectory(); + dir->init(file,lockFactory); + DIRECTORIES.put( dir->directory.c_str(), dir); + } else { + if ( lockFactory != NULL && lockFactory != dir->getLockFactory() ) { + _CLTHROWA(CL_ERR_IO,"Directory was previously created with a different LockFactory instance, please pass NULL as the lockFactory instance and use setLockFactory to change it"); + } + } + + { + SCOPED_LOCK_MUTEX(dir->THIS_LOCK) + dir->refCount++; + } + } + + return _CL_POINTER(dir); // TODO: Isn't this a double ref increment? + } + + int64_t FSDirectory::fileModified(const char* name) const { + CND_PRECONDITION(directory[0]!=0,"directory is not open"); + struct cl_stat_t buf; + char buffer[CL_MAX_DIR]; + priv_getFN(buffer,name); + if (fileStat( buffer, &buf ) == -1 ) + return 0; + else + return buf.st_mtime; + } + + //static + int64_t FSDirectory::fileModified(const char* dir, const char* name){ + struct cl_stat_t buf; + char buffer[CL_MAX_DIR]; + _snprintf(buffer,CL_MAX_DIR,"%s%s%s",dir,PATH_DELIMITERA,name); + fileStat( buffer, &buf ); + return buf.st_mtime; + } + + void FSDirectory::touchFile(const char* name){ + CND_PRECONDITION(directory[0]!=0,"directory is not open"); + char buffer[CL_MAX_DIR]; + _snprintf(buffer,CL_MAX_DIR,"%s%s%s",directory.c_str(),PATH_DELIMITERA,name); + + int32_t r = _cl_open(buffer, O_RDWR, this->filemode); + if ( r < 0 ) + _CLTHROWA(CL_ERR_IO,"IO Error while touching file"); + ::_close(r); + } + + int64_t FSDirectory::fileLength(const char* name) const { + CND_PRECONDITION(directory[0]!=0,"directory is not open"); + struct cl_stat_t buf; + char buffer[CL_MAX_DIR]; + priv_getFN(buffer,name); + if ( fileStat( buffer, &buf ) == -1 ) + return 0; + else + return buf.st_size; + } + + bool FSDirectory::openInput(const char * name, IndexInput *& ret, CLuceneError& error, int32_t bufferSize) + { + CND_PRECONDITION(directory[0]!=0,"directory is not open") + char fl[CL_MAX_DIR]; + priv_getFN(fl, name); +#ifdef LUCENE_FS_MMAP + //todo: do some tests here... like if the file + //is >2gb, then some system cannot mmap the file + //also some file systems mmap will fail?? could detect here too + if ( useMMap && Misc::file_Size(fl) < LUCENE_INT32_MAX_SHOULDBE ) //todo: would this be bigger on 64bit systems?. i suppose it would be...test first + return MMapIndexInput::open( fl, ret, error, bufferSize ); + else +#endif + return FSIndexInput::open( fl, ret, error, bufferSize ); + } + + void FSDirectory::close(){ + SCOPED_LOCK_MUTEX(DIRECTORIES_LOCK) + { + THIS_LOCK.lock(); + + CND_PRECONDITION(directory[0]!=0,"directory is not open"); + + if (--refCount <= 0 ) {//refcount starts at 1 + Directory* dir = DIRECTORIES.get(getDirName()); + if(dir){ + DIRECTORIES.remove( getDirName() ); //this will be removed in ~FSDirectory + _CLDECDELETE(dir); + //NOTE: Don't unlock the mutex, since it has been destroyed now... + return; + } + } + THIS_LOCK.unlock(); + } + } + + /** + * So we can do some byte-to-hexchar conversion below + */ + char HEX_DIGITS[] = + {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'}; + + char* FSDirectory::getLockPrefix() const{ + char dirName[CL_MAX_PATH]; // name to be hashed + if ( _realpath(directory.c_str(),dirName) == NULL ){ + _CLTHROWA(CL_ERR_Runtime,"Invalid directory path"); + } + + //to make a compatible name with jlucene, we need to make some changes... + if ( dirName[1] == ':' ) + dirName[0] = (char)_totupper((char)dirName[0]); + + char* smd5 = MD5String(dirName); + + char* ret=_CL_NEWARRAY(char,32+7+1); //32=2*16, 7=strlen("lucene-") + strcpy(ret,"lucene-"); + strcat(ret,smd5); + + _CLDELETE_CaARRAY(smd5); + + return ret; + } + + bool FSDirectory::doDeleteFile(const char* name) { + CND_PRECONDITION(directory[0]!=0,"directory is not open"); + char fl[CL_MAX_DIR]; + priv_getFN(fl, name); + return _unlink(fl) != -1; + } + + void FSDirectory::renameFile(const char* from, const char* to){ + CND_PRECONDITION(directory[0]!=0,"directory is not open"); + SCOPED_LOCK_MUTEX(THIS_LOCK) + char old[CL_MAX_DIR]; + priv_getFN(old, from); + + char nu[CL_MAX_DIR]; + priv_getFN(nu, to); + + /* This is not atomic. If the program crashes between the call to + delete() and the call to renameTo() then we're screwed, but I've + been unable to figure out how else to do this... */ + + if ( Misc::dir_Exists(nu) ){ + //we run this sequence of unlinking an arbitary 100 times + //on some platforms (namely windows), there can be a + //delay between unlink and dir_exists==false + if( Misc::file_Unlink( nu ) == -1 ) { + char* err = _CL_NEWARRAY(char,16+strlen(to)+1); //16: len of "couldn't delete " + strcpy(err,"couldn't delete "); + strcat(err,to); + _CLTHROWA_DEL(CL_ERR_IO, err ); + } + } + if ( _rename(old,nu) != 0 ){ + //todo: jlucene has some extra rename code - if the rename fails, it copies + //the whole file to the new file... might want to implement that if renaming + //fails on some platforms + char buffer[20+CL_MAX_PATH+CL_MAX_PATH]; + strcpy(buffer,"couldn't rename "); + strcat(buffer,from); + strcat(buffer," to "); + strcat(buffer,nu); + _CLTHROWA(CL_ERR_IO, buffer ); + } + } + + IndexOutput* FSDirectory::createOutput(const char* name) { + CND_PRECONDITION(directory[0]!=0,"directory is not open"); + char fl[CL_MAX_DIR]; + priv_getFN(fl, name); + if ( Misc::dir_Exists(fl) ){ + if ( Misc::file_Unlink( fl, 1 ) == -1 ) { + char tmp[1024]; + strcpy(tmp, "Cannot overwrite: "); + strcat(tmp, name); + _CLTHROWA(CL_ERR_IO, tmp); + } + assert( ! Misc::dir_Exists(fl) ); + } + return _CLNEW FSIndexOutput( fl, this->filemode ); + } + + string FSDirectory::toString() const{ + return string("FSDirectory@") + this->directory; + } + +CL_NS_END diff --git a/Pods/BRCLucene/src/core/CLucene/store/FSDirectory.h b/Pods/BRCLucene/src/core/CLucene/store/FSDirectory.h new file mode 100644 index 0000000..13b5f78 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/store/FSDirectory.h @@ -0,0 +1,168 @@ +/*------------------------------------------------------------------------------ +* 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_FSDirectory_ +#define _lucene_store_FSDirectory_ + +#include "Directory.h" +#include "IndexInput.h" +#include "IndexOutput.h" +#include +#include + +CL_CLASS_DEF(util,StringBuffer) + + CL_NS_DEF(store) + + /** + * Straightforward implementation of {@link lucene::store::Directory} as a directory of files. + *

If the system property 'disableLuceneLocks' has the String value of + * "true", lock creation will be disabled. + * + * @see Directory + */ + class CLUCENE_EXPORT FSDirectory:public Directory{ + private: + class FSIndexOutput; + class FSIndexInput; + friend class FSDirectory::FSIndexOutput; + friend class FSDirectory::FSIndexInput; + + int filemode; + protected: + FSDirectory(); + virtual void init(const char* path, LockFactory* lockFactory = NULL); + void priv_getFN(char* buffer, const char* name) const; + private: + std::string directory; + int refCount; + void create(); + + static const char* LOCK_DIR; + static const char* getLockDir(); + char* getLockPrefix() const; + static bool disableLocks; + + bool useMMap; + + protected: + /// Removes an existing file in the directory. + bool doDeleteFile(const char* name); + + public: + ///Destructor - only call this if you are sure the directory + ///is not being used anymore. Otherwise use the ref-counting + ///facilities of _CLDECDELETE + virtual ~FSDirectory(); + + /// Get a list of strings, one for each file in the directory. + bool list(std::vector* names) const; + + /// Returns true iff a file with the given name exists. + bool fileExists(const char* name) const; + + /// Returns the text name of the directory + const char* getDirName() const; ///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 char* file, LockFactory* lockFactory=NULL); + + /// Returns the time the named file was last modified. + int64_t fileModified(const char* name) const; + + //static + /// Returns the time the named file was last modified. + static int64_t fileModified(const char* dir, const char* name); + + //static + /// Returns the length in bytes of a file in the directory. + int64_t fileLength(const char* name) const; + + /// Returns a stream reading an existing file. + virtual bool openInput(const char* name, IndexInput*& ret, CLuceneError& err, int32_t bufferSize = -1); + + /// Renames an existing file in the directory. + void renameFile(const char* from, const char* to); + + /** Set the modified time of an existing file to now. */ + void touchFile(const char* name); + + /// Creates a new, empty file in the directory with the given name. + /// Returns a stream writing this file. + virtual IndexOutput* createOutput(const char* 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); + /** + * Gets whether the directory is using MMap for inputstreams. + */ + bool getUseMMap() const; + + std::string toString() const; + + static const char* getClassName(); + const char* getObjectName() const; + + /** + * 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); + + /** + * Returns whether Lucene's use of lock files is disabled. + * @return true if locks are disabled, false if locks are enabled. + */ + static bool getDisableLocks(); + + /** + * Sets the file mode for new files. This is passed to new output streams + * and to the lock factory. The mode should be a valid octal file mode for + * the 3rd parameter of the file open function (such as 0644) + * + * Tip: _tcstoi64(_T("644"), NULL, 8) is also a valid way of + * creating a file mode + */ + void setFileMode(int mode); + + /** + * Gets the file mode for new files + */ + int getFileMode(); + }; + +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/store/IndexInput.cpp b/Pods/BRCLucene/src/core/CLucene/store/IndexInput.cpp new file mode 100644 index 0000000..42aacad --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/store/IndexInput.cpp @@ -0,0 +1,306 @@ + /*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "IndexInput.h" +#include "IndexOutput.h" +#include "CLucene/util/Misc.h" + +CL_NS_DEF(store) +CL_NS_USE(util) + + IndexInput::IndexInput(): + NamedObject() + { + } + 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() { + uint64_t i = ((uint64_t)readInt() << 32); + return (i | ((uint64_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(); + } + } +} + + #ifdef _UCS2 + int32_t IndexInput::readString(char* buffer, const int32_t maxLength){ + TCHAR* buf = _CL_NEWARRAY(TCHAR,maxLength); + int32_t ret = -1; + try{ + ret = readString(buf,maxLength); + STRCPY_TtoA(buffer,buf,ret+1); + }_CLFINALLY ( _CLDELETE_CARRAY(buf); ) + return ret; + } + #endif + + 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(){ + int32_t len = readVInt(); + + if ( len == 0){ + return stringDuplicate(LUCENE_BLANK_STRING); + } + + TCHAR* ret = _CL_NEWARRAY(TCHAR,len+1); + readChars(ret, 0, len); + ret[len] = 0; + + return ret; + } + + void IndexInput::readBytes( uint8_t* b, const int32_t len, bool /*useBuffer*/) { + // Default to ignoring useBuffer entirely + readBytes(b, len); + } + + 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>=0?_bufferSize:CL_NS(store)::BufferedIndexOutput::BUFFER_SIZE), + 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)); + } + } + + const char* BufferedIndexInput::getObjectName(){ return getClassName(); } + const char* BufferedIndexInput::getClassName(){ return "BufferedIndexInput"; } + + void BufferedIndexInput::readBytes(uint8_t* b, const int32_t len){ + readBytes(b, len, true); + } + void BufferedIndexInput::readBytes(uint8_t* _b, const int32_t _len, bool useBuffer){ + int32_t len = _len; + uint8_t* b = _b; + + if(len <= (bufferLength-bufferPosition)){ + // the buffer contains enough data to satisfy this request + if(len>0) // to allow b to be null if len is 0... + memcpy(b, buffer + bufferPosition, len); + bufferPosition+=len; + } else { + // the buffer does not have enough data. First serve all we've got. + int32_t available = bufferLength - bufferPosition; + if(available > 0){ + memcpy(b, buffer + bufferPosition, available); + b += available; + len -= available; + bufferPosition += available; + } + // and now, read the remaining 'len' bytes: + if (useBuffer && len length()) + _CLTHROWA(CL_ERR_IO, "read past EOF"); + readInternal(b, len); + bufferStart = after; + 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; + } + + void BufferedIndexInput::setBufferSize( int32_t newSize ) { + + if ( newSize != bufferSize ) { + bufferSize = newSize; + if ( buffer != NULL ) { + + uint8_t* newBuffer = _CL_NEWARRAY( uint8_t, newSize ); + int32_t leftInBuffer = bufferLength - bufferPosition; + int32_t numToCopy; + + if ( leftInBuffer > newSize ) { + numToCopy = newSize; + } else { + numToCopy = leftInBuffer; + } + + memcpy( (void*)newBuffer, (void*)(buffer + bufferPosition), numToCopy ); + + bufferStart += bufferPosition; + bufferPosition = 0; + bufferLength = numToCopy; + + _CLDELETE_ARRAY( buffer ); + buffer = newBuffer; + + } + } + + } + +CL_NS_END + diff --git a/Pods/BRCLucene/src/core/CLucene/store/IndexInput.h b/Pods/BRCLucene/src/core/CLucene/store/IndexInput.h new file mode 100644 index 0000000..8a43d59 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/store/IndexInput.h @@ -0,0 +1,196 @@ +/*------------------------------------------------------------------------------ +* 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_IndexInput_ +#define _lucene_store_IndexInput_ + +#include "CLucene/LuceneThreads.h" +#include "CLucene/util/Equators.h" + +CL_NS_DEF(store) + + /** Abstract base class for input from a file in a {@link lucene::store::Directory}. A + * random-access input stream. Used for all Lucene index input operations. + * @see Directory + * @see IndexOutput + */ + class CLUCENE_EXPORT IndexInput: LUCENE_BASE, public CL_NS(util)::NamedObject { + 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[],int) + */ + virtual void readBytes(uint8_t* b, const int32_t len) = 0; + + /** Reads a specified number of bytes into an array at the + * specified offset with control over whether the read + * should be buffered (callers who have their own buffer + * should pass in "false" for useBuffer). Currently only + * {@link BufferedIndexInput} respects this parameter. + * @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 + * @param useBuffer set to false if the caller will handle + * buffering. + * @see IndexOutput#writeBytes(byte[],int32_t) + */ + virtual void readBytes(uint8_t* b, const int32_t len, bool useBuffer); + + /** 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); + + #ifdef _UCS2 + /** Reads a string and converts to ascii. + * @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(char* buffer, const int32_t maxlength); + #endif + + /** Reads a string. + * @see IndexOutput#writeString(String) + */ + TCHAR* readString(); + + /** 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); + + void skipChars( const int32_t count); + + /** 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(int64_t) + */ + 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() const = 0; + + virtual const char* getDirectoryType() const = 0; + virtual const char* getObjectName() 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 CLUCENE_EXPORT 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. + * + *

Clones of a stream access the same data, and are positioned at the same + * point as the stream they were cloned from. + * + *

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 = -1); + public: + LUCENE_STATIC_CONSTANT(int32_t, BUFFER_SIZE=LUCENE_STREAM_BUFFER_SIZE); + + 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); + void readBytes(uint8_t* b, const int32_t len, bool useBuffer); + int64_t getFilePointer() const; + void seek(const int64_t pos); + + void setBufferSize( int32_t newSize ); + + const char* getObjectName(); + static const char* getClassName(); + + 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; + }; +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/store/IndexOutput.cpp b/Pods/BRCLucene/src/core/CLucene/store/IndexOutput.cpp new file mode 100644 index 0000000..4c9ff61 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/store/IndexOutput.cpp @@ -0,0 +1,197 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "IndexOutput.h" +#include "IndexInput.h" +#include "CLucene/util/Misc.h" + +CL_NS_USE(util) +CL_NS_DEF(store) + + + IndexOutput::IndexOutput() + { + copyBuffer = NULL; + } + + IndexOutput::~IndexOutput(){ + _CLDELETE_LARRAY(copyBuffer); + } + + 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 = (int32_t)(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 string& s ) { + writeString(s.c_str(),s.length()); + } + +#ifdef _UCS2 + void IndexOutput::writeString(const char* s, const int32_t length ) { + TCHAR* buf = _CL_NEWARRAY(TCHAR,length+1); + STRCPY_AtoT(buf,s,length); + try{ + writeString(buf,length); + }_CLFINALLY ( _CLDELETE_CARRAY(buf); ) + } +#endif + + void IndexOutput::writeString(const TCHAR* s, const int32_t length ) { + writeVInt(length); + writeChars(s, length); + } + + void IndexOutput::writeChars(const TCHAR* s, const int32_t length){ + if ( length < 0 ) + _CLTHROWA(CL_ERR_IllegalArgument, "IO Argument Error. Value must be a positive value."); + + const int32_t end = length; + for (int32_t i = 0; 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 IndexOutput::copyBytes(CL_NS(store)::IndexInput* input, int64_t numBytes) + { + int64_t left = numBytes; + if (copyBuffer == NULL) + copyBuffer = _CL_NEWARRAY(uint8_t, COPY_BUFFER_SIZE); + while(left > 0) { + int32_t toCopy; + if (left > COPY_BUFFER_SIZE) + toCopy = COPY_BUFFER_SIZE; + else + toCopy = (int32_t) left; + input->readBytes(copyBuffer, toCopy); + writeBytes(copyBuffer, toCopy); + left -= toCopy; + } + } + + 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/Pods/BRCLucene/src/core/CLucene/store/IndexOutput.h b/Pods/BRCLucene/src/core/CLucene/store/IndexOutput.h new file mode 100644 index 0000000..e49ef2d --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/store/IndexOutput.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. +------------------------------------------------------------------------------*/ +#ifndef _lucene_store_IndexOutput_ +#define _lucene_store_IndexOutput_ + +CL_NS_DEF(store) + +class IndexInput; + +/** 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 CLUCENE_EXPORT 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(uint8_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); + void writeString(const std::string& s); + + #ifdef _UCS2 + /** Writes an ascii string. converts to TCHAR* before writing + * @see IndexInput#readString() + */ + void writeString(const char* s, const int32_t length); + #endif + + /** 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 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() const = 0; + + /** Forces any buffered output to be written. */ + virtual void flush() = 0; + +private: + LUCENE_STATIC_CONSTANT(int32_t, COPY_BUFFER_SIZE = 16384); + uint8_t* copyBuffer; + +public: + /** Copy numBytes bytes from input to ourself. */ + void copyBytes(CL_NS(store)::IndexInput* input, int64_t numBytes); +}; + +/** Base implementation class for buffered {@link IndexOutput}. */ +class CLUCENE_EXPORT BufferedIndexOutput : public IndexOutput{ +public: + LUCENE_STATIC_CONSTANT(int32_t, BUFFER_SIZE=16384); +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() const = 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/Pods/BRCLucene/src/core/CLucene/store/Lock.cpp b/Pods/BRCLucene/src/core/CLucene/store/Lock.cpp new file mode 100644 index 0000000..ae7c25b --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/store/Lock.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/_ApiHeader.h" +#include "Lock.h" +#include "_Lock.h" +#include "CLucene/util/Misc.h" + +#ifdef _CL_HAVE_IO_H + #include +#endif +#ifdef _CL_HAVE_SYS_STAT_H + #include +#endif +#ifdef _CL_HAVE_UNISTD_H + #include +#endif +#ifdef _CL_HAVE_DIRECT_H + #include +#endif +#include + + +CL_NS_USE(util) +CL_NS_DEF(store) + + LuceneLock::~LuceneLock() + { + } + bool LuceneLock::obtain(int64_t lockWaitTimeout) { + bool locked = obtain(); + if ( lockWaitTimeout < 0 && lockWaitTimeout != LOCK_OBTAIN_WAIT_FOREVER ) { + _CLTHROWA(CL_ERR_IllegalArgument,"lockWaitTimeout should be LOCK_OBTAIN_WAIT_FOREVER or a non-negative number"); + } + + int64_t maxSleepCount = lockWaitTimeout / LOCK_POLL_INTERVAL; + int64_t sleepCount = 0; + + while (!locked) { + if ( lockWaitTimeout != LOCK_OBTAIN_WAIT_FOREVER && sleepCount++ == maxSleepCount ) { + _CLTHROWA(CL_ERR_IO,"Lock obtain timed out"); + } + _LUCENE_SLEEP(LOCK_POLL_INTERVAL); + locked = obtain(); + } + + return locked; + } + std::string NoLock::toString() + { + return "NoLock"; + } + bool NoLock::obtain() { return true; } + void NoLock::release() {} + bool NoLock::isLocked() { return false; } + + const char* NoLock::getClassName(){ + return "NoLock"; + } + const char* NoLock::getObjectName() const{ + return getClassName(); + } + + + + SingleInstanceLock::SingleInstanceLock( LocksType* locks, _LUCENE_THREADMUTEX* locks_LOCK, const char* lockName ) + { + this->locks = locks; +#ifndef _CL_DISABLE_MULTITHREADING + this->locks_LOCK = locks_LOCK; +#endif + this->lockName = lockName; + } + SingleInstanceLock::~SingleInstanceLock(){ + } + const char* SingleInstanceLock::getClassName(){ + return "SingleInstanceLock"; + } + const char* SingleInstanceLock::getObjectName() const{ + return getClassName(); + } + + bool SingleInstanceLock::obtain() + { + SCOPED_LOCK_MUTEX(*locks_LOCK); + return locks->insert( lockName ).second; + } + + void SingleInstanceLock::release() + { + SCOPED_LOCK_MUTEX(*locks_LOCK); + LocksType::iterator itr = locks->find( lockName ); + if ( itr != locks->end() ) { + locks->remove(itr, true); + } + } + + bool SingleInstanceLock::isLocked() + { + SCOPED_LOCK_MUTEX(*locks_LOCK); + return locks->find( lockName ) == locks->end(); + } + + string SingleInstanceLock::toString() + { + return string("SingleInstanceLock:") + lockName; + } + + + FSLock::FSLock( const char* _lockDir, const char* name, int filemode ) + { + if ( filemode <= 0 ) + this->filemode = 0644; //must do this or file will be created Read only + else + this->filemode = filemode; + + this->lockFile = _CL_NEWARRAY(char,CL_MAX_PATH); + this->lockDir = STRDUP_AtoA(_lockDir); + strcpy(lockFile,_lockDir); + strcat(lockFile,PATH_DELIMITERA); + strcat(lockFile,name); + } + + FSLock::~FSLock() + { + _CLDELETE_ARRAY( lockFile ); + _CLDELETE_LCaARRAY( lockDir ); + } + + const char* FSLock::getClassName(){ + return "FSLock"; + } + const char* FSLock::getObjectName() const{ + return getClassName(); + } + + bool FSLock::obtain() + { + if ( !Misc::dir_Exists(lockDir) ){ + if ( _mkdir(lockDir) == -1 ){ + char* err = _CL_NEWARRAY(char,34+strlen(lockDir)+1); //34: len of "Couldn't create lock directory: " + strcpy(err,"Couldn't create lock directory: "); + strcat(err,lockDir); + _CLTHROWA_DEL(CL_ERR_IO, err ); + } + } + int32_t r = _cl_open(lockFile, O_RDWR | O_CREAT | _O_RANDOM | O_EXCL, this->filemode); + if ( r < 0 ) { + return false; + } else { + _close(r); + return true; + } + } + + void FSLock::release() + { + _unlink( lockFile ); + } + + bool FSLock::isLocked() + { + return Misc::dir_Exists(lockFile); + } + + string FSLock::toString() + { + return string("SimpleFSLock@") + lockFile; + } + +CL_NS_END diff --git a/Pods/BRCLucene/src/core/CLucene/store/Lock.h b/Pods/BRCLucene/src/core/CLucene/store/Lock.h new file mode 100644 index 0000000..069672d --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/store/Lock.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_store_Lock_ +#define _lucene_store_Lock_ + +#include +#include "CLucene/util/Equators.h" + +CL_NS_DEF(store) + class LocksType; + + class CLUCENE_EXPORT LuceneLock: public CL_NS(util)::NamedObject{ + public: + LUCENE_STATIC_CONSTANT(int64_t, LOCK_POLL_INTERVAL = 1000); + LUCENE_STATIC_CONSTANT(int64_t, LOCK_OBTAIN_WAIT_FOREVER = -1); + + /** Attempts to obtain exclusive access and immediately return + * upon success or failure. + * @return true iff 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 ~LuceneLock(); + + virtual std::string toString() = 0; + }; + + +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/store/LockFactory.cpp b/Pods/BRCLucene/src/core/CLucene/store/LockFactory.cpp new file mode 100644 index 0000000..6b2cfe2 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/store/LockFactory.cpp @@ -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. +------------------------------------------------------------------------------*/ + +#include "CLucene/_ApiHeader.h" +#include "LockFactory.h" +#include "_Lock.h" +#include "CLucene/util/Misc.h" + +#ifdef _CL_HAVE_SYS_STAT_H + #include +#endif +#ifdef _CL_HAVE_UNISTD_H + #include +#endif + +CL_NS_USE(util) +CL_NS_DEF(store) + + +LockFactory::LockFactory() +{ +} + +LockFactory::~LockFactory() +{ +} + +void LockFactory::setLockPrefix( const char* lockPrefix ) +{ + if ( lockPrefix != NULL ) + this->lockPrefix = lockPrefix; + else + this->lockPrefix.clear(); +} + +const char* LockFactory::getLockPrefix() +{ + return lockPrefix.c_str(); +} + +SingleInstanceLockFactory::SingleInstanceLockFactory() +{ + locks = _CLNEW LocksType(); +} + +SingleInstanceLockFactory::~SingleInstanceLockFactory() +{ + _CLDELETE( locks ); +} + +LuceneLock* SingleInstanceLockFactory::makeLock( const char* lockName ) +{ +#ifdef _CL_DISABLE_MULTITHREADING + return _CLNEW SingleInstanceLock( locks, NULL, lockName ); +#else + return _CLNEW SingleInstanceLock( locks, &locks_LOCK, lockName ); +#endif +} + +void SingleInstanceLockFactory::clearLock( const char* lockName ) +{ + SCOPED_LOCK_MUTEX(locks_LOCK); + LocksType::iterator itr = locks->find( lockName ); + if ( itr != locks->end() ) { + locks->remove( itr ); + } +} + + +NoLockFactory* NoLockFactory::singleton = NULL; +NoLock* NoLockFactory::singletonLock = NULL; + +void NoLockFactory::_shutdown(){ + _CLDELETE(NoLockFactory::singleton); + _CLDELETE(NoLockFactory::singletonLock); +} + +NoLockFactory* NoLockFactory::getNoLockFactory() +{ + if ( singleton == NULL ) { + singleton = _CLNEW NoLockFactory(); + } + return singleton; +} + +LuceneLock* NoLockFactory::makeLock( const char* /*lockName*/ ) +{ + if ( singletonLock == NULL ) { + singletonLock = _CLNEW NoLock(); + } + return singletonLock; +} + +void NoLockFactory::clearLock( const char* /*lockName*/ ) +{ +} + + +FSLockFactory::FSLockFactory( const char* lockDir, int filemode ) +{ + setLockDir( lockDir ); + if ( filemode > 0 ) + this->filemode = filemode; + else + this->filemode = 0644; +} + +FSLockFactory::~FSLockFactory() +{ +} + +void FSLockFactory::setLockDir( const char* lockDir ) +{ + this->lockDir = lockDir; +} + +LuceneLock* FSLockFactory::makeLock( const char* lockName ) +{ + char name[CL_MAX_DIR]; + + if ( !lockPrefix.empty() ) { + cl_sprintf(name, CL_MAX_DIR, "%s-%s", lockPrefix.c_str(), lockName); + } else { + cl_strcpy(name,lockName,CL_MAX_DIR); + } + + return _CLNEW FSLock( lockDir.c_str(), name, this->filemode ); +} + +void FSLockFactory::clearLock( const char* lockName ) +{ + if ( Misc::dir_Exists( lockDir.c_str() )) { + char name[CL_MAX_DIR]; + char path[CL_MAX_DIR]; + struct cl_stat_t buf; + + if ( !lockPrefix.empty() ) { + STRCPY_AtoA(name,lockPrefix.c_str(),lockPrefix.length()+1); + strcat(name,"-"); + strcat(name,lockName); + } else { + strcpy(name,lockName); + } + + _snprintf(path,CL_MAX_DIR,"%s/%s",lockDir.c_str(),name); + + int32_t ret = fileStat(path,&buf); + if ( ret==0 && !(buf.st_mode & S_IFDIR) && _unlink( path ) == -1 ) { + _CLTHROWA(CL_ERR_IO, "Couldn't delete file" ); // TODO: make richer error + } + } +} + + +CL_NS_END diff --git a/Pods/BRCLucene/src/core/CLucene/store/LockFactory.h b/Pods/BRCLucene/src/core/CLucene/store/LockFactory.h new file mode 100644 index 0000000..95ab3c9 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/store/LockFactory.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_store_LockFactory_ +#define _lucene_store_LockFactory_ + +#include "CLucene/LuceneThreads.h" + +CL_CLASS_DEF(store,LuceneLock) +CL_CLASS_DEF(store,NoLock) + +CL_NS_DEF(store) +class LocksType; + +class CLUCENE_EXPORT LockFactory: LUCENE_BASE { +protected: + std::string lockPrefix; +public: + + LockFactory(); + virtual ~LockFactory(); + + void setLockPrefix( const char* lockPrefix ); + const char* getLockPrefix(); + + virtual LuceneLock* makeLock( const char* lockName )=0; + virtual void clearLock( const char* lockName )=0; +}; + +class CLUCENE_EXPORT SingleInstanceLockFactory: public LockFactory { +private: + LocksType* locks; + DEFINE_MUTEX(locks_LOCK) +public: + SingleInstanceLockFactory(); + ~SingleInstanceLockFactory(); + + LuceneLock* makeLock( const char* lockName ); + void clearLock( const char* lockName ); +}; + +class CLUCENE_EXPORT NoLockFactory: public LockFactory { +public: + static NoLockFactory* singleton; + static NoLock* singletonLock; + + static NoLockFactory* getNoLockFactory(); + LuceneLock* makeLock( const char* lockName ); + void clearLock( const char* lockName ); + + /** called when lucene_shutdown is called */ + static CLUCENE_LOCAL void _shutdown(); +}; + +class CLUCENE_EXPORT FSLockFactory: public LockFactory { +private: + std::string lockDir; + int filemode; +public: + /** Constructs a FS Lock factory. The default file mode is user writable */ + FSLockFactory( const char* lockDir=NULL, int filemode=-1 ); + ~FSLockFactory(); + + void setLockDir( const char* lockDir ); + + LuceneLock* makeLock( const char* lockName ); + void clearLock( const char* lockName ); + + static const char* getClassName(); + const char* getObjectName(); +}; + +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/store/MMapInput.cpp b/Pods/BRCLucene/src/core/CLucene/store/MMapInput.cpp new file mode 100644 index 0000000..c30d46b --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/store/MMapInput.cpp @@ -0,0 +1,298 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" + +#include "FSDirectory.h" +#include "_MMapIndexInput.h" +#include "CLucene/util/Misc.h" + +#include +#ifdef _CL_HAVE_IO_H + #include +#endif +#ifdef _CL_HAVE_SYS_STAT_H + #include +#endif +#ifdef _CL_HAVE_UNISTD_H + #include +#endif +#ifdef _CL_HAVE_DIRECT_H + #include +#endif +#ifdef _CL_HAVE_SYS_MMAN_H + #include +#endif +#ifdef _CL_HAVE_WINERROR_H + #include +#endif +#include + +#if defined(_CL_HAVE_FUNCTION_MAPVIEWOFFILE) + typedef int HANDLE; + + #define GENERIC_READ (0x80000000L) + #define FILE_SHARE_READ 0x00000001 + #define OPEN_EXISTING 3 + #define PAGE_READONLY 0x02 + #define SECTION_MAP_READ 0x0004 + #define FILE_MAP_READ SECTION_MAP_READ + + typedef struct _SECURITY_ATTRIBUTES + { + _cl_dword_t nLength; + void* lpSecurityDescriptor; + bool bInheritHandle; + } SECURITY_ATTRIBUTES; + + extern "C" __declspec(dllimport) _cl_dword_t __stdcall GetFileSize( HANDLE hFile, _cl_dword_t* lpFileSizeHigh ); + + extern "C" __declspec(dllimport) bool __stdcall UnmapViewOfFile( void* lpBaseAddress ); + + extern "C" __declspec(dllimport) bool __stdcall CloseHandle( HANDLE hObject ); + extern "C" __declspec(dllimport) HANDLE __stdcall CreateFileA( + const char* lpFileName, + _cl_dword_t dwDesiredAccess, + _cl_dword_t dwShareMode, + SECURITY_ATTRIBUTES* lpSecurityAttributes, + _cl_dword_t dwCreationDisposition, + _cl_dword_t dwFlagsAndAttributes, + HANDLE hTemplateFile + ); + extern "C" __declspec(dllimport) HANDLE __stdcall CreateFileMappingA( + HANDLE hFile, + SECURITY_ATTRIBUTES* lpFileMappingAttributes, + _cl_dword_t flProtect, + _cl_dword_t dwMaximumSizeHigh, + _cl_dword_t dwMaximumSizeLow, + const char* lpName + ); + extern "C" __declspec(dllimport) void* __stdcall MapViewOfFile( + HANDLE hFileMappingObject, + _cl_dword_t dwDesiredAccess, + _cl_dword_t dwFileOffsetHigh, + _cl_dword_t dwFileOffsetLow, + _cl_dword_t dwNumberOfBytesToMap + ); + extern "C" __declspec(dllimport) _cl_dword_t __stdcall GetLastError(); +#endif + + +CL_NS_DEF(store) +CL_NS_USE(util) + + class MMapIndexInput::Internal: LUCENE_BASE{ + public: + uint8_t* data; + int64_t pos; +#if defined(_CL_HAVE_FUNCTION_MAPVIEWOFFILE) + HANDLE mmaphandle; + HANDLE fhandle; +#elif defined(_CL_HAVE_FUNCTION_MMAP) + int fhandle; +#else + #error no mmap implementation set +#endif + bool isClone; + int64_t _length; + + Internal(): + data(NULL), + pos(0), + isClone(false), + _length(0) + { + } + ~Internal(){ + } + }; + + MMapIndexInput::MMapIndexInput(Internal* __internal): + _internal(__internal) + { + } + + bool MMapIndexInput::open(const char* path, IndexInput*& ret, CLuceneError& error, int32_t __bufferSize ) { + + //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"); + + Internal* _internal = _CLNEW Internal; + +#if defined(_CL_HAVE_FUNCTION_MAPVIEWOFFILE) + _internal->mmaphandle = NULL; + _internal->fhandle = CreateFileA(path,GENERIC_READ,FILE_SHARE_READ, 0,OPEN_EXISTING,0,0); + + //Check if a valid fhandle was retrieved + if (_internal->fhandle < 0){ + _cl_dword_t err = GetLastError(); + if ( err == ERROR_FILE_NOT_FOUND ) + error.set(CL_ERR_IO, "File does not exist"); + else if ( err == ERROR_ACCESS_DENIED ) + error.set(CL_ERR_IO, "File Access denied"); + else if ( err == ERROR_TOO_MANY_OPEN_FILES ) + error.set(CL_ERR_IO, "Too many open files"); + else + error.set(CL_ERR_IO, "Could not open file"); + } + + _cl_dword_t dummy=0; + _internal->_length = GetFileSize(_internal->fhandle, &dummy); + + if ( _internal->_length > 0 ){ + _internal->mmaphandle = CreateFileMappingA(_internal->fhandle,NULL,PAGE_READONLY,0,0,NULL); + if ( _internal->mmaphandle != NULL ){ + void* address = MapViewOfFile(_internal->mmaphandle,FILE_MAP_READ,0,0,0); + if ( address != NULL ){ + _internal->data = (uint8_t*)address; + ret = _CLNEW MMapIndexInput(_internal); + return true; + } + } + + //failure: + int errnum = GetLastError(); + + CloseHandle(_internal->mmaphandle); + + char* lpMsgBuf=strerror(errnum); + size_t len = strlen(lpMsgBuf)+80; + char* errstr = _CL_NEWARRAY(char, len); + cl_sprintf(errstr, len, "MMapIndexInput::MMapIndexInput failed with error %d: %s", errnum, lpMsgBuf); + + error.set(CL_ERR_IO, errstr); + _CLDELETE_CaARRAY(errstr); + } + +#else //_CL_HAVE_FUNCTION_MAPVIEWOFFILE + _internal->fhandle = ::_cl_open (path, _O_BINARY | O_RDONLY | _O_RANDOM, _S_IREAD); + if (_internal->fhandle < 0){ + error.set(CL_ERR_IO, strerror(errno)); + }else{ + // stat it + struct stat sb; + if (::fstat (_internal->fhandle, &sb)){ + error.set(CL_ERR_IO, strerror(errno)); + }else{ + // get length from stat + _internal->_length = sb.st_size; + + // mmap the file + void* address = ::mmap(0, _internal->_length, PROT_READ, MAP_SHARED, _internal->fhandle, 0); + if (address == MAP_FAILED){ + error.set(CL_ERR_IO, strerror(errno)); + }else{ + _internal->data = (uint8_t*)address; + ret = _CLNEW MMapIndexInput(_internal); + return true; + } + } + } +#endif + + _CLDELETE(_internal); + return false; + } + + 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 + _internal = _CLNEW Internal; + +#if defined(_CL_HAVE_FUNCTION_MAPVIEWOFFILE) + _internal->mmaphandle = NULL; + _internal->fhandle = NULL; +#endif + + _internal->data = clone._internal->data; + _internal->pos = clone._internal->pos; + + //clone the file length + _internal->_length = clone._internal->_length; + //Keep in mind that this instance is a clone + _internal->isClone = true; + } + + uint8_t MMapIndexInput::readByte(){ + return *(_internal->data+(_internal->pos++)); + } + + void MMapIndexInput::readBytes(uint8_t* b, const int32_t len){ + memcpy(b, _internal->data+_internal->pos, len); + _internal->pos+=len; + } + int32_t MMapIndexInput::readVInt(){ + uint8_t b = *(_internal->data+(_internal->pos++)); + int32_t i = b & 0x7F; + for (int shift = 7; (b & 0x80) != 0; shift += 7) { + b = *(_internal->data+(_internal->pos++)); + i |= (b & 0x7F) << shift; + } + return i; + } + int64_t MMapIndexInput::getFilePointer() const{ + return _internal->pos; + } + void MMapIndexInput::seek(const int64_t pos){ + this->_internal->pos=pos; + } + int64_t MMapIndexInput::length() const{ return _internal->_length; } + + MMapIndexInput::~MMapIndexInput(){ + //Func - Destructor + //Pre - True + //Post - The file for which this instance is responsible has been closed. + // The instance has been destroyed + + close(); + _CLDELETE(_internal); + } + + IndexInput* MMapIndexInput::clone() const + { + return _CLNEW MMapIndexInput(*this); + } + void MMapIndexInput::close() { + if ( !_internal->isClone ){ +#if defined(_CL_HAVE_FUNCTION_MAPVIEWOFFILE) + if ( _internal->data != NULL ){ + if ( ! UnmapViewOfFile(_internal->data) ){ + CND_PRECONDITION( false, "UnmapViewOfFile(data) failed"); //todo: change to rich error + } + } + + if ( _internal->mmaphandle != NULL ){ + if ( ! CloseHandle(_internal->mmaphandle) ){ + CND_PRECONDITION( false, "CloseHandle(mmaphandle) failed"); + } + } + if ( _internal->fhandle != NULL ){ + if ( !CloseHandle(_internal->fhandle) ){ + CND_PRECONDITION( false, "CloseHandle(fhandle) failed"); + } + } + _internal->mmaphandle = NULL; + _internal->fhandle = NULL; +#else + if ( _internal->data != NULL ) + ::munmap(_internal->data, _internal->_length); + if ( _internal->fhandle > 0 ) + ::close(_internal->fhandle); + _internal->fhandle = 0; +#endif + } + _internal->data = NULL; + _internal->pos = 0; + } + + +CL_NS_END diff --git a/Pods/BRCLucene/src/core/CLucene/store/RAMDirectory.cpp b/Pods/BRCLucene/src/core/CLucene/store/RAMDirectory.cpp new file mode 100644 index 0000000..cea5f1a --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/store/RAMDirectory.cpp @@ -0,0 +1,570 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "RAMDirectory.h" +#include "_RAMDirectory.h" +#include "Lock.h" +#include "LockFactory.h" +#include "Directory.h" +#include "FSDirectory.h" +#include "CLucene/index/IndexReader.h" +//#include "CLucene/util/VoidMap.h" +#include "CLucene/util/Misc.h" +#include + +CL_NS_USE(util) +CL_NS_DEF(store) + + + // ***** + // Lock acquisition sequence: RAMDirectory, then RAMFile + // ***** + + class RAMLock: public LuceneLock{ + private: + RAMDirectory* directory; + char* fname; + public: + RAMLock(const char* name, RAMDirectory* dir); + virtual ~RAMLock(); + bool obtain(); + void release(); + bool isLocked(); + virtual std::string toString(); + }; + + + + RAMFile::RAMFile( RAMDirectory* _directory ) + { + length = 0; + lastModified = Misc::currentTimeMillis(); + this->directory = _directory; + sizeInBytes = 0; + } + + RAMFile::~RAMFile(){ + } + + int64_t RAMFile::getLength() + { + SCOPED_LOCK_MUTEX(THIS_LOCK); + return length; + } + + void RAMFile::setLength( int64_t length ) + { + SCOPED_LOCK_MUTEX(THIS_LOCK); + this->length = length; + } + + uint64_t RAMFile::getLastModified() + { + SCOPED_LOCK_MUTEX(THIS_LOCK); + return lastModified; + } + + void RAMFile::setLastModified( const uint64_t lastModified ) + { + SCOPED_LOCK_MUTEX(THIS_LOCK); + this->lastModified = lastModified; + } + + uint8_t* RAMFile::addBuffer( const int32_t size ) + { + SCOPED_LOCK_MUTEX(THIS_LOCK); + uint8_t* buffer = newBuffer(size); + RAMFileBuffer* rfb = _CLNEW RAMFileBuffer(buffer, size); + if ( directory != NULL ) { + SCOPED_LOCK_MUTEX(directory->THIS_LOCK); + buffers.push_back( rfb ); + directory->sizeInBytes += size; + sizeInBytes += size; + } else { + buffers.push_back(rfb); + } + return buffer; + } + + uint8_t* RAMFile::getBuffer( const int32_t index ) + { + SCOPED_LOCK_MUTEX(THIS_LOCK); + return buffers[index]->_buffer; + } + + int32_t RAMFile::numBuffers() const + { + return buffers.size(); + } + + uint8_t* RAMFile::newBuffer( const int32_t size ) + { + return _CL_NEWARRAY( uint8_t, size ); + } + + int64_t RAMFile::getSizeInBytes() const + { + if ( directory != NULL ) { + SCOPED_LOCK_MUTEX(directory->THIS_LOCK); + return sizeInBytes; + } + return 0; + } + + + RAMOutputStream::~RAMOutputStream(){ + if ( deleteFile ){ + _CLDELETE(file); + }else{ + file = NULL; + } + } + RAMOutputStream::RAMOutputStream(RAMFile* f): + file(f), + deleteFile(false), + currentBuffer(NULL), + currentBufferIndex(-1), + bufferPosition(0), + bufferStart(0), + bufferLength(0) + { + } + + RAMOutputStream::RAMOutputStream(): + file(_CLNEW RAMFile), + deleteFile(true), + currentBuffer(NULL), + currentBufferIndex(-1), + bufferPosition(0), + bufferStart(0), + bufferLength(0) + { + } + + void RAMOutputStream::writeTo(IndexOutput* out){ + flush(); + const int64_t end = file->getLength(); + int64_t pos = 0; + int32_t p = 0; + while (pos < end) { + int32_t length = BUFFER_SIZE; + int64_t nextPos = pos + length; + if (nextPos > end) { // at the last buffer + length = (int32_t)(end - pos); + } + out->writeBytes(file->getBuffer(p++), length); + pos = nextPos; + } + } + + void RAMOutputStream::reset(){ + seek((int64_t)0); + file->setLength((int64_t)0); + } + + void RAMOutputStream::close() { + flush(); + } + + /** Random-at methods */ + void RAMOutputStream::seek( const int64_t pos ) { + // set the file length in case we seek back + // and flush() has not been called yet + setFileLength(); + if ( pos < bufferStart || pos >= bufferStart + bufferLength ) { + currentBufferIndex = (int32_t)(pos / BUFFER_SIZE); + switchCurrentBuffer(); + } + + bufferPosition = (int32_t)( pos % BUFFER_SIZE ); + } + + int64_t RAMOutputStream::length() const { + return file->getLength(); + } + + void RAMOutputStream::writeByte( const uint8_t b ) { + if ( bufferPosition == bufferLength ) { + currentBufferIndex++; + switchCurrentBuffer(); + } + currentBuffer[bufferPosition++] = b; + } + + void RAMOutputStream::writeBytes( const uint8_t* b, const int32_t len ) { + int32_t srcOffset = 0; + + while ( srcOffset != len ) { + if ( bufferPosition == bufferLength ) { + currentBufferIndex++; + switchCurrentBuffer(); + } + + int32_t remainInSrcBuffer = len - srcOffset; + int32_t bytesInBuffer = bufferLength - bufferPosition; + int32_t bytesToCopy = bytesInBuffer >= remainInSrcBuffer ? remainInSrcBuffer : bytesInBuffer; + + memcpy( currentBuffer+bufferPosition, b+srcOffset, bytesToCopy * sizeof(uint8_t) ); + + srcOffset += bytesToCopy; + bufferPosition += bytesToCopy; + } + } + + void RAMOutputStream::switchCurrentBuffer() { + + if ( currentBufferIndex == file->numBuffers() ) { + currentBuffer = file->addBuffer( BUFFER_SIZE ); + bufferLength = BUFFER_SIZE; + } else { + currentBuffer = file->getBuffer( currentBufferIndex ); + bufferLength = file->getBufferLen(currentBufferIndex); + } + assert(bufferLength >=0);// + + bufferPosition = 0; + bufferStart = (int64_t)BUFFER_SIZE * (int64_t)currentBufferIndex; + } + + + + void RAMOutputStream::setFileLength() { + int64_t pointer = bufferStart + bufferPosition; + if ( pointer > file->getLength() ) { + file->setLength( pointer ); + } + } + + void RAMOutputStream::flush() { + file->setLastModified( Misc::currentTimeMillis() ); + setFileLength(); + } + + int64_t RAMOutputStream::getFilePointer() const { + return currentBufferIndex < 0 ? 0 : bufferStart + bufferPosition; + } + + + RAMInputStream::RAMInputStream(RAMFile* f): + file(f), + currentBuffer(NULL), + currentBufferIndex(-1), + bufferPosition(0), + bufferStart(0), + bufferLength(0) + { + _length = f->getLength(); + + if ( _length/BUFFER_SIZE >= 0x7FFFFFFFL ) { + // TODO: throw exception + } + } + + RAMInputStream::RAMInputStream(const RAMInputStream& other): + IndexInput(other) + { + file = other.file; + _length = other._length; + currentBufferIndex = other.currentBufferIndex; + currentBuffer = other.currentBuffer; + bufferPosition = other.bufferPosition; + bufferStart = other.bufferStart; + bufferLength = other.bufferLength; + } + + RAMInputStream::~RAMInputStream(){ + RAMInputStream::close(); + } + + IndexInput* RAMInputStream::clone() const + { + return _CLNEW RAMInputStream(*this); + } + + int64_t RAMInputStream::length() const { + return _length; + } + + const char* RAMInputStream::getDirectoryType() const{ + return RAMDirectory::getClassName(); + } + const char* RAMIndexInput::getObjectName() const{ return getClassName(); } + const char* RAMIndexInput::getClassName(){ return "RAMIndexInput"; } + + uint8_t RAMInputStream::readByte() + { + if ( bufferPosition >= bufferLength ) { + currentBufferIndex++; + switchCurrentBuffer(); + } + return currentBuffer[bufferPosition++]; + } + + void RAMInputStream::readBytes( uint8_t* _dest, const int32_t _len ) { + + uint8_t* dest = _dest; + int32_t len = _len; + + while ( len > 0 ) { + if ( bufferPosition >= bufferLength ) { + currentBufferIndex++; + switchCurrentBuffer(); + } + + int32_t remainInBuffer = bufferLength - bufferPosition; + int32_t bytesToCopy = len < remainInBuffer ? len : remainInBuffer; + memcpy( dest, currentBuffer+bufferPosition, bytesToCopy * sizeof(uint8_t) ); + + dest += bytesToCopy; + len -= bytesToCopy; + bufferPosition += bytesToCopy; + } + + } + + int64_t RAMInputStream::getFilePointer() const { + return currentBufferIndex < 0 ? 0 : bufferStart + bufferPosition; + } + + void RAMInputStream::seek( const int64_t pos ) { + if ( currentBuffer == NULL || pos < bufferStart || pos >= bufferStart + BUFFER_SIZE ) { + currentBufferIndex = (int32_t)( pos / BUFFER_SIZE ); + switchCurrentBuffer(); + } + bufferPosition = (int32_t)(pos % BUFFER_SIZE); + } + + void RAMInputStream::close() { + } + + void RAMInputStream::switchCurrentBuffer() { + if ( currentBufferIndex >= file->numBuffers() ) { + // end of file reached, no more buffers left + _CLTHROWA(CL_ERR_IO, "Read past EOF"); + } else { + currentBuffer = file->getBuffer( currentBufferIndex ); + bufferPosition = 0; + bufferStart = (int64_t)BUFFER_SIZE * (int64_t)currentBufferIndex; + int64_t bufLen = _length - bufferStart; + bufferLength = bufLen > BUFFER_SIZE ? BUFFER_SIZE : static_cast(bufLen); + } + assert (bufferLength >=0); + } + + + + + bool RAMDirectory::list(vector* names) const{ + SCOPED_LOCK_MUTEX(files_mutex); + + FileMap::const_iterator itr = files->begin(); + while (itr != files->end()){ + names->push_back( string(itr->first) ); + ++itr; + } + return true; + } + + RAMDirectory::RAMDirectory(): + Directory(),files(_CLNEW FileMap(true,true)) + { + this->sizeInBytes = 0; + setLockFactory( _CLNEW SingleInstanceLockFactory() ); + } + + RAMDirectory::~RAMDirectory(){ + //todo: should call close directory? + _CLDELETE( lockFactory ); + _CLDELETE( files ); + } + + void RAMDirectory::_copyFromDir(Directory* dir, bool closeDir) + { + vector names; + dir->list(&names); + uint8_t buf[CL_NS(store)::BufferedIndexOutput::BUFFER_SIZE]; + + for (size_t i=0;iopenInput(names[i].c_str()); + // and copy to ram disk + //todo: this could be a problem when copying from big indexes... + int64_t len = is->length(); + int64_t readCount = 0; + while (readCount < len) { + int32_t toRead = (int32_t)(readCount + CL_NS(store)::BufferedIndexOutput::BUFFER_SIZE > len ? len - readCount : CL_NS(store)::BufferedIndexOutput::BUFFER_SIZE); + 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( _CLNEW FileMap(true,true) ) + { + this->sizeInBytes = 0; + setLockFactory( _CLNEW SingleInstanceLockFactory() ); + _copyFromDir(dir,false); + } + + RAMDirectory::RAMDirectory(const char* dir): + Directory(),files( _CLNEW FileMap(true,true) ) + { + this->sizeInBytes = 0; + setLockFactory( _CLNEW SingleInstanceLockFactory() ); + Directory* fsdir = FSDirectory::getDirectory(dir); + try{ + _copyFromDir(fsdir,false); + }_CLFINALLY( + fsdir->close(); + _CLDECDELETE(fsdir); + ); + } + + bool RAMDirectory::fileExists(const char* name) const { + SCOPED_LOCK_MUTEX(files_mutex); + return files->exists((char*)name); + } + + int64_t RAMDirectory::fileModified(const char* name) const { + SCOPED_LOCK_MUTEX(files_mutex); + RAMFile* f = files->get((char*)name); + return f->getLastModified(); + } + + int64_t RAMDirectory::fileLength(const char* name) const { + SCOPED_LOCK_MUTEX(files_mutex); + RAMFile* f = files->get((char*)name); + return f->getLength(); + } + + + bool RAMDirectory::openInput(const char* name, IndexInput*& ret, CLuceneError& error, int32_t /*bufferSize*/) { + SCOPED_LOCK_MUTEX(files_mutex); + RAMFile* file = files->get((char*)name); + if (file == NULL) { + error.set(CL_ERR_IO, "[RAMDirectory::open] The requested file does not exist."); + return false; + } + ret = _CLNEW RAMInputStream( file ); + return true; + } + + void RAMDirectory::close(){ + SCOPED_LOCK_MUTEX(files_mutex); + files->clear(); + _CLDELETE(files); + } + + bool RAMDirectory::doDeleteFile(const char* name) { + SCOPED_LOCK_MUTEX(files_mutex); + FileMap::iterator itr = files->find((char*)name); + if (itr != files->end()) { + SCOPED_LOCK_MUTEX(this->THIS_LOCK); + sizeInBytes -= itr->second->sizeInBytes; + files->removeitr(itr); + return true; + } else { + return false; + } + } + + void RAMDirectory::renameFile(const char* from, const char* to) { + SCOPED_LOCK_MUTEX(files_mutex); + FileMap::iterator itr = files->find((char*)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((char*)to)) { + FileMap::iterator itr1 = files->find((char*)to); + SCOPED_LOCK_MUTEX(this->THIS_LOCK); + sizeInBytes -= itr1->second->sizeInBytes; + files->removeitr( itr1 ); + } + if ( itr == files->end() ){ + char tmp[1024]; + _snprintf(tmp,1024,"cannot rename %s, file does not exist",from); + _CLTHROWT(CL_ERR_IO,tmp); + } + CND_PRECONDITION(itr != files->end(), "itr==files->end()") + RAMFile* file = itr->second; + files->removeitr(itr,false,true); + files->put(STRDUP_AtoA(to), file); + } + + + void RAMDirectory::touchFile(const char* name) { + RAMFile* file = NULL; + { + SCOPED_LOCK_MUTEX(files_mutex); + file = files->get((char*)name); + } + const uint64_t ts1 = file->getLastModified(); + uint64_t ts2 = Misc::currentTimeMillis(); + + //make sure that the time has actually changed + while ( ts1==ts2 ) { + _LUCENE_SLEEP(1); + ts2 = Misc::currentTimeMillis(); + }; + + file->setLastModified(ts2); + } + + IndexOutput* RAMDirectory::createOutput(const char* 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); + + // get the actual pointer to the output name + char* n = NULL; + FileMap::const_iterator itr = files->find(const_cast(name)); + if ( itr!=files->end() ) { + n = itr->first; + RAMFile* rf = itr->second; + SCOPED_LOCK_MUTEX(this->THIS_LOCK); + sizeInBytes -= rf->sizeInBytes; + _CLDELETE(rf); + } else { + n = STRDUP_AtoA(name); + } + + RAMFile* file = _CLNEW RAMFile(); + (*files)[n] = file; + + return _CLNEW RAMOutputStream(file); + } + + std::string RAMDirectory::toString() const{ + return "RAMDirectory"; + } + + const char* RAMDirectory::getClassName(){ + return "RAMDirectory"; + } + const char* RAMDirectory::getObjectName() const{ + return getClassName(); + } + +CL_NS_END diff --git a/Pods/BRCLucene/src/core/CLucene/store/RAMDirectory.h b/Pods/BRCLucene/src/core/CLucene/store/RAMDirectory.h new file mode 100644 index 0000000..ba01a49 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/store/RAMDirectory.h @@ -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. +------------------------------------------------------------------------------*/ +#ifndef _lucene_store_RAMDirectory_ +#define _lucene_store_RAMDirectory_ + + +#include "CLucene/util/VoidMap.h" +#include "Directory.h" +CL_CLASS_DEF(store,RAMFile) + +CL_NS_DEF(store) + + /** + * A memory-resident {@link Directory} implementation. Locking + * implementation is by default the {@link SingleInstanceLockFactory} + * but can be changed with {@link #setLockFactory}. + * + */ + class CLUCENE_EXPORT RAMDirectory:public Directory{ + protected: + typedef CL_NS(util)::CLHashMap > FileMap; + /// Removes an existing file in the directory. + virtual bool doDeleteFile(const char* name); + + /** + * Creates a new RAMDirectory instance from a different + * Directory implementation. This can be used to load + * a disk-based index into memory. + *

+ * This should be used only with indices that can fit into memory. + * + * @param dir a Directory 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: + int64_t sizeInBytes; //todo + + DEFINE_MUTABLE_MUTEX(files_mutex) // mutable: const methods must also be able to synchronize properly + + /// Returns a null terminated array of strings, one for each file in the directory. + bool list(std::vector* names) 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 RAMDirectory instance from the {@link FSDirectory}. + * + * @param dir a String specifying the full index directory path + */ + RAMDirectory(const char* dir); + + /// Returns true iff the named file exists in this directory. + bool fileExists(const char* name) const; + + /// Returns the time the named file was last modified. + int64_t fileModified(const char* name) const; + + /// Returns the length in bytes of a file in the directory. + int64_t fileLength(const char* name) const; + + /// Removes an existing file in the directory. + virtual void renameFile(const char* from, const char* to); + + /** Set the modified time of an existing file to now. */ + void touchFile(const char* name); + + /// Creates a new, empty file in the directory with the given name. + /// Returns a stream writing this file. + virtual IndexOutput* createOutput(const char* name); + + /// Returns a stream reading an existing file. + bool openInput(const char* name, IndexInput*& ret, CLuceneError& error, int32_t bufferSize = -1); + + virtual void close(); + + std::string toString() const; + + static const char* getClassName(); + const char* getObjectName() const; + }; +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/store/_Lock.h b/Pods/BRCLucene/src/core/CLucene/store/_Lock.h new file mode 100644 index 0000000..b44d05d --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/store/_Lock.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. +------------------------------------------------------------------------------*/ +#ifndef _lucene_store_intlLock_ +#define _lucene_store_intlLock_ + +#include "Lock.h" +#include + +CL_NS_DEF(store) + + +class LocksType: public CL_NS(util)::CLHashSet +{ +public: + LocksType() + { + setDoDelete(false); + } + virtual ~LocksType(){ + } +}; + + class SingleInstanceLock: public LuceneLock { + private: + const char* lockName; + LocksType* locks; + DEFINE_MUTEX(*locks_LOCK) + + public: + SingleInstanceLock( LocksType* locks, _LUCENE_THREADMUTEX* locks_LOCK, const char* lockName ); + virtual ~SingleInstanceLock(); + bool obtain(); + void release(); + bool isLocked(); + std::string toString(); + + static const char* getClassName(); + const char* getObjectName() const; + }; + + + + class NoLock: public LuceneLock { + public: + bool obtain(); + void release(); + bool isLocked(); + std::string toString(); + + static const char* getClassName(); + const char* getObjectName() const; + }; + + class FSLock: public LuceneLock { + private: + char* lockFile; + char* lockDir; + int filemode; + public: + FSLock( const char* _lockDir, const char* name, int filemode = -1 ); + ~FSLock(); + + bool obtain(); + void release(); + bool isLocked(); + std::string toString(); + + static const char* getClassName(); + const char* getObjectName() const; + }; + + // Utility class for executing code with exclusive access. + template + class LuceneLockWith { + private: + LuceneLock* lock; + int64_t lockWaitTimeout; + + protected: + // Code to execute with exclusive access. + virtual T doBody() = 0; + + // Constructs an executor that will grab the named lock. + 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 lock 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(); + ); + } + }; + +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/store/_MMapIndexInput.h b/Pods/BRCLucene/src/core/CLucene/store/_MMapIndexInput.h new file mode 100644 index 0000000..885c697 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/store/_MMapIndexInput.h @@ -0,0 +1,39 @@ +/*------------------------------------------------------------------------------ +* 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_MMap_ +#define _lucene_store_MMap_ + +#include "IndexInput.h" + +CL_NS_DEF(store) + +class MMapIndexInput : public IndexInput { + class Internal; + Internal* _internal; + + MMapIndexInput(const MMapIndexInput& clone); + MMapIndexInput(Internal* _internal); +public: + static bool open(const char* path, IndexInput*& ret, CLuceneError& error, int32_t __bufferSize); + + ~MMapIndexInput(); + IndexInput* clone() const; + + inline uint8_t readByte(); + int32_t readVInt(); + void readBytes(uint8_t* b, const int32_t len); + void close(); + int64_t getFilePointer() const; + void seek(const int64_t pos); + int64_t length() const; + + const char* getObjectName() const{ return MMapIndexInput::getClassName(); } + static const char* getClassName(){ return "MMapIndexInput"; } + const char* getDirectoryType() const{ return "MMapDirectory"; } +}; +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/store/_RAMDirectory.h b/Pods/BRCLucene/src/core/CLucene/store/_RAMDirectory.h new file mode 100644 index 0000000..7a85ef2 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/store/_RAMDirectory.h @@ -0,0 +1,155 @@ +/*------------------------------------------------------------------------------ +* 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_intl_RAMDirectory_ +#define _lucene_store_intl_RAMDirectory_ + + +#include "IndexInput.h" +#include "IndexOutput.h" +#include "RAMDirectory.h" +//#include "Lock.h" +//#include "Directory.h" +//#include "CLucene/util/VoidMap.h" +//#include "CLucene/util/Arrays.h" + +CL_NS_DEF(store) + + class CLUCENE_EXPORT RAMFile:LUCENE_BASE { + private: + struct RAMFileBuffer:LUCENE_BASE { + uint8_t* _buffer; size_t _len; + RAMFileBuffer(uint8_t* buf = NULL, size_t len=0) : _buffer(buf), _len(len) {}; + virtual ~RAMFileBuffer() { _CLDELETE_LARRAY(_buffer); }; + }; + + + CL_NS(util)::CLVector > buffers; + + + int64_t length; + int64_t sizeInBytes; // Only maintained if in a directory; updates synchronized on directory + + // This is publicly modifiable via Directory::touchFile(), so direct access not supported + uint64_t lastModified; + + protected: + RAMDirectory* directory; + + public: + DEFINE_MUTEX(THIS_LOCK) + + // File used as buffer, in no RAMDirectory + RAMFile( RAMDirectory* directory=NULL ); + virtual ~RAMFile(); + + // For non-stream access from thread that might be concurrent with writing + int64_t getLength(); + void setLength( const int64_t _length ); + + // For non-stream access from thread that might be concurrent with writing + uint64_t getLastModified(); + void setLastModified( const uint64_t lastModified ); + + uint8_t* addBuffer( const int32_t size ); + uint8_t* getBuffer( const int32_t index ); + size_t getBufferLen(const int32_t index) const { return buffers[index]->_len; } + int32_t numBuffers() const; + uint8_t* newBuffer( const int32_t size ); + + int64_t getSizeInBytes() const; + + friend class RAMDirectory; + }; + + class CLUCENE_EXPORT RAMOutputStream: public IndexOutput { + protected: + RAMFile* file; + bool deleteFile; + + uint8_t* currentBuffer; + int32_t currentBufferIndex; + + int32_t bufferPosition; + int64_t bufferStart; + int32_t bufferLength; + + void switchCurrentBuffer(); + void setFileLength(); + + public: + LUCENE_STATIC_CONSTANT(int32_t,BUFFER_SIZE=1024); + + RAMOutputStream(RAMFile* f); + RAMOutputStream(); + /** Construct an empty output buffer. */ + virtual ~RAMOutputStream(); + + virtual void close(); + + int64_t length() const; + /** Resets this to an empty buffer. */ + void reset(); + /** Copy the current contents of this buffer to the named output. */ + void writeTo(IndexOutput* output); + + void writeByte(const uint8_t b); + void writeBytes(const uint8_t* b, const int32_t len); + + void seek(const int64_t pos); + + void flush(); + + int64_t getFilePointer() const; + + const char* getObjectName(); + static const char* getClassName(); + + }; + typedef RAMOutputStream RAMIndexOutput; //deprecated + + class CLUCENE_EXPORT RAMInputStream:public IndexInput { + private: + RAMFile* file; + int64_t _length; + + uint8_t* currentBuffer; + int32_t currentBufferIndex; + + int32_t bufferPosition; + int64_t bufferStart; + int32_t bufferLength; + + void switchCurrentBuffer(); + + protected: + /** IndexInput methods */ + RAMInputStream(const RAMInputStream& clone); + + public: + LUCENE_STATIC_CONSTANT(int32_t,BUFFER_SIZE=RAMOutputStream::BUFFER_SIZE); + + RAMInputStream(RAMFile* f); + virtual ~RAMInputStream(); + IndexInput* clone() const; + + void close(); + int64_t length() const; + + uint8_t readByte(); + void readBytes( uint8_t* dest, const int32_t len ); + + int64_t getFilePointer() const; + + void seek(const int64_t pos); + const char* getDirectoryType() const; + const char* getObjectName() const; + static const char* getClassName(); + }; + typedef RAMInputStream RAMIndexInput; //deprecated + +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/util/Array.h b/Pods/BRCLucene/src/core/CLucene/util/Array.h new file mode 100644 index 0000000..969426a --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/util/Array.h @@ -0,0 +1,338 @@ +/*------------------------------------------------------------------------------ +* 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_Array_ +#define _lucene_util_Array_ + +#include +#include + +CL_NS_DEF(util) + +template +class CLUCENE_INLINE_EXPORT ArrayBase: LUCENE_BASE{ +public: + T* values; + size_t length; + + /** + * Delete's the values in the array. + * This won't do anything if deleteArray or takeArray is called first. + * This is overridden in various implementations to provide the appropriate deletor function. + */ + virtual void deleteValues(){ + if ( this->values == NULL ) + return; + for (size_t i=0;ilength;i++){ + deleteValue(this->values[i]); + } + } + /** + * Delete's a single value. Used when resizing... + */ + virtual void deleteValue(T) = 0; + + /** + * Delete's the values in the array and then calls deleteArray(). + * This won't do anything if deleteArray or takeArray is called first. + * This is overridden in various implementations to provide the appropriate deletor function. + */ + void deleteAll(){ + this->deleteValues(); + this->deleteArray(); + } + + /** + * Deletes the array holding the values. Do this if you want to take + * ownership of the array's values, but not the array containing the values. + */ + void deleteArray(){ + free(this->values); + this->values = NULL; + } + /** + * Empties the array. Do this if you want to take ownership of the array + * and the array's values. + */ + T* takeArray(){ + T* ret = values; + values = NULL; + return ret; + } + + ArrayBase(const size_t initialLength = 0) + : values(NULL), length(initialLength) + { + if (initialLength > 0) + { + this->values = (T*)malloc(sizeof(T)*length); + memset(this->values,0,sizeof(T)*length); + } + } + ArrayBase(T* _values, const size_t _length) + : values(_values), length(_length) + { + } + virtual ~ArrayBase(){ + } + + const T& operator[](const size_t _Pos) const + { + if (length <= _Pos){ + _CLTHROWA(CL_ERR_IllegalArgument,"vector subscript out of range"); + } + return (*(values + _Pos)); + } + T& operator[](const size_t _Pos) + { + if (length <= _Pos){ + _CLTHROWA(CL_ERR_IllegalArgument,"vector subscript out of range"); + } + return (*(values + _Pos)); + } + + /** + * Resize the array + * @param deleteValues if shrinking, delete the values that are lost. + */ + void resize(const size_t newSize, const bool deleteValues=false){ + if ( length == newSize ) return; + + if ( values == NULL ) + { + values = (T*)malloc(sizeof(T)*newSize); + memset(values,0,sizeof(T) * newSize); + length = newSize; + return; + } + + if (length < newSize) + { + values = (T*)realloc(values, sizeof(T) * newSize); + memset(values + length,0,sizeof(T) * (newSize-length)); + } + else // length > newSize, including newSize == 0 + { + if ( deleteValues ){ + for ( size_t i=newSize;i +class CLUCENE_INLINE_EXPORT ObjectArray: public ArrayBase{ +public: + ObjectArray():ArrayBase(){} + ObjectArray(T** values, size_t length):ArrayBase(values,length){} + ObjectArray(size_t length):ArrayBase(length){} + + void deleteValues(){ + if ( this->values == NULL ) + return; + for (size_t i=0;ilength;++i){ + _CLLDELETE(this->values[i]); + } + this->deleteArray(); + } + void deleteUntilNULL(){ + if ( this->values == NULL ) + return; + for (size_t i=0;ilength && this->values[i] != NULL;++i){ + _CLLDELETE(this->values[i]); + } + this->deleteArray(); + } + void deleteValue(T* v){ + _CLLDELETE(v); + } + virtual ~ObjectArray(){ + deleteValues(); + } + + /* Initializes all cells in the array with a NULL value */ + void initArray(){ + for (size_t i=0;ilength;i++){ + this->values[i]=NULL; + } + } +}; + +/** +* Legacy code... don't use, remove all instances of this! +*/ +template +class CLUCENE_INLINE_EXPORT Array: public ArrayBase{ +public: + _CL_DEPRECATED(ObjectArray or ValueArray) Array():ArrayBase(){} + _CL_DEPRECATED(ObjectArray or ValueArray) Array(T* values, size_t length):ArrayBase(values,length){} + _CL_DEPRECATED(ObjectArray or ValueArray) Array(size_t length):ArrayBase(length){} + void deleteValues(){ + if ( this->values == NULL ) + return; + this->deleteArray(); + } + void deleteValue(T v){} //nothing to do... + virtual ~Array(){ + } +}; + +/** +* An array where the values do not need to be deleted +*/ +template +class CLUCENE_INLINE_EXPORT ValueArray: public ArrayBase{ +public: + ValueArray():ArrayBase(){} + ValueArray(T* values, size_t length):ArrayBase(values,length){} + ValueArray(size_t length):ArrayBase(length){} + + void deleteValues(){ + if ( this->values == NULL ) + return; + this->deleteArray(); + } + void deleteValue(T /*v*/){} //nothing to do... + virtual ~ValueArray(){ + deleteValues(); + } +}; + +/** A value array for const values (never deleted) */ +template +class CLUCENE_INLINE_EXPORT ConstValueArray: public ArrayBase{ +public: + ConstValueArray():ArrayBase(){} + ConstValueArray(T* values, size_t length):ArrayBase(values,length){} + ConstValueArray(size_t length):ArrayBase(length){} + + void deleteValues(){} + void deleteValue(T /*v*/){} //nothing to do... + virtual ~ConstValueArray(){} +}; + + +/** +* An array of TCHAR strings +*/ +class CLUCENE_INLINE_EXPORT TCharArray: public ArrayBase{ +public: + TCharArray():ArrayBase(){} + TCharArray(size_t length):ArrayBase(length){} + + void deleteValues(){ + if ( this->values == NULL ) + return; + for (size_t i=0;ilength;i++) + _CLDELETE_CARRAY(this->values[i]); + this->deleteArray(); + } + void deleteValue(TCHAR* v){ + _CLDELETE_LCARRAY(v); + } + virtual ~TCharArray(){ + deleteValues(); + } +}; + +/** +* An array of char strings +*/ +class CLUCENE_INLINE_EXPORT CharArray: public ArrayBase{ +public: + CharArray():ArrayBase(){} + CharArray(size_t length):ArrayBase(length){} + + void deleteValues(){ + if ( this->values == NULL ) + return; + for (size_t i=0;ilength;i++) + _CLDELETE_CaARRAY(this->values[i]); + this->deleteArray(); + } + virtual ~CharArray(){ + deleteValues(); + } +}; + +/** +* An array of const TCHAR strings +*/ +class CLUCENE_INLINE_EXPORT TCharConstArray: public ArrayBase{ +public: + TCharConstArray():ArrayBase(){} + TCharConstArray(size_t length):ArrayBase(length){} + + void deleteValues(){ + if ( this->values == NULL ) + return; + this->deleteArray(); + } + virtual ~TCharConstArray(){ + deleteValues(); + } +}; + +/** +* An array of const char strings +*/ +class CLUCENE_INLINE_EXPORT CharConstArray: public ArrayBase{ +public: + CharConstArray():ArrayBase(){} + CharConstArray(size_t length):ArrayBase(length){} + + void deleteValues(){ + if ( this->values == NULL ) + return; + this->deleteArray(); + } + virtual ~CharConstArray(){ + deleteValues(); + } +}; + +/** An array that uses _CLDECDELETE for deletion */ +template +class CLUCENE_INLINE_EXPORT RefCountArray: public ArrayBase{ +public: + RefCountArray():ArrayBase(){} + RefCountArray(T* values, size_t length):ArrayBase(values,length){} + RefCountArray(size_t length):ArrayBase(length){} + + void deleteValues(){ + if ( this->values == NULL ) + return; + ArrayBase::deleteValues(); + this->deleteArray(); + } + void deleteValue(T v){ + _CLDECDELETE(v); + } //nothing to do... + virtual ~RefCountArray(){ + deleteValues(); + } +}; + + +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/util/BitSet.cpp b/Pods/BRCLucene/src/core/CLucene/util/BitSet.cpp new file mode 100644 index 0000000..a505b21 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/util/BitSet.cpp @@ -0,0 +1,230 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "BitSet.h" +#include "CLucene/store/Directory.h" +#include "CLucene/store/IndexInput.h" +#include "CLucene/store/IndexOutput.h" + +CL_NS_USE(store) +CL_NS_DEF(util) + + +const uint8_t BitSet::BYTE_COUNTS[256] = { + 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}; + +const uint8_t BitSet::BYTE_OFFSETS[256] = { + 8, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, + 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, + 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, + 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, + 6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, + 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, + 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, + 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, + 7, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, + 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, + 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, + 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, + 6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, + 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, + 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, + 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0}; + + +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 char* name) +{ + _count=-1; + CL_NS(store)::IndexInput* input = d->openInput( name ); + try { + _size = input->readInt(); // read size + if (_size == -1) { + readDgaps(input); + } else { + readBits(input); + } + } _CLFINALLY ( + input->close(); + _CLDELETE(input ); + ); +} + +void BitSet::write(CL_NS(store)::Directory* d, const char* name) { + CL_NS(store)::IndexOutput* output = d->createOutput(name); + try { + if (isSparse()) { + writeDgaps(output); // sparse bit-set more efficiently saved as d-gaps. + } else { + writeBits(output); + } + } _CLFINALLY ( + output->close(); + _CLDELETE(output); + ); +} +BitSet::~BitSet(){ + _CLDELETE_ARRAY(bits); +} + + +void BitSet::set(const int32_t bit, bool val){ + if (bit >= _size) { + _CLTHROWA(CL_ERR_IndexOutOfBounds, "bit out of range"); + } + + _count = -1; + + if (val) + bits[bit >> 3] |= 1 << (bit & 7); + else + bits[bit >> 3] &= ~(1 << (bit & 7)); +} + +int32_t BitSet::size() const { + return _size; +} +int32_t BitSet::count(){ + // if the BitSet has been modified + if (_count == -1) { + + 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 ); +} + + /** Read as a bit set */ + void BitSet::readBits(IndexInput* input) { + _count = input->readInt(); // read count + bits = _CL_NEWARRAY(uint8_t,(_size >> 3) + 1); // allocate bits + input->readBytes(bits, (_size >> 3) + 1); // read bits + } + + /** read as a d-gaps list */ + void BitSet::readDgaps(IndexInput* input) { + _size = input->readInt(); // (re)read size + _count = input->readInt(); // read count + bits = _CL_NEWARRAY(uint8_t,(_size >> 3) + 1); // allocate bits + int32_t last=0; + int32_t n = count(); + while (n>0) { + last += input->readVInt(); + bits[last] = input->readByte(); + n -= BYTE_COUNTS[bits[last] & 0xFF]; + } + } + + /** Write as a bit set */ + void BitSet::writeBits(IndexOutput* output) { + output->writeInt(size()); // write size + output->writeInt(count()); // write count + output->writeBytes(bits, (_size >> 3) + 1); // write bits + } + + /** Write as a d-gaps list */ + void BitSet::writeDgaps(IndexOutput* output) { + output->writeInt(-1); // mark using d-gaps + output->writeInt(size()); // write size + output->writeInt(count()); // write count + int32_t last=0; + int32_t n = count(); + int32_t m = (_size >> 3) + 1; + for (int32_t i=0; i0; i++) { + if (bits[i]!=0) { + output->writeVInt(i-last); + output->writeByte(bits[i]); + last = i; + n -= BYTE_COUNTS[bits[i] & 0xFF]; + } + } + } + + /** Indicates if the bit vector is sparse and should be saved as a d-gaps list, or dense, and should be saved as a bit set. */ + bool BitSet::isSparse() { + // note: order of comparisons below set to favor smaller values (no binary range search.) + // note: adding 4 because we start with ((int) -1) to indicate d-gaps format. + // note: we write the d-gap for the byte number, and the byte (bits[i]) itself, therefore + // multiplying count by (8+8) or (8+16) or (8+24) etc.: + // - first 8 for writing bits[i] (1 byte vs. 1 bit), and + // - second part for writing the byte-number d-gap as vint. + // note: factor is for read/write of byte-arrays being faster than vints. + int32_t factor = 10; + if ((_size >> 3) < (1<< 7)) return factor * (4 + (8+ 8)*count()) < size(); + if ((_size >> 3) < (1<<14)) return factor * (4 + (8+16)*count()) < size(); + if ((_size >> 3) < (1<<21)) return factor * (4 + (8+24)*count()) < size(); + if ((_size >> 3) < (1<<28)) return factor * (4 + (8+32)*count()) < size(); + return factor * (4 + (8+40)*count()) < size(); + } + + int32_t BitSet::nextSetBit(int32_t fromIndex) const + { + if (fromIndex < 0) + _CLTHROWT(CL_ERR_IndexOutOfBounds, _T("fromIndex < 0")); + + if (fromIndex >= _size) + return -1; + + int _max = ( _size+7 ) >> 3; + + unsigned int i = (int)( fromIndex>>3 ); + unsigned int subIndex = fromIndex & 0x7; // index within the byte + uint8_t byte = bits[i] >> subIndex; // skip all the bits to the right of index + + if ( byte != 0 ) + { + return ( ( i<<3 ) + subIndex + BYTE_OFFSETS[ byte ] ); + } + + while( ++i < _max ) + { + byte = bits[i]; + if ( byte != 0 ) + return ( ( i<<3 ) + BYTE_OFFSETS[ byte ] ); + } + return -1; + } + +CL_NS_END diff --git a/Pods/BRCLucene/src/core/CLucene/util/BitSet.h b/Pods/BRCLucene/src/core/CLucene/util/BitSet.h new file mode 100644 index 0000000..57118d3 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/util/BitSet.h @@ -0,0 +1,100 @@ +/*------------------------------------------------------------------------------ +* 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_BitSet_ +#define _lucene_util_BitSet_ + + +CL_CLASS_DEF(store,Directory) +CL_CLASS_DEF(store,IndexInput) +CL_CLASS_DEF(store,IndexOutput) + +CL_NS_DEF(util) + + +/** Optimized implementation of a vector of bits. This is more-or-less like + java.util.BitSet, but also includes the following: +

    +
  • a count() method, which efficiently computes the number of one bits;
  • +
  • optimized read from and write to disk;
  • +
  • inlinable get() method;
  • +
  • store and load, as bit set or d-gaps, depending on sparseness;
  • +
+ */ +class CLUCENE_EXPORT BitSet:LUCENE_BASE { + int32_t _size; + int32_t _count; + uint8_t *bits; + + void readBits(CL_NS(store)::IndexInput* input); + /** read as a d-gaps list */ + void readDgaps(CL_NS(store)::IndexInput* input); + /** Write as a bit set */ + void writeBits(CL_NS(store)::IndexOutput* output); + /** Write as a d-gaps list */ + void writeDgaps(CL_NS(store)::IndexOutput* output); + /** Indicates if the bit vector is sparse and should be saved as a d-gaps list, or dense, and should be saved as a bit set. */ + bool isSparse(); + static const uint8_t BYTE_COUNTS[256]; + static const uint8_t BYTE_OFFSETS[256]; +protected: + BitSet( const BitSet& copy ); + +public: + ///Create a bitset with the specified size + BitSet ( int32_t size ); + BitSet(CL_NS(store)::Directory* d, const char* name); + void write(CL_NS(store)::Directory* d, const char* name); + + ///Destructor for the bit set + ~BitSet(); + + ///get the value of the specified bit + ///get the value of the specified bit + inline bool get(const int32_t bit) const{ + if (bit >= _size) { + _CLTHROWA(CL_ERR_IndexOutOfBounds, "bit out of range"); + } + return (bits[bit >> 3] & (1 << (bit & 7))) != 0; + } + + /** + * Returns the index of the first bit that is set to {@code true} + * that occurs on or after the specified starting index. If no such + * bit exists then {@code -1} is returned. + * + *

To iterate over the {@code true} bits in a {@code BitSet}, + * use the following loop: + * + *

 {@code
+    * for (int i = bs.nextSetBit(0); i >= 0; i = bs.nextSetBit(i+1)) {
+    *     // operate on index i here
+    * }}
+ * + * @param fromIndex the index to start checking from (inclusive) + * @return the index of the next set bit, or {@code -1} if there + * is no such bit + * @throws IndexOutOfBounds if the specified index is negative + * + */ + int32_t nextSetBit(int32_t fromIndex) const; + + ///set the value of the specified bit + void set(const 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; +}; +typedef BitSet BitVector; //Lucene now calls the BitSet a BitVector... + +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/util/CLStreams.h b/Pods/BRCLucene/src/core/CLucene/util/CLStreams.h new file mode 100644 index 0000000..3af9e2f --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/util/CLStreams.h @@ -0,0 +1,295 @@ +/*------------------------------------------------------------------------------ +* 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_CLStreams_ +#define _lucene_util_CLStreams_ + +CL_NS_DEF(util) + +template +class CLUCENE_EXPORT CLStream{ +public: + virtual ~CLStream(){} + + inline int read(){ + const T* buffer; + const int32_t nread = read(buffer,1, 1); + if ( nread < 0 ) + return -1; + else + return buffer[0]; + } + + /** Read one line, return the length of the line read. + * If the string is longer than len, only len of that line will be copied + */ + inline int32_t readLine(T* buffer, size_t len){ + size_t i = 0; + while (true && i 0) + break; + else + continue; + } + buffer[i++] = b; + } + buffer[i] = 0; + return i; + } + + /** + * @brief Reads items from the stream and sets @p start to point to + * the first item that was read. + * + * Note: unless stated otherwise in the documentation for that method, + * this pointer will no longer be valid after calling another method of + * this class. The pointer will also no longer be valid after the class + * is destroyed. + * + * At least @p min items will be read from the stream, unless an error occurs + * or the end of the stream is reached. Under no circumstances will more than + * @p max items be read. + * + * If the end of the stream is reached before @p min items are read, the + * read is still considered successful and the number of items read will + * be returned. + * + * @param start pointer passed by reference that will be set to point to + * the retrieved array of items. If the end of the stream + * is encountered or an error occurs, the value of @p start + * is undefined + * @param min the minimal number of items to read from the stream. This + * value should be larger than 0. If it is 0 or smaller, the + * result is undefined + * @param max the maximal number of items to read from the stream. + * If this value is smaller than @p min, there is no limit on + * the number of items that can be read + * @return the number of items that were read. @c -1 is returned if + * end of the stream has already been reached. An error is thrown + * if an error occurs. + **/ + virtual int32_t read(const T*& start, int32_t min, int32_t max) = 0; + /** + * @brief Skip @p ntoskip items. + * + * If an error occurs, or the end of the stream is encountered, fewer + * than @p ntoskip items may be skipped. This can be checked by comparing + * the return value to @p ntoskip. + * + * Calling this function invalidates the data pointer that was obtained from + * StreamBase::read. + * + * @param ntoskip the number of items that should be skipped + * @return the number of items skipped + **/ + virtual int64_t skip(int64_t ntoskip) = 0; + /** + * @brief Get the current position in the stream. + * The value obtained from this function can be used to reset the stream. + **/ + virtual int64_t position() = 0; + int64_t getPosition(){ return this->position(); } + + virtual size_t size() = 0; +}; + +template +class CLUCENE_EXPORT BufferedStream{ +public: + virtual ~BufferedStream(){} + /** + * @brief Repositions this stream to a given position. + * + * A call to reset is only guaranteed to be successful when + * the requested position lies within the segment of a stream + * corresponding to a valid pointer obtained from read. + * In this case, the pointer will not be invalidated. + * + * Calling this function invalidates the data pointer that was obtained from + * StreamBase::read unless the conditions outlined above apply. + * + * To read n items, leaving the stream at the same position as before, you + * can do the following: + * @code + * int64_t start = stream.position(); + * if ( stream.read(data, min, max) > 0 ) { + * stream.reset(start); + * // The data pointer is still valid here + * } + * @endcode + * + * @param pos the position in the stream you want to go to, relative to + * the start of the stream + * @return the new position in the stream + **/ + virtual int64_t reset(int64_t) = 0; + /** + * @brief Sets the minimum size of the buffer + */ + virtual void setMinBufSize(int32_t s) = 0; +}; + +class BufferedReader; +class CLUCENE_EXPORT Reader: public CLStream{ +public: + ~Reader(){} + virtual BufferedReader* __asBufferedReader(){ return NULL; } +}; +class CLUCENE_EXPORT BufferedReader: public Reader, public BufferedStream{ +public: + _CL_DEPRECATED( setMinBufSize ) int64_t mark(int32_t readAheadlimit){ + this->setMinBufSize(readAheadlimit); + return this->position(); + } + ~BufferedReader(){} + BufferedReader* __asBufferedReader(){ return this; } +}; +typedef CLStream InputStream; +class CLUCENE_EXPORT BufferedInputStream: public InputStream, public BufferedStream{ +public: + virtual ~BufferedInputStream(){} +}; + + +class CLUCENE_EXPORT FilteredBufferedReader: public BufferedReader{ + class Internal; + Internal* _internal; +public: + FilteredBufferedReader(Reader* reader, bool deleteReader); + virtual ~FilteredBufferedReader(); + + int32_t read(const TCHAR*& start, int32_t min, int32_t max); + int64_t position(); + int64_t reset(int64_t); + int64_t skip(int64_t ntoskip); + size_t size(); + void setMinBufSize(int32_t minbufsize); +}; + +class CLUCENE_EXPORT FilteredBufferedInputStream: public BufferedInputStream{ + class Internal; + Internal* _internal; +public: + FilteredBufferedInputStream(InputStream* input, bool deleteInput); + virtual ~FilteredBufferedInputStream(); + + int32_t read(const signed char*& start, int32_t min, int32_t max); + int64_t position(); + int64_t reset(int64_t); + int64_t skip(int64_t ntoskip); + size_t size(); + void setMinBufSize(int32_t minbufsize); +}; + + +class CLUCENE_EXPORT StringReader: public BufferedReader{ +protected: + const TCHAR* value; + bool ownValue; + int64_t pos; + size_t m_size; + size_t buffer_size; +public: + StringReader ( const TCHAR* value, const int32_t length = -1, bool copyData = true ); + void init ( const TCHAR* value, const int32_t length, bool copyData = true ); + virtual ~StringReader(); + + int32_t read(const TCHAR*& start, int32_t min, int32_t max); + int64_t position(); + int64_t reset(int64_t); + int64_t skip(int64_t ntoskip); + void setMinBufSize(int32_t s); + size_t size(); +}; +class CLUCENE_EXPORT AStringReader: public BufferedInputStream{ + signed char* value; + bool ownValue; + int64_t pos; +protected: + size_t m_size; +public: + AStringReader ( const char* value, const int32_t length = -1 ); + AStringReader ( char* value, const int32_t length, bool copyData = true ); + virtual ~AStringReader(); + + int32_t read(const signed char*& start, int32_t min, int32_t max); + int32_t read(const unsigned char*& start, int32_t min, int32_t max); + int64_t position(); + int64_t reset(int64_t); + int64_t skip(int64_t ntoskip); + void setMinBufSize(int32_t s); + size_t size(); +}; + +/** +* A helper class which constructs a FileReader with a specified +* simple encodings, or a given inputstreamreader +*/ +class CLUCENE_EXPORT FileInputStream: public BufferedInputStream { + class Internal; + Internal* _internal; +protected: + void init(InputStream *i, int encoding); +public: + LUCENE_STATIC_CONSTANT(int32_t, DEFAULT_BUFFER_SIZE=4096); + FileInputStream ( const char* path, int32_t buflen = -1 ); + virtual ~FileInputStream (); + + int32_t read(const signed char*& start, int32_t min, int32_t max); + int64_t position(); + int64_t reset(int64_t); + int64_t skip(int64_t ntoskip); + size_t size(); + void setMinBufSize(int32_t minbufsize); +}; + +class CLUCENE_EXPORT SimpleInputStreamReader: public BufferedReader{ + class Internal; + Internal* _internal; +protected: + void init(InputStream *i, int encoding); +public: + enum{ + ASCII=1, + UTF8=2, + UCS2_LE=3 + }; + + SimpleInputStreamReader(); + SimpleInputStreamReader(InputStream *i, int encoding); + virtual ~SimpleInputStreamReader(); + + int32_t read(const TCHAR*& start, int32_t min, int32_t max); + int64_t position(); + int64_t reset(int64_t); + int64_t skip(int64_t ntoskip); + void setMinBufSize(int32_t s); + size_t size(); +}; + +/** +* A helper class which constructs a FileReader with a specified +* simple encodings, or a given inputstreamreader. +* It is recommended that you use the contribs package for proper +* decoding using iconv. This class is provided only as a dependency-less +* replacement. +*/ +class CLUCENE_EXPORT FileReader: public SimpleInputStreamReader{ +public: + FileReader(const char* path, int encoding, int32_t buflen = -1); + FileReader(const char* path, const char* encoding, int32_t buflen = -1); + virtual ~FileReader(); +}; + +CL_NS_END + +#define jstreams CL_NS(util) + +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/util/Equators.cpp b/Pods/BRCLucene/src/core/CLucene/util/Equators.cpp new file mode 100644 index 0000000..9d113e2 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/util/Equators.cpp @@ -0,0 +1,172 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "Equators.h" +#include "CLucene/util/Misc.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 + +AbstractDeletor::~AbstractDeletor(){ +} + +//////////////////////////////////////////////////////////////////////////////// +// Comparors +//////////////////////////////////////////////////////////////////////////////// +int32_t compare(Comparable* o1, Comparable* o2){ + if ( o1 == NULL && o2 == NULL ) + return 0; + else if ( o1 == NULL ) + return 1; + else if ( o2 == NULL ) + return -1; + else + return o1->compareTo(o2); +} +NamedObject::~NamedObject(){ +} +bool NamedObject::instanceOf(const char* other) const{ + const char* t = this->getObjectName(); + if ( t==other || strcmp( t, other )==0 ) + return true; + else + return false; +} + +int32_t Compare::Int32::getValue() const{ return value; } +Compare::Int32::Int32(int32_t val){ + value = val; +} +Compare::Int32::Int32(){ + value = 0; +} +const char* Compare::Int32::getClassName(){ + return "Compare::Int32::getClassName"; +} +const char* Compare::Int32::getObjectName() const{ + return getClassName(); +} +int32_t Compare::Int32::compareTo(NamedObject* o){ + if ( o->getObjectName() != Int32::getClassName() ) return -1; + + 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; +} + +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; +} + + +float_t Compare::Float::getValue() const{ + return value; +} +Compare::Float::Float(float_t val){ + value = val; +} +const char* Compare::Float::getClassName(){ + return "Compare::Float::getClassName"; +} +const char* Compare::Float::getObjectName() const{ + return getClassName(); +} +int32_t Compare::Float::compareTo(NamedObject* o){ + if ( o->getObjectName() != Float::getClassName() ) return -1; + 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; +} + + +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); +} +const char* Compare::Char::getValue() const{ return s; } + +Compare::Char::Char(){ + s=NULL; +} + Compare::Char::Char(const char* str){ + this->s = str; +} +const char* Compare::Char::getClassName(){ + return "Compare::Char::getClassName"; +} +const char* Compare::Char::getObjectName() const{ + return getClassName(); +} +int32_t Compare::Char::compareTo(NamedObject* o){ + if ( o->getObjectName() != Char::getClassName() ) return -1; + Char* os = (Char*)o; + return strcmp(s,os->s); +} + +#ifdef _UCS2 +bool Compare::WChar::operator()( const wchar_t* val1, const wchar_t* val2 ) const{ + if ( val1==val2) + return false; + bool ret = (_tcscmp( val1,val2 ) < 0); + return ret; +} +size_t Compare::WChar::operator()( const wchar_t* val1) const{ + return CL_NS(util)::Misc::whashCode(val1); +} + +const wchar_t* Compare::WChar::getValue() const{ return s; } + +Compare::WChar::WChar(){ + s=NULL; +} + Compare::WChar::WChar(const wchar_t* str){ + this->s = str; +} +const char* Compare::WChar::getClassName(){ + return "Compare::WChar::getClassName"; +} +const char* Compare::WChar::getObjectName() const{ + return getClassName(); +} +int32_t Compare::WChar::compareTo(NamedObject* o){ + if ( o->getObjectName() != WChar::getClassName() ) return -1; + TChar* os = (TChar*)o; + return _tcscmp(s,os->s); +} + +#endif + + +CL_NS_END diff --git a/Pods/BRCLucene/src/core/CLucene/util/Equators.h b/Pods/BRCLucene/src/core/CLucene/util/Equators.h new file mode 100644 index 0000000..8cc85db --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/util/Equators.h @@ -0,0 +1,283 @@ +/*------------------------------------------------------------------------------ +* 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_Equators_ +#define _lucene_util_Equators_ + +#include +#include +#include +#include +#include +//#include "CLucene/LuceneThreads.h" + +CL_NS_DEF(util) + +//////////////////////////////////////////////////////////////////////////////// +// Equators +//////////////////////////////////////////////////////////////////////////////// +/** @internal */ +class CLUCENE_INLINE_EXPORT Equals{ +public: + class CLUCENE_INLINE_EXPORT Int32:public CL_NS_STD(binary_function) + { + public: + bool operator()( const int32_t val1, const int32_t val2 ) const; + }; + + class CLUCENE_INLINE_EXPORT Char:public CL_NS_STD(binary_function) + { + public: + bool operator()( const char* val1, const char* val2 ) const; + }; +#ifdef _UCS2 + class CLUCENE_INLINE_EXPORT WChar: public CL_NS_STD(binary_function) + { + public: + bool operator()( const wchar_t* val1, const wchar_t* val2 ) const; + }; + class CLUCENE_INLINE_EXPORT TChar: public WChar{ + }; +#else + class CLUCENE_INLINE_EXPORT TChar: public Char{ + }; +#endif + + + template + class CLUCENE_INLINE_EXPORT Void:public CL_NS_STD(binary_function) + { + public: + bool operator()( _cl* val1, _cl* val2 ) const{ + return val1==val2; + } + }; +}; + + +//////////////////////////////////////////////////////////////////////////////// +// Comparors +//////////////////////////////////////////////////////////////////////////////// +class CLUCENE_EXPORT NamedObject{ +public: + virtual ~NamedObject(); + virtual const char* getObjectName() const = 0; + virtual bool instanceOf(const char* otherobject) const; +}; +class CLUCENE_EXPORT Comparable:public NamedObject{ +public: + virtual ~Comparable(){ + } + + virtual int32_t compareTo(NamedObject* o) = 0; +}; + +/** @internal */ +class CLUCENE_INLINE_EXPORT Compare{ +public: + class CLUCENE_EXPORT _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 CLUCENE_INLINE_EXPORT Int32:public _base, public Comparable{ + int32_t value; + public: + int32_t getValue() const; + Int32(int32_t val); + Int32(); + int32_t compareTo(NamedObject* o); + bool operator()( int32_t t1, int32_t t2 ) const; + size_t operator()( int32_t t ) const; + static const char* getClassName(); + const char* getObjectName() const; + }; + + + class CLUCENE_INLINE_EXPORT Float:public Comparable{ + float_t value; + public: + float_t getValue() const; + Float(float_t val); + int32_t compareTo(NamedObject* o); + static const char* getClassName(); + const char* getObjectName() const; + }; + + + class CLUCENE_EXPORT Char: public _base, public Comparable // + { + const char* s; + public: + const char* getValue() const; + Char(); + Char(const char* str); + int32_t compareTo(NamedObject* o); + + bool operator()( const char* val1, const char* val2 ) const; + size_t operator()( const char* val1) const; + static const char* getClassName(); + const char* getObjectName() const; + }; + +#ifdef _UCS2 + class CLUCENE_EXPORT WChar: public _base, public Comparable // + { + const wchar_t* s; + public: + const wchar_t* getValue() const; + WChar(); + WChar(const wchar_t* str); + int32_t compareTo(NamedObject* o); + + bool operator()( const wchar_t* val1, const wchar_t* val2 ) const; + size_t operator()( const wchar_t* val1) const; + static const char* getClassName(); + const char* getObjectName() const; + }; + typedef WChar TChar; +#else + typedef Char TChar; +#endif + + template + class CLUCENE_INLINE_EXPORT Void:public _base // + { + 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; + } + }; +}; + + + + +int32_t compare(Comparable* o1, Comparable* o2); + +//////////////////////////////////////////////////////////////////////////////// +// allocators +//////////////////////////////////////////////////////////////////////////////// +/** @internal */ +class CLUCENE_INLINE_EXPORT AbstractDeletor{ +public: + virtual void Delete(void*) = 0; + virtual ~AbstractDeletor(); +}; +class CLUCENE_INLINE_EXPORT Deletor{ +public: + class CLUCENE_INLINE_EXPORT tcArray: public AbstractDeletor{ + public: + void Delete(void* _arr){ + doDelete((TCHAR*)_arr); + } + static void doDelete(TCHAR* arr){ + _CLDELETE_CARRAY(arr); + } + }; + + template + class CLUCENE_INLINE_EXPORT vArray: public AbstractDeletor{ + public: + void Delete(void* arr){ + doDelete((_kt*)arr); + } + static void doDelete(_kt* arr){ + _CLDELETE_LARRAY(arr); + } + }; + class CLUCENE_INLINE_EXPORT acArray: public AbstractDeletor{ + public: + void Delete(void* arr){ + doDelete((char*)arr); + } + static void doDelete(char* arr){ + _CLDELETE_CaARRAY(arr); + } + }; + + template + class CLUCENE_INLINE_EXPORT Object: public AbstractDeletor{ + public: + void Delete(void* obj){ + doDelete((_kt*)obj); + } + static void doDelete(_kt* obj){ + _CLDELETE(obj); + } + }; + template + class CLUCENE_INLINE_EXPORT Void: public AbstractDeletor{ + public: + void Delete(void* obj){ + doDelete((_kt*)obj); + } + static void doDelete(_kt* obj){ + _CLVDELETE(obj); + } + }; + class CLUCENE_INLINE_EXPORT Dummy: public AbstractDeletor{ + public: + void Delete(void*){} + static void doDelete(const void*){ + //todo: remove all occurances where it hits this point + //CND_WARNING(false,"Deletor::Dummy::doDelete run, set deleteKey or deleteValue to false"); + } + }; + class CLUCENE_INLINE_EXPORT DummyInt32: public AbstractDeletor{ + public: + void Delete(void*){} + static void doDelete(const int32_t){ + } + }; + class CLUCENE_INLINE_EXPORT DummyFloat: public AbstractDeletor{ + public: + void Delete(void*){} + static void doDelete(const float_t){ + } + }; + template + class CLUCENE_INLINE_EXPORT ConstNullVal: public AbstractDeletor{ + public: + void Delete(void*){} + static void doDelete(const _type){ + //todo: remove all occurances where it hits this point + //CND_WARNING(false,"Deletor::Dummy::doDelete run, set deleteKey or deleteValue to false"); + } + }; + + template + class CLUCENE_INLINE_EXPORT NullVal: public AbstractDeletor{ + public: + void Delete(void*){} + static void doDelete(_type){ + //todo: remove all occurances where it hits this point + //CND_WARNING(false,"Deletor::Dummy::doDelete run, set deleteKey or deleteValue to false"); + } + }; +}; +//////////////////////////////////////////////////////////////////////////////// + +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/util/FastCharStream.cpp b/Pods/BRCLucene/src/core/CLucene/util/FastCharStream.cpp new file mode 100644 index 0000000..590a3bd --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/util/FastCharStream.cpp @@ -0,0 +1,109 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "_FastCharStream.h" + +#include "CLucene/util/CLStreams.h" + +CL_NS_DEF(util) + +const int32_t FastCharStream::maxRewindSize = LUCENE_MAX_WORD_LEN*2; + + FastCharStream::FastCharStream(BufferedReader* reader): + pos(0), + rewindPos(0), + resetPos(0), + col(1), + line(1), + input(reader) + { + input->setMinBufSize(maxRewindSize); + } + FastCharStream::~FastCharStream(){ + } + + void FastCharStream::reset() + { + pos = 0; + rewindPos = 0; + resetPos = 0; + col = 1; + line = 1; + input->setMinBufSize(maxRewindSize); + } + + 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() + { + 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; + 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/Pods/BRCLucene/src/core/CLucene/util/MD5Digester.cpp b/Pods/BRCLucene/src/core/CLucene/util/MD5Digester.cpp new file mode 100644 index 0000000..53227ec --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/util/MD5Digester.cpp @@ -0,0 +1,335 @@ +///////////////////////////////////////////////////////////////////////// +// MD5.cpp +// Implementation file for MD5 class +// +// This C++ Class implementation of the original RSA Data Security, Inc. +// MD5 Message-Digest Algorithm is copyright (c) 2002, Gary McNickle. +// All rights reserved. This software is a derivative of the "RSA Data +// Security, Inc. MD5 Message-Digest Algorithm" +// +// You may use this software free of any charge, but without any +// warranty or implied warranty, provided that you follow the terms +// of the original RSA copyright, listed below. +// +// Original RSA Data Security, Inc. Copyright notice +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All +// rights reserved. +// +// License to copy and use this software is granted provided that it +// is identified as the "RSA Data Security, Inc. MD5 Message-Digest +// Algorithm" in all material mentioning or referencing this software +// or this function. +// License is also granted to make and use derivative works provided +// that such works are identified as "derived from the RSA Data +// Security, Inc. MD5 Message-Digest Algorithm" in all material +// mentioning or referencing the derived work. +// RSA Data Security, Inc. makes no representations concerning either +// the merchantability of this software or the suitability of this +// software for any particular purpose. It is provided "as is" +// without express or implied warranty of any kind. +// These notices must be retained in any copies of any part of this +// documentation and/or software. +///////////////////////////////////////////////////////////////////////// + +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "_MD5Digester.h" +CL_NS_DEF(util) + +static unsigned char PADDING[64] = +{ + 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +}; + +#define S11 7 +#define S12 12 +#define S13 17 +#define S14 22 +#define S21 5 +#define S22 9 +#define S23 14 +#define S24 20 +#define S31 4 +#define S32 11 +#define S33 16 +#define S34 23 +#define S41 6 +#define S42 10 +#define S43 15 +#define S44 21 + + +// PrintMD5: Converts a completed md5 digest into a char* string. +char* PrintMD5(uint8_t md5Digest[16]) +{ + const char toHex[] = "0123456789abcdef"; + char chBuffer[16 * 2 + 1]; + int nCount; + + for (nCount = 0; nCount < 16; nCount++) + { + chBuffer[nCount * 2] = toHex[(md5Digest[nCount] & 0xf0) >> 4]; + chBuffer[nCount * 2 + 1] = toHex[md5Digest[nCount] & 0x0f]; + } + chBuffer[nCount * 2] = '\0'; + + return STRDUP_AtoA(chBuffer); +} + +// MD5String: Performs the MD5 algorithm on a char* string, returning +// the results as a char*. +char* MD5String(char* szString) +{ + int nLen = strlen(szString); + md5 alg; + + alg.Update((unsigned char*)szString, (unsigned int)nLen); + alg.Finalize(); + + return PrintMD5(alg.Digest()); + +} + +// MD5File: Performs the MD5 algorithm on a file (binar or text), +// returning the results as a char*. Returns NULL if it fails. +char* MD5File(char* szFilename) +{ + FILE* file; + md5 alg; + int nLen; + unsigned char chBuffer[1024]; + + try + { + memset(chBuffer, 0, 1024); + + if ((file = fopen (szFilename, "rb")) != NULL) + { + while ((nLen = fread (chBuffer, 1, 1024, file))) + alg.Update(chBuffer, nLen); + + alg.Finalize(); + + fclose (file); + + return PrintMD5(alg.Digest()); + } + } + catch(...) //todo: only catch IO Err??? + { + + } + + return NULL; // failed +} + + +// md5::Init +// Initializes a new context. +void md5::Init() +{ + memset(m_Count, 0, 2 * sizeof(uint32_t)); + + m_State[0] = 0x67452301; + m_State[1] = 0xefcdab89; + m_State[2] = 0x98badcfe; + m_State[3] = 0x10325476; +} + +// md5::Update +// MD5 block update operation. Continues an MD5 message-digest +// operation, processing another message block, and updating the +// context. +void md5::Update(uint8_t* chInput, uint32_t nInputLen) +{ + uint32_t i, index, partLen; + + // Compute number of bytes mod 64 + index = (unsigned int)((m_Count[0] >> 3) & 0x3F); + + // Update number of bits + if ((m_Count[0] += (nInputLen << 3)) < (nInputLen << 3)) + m_Count[1]++; + + m_Count[1] += (nInputLen >> 29); + + partLen = 64 - index; + + // Transform as many times as possible. + if (nInputLen >= partLen) + { + memcpy( &m_Buffer[index], chInput, partLen ); + Transform(m_Buffer); + + for (i = partLen; i + 63 < nInputLen; i += 64) + Transform(&chInput[i]); + + index = 0; + } + else + i = 0; + + // Buffer remaining input + memcpy( &m_Buffer[index], &chInput[i], nInputLen-i ); +} + +// md5::Finalize +// MD5 finalization. Ends an MD5 message-digest operation, writing +// the message digest and zeroizing the context. +void md5::Finalize() +{ + uint8_t bits[8]; + uint32_t index, padLen; + + // Save number of bits + Encode (bits, m_Count, 8); + + // Pad out to 56 mod 64 + index = (unsigned int)((m_Count[0] >> 3) & 0x3f); + padLen = (index < 56) ? (56 - index) : (120 - index); + Update(PADDING, padLen); + + // Append length (before padding) + Update (bits, 8); + + // Store state in digest + Encode (m_Digest, m_State, 16); + + memset(m_Count, 0, 2 * sizeof(uint32_t)); + memset(m_State, 0, 4 * sizeof(uint32_t)); + memset(m_Buffer,0, 64 * sizeof(uint8_t)); +} + +// md5::Transform +// MD5 basic transformation. Transforms state based on block. +void md5::Transform (uint8_t* block) +{ + uint32_t a = m_State[0], b = m_State[1], c = m_State[2], d = m_State[3], x[16]; + + Decode (x, block, 64); + + // Round 1 + FF (a, b, c, d, x[ 0], S11, 0xd76aa478); + FF (d, a, b, c, x[ 1], S12, 0xe8c7b756); + FF (c, d, a, b, x[ 2], S13, 0x242070db); + FF (b, c, d, a, x[ 3], S14, 0xc1bdceee); + FF (a, b, c, d, x[ 4], S11, 0xf57c0faf); + FF (d, a, b, c, x[ 5], S12, 0x4787c62a); + FF (c, d, a, b, x[ 6], S13, 0xa8304613); + FF (b, c, d, a, x[ 7], S14, 0xfd469501); + FF (a, b, c, d, x[ 8], S11, 0x698098d8); + FF (d, a, b, c, x[ 9], S12, 0x8b44f7af); + FF (c, d, a, b, x[10], S13, 0xffff5bb1); + FF (b, c, d, a, x[11], S14, 0x895cd7be); + FF (a, b, c, d, x[12], S11, 0x6b901122); + FF (d, a, b, c, x[13], S12, 0xfd987193); + FF (c, d, a, b, x[14], S13, 0xa679438e); + FF (b, c, d, a, x[15], S14, 0x49b40821); + + // Round 2 + GG (a, b, c, d, x[ 1], S21, 0xf61e2562); + GG (d, a, b, c, x[ 6], S22, 0xc040b340); + GG (c, d, a, b, x[11], S23, 0x265e5a51); + GG (b, c, d, a, x[ 0], S24, 0xe9b6c7aa); + GG (a, b, c, d, x[ 5], S21, 0xd62f105d); + GG (d, a, b, c, x[10], S22, 0x2441453); + GG (c, d, a, b, x[15], S23, 0xd8a1e681); + GG (b, c, d, a, x[ 4], S24, 0xe7d3fbc8); + GG (a, b, c, d, x[ 9], S21, 0x21e1cde6); + GG (d, a, b, c, x[14], S22, 0xc33707d6); + GG (c, d, a, b, x[ 3], S23, 0xf4d50d87); + GG (b, c, d, a, x[ 8], S24, 0x455a14ed); + GG (a, b, c, d, x[13], S21, 0xa9e3e905); + GG (d, a, b, c, x[ 2], S22, 0xfcefa3f8); + GG (c, d, a, b, x[ 7], S23, 0x676f02d9); + GG (b, c, d, a, x[12], S24, 0x8d2a4c8a); + + // Round 3 + HH (a, b, c, d, x[ 5], S31, 0xfffa3942); + HH (d, a, b, c, x[ 8], S32, 0x8771f681); + HH (c, d, a, b, x[11], S33, 0x6d9d6122); + HH (b, c, d, a, x[14], S34, 0xfde5380c); + HH (a, b, c, d, x[ 1], S31, 0xa4beea44); + HH (d, a, b, c, x[ 4], S32, 0x4bdecfa9); + HH (c, d, a, b, x[ 7], S33, 0xf6bb4b60); + HH (b, c, d, a, x[10], S34, 0xbebfbc70); + HH (a, b, c, d, x[13], S31, 0x289b7ec6); + HH (d, a, b, c, x[ 0], S32, 0xeaa127fa); + HH (c, d, a, b, x[ 3], S33, 0xd4ef3085); + HH (b, c, d, a, x[ 6], S34, 0x4881d05); + HH (a, b, c, d, x[ 9], S31, 0xd9d4d039); + HH (d, a, b, c, x[12], S32, 0xe6db99e5); + HH (c, d, a, b, x[15], S33, 0x1fa27cf8); + HH (b, c, d, a, x[ 2], S34, 0xc4ac5665); + + // Round 4 + II (a, b, c, d, x[ 0], S41, 0xf4292244); + II (d, a, b, c, x[ 7], S42, 0x432aff97); + II (c, d, a, b, x[14], S43, 0xab9423a7); + II (b, c, d, a, x[ 5], S44, 0xfc93a039); + II (a, b, c, d, x[12], S41, 0x655b59c3); + II (d, a, b, c, x[ 3], S42, 0x8f0ccc92); + II (c, d, a, b, x[10], S43, 0xffeff47d); + II (b, c, d, a, x[ 1], S44, 0x85845dd1); + II (a, b, c, d, x[ 8], S41, 0x6fa87e4f); + II (d, a, b, c, x[15], S42, 0xfe2ce6e0); + II (c, d, a, b, x[ 6], S43, 0xa3014314); + II (b, c, d, a, x[13], S44, 0x4e0811a1); + II (a, b, c, d, x[ 4], S41, 0xf7537e82); + II (d, a, b, c, x[11], S42, 0xbd3af235); + II (c, d, a, b, x[ 2], S43, 0x2ad7d2bb); + II (b, c, d, a, x[ 9], S44, 0xeb86d391); + + m_State[0] += a; + m_State[1] += b; + m_State[2] += c; + m_State[3] += d; + + memset(x, 0, sizeof(x)); +} + +// md5::Encode +// Encodes input (uint32_t) into output (uint8_t). Assumes nLength is +// a multiple of 4. +void md5::Encode(uint8_t* dest, uint32_t* src, uint32_t nLength) +{ + uint32_t i, j; + + CND_PRECONDITION(nLength % 4 == 0,"nLength % 4 != 0") + + for (i = 0, j = 0; j < nLength; i++, j += 4) + { + dest[j] = (uint8_t)(src[i] & 0xff); + dest[j+1] = (uint8_t)((src[i] >> 8) & 0xff); + dest[j+2] = (uint8_t)((src[i] >> 16) & 0xff); + dest[j+3] = (uint8_t)((src[i] >> 24) & 0xff); + } +} + +// md5::Decode +// Decodes input (uint8_t) into output (uint32_t). Assumes nLength is +// a multiple of 4. +void md5::Decode(uint32_t* dest, uint8_t* src, uint32_t nLength) +{ + uint32_t i, j; + + CND_PRECONDITION(nLength % 4 == 0, "nLength % 4 != 0"); + + for (i = 0, j = 0; j < nLength; i++, j += 4) + { + dest[i] = ((uint32_t)src[j]) | (((uint32_t)src[j+1])<<8) | + (((uint32_t)src[j+2])<<16) | (((uint32_t)src[j+3])<<24); + } +} + +CL_NS_END diff --git a/Pods/BRCLucene/src/core/CLucene/util/PriorityQueue.h b/Pods/BRCLucene/src/core/CLucene/util/PriorityQueue.h new file mode 100644 index 0000000..ac25cde --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/util/PriorityQueue.h @@ -0,0 +1,199 @@ +/*------------------------------------------------------------------------------ +* 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_ + +#include + +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 CLUCENE_INLINE_EXPORT PriorityQueue { + private: + size_t _size; + bool dk; + size_t maxSize; + protected: + _type* heap; //(was object[]) + + private: + 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():_size(0),dk(false),maxSize(0),heap(NULL){ + } + + // 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; + if (0 == maxSize) + // We allocate 1 extra to avoid if statement in top() + heapSize = 2; + else + heapSize = maxSize + 1; + heap = _CL_NEWARRAY(_type,heapSize); + this->maxSize = maxSize; + } + + public: + virtual ~PriorityQueue(){ + clear(); + _CLDELETE_LARRAY(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){ + _type t = insertWithOverflow(element); + if (t != element) { + if (t) _valueDeletor::doDelete(t); + return true; + } + return false; + } + + /** + * insertWithOverflow() is the same as insert() except its + * return value: it returns the object (if any) that was + * dropped off the heap because it was full. This can be + * the given parameter (in case it is smaller than the + * full heap's minimum, and couldn't be added), or another + * object that was previously the smallest value in the + * heap and now has been replaced by a larger one, or null + * if the queue wasn't yet full with maxSize elements. + * NOTE: value is not being deleted - its the user responsibilty + * to dispose the returned _type (only if != NULL && != element). + */ + _type insertWithOverflow(_type element) { + if(_size < maxSize){ + put(element); + return NULL; + }else if(_size > 0 && !lessThan(element, heap[1])){ + _type ret = heap[1]; + heap[1] = element; + adjustTop(); + return ret; + }else + return element; + } + + /** + * Returns the least element of the PriorityQueue in constant time. + */ + _type top(){ + // We don't need to check size here: if maxSize is 0, + // then heap is length 2 array with both entries null. + // If size is 0 then heap[1] is already null. + return heap[1]; + } + + /** 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
+		    { pq.top().change(); pq.adjustTop(); }
+		   
instead of
+		    { o = pq.pop(); o.change(); pq.push(o); }
+		   
+ */ + 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/Pods/BRCLucene/src/core/CLucene/util/Reader.cpp b/Pods/BRCLucene/src/core/CLucene/util/Reader.cpp new file mode 100644 index 0000000..8693995 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/util/Reader.cpp @@ -0,0 +1,550 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "CLStreams.h" +#include "CLucene/util/Misc.h" + +#include +#ifdef _CL_HAVE_IO_H + #include +#endif +#ifdef _CL_HAVE_SYS_STAT_H + #include +#endif +#ifdef _CL_HAVE_UNISTD_H + #include +#endif +#ifdef _CL_HAVE_DIRECT_H + #include +#endif +#include + +#include "_bufferedstream.h" + +CL_NS_DEF(util) + +StringReader::StringReader ( const TCHAR* _value, const int32_t _length, bool copyData ) +{ + this->m_size = 0; + this->value = NULL; + this->ownValue = true; + this->buffer_size = 0; + this->init(_value,_length,copyData); +} + +void StringReader::init ( const TCHAR* _value, const int32_t _length, bool copyData ){ + const size_t length = ( _length < 0 ? _tcslen(_value) : _length ); + this->pos = 0; + if ( copyData ){ + TCHAR* tmp = (TCHAR*)this->value; + if ( tmp == NULL || !this->ownValue ){ + tmp = _CL_NEWARRAY(TCHAR, length+1); + this->buffer_size = length; + }else if ( length > this->buffer_size || length < (this->buffer_size/2) ){ //expand, or shrink + tmp = (TCHAR*)realloc(tmp, sizeof(TCHAR) * (length+1)); + this->buffer_size = length; + } + _tcsncpy(tmp, _value, length+1); + this->value = tmp; + }else{ + if ( ownValue && this->value != NULL) + _CLDELETE_LARRAY( (TCHAR*)this->value); + this->value = _value; + this->buffer_size = 0; + } + this->m_size = length; + this->ownValue = copyData; +} + +StringReader::~StringReader(){ + if ( ownValue && this->value != NULL){ + TCHAR* value = (TCHAR*) this->value; + _CLDELETE_LARRAY(value); + this->value = NULL; + } +} + +size_t StringReader::size(){ + return m_size; +} +int32_t StringReader::read(const TCHAR*& start, int32_t min, int32_t max){ + if ( m_size == pos ) + return -1; + start = this->value + pos; + int32_t r = (int32_t)cl_min(cl_max(min,max),m_size-pos); + pos += r; + return r; +} +int64_t StringReader::position(){ + return pos; +} +void StringReader::setMinBufSize(int32_t /*s*/){ +} +int64_t StringReader::reset(int64_t pos){ + if ( pos >= 0 && pos < this->m_size ) + this->pos = pos; + return this->pos; +} +int64_t StringReader::skip(int64_t ntoskip){ + int64_t s = cl_min(ntoskip, m_size-pos); + this->pos += s; + return s; +} + + + + +AStringReader::AStringReader ( char* value, const int32_t length, bool copyData ) +{ + this->m_size = length; + this->pos = 0; + if ( copyData ){ + this->value = _CL_NEWARRAY(signed char, this->m_size); + strncpy((char*)this->value, value, this->m_size); + }else{ + this->value = (signed char*)value; + } + this->ownValue = copyData; +} + +AStringReader::AStringReader ( const char* value, const int32_t length ){ + if ( length >= 0 ) + this->m_size = length; + else + this->m_size = strlen(value); + this->pos = 0; + this->value = _CL_NEWARRAY(signed char, this->m_size); + strncpy((char*)this->value, value, this->m_size); + this->ownValue = true; +} +AStringReader::~AStringReader(){ + if ( ownValue ) + _CLDELETE_ARRAY(this->value); +} + +size_t AStringReader::size(){ + return m_size; +} +int32_t AStringReader::read(const signed char*& start, int32_t min, int32_t max){ + if ( m_size == pos ) + return -1; + start = this->value + pos; + int32_t r = (int32_t)cl_min(cl_max(min,max),m_size-pos); + pos += r; + return r; +} +int32_t AStringReader::read(const unsigned char*& start, int32_t min, int32_t max){ + if ( m_size == pos ) + return -1; + start = (unsigned char*)(this->value + pos); + int32_t r = (int32_t)cl_min(cl_max(min,max),m_size-pos); + pos += r; + return r; +} +int64_t AStringReader::position(){ + return pos; +} +void AStringReader::setMinBufSize(int32_t /*s*/){ +} +int64_t AStringReader::reset(int64_t pos){ + if ( pos >= 0 && pos < this->m_size ) + this->pos = pos; + return this->pos; +} +int64_t AStringReader::skip(int64_t ntoskip){ + int64_t s = cl_min(ntoskip, m_size-pos); + this->pos += s; + return s; +} + +class FileInputStream::Internal{ +public: + class JStreamsBuffer: public BufferedInputStreamImpl{ + int32_t fhandle; + protected: + int32_t fillBuffer(signed char* start, int32_t space){ + if (fhandle == 0) return -1; + // read into the buffer + int32_t nwritten = ::_read(fhandle, start, space); + + // check the file stream status + if (nwritten == -1 ) { + m_error = "Could not read from file"; + m_status = CL_NS(util)::Error; + if ( fhandle > 0 ){ + ::_close(fhandle); + fhandle = 0; + } + return -1; + }else if ( nwritten == 0 ) { + ::_close(fhandle); + fhandle = 0; + } + return nwritten; + } + public: + int encoding; + + JStreamsBuffer(int32_t fhandle, int32_t buffersize){ + this->fhandle = fhandle; + + m_size = fileSize(fhandle); // no need to know the file length... + + // allocate memory in the buffer + int32_t bufsize = (int32_t)((m_size <= buffersize) ?m_size+1 :buffersize); + setMinBufSize(bufsize); + } + void _setMinBufSize(int32_t bufsize){ + this->setMinBufSize(bufsize); + } + + ~JStreamsBuffer(){ + if ( fhandle > 0 ){ + if ( ::_close(fhandle) != 0 ) + _CLTHROWA(CL_ERR_IO, "File IO Close error"); + } + } + }; + + JStreamsBuffer* jsbuffer; + + Internal(const char* path, int32_t buffersize){ + int32_t fhandle = _cl_open(path, _O_BINARY | O_RDONLY | _O_RANDOM, _S_IREAD ); + + //Check if a valid handle was retrieved + if (fhandle < 0){ + int err = errno; + if ( err == ENOENT ) + _CLTHROWA(CL_ERR_IO, "File does not exist"); + else if ( err == EACCES ) + _CLTHROWA(CL_ERR_IO, "File Access denied"); + else if ( err == EMFILE ) + _CLTHROWA(CL_ERR_IO, "Too many open files"); + else + _CLTHROWA(CL_ERR_IO, "Could not open file"); + } + jsbuffer = new JStreamsBuffer(fhandle, buffersize); + + } + ~Internal(){ + delete jsbuffer; + } +}; + + +FileInputStream::FileInputStream ( const char* path, int32_t buflen ) +{ + if ( buflen == -1 ) + buflen = DEFAULT_BUFFER_SIZE; + _internal = new Internal(path, buflen); +} + +size_t FileInputStream::size(){ + return (size_t)_internal->jsbuffer->size(); +} + +FileInputStream::~FileInputStream () +{ + delete _internal; +} + +int32_t FileInputStream::read(const signed char*& start, int32_t min, int32_t max){ + return _internal->jsbuffer->read(start,min,max); +} +int64_t FileInputStream::position(){ + return _internal->jsbuffer->position(); +} +int64_t FileInputStream::reset(int64_t to){ + return _internal->jsbuffer->reset(to); +} +int64_t FileInputStream::skip(int64_t ntoskip){ + return _internal->jsbuffer->skip(ntoskip); +} +void FileInputStream::setMinBufSize(int32_t minbufsize){ + _internal->jsbuffer->_setMinBufSize(minbufsize); +} + + +FileReader::FileReader(const char *path, const char *enc, int32_t buflen) +{ + int encoding; + 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"); + init( _CLNEW FileInputStream(path, buflen), encoding); +} +FileReader::FileReader(const char *path, int encoding, int32_t buflen) +{ + init(_CLNEW FileInputStream(path, buflen), encoding); +} +FileReader::~FileReader(){ +} + +class SimpleInputStreamReader::Internal{ +public: + + class JStreamsBuffer: public BufferedReaderImpl{ + InputStream* input; + char utf8buf[6]; //< buffer used for converting utf8 characters + protected: + int readChar(){ + const signed char* buf; + if ( encoding == ASCII ){ + int32_t ret = this->input->read(buf, 1, 1) ; + if ( ret == 1 ){ + return buf[0]; + }else + return -1; + + }else if ( encoding == UCS2_LE ){ + int32_t ret = this->input->read(buf, 2, 2); + if ( ret < 0 ) + return -1; + else if ( ret == 1 ){ + return buf[0]; + }else{ + uint8_t c1 = *buf; + uint8_t c2 = *(buf+1); + return c1 | (c2<<8); + } + }else if ( encoding == UTF8 ){ + int32_t ret = this->input->read(buf, 1, 1); + + if ( ret == 1 ){ + int len = lucene_utf8charlen(buf[0]); + if ( len > 1 ){ + *utf8buf = buf[0]; + ret = this->input->read(buf, len-1, len-1); + }else + return buf[0]; + + if ( ret >= 0 ){ + if ( ret == len-1 ){ + memcpy(utf8buf+1,buf,ret); + wchar_t wcbuf=0; + lucene_utf8towc(wcbuf, utf8buf); + return wcbuf; + } + } + }else if ( ret == -1 ) + return -1; + this->m_error = "Invalid multibyte sequence."; + this->m_status = CL_NS(util)::Error; + }else{ + this->m_error = "Unexpected encoding"; + this->m_status = CL_NS(util)::Error; + } + return -1; + } + int32_t fillBuffer(TCHAR* start, int32_t space){ + if ( input == NULL ) return -1; + + int c; + int32_t i; + for(i=0;im_status == CL_NS(util)::Ok ){ + if ( i == 0 ) + return -1; + break; + } + return -1; + } + start[i] = c; + } + return i; + } + public: + int encoding; + + JStreamsBuffer(InputStream* input, int encoding){ + this->input = input; + this->encoding = encoding; + setMinBufSize(1024); + } + virtual ~JStreamsBuffer(){ + _CLDELETE(input); + } + void _setMinBufSize(int32_t min){ + this->setMinBufSize(min); + } + }; + + JStreamsBuffer* jsbuffer; + + Internal(InputStream* input, int encoding){ + jsbuffer = new JStreamsBuffer(input, encoding); + } + ~Internal(){ + delete jsbuffer; + } +}; + +SimpleInputStreamReader::SimpleInputStreamReader(){ + _internal = NULL; +} +SimpleInputStreamReader::SimpleInputStreamReader(InputStream *i, int encoding){ + _internal = new Internal(i, encoding); +} +void SimpleInputStreamReader::init(InputStream *i, int encoding){ + _internal = new Internal(i, encoding); +} +SimpleInputStreamReader::~SimpleInputStreamReader(){ + delete _internal; +} + +int32_t SimpleInputStreamReader::read(const TCHAR*& start, int32_t min, int32_t max){ + return _internal->jsbuffer->read(start, min, max); +} +int64_t SimpleInputStreamReader::position(){ + return _internal->jsbuffer->position(); +} +int64_t SimpleInputStreamReader::reset(int64_t to){ + return _internal->jsbuffer->reset(to); +} +int64_t SimpleInputStreamReader::skip(int64_t ntoskip){ + return _internal->jsbuffer->skip(ntoskip); +} +size_t SimpleInputStreamReader::size(){ + return (size_t)_internal->jsbuffer->size(); +} +void SimpleInputStreamReader::setMinBufSize(int32_t minbufsize){ + _internal->jsbuffer->_setMinBufSize(minbufsize); +} + +class FilteredBufferedReader::Internal{ +public: + class JStreamsFilteredBuffer: public BufferedReaderImpl{ + Reader* input; + bool deleteInput; + protected: + int32_t fillBuffer(TCHAR* start, int32_t space){ + const TCHAR* buffer; + int32_t r = input->read(buffer, 1, space); + if ( r > 0 ) + _tcsncpy(start, buffer, r); + return r; + } + public: + JStreamsFilteredBuffer(Reader* input, bool deleteInput){ + this->input = input; + this->deleteInput = deleteInput; + } + ~JStreamsFilteredBuffer(){ + if ( deleteInput ) + _CLDELETE(input); + } + void _setMinBufSize(int32_t min){ + this->setMinBufSize(min); + } + }; + JStreamsFilteredBuffer* jsbuffer; + + Internal(Reader* reader, bool deleteReader){ + this->jsbuffer = new JStreamsFilteredBuffer(reader, deleteReader); + } + ~Internal(){ + delete jsbuffer; + } +}; +FilteredBufferedReader::FilteredBufferedReader(Reader* reader, bool deleteReader){ + _internal = new Internal(reader, deleteReader); +} +FilteredBufferedReader::~FilteredBufferedReader(){ + delete _internal; +} +int32_t FilteredBufferedReader::read(const TCHAR*& start, int32_t min, int32_t max){ + return _internal->jsbuffer->read(start,min,max); +} +int64_t FilteredBufferedReader::position(){ + return _internal->jsbuffer->position(); +} +int64_t FilteredBufferedReader::reset(int64_t p){ + return _internal->jsbuffer->reset(p); +} +int64_t FilteredBufferedReader::skip(int64_t ntoskip){ + return _internal->jsbuffer->skip(ntoskip); +} +size_t FilteredBufferedReader::size(){ + return (size_t)_internal->jsbuffer->size(); +} +void FilteredBufferedReader::setMinBufSize(int32_t minbufsize){ + return _internal->jsbuffer->_setMinBufSize(minbufsize); +} + + + + +class FilteredBufferedInputStream::Internal{ +public: + class JStreamsFilteredBuffer: public BufferedInputStreamImpl{ + InputStream* input; + bool deleteInput; + protected: + int32_t fillBuffer(signed char* start, int32_t space){ + const signed char* buffer; + int32_t r = input->read(buffer, 1, space); + if ( r > 0 ) + memcpy(start, buffer, r); + return r; + } + public: + JStreamsFilteredBuffer(InputStream* input, bool deleteInput){ + this->input = input; + this->deleteInput = deleteInput; + } + ~JStreamsFilteredBuffer(){ + if ( deleteInput ) + _CLDELETE(input); + } + void _setMinBufSize(int32_t min){ + this->setMinBufSize(min); + } + }; + JStreamsFilteredBuffer* jsbuffer; + + Internal(InputStream* input, bool deleteInput){ + this->jsbuffer = new JStreamsFilteredBuffer(input, deleteInput); + } + ~Internal(){ + delete jsbuffer; + } +}; +FilteredBufferedInputStream::FilteredBufferedInputStream(InputStream* input, bool deleteInput){ + _internal = new Internal(input, deleteInput); +} +FilteredBufferedInputStream::~FilteredBufferedInputStream(){ + delete _internal; +} +int32_t FilteredBufferedInputStream::read(const signed char*& start, int32_t min, int32_t max){ + return _internal->jsbuffer->read(start,min,max); +} +int64_t FilteredBufferedInputStream::position(){ + return _internal->jsbuffer->position(); +} +int64_t FilteredBufferedInputStream::reset(int64_t p){ + return _internal->jsbuffer->reset(p); +} +int64_t FilteredBufferedInputStream::skip(int64_t ntoskip){ + return _internal->jsbuffer->skip(ntoskip); +} +size_t FilteredBufferedInputStream::size(){ + return (size_t)_internal->jsbuffer->size(); +} +void FilteredBufferedInputStream::setMinBufSize(int32_t minbufsize){ + return _internal->jsbuffer->_setMinBufSize(minbufsize); +} + +CL_NS_END diff --git a/Pods/BRCLucene/src/core/CLucene/util/Reader.h b/Pods/BRCLucene/src/core/CLucene/util/Reader.h new file mode 100644 index 0000000..a523d33 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/util/Reader.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. +------------------------------------------------------------------------------*/ +#ifndef _lucene_util_Reader_ +#define _lucene_util_Reader_ + +#include "CLucene/util/CLStreams.h" +CL_NS_DEF(util) + +#error Reader has been refactored. It is recommended that you use strigi streams +#error for all input into CLucene. If, however, you dont want to use that dependency, +#error then you'll have to refactor your current code. The jstreams namespace +#error was completely removed + +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/util/StringIntern.cpp b/Pods/BRCLucene/src/core/CLucene/util/StringIntern.cpp new file mode 100644 index 0000000..69199e6 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/util/StringIntern.cpp @@ -0,0 +1,122 @@ + /*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "_StringIntern.h" +CL_NS_DEF(util) + +typedef CL_NS(util)::CLHashMap __wcsintrntype; +typedef CL_NS(util)::CLHashMap __strintrntype; +__wcsintrntype StringIntern_stringPool(true); +__strintrntype StringIntern_stringaPool(true); + +bool StringIntern_blanksinitd=false; +__wcsintrntype::iterator StringIntern_wblank; + +//STATIC_DEFINE_MUTEX(StringIntern_THIS_LOCK); +DEFINE_MUTEX(StringIntern_THIS_LOCK) + + + void CLStringIntern::_shutdown(){ + #ifdef _DEBUG + SCOPED_LOCK_MUTEX(StringIntern_THIS_LOCK) + if ( StringIntern_stringaPool.size() > 0 ){ + printf("WARNING: stringaPool still contains intern'd strings (refcounts):\n"); + __strintrntype::iterator itr = StringIntern_stringaPool.begin(); + while ( itr != StringIntern_stringaPool.end() ){ + printf(" %s (%d)\n",(itr->first), (itr->second)); + ++itr; + } + } + + if ( StringIntern_stringPool.size() > 0 ){ + printf("WARNING: stringPool still contains intern'd strings (refcounts):\n"); + __wcsintrntype::iterator itr = StringIntern_stringPool.begin(); + while ( itr != StringIntern_stringPool.end() ){ + _tprintf(_T(" %s (%d)\n"),(itr->first), (itr->second)); + ++itr; + } + } + #endif + } + + const TCHAR* CLStringIntern::intern(const TCHAR* str){ + if ( str == NULL ) + return NULL; + if ( str[0] == 0 ) + return LUCENE_BLANK_STRING; + + SCOPED_LOCK_MUTEX(StringIntern_THIS_LOCK) + + __wcsintrntype::iterator itr = StringIntern_stringPool.find((TCHAR*)str); + if ( itr==StringIntern_stringPool.end() ){ + TCHAR* ret = STRDUP_TtoT(str); + StringIntern_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; // warning: a possible memory leak, since str may be never freed! + + SCOPED_LOCK_MUTEX(StringIntern_THIS_LOCK) + + __wcsintrntype::iterator itr = StringIntern_stringPool.find((TCHAR*)str); + if ( itr != StringIntern_stringPool.end() ){ + if ( (itr->second) == 1 ){ + StringIntern_stringPool.removeitr(itr); + return true; + }else + (itr->second)--; + } + return false; + } + + const char* CLStringIntern::internA(const char* str, const int8_t count, const bool use_provided){ + if ( str == NULL ) + return NULL; + if ( str[0] == 0 ) + return _LUCENE_BLANK_ASTRING; + + SCOPED_LOCK_MUTEX(StringIntern_THIS_LOCK) + + __strintrntype::iterator itr = StringIntern_stringaPool.find((char*)str); + if ( itr==StringIntern_stringaPool.end() ){ + char* ret = (use_provided) ? const_cast(str) : STRDUP_AtoA(str); + StringIntern_stringaPool[ret] = count; + return ret; + }else{ + if (use_provided) _CLDELETE_LCaARRAY((char*)str); // delete the provided string if already exists + (itr->second) = (itr->second) + count; + return itr->first; + } + } + + bool CLStringIntern::uninternA(const char* str, const int8_t count){ + if ( str == NULL ) + return false; + if ( str[0] == 0 ) + return false; // warning: a possible memory leak, since str may be never freed! + + SCOPED_LOCK_MUTEX(StringIntern_THIS_LOCK) + + __strintrntype::iterator itr = StringIntern_stringaPool.find((char*)str); + if ( itr!=StringIntern_stringaPool.end() ){ + if ( (itr->second) == count ){ + StringIntern_stringaPool.removeitr(itr); + return true; + }else + (itr->second) = (itr->second) - count; + } + return false; + } +CL_NS_END diff --git a/Pods/BRCLucene/src/core/CLucene/util/ThreadLocal.cpp b/Pods/BRCLucene/src/core/CLucene/util/ThreadLocal.cpp new file mode 100644 index 0000000..ed1b0eb --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/util/ThreadLocal.cpp @@ -0,0 +1,266 @@ +/*------------------------------------------------------------------------------ +* 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 + +#include "CLucene/_ApiHeader.h" +#include "CLucene/LuceneThreads.h" +#include "_ThreadLocal.h" +#include "CLucene/config/_threads.h" +#include + +CL_NS_DEF ( util ) + +/* +* The concept of ThreadLocal is that a ThreadLocal class stores specific values for each unique thread. +* Several thread-end detection techniques are used to delete the thread data if the thread dies before the ThreadLocal class is shut. +* +* The class->thread data mapping is stored in the _ThreadLocal class. +* The thread->datas mapping is in ThreadData. +*/ + + +//predefine for the shared code... +#if defined(_CL_HAVE_WIN32_THREADS) + #define INIT_THREAD(ret) ret=true + extern "C"{ + + //todo: move this to StdHeader and make it usable by other functions... + bool __stdcall DllMain( unsigned short hinstDLL, // DLL module handle + _cl_dword_t fdwReason, // reason called + void*) // reserved + { + if ( fdwReason == 3 ) + _ThreadLocal::UnregisterCurrentThread(); + + return true; + } + } +#elif defined(_CL_HAVE_PTHREAD) + pthread_key_t pthread_threadlocal_key; + pthread_once_t pthread_threadlocal_key_once = PTHREAD_ONCE_INIT; + #define INIT_THREAD(ret) \ + pthread_once(&pthread_threadlocal_key_once, pthread_threadlocal_make_key); \ + if (pthread_getspecific(pthread_threadlocal_key) == NULL) { pthread_setspecific(pthread_threadlocal_key, (void*)1); } \ + ret = true; + + //the function that is called when the thread shutsdown + void pthread_threadlocal_destructor(void* /*_holder*/){ + _ThreadLocal::UnregisterCurrentThread(); + } + //the key initialiser function + void pthread_threadlocal_make_key() + { + (void) pthread_key_create(&pthread_threadlocal_key, &pthread_threadlocal_destructor); + } +#endif + +class _ThreadLocal; + +/** +* List that holds the list of ThreadLocals that this thread has data in. +*/ +class ThreadLocals : private std::set<_ThreadLocal*> +{ +public: + void UnregisterThread(); + void add(_ThreadLocal* thread); + void remove(_ThreadLocal* thread); +}; + +//map of thread<>ThreadLocals +typedef CL_NS ( util ) ::CLMultiMap<_LUCENE_THREADID_TYPE, ThreadLocals*, + CL_NS ( util ) ::CLuceneThreadIdCompare, + CL_NS ( util ) ::Deletor::ConstNullVal<_LUCENE_THREADID_TYPE>, + CL_NS ( util ) ::Deletor::Object > ThreadDataType; +static ThreadDataType* threadData = NULL; + +#ifndef _CL_DISABLE_MULTITHREADING + //the lock for locking ThreadData + //we don't use STATIC_DEFINE_MUTEX, because then the initialization order will be undefined. + static _LUCENE_THREADMUTEX *threadData_LOCK = NULL; +#endif + + +class _ThreadLocal::Internal +{ + public: + typedef CL_NS ( util ) ::CLSet<_LUCENE_THREADID_TYPE, void*, + CL_NS ( util ) ::CLuceneThreadIdCompare, + CL_NS ( util ) ::Deletor::ConstNullVal<_LUCENE_THREADID_TYPE>, + CL_NS ( util ) ::Deletor::ConstNullVal > LocalsType; + LocalsType locals; + DEFINE_MUTEX ( locals_LOCK ) + AbstractDeletor* _deletor; + + Internal ( AbstractDeletor* _deletor ) : + locals ( false,false ) + { + this->_deletor = _deletor; + } + ~Internal() + { + //remove all the thread local data for this object + LocalsType::iterator itr = locals.begin(); + while ( itr != locals.end() ) + { + void* val = itr->second; + locals.removeitr ( itr ); + _deletor->Delete ( val ); + itr = locals.begin(); + } + + delete _deletor; + } +}; + +_ThreadLocal::_ThreadLocal ( CL_NS ( util ) ::AbstractDeletor* _deletor ) : + _internal ( _CLNEW Internal ( _deletor ) ) +{ + +} + +_ThreadLocal::~_ThreadLocal() +{ + setNull(); + UnregisterCurrentThread(); + RemoveThreadLocal( this ); + delete _internal; +} + + +void* _ThreadLocal::get() +{ + SCOPED_LOCK_MUTEX(_internal->locals_LOCK) + return _internal->locals.get ( _LUCENE_CURRTHREADID ); +} + +void _ThreadLocal::setNull() +{ + //just delete this thread from the locals list + _LUCENE_THREADID_TYPE id = _LUCENE_CURRTHREADID; + SCOPED_LOCK_MUTEX(_internal->locals_LOCK) + Internal::LocalsType::iterator itr = _internal->locals.find ( id ); + if ( itr != _internal->locals.end() ) + { + void* val = itr->second; + _internal->locals.removeitr ( itr ); + _internal->_deletor->Delete ( val ); + } +} + +void _ThreadLocal::set ( void* t ) +{ + if ( t == NULL ){ + setNull(); + return; + } + //make sure we have a threadlocal context (for cleanup) + bool ret; + INIT_THREAD(ret); + assert(ret); + + _LUCENE_THREADID_TYPE id = _LUCENE_CURRTHREADID; + + //drop a reference to this ThreadLocal in ThreadData + { +#ifndef _CL_DISABLE_MULTITHREADING + //slightly un-usual way of initialising mutex, + //because otherwise our initialisation order would be undefined + if ( threadData_LOCK == NULL ) + threadData_LOCK = _CLNEW _LUCENE_THREADMUTEX; + SCOPED_LOCK_MUTEX ( *threadData_LOCK ); +#endif + + if ( threadData == NULL ) + threadData = _CLNEW ThreadDataType ( false, true ); + + ThreadLocals* threadLocals = threadData->get(id); + if ( threadLocals == NULL ){ + threadLocals = _CLNEW ThreadLocals; + threadData->insert( std::pair(id,threadLocals)); + } + threadLocals->add(this); + } + + { + SCOPED_LOCK_MUTEX(_internal->locals_LOCK) + Internal::LocalsType::iterator itr = _internal->locals.find ( id ); + if ( itr != _internal->locals.end() ) + { + void* val = itr->second; + _internal->locals.removeitr ( itr ); + _internal->_deletor->Delete ( val ); + } + + if ( t != NULL ) + _internal->locals.put ( id, t ); + } + +} + +void _ThreadLocal::UnregisterCurrentThread() +{ + if ( threadData == NULL ) + return; + _LUCENE_THREADID_TYPE id = _LUCENE_CURRTHREADID; + SCOPED_LOCK_MUTEX ( *threadData_LOCK ); + + ThreadDataType::iterator itr = threadData->find(id); + if ( itr != threadData->end() ){ + ThreadLocals* threadLocals = itr->second; + threadLocals->UnregisterThread(); + threadData->removeitr(itr); + } +} + +void _ThreadLocal::RemoveThreadLocal( _ThreadLocal * tl ) +{ + if ( threadData == NULL ) + return; + + SCOPED_LOCK_MUTEX ( *threadData_LOCK ); + + ThreadDataType::iterator itr = threadData->begin(); + for( ThreadDataType::iterator itr = threadData->begin(); itr != threadData->end(); itr++ ) + { + ThreadLocals* threadLocals = itr->second; + threadLocals->remove( tl ); + // Remove empty threadLocals + } +} + +void _ThreadLocal::_shutdown() +{ +#ifndef _CL_DISABLE_MULTITHREADING + _CLDELETE(threadData_LOCK); +#endif + _CLDELETE(threadData); +} + + + +void ThreadLocals::UnregisterThread() +{ + //this should only be accessed from its own thread... if this changes, then this access has to be locked. + for( ThreadLocals::iterator iTLocal = begin(); iTLocal != end(); iTLocal++ ) + (*iTLocal)->setNull(); + clear(); +} +void ThreadLocals::add(_ThreadLocal* thread) +{ + //this should only be accessed from its own thread... if this changes, then this access has to be locked. + if( end() == find( thread ) ) + insert( thread ); +} +void ThreadLocals::remove(_ThreadLocal* thread) +{ + ThreadLocals::iterator iTLocal = find( thread ); + if( iTLocal != end() ) + erase( iTLocal ); +} + +CL_NS_END diff --git a/Pods/BRCLucene/src/core/CLucene/util/VoidList.h b/Pods/BRCLucene/src/core/CLucene/util/VoidList.h new file mode 100644 index 0000000..5abdd45 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/util/VoidList.h @@ -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. +------------------------------------------------------------------------------*/ +#ifndef _lucene_util_VoidList_ +#define _lucene_util_VoidList_ + +#include "Equators.h" +#include "CLucene/LuceneThreads.h" + +CL_NS_DEF(util) + +/** +* A template to encapsulate various list type classes +* @internal +*/ +template +class CLUCENE_INLINE_EXPORT __CLList:public _base,LUCENE_BASE { +private: + bool dv; +protected: + typedef _base base; +public: + 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 + void toArray(_kt* into) const{ + int i=0; + for ( const_iterator itr=base::begin();itr!=base::end();itr++ ){ + into[i] = *itr; + i++; + } + } + + //sets array to the contents of this array, terminating with a NULL pointer + //array must be size+1 + void toArray_nullTerminated(_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(size_t i, _kt val) { + if ( dv && i < base::size() ) + _valueDeletor::doDelete((*this)[i]); + if ( i+1 > base::size() ) base::resize(i+1); + (*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(size_t i, bool dontDelete=false){ + if ( i < base::size() ){ + 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 +class CLUCENE_INLINE_EXPORT 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 +//(This class is roughly equivalent to Vector, except that it is unsynchronized.) +#define CLArrayList CLVector +#define CLHashSet CLHashList +#define CLList CLVector + +//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 +#ifdef LUCENE_DISABLE_HASHING + #define CLHashList CLSetList +#else + +template +class CLUCENE_INLINE_EXPORT CLHashList:public __CLList<_kt, CL_NS_HASHING(_CL_HASH_SET)<_kt,_Comparator> , _valueDeletor> +{ +public: + CLHashList ( const bool deleteValue=true ): + __CLList<_kt, CL_NS_HASHING(_CL_HASH_SET)<_kt,_Comparator> , _valueDeletor>(deleteValue) + { + } +}; +#endif + +template +class CLUCENE_INLINE_EXPORT 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 +class CLUCENE_INLINE_EXPORT 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/Pods/BRCLucene/src/core/CLucene/util/VoidMap.h b/Pods/BRCLucene/src/core/CLucene/util/VoidMap.h new file mode 100644 index 0000000..6917e41 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/util/VoidMap.h @@ -0,0 +1,333 @@ +/*------------------------------------------------------------------------------ +* 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_ + +#include "Equators.h" +#include "CLucene/LuceneThreads.h" + +#if defined(_CL_HAVE_TR1_UNORDERED_MAP) && defined(_CL_HAVE_TR1_UNORDERED_SET) +#if defined(_LIBCPP_VERSION) + #include + #include +#else + #include + #include +#endif +#elif defined(_CL_HAVE_HASH_MAP) && defined(_CL_HAVE_HASH_SET) + //hashing is all or nothing! + #include + #include +#elif defined(_CL_HAVE_EXT_HASH_MAP) && defined(_CL_HAVE_EXT_HASH_SET) + #include + #include +#elif !defined(LUCENE_DISABLE_HASHING) + #define LUCENE_DISABLE_HASHING +#endif + +CL_NS_DEF(util) + +/** +* A template to encapsulate various map type classes +* @internal +*/ +template +class CLUCENE_INLINE_EXPORT __CLMap:public _base,LUCENE_BASE { +protected: + bool dk; + bool dv; + typedef _base base; +public: + 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; + } + + ///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 static_cast<_vt>(0); + 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 NULL; + else + return itr->first; + }*/ + + void removeitr (iterator itr, const bool dontDeleteKey = false, const bool dontDeleteValue = false){ + if ( itr == base::end() ) return; + + //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(LUCENE_DISABLE_HASHING) + + //a CLSet with CLHashMap traits +template +class CLUCENE_INLINE_EXPORT 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); + } + + ///put the specified pair into the map. remove any old items first + ///\param k the key + ///\param v the value + virtual 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 ( _this::dk || _this::dv ) + _this::remove(k); + + (*this)[k] = v;; + } + +}; +#elif defined(_CL_HAVE_EXT_HASH_MAP) + //ext/hash_map syntax +//HashMap class is roughly equivalent to Hashtable, except that it is unsynchronized +template +class CLUCENE_INLINE_EXPORT CLHashMap:public __CLMap<_kt,_vt, + CL_NS_HASHING(_CL_HASH_MAP)<_kt,_vt, _Hasher,_Equals>, + _KeyDeletor,_ValueDeletor> +{ + typedef __CLMap<_kt,_vt, CL_NS_HASHING(_CL_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); + } + ///put the specified pair into the map. remove any old items first + ///\param k the key + ///\param v the value + virtual 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 ( _this::dk || _this::dv ) + _this::remove(k); + + (*this)[k] = v;; + } + +}; + +#elif defined(_CL_HAVE_HASH_MAP) + +//HashMap class is roughly equivalent to Hashtable, except that it is unsynchronized +template +class CLUCENE_INLINE_EXPORT CLHashMap:public __CLMap<_kt,_vt, + CL_NS_HASHING(_CL_HASH_MAP)<_kt,_vt, _Hasher>, + _KeyDeletor,_ValueDeletor> +{ + typedef __CLMap<_kt,_vt, CL_NS_HASHING(_CL_HASH_MAP)<_kt,_vt, _Hasher>, + _KeyDeletor,_ValueDeletor> _this; +public: + CLHashMap ( const bool deleteKey=false, const bool deleteValue=false ) + { + _this::setDeleteKey(deleteKey); + _this::setDeleteValue(deleteValue); + } + ///put the specified pair into the map. remove any old items first + ///\param k the key + ///\param v the value + virtual 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 ( _this::dk || _this::dv ) + _this::remove(k); + + (*this)[k] = v;; + } + +}; +#endif + +//A collection that contains no duplicates +//does not guarantee that the order will remain constant over time +template +class CLUCENE_INLINE_EXPORT 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); + } + ///put the specified pair into the map. remove any old items first + ///\param k the key + ///\param v the value + virtual 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 ( _this::dk || _this::dv ) + _this::remove(k); + + (*this)[k] = v;; + } + +}; + + +//A collection that can contains duplicates +template +class CLUCENE_INLINE_EXPORT 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); + } + + ///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 ( _this::dk || _this::dv ) + _this::remove(k); + + (*this)[k] = v;; + } +}; + + +//*** need to create a class that allows duplicates - use +//#define CLSet __CLMap +CL_NS_END + +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/util/_Arrays.h b/Pods/BRCLucene/src/core/CLucene/util/_Arrays.h new file mode 100644 index 0000000..cd446bf --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/util/_Arrays.h @@ -0,0 +1,155 @@ +/*------------------------------------------------------------------------------ +* 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_ + + +CL_NS_DEF(util) + template + class Arrays{ + Arrays(){} + public: + static void fill( _type* a, int32_t alen, _type value ) { + for ( int32_t i = 0; i < alen; i++ ) { + a[i] = value; + } + } + static void sort(_type* a, int32_t alen, int32_t fromIndex, int32_t toIndex){ + 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 = cl_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 = cl_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 + class CLListEquals: + public CL_NS_STD(binary_function) + { + 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; + int32_t size = (int32_t)val1->size(); + if ( size != (int32_t)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/Pods/BRCLucene/src/core/CLucene/util/_FastCharStream.h b/Pods/BRCLucene/src/core/CLucene/util/_FastCharStream.h new file mode 100644 index 0000000..ddb2b82 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/util/_FastCharStream.h @@ -0,0 +1,54 @@ +/*------------------------------------------------------------------------------ +* 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_ + + +CL_CLASS_DEF(util,BufferedReader) + +CL_NS_DEF(util) + + /** Ported implementation of the FastCharStream class. */ + class FastCharStream + { + static const int32_t maxRewindSize; + int32_t pos; + int32_t rewindPos; + int64_t resetPos; + int32_t col; + int32_t line; + // read character from stream throws an exception on error + void readChar(TCHAR &); + public: + BufferedReader* input; + + /// Initializes a new instance of the FastCharStream class LUCENE_EXPORT. + FastCharStream(BufferedReader* reader); + virtual ~FastCharStream(); + + void reset(); + + /// 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 True 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/Pods/BRCLucene/src/core/CLucene/util/_MD5Digester.h b/Pods/BRCLucene/src/core/CLucene/util/_MD5Digester.h new file mode 100644 index 0000000..aff913a --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/util/_MD5Digester.h @@ -0,0 +1,110 @@ +///////////////////////////////////////////////////////////////////////// +// MD5.cpp +// Implementation file for MD5 class +// +// This C++ Class implementation of the original RSA Data Security, Inc. +// MD5 Message-Digest Algorithm is copyright (c) 2002, Gary McNickle. +// All rights reserved. This software is a derivative of the "RSA Data +// Security, Inc. MD5 Message-Digest Algorithm" +// +// You may use this software free of any charge, but without any +// warranty or implied warranty, provided that you follow the terms +// of the original RSA copyright, listed below. +// +// Original RSA Data Security, Inc. Copyright notice +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All +// rights reserved. +// +// License to copy and use this software is granted provided that it +// is identified as the "RSA Data Security, Inc. MD5 Message-Digest +// Algorithm" in all material mentioning or referencing this software +// or this function. +// License is also granted to make and use derivative works provided +// that such works are identified as "derived from the RSA Data +// Security, Inc. MD5 Message-Digest Algorithm" in all material +// mentioning or referencing the derived work. +// RSA Data Security, Inc. makes no representations concerning either +// the merchantability of this software or the suitability of this +// software for any particular purpose. It is provided "as is" +// without express or implied warranty of any kind. +// These notices must be retained in any copies of any part of this +// documentation and/or software. +///////////////////////////////////////////////////////////////////////// + +/*------------------------------------------------------------------------------ +* 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_MD5Digester_H +#define _lucene_util_MD5Digester_H + + +CL_NS_DEF(util) + +typedef unsigned short int uint2; + +char* PrintMD5(uint8_t md5Digest[16]); +char* MD5String(char* szString); +char* MD5File(char* szFilename); + +class md5 +{ +// Methods +public: + md5() { Init(); } + void Init(); + void Update(uint8_t* chInput, uint32_t nInputLen); + void Finalize(); + uint8_t* Digest() { return m_Digest; } + +private: + + void Transform(uint8_t* block); + void Encode(uint8_t* dest, uint32_t* src, uint32_t nLength); + void Decode(uint32_t* dest, uint8_t* src, uint32_t nLength); + + + inline uint32_t rotate_left(uint32_t x, uint32_t n) + { return ((x << n) | (x >> (32-n))); } + + inline uint32_t F(uint32_t x, uint32_t y, uint32_t z) + { return ((x & y) | (~x & z)); } + + inline uint32_t G(uint32_t x, uint32_t y, uint32_t z) + { return ((x & z) | (y & ~z)); } + + inline uint32_t H(uint32_t x, uint32_t y, uint32_t z) + { return (x ^ y ^ z); } + + inline uint32_t I(uint32_t x, uint32_t y, uint32_t z) + { return (y ^ (x | ~z)); } + + inline void FF(uint32_t& a, uint32_t b, uint32_t c, uint32_t d, uint32_t x, uint32_t s, uint32_t ac) + { a += F(b, c, d) + x + ac; a = rotate_left(a, s); a += b; } + + inline void GG(uint32_t& a, uint32_t b, uint32_t c, uint32_t d, uint32_t x, uint32_t s, uint32_t ac) + { a += G(b, c, d) + x + ac; a = rotate_left(a, s); a += b; } + + inline void HH(uint32_t& a, uint32_t b, uint32_t c, uint32_t d, uint32_t x, uint32_t s, uint32_t ac) + { a += H(b, c, d) + x + ac; a = rotate_left(a, s); a += b; } + + inline void II(uint32_t& a, uint32_t b, uint32_t c, uint32_t d, uint32_t x, uint32_t s, uint32_t ac) + { a += I(b, c, d) + x + ac; a = rotate_left(a, s); a += b; } + +// Data +private: + uint32_t m_State[4]; + uint32_t m_Count[2]; + uint8_t m_Buffer[64]; + uint8_t m_Digest[16]; + uint8_t m_Finalized; + +}; + +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/util/_StringIntern.h b/Pods/BRCLucene/src/core/CLucene/util/_StringIntern.h new file mode 100644 index 0000000..6e4c66c --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/util/_StringIntern.h @@ -0,0 +1,56 @@ +/*------------------------------------------------------------------------------ +* 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 + +//#include "Equators.h" +//#include "_VoidMap.h" + +CL_NS_DEF(util) + /** 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{ + public: + + /** + * Internalise the specified string. + * \return Returns a pointer to the internalised string + */ + static const char* internA(const char* str, const int8_t count=1, const bool use_provided=false); + + /** + * 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, const int8_t count=1); + + /** + * Internalise the specified string. + * \return Returns a pointer to the internalised string + */ + static const TCHAR* intern(const TCHAR* str); + + /** + * 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); + + /** Cleanup static data */ + static CLUCENE_LOCAL void _shutdown(); + }; + +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/util/_ThreadLocal.h b/Pods/BRCLucene/src/core/CLucene/util/_ThreadLocal.h new file mode 100644 index 0000000..cd07757 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/util/_ThreadLocal.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. +------------------------------------------------------------------------------*/ +#ifndef _lucene_util_ThreadLocal_H +#define _lucene_util_ThreadLocal_H + +CL_NS_DEF ( util ) + + +/** +* A class which holds thread specific data. Calls to get() or set() or to the data kept in the _ThreadLocal +* is invalid after _ThreadLocal has been destroyed. +*/ +class _ThreadLocal +{ + private: + class Internal; + Internal* _internal; + public: + _ThreadLocal ( CL_NS ( util ) ::AbstractDeletor* _deletor ); + void* get(); + + /** + * 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. + */ + void setNull(); + void set ( void* t ); + virtual ~_ThreadLocal(); + + /** + * For early cleanup of thread data, call this function. It will clear out any + * thread specific data. Useful if you have a long running thread that doesn't + * need to access clucene anymore. + * The thread local code tries to call this automatically when a thread ends. + * Some implementations may be impossible (or not implemented) to detect thread + * endings... then you would have to run this function yourself. + */ + static void UnregisterCurrentThread(); + + static void RemoveThreadLocal( _ThreadLocal * tl ); + + + /** + * Call this function to shutdown CLucene + */ + static CLUCENE_LOCAL void _shutdown(); + + /** + * 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 ); +}; + + +/** +* A templated class of _ThreadLocal +* @see _ThreadLocal +*/ +template +class ThreadLocal: public _ThreadLocal +{ + public: + ThreadLocal() : + _ThreadLocal ( _CLNEW _deletor ) + { + + } + virtual ~ThreadLocal() + { + } + T get() + { + return ( T ) _ThreadLocal::get(); + } + void set ( T t ) + { + _ThreadLocal::set ( ( T ) t ); + } +}; +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/util/_VoidList.h b/Pods/BRCLucene/src/core/CLucene/util/_VoidList.h new file mode 100644 index 0000000..00db373 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/util/_VoidList.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. +------------------------------------------------------------------------------*/ +#ifndef _lucene_util_VoidsList_ +#define _lucene_util_VoidsList_ + + /*#if defined(_LUCENE_PRAGMA_WARNINGS) + #pragma message ("==================Deprecated!!!==================") + #else + //#warning "==================Deprecated!!!==================" + #endif + + #include "VoidMapSetDefinitions.h"*/ + + #include "VoidList.h" +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/util/_VoidMap.h b/Pods/BRCLucene/src/core/CLucene/util/_VoidMap.h new file mode 100644 index 0000000..e3860b9 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/util/_VoidMap.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. +------------------------------------------------------------------------------*/ +#ifndef _lucene_util_VoidsMap_ +#define _lucene_util_VoidsMap_ + + /*#if defined(_LUCENE_PRAGMA_WARNINGS) + #pragma message ("==================Deprecated!!!==================") + #else + //#warning "==================Deprecated!!!==================" + #endif + + #include "VoidMapSetDefinitions.h"*/ + + #include "VoidMap.h" +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/util/_bufferedstream.h b/Pods/BRCLucene/src/core/CLucene/util/_bufferedstream.h new file mode 100644 index 0000000..8cb8243 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/util/_bufferedstream.h @@ -0,0 +1,185 @@ +/*------------------------------------------------------------------------------ +* 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. +------------------------------------------------------------------------------*/ +#ifndef JSTREAMS_BUFFEREDSTREAM_H +#define JSTREAMS_BUFFEREDSTREAM_H + +#include "_streambase.h" +#include "_streambuffer.h" +#include + +CL_NS_DEF(util) + +/** + * @brief Abstract implementation class providing a buffered input stream. + * + * You can inherit this class to provide buffered access to a + * resource. You just need to implement fillBuffer, and + * BufferedStream will do the rest. + */ +template +class BufferedStreamImpl : public StreamBase { +private: + StreamBuffer buffer; + bool finishedWritingToBuffer; + + void writeToBuffer(int32_t minsize, int32_t maxsize); +protected: + /** + * @brief Fill the buffer with the provided data + * + * This function should be implemented by subclasses. + * It should write up to @p space characters from the + * stream to the buffer position pointed to by @p start. + * + * If the end of the stream is encountered, -1 should be + * returned. + * + * If an error occurs, the status should be set to Error, + * an error message should be set and -1 should be returned. + * + * You should @em not call this function yourself. + * + * @param start where the data should be written to + * @param space the maximum amount of data to write + * @return Number of characters written, or -1 on error + **/ + virtual int32_t fillBuffer(T* start, int32_t space) = 0; + /** + * @brief Resets the buffer, allowing it to be used again + * + * This function resets the buffer, allowing it to be re-used. + */ + void resetBuffer() { + StreamBase::m_size = -1; + StreamBase::m_position = 0; + StreamBase::m_error.assign(""); + StreamBase::m_status = Ok; + buffer.readPos = buffer.start; + buffer.avail = 0; + finishedWritingToBuffer = false; + } + /** + * @brief Sets the minimum size of the buffer + */ + void setMinBufSize(int32_t s) { + buffer.makeSpace(s); + } + BufferedStreamImpl(); +public: + int32_t read(const T*& start, int32_t min, int32_t max); + int64_t reset(int64_t pos); + virtual int64_t skip(int64_t ntoskip); +}; + + +/** Abstract class for a buffered stream of bytes */ +typedef BufferedStreamImpl BufferedInputStreamImpl; + +/** Abstract class for a buffered stream of Unicode characters */ +typedef BufferedStreamImpl BufferedReaderImpl; + + +template +BufferedStreamImpl::BufferedStreamImpl() { + finishedWritingToBuffer = false; +} + +template +void +BufferedStreamImpl::writeToBuffer(int32_t ntoread, int32_t maxread) { + int32_t missing = ntoread - buffer.avail; + int32_t nwritten = 0; + while (missing > 0 && nwritten >= 0) { + int32_t space; + space = buffer.makeSpace(missing); + if (maxread >= ntoread && space > maxread) { + space = maxread; + } + T* start = buffer.readPos + buffer.avail; + nwritten = fillBuffer(start, space); + assert(StreamBase::m_status != Eof); + if (nwritten > 0) { + buffer.avail += nwritten; + missing = ntoread - buffer.avail; + } + } + if (nwritten < 0) { + finishedWritingToBuffer = true; + } +} +template +int32_t +BufferedStreamImpl::read(const T*& start, int32_t min, int32_t max) { + if (StreamBase::m_status == Error) return -2; + if (StreamBase::m_status == Eof) return -1; + + // do we need to read data into the buffer? + if (min > max) max = 0; + if (!finishedWritingToBuffer && min > buffer.avail) { + // do we have enough space in the buffer? + writeToBuffer(min, max); + if (StreamBase::m_status == Error) return -2; + } + + int32_t nread = buffer.read(start, max); + + StreamBase::m_position += nread; + if (StreamBase::m_position > StreamBase::m_size + && StreamBase::m_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 + StreamBase::m_status = Error; + StreamBase::m_error = "Stream is longer than specified."; + nread = -2; + } else if (StreamBase::m_status == Ok && buffer.avail == 0 + && finishedWritingToBuffer) { + StreamBase::m_status = Eof; + if (StreamBase::m_size == -1) { + StreamBase::m_size = StreamBase::m_position; + } + // save one call to read() by already returning -1 if no data is there + if (nread == 0) nread = -1; + } + return nread; +} +template +int64_t +BufferedStreamImpl::reset(int64_t newpos) { + assert(newpos >= 0); + if (StreamBase::m_status == Error) return -2; + // check to see if we have this position + int64_t d = StreamBase::m_position - newpos; + if (buffer.readPos - d >= buffer.start && -d < buffer.avail) { + StreamBase::m_position -= d; + buffer.avail += (int32_t)d; + buffer.readPos -= d; + StreamBase::m_status = Ok; + } + return StreamBase::m_position; +} +template +int64_t +BufferedStreamImpl::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; +} + +CL_NS_END + +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/util/_streambase.h b/Pods/BRCLucene/src/core/CLucene/util/_streambase.h new file mode 100644 index 0000000..fba1a73 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/util/_streambase.h @@ -0,0 +1,210 @@ +/*------------------------------------------------------------------------------ +* 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. +------------------------------------------------------------------------------*/ +#ifndef JSTREAMS_STREAMBASE_H +#define JSTREAMS_STREAMBASE_H + +#include +#include + +#define INT32MAX 0x7FFFFFFFL + +CL_NS_DEF(util) + +/** Used to indicate the current status of a Stream */ +enum StreamStatus { + Ok /**< Stream is capable of being read from */, + Eof /**< The end of the Stream has been reached */, + Error /**< An error occurred. Use error() to find out more information */ +}; + +// java mapping: long=int64, int=int32, byte=uint8_t +/** + * The base of all Streams. Do not inherit directly from this class, + * but from (an instance of) StreamBase + * + * This class contains all the non-virtual StreamBase methods + * that don't depend on a specific Stream type + * + * Developer comment: This is needed because of win32 compilation. + * When we want to access a function outside a lib, we have to export them, + * but we can't export the template class because this would be somewhat + * stupid / does not work by design :) + * Because of this I've introduced this StreamBaseBase class + */ +class StreamBaseBase { //krazy:exclude=dpointer +protected: + /** The size of the stream (-1 if unknown) */ + int64_t m_size; + /** The position of the stream */ + int64_t m_position; + /** + * @brief String representation of the last error, or + * an empty string otherwise + */ + std::string m_error; + /** The status of the stream - see StreamStatus */ + StreamStatus m_status; +public: + /** + * @brief Constructor: initialises everything to sane defaults + **/ + StreamBaseBase() :m_size(-1), m_position(0), m_status(Ok) {} + /** + * @brief Destructor + **/ + virtual ~StreamBaseBase() {} + /** + * @brief Return a string representation of the last error. + * If no error has occurred, an empty string is returned. + **/ + const char* error() const { return m_error.c_str(); } + /** + * @brief Return the status of the stream. + **/ + StreamStatus status() const { return m_status; } + /** + * @brief Get the current position in the stream. + * The value obtained from this function can be used to reset the stream. + **/ + int64_t position() const { return m_position; } + /** + * @brief Return the size of the stream. + * + * The size of the stream is always known if the end of the stream + * has been reached. In all other cases, this may return -1 to + * indicate the size of the stream is unknown. + * + * @return the size of the stream, if it is known, or -1 if the size + * of the stream is unknown + **/ + int64_t size() const { return m_size; } +}; + +/** + * @brief Base class for stream read access to a data source. + * + * This class is based on the interface java.io.InputStream. It provides + * a uniform interface for accessing 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 filters or + * transformers. + */ +template +class StreamBase : public StreamBaseBase { +public: + StreamBase() { } + virtual ~StreamBase(){} + /** + * @brief Reads items from the stream and sets @p start to point to + * the first item that was read. + * + * Note: unless stated otherwise in the documentation for that method, + * this pointer will no longer be valid after calling another method of + * this class. The pointer will also no longer be valid after the class + * is destroyed. + * + * The functions inherited from StreamBaseBase do not invalidate the pointer. + * + * At least @p min items will be read from the stream, unless an error occurs + * or the end of the stream is reached. Under no circumstances will more than + * @p max items be read. + * + * If the end of the stream is reached before @p min items are read, the + * read is still considered successful and the number of items read will + * be returned. + * + * @param start pointer passed by reference that will be set to point to + * the retrieved array of items. If the end of the stream + * is encountered or an error occurs, the value of @p start + * is undefined + * @param min the minimal number of items to read from the stream. This + * value should be larger than 0. If it is 0 or smaller, the + * result is undefined + * @param max the maximal number of items to read from the stream. + * If this value is smaller than @p min, there is no limit on + * the number of items that can be read + * @return the number of items that were read. @c -1 is returned if + * end of the stream has already been reached. @c -2 is returned + * if an error has occurred + **/ + virtual int32_t read(const T*& start, int32_t min, int32_t max) = 0; + /** + * @brief Skip @p ntoskip items. + * + * If an error occurs, or the end of the stream is encountered, fewer + * than @p ntoskip items may be skipped. This can be checked by comparing + * the return value to @p ntoskip. + * + * Calling this function invalidates the data pointer that was obtained from + * StreamBase::read. + * + * @param ntoskip the number of items that should be skipped + * @return the number of items skipped + **/ + virtual int64_t skip(int64_t ntoskip); + /** + * @brief Repositions this stream to a given position. + * + * A call to StreamBase::reset is only guaranteed to be successful when + * the requested position lies within the segment of a stream + * corresponding to a valid pointer obtained from StreamBase::read. + * In this case, the pointer will not be invalidated. + * + * Calling this function invalidates the data pointer that was obtained from + * StreamBase::read unless the conditions outlined above apply. + * + * To read n items, leaving the stream at the same position as before, you + * can do the following: + * @code + * int64_t start = stream.position(); + * if ( stream.read(data, min, max) > 0 ) { + * stream.reset(start); + * // The data pointer is still valid here + * } + * @endcode + * + * @param pos the position in the stream you want to go to, relative to + * the start of the stream + * @return the new position in the stream + **/ + virtual int64_t reset(int64_t pos) = 0; +}; + + +template +int64_t +StreamBase::skip(int64_t ntoskip) { + const T* begin; + int32_t nread; + int64_t skipped = 0; + while (ntoskip > 0) { + // make sure we do not overflow uint32_t + int32_t maxstep = (int32_t)((ntoskip > 10000000) + ?10000000 :ntoskip); + // the default implementation is to simply read the data that we want + // to skip + nread = read(begin, 1, maxstep); + if (nread < -1 ) { + // an error occurred + return nread; + } else if (nread < 1) { + // the end of the stream was encountered + ntoskip = 0; + } else { + skipped += nread; + ntoskip -= nread; + } + } + return skipped; +} + +CL_NS_END + +#endif diff --git a/Pods/BRCLucene/src/core/CLucene/util/_streambuffer.h b/Pods/BRCLucene/src/core/CLucene/util/_streambuffer.h new file mode 100644 index 0000000..3967cc3 --- /dev/null +++ b/Pods/BRCLucene/src/core/CLucene/util/_streambuffer.h @@ -0,0 +1,167 @@ +/*------------------------------------------------------------------------------ +* 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. +------------------------------------------------------------------------------*/ +#ifndef JSTREAM_STREAMBUFFER_H +#define JSTREAM_STREAMBUFFER_H + +#include +#include + +CL_NS_DEF(util) + +/** + * @internal + * @brief Provides a buffer for the use of BufferedStream + */ +template +class StreamBuffer { +private: +public: + /** + * @internal + * @brief Pointer to the start of the buffer. + */ + T* start; + /** + * @internal + * @brief Size of the buffer. + * + * Size of the memory pointed to by @p start, + * in multiples of sizeof(T) + */ + int32_t size; + /** + * @internal + * @brief Pointer to the current position the buffer. + */ + T* readPos; + /** + * @internal + * @brief The amount of data available in the buffer. + * + * The size of the used memory in the buffer, starting + * from @p readPos. @p readPos + @p avail must be + * greater than @p start + @p size. + */ + int32_t avail; + + /** + * @internal + * @brief Constructor: initialises members to sane defaults. + */ + StreamBuffer(); + /** + * @internal + * @brief Destructor: frees the memory used by the buffer. + */ + ~StreamBuffer(); + /** + * @internal + * @brief Sets the size of the buffer, allocating the necessary memory + * + * @param size the size that the buffer should be, in multiples + * of sizeof(T) + */ + void setSize(int32_t size); + /** + * @internal + * @brief Read data from the buffer + * + * Sets @p start to point to the data, starting + * at the item of data following the last item + * of data read. + * + * @param start pointer passed by reference. It will + * be set to point to the data read from the buffer + * @param max the maximum amount of data to read from + * the buffer + * @return the size of the data pointed to by @p start + * (always less than or equal to @p max) + */ + int32_t read(const T*& start, int32_t max=0); + + /** + * @internal + * @brief Prepares the buffer for a new write. + * + * This function invalidates any pointers + * previously obtained from read. + * + * @return the number of available places + **/ + int32_t makeSpace(int32_t needed); +}; + +template +StreamBuffer::StreamBuffer() { + readPos = start = 0; + size = avail = 0; +} +template +StreamBuffer::~StreamBuffer() { + std::free(start); +} +template +void +StreamBuffer::setSize(int32_t size) { + // store pointer information + int32_t offset = readPos - start; + + // allocate memory in the buffer + start = (T*)std::realloc(start, size*sizeof(T)); + this->size = size; + + // restore pointer information + readPos = start + offset; +} +template +int32_t +StreamBuffer::makeSpace(int32_t needed) { + // determine how much space is available for writing + int32_t space = size - (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 + std::memmove(start, readPos, avail*sizeof(T)); + space += 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 +int32_t +StreamBuffer::read(const T*& start, int32_t max) { + start = readPos; + if (max <= 0 || max > avail) { + max = avail; + } + readPos += max; + avail -= max; + return max; +} + +CL_NS_END + +#endif diff --git a/Pods/BRCLucene/src/shared/CLucene/LuceneThreads.h b/Pods/BRCLucene/src/shared/CLucene/LuceneThreads.h new file mode 100644 index 0000000..403a2e0 --- /dev/null +++ b/Pods/BRCLucene/src/shared/CLucene/LuceneThreads.h @@ -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. +------------------------------------------------------------------------------*/ +#ifndef _LuceneThreads_h +#define _LuceneThreads_h + +#if defined(_CL_HAVE_PTHREAD) +#include +#endif + +CL_NS_DEF(util) +class CLuceneThreadIdCompare; + +#if defined(_CL_DISABLE_MULTITHREADING) + #define SCOPED_LOCK_MUTEX(theMutex) + #define DEFINE_MUTEX(x) + #define DEFINE_MUTABLE_MUTEX(x) + #define DEFINE_CONDITION(x) + #define STATIC_DEFINE_MUTEX(x) + #define CONDITION_WAIT(theMutex, theCondition) + #define CONDITION_NOTIFYALL(theCondition) + #define _LUCENE_CURRTHREADID 1 + #define _LUCENE_THREADID_TYPE int + #define _LUCENE_THREAD_FUNC(name, argName) int name(void* argName) + #define _LUCENE_THREAD_FUNC_RETURN(val) return (int)val; + #define _LUCENE_THREAD_CREATE(func, arg) (*func)(arg) + #define _LUCENE_THREAD_JOIN(value) //nothing to do... + #define _LUCENE_THREADMUTEX void* + + #define _LUCENE_ATOMIC_INC(theInteger) (++(*theInteger)) + #define _LUCENE_ATOMIC_DEC(theInteger) (--(*theInteger)) + #define _LUCENE_ATOMIC_INT int +#else + #if defined(_LUCENE_DONTIMPLEMENT_THREADMUTEX) + //do nothing + #else + class mutexGuard; + + #if defined(_CL_HAVE_PTHREAD) + #define _LUCENE_THREADID_TYPE pthread_t + #define _LUCENE_THREAD_FUNC(name, argName) void* name(void* argName) //< use this macro to correctly define the thread start routine + #define _LUCENE_THREAD_FUNC_RETURN(val) return (void*)val; + typedef void* (luceneThreadStartRoutine)(void* lpThreadParameter ); + + class CLUCENE_SHARED_EXPORT mutex_thread + { + public: + struct Internal; + Internal* _internal; + + mutex_thread(const mutex_thread& clone); + mutex_thread(); + ~mutex_thread(); + void lock(); + void unlock(); + static _LUCENE_THREADID_TYPE _GetCurrentThreadId(); + static _LUCENE_THREADID_TYPE CreateThread(luceneThreadStartRoutine* func, void* arg); + static void JoinThread(_LUCENE_THREADID_TYPE id); + void Wait(mutex_thread* shared_lock); + void NotifyAll(); + }; + class CLUCENE_SHARED_EXPORT shared_condition{ + private: + class Internal; + Internal* _internal; + public: + shared_condition(); + ~shared_condition(); + void Wait(mutex_thread* shared_lock); + void NotifyAll(); + }; + + #ifdef _CL_HAVE_GCC_ATOMIC_FUNCTIONS + #define _LUCENE_ATOMIC_INT uint32_t + #define _LUCENE_ATOMIC_INT_SET(x,v) x=v + #define _LUCENE_ATOMIC_INT_GET(x) x + #else + class CLUCENE_SHARED_EXPORT __LUCENE_ATOMIC_INT{ + public: + int value; + CL_NS(util)::mutex_thread THIS_LOCK; + }; + #define _LUCENE_ATOMIC_INT CL_NS(util)::__LUCENE_ATOMIC_INT + #define _LUCENE_ATOMIC_INT_SET(x,v) x.value=v + #define _LUCENE_ATOMIC_INT_GET(x) x.value + #endif + + class CLUCENE_SHARED_EXPORT atomic_threads{ + public: + static int32_t atomic_increment(_LUCENE_ATOMIC_INT* theInteger); + static int32_t atomic_decrement(_LUCENE_ATOMIC_INT* theInteger); + }; + + #define _LUCENE_ATOMIC_INC(theInteger) CL_NS(util)::atomic_threads::atomic_increment(theInteger) + #define _LUCENE_ATOMIC_DEC(theInteger) CL_NS(util)::atomic_threads::atomic_decrement(theInteger) + + #elif defined(_CL_HAVE_WIN32_THREADS) + #define _LUCENE_THREADID_TYPE uint64_t + #define _LUCENE_THREAD_FUNC(name, argName) void __stdcall name(void* argName) //< use this macro to correctly define the thread start routine + #define _LUCENE_THREAD_FUNC_RETURN(val) CL_NS(util)::mutex_thread::_exitThread(val) + + #define _LUCENE_ATOMIC_INC(theInteger) CL_NS(util)::mutex_thread::atomic_increment(theInteger) + #define _LUCENE_ATOMIC_DEC(theInteger) CL_NS(util)::mutex_thread::atomic_decrement(theInteger) +#ifdef _M_X64 + #define _LUCENE_ATOMIC_INT long long +#else + #define _LUCENE_ATOMIC_INT long +#endif + #define _LUCENE_ATOMIC_INT_SET(x,v) x=v + #define _LUCENE_ATOMIC_INT_GET(x) x + + typedef void (__stdcall luceneThreadStartRoutine)(void* lpThreadParameter ); + class CLUCENE_SHARED_EXPORT mutex_thread + { + private: + struct Internal; + Internal* _internal; + public: + mutex_thread(const mutex_thread& clone); + mutex_thread(); + ~mutex_thread(); + void lock(); + void unlock(); + static void _exitThread(int ret); + static _LUCENE_THREADID_TYPE _GetCurrentThreadId(); + static _LUCENE_THREADID_TYPE CreateThread(luceneThreadStartRoutine* func, void* arg); + static void JoinThread(_LUCENE_THREADID_TYPE id); + + static int32_t atomic_increment(_LUCENE_ATOMIC_INT* theInteger); + static int32_t atomic_decrement(_LUCENE_ATOMIC_INT* theInteger); + }; + class CLUCENE_SHARED_EXPORT shared_condition{ + private: + class Internal; + Internal* _internal; + public: + shared_condition(); + ~shared_condition(); + void Wait(mutex_thread* shared_lock); + void NotifyAll(); + }; + #else + #error A valid thread library was not found + #endif //mutex types + + #define _LUCENE_THREAD_CREATE(func, arg) CL_NS(util)::mutex_thread::CreateThread(func,arg) + #define _LUCENE_THREAD_JOIN(id) CL_NS(util)::mutex_thread::JoinThread(id) + #define _LUCENE_CURRTHREADID CL_NS(util)::mutex_thread::_GetCurrentThreadId() + #define _LUCENE_THREADMUTEX CL_NS(util)::mutex_thread + #define _LUCENE_THREADCOND CL_NS(util)::shared_condition + #endif //don't implement + + /** @internal */ + class CLUCENE_SHARED_EXPORT mutexGuard + { + private: + _LUCENE_THREADMUTEX* mrMutex; + mutexGuard(const mutexGuard& clone); + public: + mutexGuard( _LUCENE_THREADMUTEX& rMutex ); + ~mutexGuard(); + }; + + #define SCOPED_LOCK_MUTEX(theMutex) CL_NS(util)::mutexGuard theMutexGuard(theMutex); + #define DEFINE_MUTEX(theMutex) _LUCENE_THREADMUTEX theMutex; + #define DEFINE_CONDITION(theCondition) _LUCENE_THREADCOND theCondition; + #define DEFINE_MUTABLE_MUTEX(theMutex) mutable _LUCENE_THREADMUTEX theMutex; + #define STATIC_DEFINE_MUTEX(theMutex) static _LUCENE_THREADMUTEX theMutex; + + #define CONDITION_WAIT(theMutex, theCondition) theCondition.Wait(&theMutex); + #define CONDITION_NOTIFYALL(theCondition) theCondition.NotifyAll(); + +#endif //_CL_DISABLE_MULTITHREADING +CL_NS_END + +#endif diff --git a/Pods/BRCLucene/src/shared/CLucene/SharedHeader.cpp b/Pods/BRCLucene/src/shared/CLucene/SharedHeader.cpp new file mode 100644 index 0000000..61036f9 --- /dev/null +++ b/Pods/BRCLucene/src/shared/CLucene/SharedHeader.cpp @@ -0,0 +1,33 @@ +/*------------------------------------------------------------------------------ +* 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/_SharedHeader.h" + + +#ifdef _CL_HAVE_SYS_STAT_H + #include +#endif + + +const TCHAR* _LUCENE_BLANK_STRING=_T(""); +const char* _LUCENE_BLANK_ASTRING=""; + + +#if defined(_ASCII) + #if defined(_LUCENE_PRAGMA_WARNINGS) + #pragma message ("==================Using ascii mode!!!==================") + #else + #warning "==================Using ascii mode!!!==================" + #endif +#endif + +wchar_t* lucene_wcsdup( const wchar_t* str ){ + size_t len = wcslen(str); + wchar_t* ret = (wchar_t*)malloc( (len + 1) * sizeof(wchar_t) ); + wcscpy(ret, str); + return ret; +} diff --git a/Pods/BRCLucene/src/shared/CLucene/SharedHeader.h b/Pods/BRCLucene/src/shared/CLucene/SharedHeader.h new file mode 100644 index 0000000..d43a149 --- /dev/null +++ b/Pods/BRCLucene/src/shared/CLucene/SharedHeader.h @@ -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. +------------------------------------------------------------------------------*/ +#ifndef lucene_sharedheader_h +#define lucene_sharedheader_h + +/** +* This header contains definitions and macros for helping create cross-platform code. +* It is primarily for use by the clucene-core library, but is split off so that +* other applications such as the demo, test, benchmarks, etc can benefit from the +* cross platform code. Cross platform code is not distributed with the clucene-core +* and is not available through the shared library. +*/ + +#include "CLucene/clucene-config.h" + +//some early definitions +#if defined(_MSC_VER) || defined(__BORLANDC__) + #define _LUCENE_PRAGMA_WARNINGS //tell lucene to display warnings using pragmas instead of #warning +#endif + + +//////////////////////////////////////////////////////// +//Are we in unicode mode? +//////////////////////////////////////////////////////// +#if defined(_MBCS) || defined(_ASCII) + #undef _ASCII + #undef _UCS2 + #define _ASCII +#elif defined(_UNICODE) + #ifndef _UCS2 + #define _UCS2 + #endif +#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 +//////////////////////////////////////////////////////// + + + +//////////////////////////////////////////////////////// +//platform includes that MUST be included for the public headers to work... +//////////////////////////////////////////////////////// +#include //need this for wchar_t, size_t, NULL +#ifdef _CL_HAVE_STDINT_H + #include //need this for int32_t, etc +#endif +#include //required for float_t +#include //need to include this really early... + +#ifdef _CL_HAVE_TCHAR_H + #include //required for _T and TCHAR +#endif + +//////////////////////////////////////////////////////// +//namespace helper +//////////////////////////////////////////////////////// +#if defined(_LUCENE_DONTIMPLEMENT_NS_MACROS) + //do nothing +#elif !defined(DISABLE_NAMESPACE) && defined(_CL_HAVE_NAMESPACES) + #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 + + #define CL_STRUCT_DEF(sub,clazz) namespace lucene { namespace sub{ struct clazz; } } + #define CL_CLASS_DEF(sub,clazz) namespace lucene { namespace sub{ class clazz; } } + #define CL_CLASS_DEF2(sub,sub2, clazz) namespace lucene { namespace sub{ namespace sub2{ class clazz; } } } + + #define CL_TEMPATE_DEF(sub, clazz, typedefs) namespace lucene { namespace sub{ template class clazz; }} + #define CL_TYPE_DEF(sub, clazz, def) namespace lucene { namespace sub{ typedef def clazz; }} +#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) + #define CL_CLASS_DEF(sub,clazz) class clazz; + #define CL_CLASS_DEF2(sub,sub2, clazz) class clazz; +#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 +// +//////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////// +// EXPORTS definition +//////////////////////////////////////////////////////// +#if defined(_WIN32) || defined(_WIN64) + #define CLUCENE_EXPORT_DECL __declspec(dllexport) + #define CLUCENE_IMPORT_DECL __declspec(dllimport) + #define CLUCENE_LOCAL_DECL +#elif defined(_CL_HAVE_GCCVISIBILITYPATCH) + #define CLUCENE_EXPORT_DECL __attribute__ ((visibility("default"))) + #define CLUCENE_LOCAL_DECL __attribute__ ((visibility("hidden"))) + #define CLUCENE_IMPORT_DECL +#else + #define CLUCENE_EXPORT_DECL + #define CLUCENE_IMPORT_DECL + #define CLUCENE_LOCAL_DECL +#endif + +//define for the libraries +#if defined(clucene_shared_EXPORTS) + #define CLUCENE_SHARED_EXPORT CLUCENE_EXPORT_DECL + #define CLUCENE_LOCAL CLUCENE_LOCAL_DECL +#elif defined(MAKE_CLUCENE_SHARED_LIB) + #define CLUCENE_SHARED_EXPORT //don't export if we are building a static library +#else + #define CLUCENE_SHARED_EXPORT CLUCENE_IMPORT_DECL +#endif +#if defined(clucene_core_EXPORTS) + #define CLUCENE_EXPORT CLUCENE_EXPORT_DECL + #define CLUCENE_LOCAL CLUCENE_LOCAL_DECL +#elif defined(MAKE_CLUCENE_CORE_LIB) + #define CLUCENE_EXPORT +#else + #define CLUCENE_EXPORT CLUCENE_IMPORT_DECL +#endif +#if defined(clucene_contribs_lib_EXPORTS) + #define CLUCENE_CONTRIBS_EXPORT CLUCENE_EXPORT_DECL + #define CLUCENE_LOCAL CLUCENE_LOCAL_DECL +#elif defined(MAKE_CLUCENE_CONTRIBS_LIB) + #define CLUCENE_CONTRIBS_EXPORT +#else + #define CLUCENE_CONTRIBS_EXPORT CLUCENE_IMPORT_DECL +#endif +#ifndef CLUCENE_LOCAL + #define CLUCENE_LOCAL +#endif + +//inline definitions +#if defined(__MINGW32__) || defined(_MSC_VER) + #define CLUCENE_SHARED_INLINE_EXPORT + #define CLUCENE_INLINE_EXPORT + #define CLUCENE_CONTRIBS_INLINE_EXPORT +#else + #define CLUCENE_SHARED_INLINE_EXPORT CLUCENE_SHARED_EXPORT + #define CLUCENE_INLINE_EXPORT CLUCENE_EXPORT + #define CLUCENE_CONTRIBS_INLINE_EXPORT CLUCENE_CONTRIBS_EXPORT +#endif +//////////////////////////////////////////////////////// + + +//todo: put this logic in cmake +#if defined(_MSC_VER) + #if _MSC_FULL_VER >= 140050320 + #define _CL_DEPRECATE_TEXT(_Text) __declspec(deprecated(_Text)) + #elif _MSC_VER >= 1300 + #define _CL_DEPRECATE_TEXT(_Text) __declspec(deprecated) + #else + #define _CL_DEPRECATE_TEXT(_Text) + #endif +#elif (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1)) + #define _CL_DEPRECATE_TEXT(_Text) __attribute__((__deprecated__)) +#else + #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.") +// +//////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////// +// boost stuff +//////////////////////////////////////////////////////// +#if defined(_MSC_VER) +# pragma warning (disable : 4251) // disable exported dll function +# endif + +//////////////////////////////////////////////////////// +//Class interfaces +//////////////////////////////////////////////////////// +#include "CLucene/debug/lucenebase.h" +//////////////////////////////////////////////////////// + +//memory handling macros/functions +#include "CLucene/debug/mem.h" + +#ifdef DMALLOC + #include + #include + #include +#endif + +#endif //lucene_sharedheader_h diff --git a/Pods/BRCLucene/src/shared/CLucene/_SharedHeader.h b/Pods/BRCLucene/src/shared/CLucene/_SharedHeader.h new file mode 100644 index 0000000..26d2633 --- /dev/null +++ b/Pods/BRCLucene/src/shared/CLucene/_SharedHeader.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. +------------------------------------------------------------------------------*/ +#ifndef lucene_internal_sharedheader_h +#define lucene_internal_sharedheader_h + +#define LUCENE_INT32_MAX_SHOULDBE 0x7FFFFFFFL + +#include "CLucene/_clucene-config.h" +#include "CLucene/SharedHeader.h" + +//don't show deprecated warnings while building internally... +#undef _CL_DEPRECATE_TEXT +#define _CL_DEPRECATE_TEXT(_Text) + +#define LUCENE_INT64_MAX_SHOULDBE _ILONGLONG(0x7FFFFFFFFFFFFFFF) +#define LUCENE_INT64_MIN_SHOULDBE (-LUCENE_INT64_MAX_SHOULDBE - _ILONGLONG(1) ) + +//required globally (internally only) +#include +#include + +//we always need this stuff.... +#include "CLucene/debug/_condition.h" +#include "CLucene/LuceneThreads.h" +#include "CLucene/config/repl_tchar.h" +#include "CLucene/config/repl_wchar.h" +#include "CLucene/config/repl_wctype.h" //replacements for functions + +#define cl_min(a,b) ((a)>(b) ? (b) : (a)) +#define cl_min3(a,b,c) ((a)<(b) ? ((a)<(c) ? (a) : (c)) : ((b)<(c) ? (b) : (c))) +#define cl_max(a,b) ((a)>(b) ? (a): (b)) +#define cl_max3(a,b,c) ((a)>(b) ? ((a)>(c) ? (a) : (c)) : ((b)>(c) ? (b) : (c))) + +#ifdef _CL_HAVE_SAFE_CRT + #define cl_sprintf sprintf_s + #define cl_stprintf _stprintf_s + #define cl_strcpy(Dst,Src,DstLen) strcpy_s(Dst,DstLen,Src) +#else + #define cl_sprintf _snprintf + #define cl_stprintf _sntprintf + #define cl_strcpy(Dst,Src,DstLen) strcpy(Dst,Src) +#endif + + +///a blank string... +CLUCENE_SHARED_EXPORT extern const TCHAR* _LUCENE_BLANK_STRING; +#define LUCENE_BLANK_STRING _LUCENE_BLANK_STRING +CLUCENE_SHARED_EXPORT extern const char* _LUCENE_BLANK_ASTRING; +#define LUCENE_BLANK_ASTRING _LUCENE_BLANK_ASTRING + +#if defined(_WIN32) || defined(_WIN64) + #define PATH_DELIMITERA "\\" +#else + #define PATH_DELIMITERA "/" +#endif + +#define _LUCENE_SLEEP(ms) CL_NS(util)::Misc::sleep(ms) + +//if a wide character is being converted to a ascii character and it +//cannot fit, this character is used instead. +#define LUCENE_OOR_CHAR(c) ((char)(((unsigned short)c)&0xFF)) + + +#endif //lucene_internal_sharedheader_h diff --git a/Pods/BRCLucene/src/shared/CLucene/config/_gunichartables.h b/Pods/BRCLucene/src/shared/CLucene/config/_gunichartables.h new file mode 100644 index 0000000..182a870 --- /dev/null +++ b/Pods/BRCLucene/src/shared/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/Pods/BRCLucene/src/shared/CLucene/config/_threads.h b/Pods/BRCLucene/src/shared/CLucene/config/_threads.h new file mode 100644 index 0000000..b86dd24 --- /dev/null +++ b/Pods/BRCLucene/src/shared/CLucene/config/_threads.h @@ -0,0 +1,125 @@ +/*------------------------------------------------------------------------------ +* 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 _config_threads_h +#define _config_threads_h + +#ifndef _CL_DISABLE_MULTITHREADING + #if defined(_LUCENE_DONTIMPLEMENT_THREADMUTEX) + //do nothing + #elif defined(_CL_HAVE_WIN32_THREADS) + //we have not explicity included windows.h and windows.h has + //not been included (check _WINBASE_), then we must define + //our own definitions to the thread locking functions: + #ifndef _WINBASE_ + extern "C"{ + struct CRITICAL_SECTION + { + struct critical_section_debug * DebugInfo; + long LockCount; + long RecursionCount; + void * OwningThread; + void * LockSemaphore; + _cl_dword_t SpinCount; + }; + + __declspec(dllimport) void __stdcall InitializeCriticalSection(CRITICAL_SECTION *); + __declspec(dllimport) void __stdcall EnterCriticalSection(CRITICAL_SECTION *); + __declspec(dllimport) void __stdcall LeaveCriticalSection(CRITICAL_SECTION *); + __declspec(dllimport) void __stdcall DeleteCriticalSection(CRITICAL_SECTION *); + __declspec(dllimport) void __stdcall ExitThread(_cl_dword_t); + + __declspec(dllimport) unsigned long __stdcall GetCurrentThreadId(); + +#ifdef _M_X64 + __declspec(dllimport) long long __stdcall _InterlockedIncrement64(__inout long long volatile*); + __declspec(dllimport) long long __stdcall _InterlockedDecrement64(__inout long long volatile*); +#else + __declspec(dllimport) long __stdcall InterlockedIncrement(long volatile*); + __declspec(dllimport) long __stdcall InterlockedDecrement(long volatile*); +#endif + typedef struct _SECURITY_ATTRIBUTES + { + _cl_dword_t nLength; + void* lpSecurityDescriptor; + bool bInheritHandle; + } SECURITY_ATTRIBUTES; + __declspec(dllimport) _cl_dword_t __stdcall WaitForSingleObject( void* hHandle, _cl_dword_t dwMilliseconds ); + __declspec(dllimport) void* __stdcall CreateEventA( SECURITY_ATTRIBUTES* lpEventAttributes, + bool bManualReset, bool bInitialState, char* lpName ); + __declspec(dllimport) bool __stdcall SetEvent(void* hEvent); + __declspec(dllimport) bool __stdcall CloseHandle(void* hObject); + void* _beginthread( void( __stdcall *start_address )( void * ), unsigned stack_size, void *arglist ); + } + #endif //_WINBASE_ + #elif defined(_CL_HAVE_PTHREAD) + #include + #endif +#endif + +CL_NS_DEF(util) + +#ifndef _CL_DISABLE_MULTITHREADING + +#if defined(_LUCENE_DONTIMPLEMENT_THREADMUTEX) + +#elif defined(_CL_HAVE_WIN32_THREADS) + 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()( uint64_t t1, uint64_t t2 ) const{ + return t1 < t2; + } + }; + + +#elif defined(_CL_HAVE_PTHREAD) + + 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{ + //pthread_equal should be used, but it returns only non-zero if equal, so we can't use it for order compare + return t1 < t2; + } + }; + +#endif //thread impl choice + + +#else //!_CL_DISABLE_MULTITHREADING + 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; + } + }; +#endif //!_CL_DISABLE_MULTITHREADING + +CL_NS_END + + +#endif //_config_threads_h diff --git a/Pods/BRCLucene/src/shared/CLucene/config/gunichartables.cpp b/Pods/BRCLucene/src/shared/CLucene/config/gunichartables.cpp new file mode 100644 index 0000000..a0cfb78 --- /dev/null +++ b/Pods/BRCLucene/src/shared/CLucene/config/gunichartables.cpp @@ -0,0 +1,377 @@ +/* + * 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. + */ + #include "CLucene/_SharedHeader.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 ("===== Note: using internal character function for compatibility =====") +#else + #warning "===== Note: using internal character function for compatibility =====" +#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; + wchar_t ret=0; + lucene_utf8towc(ret,p); +#ifdef _UCS2 + return ret; +#else + return LUCENE_OOR_CHAR(ret); +#endif + }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); +#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); + + #ifdef _UCS2 + return ret; + #else + return 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/Pods/BRCLucene/src/shared/CLucene/config/repl_lltot.cpp b/Pods/BRCLucene/src/shared/CLucene/config/repl_lltot.cpp new file mode 100644 index 0000000..37f2331 --- /dev/null +++ b/Pods/BRCLucene/src/shared/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/_SharedHeader.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 = (int)(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/Pods/BRCLucene/src/shared/CLucene/config/repl_tchar.h b/Pods/BRCLucene/src/shared/CLucene/config/repl_tchar.h new file mode 100644 index 0000000..159dcc1 --- /dev/null +++ b/Pods/BRCLucene/src/shared/CLucene/config/repl_tchar.h @@ -0,0 +1,181 @@ +/*------------------------------------------------------------------------------ +* 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 _REPL_TCHAR_H +#define _REPL_TCHAR_H + +#ifndef _CL_HAVE_TCHAR_H + #if defined(_UCS2) + + //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 _tcsncat wcsncat + #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 + + //string compare + #ifdef _CL_HAVE_FUNCTION_WCSICMP + #define _tcsicmp wcsicmp //* case insensitive compare two string + #else + #define _tcsicmp wcscasecmp //* case insensitive compare two string + #endif + #if defined(_CL_HAVE_FUNCTION_WCSDUP) + #define _tcsdup wcsdup + #else + #define _tcsdup lucene_wcsdup + #endif + + //conversion functions + #define _tcstod wcstod //convert a string to a double + #define _tcstoi64 wcstoll //* convers a string to an 64bit bit integer + #define _itot _i64tot + #define _i64tot lltow //* converts a 64 bit integer to a string (with base) + #else //if defined(_ASCII) + + //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 _tcsncat strncat + #define _tcschr strchr + #define _tcsstr strstr + #define _tcslen strlen + #define _tcscmp strcmp + #define _tcsncmp strncmp + #define _tcsicmp strcasecmp + #define _tcscspn strcspn + #define _tcsdup strdup //string duplicate + //converstion methods + #define _tcstod strtod + #define _tcstoi64 strtoll + #define _itot _i64tot + #define _i64tot lltoa + + #endif + +#else //HAVE_TCHAR_H + #include + + //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 + +#ifndef _ttoi + #define _ttoi(x) (int)_tcstoi64(x,NULL,10) +#endif + +#ifndef _itot + #define _itot(i, buf, radix) lucene_i64tot(i, buf, radix) +#endif + +namespace std +{ +#ifndef tstring + #ifdef _UNICODE + typedef wstring tstring; + #else + typedef string tstring; + #endif +#endif +}; + +#define STRCPY_AtoA(target,src,len) strncpy(target,src,len) +#define STRDUP_AtoA(x) strdup(x) + +#if defined(_UCS2) + #define stringDuplicate(x) _tcsdup(x) + + #if defined(_CL_HAVE_FUNCTION_WCSDUP) + #define STRDUP_WtoW wcsdup + #else + #define STRDUP_WtoW lucene_wcsdup + #endif + #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) + #define STRDUP_AtoT STRDUP_AtoW + + #define STRDUP_WtoA(x) CL_NS(util)::Misc::_wideToChar(x) + #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 _tcscpy 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 stringDuplicate(x) strdup(x) + #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 _tcscpy STRCPY_AtoA +#endif + + +#endif //_REPL_TCHAR_H diff --git a/Pods/BRCLucene/src/shared/CLucene/config/repl_tcscasecmp.cpp b/Pods/BRCLucene/src/shared/CLucene/config/repl_tcscasecmp.cpp new file mode 100644 index 0000000..b2e27e8 --- /dev/null +++ b/Pods/BRCLucene/src/shared/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/_SharedHeader.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/Pods/BRCLucene/src/shared/CLucene/config/repl_tcslwr.cpp b/Pods/BRCLucene/src/shared/CLucene/config/repl_tcslwr.cpp new file mode 100644 index 0000000..90a9d2e --- /dev/null +++ b/Pods/BRCLucene/src/shared/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/_SharedHeader.h" + +TCHAR* lucene_tcslwr( TCHAR* str ) +{ + TCHAR* ret = str; + for ( ; *str; str++) *str = _totlower(*str); + return ret; +} diff --git a/Pods/BRCLucene/src/shared/CLucene/config/repl_tcstod.cpp b/Pods/BRCLucene/src/shared/CLucene/config/repl_tcstod.cpp new file mode 100644 index 0000000..0c52a59 --- /dev/null +++ b/Pods/BRCLucene/src/shared/CLucene/config/repl_tcstod.cpp @@ -0,0 +1,24 @@ +/*------------------------------------------------------------------------------ +* 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/_SharedHeader.h" +#include "CLucene/util/Misc.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/Pods/BRCLucene/src/shared/CLucene/config/repl_tcstoll.cpp b/Pods/BRCLucene/src/shared/CLucene/config/repl_tcstoll.cpp new file mode 100644 index 0000000..5798fbd --- /dev/null +++ b/Pods/BRCLucene/src/shared/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/_SharedHeader.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=str;p-- ){ + int i=LUCENE_TCSTOI64_RADIX(p[0],radix); + if ( pos == 0 ) + ret=i; + else + ret += (int64_t)pow((float_t)radix,(float_t)pos) * i; //todo: might be quicker with a different pow overload + + pos++; + } + return sign*ret; +} diff --git a/Pods/BRCLucene/src/shared/CLucene/config/repl_tprintf.cpp b/Pods/BRCLucene/src/shared/CLucene/config/repl_tprintf.cpp new file mode 100644 index 0000000..bbf0c93 --- /dev/null +++ b/Pods/BRCLucene/src/shared/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/_SharedHeader.h" +#include "CLucene/util/StringBuffer.h" + +#include //MB_LEN_MAX + +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 + const 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((float_t)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 0 ){ + ob[v]='\0'; + fputs(ob,stdout); + } + pointer++; + } + + +#else + fputs(tmp->getBuffer(),stdout); +#endif + _CLDELETE(tmp); + } +} + +#ifdef _UCS2 +//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 = cl_min(count,(size_t)(buffer.length()+1)); + wcsncpy(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 = cl_min((size_t)count,buffer.length()+1); + wcsncpy(strbuf,buffer.getBuffer(),ret); + return ret; +} +#endif diff --git a/Pods/BRCLucene/src/shared/CLucene/config/repl_wchar.h b/Pods/BRCLucene/src/shared/CLucene/config/repl_wchar.h new file mode 100644 index 0000000..c3c0e61 --- /dev/null +++ b/Pods/BRCLucene/src/shared/CLucene/config/repl_wchar.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. +------------------------------------------------------------------------------*/ +#ifndef _lucene_repl_wchar_h +#define _lucene_repl_wchar_h + +#include +#include "repl_tchar.h" +#ifdef _CL_HAVE_STRING_H + #include +#endif +#ifdef _CL_HAVE_WCHAR_H + #include +#endif + + +CLUCENE_SHARED_EXPORT int cl_tcscasefoldcmp(const TCHAR * dst, const TCHAR * src); +CLUCENE_SHARED_EXPORT TCHAR* cl_tcscasefold( TCHAR * str, int len=-1 ); + +//we provide utf8 conversion functions +CLUCENE_SHARED_EXPORT size_t lucene_utf8towc (wchar_t& ret, const char *s); +CLUCENE_SHARED_EXPORT size_t lucene_utf8towcs(wchar_t *, const char *, size_t maxslen); +CLUCENE_SHARED_EXPORT size_t lucene_wctoutf8 (char * ret, const wchar_t str); +CLUCENE_SHARED_EXPORT size_t lucene_wcstoutf8 (char *, const wchar_t *, size_t maxslen); +#ifdef _ASCII +#define lucene_wcstoutf8string(str,strlen) str +#else +CLUCENE_SHARED_EXPORT std::string lucene_wcstoutf8string(const wchar_t* str, size_t strlen); +#endif +CLUCENE_SHARED_EXPORT size_t lucene_utf8charlen(const unsigned char p); //< the number of characters that this first utf8 character will expect + +//string function replacements +#if defined(LUCENE_USE_INTERNAL_CHAR_FUNCTIONS) || (defined(_UCS2) && !defined(_CL_HAVE_FUNCTION_WCSCASECMP)) || (defined(_ASCII) && !defined(_CL_HAVE_FUNCTION_STRCASECMP)) + CLUCENE_SHARED_EXPORT 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_FUNCTION_WCSLWR)) || (defined(_ASCII) && !defined(_CL_HAVE_FUNCTION_STRLWR)) + CLUCENE_SHARED_EXPORT TCHAR* lucene_tcslwr( TCHAR* str ); + #undef _tcslwr + #define _tcslwr lucene_tcslwr +#endif + +//conversion functions +#if (defined(_ASCII) && !defined(_CL_HAVE_FUNCTION_LLTOA)) || (defined(_UCS2) && !defined(_CL_HAVE_FUNCTION_LLTOW)) + CLUCENE_SHARED_EXPORT TCHAR* lucene_i64tot( int64_t value, TCHAR* str, int radix); + #undef _i64tot + #define _i64tot lucene_i64tot +#endif +#if !defined(_CL_HAVE_FUNCTION_WCSDUP) + CLUCENE_SHARED_EXPORT wchar_t* lucene_wcsdup( const wchar_t* str); +#endif +#if (defined(_UCS2) && !defined(_CL_HAVE_FUNCTION_WCSTOLL)) || (defined(_ASCII) && !defined(_CL_HAVE_FUNCTION_STRTOLL)) + CLUCENE_SHARED_EXPORT int64_t lucene_tcstoi64(const TCHAR* str, TCHAR**end, int radix); + #undef _tcstoi64 + #define _tcstoi64 lucene_tcstoi64 +#endif +#if defined(_UCS2) && !defined(_CL_HAVE_FUNCTION_WCSTOD) + CLUCENE_SHARED_EXPORT double lucene_tcstod(const TCHAR *value, TCHAR **end); + #undef _tcstod + #define _tcstod lucene_tcstod +#endif + +//printf functions +#if (defined(_UCS2) && (!defined(_CL_HAVE_FUNCTION__SNWPRINTF)) || defined(_CL_HAVE_SNWPRINTF_BUG) ) + #undef _sntprintf + #define _sntprintf lucene_snwprintf + CLUCENE_SHARED_EXPORT int lucene_snwprintf(wchar_t* strbuf, size_t count, const wchar_t * format, ...); +#endif +#if defined(_UCS2) && !defined(_CL_HAVE_FUNCTION_WPRINTF) + #undef _tprintf + #define _tprintf lucene_wprintf + CLUCENE_SHARED_EXPORT void lucene_wprintf(const wchar_t * format, ...); +#endif +#if defined(_UCS2) && (!defined(_CL_HAVE_FUNCTION__VSNWPRINTF) || defined(_CL_HAVE_SNWPRINTF_BUG) ) + #undef _vsntprintf + #define _vsntprintf lucene_vsnwprintf + CLUCENE_SHARED_EXPORT int lucene_vsnwprintf(wchar_t * strbuf, size_t count, const wchar_t * format, va_list& ap); +#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/Pods/BRCLucene/src/shared/CLucene/config/repl_wctype.h b/Pods/BRCLucene/src/shared/CLucene/config/repl_wctype.h new file mode 100644 index 0000000..f706428 --- /dev/null +++ b/Pods/BRCLucene/src/shared/CLucene/config/repl_wctype.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_repl_wctype_h +#define _lucene_repl_wctype_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; +CLUCENE_SHARED_EXPORT bool cl_isletter(clunichar c); +CLUCENE_SHARED_EXPORT bool cl_isalnum(clunichar c); +CLUCENE_SHARED_EXPORT bool cl_isdigit(clunichar c); +CLUCENE_SHARED_EXPORT bool cl_isspace (clunichar c); +CLUCENE_SHARED_EXPORT TCHAR cl_tolower (TCHAR c); +CLUCENE_SHARED_EXPORT TCHAR cl_toupper (TCHAR c); + +#endif diff --git a/Pods/BRCLucene/src/shared/CLucene/config/threads.cpp b/Pods/BRCLucene/src/shared/CLucene/config/threads.cpp new file mode 100644 index 0000000..0b5f30a --- /dev/null +++ b/Pods/BRCLucene/src/shared/CLucene/config/threads.cpp @@ -0,0 +1,292 @@ +/*------------------------------------------------------------------------------ +* 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/_SharedHeader.h" +#include "CLucene/LuceneThreads.h" +#include "_threads.h" +#include + +CL_NS_DEF(util) + +#ifndef _CL_DISABLE_MULTITHREADING + +#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) + struct mutex_thread::Internal{ + CRITICAL_SECTION mtx; + }; + + mutex_thread::mutex_thread(const mutex_thread& clone): + _internal(new Internal) + { + InitializeCriticalSection(&_internal->mtx); + } + mutex_thread::mutex_thread(): + _internal(new Internal) + { + InitializeCriticalSection(&_internal->mtx); + } + + mutex_thread::~mutex_thread() + { + DeleteCriticalSection(&_internal->mtx); + delete _internal; + } + + void mutex_thread::lock() + { + EnterCriticalSection(&_internal->mtx); + } + + void mutex_thread::unlock() + { + LeaveCriticalSection(&_internal->mtx); + } + + _LUCENE_THREADID_TYPE mutex_thread::_GetCurrentThreadId(){ + return GetCurrentThreadId(); + } + void mutex_thread::_exitThread(int val){ + ExitThread(val); + } + + int32_t mutex_thread::atomic_increment(_LUCENE_ATOMIC_INT *theInteger){ +#ifdef _M_X64 + return _InterlockedIncrement64(theInteger); +#else + return InterlockedIncrement(theInteger); +#endif + } + int32_t mutex_thread::atomic_decrement(_LUCENE_ATOMIC_INT *theInteger){ +#ifdef _M_X64 + return _InterlockedDecrement64(theInteger); +#else + return InterlockedDecrement(theInteger); +#endif + } + + + + class shared_condition::Internal{ + public: + void* _event; + Internal(){ + _event = CreateEventA( NULL, false, false, NULL ); + } + ~Internal(){ + CloseHandle( _event ); + } + }; + shared_condition::shared_condition(){ + _internal = new Internal; + } + shared_condition::~shared_condition(){ + delete _internal; + } + void shared_condition::Wait(mutex_thread* shared_lock){ + shared_lock->unlock(); + _cl_dword_t dwRes = WaitForSingleObject( _internal->_event, 0xFFFFFFFF ); + assert ( 0x0 == dwRes ); + shared_lock->lock(); + } + void shared_condition::NotifyAll(){ + bool bRes = SetEvent(_internal->_event); + assert( bRes ); + } + + _LUCENE_THREADID_TYPE mutex_thread::CreateThread(luceneThreadStartRoutine* func, void* arg){ + return (_LUCENE_THREADID_TYPE) ::_beginthread (func, 0, arg); + } + void mutex_thread::JoinThread(_LUCENE_THREADID_TYPE id){ + WaitForSingleObject((void*)id, 0xFFFFFFFF); + } + + +#elif defined(_CL_HAVE_PTHREAD) + #ifndef _REENTRANT + #error ACK! You need to compile with _REENTRANT defined since this uses threads + #endif + + #ifdef _CL_HAVE_PTHREAD_MUTEX_RECURSIVE + bool mutex_pthread_attr_initd=false; + pthread_mutexattr_t mutex_thread_attr; + #endif + + #ifdef _CL__CND_DEBUG + #define _CLPTHREAD_CHECK(c,m) CND_PRECONDITION(c==0,m) + #else + #define _CLPTHREAD_CHECK(c,m) c; + #endif + + struct mutex_thread::Internal{ + pthread_mutex_t mtx; + #ifndef _CL_HAVE_PTHREAD_MUTEX_RECURSIVE + pthread_t lockOwner; + unsigned int lockCount; + #endif + }; + + mutex_thread::mutex_thread(const mutex_thread& /*clone*/): + _internal(new Internal) + { + #ifdef _CL_HAVE_PTHREAD_MUTEX_RECURSIVE + _CLPTHREAD_CHECK(pthread_mutex_init(&_internal->mtx, &mutex_thread_attr), "mutex_thread(clone) constructor failed") + #else + #if defined(__hpux) && defined(_DECTHREADS_) + _CLPTHREAD_CHECK(pthread_mutex_init(&_internal->mtx, pthread_mutexattr_default), "mutex_thread(clone) constructor failed") + #else + _CLPTHREAD_CHECK(pthread_mutex_init(&_internal->mtx, 0), "mutex_thread(clone) constructor failed") + #endif + _internal->lockCount=0; + _internal->lockOwner=0; + #endif + } + mutex_thread::mutex_thread(): + _internal(new Internal) + { + #ifdef _CL_HAVE_PTHREAD_MUTEX_RECURSIVE + if ( mutex_pthread_attr_initd == false ){ + pthread_mutexattr_init(&mutex_thread_attr); + pthread_mutexattr_settype(&mutex_thread_attr, PTHREAD_MUTEX_RECURSIVE); + mutex_pthread_attr_initd = true; + } + _CLPTHREAD_CHECK(pthread_mutex_init(&_internal->mtx, &mutex_thread_attr), "mutex_thread(clone) constructor failed") + #else + #if defined(__hpux) && defined(_DECTHREADS_) + _CLPTHREAD_CHECK(pthread_mutex_init(&_internal->mtx, pthread_mutexattr_default), "mutex_thread(clone) constructor failed") + #else + _CLPTHREAD_CHECK(pthread_mutex_init(&_internal->mtx, 0), "mutex_thread(clone) constructor failed") + #endif + _internal->lockCount=0; + _internal->lockOwner=0; + #endif + } + + mutex_thread::~mutex_thread() + { + _CLPTHREAD_CHECK(pthread_mutex_destroy(&_internal->mtx), "~mutex_thread destructor failed") + delete _internal; + } + + _LUCENE_THREADID_TYPE mutex_thread::_GetCurrentThreadId(){ + return pthread_self(); + } + + int32_t atomic_threads::atomic_increment(_LUCENE_ATOMIC_INT *theInteger){ + #ifdef _CL_HAVE_GCC_ATOMIC_FUNCTIONS + return __sync_add_and_fetch(theInteger, 1); + #else + SCOPED_LOCK_MUTEX(theInteger->THIS_LOCK) + return ++theInteger->value; + #endif + } + int32_t atomic_threads::atomic_decrement(_LUCENE_ATOMIC_INT *theInteger){ + #ifdef _CL_HAVE_GCC_ATOMIC_FUNCTIONS + return __sync_sub_and_fetch(theInteger, 1); + #else + SCOPED_LOCK_MUTEX(theInteger->THIS_LOCK) + return --theInteger->value; + #endif + } + + + _LUCENE_THREADID_TYPE mutex_thread::CreateThread(luceneThreadStartRoutine* func, void* arg){ + _LUCENE_THREADID_TYPE ret; + int nRes = pthread_create(&ret, NULL, func, arg); + assert( nRes == 0 ); + return ret; + } + void mutex_thread::JoinThread(_LUCENE_THREADID_TYPE id){ + pthread_join(id, NULL); + } + + void mutex_thread::lock() + { + #ifndef _CL_HAVE_PTHREAD_MUTEX_RECURSIVE + pthread_t currentThread = pthread_self(); + if( pthread_equal( _internal->lockOwner, currentThread ) ) { + ++_internal->lockCount; + } else { + _CLPTHREAD_CHECK(pthread_mutex_lock(&_internal->mtx), "mutex_thread::lock") + _internal->lockOwner = currentThread; + _internal->lockCount = 1; + } + #else + _CLPTHREAD_CHECK(pthread_mutex_lock(&_internal->mtx), "mutex_thread::lock") + #endif + } + + void mutex_thread::unlock() + { + #ifndef _CL_HAVE_PTHREAD_MUTEX_RECURSIVE + --_internal->lockCount; + if( _internal->lockCount == 0 ) + { + _internal->lockOwner = 0; + _CLPTHREAD_CHECK(pthread_mutex_unlock(&_internal->mtx), "mutex_thread::unlock") + } + #else + _CLPTHREAD_CHECK(pthread_mutex_unlock(&_internal->mtx), "mutex_thread::unlock") + #endif + } + + + struct shared_condition::Internal{ + pthread_cond_t condition; + Internal(){ + pthread_cond_init (&condition, NULL); + } + ~Internal(){ + pthread_cond_destroy(&condition); + } + }; + shared_condition::shared_condition(){ + _internal = new Internal; + } + shared_condition::~shared_condition(){ + delete _internal; + } + void shared_condition::Wait(mutex_thread* shared_lock){ + int res = 0; + res = pthread_cond_wait(&_internal->condition, &shared_lock->_internal->mtx); + assert(res == 0); + } + void shared_condition::NotifyAll(){ + int res = 0; + res = pthread_cond_broadcast(&_internal->condition); + assert(res == 0); + } + + +#endif //thread impl choice + + +mutexGuard::mutexGuard(const mutexGuard& /*clone*/){ + //no autoclone + mrMutex = NULL; +} +mutexGuard::mutexGuard( _LUCENE_THREADMUTEX& rMutex ) : + mrMutex(&rMutex) +{ + mrMutex->lock(); +} +mutexGuard::~mutexGuard() +{ + mrMutex->unlock(); +} + +#endif //!_CL_DISABLE_MULTITHREADING + +CL_NS_END diff --git a/Pods/BRCLucene/src/shared/CLucene/config/utf8.cpp b/Pods/BRCLucene/src/shared/CLucene/config/utf8.cpp new file mode 100644 index 0000000..0a9c1fe --- /dev/null +++ b/Pods/BRCLucene/src/shared/CLucene/config/utf8.cpp @@ -0,0 +1,249 @@ +/* + * 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/_SharedHeader.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] = (char)(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 number of p consumed for the character, or 0 on error + **/ +size_t lucene_utf8towc(wchar_t& pwc, const char *p) +{ + 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 = const_cast(str); + wchar_t *rp = result; + + while (rp < result + result_length && *sp!=0){ + size_t r = lucene_utf8towc(*rp,sp); + if ( r == 0 ) + return 0; + sp += r; + rp++; + } + + size_t ret = sp-str; + if ( ret < result_length ) + *rp = '\0'; + + 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 unsigned char c) +{ + int mask = 0; + int len=0; + + UTF8_COMPUTE (c, mask, len); + return len; +} +#ifndef _ASCII +//convert unicode string to a utf8 string +std::string lucene_wcstoutf8string(const wchar_t* str, size_t strlen){ + size_t i = 0; + std::string result; + char p[6]; + + while (i < strlen && str[i] != 0){ + result.append(p, lucene_wctoutf8(p,str[i++])); + } + + return result; +} +#endif diff --git a/Pods/BRCLucene/src/shared/CLucene/debug/_condition.h b/Pods/BRCLucene/src/shared/CLucene/debug/_condition.h new file mode 100644 index 0000000..a88856f --- /dev/null +++ b/Pods/BRCLucene/src/shared/CLucene/debug/_condition.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 __CONDITION_H +#define __CONDITION_H + +//todo: this is a hack +#undef CND_PRECONDITION + +/* +To enable condition debugging uncomment _CND_DEBUG in CLConfig.h +*/ + +#ifdef _CL__CND_DEBUG /* Don't include the debug code */ + /* _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 CLUCENE_SHARED_EXPORT __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 + +#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 + +//cnd-debug exit command +#ifndef debugFatalExit + #define debugFatalExit(ret) exit(ret) +#endif + + +#endif diff --git a/Pods/BRCLucene/src/shared/CLucene/debug/condition.cpp b/Pods/BRCLucene/src/shared/CLucene/debug/condition.cpp new file mode 100644 index 0000000..1343525 --- /dev/null +++ b/Pods/BRCLucene/src/shared/CLucene/debug/condition.cpp @@ -0,0 +1,78 @@ +/*------------------------------------------------------------------------------ +* 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. +------------------------------------------------------------------------------*/ +#define _CL__CND_DEBUG +#include "CLucene/_SharedHeader.h" +#include "_condition.h" +#include "CLucene/util/Misc.h" + +#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]; + const 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); +} diff --git a/Pods/BRCLucene/src/shared/CLucene/util/Misc.cpp b/Pods/BRCLucene/src/shared/CLucene/util/Misc.cpp new file mode 100644 index 0000000..debce71 --- /dev/null +++ b/Pods/BRCLucene/src/shared/CLucene/util/Misc.cpp @@ -0,0 +1,651 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "Misc.h" +#include +#include +#include + +#if defined(_CL_HAVE_SYS_TIME_H) +# include +#elif defined(_CL_HAVE_TIME_H) +# include +#endif +#ifdef _CL_HAVE_SYS_TIMEB_H + #include +#endif + +#if defined(_CL_HAVE_SYS_STAT_H) + #include +#endif +#ifdef _CL_HAVE_STRINGS_H + #include +#endif +#ifdef _CL_HAVE_UNISTD_H + #include +#endif + +#include +#include +#include "CLucene/util/_dirent.h" //if we have dirent, then the native one will be used + +//for zlib... +#include "zlib.h" +#if defined(MSDOS) || defined(OS2) || defined(WIN32) || defined(__CYGWIN__) +# include +# include +# define SET_BINARY_MODE(file) setmode(fileno(file), O_BINARY) +#else +# define SET_BINARY_MODE(file) +#endif +#define CL_Z_DEFAULT_CHUNK 1024 + + +#ifdef _CL_HAVE_FUNCTION_SLEEP + //don't ignore windows.h... breaks mingw32 in some cases. Define Sleep instead + extern "C" __declspec(dllimport) void __stdcall Sleep(_cl_dword_t); +#endif + +CL_NS_DEF(util) + +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 hashCode = 0; + for (size_t i = 0; i 50 ) // if it still doesn't show up, then we do some sleeping for the last 50ms + _LUCENE_SLEEP( 1 ); + } + + if( maxAttempts > 0 ) + maxAttempts--; + } + + return 0; +} + + +//static +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; +} + +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; +} + +//static +bool Misc::priv_isDotDir( const TCHAR* name ) +{ +if( name[0] == '\0' ) { + return (false); +} +if( name[0] == '.' && name[1] == '\0' ) { + return (true); +} +if( name[1] == '\0' ) { + return (false); +} +if( name[0] == '.' && name[1] == '.' && name[2] == '\0' ) { + return (true); +} + +return (false); +} + +//internal static function shared for clucene +string Misc::segmentname( const char* segment, const char* 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 != NULL, "ext is NULL"); + + + if ( x!=-1 ){ + char buf[30]; + _snprintf(buf,10,"%d",x); + return string(segment) + ext + buf; + }else{ + return string(segment) + ext; + } +} +void Misc::segmentname(char* buffer,int32_t bufferLen, const char* Segment, const char* ext, const int32_t x){ +//Func - Static Method +// Creates a filename in buffer by concatenating Segment with ext and x +//Pre - buffer != NULL +// Segment != NULL and holds the name of the segment +// ext != NULL and holds the extension +// 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(buffer != NULL, "buffer is NULL"); + CND_PRECONDITION(Segment != NULL, "Segment is NULL"); + CND_PRECONDITION(ext != NULL, "ext is NULL"); + + if ( x== -1 ) + _snprintf(buffer,bufferLen,"%s%s", Segment,ext ); + else + _snprintf(buffer,bufferLen,"%s%s%d", Segment,ext,x ); +} + + +//static +int32_t Misc::stringDifference(const TCHAR* s1, const int32_t len1, const TCHAR* s2, const 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; +} + +TCHAR* Misc::stringTrim(TCHAR* text) { + size_t j, i; + size_t len = _tcslen(text); + + for ( i=0;i i; --j ){ // find the last non-space character and store it as j + if ( ! _istspace(text[j]) ) { + break; + } + } + + if (i==0 && j==len-1) // prevent unnecessary copy + return text; + + if (i==0) + text[j+1]=0; + else { + j++; + _tcsncpy(text, text+i, j-i); + text[j-i] = 0; + } + + return text; +} + +TCHAR* Misc::wordTrim(TCHAR* text) { + size_t j, i; + size_t len = _tcslen(text); + + for ( i=0;i buf && value ); + + memcpy( retval, ptr, end - ptr ); + retval[end-ptr] = 0; + + return end-ptr; +} + +int64_t Misc::base36ToLong( const char* value ) { + char* ptr = (char*)value; + int64_t lval = 0; + + while ( *ptr != '\0' ) { + lval = isdigit(*ptr) ? ( 36 * lval ) + ( *ptr - '0' ) : ( 36 * lval ) + ( *ptr - 'a' + 10 ); + ptr++; + } + + return lval; +} + +bool Misc::listFiles(const char* directory, std::vector& files, bool fullPath){ + //clear old files + DIR* dir = opendir(directory); + if ( dir == NULL ) return false; + struct dirent* fl = readdir(dir); + struct cl_stat_t buf; + string path; + while ( fl != NULL ){ + path = string(directory) + "/" + fl->d_name; + int32_t ret = fileStat(path.c_str(),&buf); + if ( ret==0 && !(buf.st_mode & S_IFDIR) ) { + if ( (strcmp(fl->d_name, ".")) && (strcmp(fl->d_name, "..")) ) { + if ( fullPath ){ + files.push_back(path); + }else{ + files.push_back(fl->d_name); + } + } + } + fl = readdir(dir); + } + closedir(dir); + return true; +} + + +std::string Misc::toString(const bool value){ + return value ? "true" : "false"; +} +std::string Misc::toString(_LUCENE_THREADID_TYPE value){ + static int32_t nextindex = 0; + static std::map<_LUCENE_THREADID_TYPE, int32_t> ids; + if (ids.find(value) == ids.end()) { + ids[value] = nextindex++; + } + return toString(ids[value]); +} +std::string Misc::toString(const int32_t value){ + char buf[20]; + TCHAR tbuf[20]; + _i64tot(value, tbuf, 10); + STRCPY_TtoA(buf,tbuf,20); + return buf; +} +std::string Misc::toString(const int64_t value){ + char buf[20]; + TCHAR tbuf[20]; + _i64tot(value, tbuf, 10); + STRCPY_TtoA(buf,tbuf,20); + return buf; +} +std::string Misc::toString(const float_t value){ + char buf[20]; + _snprintf(buf,20,"%0.2f",(double)value); + return buf; +} + +void Misc::zerr(int ret, string& err) +{ + switch (ret) { + case Z_ERRNO: + err = "error occurred while reading or writing from the zlib streams"; + break; + case Z_STREAM_ERROR: + err = "invalid compression level"; + break; + case Z_DATA_ERROR: + err = "invalid or incomplete deflate data"; + break; + case Z_MEM_ERROR: + err = "out of memory"; + break; + case Z_VERSION_ERROR: + err ="zlib version mismatch"; + } +} + + + +/* Compress from file source to file dest until EOF on source. + def() returns Z_OK on success, Z_MEM_ERROR if memory could not be + allocated for processing, Z_STREAM_ERROR if an invalid compression + level is supplied, Z_VERSION_ERROR if the version of zlib.h and the + version of the library linked do not match, or Z_ERRNO if there is + an error reading or writing the files. */ +bool Misc::deflate(const uint8_t* in, size_t inlen, std::ostream& dest, string& err, int CHUNK, int level) +{ + int ret, flush; + unsigned have; + z_stream strm; + if ( level == -1 ) level = Z_BEST_COMPRESSION; + if ( CHUNK == -1 ) CHUNK = CL_Z_DEFAULT_CHUNK; + uint8_t* out = (uint8_t*)malloc(CHUNK); + + /* allocate deflate state */ + strm.zalloc = Z_NULL; + strm.zfree = Z_NULL; + strm.opaque = Z_NULL; + ret = deflateInit(&strm, level); + if (ret != Z_OK){ + free(out); + zerr(ret, err); + return false; + } + + /* compress until end of file */ + do { + strm.avail_in = inlen; + strm.next_in = (uint8_t*)in; + flush = Z_FINISH; + + /* run deflate() on input until output buffer not full, finish + compression if all of source has been read in */ + do { + strm.avail_out = CHUNK; + strm.next_out = out; + ret = ::deflate(&strm, flush); /* no bad return value */ + assert(ret != Z_STREAM_ERROR); /* state not clobbered */ + have = CHUNK - strm.avail_out; + dest.write( (char*)out,have); + if ( dest.fail() ) { + (void)deflateEnd(&strm); + free(out); + zerr(Z_ERRNO, err); + return false; + } + } while (strm.avail_out == 0); + assert(strm.avail_in == 0); /* all input will be used */ + + /* done when last data in file processed */ + } while (flush != Z_FINISH); + assert(ret == Z_STREAM_END); /* stream will be complete */ + + /* clean up and return */ + (void)deflateEnd(&strm); + free(out); + return true; +} + +/* Decompress from file source to file dest until stream ends or EOF. + inf() returns Z_OK on success, Z_MEM_ERROR if memory could not be + allocated for processing, Z_DATA_ERROR if the deflate data is + invalid or incomplete, Z_VERSION_ERROR if the version of zlib.h and + the version of the library linked do not match, or Z_ERRNO if there + is an error reading or writing the files. */ +bool Misc::inflate(const uint8_t* in, size_t inlen, std::ostream& dest, string& err, int CHUNK) +{ + int ret; + unsigned have; + z_stream strm; + if ( CHUNK == -1 ) CHUNK = CL_Z_DEFAULT_CHUNK; + uint8_t* out = (uint8_t*)malloc(CHUNK); + + /* allocate inflate state */ + strm.zalloc = Z_NULL; + strm.zfree = Z_NULL; + strm.opaque = Z_NULL; + strm.avail_in = 0; + strm.next_in = Z_NULL; + ret = inflateInit(&strm); + if (ret != Z_OK){ + free(out); + zerr(ret, err); + return false; + } + + /* decompress until deflate stream ends or end of file */ + do { + strm.avail_in = inlen; + if (strm.avail_in == 0) + break; + strm.next_in = (uint8_t*)in; + + /* run inflate() on input until output buffer not full */ + do { + strm.avail_out = CHUNK; + strm.next_out = out; + ret = ::inflate(&strm, Z_NO_FLUSH); + assert(ret != Z_STREAM_ERROR); /* state not clobbered */ + switch (ret) { + case Z_NEED_DICT: + ret = Z_DATA_ERROR; /* and fall through */ + case Z_DATA_ERROR: + case Z_MEM_ERROR: + (void)inflateEnd(&strm); + free(out); + zerr(ret, err); + return false; + } + have = CHUNK - strm.avail_out; + dest.write( (char*)out,have); + if ( dest.fail() ) { + (void)inflateEnd(&strm); + free(out); + zerr(Z_ERRNO, err); + return false; + } + } while (strm.avail_out == 0); + + /* done when inflate() says it's done */ + } while (ret != Z_STREAM_END); + + /* clean up and return */ + (void)inflateEnd(&strm); + free(out); + if ( ret == Z_STREAM_END ) + return true; + zerr(Z_DATA_ERROR, err); + return false; +} + +CL_NS_END diff --git a/Pods/BRCLucene/src/shared/CLucene/util/Misc.h b/Pods/BRCLucene/src/shared/CLucene/util/Misc.h new file mode 100644 index 0000000..aea7c42 --- /dev/null +++ b/Pods/BRCLucene/src/shared/CLucene/util/Misc.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 _lucene_util_Misc_H +#define _lucene_util_Misc_H + +#include + +CL_NS_DEF(util) + /** A class containing various functions. + */ + class CLUCENE_SHARED_EXPORT Misc{ + static void zerr(int ret, std::string& err); + public: + static uint64_t currentTimeMillis(); + static const TCHAR* replace_all( const TCHAR* val, const TCHAR* srch, const TCHAR* repl ); + static bool dir_Exists(const char* path); + static int64_t file_Size(const char* path); + static int64_t filelength(int handle); + static void sleep(const int ms); + + /** + * Unlinks the given file, waits until dir_Exists is false. It makes maxAttempts + * attempts to remove the file. If maxAttemps is less than 0 then unlimited + * count of attempts is done. + * Returns 1 if deleted and dir_Exists returns false + * Returns 0 if deleted and dir_Exists returns still true + * Returns -1 if file can not be deleted. + */ + static int32_t file_Unlink(const char* path, int32_t maxAttempts = -1); + + static size_t ahashCode(const char* str); + static size_t ahashCode(const char* str, size_t len); + + 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 ); + 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 bool priv_isDotDir( const TCHAR* name ); + //Creates a filename by concatenating Segment with ext and x + static std::string segmentname(const char* segment, const char* ext, const int32_t x=-1 ); + //Creates a filename in buffer by concatenating Segment with ext and x + static void segmentname(char* buffer,int32_t bufferLen, const char* Segment, const char* ext, const 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, const int32_t s1Len, const TCHAR* s2, const int32_t s2Len); + + // In-place trimming for strings and words ("te st" will be returned by stringTrim, while wordTrim will return "te") + // This is by design only meant for use with on-memory strings, and calling it like stringTrim(_T("test")) will + // be errorneous + static TCHAR* stringTrim(TCHAR* s); + static TCHAR* wordTrim(TCHAR* s); + + static size_t longToBase( int64_t value, int32_t base, char* to ); //< length of to should be at least ((sizeof(unsigned long) << 3) + 1). returns actual length used + static int64_t base36ToLong( const char* value ); + + static std::string toString(const int32_t value); + static std::string toString(const int64_t value); + static std::string toString(const _LUCENE_THREADID_TYPE value); + static std::string toString(const bool value); + static std::string toString(const float_t value); + static std::string toString(const TCHAR* s, int32_t len=-1); + + #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); + static wchar_t* _charToWide(const char* s); + + static void _cpycharToWide(const char* s, wchar_t* d, size_t len); + static void _cpywideToChar(const wchar_t* s, char* d, size_t len); + #else + #define thashCode ahashCode + #endif + + /** List all files in dir. + * @param bool fullPath True to return entire path + */ + static bool listFiles(const char* dir, std::vector& files, bool fullPath=false); + + /** uncompress the source stream into the dest stream. + * Default CHUNK size is 1k + */ + static bool inflate(const uint8_t* source, size_t sourcelen, std::ostream& dest, std::string& err, int CHUNK=-1); + /** compress the source stream into the dest stream. + * Default CHUNK size is 1k + * Default level is Z_BEST_COMPRESSION + */ + static bool deflate(const uint8_t* source, size_t sourcelen, std::ostream& dest, std::string& err, int CHUNK=-1, int level=-1); + }; + +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/shared/CLucene/util/StringBuffer.cpp b/Pods/BRCLucene/src/shared/CLucene/util/StringBuffer.cpp new file mode 100644 index 0000000..63c78bb --- /dev/null +++ b/Pods/BRCLucene/src/shared/CLucene/util/StringBuffer.cpp @@ -0,0 +1,423 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "StringBuffer.h" +#include "Misc.h" +#include + +CL_NS_DEF(util) + + StringBuffer::StringBuffer(TCHAR* buf,size_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 size_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 = (size_t) _tcslen(value); + + //Calculate the space occupied in buffer by a copy of value + const size_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 + + // TODO: Should we really delete and recreate the buffer - perhaps just reseting len should suffice? + // We should really look into at least providing both options + + //Destroy the current buffer if present + _CLDELETE_LCARRAY(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 int64_t value, const int32_t _Radix) { + //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 _Radix + _i64tot(value, buf, _Radix); + //Have the converted integer now stored in buf appended to the string in buffer + append(buf); + } + + void StringBuffer::appendFloat(const float_t value, const size_t digits){ + //Func - Appends a float_t (after conversion to a character string) + //Pre - digits > 0. Indicates the minimum number of characters printed + //Post - The converted float_t 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 + assert(digits <= 8); + + //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 l = 99-_tcslen(buf); //how many digits we have to work with? + size_t dig = l< (size_t)digits ? l : digits; + if ( dig > 0 ){ + _tcscat(buf,_T(".")); //add a decimal point + + int64_t remi=(int64_t)((value-v)*pow((float_t)10,(float_t)(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) { + size_t numZeros = dig - (size_t)log10((float_t)remadj) - 1; + while(numZeros-- > 0 && numZeros < 10) + _tcscat(buf,_T("0")); //add a zero before the decimal point + } + + _i64tot(remadj,buf+_tcslen(buf),10); //add the remainder + } + + append(buf); + } + + void StringBuffer::appendBoost(const float_t boost){ + if (boost != 1.0f) { + appendChar(_T('^')); appendFloat(boost,1); + } + } + + void StringBuffer::appendBool(const bool value){ + append( value ? _T( "true" ) : _T( "false" )); + } + + 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; + } + + size_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; + } + + TCHAR* StringBuffer::giveBuffer() { + TCHAR* ret = getBuffer(); + buffer = NULL; + len = 0; + bufferLength = 0; + bufferOwner = false; + return ret; + } + + void StringBuffer::reserve(const size_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 size_t minLength, const size_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 (minLength >= skippingNInitialChars + len + 1,"skippingNInitialChars is not large enough"); + + //More aggressive growth strategy to offset smaller default buffer size: + if ( !bufferOwner ){ + assert(bufferLength>=minLength); + 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); + memset(tmp, 0, sizeof(TCHAR) * skippingNInitialChars); + + //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 + _CLDELETE_LCARRAY(buffer); + + //Assign the new buffer tmp to buffer + buffer = tmp; + } + + void StringBuffer::setCharAt(size_t pos, const TCHAR chr) { + CND_PRECONDITION (pos < len, "pos is not in string"); + buffer[pos] = chr; + } + + TCHAR StringBuffer::charAt(size_t pos) { + CND_PRECONDITION (pos < len, "pos is not in string"); + return buffer[pos]; + } + + void StringBuffer::insert(const size_t pos, TCHAR chr) { + CND_PRECONDITION (pos <= len, "pos is larger than string len"); + growBuffer(len + 1, 0); + memmove(&buffer[pos + 1], &buffer[pos], sizeof(TCHAR) * (len - pos)); + buffer[pos] = chr; + len++; + } + + void StringBuffer::insert(const size_t pos, const TCHAR* chrs, size_t length) { + CND_PRECONDITION (pos <= len, "pos is larger than string len"); + + if (length == -1) { + length = _tcslen(chrs); + } + + if (length > 0) { + growBuffer(len + length, 0); + memmove(&buffer[pos + length], &buffer[pos], sizeof(TCHAR) * (len - pos)); + memcpy(&buffer[pos], chrs, sizeof(TCHAR) * (length)); + len += length; + } + } + + void StringBuffer::deleteCharAt(size_t pos) { + CND_PRECONDITION (pos < len, "pos is larger than string len"); + + memmove(&buffer[pos], &buffer[pos + 1], sizeof(TCHAR) * (len - pos)); + len--; + buffer[len] = _T('\0'); + } + + void StringBuffer::deleteChars(size_t start, size_t end) { + CND_PRECONDITION (start <= end && end <= len, "start/end is not in string"); + + if (start < end) { + memmove(&buffer[start], &buffer[end], sizeof(TCHAR) * (len - end)); + buffer[len - (end - start)] = _T('\0'); + len -= end - start; + } + } + + void StringBuffer::toLower() { + _tcslwr(buffer); + } + + bool StringBuffer::substringEquals(size_t start, size_t end, const TCHAR* str, size_t length) const { + if (length == -1) { + length = _tcslen(str); + } + + if (end - start != length) { + return false; + } + + for (size_t c = start; c < end; c++) { + if (buffer[c] != str[c - start]) { + return false; + } + } + + return true; + } + +CL_NS_END diff --git a/Pods/BRCLucene/src/shared/CLucene/util/StringBuffer.h b/Pods/BRCLucene/src/shared/CLucene/util/StringBuffer.h new file mode 100644 index 0000000..52e4df4 --- /dev/null +++ b/Pods/BRCLucene/src/shared/CLucene/util/StringBuffer.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. +------------------------------------------------------------------------------*/ +#ifndef _lucene_util_StringBuffer_ +#define _lucene_util_StringBuffer_ + +CL_NS_DEF(util) + class CLUCENE_SHARED_EXPORT StringBuffer{ + public: + ///Constructor. Allocates a buffer with the default length. + StringBuffer(); + ///Constructor. Allocates a buffer of length initSize + 1 + StringBuffer(const size_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,size_t maxlen, const bool consumeBuffer); + ///Destructor + virtual ~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) with a default radix of 10. Radixes lower than 10 not supported. + void appendInt(const int64_t value, const int32_t _Radix = 10); + ///Appends a float_t (after conversion to a character string) + void appendFloat(const float_t value, const size_t digits); + ///Appends a Lucene boost, formatted in the format used in the toString() functions; replaces JL's ToStringUtils::boost + void appendBoost(const float_t boost); + ///Appends a bool in the same way as java StringBuffer does (i.e. "true", "false" ) + void appendBool(const bool value); + ///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); + + StringBuffer& operator<< (const TCHAR* value) + { + append(value); + return *this; + } + StringBuffer& operator<< (const int64_t value) + { + appendInt(value); + return *this; + } + + void setCharAt(size_t pos, const TCHAR chr); + TCHAR charAt(size_t pos); + + void insert(const size_t pos, TCHAR chr); + void insert(const size_t pos, const TCHAR* chrs, size_t length = -1); + void deleteCharAt(size_t pos); + void deleteChars(size_t start, size_t end); + + void toLower(); + bool substringEquals(size_t start, size_t end, const TCHAR* str, size_t length = -1) const; + + ///Contains the length of string in the StringBuffer + ///Public so that analyzers can edit the length directly + size_t len; + ///Returns the length of the string in the StringBuffer + size_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(); + /** Returns a null terminated reference to the StringBuffer's text + * the StringBuffer's buffer is released so that the text doesn't need to be copied + */ + TCHAR* giveBuffer(); + + ///reserve a minimum amount of data for the buffer. + ///no change made if the buffer is already longer than length + void reserve(const size_t length); + private: + ///A buffer that contains strings + TCHAR* buffer; + ///The length of the buffer + size_t bufferLength; + bool bufferOwner; + + ///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 size_t minLength, const size_t skippingNInitialChars=0); + + }; +CL_NS_END +#endif diff --git a/Pods/BRCLucene/src/shared/CLucene/util/_dirent.h b/Pods/BRCLucene/src/shared/CLucene/util/_dirent.h new file mode 100644 index 0000000..46668ec --- /dev/null +++ b/Pods/BRCLucene/src/shared/CLucene/util/_dirent.h @@ -0,0 +1,109 @@ +/*------------------------------------------------------------------------------ +* 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(_CL_HAVE_DIRENT_H) && !defined(_CL_HAVE_SYS_NDIR_H) && !defined(_CL_HAVE_SYS_DIR_H) && !defined(_CL_HAVE_NDIR_H) + +#ifdef _WIN64 + typedef __int64 intptr_t; +#else + typedef int intptr_t; +#endif +#include + + +/** + * 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 + * Significantly revised and rewinddir, seekdir and telldir added by Colin + * Cut down again & changed by Ben van Klinken + * Peters + * + */ + +/** dirent structure - used by the dirent.h directory iteration functions */ +struct CLUCENE_SHARED_INLINE_EXPORT 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 CLUCENE_SHARED_INLINE_EXPORT 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. +*/ +CLUCENE_SHARED_EXPORT DIR* opendir (const char* filespec); + +/** +* Return a pointer to a dirent structure filled with the information on the +* next entry in the directory. +*/ +CLUCENE_SHARED_EXPORT struct dirent* readdir (DIR* dir); + +/** +* Frees up resources allocated by opendir. +*/ +CLUCENE_SHARED_EXPORT int32_t closedir (DIR* dir); + + +#elif defined (_CL_HAVE_DIRENT_H) +# include +# 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 +# endif +# if defined(_CL_HHAVE_SYS_DIR_H) +# include +# endif +# if defined(_CL_HHAVE_NDIR_H) +# include +# endif + +#endif //HAVE_DIRENT_H +#endif diff --git a/Pods/BRCLucene/src/shared/CLucene/util/dirent.cpp b/Pods/BRCLucene/src/shared/CLucene/util/dirent.cpp new file mode 100644 index 0000000..cb1c331 --- /dev/null +++ b/Pods/BRCLucene/src/shared/CLucene/util/dirent.cpp @@ -0,0 +1,224 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.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" +#include +#include + + +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 cl_stat_t rcs; + if ( fileStat(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 cl_stat_t 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 ( fileStat(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/Pods/Headers/Private/BRCLucene/CLucene.h b/Pods/Headers/Private/BRCLucene/CLucene.h new file mode 120000 index 0000000..1056795 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene.h @@ -0,0 +1 @@ +../../../BRCLucene/src/core/CLucene.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/CLConfig.h b/Pods/Headers/Private/BRCLucene/CLucene/CLConfig.h new file mode 120000 index 0000000..41e1b76 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/CLConfig.h @@ -0,0 +1 @@ +../../../../BRCLucene/src/core/CLucene/CLConfig.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/LuceneThreads.h b/Pods/Headers/Private/BRCLucene/CLucene/LuceneThreads.h new file mode 120000 index 0000000..207aab5 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/LuceneThreads.h @@ -0,0 +1 @@ +../../../../BRCLucene/src/shared/CLucene/LuceneThreads.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/SharedHeader.h b/Pods/Headers/Private/BRCLucene/CLucene/SharedHeader.h new file mode 120000 index 0000000..7e381f7 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/SharedHeader.h @@ -0,0 +1 @@ +../../../../BRCLucene/src/shared/CLucene/SharedHeader.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/StdHeader.h b/Pods/Headers/Private/BRCLucene/CLucene/StdHeader.h new file mode 120000 index 0000000..26bfabd --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/StdHeader.h @@ -0,0 +1 @@ +../../../../BRCLucene/src/core/CLucene/StdHeader.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/_ApiHeader.h b/Pods/Headers/Private/BRCLucene/CLucene/_ApiHeader.h new file mode 120000 index 0000000..3c06bf3 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/_ApiHeader.h @@ -0,0 +1 @@ +../../../../BRCLucene/src/core/CLucene/_ApiHeader.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/_SharedHeader.h b/Pods/Headers/Private/BRCLucene/CLucene/_SharedHeader.h new file mode 120000 index 0000000..bff44ba --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/_SharedHeader.h @@ -0,0 +1 @@ +../../../../BRCLucene/src/shared/CLucene/_SharedHeader.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/_clucene-config.h b/Pods/Headers/Private/BRCLucene/CLucene/_clucene-config.h new file mode 120000 index 0000000..952c43c --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/_clucene-config.h @@ -0,0 +1 @@ +../../../../BRCLucene/BRCLucene/src/CLucene/_clucene-config.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/analysis/AnalysisHeader.h b/Pods/Headers/Private/BRCLucene/CLucene/analysis/AnalysisHeader.h new file mode 120000 index 0000000..e054134 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/analysis/AnalysisHeader.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/analysis/AnalysisHeader.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/analysis/Analyzers.h b/Pods/Headers/Private/BRCLucene/CLucene/analysis/Analyzers.h new file mode 120000 index 0000000..8592491 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/analysis/Analyzers.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/analysis/Analyzers.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/analysis/CachingTokenFilter.h b/Pods/Headers/Private/BRCLucene/CLucene/analysis/CachingTokenFilter.h new file mode 120000 index 0000000..64d815d --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/analysis/CachingTokenFilter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/analysis/CachingTokenFilter.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/analysis/LanguageBasedAnalyzer.h b/Pods/Headers/Private/BRCLucene/CLucene/analysis/LanguageBasedAnalyzer.h new file mode 120000 index 0000000..49b200f --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/analysis/LanguageBasedAnalyzer.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/analysis/LanguageBasedAnalyzer.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/analysis/PorterStemmer.h b/Pods/Headers/Private/BRCLucene/CLucene/analysis/PorterStemmer.h new file mode 120000 index 0000000..2dac27e --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/analysis/PorterStemmer.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/analysis/PorterStemmer.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/analysis/cjk/CJKAnalyzer.h b/Pods/Headers/Private/BRCLucene/CLucene/analysis/cjk/CJKAnalyzer.h new file mode 120000 index 0000000..3c3e644 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/analysis/cjk/CJKAnalyzer.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/analysis/cjk/CJKAnalyzer.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/analysis/de/GermanAnalyzer.h b/Pods/Headers/Private/BRCLucene/CLucene/analysis/de/GermanAnalyzer.h new file mode 120000 index 0000000..a85f2e7 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/analysis/de/GermanAnalyzer.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/analysis/de/GermanAnalyzer.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/analysis/de/GermanStemFilter.h b/Pods/Headers/Private/BRCLucene/CLucene/analysis/de/GermanStemFilter.h new file mode 120000 index 0000000..0609efd --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/analysis/de/GermanStemFilter.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/analysis/de/GermanStemFilter.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/analysis/de/GermanStemmer.h b/Pods/Headers/Private/BRCLucene/CLucene/analysis/de/GermanStemmer.h new file mode 120000 index 0000000..0b8b46e --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/analysis/de/GermanStemmer.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/analysis/de/GermanStemmer.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/analysis/standard/StandardAnalyzer.h b/Pods/Headers/Private/BRCLucene/CLucene/analysis/standard/StandardAnalyzer.h new file mode 120000 index 0000000..3aad2ae --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/analysis/standard/StandardAnalyzer.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/core/CLucene/analysis/standard/StandardAnalyzer.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/analysis/standard/StandardFilter.h b/Pods/Headers/Private/BRCLucene/CLucene/analysis/standard/StandardFilter.h new file mode 120000 index 0000000..720f637 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/analysis/standard/StandardFilter.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/core/CLucene/analysis/standard/StandardFilter.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/analysis/standard/StandardTokenizer.h b/Pods/Headers/Private/BRCLucene/CLucene/analysis/standard/StandardTokenizer.h new file mode 120000 index 0000000..8585feb --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/analysis/standard/StandardTokenizer.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/core/CLucene/analysis/standard/StandardTokenizer.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/analysis/standard/StandardTokenizerConstants.h b/Pods/Headers/Private/BRCLucene/CLucene/analysis/standard/StandardTokenizerConstants.h new file mode 120000 index 0000000..775ea81 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/analysis/standard/StandardTokenizerConstants.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/core/CLucene/analysis/standard/StandardTokenizerConstants.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/clucene-config.h b/Pods/Headers/Private/BRCLucene/CLucene/clucene-config.h new file mode 120000 index 0000000..06186b8 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/clucene-config.h @@ -0,0 +1 @@ +../../../../BRCLucene/BRCLucene/src/CLucene/clucene-config.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/config/_gunichartables.h b/Pods/Headers/Private/BRCLucene/CLucene/config/_gunichartables.h new file mode 120000 index 0000000..27b1cfb --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/config/_gunichartables.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/shared/CLucene/config/_gunichartables.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/config/_threads.h b/Pods/Headers/Private/BRCLucene/CLucene/config/_threads.h new file mode 120000 index 0000000..c53c77d --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/config/_threads.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/shared/CLucene/config/_threads.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/config/repl_tchar.h b/Pods/Headers/Private/BRCLucene/CLucene/config/repl_tchar.h new file mode 120000 index 0000000..5a5ab82 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/config/repl_tchar.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/shared/CLucene/config/repl_tchar.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/config/repl_wchar.h b/Pods/Headers/Private/BRCLucene/CLucene/config/repl_wchar.h new file mode 120000 index 0000000..2b9a714 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/config/repl_wchar.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/shared/CLucene/config/repl_wchar.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/config/repl_wctype.h b/Pods/Headers/Private/BRCLucene/CLucene/config/repl_wctype.h new file mode 120000 index 0000000..af337f9 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/config/repl_wctype.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/shared/CLucene/config/repl_wctype.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/debug/_condition.h b/Pods/Headers/Private/BRCLucene/CLucene/debug/_condition.h new file mode 120000 index 0000000..e83cad2 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/debug/_condition.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/shared/CLucene/debug/_condition.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/debug/error.h b/Pods/Headers/Private/BRCLucene/CLucene/debug/error.h new file mode 120000 index 0000000..4c85225 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/debug/error.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/debug/error.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/debug/lucenebase.h b/Pods/Headers/Private/BRCLucene/CLucene/debug/lucenebase.h new file mode 120000 index 0000000..fc701c7 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/debug/lucenebase.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/debug/lucenebase.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/debug/mem.h b/Pods/Headers/Private/BRCLucene/CLucene/debug/mem.h new file mode 120000 index 0000000..a4ff6c6 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/debug/mem.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/debug/mem.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/document/DateField.h b/Pods/Headers/Private/BRCLucene/CLucene/document/DateField.h new file mode 120000 index 0000000..f200176 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/document/DateField.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/document/DateField.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/document/DateTools.h b/Pods/Headers/Private/BRCLucene/CLucene/document/DateTools.h new file mode 120000 index 0000000..02ced4a --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/document/DateTools.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/document/DateTools.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/document/Document.h b/Pods/Headers/Private/BRCLucene/CLucene/document/Document.h new file mode 120000 index 0000000..9c3440a --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/document/Document.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/document/Document.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/document/Field.h b/Pods/Headers/Private/BRCLucene/CLucene/document/Field.h new file mode 120000 index 0000000..484fa30 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/document/Field.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/document/Field.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/document/FieldSelector.h b/Pods/Headers/Private/BRCLucene/CLucene/document/FieldSelector.h new file mode 120000 index 0000000..5313ddf --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/document/FieldSelector.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/document/FieldSelector.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/document/NumberTools.h b/Pods/Headers/Private/BRCLucene/CLucene/document/NumberTools.h new file mode 120000 index 0000000..5d5e3f4 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/document/NumberTools.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/document/NumberTools.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/highlighter/Encoder.h b/Pods/Headers/Private/BRCLucene/CLucene/highlighter/Encoder.h new file mode 120000 index 0000000..8f708c2 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/highlighter/Encoder.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/highlighter/Encoder.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/highlighter/Formatter.h b/Pods/Headers/Private/BRCLucene/CLucene/highlighter/Formatter.h new file mode 120000 index 0000000..392096c --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/highlighter/Formatter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/highlighter/Formatter.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/highlighter/Fragmenter.h b/Pods/Headers/Private/BRCLucene/CLucene/highlighter/Fragmenter.h new file mode 120000 index 0000000..ae47a4a --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/highlighter/Fragmenter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/highlighter/Fragmenter.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/highlighter/HighlightScorer.h b/Pods/Headers/Private/BRCLucene/CLucene/highlighter/HighlightScorer.h new file mode 120000 index 0000000..7202793 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/highlighter/HighlightScorer.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/highlighter/HighlightScorer.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/highlighter/Highlighter.h b/Pods/Headers/Private/BRCLucene/CLucene/highlighter/Highlighter.h new file mode 120000 index 0000000..3f143aa --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/highlighter/Highlighter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/highlighter/Highlighter.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/highlighter/QueryScorer.h b/Pods/Headers/Private/BRCLucene/CLucene/highlighter/QueryScorer.h new file mode 120000 index 0000000..f958c6e --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/highlighter/QueryScorer.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/highlighter/QueryScorer.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/highlighter/QueryTermExtractor.h b/Pods/Headers/Private/BRCLucene/CLucene/highlighter/QueryTermExtractor.h new file mode 120000 index 0000000..5c61bf0 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/highlighter/QueryTermExtractor.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/highlighter/QueryTermExtractor.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/highlighter/Scorer.h b/Pods/Headers/Private/BRCLucene/CLucene/highlighter/Scorer.h new file mode 120000 index 0000000..5fb1048 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/highlighter/Scorer.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/highlighter/Scorer.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/highlighter/SimpleFragmenter.h b/Pods/Headers/Private/BRCLucene/CLucene/highlighter/SimpleFragmenter.h new file mode 120000 index 0000000..51798bf --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/highlighter/SimpleFragmenter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/highlighter/SimpleFragmenter.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/highlighter/SimpleHTMLEncoder.h b/Pods/Headers/Private/BRCLucene/CLucene/highlighter/SimpleHTMLEncoder.h new file mode 120000 index 0000000..25eeb58 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/highlighter/SimpleHTMLEncoder.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/highlighter/SimpleHTMLEncoder.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/highlighter/SimpleHTMLFormatter.h b/Pods/Headers/Private/BRCLucene/CLucene/highlighter/SimpleHTMLFormatter.h new file mode 120000 index 0000000..a744a7e --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/highlighter/SimpleHTMLFormatter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/highlighter/SimpleHTMLFormatter.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/highlighter/TextFragment.h b/Pods/Headers/Private/BRCLucene/CLucene/highlighter/TextFragment.h new file mode 120000 index 0000000..30d141d --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/highlighter/TextFragment.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/highlighter/TextFragment.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/highlighter/TokenGroup.h b/Pods/Headers/Private/BRCLucene/CLucene/highlighter/TokenGroup.h new file mode 120000 index 0000000..936a9a1 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/highlighter/TokenGroup.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/highlighter/TokenGroup.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/highlighter/TokenSources.h b/Pods/Headers/Private/BRCLucene/CLucene/highlighter/TokenSources.h new file mode 120000 index 0000000..4bea214 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/highlighter/TokenSources.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/highlighter/TokenSources.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/highlighter/WeightedTerm.h b/Pods/Headers/Private/BRCLucene/CLucene/highlighter/WeightedTerm.h new file mode 120000 index 0000000..0e569c7 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/highlighter/WeightedTerm.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/highlighter/WeightedTerm.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/index/DirectoryIndexReader.h b/Pods/Headers/Private/BRCLucene/CLucene/index/DirectoryIndexReader.h new file mode 120000 index 0000000..5c66ed7 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/index/DirectoryIndexReader.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/DirectoryIndexReader.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/index/IndexDeletionPolicy.h b/Pods/Headers/Private/BRCLucene/CLucene/index/IndexDeletionPolicy.h new file mode 120000 index 0000000..23edcc1 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/index/IndexDeletionPolicy.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/IndexDeletionPolicy.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/index/IndexModifier.h b/Pods/Headers/Private/BRCLucene/CLucene/index/IndexModifier.h new file mode 120000 index 0000000..0d73888 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/index/IndexModifier.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/IndexModifier.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/index/IndexReader.h b/Pods/Headers/Private/BRCLucene/CLucene/index/IndexReader.h new file mode 120000 index 0000000..aec2c7f --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/index/IndexReader.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/IndexReader.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/index/IndexWriter.h b/Pods/Headers/Private/BRCLucene/CLucene/index/IndexWriter.h new file mode 120000 index 0000000..9a697be --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/index/IndexWriter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/IndexWriter.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/index/MergePolicy.h b/Pods/Headers/Private/BRCLucene/CLucene/index/MergePolicy.h new file mode 120000 index 0000000..3d5f73a --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/index/MergePolicy.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/MergePolicy.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/index/MergeScheduler.h b/Pods/Headers/Private/BRCLucene/CLucene/index/MergeScheduler.h new file mode 120000 index 0000000..69732ad --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/index/MergeScheduler.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/MergeScheduler.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/index/MultiReader.h b/Pods/Headers/Private/BRCLucene/CLucene/index/MultiReader.h new file mode 120000 index 0000000..2db408a --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/index/MultiReader.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/MultiReader.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/index/MultipleTermPositions.h b/Pods/Headers/Private/BRCLucene/CLucene/index/MultipleTermPositions.h new file mode 120000 index 0000000..7917a1d --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/index/MultipleTermPositions.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/MultipleTermPositions.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/index/Payload.h b/Pods/Headers/Private/BRCLucene/CLucene/index/Payload.h new file mode 120000 index 0000000..3815610 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/index/Payload.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/Payload.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/index/Term.h b/Pods/Headers/Private/BRCLucene/CLucene/index/Term.h new file mode 120000 index 0000000..8ee534f --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/index/Term.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/Term.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/index/TermVector.h b/Pods/Headers/Private/BRCLucene/CLucene/index/TermVector.h new file mode 120000 index 0000000..71038d1 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/index/TermVector.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/TermVector.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/index/Terms.h b/Pods/Headers/Private/BRCLucene/CLucene/index/Terms.h new file mode 120000 index 0000000..1c2f3e5 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/index/Terms.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/Terms.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/index/_CompoundFile.h b/Pods/Headers/Private/BRCLucene/CLucene/index/_CompoundFile.h new file mode 120000 index 0000000..3c2fcd8 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/index/_CompoundFile.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_CompoundFile.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/index/_DocumentsWriter.h b/Pods/Headers/Private/BRCLucene/CLucene/index/_DocumentsWriter.h new file mode 120000 index 0000000..70e4e2a --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/index/_DocumentsWriter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_DocumentsWriter.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/index/_FieldInfo.h b/Pods/Headers/Private/BRCLucene/CLucene/index/_FieldInfo.h new file mode 120000 index 0000000..d066778 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/index/_FieldInfo.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_FieldInfo.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/index/_FieldInfos.h b/Pods/Headers/Private/BRCLucene/CLucene/index/_FieldInfos.h new file mode 120000 index 0000000..fef477b --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/index/_FieldInfos.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_FieldInfos.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/index/_FieldsReader.h b/Pods/Headers/Private/BRCLucene/CLucene/index/_FieldsReader.h new file mode 120000 index 0000000..42acd3b --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/index/_FieldsReader.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_FieldsReader.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/index/_FieldsWriter.h b/Pods/Headers/Private/BRCLucene/CLucene/index/_FieldsWriter.h new file mode 120000 index 0000000..a894b57 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/index/_FieldsWriter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_FieldsWriter.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/index/_IndexFileDeleter.h b/Pods/Headers/Private/BRCLucene/CLucene/index/_IndexFileDeleter.h new file mode 120000 index 0000000..fd2767f --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/index/_IndexFileDeleter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_IndexFileDeleter.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/index/_IndexFileNameFilter.h b/Pods/Headers/Private/BRCLucene/CLucene/index/_IndexFileNameFilter.h new file mode 120000 index 0000000..7b314da --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/index/_IndexFileNameFilter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_IndexFileNameFilter.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/index/_IndexFileNames.h b/Pods/Headers/Private/BRCLucene/CLucene/index/_IndexFileNames.h new file mode 120000 index 0000000..84f3bd1 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/index/_IndexFileNames.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_IndexFileNames.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/index/_MultiSegmentReader.h b/Pods/Headers/Private/BRCLucene/CLucene/index/_MultiSegmentReader.h new file mode 120000 index 0000000..51de9d9 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/index/_MultiSegmentReader.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_MultiSegmentReader.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/index/_SegmentHeader.h b/Pods/Headers/Private/BRCLucene/CLucene/index/_SegmentHeader.h new file mode 120000 index 0000000..4404cae --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/index/_SegmentHeader.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_SegmentHeader.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/index/_SegmentInfos.h b/Pods/Headers/Private/BRCLucene/CLucene/index/_SegmentInfos.h new file mode 120000 index 0000000..f9a5537 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/index/_SegmentInfos.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_SegmentInfos.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/index/_SegmentMergeInfo.h b/Pods/Headers/Private/BRCLucene/CLucene/index/_SegmentMergeInfo.h new file mode 120000 index 0000000..4a4184a --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/index/_SegmentMergeInfo.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_SegmentMergeInfo.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/index/_SegmentMergeQueue.h b/Pods/Headers/Private/BRCLucene/CLucene/index/_SegmentMergeQueue.h new file mode 120000 index 0000000..0fdafbc --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/index/_SegmentMergeQueue.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_SegmentMergeQueue.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/index/_SegmentMerger.h b/Pods/Headers/Private/BRCLucene/CLucene/index/_SegmentMerger.h new file mode 120000 index 0000000..bc1dd8b --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/index/_SegmentMerger.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_SegmentMerger.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/index/_SegmentTermEnum.h b/Pods/Headers/Private/BRCLucene/CLucene/index/_SegmentTermEnum.h new file mode 120000 index 0000000..002720a --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/index/_SegmentTermEnum.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_SegmentTermEnum.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/index/_SkipListReader.h b/Pods/Headers/Private/BRCLucene/CLucene/index/_SkipListReader.h new file mode 120000 index 0000000..6b8a8b0 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/index/_SkipListReader.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_SkipListReader.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/index/_SkipListWriter.h b/Pods/Headers/Private/BRCLucene/CLucene/index/_SkipListWriter.h new file mode 120000 index 0000000..17cf80c --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/index/_SkipListWriter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_SkipListWriter.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/index/_Term.h b/Pods/Headers/Private/BRCLucene/CLucene/index/_Term.h new file mode 120000 index 0000000..ca676c4 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/index/_Term.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_Term.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/index/_TermInfo.h b/Pods/Headers/Private/BRCLucene/CLucene/index/_TermInfo.h new file mode 120000 index 0000000..3c59195 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/index/_TermInfo.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_TermInfo.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/index/_TermInfosReader.h b/Pods/Headers/Private/BRCLucene/CLucene/index/_TermInfosReader.h new file mode 120000 index 0000000..5f137ef --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/index/_TermInfosReader.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_TermInfosReader.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/index/_TermInfosWriter.h b/Pods/Headers/Private/BRCLucene/CLucene/index/_TermInfosWriter.h new file mode 120000 index 0000000..bf590b0 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/index/_TermInfosWriter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_TermInfosWriter.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/index/_TermVector.h b/Pods/Headers/Private/BRCLucene/CLucene/index/_TermVector.h new file mode 120000 index 0000000..f1ee6f4 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/index/_TermVector.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_TermVector.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/queryParser/MultiFieldQueryParser.h b/Pods/Headers/Private/BRCLucene/CLucene/queryParser/MultiFieldQueryParser.h new file mode 120000 index 0000000..b9525c1 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/queryParser/MultiFieldQueryParser.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/queryParser/MultiFieldQueryParser.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/queryParser/QueryParser.h b/Pods/Headers/Private/BRCLucene/CLucene/queryParser/QueryParser.h new file mode 120000 index 0000000..23f0ac7 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/queryParser/QueryParser.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/queryParser/QueryParser.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/queryParser/QueryParserConstants.h b/Pods/Headers/Private/BRCLucene/CLucene/queryParser/QueryParserConstants.h new file mode 120000 index 0000000..d727749 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/queryParser/QueryParserConstants.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/queryParser/QueryParserConstants.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/queryParser/QueryParserTokenManager.h b/Pods/Headers/Private/BRCLucene/CLucene/queryParser/QueryParserTokenManager.h new file mode 120000 index 0000000..4c74b81 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/queryParser/QueryParserTokenManager.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/queryParser/QueryParserTokenManager.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/queryParser/QueryToken.h b/Pods/Headers/Private/BRCLucene/CLucene/queryParser/QueryToken.h new file mode 120000 index 0000000..67b9604 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/queryParser/QueryToken.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/queryParser/QueryToken.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/queryParser/_CharStream.h b/Pods/Headers/Private/BRCLucene/CLucene/queryParser/_CharStream.h new file mode 120000 index 0000000..3030f3b --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/queryParser/_CharStream.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/queryParser/_CharStream.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/queryParser/_FastCharStream.h b/Pods/Headers/Private/BRCLucene/CLucene/queryParser/_FastCharStream.h new file mode 120000 index 0000000..37e3f74 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/queryParser/_FastCharStream.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/queryParser/_FastCharStream.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/search/BooleanClause.h b/Pods/Headers/Private/BRCLucene/CLucene/search/BooleanClause.h new file mode 120000 index 0000000..944d581 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/search/BooleanClause.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/BooleanClause.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/search/BooleanQuery.h b/Pods/Headers/Private/BRCLucene/CLucene/search/BooleanQuery.h new file mode 120000 index 0000000..c684d29 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/search/BooleanQuery.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/BooleanQuery.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/search/CachingSpanFilter.h b/Pods/Headers/Private/BRCLucene/CLucene/search/CachingSpanFilter.h new file mode 120000 index 0000000..58b93f6 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/search/CachingSpanFilter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/CachingSpanFilter.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/search/CachingWrapperFilter.h b/Pods/Headers/Private/BRCLucene/CLucene/search/CachingWrapperFilter.h new file mode 120000 index 0000000..90a1e09 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/search/CachingWrapperFilter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/CachingWrapperFilter.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/search/ChainedFilter.h b/Pods/Headers/Private/BRCLucene/CLucene/search/ChainedFilter.h new file mode 120000 index 0000000..d7c536c --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/search/ChainedFilter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/ChainedFilter.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/search/Compare.h b/Pods/Headers/Private/BRCLucene/CLucene/search/Compare.h new file mode 120000 index 0000000..d226478 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/search/Compare.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/Compare.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/search/ConstantScoreQuery.h b/Pods/Headers/Private/BRCLucene/CLucene/search/ConstantScoreQuery.h new file mode 120000 index 0000000..bf45e1c --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/search/ConstantScoreQuery.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/ConstantScoreQuery.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/search/DateFilter.h b/Pods/Headers/Private/BRCLucene/CLucene/search/DateFilter.h new file mode 120000 index 0000000..f346984 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/search/DateFilter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/DateFilter.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/search/Explanation.h b/Pods/Headers/Private/BRCLucene/CLucene/search/Explanation.h new file mode 120000 index 0000000..d658350 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/search/Explanation.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/Explanation.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/search/FieldCache.h b/Pods/Headers/Private/BRCLucene/CLucene/search/FieldCache.h new file mode 120000 index 0000000..c5cfe49 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/search/FieldCache.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/FieldCache.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/search/FieldDoc.h b/Pods/Headers/Private/BRCLucene/CLucene/search/FieldDoc.h new file mode 120000 index 0000000..db06ecb --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/search/FieldDoc.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/FieldDoc.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/search/FieldSortedHitQueue.h b/Pods/Headers/Private/BRCLucene/CLucene/search/FieldSortedHitQueue.h new file mode 120000 index 0000000..81f498b --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/search/FieldSortedHitQueue.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/FieldSortedHitQueue.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/search/Filter.h b/Pods/Headers/Private/BRCLucene/CLucene/search/Filter.h new file mode 120000 index 0000000..701d25a --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/search/Filter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/Filter.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/search/FilteredTermEnum.h b/Pods/Headers/Private/BRCLucene/CLucene/search/FilteredTermEnum.h new file mode 120000 index 0000000..9c670e1 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/search/FilteredTermEnum.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/FilteredTermEnum.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/search/FuzzyQuery.h b/Pods/Headers/Private/BRCLucene/CLucene/search/FuzzyQuery.h new file mode 120000 index 0000000..4c553bf --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/search/FuzzyQuery.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/FuzzyQuery.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/search/Hits.h b/Pods/Headers/Private/BRCLucene/CLucene/search/Hits.h new file mode 120000 index 0000000..e6321cf --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/search/Hits.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/Hits.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/search/IndexSearcher.h b/Pods/Headers/Private/BRCLucene/CLucene/search/IndexSearcher.h new file mode 120000 index 0000000..aff1ec2 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/search/IndexSearcher.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/IndexSearcher.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/search/MatchAllDocsQuery.h b/Pods/Headers/Private/BRCLucene/CLucene/search/MatchAllDocsQuery.h new file mode 120000 index 0000000..bfeda5f --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/search/MatchAllDocsQuery.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/MatchAllDocsQuery.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/search/MultiPhraseQuery.h b/Pods/Headers/Private/BRCLucene/CLucene/search/MultiPhraseQuery.h new file mode 120000 index 0000000..4601f59 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/search/MultiPhraseQuery.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/MultiPhraseQuery.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/search/MultiSearcher.h b/Pods/Headers/Private/BRCLucene/CLucene/search/MultiSearcher.h new file mode 120000 index 0000000..26b7692 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/search/MultiSearcher.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/MultiSearcher.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/search/MultiTermQuery.h b/Pods/Headers/Private/BRCLucene/CLucene/search/MultiTermQuery.h new file mode 120000 index 0000000..b04b339 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/search/MultiTermQuery.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/MultiTermQuery.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/search/PhraseQuery.h b/Pods/Headers/Private/BRCLucene/CLucene/search/PhraseQuery.h new file mode 120000 index 0000000..eec87f1 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/search/PhraseQuery.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/PhraseQuery.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/search/PrefixQuery.h b/Pods/Headers/Private/BRCLucene/CLucene/search/PrefixQuery.h new file mode 120000 index 0000000..4fb6eee --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/search/PrefixQuery.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/PrefixQuery.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/search/Query.h b/Pods/Headers/Private/BRCLucene/CLucene/search/Query.h new file mode 120000 index 0000000..041a836 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/search/Query.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/Query.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/search/QueryFilter.h b/Pods/Headers/Private/BRCLucene/CLucene/search/QueryFilter.h new file mode 120000 index 0000000..7daa032 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/search/QueryFilter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/QueryFilter.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/search/RangeFilter.h b/Pods/Headers/Private/BRCLucene/CLucene/search/RangeFilter.h new file mode 120000 index 0000000..21a3195 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/search/RangeFilter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/RangeFilter.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/search/RangeQuery.h b/Pods/Headers/Private/BRCLucene/CLucene/search/RangeQuery.h new file mode 120000 index 0000000..c92e12a --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/search/RangeQuery.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/RangeQuery.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/search/Scorer.h b/Pods/Headers/Private/BRCLucene/CLucene/search/Scorer.h new file mode 120000 index 0000000..214fd3e --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/search/Scorer.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/Scorer.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/search/ScorerDocQueue.h b/Pods/Headers/Private/BRCLucene/CLucene/search/ScorerDocQueue.h new file mode 120000 index 0000000..d4f058e --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/search/ScorerDocQueue.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/ScorerDocQueue.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/search/SearchHeader.h b/Pods/Headers/Private/BRCLucene/CLucene/search/SearchHeader.h new file mode 120000 index 0000000..9779f35 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/search/SearchHeader.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/SearchHeader.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/search/Searchable.h b/Pods/Headers/Private/BRCLucene/CLucene/search/Searchable.h new file mode 120000 index 0000000..4d2aa09 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/search/Searchable.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/Searchable.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/search/Similarity.h b/Pods/Headers/Private/BRCLucene/CLucene/search/Similarity.h new file mode 120000 index 0000000..3b238d4 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/search/Similarity.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/Similarity.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/search/Sort.h b/Pods/Headers/Private/BRCLucene/CLucene/search/Sort.h new file mode 120000 index 0000000..15816e1 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/search/Sort.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/Sort.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/search/SpanFilter.h b/Pods/Headers/Private/BRCLucene/CLucene/search/SpanFilter.h new file mode 120000 index 0000000..016615c --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/search/SpanFilter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/SpanFilter.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/search/SpanFilterResult.h b/Pods/Headers/Private/BRCLucene/CLucene/search/SpanFilterResult.h new file mode 120000 index 0000000..1fb2f5d --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/search/SpanFilterResult.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/SpanFilterResult.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/search/SpanQueryFilter.h b/Pods/Headers/Private/BRCLucene/CLucene/search/SpanQueryFilter.h new file mode 120000 index 0000000..089eea1 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/search/SpanQueryFilter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/SpanQueryFilter.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/search/TermQuery.h b/Pods/Headers/Private/BRCLucene/CLucene/search/TermQuery.h new file mode 120000 index 0000000..a7ae74d --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/search/TermQuery.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/TermQuery.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/search/WildcardQuery.h b/Pods/Headers/Private/BRCLucene/CLucene/search/WildcardQuery.h new file mode 120000 index 0000000..e2b7117 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/search/WildcardQuery.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/WildcardQuery.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/search/WildcardTermEnum.h b/Pods/Headers/Private/BRCLucene/CLucene/search/WildcardTermEnum.h new file mode 120000 index 0000000..ebb467b --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/search/WildcardTermEnum.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/WildcardTermEnum.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/search/_BooleanScorer.h b/Pods/Headers/Private/BRCLucene/CLucene/search/_BooleanScorer.h new file mode 120000 index 0000000..af79183 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/search/_BooleanScorer.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/_BooleanScorer.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/search/_BooleanScorer2.h b/Pods/Headers/Private/BRCLucene/CLucene/search/_BooleanScorer2.h new file mode 120000 index 0000000..7c51fc3 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/search/_BooleanScorer2.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/_BooleanScorer2.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/search/_ConjunctionScorer.h b/Pods/Headers/Private/BRCLucene/CLucene/search/_ConjunctionScorer.h new file mode 120000 index 0000000..05de6cd --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/search/_ConjunctionScorer.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/_ConjunctionScorer.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/search/_DisjunctionSumScorer.h b/Pods/Headers/Private/BRCLucene/CLucene/search/_DisjunctionSumScorer.h new file mode 120000 index 0000000..c0497b4 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/search/_DisjunctionSumScorer.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/_DisjunctionSumScorer.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/search/_ExactPhraseScorer.h b/Pods/Headers/Private/BRCLucene/CLucene/search/_ExactPhraseScorer.h new file mode 120000 index 0000000..41d028a --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/search/_ExactPhraseScorer.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/_ExactPhraseScorer.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/search/_FieldCacheImpl.h b/Pods/Headers/Private/BRCLucene/CLucene/search/_FieldCacheImpl.h new file mode 120000 index 0000000..c0e4403 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/search/_FieldCacheImpl.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/_FieldCacheImpl.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/search/_FieldDocSortedHitQueue.h b/Pods/Headers/Private/BRCLucene/CLucene/search/_FieldDocSortedHitQueue.h new file mode 120000 index 0000000..9def8d9 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/search/_FieldDocSortedHitQueue.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/_FieldDocSortedHitQueue.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/search/_HitQueue.h b/Pods/Headers/Private/BRCLucene/CLucene/search/_HitQueue.h new file mode 120000 index 0000000..1bc72aa --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/search/_HitQueue.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/_HitQueue.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/search/_PhrasePositions.h b/Pods/Headers/Private/BRCLucene/CLucene/search/_PhrasePositions.h new file mode 120000 index 0000000..b487ca4 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/search/_PhrasePositions.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/_PhrasePositions.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/search/_PhraseQueue.h b/Pods/Headers/Private/BRCLucene/CLucene/search/_PhraseQueue.h new file mode 120000 index 0000000..9d88eb8 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/search/_PhraseQueue.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/_PhraseQueue.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/search/_PhraseScorer.h b/Pods/Headers/Private/BRCLucene/CLucene/search/_PhraseScorer.h new file mode 120000 index 0000000..64c5309 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/search/_PhraseScorer.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/_PhraseScorer.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/search/_SloppyPhraseScorer.h b/Pods/Headers/Private/BRCLucene/CLucene/search/_SloppyPhraseScorer.h new file mode 120000 index 0000000..2c76b21 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/search/_SloppyPhraseScorer.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/_SloppyPhraseScorer.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/search/_TermScorer.h b/Pods/Headers/Private/BRCLucene/CLucene/search/_TermScorer.h new file mode 120000 index 0000000..728f66f --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/search/_TermScorer.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/_TermScorer.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/search/spans/SpanFirstQuery.h b/Pods/Headers/Private/BRCLucene/CLucene/search/spans/SpanFirstQuery.h new file mode 120000 index 0000000..8b33223 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/search/spans/SpanFirstQuery.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/core/CLucene/search/spans/SpanFirstQuery.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/search/spans/SpanNearQuery.h b/Pods/Headers/Private/BRCLucene/CLucene/search/spans/SpanNearQuery.h new file mode 120000 index 0000000..3ba0b89 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/search/spans/SpanNearQuery.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/core/CLucene/search/spans/SpanNearQuery.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/search/spans/SpanNotQuery.h b/Pods/Headers/Private/BRCLucene/CLucene/search/spans/SpanNotQuery.h new file mode 120000 index 0000000..0e6fe55 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/search/spans/SpanNotQuery.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/core/CLucene/search/spans/SpanNotQuery.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/search/spans/SpanOrQuery.h b/Pods/Headers/Private/BRCLucene/CLucene/search/spans/SpanOrQuery.h new file mode 120000 index 0000000..6fa5608 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/search/spans/SpanOrQuery.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/core/CLucene/search/spans/SpanOrQuery.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/search/spans/SpanQuery.h b/Pods/Headers/Private/BRCLucene/CLucene/search/spans/SpanQuery.h new file mode 120000 index 0000000..68ee308 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/search/spans/SpanQuery.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/core/CLucene/search/spans/SpanQuery.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/search/spans/SpanScorer.h b/Pods/Headers/Private/BRCLucene/CLucene/search/spans/SpanScorer.h new file mode 120000 index 0000000..17bf74e --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/search/spans/SpanScorer.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/core/CLucene/search/spans/SpanScorer.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/search/spans/SpanTermQuery.h b/Pods/Headers/Private/BRCLucene/CLucene/search/spans/SpanTermQuery.h new file mode 120000 index 0000000..39f8484 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/search/spans/SpanTermQuery.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/core/CLucene/search/spans/SpanTermQuery.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/search/spans/SpanWeight.h b/Pods/Headers/Private/BRCLucene/CLucene/search/spans/SpanWeight.h new file mode 120000 index 0000000..ed11e43 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/search/spans/SpanWeight.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/core/CLucene/search/spans/SpanWeight.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/search/spans/Spans.h b/Pods/Headers/Private/BRCLucene/CLucene/search/spans/Spans.h new file mode 120000 index 0000000..0e6bc36 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/search/spans/Spans.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/core/CLucene/search/spans/Spans.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/search/spans/_EmptySpans.h b/Pods/Headers/Private/BRCLucene/CLucene/search/spans/_EmptySpans.h new file mode 120000 index 0000000..3306dd8 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/search/spans/_EmptySpans.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/core/CLucene/search/spans/_EmptySpans.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/search/spans/_NearSpansOrdered.h b/Pods/Headers/Private/BRCLucene/CLucene/search/spans/_NearSpansOrdered.h new file mode 120000 index 0000000..6ff53e3 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/search/spans/_NearSpansOrdered.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/core/CLucene/search/spans/_NearSpansOrdered.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/search/spans/_NearSpansUnordered.h b/Pods/Headers/Private/BRCLucene/CLucene/search/spans/_NearSpansUnordered.h new file mode 120000 index 0000000..578e834 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/search/spans/_NearSpansUnordered.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/core/CLucene/search/spans/_NearSpansUnordered.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/search/spans/_TermSpans.h b/Pods/Headers/Private/BRCLucene/CLucene/search/spans/_TermSpans.h new file mode 120000 index 0000000..5df50f3 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/search/spans/_TermSpans.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/core/CLucene/search/spans/_TermSpans.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/snowball/SnowballAnalyzer.h b/Pods/Headers/Private/BRCLucene/CLucene/snowball/SnowballAnalyzer.h new file mode 120000 index 0000000..df1c345 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/snowball/SnowballAnalyzer.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/SnowballAnalyzer.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/snowball/SnowballFilter.h b/Pods/Headers/Private/BRCLucene/CLucene/snowball/SnowballFilter.h new file mode 120000 index 0000000..8df9fd0 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/snowball/SnowballFilter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/SnowballFilter.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/snowball/include/libstemmer.h b/Pods/Headers/Private/BRCLucene/CLucene/snowball/include/libstemmer.h new file mode 120000 index 0000000..b1aa938 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/snowball/include/libstemmer.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/include/libstemmer.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/snowball/libstemmer.h b/Pods/Headers/Private/BRCLucene/CLucene/snowball/libstemmer.h new file mode 120000 index 0000000..51082f8 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/snowball/libstemmer.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/libstemmer.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/snowball/libstemmer/modules.h b/Pods/Headers/Private/BRCLucene/CLucene/snowball/libstemmer/modules.h new file mode 120000 index 0000000..fa1a1b8 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/snowball/libstemmer/modules.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/libstemmer/modules.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/snowball/runtime/api.h b/Pods/Headers/Private/BRCLucene/CLucene/snowball/runtime/api.h new file mode 120000 index 0000000..55a132e --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/snowball/runtime/api.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/runtime/api.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/snowball/runtime/header.h b/Pods/Headers/Private/BRCLucene/CLucene/snowball/runtime/header.h new file mode 120000 index 0000000..d057a30 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/snowball/runtime/header.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/runtime/header.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_danish.h b/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_danish.h new file mode 120000 index 0000000..481c19f --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_danish.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_danish.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_dutch.h b/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_dutch.h new file mode 120000 index 0000000..c53e039 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_dutch.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_dutch.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_english.h b/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_english.h new file mode 120000 index 0000000..828e651 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_english.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_english.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_finnish.h b/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_finnish.h new file mode 120000 index 0000000..5c85699 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_finnish.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_finnish.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_french.h b/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_french.h new file mode 120000 index 0000000..8579461 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_french.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_french.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_german.h b/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_german.h new file mode 120000 index 0000000..9b77b13 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_german.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_german.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_italian.h b/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_italian.h new file mode 120000 index 0000000..c748e1c --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_italian.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_italian.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_norwegian.h b/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_norwegian.h new file mode 120000 index 0000000..8807949 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_norwegian.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_norwegian.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_porter.h b/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_porter.h new file mode 120000 index 0000000..8af056e --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_porter.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_porter.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_portuguese.h b/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_portuguese.h new file mode 120000 index 0000000..e7b9b26 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_portuguese.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_portuguese.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_spanish.h b/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_spanish.h new file mode 120000 index 0000000..1f80c8c --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_spanish.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_spanish.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_swedish.h b/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_swedish.h new file mode 120000 index 0000000..946a29c --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_swedish.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_swedish.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_KOI8_R_russian.h b/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_KOI8_R_russian.h new file mode 120000 index 0000000..836b287 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_KOI8_R_russian.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_KOI8_R_russian.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_danish.h b/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_danish.h new file mode 120000 index 0000000..b6aa6b7 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_danish.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_danish.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_dutch.h b/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_dutch.h new file mode 120000 index 0000000..1259511 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_dutch.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_dutch.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_english.h b/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_english.h new file mode 120000 index 0000000..5d62fbb --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_english.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_english.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_finnish.h b/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_finnish.h new file mode 120000 index 0000000..15a68dd --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_finnish.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_finnish.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_french.h b/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_french.h new file mode 120000 index 0000000..1f93047 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_french.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_french.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_german.h b/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_german.h new file mode 120000 index 0000000..3be5731 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_german.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_german.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_italian.h b/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_italian.h new file mode 120000 index 0000000..8c3f3f4 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_italian.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_italian.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_norwegian.h b/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_norwegian.h new file mode 120000 index 0000000..d3d5a13 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_norwegian.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_norwegian.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_porter.h b/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_porter.h new file mode 120000 index 0000000..56ac223 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_porter.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_porter.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_portuguese.h b/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_portuguese.h new file mode 120000 index 0000000..e13a4ee --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_portuguese.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_portuguese.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_russian.h b/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_russian.h new file mode 120000 index 0000000..d0f3ae7 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_russian.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_russian.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_spanish.h b/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_spanish.h new file mode 120000 index 0000000..4ef22ae --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_spanish.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_spanish.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_swedish.h b/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_swedish.h new file mode 120000 index 0000000..941252b --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_swedish.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_swedish.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/store/Directory.h b/Pods/Headers/Private/BRCLucene/CLucene/store/Directory.h new file mode 120000 index 0000000..a7ee9fd --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/store/Directory.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/store/Directory.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/store/FSDirectory.h b/Pods/Headers/Private/BRCLucene/CLucene/store/FSDirectory.h new file mode 120000 index 0000000..8c2ed46 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/store/FSDirectory.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/store/FSDirectory.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/store/IndexInput.h b/Pods/Headers/Private/BRCLucene/CLucene/store/IndexInput.h new file mode 120000 index 0000000..60c84ee --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/store/IndexInput.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/store/IndexInput.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/store/IndexOutput.h b/Pods/Headers/Private/BRCLucene/CLucene/store/IndexOutput.h new file mode 120000 index 0000000..eca18f8 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/store/IndexOutput.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/store/IndexOutput.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/store/Lock.h b/Pods/Headers/Private/BRCLucene/CLucene/store/Lock.h new file mode 120000 index 0000000..7517270 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/store/Lock.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/store/Lock.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/store/LockFactory.h b/Pods/Headers/Private/BRCLucene/CLucene/store/LockFactory.h new file mode 120000 index 0000000..0610a0c --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/store/LockFactory.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/store/LockFactory.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/store/RAMDirectory.h b/Pods/Headers/Private/BRCLucene/CLucene/store/RAMDirectory.h new file mode 120000 index 0000000..e049713 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/store/RAMDirectory.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/store/RAMDirectory.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/store/_Lock.h b/Pods/Headers/Private/BRCLucene/CLucene/store/_Lock.h new file mode 120000 index 0000000..e0bcdb9 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/store/_Lock.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/store/_Lock.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/store/_MMapIndexInput.h b/Pods/Headers/Private/BRCLucene/CLucene/store/_MMapIndexInput.h new file mode 120000 index 0000000..222c25d --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/store/_MMapIndexInput.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/store/_MMapIndexInput.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/store/_RAMDirectory.h b/Pods/Headers/Private/BRCLucene/CLucene/store/_RAMDirectory.h new file mode 120000 index 0000000..392d6be --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/store/_RAMDirectory.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/store/_RAMDirectory.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/util/Array.h b/Pods/Headers/Private/BRCLucene/CLucene/util/Array.h new file mode 120000 index 0000000..b8a4b40 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/util/Array.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/util/Array.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/util/BitSet.h b/Pods/Headers/Private/BRCLucene/CLucene/util/BitSet.h new file mode 120000 index 0000000..b7b8811 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/util/BitSet.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/util/BitSet.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/util/CLStreams.h b/Pods/Headers/Private/BRCLucene/CLucene/util/CLStreams.h new file mode 120000 index 0000000..c1b3d84 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/util/CLStreams.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/util/CLStreams.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/util/Equators.h b/Pods/Headers/Private/BRCLucene/CLucene/util/Equators.h new file mode 120000 index 0000000..d162080 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/util/Equators.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/util/Equators.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/util/Misc.h b/Pods/Headers/Private/BRCLucene/CLucene/util/Misc.h new file mode 120000 index 0000000..8020dc5 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/util/Misc.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/shared/CLucene/util/Misc.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/util/PriorityQueue.h b/Pods/Headers/Private/BRCLucene/CLucene/util/PriorityQueue.h new file mode 120000 index 0000000..748c9e8 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/util/PriorityQueue.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/util/PriorityQueue.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/util/Reader.h b/Pods/Headers/Private/BRCLucene/CLucene/util/Reader.h new file mode 120000 index 0000000..ccb3d69 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/util/Reader.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/util/Reader.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/util/StringBuffer.h b/Pods/Headers/Private/BRCLucene/CLucene/util/StringBuffer.h new file mode 120000 index 0000000..f8490d2 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/util/StringBuffer.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/shared/CLucene/util/StringBuffer.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/util/VoidList.h b/Pods/Headers/Private/BRCLucene/CLucene/util/VoidList.h new file mode 120000 index 0000000..566742b --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/util/VoidList.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/util/VoidList.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/util/VoidMap.h b/Pods/Headers/Private/BRCLucene/CLucene/util/VoidMap.h new file mode 120000 index 0000000..8beee74 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/util/VoidMap.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/util/VoidMap.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/util/_Arrays.h b/Pods/Headers/Private/BRCLucene/CLucene/util/_Arrays.h new file mode 120000 index 0000000..4962a5d --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/util/_Arrays.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/util/_Arrays.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/util/_FastCharStream.h b/Pods/Headers/Private/BRCLucene/CLucene/util/_FastCharStream.h new file mode 120000 index 0000000..bdcaed0 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/util/_FastCharStream.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/util/_FastCharStream.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/util/_MD5Digester.h b/Pods/Headers/Private/BRCLucene/CLucene/util/_MD5Digester.h new file mode 120000 index 0000000..57e6c85 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/util/_MD5Digester.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/util/_MD5Digester.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/util/_StringIntern.h b/Pods/Headers/Private/BRCLucene/CLucene/util/_StringIntern.h new file mode 120000 index 0000000..31d897a --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/util/_StringIntern.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/util/_StringIntern.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/util/_ThreadLocal.h b/Pods/Headers/Private/BRCLucene/CLucene/util/_ThreadLocal.h new file mode 120000 index 0000000..431d8f8 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/util/_ThreadLocal.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/util/_ThreadLocal.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/util/_VoidList.h b/Pods/Headers/Private/BRCLucene/CLucene/util/_VoidList.h new file mode 120000 index 0000000..c1a34f3 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/util/_VoidList.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/util/_VoidList.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/util/_VoidMap.h b/Pods/Headers/Private/BRCLucene/CLucene/util/_VoidMap.h new file mode 120000 index 0000000..1d9f0c8 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/util/_VoidMap.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/util/_VoidMap.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/util/_bufferedstream.h b/Pods/Headers/Private/BRCLucene/CLucene/util/_bufferedstream.h new file mode 120000 index 0000000..8e2e32d --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/util/_bufferedstream.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/util/_bufferedstream.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/util/_dirent.h b/Pods/Headers/Private/BRCLucene/CLucene/util/_dirent.h new file mode 120000 index 0000000..cc8140f --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/util/_dirent.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/shared/CLucene/util/_dirent.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/util/_streambase.h b/Pods/Headers/Private/BRCLucene/CLucene/util/_streambase.h new file mode 120000 index 0000000..188d8fa --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/util/_streambase.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/util/_streambase.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/util/_streambuffer.h b/Pods/Headers/Private/BRCLucene/CLucene/util/_streambuffer.h new file mode 120000 index 0000000..9eec76a --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/util/_streambuffer.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/util/_streambuffer.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/util/arrayinputstream.h b/Pods/Headers/Private/BRCLucene/CLucene/util/arrayinputstream.h new file mode 120000 index 0000000..0fae9b6 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/util/arrayinputstream.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/util/arrayinputstream.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/util/byteinputstream.h b/Pods/Headers/Private/BRCLucene/CLucene/util/byteinputstream.h new file mode 120000 index 0000000..8dc8d98 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/util/byteinputstream.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/util/byteinputstream.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/util/gzipcompressstream.h b/Pods/Headers/Private/BRCLucene/CLucene/util/gzipcompressstream.h new file mode 120000 index 0000000..adb6a93 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/util/gzipcompressstream.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/util/gzipcompressstream.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/util/gzipinputstream.h b/Pods/Headers/Private/BRCLucene/CLucene/util/gzipinputstream.h new file mode 120000 index 0000000..1fb5187 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/util/gzipinputstream.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/util/gzipinputstream.h \ No newline at end of file diff --git a/Pods/Headers/Private/BRCLucene/CLucene/util/streamarray.h b/Pods/Headers/Private/BRCLucene/CLucene/util/streamarray.h new file mode 120000 index 0000000..8aba544 --- /dev/null +++ b/Pods/Headers/Private/BRCLucene/CLucene/util/streamarray.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/util/streamarray.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene.h b/Pods/Headers/Public/BRCLucene/CLucene.h new file mode 120000 index 0000000..1056795 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene.h @@ -0,0 +1 @@ +../../../BRCLucene/src/core/CLucene.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/CLConfig.h b/Pods/Headers/Public/BRCLucene/CLucene/CLConfig.h new file mode 120000 index 0000000..41e1b76 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/CLConfig.h @@ -0,0 +1 @@ +../../../../BRCLucene/src/core/CLucene/CLConfig.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/LuceneThreads.h b/Pods/Headers/Public/BRCLucene/CLucene/LuceneThreads.h new file mode 120000 index 0000000..207aab5 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/LuceneThreads.h @@ -0,0 +1 @@ +../../../../BRCLucene/src/shared/CLucene/LuceneThreads.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/SharedHeader.h b/Pods/Headers/Public/BRCLucene/CLucene/SharedHeader.h new file mode 120000 index 0000000..7e381f7 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/SharedHeader.h @@ -0,0 +1 @@ +../../../../BRCLucene/src/shared/CLucene/SharedHeader.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/StdHeader.h b/Pods/Headers/Public/BRCLucene/CLucene/StdHeader.h new file mode 120000 index 0000000..26bfabd --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/StdHeader.h @@ -0,0 +1 @@ +../../../../BRCLucene/src/core/CLucene/StdHeader.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/_ApiHeader.h b/Pods/Headers/Public/BRCLucene/CLucene/_ApiHeader.h new file mode 120000 index 0000000..3c06bf3 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/_ApiHeader.h @@ -0,0 +1 @@ +../../../../BRCLucene/src/core/CLucene/_ApiHeader.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/_SharedHeader.h b/Pods/Headers/Public/BRCLucene/CLucene/_SharedHeader.h new file mode 120000 index 0000000..bff44ba --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/_SharedHeader.h @@ -0,0 +1 @@ +../../../../BRCLucene/src/shared/CLucene/_SharedHeader.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/_clucene-config.h b/Pods/Headers/Public/BRCLucene/CLucene/_clucene-config.h new file mode 120000 index 0000000..952c43c --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/_clucene-config.h @@ -0,0 +1 @@ +../../../../BRCLucene/BRCLucene/src/CLucene/_clucene-config.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/analysis/AnalysisHeader.h b/Pods/Headers/Public/BRCLucene/CLucene/analysis/AnalysisHeader.h new file mode 120000 index 0000000..e054134 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/analysis/AnalysisHeader.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/analysis/AnalysisHeader.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/analysis/Analyzers.h b/Pods/Headers/Public/BRCLucene/CLucene/analysis/Analyzers.h new file mode 120000 index 0000000..8592491 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/analysis/Analyzers.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/analysis/Analyzers.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/analysis/CachingTokenFilter.h b/Pods/Headers/Public/BRCLucene/CLucene/analysis/CachingTokenFilter.h new file mode 120000 index 0000000..64d815d --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/analysis/CachingTokenFilter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/analysis/CachingTokenFilter.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/analysis/LanguageBasedAnalyzer.h b/Pods/Headers/Public/BRCLucene/CLucene/analysis/LanguageBasedAnalyzer.h new file mode 120000 index 0000000..49b200f --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/analysis/LanguageBasedAnalyzer.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/analysis/LanguageBasedAnalyzer.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/analysis/PorterStemmer.h b/Pods/Headers/Public/BRCLucene/CLucene/analysis/PorterStemmer.h new file mode 120000 index 0000000..2dac27e --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/analysis/PorterStemmer.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/analysis/PorterStemmer.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/analysis/cjk/CJKAnalyzer.h b/Pods/Headers/Public/BRCLucene/CLucene/analysis/cjk/CJKAnalyzer.h new file mode 120000 index 0000000..3c3e644 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/analysis/cjk/CJKAnalyzer.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/analysis/cjk/CJKAnalyzer.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/analysis/de/GermanAnalyzer.h b/Pods/Headers/Public/BRCLucene/CLucene/analysis/de/GermanAnalyzer.h new file mode 120000 index 0000000..a85f2e7 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/analysis/de/GermanAnalyzer.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/analysis/de/GermanAnalyzer.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/analysis/de/GermanStemFilter.h b/Pods/Headers/Public/BRCLucene/CLucene/analysis/de/GermanStemFilter.h new file mode 120000 index 0000000..0609efd --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/analysis/de/GermanStemFilter.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/analysis/de/GermanStemFilter.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/analysis/de/GermanStemmer.h b/Pods/Headers/Public/BRCLucene/CLucene/analysis/de/GermanStemmer.h new file mode 120000 index 0000000..0b8b46e --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/analysis/de/GermanStemmer.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/analysis/de/GermanStemmer.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/analysis/standard/StandardAnalyzer.h b/Pods/Headers/Public/BRCLucene/CLucene/analysis/standard/StandardAnalyzer.h new file mode 120000 index 0000000..3aad2ae --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/analysis/standard/StandardAnalyzer.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/core/CLucene/analysis/standard/StandardAnalyzer.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/analysis/standard/StandardFilter.h b/Pods/Headers/Public/BRCLucene/CLucene/analysis/standard/StandardFilter.h new file mode 120000 index 0000000..720f637 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/analysis/standard/StandardFilter.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/core/CLucene/analysis/standard/StandardFilter.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/analysis/standard/StandardTokenizer.h b/Pods/Headers/Public/BRCLucene/CLucene/analysis/standard/StandardTokenizer.h new file mode 120000 index 0000000..8585feb --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/analysis/standard/StandardTokenizer.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/core/CLucene/analysis/standard/StandardTokenizer.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/analysis/standard/StandardTokenizerConstants.h b/Pods/Headers/Public/BRCLucene/CLucene/analysis/standard/StandardTokenizerConstants.h new file mode 120000 index 0000000..775ea81 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/analysis/standard/StandardTokenizerConstants.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/core/CLucene/analysis/standard/StandardTokenizerConstants.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/clucene-config.h b/Pods/Headers/Public/BRCLucene/CLucene/clucene-config.h new file mode 120000 index 0000000..06186b8 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/clucene-config.h @@ -0,0 +1 @@ +../../../../BRCLucene/BRCLucene/src/CLucene/clucene-config.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/config/_gunichartables.h b/Pods/Headers/Public/BRCLucene/CLucene/config/_gunichartables.h new file mode 120000 index 0000000..27b1cfb --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/config/_gunichartables.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/shared/CLucene/config/_gunichartables.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/config/_threads.h b/Pods/Headers/Public/BRCLucene/CLucene/config/_threads.h new file mode 120000 index 0000000..c53c77d --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/config/_threads.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/shared/CLucene/config/_threads.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/config/repl_tchar.h b/Pods/Headers/Public/BRCLucene/CLucene/config/repl_tchar.h new file mode 120000 index 0000000..5a5ab82 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/config/repl_tchar.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/shared/CLucene/config/repl_tchar.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/config/repl_wchar.h b/Pods/Headers/Public/BRCLucene/CLucene/config/repl_wchar.h new file mode 120000 index 0000000..2b9a714 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/config/repl_wchar.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/shared/CLucene/config/repl_wchar.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/config/repl_wctype.h b/Pods/Headers/Public/BRCLucene/CLucene/config/repl_wctype.h new file mode 120000 index 0000000..af337f9 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/config/repl_wctype.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/shared/CLucene/config/repl_wctype.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/debug/_condition.h b/Pods/Headers/Public/BRCLucene/CLucene/debug/_condition.h new file mode 120000 index 0000000..e83cad2 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/debug/_condition.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/shared/CLucene/debug/_condition.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/debug/error.h b/Pods/Headers/Public/BRCLucene/CLucene/debug/error.h new file mode 120000 index 0000000..4c85225 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/debug/error.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/debug/error.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/debug/lucenebase.h b/Pods/Headers/Public/BRCLucene/CLucene/debug/lucenebase.h new file mode 120000 index 0000000..fc701c7 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/debug/lucenebase.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/debug/lucenebase.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/debug/mem.h b/Pods/Headers/Public/BRCLucene/CLucene/debug/mem.h new file mode 120000 index 0000000..a4ff6c6 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/debug/mem.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/debug/mem.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/document/DateField.h b/Pods/Headers/Public/BRCLucene/CLucene/document/DateField.h new file mode 120000 index 0000000..f200176 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/document/DateField.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/document/DateField.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/document/DateTools.h b/Pods/Headers/Public/BRCLucene/CLucene/document/DateTools.h new file mode 120000 index 0000000..02ced4a --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/document/DateTools.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/document/DateTools.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/document/Document.h b/Pods/Headers/Public/BRCLucene/CLucene/document/Document.h new file mode 120000 index 0000000..9c3440a --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/document/Document.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/document/Document.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/document/Field.h b/Pods/Headers/Public/BRCLucene/CLucene/document/Field.h new file mode 120000 index 0000000..484fa30 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/document/Field.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/document/Field.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/document/FieldSelector.h b/Pods/Headers/Public/BRCLucene/CLucene/document/FieldSelector.h new file mode 120000 index 0000000..5313ddf --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/document/FieldSelector.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/document/FieldSelector.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/document/NumberTools.h b/Pods/Headers/Public/BRCLucene/CLucene/document/NumberTools.h new file mode 120000 index 0000000..5d5e3f4 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/document/NumberTools.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/document/NumberTools.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/highlighter/Encoder.h b/Pods/Headers/Public/BRCLucene/CLucene/highlighter/Encoder.h new file mode 120000 index 0000000..8f708c2 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/highlighter/Encoder.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/highlighter/Encoder.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/highlighter/Formatter.h b/Pods/Headers/Public/BRCLucene/CLucene/highlighter/Formatter.h new file mode 120000 index 0000000..392096c --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/highlighter/Formatter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/highlighter/Formatter.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/highlighter/Fragmenter.h b/Pods/Headers/Public/BRCLucene/CLucene/highlighter/Fragmenter.h new file mode 120000 index 0000000..ae47a4a --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/highlighter/Fragmenter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/highlighter/Fragmenter.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/highlighter/HighlightScorer.h b/Pods/Headers/Public/BRCLucene/CLucene/highlighter/HighlightScorer.h new file mode 120000 index 0000000..7202793 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/highlighter/HighlightScorer.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/highlighter/HighlightScorer.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/highlighter/Highlighter.h b/Pods/Headers/Public/BRCLucene/CLucene/highlighter/Highlighter.h new file mode 120000 index 0000000..3f143aa --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/highlighter/Highlighter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/highlighter/Highlighter.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/highlighter/QueryScorer.h b/Pods/Headers/Public/BRCLucene/CLucene/highlighter/QueryScorer.h new file mode 120000 index 0000000..f958c6e --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/highlighter/QueryScorer.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/highlighter/QueryScorer.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/highlighter/QueryTermExtractor.h b/Pods/Headers/Public/BRCLucene/CLucene/highlighter/QueryTermExtractor.h new file mode 120000 index 0000000..5c61bf0 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/highlighter/QueryTermExtractor.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/highlighter/QueryTermExtractor.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/highlighter/Scorer.h b/Pods/Headers/Public/BRCLucene/CLucene/highlighter/Scorer.h new file mode 120000 index 0000000..5fb1048 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/highlighter/Scorer.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/highlighter/Scorer.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/highlighter/SimpleFragmenter.h b/Pods/Headers/Public/BRCLucene/CLucene/highlighter/SimpleFragmenter.h new file mode 120000 index 0000000..51798bf --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/highlighter/SimpleFragmenter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/highlighter/SimpleFragmenter.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/highlighter/SimpleHTMLEncoder.h b/Pods/Headers/Public/BRCLucene/CLucene/highlighter/SimpleHTMLEncoder.h new file mode 120000 index 0000000..25eeb58 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/highlighter/SimpleHTMLEncoder.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/highlighter/SimpleHTMLEncoder.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/highlighter/SimpleHTMLFormatter.h b/Pods/Headers/Public/BRCLucene/CLucene/highlighter/SimpleHTMLFormatter.h new file mode 120000 index 0000000..a744a7e --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/highlighter/SimpleHTMLFormatter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/highlighter/SimpleHTMLFormatter.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/highlighter/TextFragment.h b/Pods/Headers/Public/BRCLucene/CLucene/highlighter/TextFragment.h new file mode 120000 index 0000000..30d141d --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/highlighter/TextFragment.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/highlighter/TextFragment.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/highlighter/TokenGroup.h b/Pods/Headers/Public/BRCLucene/CLucene/highlighter/TokenGroup.h new file mode 120000 index 0000000..936a9a1 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/highlighter/TokenGroup.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/highlighter/TokenGroup.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/highlighter/TokenSources.h b/Pods/Headers/Public/BRCLucene/CLucene/highlighter/TokenSources.h new file mode 120000 index 0000000..4bea214 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/highlighter/TokenSources.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/highlighter/TokenSources.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/highlighter/WeightedTerm.h b/Pods/Headers/Public/BRCLucene/CLucene/highlighter/WeightedTerm.h new file mode 120000 index 0000000..0e569c7 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/highlighter/WeightedTerm.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/highlighter/WeightedTerm.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/index/DirectoryIndexReader.h b/Pods/Headers/Public/BRCLucene/CLucene/index/DirectoryIndexReader.h new file mode 120000 index 0000000..5c66ed7 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/index/DirectoryIndexReader.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/DirectoryIndexReader.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/index/IndexDeletionPolicy.h b/Pods/Headers/Public/BRCLucene/CLucene/index/IndexDeletionPolicy.h new file mode 120000 index 0000000..23edcc1 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/index/IndexDeletionPolicy.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/IndexDeletionPolicy.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/index/IndexModifier.h b/Pods/Headers/Public/BRCLucene/CLucene/index/IndexModifier.h new file mode 120000 index 0000000..0d73888 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/index/IndexModifier.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/IndexModifier.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/index/IndexReader.h b/Pods/Headers/Public/BRCLucene/CLucene/index/IndexReader.h new file mode 120000 index 0000000..aec2c7f --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/index/IndexReader.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/IndexReader.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/index/IndexWriter.h b/Pods/Headers/Public/BRCLucene/CLucene/index/IndexWriter.h new file mode 120000 index 0000000..9a697be --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/index/IndexWriter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/IndexWriter.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/index/MergePolicy.h b/Pods/Headers/Public/BRCLucene/CLucene/index/MergePolicy.h new file mode 120000 index 0000000..3d5f73a --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/index/MergePolicy.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/MergePolicy.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/index/MergeScheduler.h b/Pods/Headers/Public/BRCLucene/CLucene/index/MergeScheduler.h new file mode 120000 index 0000000..69732ad --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/index/MergeScheduler.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/MergeScheduler.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/index/MultiReader.h b/Pods/Headers/Public/BRCLucene/CLucene/index/MultiReader.h new file mode 120000 index 0000000..2db408a --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/index/MultiReader.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/MultiReader.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/index/MultipleTermPositions.h b/Pods/Headers/Public/BRCLucene/CLucene/index/MultipleTermPositions.h new file mode 120000 index 0000000..7917a1d --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/index/MultipleTermPositions.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/MultipleTermPositions.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/index/Payload.h b/Pods/Headers/Public/BRCLucene/CLucene/index/Payload.h new file mode 120000 index 0000000..3815610 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/index/Payload.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/Payload.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/index/Term.h b/Pods/Headers/Public/BRCLucene/CLucene/index/Term.h new file mode 120000 index 0000000..8ee534f --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/index/Term.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/Term.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/index/TermVector.h b/Pods/Headers/Public/BRCLucene/CLucene/index/TermVector.h new file mode 120000 index 0000000..71038d1 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/index/TermVector.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/TermVector.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/index/Terms.h b/Pods/Headers/Public/BRCLucene/CLucene/index/Terms.h new file mode 120000 index 0000000..1c2f3e5 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/index/Terms.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/Terms.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/index/_CompoundFile.h b/Pods/Headers/Public/BRCLucene/CLucene/index/_CompoundFile.h new file mode 120000 index 0000000..3c2fcd8 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/index/_CompoundFile.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_CompoundFile.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/index/_DocumentsWriter.h b/Pods/Headers/Public/BRCLucene/CLucene/index/_DocumentsWriter.h new file mode 120000 index 0000000..70e4e2a --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/index/_DocumentsWriter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_DocumentsWriter.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/index/_FieldInfo.h b/Pods/Headers/Public/BRCLucene/CLucene/index/_FieldInfo.h new file mode 120000 index 0000000..d066778 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/index/_FieldInfo.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_FieldInfo.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/index/_FieldInfos.h b/Pods/Headers/Public/BRCLucene/CLucene/index/_FieldInfos.h new file mode 120000 index 0000000..fef477b --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/index/_FieldInfos.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_FieldInfos.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/index/_FieldsReader.h b/Pods/Headers/Public/BRCLucene/CLucene/index/_FieldsReader.h new file mode 120000 index 0000000..42acd3b --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/index/_FieldsReader.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_FieldsReader.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/index/_FieldsWriter.h b/Pods/Headers/Public/BRCLucene/CLucene/index/_FieldsWriter.h new file mode 120000 index 0000000..a894b57 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/index/_FieldsWriter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_FieldsWriter.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/index/_IndexFileDeleter.h b/Pods/Headers/Public/BRCLucene/CLucene/index/_IndexFileDeleter.h new file mode 120000 index 0000000..fd2767f --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/index/_IndexFileDeleter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_IndexFileDeleter.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/index/_IndexFileNameFilter.h b/Pods/Headers/Public/BRCLucene/CLucene/index/_IndexFileNameFilter.h new file mode 120000 index 0000000..7b314da --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/index/_IndexFileNameFilter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_IndexFileNameFilter.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/index/_IndexFileNames.h b/Pods/Headers/Public/BRCLucene/CLucene/index/_IndexFileNames.h new file mode 120000 index 0000000..84f3bd1 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/index/_IndexFileNames.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_IndexFileNames.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/index/_MultiSegmentReader.h b/Pods/Headers/Public/BRCLucene/CLucene/index/_MultiSegmentReader.h new file mode 120000 index 0000000..51de9d9 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/index/_MultiSegmentReader.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_MultiSegmentReader.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/index/_SegmentHeader.h b/Pods/Headers/Public/BRCLucene/CLucene/index/_SegmentHeader.h new file mode 120000 index 0000000..4404cae --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/index/_SegmentHeader.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_SegmentHeader.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/index/_SegmentInfos.h b/Pods/Headers/Public/BRCLucene/CLucene/index/_SegmentInfos.h new file mode 120000 index 0000000..f9a5537 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/index/_SegmentInfos.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_SegmentInfos.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/index/_SegmentMergeInfo.h b/Pods/Headers/Public/BRCLucene/CLucene/index/_SegmentMergeInfo.h new file mode 120000 index 0000000..4a4184a --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/index/_SegmentMergeInfo.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_SegmentMergeInfo.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/index/_SegmentMergeQueue.h b/Pods/Headers/Public/BRCLucene/CLucene/index/_SegmentMergeQueue.h new file mode 120000 index 0000000..0fdafbc --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/index/_SegmentMergeQueue.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_SegmentMergeQueue.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/index/_SegmentMerger.h b/Pods/Headers/Public/BRCLucene/CLucene/index/_SegmentMerger.h new file mode 120000 index 0000000..bc1dd8b --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/index/_SegmentMerger.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_SegmentMerger.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/index/_SegmentTermEnum.h b/Pods/Headers/Public/BRCLucene/CLucene/index/_SegmentTermEnum.h new file mode 120000 index 0000000..002720a --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/index/_SegmentTermEnum.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_SegmentTermEnum.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/index/_SkipListReader.h b/Pods/Headers/Public/BRCLucene/CLucene/index/_SkipListReader.h new file mode 120000 index 0000000..6b8a8b0 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/index/_SkipListReader.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_SkipListReader.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/index/_SkipListWriter.h b/Pods/Headers/Public/BRCLucene/CLucene/index/_SkipListWriter.h new file mode 120000 index 0000000..17cf80c --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/index/_SkipListWriter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_SkipListWriter.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/index/_Term.h b/Pods/Headers/Public/BRCLucene/CLucene/index/_Term.h new file mode 120000 index 0000000..ca676c4 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/index/_Term.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_Term.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/index/_TermInfo.h b/Pods/Headers/Public/BRCLucene/CLucene/index/_TermInfo.h new file mode 120000 index 0000000..3c59195 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/index/_TermInfo.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_TermInfo.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/index/_TermInfosReader.h b/Pods/Headers/Public/BRCLucene/CLucene/index/_TermInfosReader.h new file mode 120000 index 0000000..5f137ef --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/index/_TermInfosReader.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_TermInfosReader.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/index/_TermInfosWriter.h b/Pods/Headers/Public/BRCLucene/CLucene/index/_TermInfosWriter.h new file mode 120000 index 0000000..bf590b0 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/index/_TermInfosWriter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_TermInfosWriter.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/index/_TermVector.h b/Pods/Headers/Public/BRCLucene/CLucene/index/_TermVector.h new file mode 120000 index 0000000..f1ee6f4 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/index/_TermVector.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_TermVector.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/queryParser/MultiFieldQueryParser.h b/Pods/Headers/Public/BRCLucene/CLucene/queryParser/MultiFieldQueryParser.h new file mode 120000 index 0000000..b9525c1 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/queryParser/MultiFieldQueryParser.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/queryParser/MultiFieldQueryParser.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/queryParser/QueryParser.h b/Pods/Headers/Public/BRCLucene/CLucene/queryParser/QueryParser.h new file mode 120000 index 0000000..23f0ac7 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/queryParser/QueryParser.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/queryParser/QueryParser.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/queryParser/QueryParserConstants.h b/Pods/Headers/Public/BRCLucene/CLucene/queryParser/QueryParserConstants.h new file mode 120000 index 0000000..d727749 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/queryParser/QueryParserConstants.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/queryParser/QueryParserConstants.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/queryParser/QueryParserTokenManager.h b/Pods/Headers/Public/BRCLucene/CLucene/queryParser/QueryParserTokenManager.h new file mode 120000 index 0000000..4c74b81 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/queryParser/QueryParserTokenManager.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/queryParser/QueryParserTokenManager.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/queryParser/QueryToken.h b/Pods/Headers/Public/BRCLucene/CLucene/queryParser/QueryToken.h new file mode 120000 index 0000000..67b9604 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/queryParser/QueryToken.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/queryParser/QueryToken.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/queryParser/_CharStream.h b/Pods/Headers/Public/BRCLucene/CLucene/queryParser/_CharStream.h new file mode 120000 index 0000000..3030f3b --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/queryParser/_CharStream.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/queryParser/_CharStream.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/queryParser/_FastCharStream.h b/Pods/Headers/Public/BRCLucene/CLucene/queryParser/_FastCharStream.h new file mode 120000 index 0000000..37e3f74 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/queryParser/_FastCharStream.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/queryParser/_FastCharStream.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/search/BooleanClause.h b/Pods/Headers/Public/BRCLucene/CLucene/search/BooleanClause.h new file mode 120000 index 0000000..944d581 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/search/BooleanClause.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/BooleanClause.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/search/BooleanQuery.h b/Pods/Headers/Public/BRCLucene/CLucene/search/BooleanQuery.h new file mode 120000 index 0000000..c684d29 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/search/BooleanQuery.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/BooleanQuery.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/search/CachingSpanFilter.h b/Pods/Headers/Public/BRCLucene/CLucene/search/CachingSpanFilter.h new file mode 120000 index 0000000..58b93f6 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/search/CachingSpanFilter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/CachingSpanFilter.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/search/CachingWrapperFilter.h b/Pods/Headers/Public/BRCLucene/CLucene/search/CachingWrapperFilter.h new file mode 120000 index 0000000..90a1e09 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/search/CachingWrapperFilter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/CachingWrapperFilter.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/search/ChainedFilter.h b/Pods/Headers/Public/BRCLucene/CLucene/search/ChainedFilter.h new file mode 120000 index 0000000..d7c536c --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/search/ChainedFilter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/ChainedFilter.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/search/Compare.h b/Pods/Headers/Public/BRCLucene/CLucene/search/Compare.h new file mode 120000 index 0000000..d226478 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/search/Compare.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/Compare.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/search/ConstantScoreQuery.h b/Pods/Headers/Public/BRCLucene/CLucene/search/ConstantScoreQuery.h new file mode 120000 index 0000000..bf45e1c --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/search/ConstantScoreQuery.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/ConstantScoreQuery.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/search/DateFilter.h b/Pods/Headers/Public/BRCLucene/CLucene/search/DateFilter.h new file mode 120000 index 0000000..f346984 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/search/DateFilter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/DateFilter.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/search/Explanation.h b/Pods/Headers/Public/BRCLucene/CLucene/search/Explanation.h new file mode 120000 index 0000000..d658350 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/search/Explanation.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/Explanation.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/search/FieldCache.h b/Pods/Headers/Public/BRCLucene/CLucene/search/FieldCache.h new file mode 120000 index 0000000..c5cfe49 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/search/FieldCache.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/FieldCache.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/search/FieldDoc.h b/Pods/Headers/Public/BRCLucene/CLucene/search/FieldDoc.h new file mode 120000 index 0000000..db06ecb --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/search/FieldDoc.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/FieldDoc.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/search/FieldSortedHitQueue.h b/Pods/Headers/Public/BRCLucene/CLucene/search/FieldSortedHitQueue.h new file mode 120000 index 0000000..81f498b --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/search/FieldSortedHitQueue.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/FieldSortedHitQueue.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/search/Filter.h b/Pods/Headers/Public/BRCLucene/CLucene/search/Filter.h new file mode 120000 index 0000000..701d25a --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/search/Filter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/Filter.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/search/FilteredTermEnum.h b/Pods/Headers/Public/BRCLucene/CLucene/search/FilteredTermEnum.h new file mode 120000 index 0000000..9c670e1 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/search/FilteredTermEnum.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/FilteredTermEnum.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/search/FuzzyQuery.h b/Pods/Headers/Public/BRCLucene/CLucene/search/FuzzyQuery.h new file mode 120000 index 0000000..4c553bf --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/search/FuzzyQuery.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/FuzzyQuery.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/search/Hits.h b/Pods/Headers/Public/BRCLucene/CLucene/search/Hits.h new file mode 120000 index 0000000..e6321cf --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/search/Hits.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/Hits.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/search/IndexSearcher.h b/Pods/Headers/Public/BRCLucene/CLucene/search/IndexSearcher.h new file mode 120000 index 0000000..aff1ec2 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/search/IndexSearcher.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/IndexSearcher.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/search/MatchAllDocsQuery.h b/Pods/Headers/Public/BRCLucene/CLucene/search/MatchAllDocsQuery.h new file mode 120000 index 0000000..bfeda5f --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/search/MatchAllDocsQuery.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/MatchAllDocsQuery.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/search/MultiPhraseQuery.h b/Pods/Headers/Public/BRCLucene/CLucene/search/MultiPhraseQuery.h new file mode 120000 index 0000000..4601f59 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/search/MultiPhraseQuery.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/MultiPhraseQuery.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/search/MultiSearcher.h b/Pods/Headers/Public/BRCLucene/CLucene/search/MultiSearcher.h new file mode 120000 index 0000000..26b7692 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/search/MultiSearcher.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/MultiSearcher.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/search/MultiTermQuery.h b/Pods/Headers/Public/BRCLucene/CLucene/search/MultiTermQuery.h new file mode 120000 index 0000000..b04b339 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/search/MultiTermQuery.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/MultiTermQuery.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/search/PhraseQuery.h b/Pods/Headers/Public/BRCLucene/CLucene/search/PhraseQuery.h new file mode 120000 index 0000000..eec87f1 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/search/PhraseQuery.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/PhraseQuery.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/search/PrefixQuery.h b/Pods/Headers/Public/BRCLucene/CLucene/search/PrefixQuery.h new file mode 120000 index 0000000..4fb6eee --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/search/PrefixQuery.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/PrefixQuery.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/search/Query.h b/Pods/Headers/Public/BRCLucene/CLucene/search/Query.h new file mode 120000 index 0000000..041a836 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/search/Query.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/Query.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/search/QueryFilter.h b/Pods/Headers/Public/BRCLucene/CLucene/search/QueryFilter.h new file mode 120000 index 0000000..7daa032 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/search/QueryFilter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/QueryFilter.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/search/RangeFilter.h b/Pods/Headers/Public/BRCLucene/CLucene/search/RangeFilter.h new file mode 120000 index 0000000..21a3195 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/search/RangeFilter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/RangeFilter.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/search/RangeQuery.h b/Pods/Headers/Public/BRCLucene/CLucene/search/RangeQuery.h new file mode 120000 index 0000000..c92e12a --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/search/RangeQuery.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/RangeQuery.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/search/Scorer.h b/Pods/Headers/Public/BRCLucene/CLucene/search/Scorer.h new file mode 120000 index 0000000..214fd3e --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/search/Scorer.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/Scorer.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/search/ScorerDocQueue.h b/Pods/Headers/Public/BRCLucene/CLucene/search/ScorerDocQueue.h new file mode 120000 index 0000000..d4f058e --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/search/ScorerDocQueue.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/ScorerDocQueue.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/search/SearchHeader.h b/Pods/Headers/Public/BRCLucene/CLucene/search/SearchHeader.h new file mode 120000 index 0000000..9779f35 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/search/SearchHeader.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/SearchHeader.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/search/Searchable.h b/Pods/Headers/Public/BRCLucene/CLucene/search/Searchable.h new file mode 120000 index 0000000..4d2aa09 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/search/Searchable.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/Searchable.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/search/Similarity.h b/Pods/Headers/Public/BRCLucene/CLucene/search/Similarity.h new file mode 120000 index 0000000..3b238d4 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/search/Similarity.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/Similarity.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/search/Sort.h b/Pods/Headers/Public/BRCLucene/CLucene/search/Sort.h new file mode 120000 index 0000000..15816e1 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/search/Sort.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/Sort.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/search/SpanFilter.h b/Pods/Headers/Public/BRCLucene/CLucene/search/SpanFilter.h new file mode 120000 index 0000000..016615c --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/search/SpanFilter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/SpanFilter.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/search/SpanFilterResult.h b/Pods/Headers/Public/BRCLucene/CLucene/search/SpanFilterResult.h new file mode 120000 index 0000000..1fb2f5d --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/search/SpanFilterResult.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/SpanFilterResult.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/search/SpanQueryFilter.h b/Pods/Headers/Public/BRCLucene/CLucene/search/SpanQueryFilter.h new file mode 120000 index 0000000..089eea1 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/search/SpanQueryFilter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/SpanQueryFilter.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/search/TermQuery.h b/Pods/Headers/Public/BRCLucene/CLucene/search/TermQuery.h new file mode 120000 index 0000000..a7ae74d --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/search/TermQuery.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/TermQuery.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/search/WildcardQuery.h b/Pods/Headers/Public/BRCLucene/CLucene/search/WildcardQuery.h new file mode 120000 index 0000000..e2b7117 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/search/WildcardQuery.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/WildcardQuery.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/search/WildcardTermEnum.h b/Pods/Headers/Public/BRCLucene/CLucene/search/WildcardTermEnum.h new file mode 120000 index 0000000..ebb467b --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/search/WildcardTermEnum.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/WildcardTermEnum.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/search/_BooleanScorer.h b/Pods/Headers/Public/BRCLucene/CLucene/search/_BooleanScorer.h new file mode 120000 index 0000000..af79183 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/search/_BooleanScorer.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/_BooleanScorer.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/search/_BooleanScorer2.h b/Pods/Headers/Public/BRCLucene/CLucene/search/_BooleanScorer2.h new file mode 120000 index 0000000..7c51fc3 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/search/_BooleanScorer2.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/_BooleanScorer2.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/search/_ConjunctionScorer.h b/Pods/Headers/Public/BRCLucene/CLucene/search/_ConjunctionScorer.h new file mode 120000 index 0000000..05de6cd --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/search/_ConjunctionScorer.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/_ConjunctionScorer.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/search/_DisjunctionSumScorer.h b/Pods/Headers/Public/BRCLucene/CLucene/search/_DisjunctionSumScorer.h new file mode 120000 index 0000000..c0497b4 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/search/_DisjunctionSumScorer.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/_DisjunctionSumScorer.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/search/_ExactPhraseScorer.h b/Pods/Headers/Public/BRCLucene/CLucene/search/_ExactPhraseScorer.h new file mode 120000 index 0000000..41d028a --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/search/_ExactPhraseScorer.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/_ExactPhraseScorer.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/search/_FieldCacheImpl.h b/Pods/Headers/Public/BRCLucene/CLucene/search/_FieldCacheImpl.h new file mode 120000 index 0000000..c0e4403 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/search/_FieldCacheImpl.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/_FieldCacheImpl.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/search/_FieldDocSortedHitQueue.h b/Pods/Headers/Public/BRCLucene/CLucene/search/_FieldDocSortedHitQueue.h new file mode 120000 index 0000000..9def8d9 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/search/_FieldDocSortedHitQueue.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/_FieldDocSortedHitQueue.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/search/_HitQueue.h b/Pods/Headers/Public/BRCLucene/CLucene/search/_HitQueue.h new file mode 120000 index 0000000..1bc72aa --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/search/_HitQueue.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/_HitQueue.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/search/_PhrasePositions.h b/Pods/Headers/Public/BRCLucene/CLucene/search/_PhrasePositions.h new file mode 120000 index 0000000..b487ca4 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/search/_PhrasePositions.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/_PhrasePositions.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/search/_PhraseQueue.h b/Pods/Headers/Public/BRCLucene/CLucene/search/_PhraseQueue.h new file mode 120000 index 0000000..9d88eb8 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/search/_PhraseQueue.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/_PhraseQueue.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/search/_PhraseScorer.h b/Pods/Headers/Public/BRCLucene/CLucene/search/_PhraseScorer.h new file mode 120000 index 0000000..64c5309 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/search/_PhraseScorer.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/_PhraseScorer.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/search/_SloppyPhraseScorer.h b/Pods/Headers/Public/BRCLucene/CLucene/search/_SloppyPhraseScorer.h new file mode 120000 index 0000000..2c76b21 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/search/_SloppyPhraseScorer.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/_SloppyPhraseScorer.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/search/_TermScorer.h b/Pods/Headers/Public/BRCLucene/CLucene/search/_TermScorer.h new file mode 120000 index 0000000..728f66f --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/search/_TermScorer.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/_TermScorer.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/search/spans/SpanFirstQuery.h b/Pods/Headers/Public/BRCLucene/CLucene/search/spans/SpanFirstQuery.h new file mode 120000 index 0000000..8b33223 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/search/spans/SpanFirstQuery.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/core/CLucene/search/spans/SpanFirstQuery.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/search/spans/SpanNearQuery.h b/Pods/Headers/Public/BRCLucene/CLucene/search/spans/SpanNearQuery.h new file mode 120000 index 0000000..3ba0b89 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/search/spans/SpanNearQuery.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/core/CLucene/search/spans/SpanNearQuery.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/search/spans/SpanNotQuery.h b/Pods/Headers/Public/BRCLucene/CLucene/search/spans/SpanNotQuery.h new file mode 120000 index 0000000..0e6fe55 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/search/spans/SpanNotQuery.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/core/CLucene/search/spans/SpanNotQuery.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/search/spans/SpanOrQuery.h b/Pods/Headers/Public/BRCLucene/CLucene/search/spans/SpanOrQuery.h new file mode 120000 index 0000000..6fa5608 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/search/spans/SpanOrQuery.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/core/CLucene/search/spans/SpanOrQuery.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/search/spans/SpanQuery.h b/Pods/Headers/Public/BRCLucene/CLucene/search/spans/SpanQuery.h new file mode 120000 index 0000000..68ee308 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/search/spans/SpanQuery.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/core/CLucene/search/spans/SpanQuery.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/search/spans/SpanScorer.h b/Pods/Headers/Public/BRCLucene/CLucene/search/spans/SpanScorer.h new file mode 120000 index 0000000..17bf74e --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/search/spans/SpanScorer.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/core/CLucene/search/spans/SpanScorer.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/search/spans/SpanTermQuery.h b/Pods/Headers/Public/BRCLucene/CLucene/search/spans/SpanTermQuery.h new file mode 120000 index 0000000..39f8484 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/search/spans/SpanTermQuery.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/core/CLucene/search/spans/SpanTermQuery.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/search/spans/SpanWeight.h b/Pods/Headers/Public/BRCLucene/CLucene/search/spans/SpanWeight.h new file mode 120000 index 0000000..ed11e43 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/search/spans/SpanWeight.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/core/CLucene/search/spans/SpanWeight.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/search/spans/Spans.h b/Pods/Headers/Public/BRCLucene/CLucene/search/spans/Spans.h new file mode 120000 index 0000000..0e6bc36 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/search/spans/Spans.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/core/CLucene/search/spans/Spans.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/search/spans/_EmptySpans.h b/Pods/Headers/Public/BRCLucene/CLucene/search/spans/_EmptySpans.h new file mode 120000 index 0000000..3306dd8 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/search/spans/_EmptySpans.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/core/CLucene/search/spans/_EmptySpans.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/search/spans/_NearSpansOrdered.h b/Pods/Headers/Public/BRCLucene/CLucene/search/spans/_NearSpansOrdered.h new file mode 120000 index 0000000..6ff53e3 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/search/spans/_NearSpansOrdered.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/core/CLucene/search/spans/_NearSpansOrdered.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/search/spans/_NearSpansUnordered.h b/Pods/Headers/Public/BRCLucene/CLucene/search/spans/_NearSpansUnordered.h new file mode 120000 index 0000000..578e834 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/search/spans/_NearSpansUnordered.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/core/CLucene/search/spans/_NearSpansUnordered.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/search/spans/_TermSpans.h b/Pods/Headers/Public/BRCLucene/CLucene/search/spans/_TermSpans.h new file mode 120000 index 0000000..5df50f3 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/search/spans/_TermSpans.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/core/CLucene/search/spans/_TermSpans.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/snowball/SnowballAnalyzer.h b/Pods/Headers/Public/BRCLucene/CLucene/snowball/SnowballAnalyzer.h new file mode 120000 index 0000000..df1c345 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/snowball/SnowballAnalyzer.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/SnowballAnalyzer.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/snowball/SnowballFilter.h b/Pods/Headers/Public/BRCLucene/CLucene/snowball/SnowballFilter.h new file mode 120000 index 0000000..8df9fd0 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/snowball/SnowballFilter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/SnowballFilter.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/snowball/include/libstemmer.h b/Pods/Headers/Public/BRCLucene/CLucene/snowball/include/libstemmer.h new file mode 120000 index 0000000..b1aa938 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/snowball/include/libstemmer.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/include/libstemmer.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/snowball/libstemmer.h b/Pods/Headers/Public/BRCLucene/CLucene/snowball/libstemmer.h new file mode 120000 index 0000000..51082f8 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/snowball/libstemmer.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/libstemmer.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/snowball/libstemmer/modules.h b/Pods/Headers/Public/BRCLucene/CLucene/snowball/libstemmer/modules.h new file mode 120000 index 0000000..fa1a1b8 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/snowball/libstemmer/modules.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/libstemmer/modules.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/snowball/runtime/api.h b/Pods/Headers/Public/BRCLucene/CLucene/snowball/runtime/api.h new file mode 120000 index 0000000..55a132e --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/snowball/runtime/api.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/runtime/api.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/snowball/runtime/header.h b/Pods/Headers/Public/BRCLucene/CLucene/snowball/runtime/header.h new file mode 120000 index 0000000..d057a30 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/snowball/runtime/header.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/runtime/header.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_danish.h b/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_danish.h new file mode 120000 index 0000000..481c19f --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_danish.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_danish.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_dutch.h b/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_dutch.h new file mode 120000 index 0000000..c53e039 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_dutch.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_dutch.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_english.h b/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_english.h new file mode 120000 index 0000000..828e651 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_english.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_english.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_finnish.h b/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_finnish.h new file mode 120000 index 0000000..5c85699 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_finnish.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_finnish.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_french.h b/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_french.h new file mode 120000 index 0000000..8579461 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_french.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_french.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_german.h b/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_german.h new file mode 120000 index 0000000..9b77b13 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_german.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_german.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_italian.h b/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_italian.h new file mode 120000 index 0000000..c748e1c --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_italian.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_italian.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_norwegian.h b/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_norwegian.h new file mode 120000 index 0000000..8807949 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_norwegian.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_norwegian.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_porter.h b/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_porter.h new file mode 120000 index 0000000..8af056e --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_porter.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_porter.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_portuguese.h b/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_portuguese.h new file mode 120000 index 0000000..e7b9b26 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_portuguese.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_portuguese.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_spanish.h b/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_spanish.h new file mode 120000 index 0000000..1f80c8c --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_spanish.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_spanish.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_swedish.h b/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_swedish.h new file mode 120000 index 0000000..946a29c --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_swedish.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_swedish.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_KOI8_R_russian.h b/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_KOI8_R_russian.h new file mode 120000 index 0000000..836b287 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_KOI8_R_russian.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_KOI8_R_russian.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_danish.h b/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_danish.h new file mode 120000 index 0000000..b6aa6b7 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_danish.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_danish.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_dutch.h b/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_dutch.h new file mode 120000 index 0000000..1259511 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_dutch.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_dutch.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_english.h b/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_english.h new file mode 120000 index 0000000..5d62fbb --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_english.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_english.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_finnish.h b/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_finnish.h new file mode 120000 index 0000000..15a68dd --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_finnish.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_finnish.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_french.h b/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_french.h new file mode 120000 index 0000000..1f93047 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_french.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_french.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_german.h b/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_german.h new file mode 120000 index 0000000..3be5731 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_german.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_german.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_italian.h b/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_italian.h new file mode 120000 index 0000000..8c3f3f4 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_italian.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_italian.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_norwegian.h b/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_norwegian.h new file mode 120000 index 0000000..d3d5a13 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_norwegian.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_norwegian.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_porter.h b/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_porter.h new file mode 120000 index 0000000..56ac223 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_porter.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_porter.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_portuguese.h b/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_portuguese.h new file mode 120000 index 0000000..e13a4ee --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_portuguese.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_portuguese.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_russian.h b/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_russian.h new file mode 120000 index 0000000..d0f3ae7 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_russian.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_russian.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_spanish.h b/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_spanish.h new file mode 120000 index 0000000..4ef22ae --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_spanish.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_spanish.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_swedish.h b/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_swedish.h new file mode 120000 index 0000000..941252b --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_swedish.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_swedish.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/store/Directory.h b/Pods/Headers/Public/BRCLucene/CLucene/store/Directory.h new file mode 120000 index 0000000..a7ee9fd --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/store/Directory.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/store/Directory.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/store/FSDirectory.h b/Pods/Headers/Public/BRCLucene/CLucene/store/FSDirectory.h new file mode 120000 index 0000000..8c2ed46 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/store/FSDirectory.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/store/FSDirectory.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/store/IndexInput.h b/Pods/Headers/Public/BRCLucene/CLucene/store/IndexInput.h new file mode 120000 index 0000000..60c84ee --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/store/IndexInput.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/store/IndexInput.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/store/IndexOutput.h b/Pods/Headers/Public/BRCLucene/CLucene/store/IndexOutput.h new file mode 120000 index 0000000..eca18f8 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/store/IndexOutput.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/store/IndexOutput.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/store/Lock.h b/Pods/Headers/Public/BRCLucene/CLucene/store/Lock.h new file mode 120000 index 0000000..7517270 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/store/Lock.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/store/Lock.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/store/LockFactory.h b/Pods/Headers/Public/BRCLucene/CLucene/store/LockFactory.h new file mode 120000 index 0000000..0610a0c --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/store/LockFactory.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/store/LockFactory.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/store/RAMDirectory.h b/Pods/Headers/Public/BRCLucene/CLucene/store/RAMDirectory.h new file mode 120000 index 0000000..e049713 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/store/RAMDirectory.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/store/RAMDirectory.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/store/_Lock.h b/Pods/Headers/Public/BRCLucene/CLucene/store/_Lock.h new file mode 120000 index 0000000..e0bcdb9 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/store/_Lock.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/store/_Lock.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/store/_MMapIndexInput.h b/Pods/Headers/Public/BRCLucene/CLucene/store/_MMapIndexInput.h new file mode 120000 index 0000000..222c25d --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/store/_MMapIndexInput.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/store/_MMapIndexInput.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/store/_RAMDirectory.h b/Pods/Headers/Public/BRCLucene/CLucene/store/_RAMDirectory.h new file mode 120000 index 0000000..392d6be --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/store/_RAMDirectory.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/store/_RAMDirectory.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/util/Array.h b/Pods/Headers/Public/BRCLucene/CLucene/util/Array.h new file mode 120000 index 0000000..b8a4b40 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/util/Array.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/util/Array.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/util/BitSet.h b/Pods/Headers/Public/BRCLucene/CLucene/util/BitSet.h new file mode 120000 index 0000000..b7b8811 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/util/BitSet.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/util/BitSet.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/util/CLStreams.h b/Pods/Headers/Public/BRCLucene/CLucene/util/CLStreams.h new file mode 120000 index 0000000..c1b3d84 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/util/CLStreams.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/util/CLStreams.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/util/Equators.h b/Pods/Headers/Public/BRCLucene/CLucene/util/Equators.h new file mode 120000 index 0000000..d162080 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/util/Equators.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/util/Equators.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/util/Misc.h b/Pods/Headers/Public/BRCLucene/CLucene/util/Misc.h new file mode 120000 index 0000000..8020dc5 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/util/Misc.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/shared/CLucene/util/Misc.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/util/PriorityQueue.h b/Pods/Headers/Public/BRCLucene/CLucene/util/PriorityQueue.h new file mode 120000 index 0000000..748c9e8 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/util/PriorityQueue.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/util/PriorityQueue.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/util/Reader.h b/Pods/Headers/Public/BRCLucene/CLucene/util/Reader.h new file mode 120000 index 0000000..ccb3d69 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/util/Reader.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/util/Reader.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/util/StringBuffer.h b/Pods/Headers/Public/BRCLucene/CLucene/util/StringBuffer.h new file mode 120000 index 0000000..f8490d2 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/util/StringBuffer.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/shared/CLucene/util/StringBuffer.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/util/VoidList.h b/Pods/Headers/Public/BRCLucene/CLucene/util/VoidList.h new file mode 120000 index 0000000..566742b --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/util/VoidList.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/util/VoidList.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/util/VoidMap.h b/Pods/Headers/Public/BRCLucene/CLucene/util/VoidMap.h new file mode 120000 index 0000000..8beee74 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/util/VoidMap.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/util/VoidMap.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/util/_Arrays.h b/Pods/Headers/Public/BRCLucene/CLucene/util/_Arrays.h new file mode 120000 index 0000000..4962a5d --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/util/_Arrays.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/util/_Arrays.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/util/_FastCharStream.h b/Pods/Headers/Public/BRCLucene/CLucene/util/_FastCharStream.h new file mode 120000 index 0000000..bdcaed0 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/util/_FastCharStream.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/util/_FastCharStream.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/util/_MD5Digester.h b/Pods/Headers/Public/BRCLucene/CLucene/util/_MD5Digester.h new file mode 120000 index 0000000..57e6c85 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/util/_MD5Digester.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/util/_MD5Digester.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/util/_StringIntern.h b/Pods/Headers/Public/BRCLucene/CLucene/util/_StringIntern.h new file mode 120000 index 0000000..31d897a --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/util/_StringIntern.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/util/_StringIntern.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/util/_ThreadLocal.h b/Pods/Headers/Public/BRCLucene/CLucene/util/_ThreadLocal.h new file mode 120000 index 0000000..431d8f8 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/util/_ThreadLocal.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/util/_ThreadLocal.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/util/_VoidList.h b/Pods/Headers/Public/BRCLucene/CLucene/util/_VoidList.h new file mode 120000 index 0000000..c1a34f3 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/util/_VoidList.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/util/_VoidList.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/util/_VoidMap.h b/Pods/Headers/Public/BRCLucene/CLucene/util/_VoidMap.h new file mode 120000 index 0000000..1d9f0c8 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/util/_VoidMap.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/util/_VoidMap.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/util/_bufferedstream.h b/Pods/Headers/Public/BRCLucene/CLucene/util/_bufferedstream.h new file mode 120000 index 0000000..8e2e32d --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/util/_bufferedstream.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/util/_bufferedstream.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/util/_dirent.h b/Pods/Headers/Public/BRCLucene/CLucene/util/_dirent.h new file mode 120000 index 0000000..cc8140f --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/util/_dirent.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/shared/CLucene/util/_dirent.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/util/_streambase.h b/Pods/Headers/Public/BRCLucene/CLucene/util/_streambase.h new file mode 120000 index 0000000..188d8fa --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/util/_streambase.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/util/_streambase.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/util/_streambuffer.h b/Pods/Headers/Public/BRCLucene/CLucene/util/_streambuffer.h new file mode 120000 index 0000000..9eec76a --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/util/_streambuffer.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/util/_streambuffer.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/util/arrayinputstream.h b/Pods/Headers/Public/BRCLucene/CLucene/util/arrayinputstream.h new file mode 120000 index 0000000..0fae9b6 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/util/arrayinputstream.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/util/arrayinputstream.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/util/byteinputstream.h b/Pods/Headers/Public/BRCLucene/CLucene/util/byteinputstream.h new file mode 120000 index 0000000..8dc8d98 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/util/byteinputstream.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/util/byteinputstream.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/util/gzipcompressstream.h b/Pods/Headers/Public/BRCLucene/CLucene/util/gzipcompressstream.h new file mode 120000 index 0000000..adb6a93 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/util/gzipcompressstream.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/util/gzipcompressstream.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/util/gzipinputstream.h b/Pods/Headers/Public/BRCLucene/CLucene/util/gzipinputstream.h new file mode 120000 index 0000000..1fb5187 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/util/gzipinputstream.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/util/gzipinputstream.h \ No newline at end of file diff --git a/Pods/Headers/Public/BRCLucene/CLucene/util/streamarray.h b/Pods/Headers/Public/BRCLucene/CLucene/util/streamarray.h new file mode 120000 index 0000000..8aba544 --- /dev/null +++ b/Pods/Headers/Public/BRCLucene/CLucene/util/streamarray.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/util/streamarray.h \ No newline at end of file diff --git a/Pods/Manifest.lock b/Pods/Manifest.lock new file mode 100644 index 0000000..b514d6e --- /dev/null +++ b/Pods/Manifest.lock @@ -0,0 +1,28 @@ +PODS: + - BRCLucene (1.0.0-beta1): + - BRCLucene/CLucene (= 1.0.0-beta1) + - BRCLucene/CLucene (1.0.0-beta1): + - BRCLucene/CLucene-Contribs-Lib + - BRCLucene/CLucene-Core + - BRCLucene/CLucene-Shared + - BRCLucene/CLucene-Config (1.0.0-beta1) + - BRCLucene/CLucene-Contribs-Lib (1.0.0-beta1): + - BRCLucene/CLucene-Core + - BRCLucene/CLucene-Shared + - BRCLucene/CLucene-Core (1.0.0-beta1): + - BRCLucene/CLucene-Core-API + - BRCLucene/CLucene-Shared + - BRCLucene/CLucene-Core-API (1.0.0-beta1): + - BRCLucene/CLucene-Config + - BRCLucene/CLucene-Shared (1.0.0-beta1): + - BRCLucene/CLucene-Core-API + +DEPENDENCIES: + - BRCLucene (~> 1.0.0-beta1) + +SPEC CHECKSUMS: + BRCLucene: e3ff71c464c0a37d5093f2e1e9ee4e46bf578454 + +PODFILE CHECKSUM: ee15b1e6dd161fbe90172ae3362b2df9b74822dc + +COCOAPODS: 1.1.1 diff --git a/Pods/Pods.xcodeproj/project.pbxproj b/Pods/Pods.xcodeproj/project.pbxproj new file mode 100644 index 0000000..b22d244 --- /dev/null +++ b/Pods/Pods.xcodeproj/project.pbxproj @@ -0,0 +1,3402 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 003197170D0B8496AC46662D /* DisjunctionSumScorer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 561A23B57EBC4AB3104B2135 /* DisjunctionSumScorer.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 004D0C29120AB443220C47A3 /* _SkipListWriter.h in Headers */ = {isa = PBXBuildFile; fileRef = A8B2143D61244E46BC66ADA9 /* _SkipListWriter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0072B91DDB08238435582A32 /* SpanNotQuery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5DD38BAB6D1319E5E0598C37 /* SpanNotQuery.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 016836DB7EB131CFAD0A253D /* threads.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CE83932C566294FA69BE30D0 /* threads.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 016F30BB2D386E42F6964217 /* GermanAnalyzer.h in Headers */ = {isa = PBXBuildFile; fileRef = C7F9AFABC1C734A4A035937B /* GermanAnalyzer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 018ACDDB2317330DC79EE06C /* GermanAnalyzer.h in Headers */ = {isa = PBXBuildFile; fileRef = C7F9AFABC1C734A4A035937B /* GermanAnalyzer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 01DD63A069F3583290B95F6A /* MatchAllDocsQuery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A2DEC5A03C4993CCC35B4135 /* MatchAllDocsQuery.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 020454D448A75C07D058192E /* Searchable.h in Headers */ = {isa = PBXBuildFile; fileRef = 8C87FA1353739983EF4BD445 /* Searchable.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 02248EDA06CE0D8350520BFD /* ThreadLocal.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6284B6CE304456F7AC277046 /* ThreadLocal.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0247CF860141509CD745DF15 /* stem_UTF_8_porter.c in Sources */ = {isa = PBXBuildFile; fileRef = 67C48AE06CDA84D04C7CCA3A /* stem_UTF_8_porter.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0313EE64DEEA3C471EF6E7BF /* Reader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E93615AB0B63397AD859F32A /* Reader.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 03AECA30F7BF1FE3F7119DFD /* FuzzyQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = 08565E16DB82DF2ED956B64A /* FuzzyQuery.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 03D57248907907CDFD346D82 /* _SegmentMerger.h in Headers */ = {isa = PBXBuildFile; fileRef = 075E7B74158EB07D3573CDCE /* _SegmentMerger.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 040013D7BE7D168941425D38 /* _ThreadLocal.h in Headers */ = {isa = PBXBuildFile; fileRef = 6D8E9C46D7C29EE73FBBC824 /* _ThreadLocal.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 04449F91FC798F19E4640C73 /* FieldSelector.h in Headers */ = {isa = PBXBuildFile; fileRef = FA502083055EC660DA3ECAD0 /* FieldSelector.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 04677439678D1D9906272EC8 /* _streambuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 547B57C4BCEA74606B2C7155 /* _streambuffer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0472064260D443354C698CA1 /* gunichartables.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 909FB425551C99481AA9162B /* gunichartables.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 04CA5400AFCB1FF19116A26E /* SimpleFragmenter.h in Headers */ = {isa = PBXBuildFile; fileRef = 13E2105B0E5A40085B063C99 /* SimpleFragmenter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 050C934D444D946ED07B018A /* stem_UTF_8_french.h in Headers */ = {isa = PBXBuildFile; fileRef = B23F142DBEB2DBE1CFC39D56 /* stem_UTF_8_french.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 05506F7827F81FE734FAF48F /* _HitQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = E8F83A5CFCC4D3B26C4E3CF3 /* _HitQueue.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 06EC29CB89150F7EC5F63A4D /* ScorerDocQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = F4C7B28B021C2514814F9E7D /* ScorerDocQueue.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 06FA04F1860A59159134D81E /* _FieldsReader.h in Headers */ = {isa = PBXBuildFile; fileRef = 81E56C8BEF8D1690265A69EF /* _FieldsReader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 070233024B2492DE3BBB6103 /* FilteredTermEnum.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7941776DE9A915442BCCF7B7 /* FilteredTermEnum.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 07922D6A1E829B15A56088BD /* stem_UTF_8_portuguese.c in Sources */ = {isa = PBXBuildFile; fileRef = A8A065338915556B8F986F52 /* stem_UTF_8_portuguese.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 086EBD9BBF61812009D733BF /* IndexFileNames.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 498AAB6DA0DE3AF69709EB59 /* IndexFileNames.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0883DE02FD3A55DDACDD23DF /* SnowballFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 49EDA20802C7F20DB2009F11 /* SnowballFilter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 093AF642D0E1DA35B9A68861 /* DateTools.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 696BD38B0EAA77AAF9E060CE /* DateTools.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 093CF3660C74B337863CD448 /* QueryToken.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A7C9ABB8BA4CB7B38610EF7 /* QueryToken.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 094A4879FD2B96A7400DAFF8 /* stem_UTF_8_german.h in Headers */ = {isa = PBXBuildFile; fileRef = A7FF2DFE608F4496127F1767 /* stem_UTF_8_german.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0986177A8F4031BB097B8733 /* BooleanQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = 967217E67E512175B6731208 /* BooleanQuery.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 099615CB72952D58E777819F /* IndexFileNames.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 498AAB6DA0DE3AF69709EB59 /* IndexFileNames.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 09B2CBA629582C744A713BE7 /* stem_ISO_8859_1_finnish.h in Headers */ = {isa = PBXBuildFile; fileRef = FCFF6C99F270D75331A591FF /* stem_ISO_8859_1_finnish.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0B01FA3FCD6A90E5277C03A8 /* PrefixQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = 632616E10F6905871654E773 /* PrefixQuery.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0BC0F0806A9D896C9F47A291 /* SpanFirstQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = A8B7BC78D6C3F7870EC85FAB /* SpanFirstQuery.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0C07C348985220A621972915 /* LanguageBasedAnalyzer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6A0B958A01F1A1C850AF9113 /* LanguageBasedAnalyzer.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0C7D7FFEB760B8EE4433ED8C /* SpanOrQuery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B1BE2ECBE886050BAF96719F /* SpanOrQuery.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0C8D78C113F047795804B79C /* repl_tcslwr.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5AB8128CFF9B3DE50E6E93C5 /* repl_tcslwr.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0CA7EFC634004204A3A5D3E8 /* Reader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E93615AB0B63397AD859F32A /* Reader.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0D6A3A87002002DC84A5931E /* stem_ISO_8859_1_german.c in Sources */ = {isa = PBXBuildFile; fileRef = 89226E0920A85262E5591BF5 /* stem_ISO_8859_1_german.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0E2C9DE6858AA9EE923E95BC /* _gunichartables.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C560253277C5924B77F32B6 /* _gunichartables.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0E9E23C8939389A1156FA39F /* _RAMDirectory.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E23224E5681D39877908E16 /* _RAMDirectory.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0EEC5F7DB6562FE4D7D4D1B8 /* FieldCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C37C55BC741E3C8863C43937 /* FieldCache.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0F0E92FFC573B854FF3C0FC1 /* CachingSpanFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = EFB69E0443F3A22116F5363C /* CachingSpanFilter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0F3B8645DADDF920F166F791 /* CLStreams.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B7C64F2F23938B239313B56 /* CLStreams.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0F4B40FC00FC1D080182B3FC /* libstemmer.h in Headers */ = {isa = PBXBuildFile; fileRef = DA2D5F840DB2036D97DC7E39 /* libstemmer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0FAECD1A3746351C4B5E0914 /* ConjunctionScorer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B3E4408F3CE3908861990DC /* ConjunctionScorer.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 1165A7E231175240555F426A /* CJKAnalyzer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C887FA5266066B86DF635C6D /* CJKAnalyzer.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 1168CE90961614405F9D92B3 /* MergePolicy.h in Headers */ = {isa = PBXBuildFile; fileRef = ABECEBECAD1EBEE9656B1511 /* MergePolicy.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 11700B17DB330C868ABE1476 /* stem_ISO_8859_1_norwegian.c in Sources */ = {isa = PBXBuildFile; fileRef = 8A0D8B4C254B952C4EF189CC /* stem_ISO_8859_1_norwegian.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 127BE8900BE3569F62FD74EA /* stem_UTF_8_porter.h in Headers */ = {isa = PBXBuildFile; fileRef = 6996EC84817B1EC2677FD772 /* stem_UTF_8_porter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 127D3AFB3CB14636642931DE /* SpanOrQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = 0E5828676B5A86E4523513B4 /* SpanOrQuery.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 128FBF955B9B4B2C88E7CE42 /* _FieldInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = B6FEB8A07263C5EBA87C1D11 /* _FieldInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 12A4D165FC32075D349AB207 /* Encoder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 363DE4971D255F5C461EC4A1 /* Encoder.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 130D7D5576079BCA1468E11A /* SkipListWriter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C833C400B1D27CBCA5C28C03 /* SkipListWriter.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 13828EA30381A9615C73D35D /* Pods-BasePods-BRFullTextSearch-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 9244E614D6DABBEC580121AD /* Pods-BasePods-BRFullTextSearch-dummy.m */; }; + 139AA6DA383773D9A877FE31 /* SimpleHTMLEncoder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7E47EE3B1FA8B01F42A6F2A5 /* SimpleHTMLEncoder.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 13A86684594B39A2786AF5F8 /* MultiReader.h in Headers */ = {isa = PBXBuildFile; fileRef = 8677A29928A78E301D0F517B /* MultiReader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 140D9635418A72BEA01003AF /* RAMDirectory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 90905C590BE1580DC15B5D72 /* RAMDirectory.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 14178196B952AE2D949A7C13 /* TermSpans.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C689EF134FEFB13911FC5165 /* TermSpans.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 141F9D527F8D577C99661FE2 /* SearchHeader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A8E51998B27E27442F92A0D4 /* SearchHeader.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 1444F01C4D8A5A17A6617AF9 /* QueryParserConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 898A500B20CCDFDC0AF6D2E0 /* QueryParserConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1531CBDA7B367B1D095F0D5B /* SharedHeader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0DCDD4CCA56765CF5A37A011 /* SharedHeader.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 155B04E6B9949BF423DCB285 /* api.c in Sources */ = {isa = PBXBuildFile; fileRef = 44E2EBB7ABCC4B29648C9D85 /* api.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 15A2A7BC9113620F13BE2DD6 /* _NearSpansOrdered.h in Headers */ = {isa = PBXBuildFile; fileRef = D0680B69A04A33D50CEC65F1 /* _NearSpansOrdered.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 16FCE63B9C6C8C078E6E0838 /* TokenGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = FDF46E905461FE8E96D416CA /* TokenGroup.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 18028ED842F1EAABD2C0DED9 /* StandardAnalyzer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B520E0B2845F0C0274582E69 /* StandardAnalyzer.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 1829C02712C1597E8F91561D /* dirent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 49B2499F9D502737FAE54719 /* dirent.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 18333C09C33FDCE5E00D5A39 /* GermanAnalyzer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 54410BD7D8977AC67D8EA7A4 /* GermanAnalyzer.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 1851481692848EEC27352282 /* TermScorer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DED5E1334CF9AA568354E30F /* TermScorer.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 18724DF69FEF723BF9AB70F7 /* SimpleHTMLFormatter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AE20E1E48FFA3F76CCF1C604 /* SimpleHTMLFormatter.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 1889C2AE19D91DBF35C60B0B /* header.h in Headers */ = {isa = PBXBuildFile; fileRef = 242D86ABA0BBD072655BC3A4 /* header.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 190BD24ED9AB5BF848EC2472 /* _FieldsWriter.h in Headers */ = {isa = PBXBuildFile; fileRef = EEC57888D3B4C451F1449713 /* _FieldsWriter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 19AC38D86714026CE133C869 /* stem_ISO_8859_1_english.h in Headers */ = {isa = PBXBuildFile; fileRef = BF81D9F8FB3657A529720E93 /* stem_ISO_8859_1_english.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 19C4E578EFDFEB22687AD8E9 /* HighlightScorer.h in Headers */ = {isa = PBXBuildFile; fileRef = A4C0A317D0BD30F8A57BB4DB /* HighlightScorer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 19CCCE483EFCB5D11F551C24 /* _Term.h in Headers */ = {isa = PBXBuildFile; fileRef = D58B32B62F500FF008ECA9AE /* _Term.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 19E52FDF903F0BCF8E36F6DC /* stem_ISO_8859_1_danish.h in Headers */ = {isa = PBXBuildFile; fileRef = 148B18AA3BA2A25110EDC1DB /* stem_ISO_8859_1_danish.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1A15D73C5E77E140DB486912 /* SpanTermQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = F6C93EA3C96FCD751A1C4817 /* SpanTermQuery.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1A42B1074D97BC0FD2C56824 /* Directory.h in Headers */ = {isa = PBXBuildFile; fileRef = 1554EFC1DA92717F9D83B7EC /* Directory.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1A6AD405F553430E71A99C95 /* DateTools.h in Headers */ = {isa = PBXBuildFile; fileRef = D058C1BD8E32F4161EA1ACCD /* DateTools.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1AEA995E35A40C4827E5D724 /* mem.h in Headers */ = {isa = PBXBuildFile; fileRef = 87FE3634F7F1E05CA7D522D6 /* mem.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1BC8025862B21554F968919B /* Document.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 682B2446D9218CC38D48CDEB /* Document.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 1BCF039F72CAFBDACE51BCA0 /* IndexDeletionPolicy.h in Headers */ = {isa = PBXBuildFile; fileRef = 39FF9F55D084054CD22FDB4C /* IndexDeletionPolicy.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1BF2DF7D92A0049722316F55 /* IndexFileNameFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42323A6CEBEFD53A6D924181 /* IndexFileNameFilter.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 1C238242D9AF69F2852C03BE /* _clucene-config.h in Headers */ = {isa = PBXBuildFile; fileRef = BF5538278743742520868FC0 /* _clucene-config.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1C7E1C619AAF89AA60339256 /* SegmentTermPositions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A39B973A80204F79C3D147F /* SegmentTermPositions.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 1D24C593D8C386838546D409 /* IndexModifier.h in Headers */ = {isa = PBXBuildFile; fileRef = 128A0FA14C4275A64361ABD8 /* IndexModifier.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1D34E7ED4F77E5FA6D80DAB1 /* stem_UTF_8_italian.c in Sources */ = {isa = PBXBuildFile; fileRef = D8D262E268C2818EA8C39513 /* stem_UTF_8_italian.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 1D771A32133D404CC29FECDF /* stem_ISO_8859_1_porter.h in Headers */ = {isa = PBXBuildFile; fileRef = 85145B0375A157A82DEC19A2 /* stem_ISO_8859_1_porter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1D896F7765C1A45772E58FAC /* stem_ISO_8859_1_german.h in Headers */ = {isa = PBXBuildFile; fileRef = F8D5FE654BCE6411503AC36B /* stem_ISO_8859_1_german.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1E11924F0D7A536BF9E76376 /* SegmentTermVector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 192483D95C2815AA17FF4223 /* SegmentTermVector.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 1E22A1C2DBE77F0E5523E2F3 /* DateFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 24BFC6BC4EE381C63F672010 /* DateFilter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1E2B2898ABF4F575E5AA0696 /* TermInfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9853ABDC632E9F9F0AF7B1E2 /* TermInfo.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 1E379296B26516ED1D5167E2 /* FSDirectory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 20AB6CAC2EAA6F7C1D421424 /* FSDirectory.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 1E5DD93E728E443B6D87DE4E /* stem_ISO_8859_1_portuguese.h in Headers */ = {isa = PBXBuildFile; fileRef = DD8B2CA2D3265AF8911E9BAB /* stem_ISO_8859_1_portuguese.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1F33C9F689A89A258CA2D29E /* stem_ISO_8859_1_spanish.h in Headers */ = {isa = PBXBuildFile; fileRef = D21681199F2C28266563161C /* stem_ISO_8859_1_spanish.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1FA9124F4D6C21D048DA7AE7 /* IndexInput.h in Headers */ = {isa = PBXBuildFile; fileRef = 86E15A9EB69363D10D913642 /* IndexInput.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2026A178A237C56E0ADA3BF4 /* Terms.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D5B6CC86362332A6F2839964 /* Terms.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 20AF8B1EE35183C260C0648C /* DocumentsWriterThreadState.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FEC597FA4342157402BCEC9C /* DocumentsWriterThreadState.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 20D7263A331EEBC35B514116 /* SimpleHTMLFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = D64323EE913FFD6C2FCE0307 /* SimpleHTMLFormatter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2194220F658AD2403E157363 /* repl_tprintf.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 86C3166A689142932B326EE8 /* repl_tprintf.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 21DECA4294DD75DA8FDA9141 /* Explanation.h in Headers */ = {isa = PBXBuildFile; fileRef = 72F5AFF8E9BD9EABE2B64223 /* Explanation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2207E383CE46BEA676C13686 /* stem_ISO_8859_1_portuguese.c in Sources */ = {isa = PBXBuildFile; fileRef = CD7BB525AEDFEAA2B610804F /* stem_ISO_8859_1_portuguese.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 220D40A966FBE0648FD26F55 /* stem_KOI8_R_russian.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AC77605F4B1CBDA47BC5A0 /* stem_KOI8_R_russian.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2213D9263BA2B79CA23C4D31 /* Array.h in Headers */ = {isa = PBXBuildFile; fileRef = DF5E0DCEA28982A2A0A3973C /* Array.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 22191DE808D1FADF0F0CDA86 /* Spans.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FE62E2C9BE065ED04B141A2 /* Spans.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2253B798EB8277E7C6B63C90 /* BooleanScorer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5244FE031290E63408326EE1 /* BooleanScorer.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 229AFEACADF81C22BB50E063 /* BooleanScorer2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 50965D84FBD88CF6E549299B /* BooleanScorer2.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 22D36F853E3AF5594548A7F9 /* Filter.h in Headers */ = {isa = PBXBuildFile; fileRef = ACB710A42B9F368BC95D775D /* Filter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2319494824F47908628FFD9A /* GermanStemFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5A7CAD795C53CB90DB677BB8 /* GermanStemFilter.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 232C44880AB31944709D867F /* StandardFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A47E596A3AC81B1FF249DB1 /* StandardFilter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2373EB8ED6ED9FE185537DAF /* SpanNotQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = 08D3EC8C3906A87D0C7BD3C4 /* SpanNotQuery.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 237D3F5C1CB92BBB0F08E83E /* _MMapIndexInput.h in Headers */ = {isa = PBXBuildFile; fileRef = BF3FA77DBA865A7EA0F87D43 /* _MMapIndexInput.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 248673EF049034057DE7D7DF /* stem_ISO_8859_1_danish.h in Headers */ = {isa = PBXBuildFile; fileRef = 148B18AA3BA2A25110EDC1DB /* stem_ISO_8859_1_danish.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2486E00446F2879391617C67 /* stem_ISO_8859_1_finnish.c in Sources */ = {isa = PBXBuildFile; fileRef = E290402EE94F042E03B6C0F9 /* stem_ISO_8859_1_finnish.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 24AB942D2114F5BBCF2A2061 /* _TermInfosWriter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C22BB7A902145397DDA3542 /* _TermInfosWriter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 24BB52ACA01FC9E1F4FE5991 /* stem_UTF_8_italian.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E5787FA0F95DFCF53963348 /* stem_UTF_8_italian.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 24DC43ED69781B22C3DD8F5E /* MergeScheduler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E218636CDC69F8FCE8435253 /* MergeScheduler.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 24E76F53EA15B29E475D59F5 /* clucene-config.h in Headers */ = {isa = PBXBuildFile; fileRef = A02E865272F7A096250DAF8E /* clucene-config.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 24F770B670108B354E4692F7 /* AnalysisHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = A43880175020462A96391077 /* AnalysisHeader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 254DB7B0434B151236BC6A2C /* PorterStemmer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D5A5A0CB48E4FCAB9D1D4C7B /* PorterStemmer.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 256081838566C1C5121E2735 /* stem_UTF_8_french.c in Sources */ = {isa = PBXBuildFile; fileRef = DC64AFC50165328425654FE2 /* stem_UTF_8_french.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 259845644CF4E4194DB5CA30 /* SearchHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = 01C5084C0EB7A50F30E153E3 /* SearchHeader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 25E417C2DAF3AD116C2549A9 /* Snowball.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4AD541647FF856D30C83A7B3 /* Snowball.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 260E89AEBA44FC79F692E594 /* SpanFilterResult.h in Headers */ = {isa = PBXBuildFile; fileRef = 7EE719468C11B64E40622BF0 /* SpanFilterResult.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 261D0A2D1E68932D11B1847E /* CachingSpanFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF24B1B1D4A77EFAB9F71585 /* CachingSpanFilter.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2780681999A040FEFC497563 /* CJKAnalyzer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C887FA5266066B86DF635C6D /* CJKAnalyzer.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 27DC4871DF8AB8ACD043FE52 /* stem_UTF_8_danish.h in Headers */ = {isa = PBXBuildFile; fileRef = ED4C6B04C2F120273C226877 /* stem_UTF_8_danish.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 28A6B8690FD6EF2FA7CFBAD7 /* QueryToken.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3BFD48A29FB623B946670107 /* QueryToken.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2955F3322326D0CB6E64376F /* SpanFirstQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = A8B7BC78D6C3F7870EC85FAB /* SpanFirstQuery.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2A24FC950142965A31D2FB79 /* clucene-config.h in Headers */ = {isa = PBXBuildFile; fileRef = A02E865272F7A096250DAF8E /* clucene-config.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2AEC8825BA5100A1D01BBD0A /* stem_UTF_8_italian.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E5787FA0F95DFCF53963348 /* stem_UTF_8_italian.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2B34FE95097379E41C519B40 /* TermVectorReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CAAB067E1FD52B99F7DD6B24 /* TermVectorReader.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2B40B9C324702A9F47A7AED2 /* stem_UTF_8_italian.c in Sources */ = {isa = PBXBuildFile; fileRef = D8D262E268C2818EA8C39513 /* stem_UTF_8_italian.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2BC40751CF55648DFB59D37D /* repl_wctype.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C89E2A10F35E0711CA0B857 /* repl_wctype.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2BF7F3D6AD4008EBD6052F23 /* Term.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99AC527687D6316E67D8CED /* Term.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2BFC37AC147035CEA56922E7 /* _ExactPhraseScorer.h in Headers */ = {isa = PBXBuildFile; fileRef = 2821A9CBA3B5C489E85A51E5 /* _ExactPhraseScorer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2C17818172C4E23A0D8CD528 /* IndexInput.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2F200C192FF0E7225FF60750 /* IndexInput.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2C9CF6E018CD464AB6BA786A /* MultiSearcher.h in Headers */ = {isa = PBXBuildFile; fileRef = F798CB269FBD5E74EB6D9D43 /* MultiSearcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2D3FF42AA9695CBC10682A03 /* StringBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 09E6C8ECD2BB1F9E684E8165 /* StringBuffer.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2E759E14F3A937F040D9C82B /* TokenGroup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F5DEC96F8DBFAF2F8075304C /* TokenGroup.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2EAC565BB6CFD578641ADBCE /* modules.h in Headers */ = {isa = PBXBuildFile; fileRef = 8250CD2D402839BE57170FE0 /* modules.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2EEC0E58BE7031A1F914D058 /* utilities.c in Sources */ = {isa = PBXBuildFile; fileRef = 08A3884580B9C317D269FDDD /* utilities.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2F146DEC9944CB168609467E /* repl_tcstod.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C7E5113841A81E955FAC79B7 /* repl_tcstod.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2F28DC8BD482521271E1144D /* stem_UTF_8_norwegian.c in Sources */ = {isa = PBXBuildFile; fileRef = AD83C3B75390F54F1CFB7090 /* stem_UTF_8_norwegian.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2F362A31F0F3D4D4CB6B5756 /* _TermScorer.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E1A98BC88E6F6AE8C44393A /* _TermScorer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2F5BE504AF489A28D2D8E8E0 /* QueryParserTokenManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E25DB4BD66003ACCB49451B3 /* QueryParserTokenManager.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2F809693E846D5BE171930A9 /* FastCharStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 24B454F42CA28C2F37E07D53 /* FastCharStream.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2F8DFB7404A84FB5706BC800 /* _TermVector.h in Headers */ = {isa = PBXBuildFile; fileRef = 8565CF0D75DC28F681E3E039 /* _TermVector.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2FA041848A1B7E69232BB104 /* Payload.h in Headers */ = {isa = PBXBuildFile; fileRef = A02EE6B24F45CA042375C4C9 /* Payload.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2FCCD6282925CF24092F06EC /* Hits.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 770990EEBAD703DFEB329D81 /* Hits.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3042F346B7E3FD153CC1B441 /* CompoundFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BE1CAEC04FF3A035BD7A9FE2 /* CompoundFile.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3088174ABCE5F5C4CEA9E854 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 872D2A9F1471134AB2EBA436 /* Cocoa.framework */; }; + 30A36A6521A0BC1890F0F631 /* gunichartables.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 909FB425551C99481AA9162B /* gunichartables.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 31537593E8A77729906F8AE1 /* Snowball.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4AD541647FF856D30C83A7B3 /* Snowball.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 320741800BD742D1B7EFF873 /* FSDirectory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 20AB6CAC2EAA6F7C1D421424 /* FSDirectory.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 323A70149AD9E36587CD80DE /* Fragmenter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C263AD4FCE70A40F9D2B365 /* Fragmenter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 326387A0597033675A949725 /* PrefixQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = 632616E10F6905871654E773 /* PrefixQuery.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 32B8B1C8F8D107CCA7332D58 /* _DocumentsWriter.h in Headers */ = {isa = PBXBuildFile; fileRef = FB9A2E81B21A808D0123E909 /* _DocumentsWriter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 336C64F5ABC9AC8ECBC1BC04 /* StdHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = 53125008FB1F47E205B61CC4 /* StdHeader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 33A8F861643C1B809AF32C8E /* MultiSegmentReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8FB7EAD910904FBC1E803A92 /* MultiSegmentReader.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 33C021CDB3AA1ED301176207 /* stem_UTF_8_german.c in Sources */ = {isa = PBXBuildFile; fileRef = C41F9E30FD9198F7297128C4 /* stem_UTF_8_german.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 33C4E67E975C7212716FD7C5 /* TermQuery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0CDFD53D0FA9728CB24B68E9 /* TermQuery.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 33FCC0B52E200222C807721B /* _PhraseScorer.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A94213291EAAE06BBB8E0BD /* _PhraseScorer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 34B960BF15A952D3D87D1A6C /* Formatter.h in Headers */ = {isa = PBXBuildFile; fileRef = DFACDEA32C33E7B6CBE253CF /* Formatter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 35020E32A66F46E01CF895F0 /* MultiPhraseQuery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 68087F57847D61D65F78E340 /* MultiPhraseQuery.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 354264C9F1FF116CABA5E5B8 /* _threads.h in Headers */ = {isa = PBXBuildFile; fileRef = D3495D678ADEB38CDF6C3BF5 /* _threads.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 357B649CEB465994C257A1B9 /* RangeFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 244C93D14B664DB2EF5E6615 /* RangeFilter.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 35A4C1A093B66A141959C5B4 /* Equators.h in Headers */ = {isa = PBXBuildFile; fileRef = A4C9F126F3FEA27B4A31A96A /* Equators.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 35B92B1E3B202ACCBE9E1558 /* Field.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2C60F04635F3FEDFBF49CA60 /* Field.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 35EF5C5272A4F85AD35C6E2E /* Directory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D87ACB5ACA8E211976DFDF1A /* Directory.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 366F4DBE9ACA3A54BAA482DD /* mem.h in Headers */ = {isa = PBXBuildFile; fileRef = 87FE3634F7F1E05CA7D522D6 /* mem.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 36848BEDE5D9586B9E747BE4 /* ChainedFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 449486BD85A6632E73FEA6A9 /* ChainedFilter.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 36C50B3B8E462AB7CD09A3F9 /* IndexFileDeleter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 17598ACC84E85A239272C398 /* IndexFileDeleter.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 36EC19D1CED6D12862F54B75 /* MultiTermQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = 731DA62C2861ED07FA667D29 /* MultiTermQuery.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3736B242C087B9B96DEB2F93 /* _DisjunctionSumScorer.h in Headers */ = {isa = PBXBuildFile; fileRef = EEFF108302039F9FDD5B6CE9 /* _DisjunctionSumScorer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 375BF8F4B09707B0EFB091B5 /* stem_UTF_8_french.h in Headers */ = {isa = PBXBuildFile; fileRef = B23F142DBEB2DBE1CFC39D56 /* stem_UTF_8_french.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 37A18EC160FBC86E08A3BAD5 /* Explanation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8131981DF7D13C79FD86CF00 /* Explanation.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 38DBCB206C0606A4FC794EAA /* FieldSortedHitQueue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C2D85327D24A734C3D8AD3D2 /* FieldSortedHitQueue.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 38F32A5AAAC8785435F32059 /* TextFragment.h in Headers */ = {isa = PBXBuildFile; fileRef = 818A9068B3FD13D69636F427 /* TextFragment.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 38F7C197649178575A71F330 /* QueryToken.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A7C9ABB8BA4CB7B38610EF7 /* QueryToken.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 39133E850597FFCEB5316B44 /* MultiTermQuery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99A638F6183AF3DBD44E920 /* MultiTermQuery.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 39B22B3A5B9AED55DA07D0C9 /* BooleanScorer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5244FE031290E63408326EE1 /* BooleanScorer.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 39BD57D26B095145FBE7F057 /* HighlightScorer.h in Headers */ = {isa = PBXBuildFile; fileRef = A4C0A317D0BD30F8A57BB4DB /* HighlightScorer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3A2F96EB97F953E94A80C10F /* Lock.h in Headers */ = {isa = PBXBuildFile; fileRef = 2F0D1D02B142098F0EDD555C /* Lock.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3A424F45FA44EBAC0D8C7538 /* SpanNotQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = 08D3EC8C3906A87D0C7BD3C4 /* SpanNotQuery.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3A42B7E7186179C2B5B270E1 /* Encoder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 363DE4971D255F5C461EC4A1 /* Encoder.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3A889A56371709B0C91178BF /* ConstantScoreQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = 06BDB38963A90CFB6B9A17FE /* ConstantScoreQuery.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3AB816B899E88739C8D2500E /* BitSet.h in Headers */ = {isa = PBXBuildFile; fileRef = 28982B02FDD90738646B409F /* BitSet.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3BA2AACB7190408314722A7E /* _Term.h in Headers */ = {isa = PBXBuildFile; fileRef = D58B32B62F500FF008ECA9AE /* _Term.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3C19D3EC54FECACF914549F8 /* Lock.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3489740AA4F7A8C9B2E52B61 /* Lock.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3C32C7DD769E167F1374792D /* repl_tcslwr.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5AB8128CFF9B3DE50E6E93C5 /* repl_tcslwr.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3CD505CFE927B44F89992FAD /* PorterStemmer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D5A5A0CB48E4FCAB9D1D4C7B /* PorterStemmer.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3D88F256347FAF81B417D84E /* TokenSources.h in Headers */ = {isa = PBXBuildFile; fileRef = CE7D186707CB6315363BA5BF /* TokenSources.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3E56CE6BF4552AA8DA749257 /* api.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D827F7D58BF1FA89FBE77E2 /* api.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3E6063A7C9D767F27FD153B2 /* WeightedTerm.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0838EB93707F329DF8B3C410 /* WeightedTerm.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3E6F343B8F84622AF5AA31ED /* RangeQuery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 70C22977A6B70616EE12ED42 /* RangeQuery.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3E9F40221902AF3E6C08F699 /* PhraseScorer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CE0CD854DDBCAEEEB189BA79 /* PhraseScorer.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3ED63D641DD15615AB482E45 /* repl_wchar.h in Headers */ = {isa = PBXBuildFile; fileRef = 63E00C178A9FF52F0285E37D /* repl_wchar.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3F1AF11AF6F1211074454980 /* MultiSegmentReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8FB7EAD910904FBC1E803A92 /* MultiSegmentReader.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3FECADE2369E573C67C6FB30 /* stem_ISO_8859_1_spanish.c in Sources */ = {isa = PBXBuildFile; fileRef = 79BDC5A2DADD567AA7B91A8B /* stem_ISO_8859_1_spanish.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3FFA879C8263EB68EE9D93C4 /* TermVectorWriter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CAAB903DFEEC9662774A2799 /* TermVectorWriter.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 40599A7FA49FF827588BA925 /* PorterStemmer.h in Headers */ = {isa = PBXBuildFile; fileRef = C14BF1ECA6A7286DC68EEAF1 /* PorterStemmer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 406E85BDEE0E262CF869C5A4 /* AnalysisHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = A43880175020462A96391077 /* AnalysisHeader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 40ADF4ABB2C3280D8677C91D /* MergePolicy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 989DDAFD77677DE9770763D4 /* MergePolicy.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 4143377EF4E86DD6F868B8E8 /* Directory.h in Headers */ = {isa = PBXBuildFile; fileRef = 1554EFC1DA92717F9D83B7EC /* Directory.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4158AA6DBEBB7F9115E61D08 /* api.c in Sources */ = {isa = PBXBuildFile; fileRef = 44E2EBB7ABCC4B29648C9D85 /* api.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 41617E30BC9CF4B570E1FC1D /* VoidMap.h in Headers */ = {isa = PBXBuildFile; fileRef = 9493084135638233C4304DE0 /* VoidMap.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 417EEF1F14A3288F6274EAAE /* _SegmentInfos.h in Headers */ = {isa = PBXBuildFile; fileRef = 5DCA51C5675E327CCA6B303D /* _SegmentInfos.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 418658B08BA3A919B3AB7EC1 /* StandardTokenizerConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = BA1B9D3E319A89A133A99F9C /* StandardTokenizerConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 41C28771B92EB88206B1D261 /* MergeScheduler.h in Headers */ = {isa = PBXBuildFile; fileRef = 3721FC63F5E3DE1E25972B0B /* MergeScheduler.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 425411CEB1FD73E98B91CC67 /* Compare.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0FC5F064A580142587634973 /* Compare.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 42899D34EEF9CDB0815B8555 /* PrefixQuery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D1E2D2D2D2C0422EEDE7419F /* PrefixQuery.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 429E306779BDFDF1CE892FE1 /* byteinputstream.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F2A02C6E7B896E0963ED0BC /* byteinputstream.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 42C0C7A2BA773A8C0055A5A5 /* CJKAnalyzer.h in Headers */ = {isa = PBXBuildFile; fileRef = F1C3CF60424D58A52AF05B1E /* CJKAnalyzer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 42C670505089055BB6059CD9 /* SpanScorer.h in Headers */ = {isa = PBXBuildFile; fileRef = 84EA720160389AE05DA86401 /* SpanScorer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 42DD1C9F17C6EDC052C04748 /* MD5Digester.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 598BCDE0CB72EB179F420AEF /* MD5Digester.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 42EA502EEE138BDF8107AC5B /* _Lock.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F7A8C6A99F8F23C3A7DF1F6 /* _Lock.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 42FF3E61A4EFE93849DF243A /* IndexSearcher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 579D02079930C4A85DFF0E30 /* IndexSearcher.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 430ACF0717CA243840CBE8D7 /* ChainedFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 449486BD85A6632E73FEA6A9 /* ChainedFilter.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 43664F0B050323B5BA77ED7B /* _Arrays.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D1A9CB59C0AD5B26B898ABA /* _Arrays.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 44DC18A870D5D9130677187E /* SloppyPhraseScorer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 72F575D6C9139A25D5E03773 /* SloppyPhraseScorer.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 450E9686FF4CD317225661ED /* LanguageBasedAnalyzer.h in Headers */ = {isa = PBXBuildFile; fileRef = DC60B8F8DB6948CF82538BF6 /* LanguageBasedAnalyzer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 451FAB39613C9B24F8A23F20 /* SnowballFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 49EDA20802C7F20DB2009F11 /* SnowballFilter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 454DCAB995B08BF174F411F1 /* Pods-BasePods-BRFullTextSearchTests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 3C6A7D93E7265CB888079AB3 /* Pods-BasePods-BRFullTextSearchTests-dummy.m */; }; + 461679432078E5288D644303 /* MergePolicy.h in Headers */ = {isa = PBXBuildFile; fileRef = ABECEBECAD1EBEE9656B1511 /* MergePolicy.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 47239C55A3C36A911939459B /* SimpleHTMLEncoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F1BF2C4703E4252831B0501 /* SimpleHTMLEncoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 47CCCD7B3A23CB14E56F5EBE /* gzipcompressstream.h in Headers */ = {isa = PBXBuildFile; fileRef = F53B4AC72D5DA32F908E71D0 /* gzipcompressstream.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 48110BFC54093CA72ABE81BD /* Analyzers.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 850AE498F808E9DFFF14C329 /* Analyzers.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 48188322F7EA856715CECC2E /* _VoidList.h in Headers */ = {isa = PBXBuildFile; fileRef = A95D85165E09C2D9E8B193DF /* _VoidList.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 48F981AC5A0390310BAAD42A /* PorterStemmer.h in Headers */ = {isa = PBXBuildFile; fileRef = C14BF1ECA6A7286DC68EEAF1 /* PorterStemmer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 49569FA3EFBFEFA010A2739C /* CLucene.h in Headers */ = {isa = PBXBuildFile; fileRef = 0969387C0A1DC3002ADCB9FA /* CLucene.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4982FADD04AB6315D793D4B5 /* SpanNearQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = 7950725A0B3603036B7B80AF /* SpanNearQuery.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 49BE342C72172C5F0CD42C7D /* error.h in Headers */ = {isa = PBXBuildFile; fileRef = 418DB995E02950B58BA21FD1 /* error.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 49D9176F66929FB270EA7B33 /* StringBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 9689F9F14A10EFB29C4C2765 /* StringBuffer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 49E73C3B69B255D2D4454723 /* _ThreadLocal.h in Headers */ = {isa = PBXBuildFile; fileRef = 6D8E9C46D7C29EE73FBBC824 /* _ThreadLocal.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4A3263A5097B3982687522AB /* MultiTermQuery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99A638F6183AF3DBD44E920 /* MultiTermQuery.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 4A5B4D8052A46868300E0F3E /* SnowballAnalyzer.h in Headers */ = {isa = PBXBuildFile; fileRef = EB6E700B85989270AC20382A /* SnowballAnalyzer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4A6EACBFABB57DBE18FD4380 /* SpanScorer.h in Headers */ = {isa = PBXBuildFile; fileRef = 84EA720160389AE05DA86401 /* SpanScorer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4A83686C2BEA94DC7074F027 /* GermanStemmer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 618E8E5524841BF7F44040A0 /* GermanStemmer.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 4AD8BF9DEED68DB0363454E2 /* _BooleanScorer2.h in Headers */ = {isa = PBXBuildFile; fileRef = 5933935B34B1DF1B909A82E1 /* _BooleanScorer2.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4B5BCA1A6779D3BDCF9E1AC4 /* Payload.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1C069324AE3E4A26964298FF /* Payload.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 4B7546357A9B2249E86F7411 /* FieldDocSortedHitQueue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 47FBF81F0D8B8F4FD9F8E133 /* FieldDocSortedHitQueue.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 4BA42CFCA7152EF358919254 /* Query.h in Headers */ = {isa = PBXBuildFile; fileRef = FA8B537C87459A530F2BBB89 /* Query.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4BD82E839E771314A9DB73D9 /* gzipinputstream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2D2E3088B9B9EB2BAF44DCDE /* gzipinputstream.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 4C0D577D945667878E8E6B9C /* _SegmentMergeInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 05826F4281A90CE9ACDBE2DF /* _SegmentMergeInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4C27E10DFD8A57BC01884DD9 /* LanguageBasedAnalyzer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6A0B958A01F1A1C850AF9113 /* LanguageBasedAnalyzer.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 4C31002523CA232532C48A09 /* DocumentsWriter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35194B046FA8A38D3C1B301 /* DocumentsWriter.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 4C7922805636D38B94E852E6 /* StdHeader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D93CE9411FA30234DCFC273B /* StdHeader.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 4C7B0E3F8606D3781CE07896 /* Compare.h in Headers */ = {isa = PBXBuildFile; fileRef = 14F6B97A6357B73EC360FDD2 /* Compare.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4CC612D0AF72ED0183CC6E09 /* SpanQueryFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 07426F4294F1E8AF0ED1DFA8 /* SpanQueryFilter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4CEB92C70E36FB28B18789D5 /* WildcardQuery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E220EEFD07722DDA6CEA178D /* WildcardQuery.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 4CF3E4A2289F88EEB2E34881 /* _VoidList.h in Headers */ = {isa = PBXBuildFile; fileRef = A95D85165E09C2D9E8B193DF /* _VoidList.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4D074812F25D6F65513F4E9A /* stem_ISO_8859_1_swedish.h in Headers */ = {isa = PBXBuildFile; fileRef = 766AA2B34AAFCF76B1F3D526 /* stem_ISO_8859_1_swedish.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4D30BE328E1FEF36DF06D942 /* repl_tcstoll.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A975AA85AD3A0FF93E402E4 /* repl_tcstoll.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 4D4C223988F61E9B057AAE95 /* lucenebase.h in Headers */ = {isa = PBXBuildFile; fileRef = 091B1611175D2D4F7C2D282B /* lucenebase.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4D94D84C953533B15EA89452 /* SegmentTermEnum.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC45EF9298BBF1CBF5DAEFAE /* SegmentTermEnum.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 4DB34157870A721DFBFAF447 /* _SkipListReader.h in Headers */ = {isa = PBXBuildFile; fileRef = 929BA395AF172F9582E56EC8 /* _SkipListReader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4E05EB1D327FDDA70DCFE329 /* ConstantScoreQuery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CFF49D6518AC608DE37C5E13 /* ConstantScoreQuery.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 4E0B7FF62A9982E596C21F18 /* BitSet.h in Headers */ = {isa = PBXBuildFile; fileRef = 28982B02FDD90738646B409F /* BitSet.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4E3C6406D2E0DCBC442E38B1 /* stem_ISO_8859_1_dutch.h in Headers */ = {isa = PBXBuildFile; fileRef = D83428FF628EEBCF6838DF5C /* stem_ISO_8859_1_dutch.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4E402F9B550D16C700A9E3D4 /* _EmptySpans.h in Headers */ = {isa = PBXBuildFile; fileRef = EC82991EF5B45C2238F3EE46 /* _EmptySpans.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4EABAD69D02951DC0A079C45 /* IndexWriter.h in Headers */ = {isa = PBXBuildFile; fileRef = 161A0C13CA693AF3721D042A /* IndexWriter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4F06435AE4B1FE0B88454704 /* byteinputstream.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F2A02C6E7B896E0963ED0BC /* byteinputstream.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4F340EF3DA018B8D509A13DF /* DateTools.h in Headers */ = {isa = PBXBuildFile; fileRef = D058C1BD8E32F4161EA1ACCD /* DateTools.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4F5228ADF0B76022051B4099 /* WeightedTerm.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0838EB93707F329DF8B3C410 /* WeightedTerm.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 4F99F196C3F242F11BFD6712 /* StdHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = 53125008FB1F47E205B61CC4 /* StdHeader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 50CB2211C0E410B381851AE4 /* libstemmer.h in Headers */ = {isa = PBXBuildFile; fileRef = 57549DDD865284D9D8F04A04 /* libstemmer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 510407A949853CA34A7CF723 /* MultiFieldQueryParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C25B9D58C74C755DCA8A7321 /* MultiFieldQueryParser.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 511300A2CF591EC7F27FE223 /* QueryParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 062F745174D862AD163D74AE /* QueryParser.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 51334B7D20EC4D3CDF0D42FE /* _ConjunctionScorer.h in Headers */ = {isa = PBXBuildFile; fileRef = C05BA5FC49FD02E0C15821C7 /* _ConjunctionScorer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 513E5C49F929DC67241A295A /* QueryParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 37C53A756CCC6A64E96334FD /* QueryParser.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 51A3F1F76167B12FA2B70510 /* stem_UTF_8_dutch.h in Headers */ = {isa = PBXBuildFile; fileRef = 782739F6CE5C46C963EC74C1 /* stem_UTF_8_dutch.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 51D2253CB1E4D9CA043887C5 /* gzipcompressstream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 91D5FD2E8E8D5AADC6AFC18F /* gzipcompressstream.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 51DCA8EFA7D5701DBFD3331E /* _dirent.h in Headers */ = {isa = PBXBuildFile; fileRef = 23E597168FBD2407E903A258 /* _dirent.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 52013353033F36FD59682602 /* LockFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C65BB8C950BD3D088902E271 /* LockFactory.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 52243C412010FB8A2437BB0E /* stem_UTF_8_german.c in Sources */ = {isa = PBXBuildFile; fileRef = C41F9E30FD9198F7297128C4 /* stem_UTF_8_german.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 52A78CE3367E3B2AC7CACEA6 /* repl_tcscasecmp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 45D60C3013E274720409E6A6 /* repl_tcscasecmp.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 52D43C07459759299538369B /* StringBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 9689F9F14A10EFB29C4C2765 /* StringBuffer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 52E636F9F6DDB7FB8358B2DD /* _NearSpansUnordered.h in Headers */ = {isa = PBXBuildFile; fileRef = 6698C8F6B9D04C25F88EEF9F /* _NearSpansUnordered.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 530A0AA0C6F9FF46A5170BCD /* header.h in Headers */ = {isa = PBXBuildFile; fileRef = 242D86ABA0BBD072655BC3A4 /* header.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 533F7D20A082C2E7839F1C53 /* QueryScorer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F086C33A44537F89BF7AE119 /* QueryScorer.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 537125B706253A43C670814A /* Analyzers.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 850AE498F808E9DFFF14C329 /* Analyzers.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 5391075FC4D4F453F7446BCB /* _SegmentTermEnum.h in Headers */ = {isa = PBXBuildFile; fileRef = 292F2872B768EED5AF2EED7C /* _SegmentTermEnum.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5393D4916DE79D04F9D41457 /* CLStreams.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B7C64F2F23938B239313B56 /* CLStreams.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 53AE13A4FAB9EDD28731DF17 /* stem_UTF_8_finnish.h in Headers */ = {isa = PBXBuildFile; fileRef = 3156191A827F28916EAD039B /* stem_UTF_8_finnish.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 541BDAF256D1FA7F55F15285 /* libstemmer.c in Sources */ = {isa = PBXBuildFile; fileRef = 42A091A817377B4255C21D27 /* libstemmer.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 54EC98B175991E6156FB4A99 /* MultiSearcher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C4597FC38C46E0D8C60AB1DC /* MultiSearcher.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 550C0A0AC295096C39F78BD6 /* SegmentMergeQueue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2C864D82EFB49DEB16946EB6 /* SegmentMergeQueue.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 556FE5BEAADE0F80ED418C7F /* _NearSpansUnordered.h in Headers */ = {isa = PBXBuildFile; fileRef = 6698C8F6B9D04C25F88EEF9F /* _NearSpansUnordered.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 55D3B1CC659EBDFD63BEB268 /* libstemmer.c in Sources */ = {isa = PBXBuildFile; fileRef = 42A091A817377B4255C21D27 /* libstemmer.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 55F0222E1CE950E16A27C38A /* NumberTools.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7E4B24911973F60CE6076892 /* NumberTools.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 565783F08EEB20BCBCD52810 /* error.h in Headers */ = {isa = PBXBuildFile; fileRef = 418DB995E02950B58BA21FD1 /* error.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 56AD814B9B6E9DA8968FC59C /* SloppyPhraseScorer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 72F575D6C9139A25D5E03773 /* SloppyPhraseScorer.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 56FFAF81F585A0B83AD9AE3F /* IndexReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2C3C39AC1AF22628C8972F33 /* IndexReader.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 575010FC36A23A46CB4C1DD5 /* CachingWrapperFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = EB5239CF6EF0AD13D813486A /* CachingWrapperFilter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 57DFE608DD90BAE626F83876 /* SegmentReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B747B0D193B44B5389361ABC /* SegmentReader.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 57F158A34AC17BD594639729 /* streamarray.h in Headers */ = {isa = PBXBuildFile; fileRef = 546E7280DBEF27E1EFB1947C /* streamarray.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 584C59C5189CCE20B8F18F6A /* _TermScorer.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E1A98BC88E6F6AE8C44393A /* _TermScorer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 586D29FB0A210EEE1F8C7DC2 /* _SegmentTermEnum.h in Headers */ = {isa = PBXBuildFile; fileRef = 292F2872B768EED5AF2EED7C /* _SegmentTermEnum.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 58BBF87D1AE47816DCC611A1 /* Similarity.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ADD7FCC4105391234393B2C /* Similarity.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 58BDC2E7C96DC1ACA26FC8A1 /* _clucene-config.h in Headers */ = {isa = PBXBuildFile; fileRef = BF5538278743742520868FC0 /* _clucene-config.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 58BF437822D032859C582BE8 /* Searchable.h in Headers */ = {isa = PBXBuildFile; fileRef = 8C87FA1353739983EF4BD445 /* Searchable.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 58F7E88F60BF539772A1E2F0 /* QueryParserTokenManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 381F1366DEAFEA368FEC0FC2 /* QueryParserTokenManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 59001E26E2ED992EE3989BCA /* IndexReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2C3C39AC1AF22628C8972F33 /* IndexReader.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 5915622BE827C0A9CDBFE69A /* QueryToken.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3BFD48A29FB623B946670107 /* QueryToken.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 592B6A2F8A42B5E3BA18DEFB /* _FieldDocSortedHitQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 91DE2F0AC9C47E9329B7397F /* _FieldDocSortedHitQueue.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 59EF6B8B181A1B6DC8B96039 /* _TermSpans.h in Headers */ = {isa = PBXBuildFile; fileRef = C951D813358FB229881B81E9 /* _TermSpans.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5AA6BE2DE2566CF328AFA132 /* stem_ISO_8859_1_italian.h in Headers */ = {isa = PBXBuildFile; fileRef = FF47A291D095583938BCCE6F /* stem_ISO_8859_1_italian.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5AB3F9C65D05D82B56E1F1DD /* CachingTokenFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3D035FF38F964DAAB7BECDB7 /* CachingTokenFilter.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 5B0A97ECEB65707133A11D82 /* RAMDirectory.h in Headers */ = {isa = PBXBuildFile; fileRef = 8177BE194773021F64AC9B22 /* RAMDirectory.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5B3E63A52DCDC859E3A4416C /* MultiReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AC8751090E6E3C49B858C374 /* MultiReader.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 5B5C1011EDF88C199786FD59 /* Document.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 682B2446D9218CC38D48CDEB /* Document.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 5B5C95B5CE8F860D2391C87C /* SegmentTermVector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 192483D95C2815AA17FF4223 /* SegmentTermVector.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 5C8692AE77147B5BF07541E6 /* stem_ISO_8859_1_swedish.c in Sources */ = {isa = PBXBuildFile; fileRef = 1F5C6F2C1490733B1A017D8C /* stem_ISO_8859_1_swedish.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 5C88D143CDAE5F069871ECB4 /* FieldInfos.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C31D97E55D7845929D793A5F /* FieldInfos.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 5CA7FB4E1ABB5DB585A1C46B /* FieldsWriter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1D935829581CC8F7928E1616 /* FieldsWriter.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 5CCB33908E1AA558AA3BEE46 /* stem_ISO_8859_1_dutch.c in Sources */ = {isa = PBXBuildFile; fileRef = 179B255A228E9B9E4FD36995 /* stem_ISO_8859_1_dutch.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 5CF6FE96225F6E0083948EB1 /* DocumentsWriterThreadState.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FEC597FA4342157402BCEC9C /* DocumentsWriterThreadState.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 5D2CAC25956A895CBDA41AD5 /* _condition.h in Headers */ = {isa = PBXBuildFile; fileRef = B3C9301311C64378638AB1BA /* _condition.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5D8E511CE783140425C7C6DA /* stem_UTF_8_french.c in Sources */ = {isa = PBXBuildFile; fileRef = DC64AFC50165328425654FE2 /* stem_UTF_8_french.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 5DD2957BD238CC5C97310EAF /* DirectoryIndexReader.h in Headers */ = {isa = PBXBuildFile; fileRef = CF9E0327487590018A827FA1 /* DirectoryIndexReader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5F43606A0E0A2DE759493665 /* SpanQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = 55DD481AB7F720CD4FAA543B /* SpanQuery.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5FE75F55583BDA6245C8AFE9 /* stem_UTF_8_portuguese.c in Sources */ = {isa = PBXBuildFile; fileRef = A8A065338915556B8F986F52 /* stem_UTF_8_portuguese.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 605E55DDC3C82CF566932E72 /* Hits.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 770990EEBAD703DFEB329D81 /* Hits.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 607BB04458F7472E5EF59B28 /* stem_ISO_8859_1_french.c in Sources */ = {isa = PBXBuildFile; fileRef = 73BABBFE77D30CD9A7EF3147 /* stem_ISO_8859_1_french.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 60B30603170C0ED9D81CDE7D /* StandardTokenizer.h in Headers */ = {isa = PBXBuildFile; fileRef = 350C146EFD9C0884BD724FD5 /* StandardTokenizer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 60D5C62E722B8BBB4432DD2E /* Sort.h in Headers */ = {isa = PBXBuildFile; fileRef = F761DF92DCB308899C093A6B /* Sort.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 60E73A8E6C014F4D884A0C58 /* FieldCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C37C55BC741E3C8863C43937 /* FieldCache.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 6103F780E8E29CD4DAC23901 /* TermQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = E70F94904D7CECD23D3DF37D /* TermQuery.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 617D19DCC169111D1FD31705 /* Scorer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9631DE8DF29AEF40018C176C /* Scorer.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 6224458515ED433459D7FE7E /* Misc.h in Headers */ = {isa = PBXBuildFile; fileRef = 85A1065260F668F703369982 /* Misc.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 62493B10C36A6883AAB89C15 /* _VoidMap.h in Headers */ = {isa = PBXBuildFile; fileRef = 29C228F1AC57C1F0958DF81D /* _VoidMap.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 632426F9207092DB2363E9FC /* _MultiSegmentReader.h in Headers */ = {isa = PBXBuildFile; fileRef = EBCD61BEF0E8DD788FD46F40 /* _MultiSegmentReader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6354A8DB8087171B022E1550 /* NumberTools.h in Headers */ = {isa = PBXBuildFile; fileRef = 2923454DC0414315374C5EED /* NumberTools.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 63886B64BB151BC71597B8C4 /* SpanWeight.h in Headers */ = {isa = PBXBuildFile; fileRef = BF119CB72BC2FA5795FEDB1E /* SpanWeight.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 63ECE0738F4A07B0AF2D6DFC /* SpanQueryFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 07426F4294F1E8AF0ED1DFA8 /* SpanQueryFilter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 63F1FA05A436D36B6D92008F /* TermVectorWriter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CAAB903DFEEC9662774A2799 /* TermVectorWriter.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 643E09A331B5A0615842072B /* TermVector.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E43193F2F0A7BEC76507B3D /* TermVector.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6458825BA0A200D86FD6AE07 /* MultiSearcher.h in Headers */ = {isa = PBXBuildFile; fileRef = F798CB269FBD5E74EB6D9D43 /* MultiSearcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 649EC0624E7566B7A6A86E86 /* error.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F5DC46D60CEC863B51316925 /* error.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 64BF108AA139E636124DB1A8 /* SpanTermQuery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D3AC7D296DFA696042D4418A /* SpanTermQuery.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 64DCEA8B44AC1F48B33D56EF /* _CompoundFile.h in Headers */ = {isa = PBXBuildFile; fileRef = E614CE0A040C3323578DD203 /* _CompoundFile.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 650E33BE686B3CFED078A27E /* stem_UTF_8_portuguese.h in Headers */ = {isa = PBXBuildFile; fileRef = C9F431FADD31D5F953F292FA /* stem_UTF_8_portuguese.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6591AAA2DB09933C5DF687DB /* NearSpansUnordered.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6A59577679CC4CEC9F8CC8EB /* NearSpansUnordered.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 65C7E7CD7E019D9207488D14 /* Explanation.h in Headers */ = {isa = PBXBuildFile; fileRef = 72F5AFF8E9BD9EABE2B64223 /* Explanation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 65CB905F370D725A584B15C8 /* _FastCharStream.h in Headers */ = {isa = PBXBuildFile; fileRef = CD34A0EC6C214EE624A7C782 /* _FastCharStream.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 65F6ACC80BD7DEBA653BC1F9 /* Document.h in Headers */ = {isa = PBXBuildFile; fileRef = 416A1790EE52ECA04818E23A /* Document.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 66A48CF8EE44E13C433BFCAC /* NearSpansOrdered.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5DF72D32A04B571A69F9019F /* NearSpansOrdered.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 681F82A02AA40A81651DB75C /* Term.h in Headers */ = {isa = PBXBuildFile; fileRef = 37D8B4E914F79328F26AE2C5 /* Term.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 69193EC12CD118B6EA25E5B9 /* stem_ISO_8859_1_italian.c in Sources */ = {isa = PBXBuildFile; fileRef = 7D99C04C29049C71354E2722 /* stem_ISO_8859_1_italian.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 691E35AF2B1B841CEDB25D8D /* CachingTokenFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 646D984DA01519CE1CE0F18E /* CachingTokenFilter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6924DB85C432B56ABC7BA856 /* repl_lltot.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 602EC519A3E66D140B2859EC /* repl_lltot.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 6995C0352162274B0942E778 /* _FieldsWriter.h in Headers */ = {isa = PBXBuildFile; fileRef = EEC57888D3B4C451F1449713 /* _FieldsWriter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 69DF7A98B46D316664AA3CCE /* Pods-BasePods-BRFullTextSearchMacOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = AE274E7ED56AD5F29CABEA7C /* Pods-BasePods-BRFullTextSearchMacOS-dummy.m */; }; + 6A116E81D06A90BDAA8332F8 /* SegmentMergeQueue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2C864D82EFB49DEB16946EB6 /* SegmentMergeQueue.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 6A972B0A344FA04E638A063D /* IndexWriter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A84DDC3C18DB7F42298C59BD /* IndexWriter.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 6AAB8863595F2CDDC3542CEC /* Highlighter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A3B1A6219EE98FDABFFCA0B7 /* Highlighter.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 6AF8089BAA9AF6F14080B2DC /* WildcardQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = 0DB8965C3EF1A51DC6374257 /* WildcardQuery.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6B0B4B5D82C9CCAE95ADFEA2 /* _PhrasePositions.h in Headers */ = {isa = PBXBuildFile; fileRef = FC3F89837B731B223F71435F /* _PhrasePositions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6B1E8298449C0980DE405EE0 /* DirectoryIndexReader.h in Headers */ = {isa = PBXBuildFile; fileRef = CF9E0327487590018A827FA1 /* DirectoryIndexReader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6B6017853FA2A707A7220089 /* _FieldInfos.h in Headers */ = {isa = PBXBuildFile; fileRef = 97DCFFA75EFBC35B9EE08783 /* _FieldInfos.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6BC4EAA5FC501EFF8D321674 /* SpanFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 872C96F28C7FE3EBA881336C /* SpanFilter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6C1A667A5CF607258CF069FF /* GermanStemFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = B1E07F1888DEDFCA13AC51BE /* GermanStemFilter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6C80E383E2A7E1A6BA92BEAF /* stem_ISO_8859_1_english.h in Headers */ = {isa = PBXBuildFile; fileRef = BF81D9F8FB3657A529720E93 /* stem_ISO_8859_1_english.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6D153DBBCC8AA8C0445D327B /* _streambase.h in Headers */ = {isa = PBXBuildFile; fileRef = 9EF8DB5A95B45741D9635539 /* _streambase.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6D2D333F320321D09BC1DC22 /* TokenSources.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 25F1308411FC4B1B441A7E70 /* TokenSources.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 6D78502CF04034644161D111 /* SimpleHTMLFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = D64323EE913FFD6C2FCE0307 /* SimpleHTMLFormatter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6D8797483D4D5ADA1160B6A5 /* MultiFieldQueryParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 0BBDF23FE12A2BF32407A389 /* MultiFieldQueryParser.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6DBD6B69B35BC9C75C2D99E3 /* TermVectorReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CAAB067E1FD52B99F7DD6B24 /* TermVectorReader.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 6E174F1321A8977145549F9E /* IndexDeletionPolicy.h in Headers */ = {isa = PBXBuildFile; fileRef = 39FF9F55D084054CD22FDB4C /* IndexDeletionPolicy.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6EDF5E9D4486C5DB45BB57E6 /* GermanStemFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5A7CAD795C53CB90DB677BB8 /* GermanStemFilter.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 6F2D37B0D8133F85D8B128D8 /* StringIntern.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F7A4034C03F76123B7C2826F /* StringIntern.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 6F7D1979DEA13CCEBFE15604 /* FieldSortedHitQueue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C2D85327D24A734C3D8AD3D2 /* FieldSortedHitQueue.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 6F83B1EA06567A997A44852F /* DateField.h in Headers */ = {isa = PBXBuildFile; fileRef = 0435F1F15171D12EC7EA51E5 /* DateField.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6FA59B5CFF420C9328A45AB2 /* DateFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 24BFC6BC4EE381C63F672010 /* DateFilter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 70562809DFA21204CB8B4A70 /* streamarray.h in Headers */ = {isa = PBXBuildFile; fileRef = 546E7280DBEF27E1EFB1947C /* streamarray.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7064384673528000A1977730 /* stem_ISO_8859_1_german.h in Headers */ = {isa = PBXBuildFile; fileRef = F8D5FE654BCE6411503AC36B /* stem_ISO_8859_1_german.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 706B5C511EDA1F76ABADE69D /* Terms.h in Headers */ = {isa = PBXBuildFile; fileRef = B5EB47B2B6F3F36AEA8B0568 /* Terms.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 712C3B0380EE7B46496FE84A /* RAMDirectory.h in Headers */ = {isa = PBXBuildFile; fileRef = 8177BE194773021F64AC9B22 /* RAMDirectory.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 712FDD157503C40DF368EEEA /* ExactPhraseScorer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CEDE1E95F6AEB482DEC50837 /* ExactPhraseScorer.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 713094E1E08AF41F031794AB /* SegmentMerger.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4004532F0166A1386D036590 /* SegmentMerger.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 72168E134E7D5A85C4606539 /* QueryFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FF7508D2F9070F750E6E7033 /* QueryFilter.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7237C3AD91E3A02F4F75F4DD /* _SloppyPhraseScorer.h in Headers */ = {isa = PBXBuildFile; fileRef = FCDF6E3711A81B94187D5EB2 /* _SloppyPhraseScorer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 724ED95FD33A8AD20265E518 /* Sort.h in Headers */ = {isa = PBXBuildFile; fileRef = F761DF92DCB308899C093A6B /* Sort.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 72585C442AA479DA39021576 /* api.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D827F7D58BF1FA89FBE77E2 /* api.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 725E0B2D2E603B1AE0794AAD /* _SloppyPhraseScorer.h in Headers */ = {isa = PBXBuildFile; fileRef = FCDF6E3711A81B94187D5EB2 /* _SloppyPhraseScorer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7273E2260B508A03BB9FEC39 /* AnalysisHeader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 71761D115AC3B36A9C7F0855 /* AnalysisHeader.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 73BDA69EB908DE6120CC7243 /* threads.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CE83932C566294FA69BE30D0 /* threads.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7401D5AF791BB062DE32B1E7 /* stem_ISO_8859_1_italian.c in Sources */ = {isa = PBXBuildFile; fileRef = 7D99C04C29049C71354E2722 /* stem_ISO_8859_1_italian.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7450765E7B228543F543EB13 /* MultiSearcher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C4597FC38C46E0D8C60AB1DC /* MultiSearcher.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 748DB1E54448134B8C27D5D0 /* SpanScorer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 198D32677B449C31264CC924 /* SpanScorer.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 748E5B2D846EBA44C37ED008 /* RangeQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = C70B81556630B837C83A9BC8 /* RangeQuery.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 74942B6BB480158F5654F492 /* _TermInfosWriter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C22BB7A902145397DDA3542 /* _TermInfosWriter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 749AEB215493300F7A25D878 /* stem_ISO_8859_1_norwegian.c in Sources */ = {isa = PBXBuildFile; fileRef = 8A0D8B4C254B952C4EF189CC /* stem_ISO_8859_1_norwegian.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 74F79D05D2D03C523DF6C326 /* Highlighter.h in Headers */ = {isa = PBXBuildFile; fileRef = BA4F4C78DE804F2F4C4AF2F6 /* Highlighter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 764F9D4BCCCE8E832211BE09 /* _TermInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 7288F6FB8BEED013C9FE3051 /* _TermInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7664C233ABB21ABCD1FB9D8D /* ScorerDocQueue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7269750624A74B0D02FE2A9C /* ScorerDocQueue.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 76DE2CEC1935BE5689FDE1C5 /* TermInfosWriter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 55D29F50902214B0652807B4 /* TermInfosWriter.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7744C79311F4B49CC65AB687 /* IndexDeletionPolicy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3F4FC420F98D71F60728DC78 /* IndexDeletionPolicy.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7747382C67D4BB1BA01F2C42 /* TermQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = E70F94904D7CECD23D3DF37D /* TermQuery.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 776816329D6BF5161152A93B /* Sort.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A3EA9DC1BB124B3059D0E1D3 /* Sort.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 77AA7AB9EE1AA2C434F2D869 /* stem_ISO_8859_1_danish.c in Sources */ = {isa = PBXBuildFile; fileRef = A361F6AE71675BCA7694ED1C /* stem_ISO_8859_1_danish.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 77C19C521733233AB4B62B70 /* _SegmentMergeQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 89B4FA065EEC6C655788DC63 /* _SegmentMergeQueue.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 77CE0F208152561E1DAB072E /* stem_ISO_8859_1_porter.c in Sources */ = {isa = PBXBuildFile; fileRef = 43F3948F67562D60FB9E6AF4 /* stem_ISO_8859_1_porter.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 77F7CBD39B87E06DD6206C72 /* stem_UTF_8_norwegian.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FAE946BEA51836D00F731C9 /* stem_UTF_8_norwegian.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 783029B627D9E598BD20E5E7 /* SkipListReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A7A6D6F6E8DC27E164765E58 /* SkipListReader.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 78337ED5352902BE63B243EC /* QueryParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 062F745174D862AD163D74AE /* QueryParser.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 78938A7A5596C188A2FA6299 /* _SegmentInfos.h in Headers */ = {isa = PBXBuildFile; fileRef = 5DCA51C5675E327CCA6B303D /* _SegmentInfos.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 78C93E2D0ADC23F1AB96E43F /* StandardFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B4217FE2826681C9571EAD92 /* StandardFilter.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 78E3C67F518B731DD8E70533 /* ConjunctionScorer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B3E4408F3CE3908861990DC /* ConjunctionScorer.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7934AAC3EF4CC312B8647B13 /* FieldCacheImpl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E28A55F200369E49461C7A01 /* FieldCacheImpl.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7962B4786DF89A785E138920 /* QueryTermExtractor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 29532C586B5C9ACE350875C7 /* QueryTermExtractor.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7AAA187313819FA7F32DEB25 /* PhraseQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = 2CDFF10CDB7CBA238F57E2F7 /* PhraseQuery.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7AEF881505B0E2BC26CF1C4E /* CLucene.h in Headers */ = {isa = PBXBuildFile; fileRef = 0969387C0A1DC3002ADCB9FA /* CLucene.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7B5615EC602AB8A53DA49D22 /* MatchAllDocsQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = 34AB0B068653D8F99851D1A7 /* MatchAllDocsQuery.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7B7DAACFA36DB46401B06379 /* FieldDoc.h in Headers */ = {isa = PBXBuildFile; fileRef = A042B88B39AC31C1407BEA94 /* FieldDoc.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7C34F83718AAA8517189AF1F /* Field.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2C60F04635F3FEDFBF49CA60 /* Field.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7C7D12839FC31F25BF6F5A39 /* stem_KOI8_R_russian.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AC77605F4B1CBDA47BC5A0 /* stem_KOI8_R_russian.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7C94FE2974DEBBAF06C87521 /* Highlighter.h in Headers */ = {isa = PBXBuildFile; fileRef = BA4F4C78DE804F2F4C4AF2F6 /* Highlighter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7D0C7CD1CFB3FB00F3459825 /* Compare.h in Headers */ = {isa = PBXBuildFile; fileRef = 14F6B97A6357B73EC360FDD2 /* Compare.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7D1D105B1161F80BA9BA905C /* gzipinputstream.h in Headers */ = {isa = PBXBuildFile; fileRef = 8C11605A23EF651B64C23DFC /* gzipinputstream.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7DA2F9D2EF33081211858067 /* BRCLucene-OSX-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 727632919006A5F9C125FF85 /* BRCLucene-OSX-dummy.m */; }; + 7DD8F028F797BB4F77396909 /* BooleanQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = 967217E67E512175B6731208 /* BooleanQuery.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7DEFC2C015648CB0B90C3DBD /* MultiPhraseQuery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 68087F57847D61D65F78E340 /* MultiPhraseQuery.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7E3BD3531D3945AEC9D23BF7 /* _CharStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 26262E4D44B664DF1E9B7F75 /* _CharStream.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7E6483B1A12A72D41BDB79ED /* stem_UTF_8_russian.c in Sources */ = {isa = PBXBuildFile; fileRef = AB2A564E26C8A74D8358AC1A /* stem_UTF_8_russian.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7E7C617D4A1AE25329C598BB /* SearchHeader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A8E51998B27E27442F92A0D4 /* SearchHeader.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7E7CA5DB8B03E0996ED60CF4 /* repl_tchar.h in Headers */ = {isa = PBXBuildFile; fileRef = 0531221156E4ACCD80378784 /* repl_tchar.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7ECBCED8DC64BB8F662DEA78 /* Similarity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2FE89EA1708D0B4D0BC64389 /* Similarity.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7EDA46A71503CC86FD79D079 /* IndexInput.h in Headers */ = {isa = PBXBuildFile; fileRef = 86E15A9EB69363D10D913642 /* IndexInput.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7F25DF989EF7CFD62B5B5873 /* stem_ISO_8859_1_spanish.c in Sources */ = {isa = PBXBuildFile; fileRef = 79BDC5A2DADD567AA7B91A8B /* stem_ISO_8859_1_spanish.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7F36B7FC0280B8CC4E258A50 /* _PhraseScorer.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A94213291EAAE06BBB8E0BD /* _PhraseScorer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7F83A2519B42FD86171DBD13 /* stem_UTF_8_finnish.c in Sources */ = {isa = PBXBuildFile; fileRef = DBA415471EF1AE130E180C95 /* stem_UTF_8_finnish.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7FF31952B1CD13A373C96793 /* stem_UTF_8_german.h in Headers */ = {isa = PBXBuildFile; fileRef = A7FF2DFE608F4496127F1767 /* stem_UTF_8_german.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7FF90BF882BB8E271FB9E454 /* Array.h in Headers */ = {isa = PBXBuildFile; fileRef = DF5E0DCEA28982A2A0A3973C /* Array.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 80CC4BF87B956F5E6C792402 /* FieldsWriter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1D935829581CC8F7928E1616 /* FieldsWriter.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 811C91DC0B03B7E0CC4F9802 /* DateTools.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 696BD38B0EAA77AAF9E060CE /* DateTools.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 81CAFBF99E725B9B77A14256 /* Scorer.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DA51F90DA79B1071D8B1288 /* Scorer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 81CB25F595B4DDB7FC638DE2 /* _IndexFileDeleter.h in Headers */ = {isa = PBXBuildFile; fileRef = 48C5D40EA8A54D51028D6241 /* _IndexFileDeleter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 81D8E973B3BA22346AC0B6FF /* Field.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E6C66429E77E9D0CF89CC2A /* Field.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 81EA9BE7F1A92DD7BA9DB8C8 /* IndexOutput.h in Headers */ = {isa = PBXBuildFile; fileRef = A74EE63073B59E49EED0CC73 /* IndexOutput.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 81F611870DA464EFE91F7B35 /* DateField.h in Headers */ = {isa = PBXBuildFile; fileRef = 0435F1F15171D12EC7EA51E5 /* DateField.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 82293E14A370DA8FD5D7367C /* FieldSelector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C8DF2B8D9E760A058241AEB5 /* FieldSelector.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 8241524EF697061E215AD6DA /* IndexModifier.h in Headers */ = {isa = PBXBuildFile; fileRef = 128A0FA14C4275A64361ABD8 /* IndexModifier.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8284CC6D9BE42BB2ECC46FCB /* PhraseQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = 2CDFF10CDB7CBA238F57E2F7 /* PhraseQuery.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 82C97C79479E047CAFCE6A82 /* PrefixQuery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D1E2D2D2D2C0422EEDE7419F /* PrefixQuery.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 833A558D4B5129A9B460E838 /* _PhraseQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = A277BD760515F233445AA8DC /* _PhraseQueue.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 83D6F85A49FBB46E06BCD7F7 /* error.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F5DC46D60CEC863B51316925 /* error.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 848A3DE94D6A3F0DFCD8C0BE /* GermanStemmer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 618E8E5524841BF7F44040A0 /* GermanStemmer.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 84D9C393133CCE0A2C6F0782 /* ScorerDocQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = F4C7B28B021C2514814F9E7D /* ScorerDocQueue.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8563C7B2C7993628E742B20F /* condition.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6D40C9B7228F5E891C332B15 /* condition.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 85E77487A0E52C8204A63FF5 /* _StringIntern.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E67D77C29B1265C3305C5A4 /* _StringIntern.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8618292725EEA4F326712B48 /* Explanation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8131981DF7D13C79FD86CF00 /* Explanation.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 87EF113CE0624066DF4C5016 /* RangeQuery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 70C22977A6B70616EE12ED42 /* RangeQuery.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 89E06CCB02CE1EE31012423A /* TextFragment.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5D57A3028FBCC4A47A78535F /* TextFragment.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 89E22E9FF47D525D91E018D0 /* condition.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6D40C9B7228F5E891C332B15 /* condition.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 8A21A6477E4AFD0FCFDA27B3 /* MergeScheduler.h in Headers */ = {isa = PBXBuildFile; fileRef = 3721FC63F5E3DE1E25972B0B /* MergeScheduler.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8A3D97430D5C7C463774BF1B /* CLConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 99B579C4BF8A3BE3878628BA /* CLConfig.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8A73D4FBF8BFF90E540EED6F /* StandardAnalyzer.h in Headers */ = {isa = PBXBuildFile; fileRef = A9627C18AE73CE1C935A697D /* StandardAnalyzer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8B01CDA82C3A60C5E9D6B111 /* CachingWrapperFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 944D8B83FADF6F0C5ED5A0D2 /* CachingWrapperFilter.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 8CC7041E7D45B0A77FED26D1 /* stem_UTF_8_finnish.h in Headers */ = {isa = PBXBuildFile; fileRef = 3156191A827F28916EAD039B /* stem_UTF_8_finnish.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8CC8347B3F080B35ECABBF93 /* Encoder.h in Headers */ = {isa = PBXBuildFile; fileRef = B1E85BE64E549D2A654576A3 /* Encoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8CF9B9E240FE212AEA7FABD3 /* DirectoryIndexReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 444FBAA447CE99673FBB730B /* DirectoryIndexReader.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 8D53731267BA020C219C2718 /* FieldSortedHitQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 2019F730B605453ACA44B804 /* FieldSortedHitQueue.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8DABD7BC701959899EF4F423 /* stem_ISO_8859_1_finnish.c in Sources */ = {isa = PBXBuildFile; fileRef = E290402EE94F042E03B6C0F9 /* stem_ISO_8859_1_finnish.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 8DC89159FC4E8836F3199B6F /* QueryTermExtractor.h in Headers */ = {isa = PBXBuildFile; fileRef = 17964AB66E2FF261BCCF392B /* QueryTermExtractor.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8DF5E43C522E2CA45427D7B3 /* _BooleanScorer.h in Headers */ = {isa = PBXBuildFile; fileRef = 2615983316A44758FFEC2490 /* _BooleanScorer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8E4EEA1DB1A922E105B76655 /* CachingSpanFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF24B1B1D4A77EFAB9F71585 /* CachingSpanFilter.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 8E657DB3EF39041BA22A6024 /* stem_ISO_8859_1_swedish.c in Sources */ = {isa = PBXBuildFile; fileRef = 1F5C6F2C1490733B1A017D8C /* stem_ISO_8859_1_swedish.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 8EA57F207C7FDF4DFAAF46B5 /* stem_ISO_8859_1_portuguese.h in Headers */ = {isa = PBXBuildFile; fileRef = DD8B2CA2D3265AF8911E9BAB /* stem_ISO_8859_1_portuguese.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8F83DEED13CF0C2F7B29C32D /* repl_tchar.h in Headers */ = {isa = PBXBuildFile; fileRef = 0531221156E4ACCD80378784 /* repl_tchar.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8FD5641F7EF311DCD0330E0D /* BooleanClause.h in Headers */ = {isa = PBXBuildFile; fileRef = 41CBAC46264848FB3C9E091E /* BooleanClause.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8FF7E9FF13E030C1D9559273 /* TokenSources.h in Headers */ = {isa = PBXBuildFile; fileRef = CE7D186707CB6315363BA5BF /* TokenSources.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8FF937411034CC8FD60955F5 /* _IndexFileNameFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 73F5EEEA5D31D545EC728CD4 /* _IndexFileNameFilter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 90A718D6E20BA3780429ED01 /* StandardAnalyzer.h in Headers */ = {isa = PBXBuildFile; fileRef = A9627C18AE73CE1C935A697D /* StandardAnalyzer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 91164FD1C95E8F7EB8EC8FF9 /* PhraseQuery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0619CA2714CEFA60FDBBD26D /* PhraseQuery.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 912ED9D846AD48B94F02FC78 /* _SegmentMergeQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 89B4FA065EEC6C655788DC63 /* _SegmentMergeQueue.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 91FAFC3EE99E4294DFFD58C8 /* stem_UTF_8_english.c in Sources */ = {isa = PBXBuildFile; fileRef = C075F32DC3941F30B2189850 /* stem_UTF_8_english.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 92B5B28E26F364B14EFCC20E /* QueryParserTokenManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 381F1366DEAFEA368FEC0FC2 /* QueryParserTokenManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 92D5E32D5A00A1CB00993BF8 /* QueryScorer.h in Headers */ = {isa = PBXBuildFile; fileRef = 24C1C0EEF48E5B94B51C6661 /* QueryScorer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 933208FE8AD5A42930049DA6 /* TokenSources.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 25F1308411FC4B1B441A7E70 /* TokenSources.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 939DF333A259D78CCFD4FF35 /* QueryFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = E647B4CE88D910BD909EF7D5 /* QueryFilter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 94438BA57DEA7DE7F2F8232D /* MultiPhraseQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = 3535995D4A28B8869157F67F /* MultiPhraseQuery.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 951DFD48963F5AF07A6C84F8 /* _ExactPhraseScorer.h in Headers */ = {isa = PBXBuildFile; fileRef = 2821A9CBA3B5C489E85A51E5 /* _ExactPhraseScorer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 951ECD0C85413FD3D05CCDB1 /* FieldsReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 572456C6E2E13D0F9BB87A93 /* FieldsReader.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 95269DF30D92CDED8FF1B80A /* _SegmentMerger.h in Headers */ = {isa = PBXBuildFile; fileRef = 075E7B74158EB07D3573CDCE /* _SegmentMerger.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 95CFF92A0919DD7B12168F20 /* TermInfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9853ABDC632E9F9F0AF7B1E2 /* TermInfo.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 95D7ADCBC6C581B32F4BDE0B /* _StringIntern.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E67D77C29B1265C3305C5A4 /* _StringIntern.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 95E6760ABE23D10A88EFAE97 /* WildcardQuery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E220EEFD07722DDA6CEA178D /* WildcardQuery.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 9609425CCEC353CD8AE21913 /* ThreadLocal.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6284B6CE304456F7AC277046 /* ThreadLocal.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 96348D29A4B1434527FFB861 /* RAMDirectory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 90905C590BE1580DC15B5D72 /* RAMDirectory.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 9674C8E0085073C0689D3887 /* BRCLucene-iOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = C560E89140891536E480371B /* BRCLucene-iOS-dummy.m */; }; + 96799F96738CA78D4BC6774F /* MD5Digester.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 598BCDE0CB72EB179F420AEF /* MD5Digester.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 97033D6749D59CA36BA599AD /* SkipListWriter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C833C400B1D27CBCA5C28C03 /* SkipListWriter.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 970E178D0F5940A92CD348F9 /* stem_UTF_8_russian.h in Headers */ = {isa = PBXBuildFile; fileRef = 8150375DE47FB4492DE04833 /* stem_UTF_8_russian.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 972315BD0190E7DF23DB427B /* _TermSpans.h in Headers */ = {isa = PBXBuildFile; fileRef = C951D813358FB229881B81E9 /* _TermSpans.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 978173A0EE764929ACFB7AE7 /* IndexWriter.h in Headers */ = {isa = PBXBuildFile; fileRef = 161A0C13CA693AF3721D042A /* IndexWriter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 979B769C820F8ECD7F40E232 /* utilities.c in Sources */ = {isa = PBXBuildFile; fileRef = 08A3884580B9C317D269FDDD /* utilities.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 97B0A34D7A8F6641504EDE53 /* AnalysisHeader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 71761D115AC3B36A9C7F0855 /* AnalysisHeader.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 97DA9C904417F4BD1A367625 /* TermInfosReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F1EF4AB922B873E0FF40FC36 /* TermInfosReader.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 98107EACED05CE1F709A6E4D /* MultipleTermPositions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 97A841B81A9045DD77B2D129 /* MultipleTermPositions.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 986D5230EA858A080365CE1A /* DisjunctionSumScorer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 561A23B57EBC4AB3104B2135 /* DisjunctionSumScorer.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 98C3E4AC262806767DBDAB99 /* MultiFieldQueryParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 0BBDF23FE12A2BF32407A389 /* MultiFieldQueryParser.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 98C3F9B2B762F0C0EBC80310 /* VoidList.h in Headers */ = {isa = PBXBuildFile; fileRef = 0ED2707ADF8A710AB8C04354 /* VoidList.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 99F371286A1DF33269912163 /* LockFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A8462EC58F207BCC7472090 /* LockFactory.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9AA8C1B51B5644F573E87798 /* Payload.h in Headers */ = {isa = PBXBuildFile; fileRef = A02EE6B24F45CA042375C4C9 /* Payload.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9AB12BF5518FABB43841E436 /* SegmentMergeInfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 942ED4342AC269C65C0E81CD /* SegmentMergeInfo.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 9B4A77851DC8C561E0AF5346 /* stem_UTF_8_swedish.c in Sources */ = {isa = PBXBuildFile; fileRef = 94BC7B1991D96E91AF1A14C9 /* stem_UTF_8_swedish.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 9B93535060FDB71FB50F25E6 /* WildcardTermEnum.h in Headers */ = {isa = PBXBuildFile; fileRef = 24ACCD09C4CCCC8102BD0651 /* WildcardTermEnum.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9BFE527B60269541617220CE /* stem_UTF_8_spanish.c in Sources */ = {isa = PBXBuildFile; fileRef = 5AD98019D95FA39573B5A783 /* stem_UTF_8_spanish.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 9C0C02395EDD868119AE9167 /* FSDirectory.h in Headers */ = {isa = PBXBuildFile; fileRef = 2CBED8DF2F1E9E7467DE3537 /* FSDirectory.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9C50AA8F2319192844263D36 /* TokenGroup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F5DEC96F8DBFAF2F8075304C /* TokenGroup.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 9D6EC587B4291167A70A1E48 /* SpanWeight.h in Headers */ = {isa = PBXBuildFile; fileRef = BF119CB72BC2FA5795FEDB1E /* SpanWeight.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9D7DAD3BDA5240E33A6ED982 /* stem_UTF_8_dutch.h in Headers */ = {isa = PBXBuildFile; fileRef = 782739F6CE5C46C963EC74C1 /* stem_UTF_8_dutch.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9D874C39221828DFB930F5D6 /* _bufferedstream.h in Headers */ = {isa = PBXBuildFile; fileRef = F0D1CBA8E8C1F476F5AE9467 /* _bufferedstream.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9D88F056DB4B5952069090C5 /* SegmentReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B747B0D193B44B5389361ABC /* SegmentReader.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 9D92E60127E28DD62D8F70FC /* stem_UTF_8_spanish.h in Headers */ = {isa = PBXBuildFile; fileRef = 1CCED5D968A1EA94CE495CA3 /* stem_UTF_8_spanish.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9DA8BE35B6BF9B912546F64C /* QueryScorer.h in Headers */ = {isa = PBXBuildFile; fileRef = 24C1C0EEF48E5B94B51C6661 /* QueryScorer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9DDA15EFB38A896A449E518F /* MMapInput.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EEA2C8FA695558871EA174AA /* MMapInput.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 9DDF7E14494DFAC92E8F38EA /* BooleanClause.h in Headers */ = {isa = PBXBuildFile; fileRef = 41CBAC46264848FB3C9E091E /* BooleanClause.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9E68074AB63E87D2CD641D57 /* SearchHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = 01C5084C0EB7A50F30E153E3 /* SearchHeader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9E913EFE9607ECF583F20EFC /* FuzzyQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = 08565E16DB82DF2ED956B64A /* FuzzyQuery.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9F69DBEDB09F4A9E7628AC03 /* modules.h in Headers */ = {isa = PBXBuildFile; fileRef = 8250CD2D402839BE57170FE0 /* modules.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9F7123A6FFECDDD429901267 /* repl_wctype.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C89E2A10F35E0711CA0B857 /* repl_wctype.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A0547122EB3CAE89A026FC4E /* Spans.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FE62E2C9BE065ED04B141A2 /* Spans.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A077D6CD544A2B837A3BCF65 /* Analyzers.h in Headers */ = {isa = PBXBuildFile; fileRef = 880E2676F9904DB7B53CEC79 /* Analyzers.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A0BC44CA83ECE1C59156E907 /* MultiReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AC8751090E6E3C49B858C374 /* MultiReader.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A10F683DF611107A36C99085 /* Filter.h in Headers */ = {isa = PBXBuildFile; fileRef = ACB710A42B9F368BC95D775D /* Filter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A129CDA4E88C386FB74DC1CA /* stem_UTF_8_swedish.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C3A327328A0743345D8F800 /* stem_UTF_8_swedish.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A1DB245335B6423E6DECAF48 /* Terms.h in Headers */ = {isa = PBXBuildFile; fileRef = B5EB47B2B6F3F36AEA8B0568 /* Terms.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A1F4229D33D5823A55FCD212 /* SegmentTermEnum.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC45EF9298BBF1CBF5DAEFAE /* SegmentTermEnum.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A213F8BA660BE572F95DDB61 /* Analyzers.h in Headers */ = {isa = PBXBuildFile; fileRef = 880E2676F9904DB7B53CEC79 /* Analyzers.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A226818AC2BE679F9A30F28D /* stem_ISO_8859_1_porter.h in Headers */ = {isa = PBXBuildFile; fileRef = 85145B0375A157A82DEC19A2 /* stem_ISO_8859_1_porter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A2832903671139126DFFD165 /* Equators.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8386CE4235C56DBAE73C949B /* Equators.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A34113B9606B609D132C0D5C /* DirectoryIndexReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 444FBAA447CE99673FBB730B /* DirectoryIndexReader.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A356C249412AA74FD506CACD /* Hits.h in Headers */ = {isa = PBXBuildFile; fileRef = 9EDFE19FF4B4CF03C431B501 /* Hits.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A35CAFF2061FD96FAC595F5F /* IndexWriter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A84DDC3C18DB7F42298C59BD /* IndexWriter.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A40526F9727AE528B4FC18CC /* stem_UTF_8_danish.c in Sources */ = {isa = PBXBuildFile; fileRef = DC98E89A0ED4FB8BA5508ED2 /* stem_UTF_8_danish.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A430EC2A92DB0D00BFBADE7E /* IndexDeletionPolicy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3F4FC420F98D71F60728DC78 /* IndexDeletionPolicy.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A4484C1091DA7E65A8642292 /* SegmentTermDocs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 86A917E90ABB2C84EFE23BB1 /* SegmentTermDocs.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A49A7E92D3EEB2D84B606A1F /* Document.h in Headers */ = {isa = PBXBuildFile; fileRef = 416A1790EE52ECA04818E23A /* Document.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A4A19170EC9225B9F00409EA /* _SharedHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = 650A560B46237D58801A90A3 /* _SharedHeader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A5684FC921514E372A8F89CF /* FastCharStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 24B454F42CA28C2F37E07D53 /* FastCharStream.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A63784073CD5978FE4628D49 /* FuzzyQuery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9058F7809EA379D35E92D268 /* FuzzyQuery.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A65E58AB6876F0EAFD4E6348 /* TermInfosReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F1EF4AB922B873E0FF40FC36 /* TermInfosReader.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A69ABE872112F12BA2CA9DEC /* QueryFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = E647B4CE88D910BD909EF7D5 /* QueryFilter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A6C71D680DC39A5CF09171EC /* QueryParserConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 898A500B20CCDFDC0AF6D2E0 /* QueryParserConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A6D699D95B66BD3247FD6D59 /* _MD5Digester.h in Headers */ = {isa = PBXBuildFile; fileRef = EE71038CC6DBB4F26B63FD6E /* _MD5Digester.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A6DB997894BC6382D1BDA3F1 /* BitSet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 380534FAD021EAE958AD0732 /* BitSet.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A6EDFA852D5C6EFBF08688C3 /* SharedHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = 51970B97C036DDAF996030F6 /* SharedHeader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A805502475425A1BA4771737 /* Equators.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8386CE4235C56DBAE73C949B /* Equators.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A829387B0973483079EAA736 /* stem_ISO_8859_1_finnish.h in Headers */ = {isa = PBXBuildFile; fileRef = FCFF6C99F270D75331A591FF /* stem_ISO_8859_1_finnish.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A8BF0822C351F99E1593E681 /* DateField.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D545707185C7C927AE1B38B5 /* DateField.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A98BF1D78F05B07F198B17DD /* Field.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E6C66429E77E9D0CF89CC2A /* Field.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AB01C191CBB3541ACB42C4AD /* _ApiHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = 080038A2810DF1B7AF5430B8 /* _ApiHeader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AB4F1076029FB1B88481EA3F /* BooleanQuery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3B19C2031B14D9646AFE28EC /* BooleanQuery.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + ABEFF5987ED8B74E509B9EDA /* stem_ISO_8859_1_french.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F55A7FAC0A31D45362DBCD1 /* stem_ISO_8859_1_french.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AC1A48107EEB0074E0B16822 /* _NearSpansOrdered.h in Headers */ = {isa = PBXBuildFile; fileRef = D0680B69A04A33D50CEC65F1 /* _NearSpansOrdered.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AC1C94E91101D417A37E1DA2 /* PriorityQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 44799C0DE82687B1856E7B90 /* PriorityQueue.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AC49255CD1F6C0CAE6F38A6F /* MergeScheduler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E218636CDC69F8FCE8435253 /* MergeScheduler.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + AC55A4BED2FF7168AE61B7A0 /* stem_UTF_8_spanish.c in Sources */ = {isa = PBXBuildFile; fileRef = 5AD98019D95FA39573B5A783 /* stem_UTF_8_spanish.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + AC68583D05883379693FBCF0 /* HitQueue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 22953DF075C61EA5AC13EEE6 /* HitQueue.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + AC6AE219BFCBB19870087516 /* TextFragment.h in Headers */ = {isa = PBXBuildFile; fileRef = 818A9068B3FD13D69636F427 /* TextFragment.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AC6CFE07BCBC281AB2B835D5 /* _TermInfosReader.h in Headers */ = {isa = PBXBuildFile; fileRef = 4DAA73037B6B6F5E88B462B8 /* _TermInfosReader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + ACC832EE6D43E66A0F462137 /* _MMapIndexInput.h in Headers */ = {isa = PBXBuildFile; fileRef = BF3FA77DBA865A7EA0F87D43 /* _MMapIndexInput.h */; settings = {ATTRIBUTES = (Public, ); }; }; + ACCE3D23B8050157E7852010 /* _SegmentHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = 8CAB5B5EDF27414162D95761 /* _SegmentHeader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + ACDE7E4082B42996FADED0CD /* ExactPhraseScorer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CEDE1E95F6AEB482DEC50837 /* ExactPhraseScorer.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + AD4255B1EBEFF388162E214A /* stem_ISO_8859_1_porter.c in Sources */ = {isa = PBXBuildFile; fileRef = 43F3948F67562D60FB9E6AF4 /* stem_ISO_8859_1_porter.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + ADC56240736063110EF44717 /* arrayinputstream.h in Headers */ = {isa = PBXBuildFile; fileRef = 7F39E1E03B9D83FEC19B360F /* arrayinputstream.h */; settings = {ATTRIBUTES = (Public, ); }; }; + ADDB0B1205C7AD76FCBDEF98 /* IndexFileNameFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42323A6CEBEFD53A6D924181 /* IndexFileNameFilter.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + AEA4912FAC0F5A0DB338C797 /* PhraseScorer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CE0CD854DDBCAEEEB189BA79 /* PhraseScorer.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + AEB897ECDCA434EFB50A4DAA /* MatchAllDocsQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = 34AB0B068653D8F99851D1A7 /* MatchAllDocsQuery.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AEC7D2CE999030C831B5DD22 /* repl_tcstod.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C7E5113841A81E955FAC79B7 /* repl_tcstod.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + AF12D3B83AAFC35A51CAC05D /* stem_UTF_8_english.c in Sources */ = {isa = PBXBuildFile; fileRef = C075F32DC3941F30B2189850 /* stem_UTF_8_english.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + AFA54CAF286E72B1CA2584BD /* _VoidMap.h in Headers */ = {isa = PBXBuildFile; fileRef = 29C228F1AC57C1F0958DF81D /* _VoidMap.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AFF6053459BAC0874276405C /* Lock.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3489740AA4F7A8C9B2E52B61 /* Lock.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + AFFF1F080EADB0DE59C45710 /* _SkipListWriter.h in Headers */ = {isa = PBXBuildFile; fileRef = A8B2143D61244E46BC66ADA9 /* _SkipListWriter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B01EBA2F7ACF7DAB8D2F2EBB /* IndexInput.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2F200C192FF0E7225FF60750 /* IndexInput.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B04113067CA4EC337D7FB94F /* utf8.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B6066E59EBFD4D71863B360E /* utf8.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B059782BB3D8454C4A8A963B /* SegmentInfos.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 50649A638AD306D1396C9CFA /* SegmentInfos.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B05D000F98F02C8DB5FCB32C /* _BooleanScorer.h in Headers */ = {isa = PBXBuildFile; fileRef = 2615983316A44758FFEC2490 /* _BooleanScorer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B10921EC28E60DF78EF9428D /* stem_UTF_8_norwegian.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FAE946BEA51836D00F731C9 /* stem_UTF_8_norwegian.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B18916EBCD8C437B37E1FDE0 /* RangeFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = EEDCA5C051084BDD5A5A970B /* RangeFilter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B1A801DC597F132A6B56780C /* SpanQueryFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 53614503EC77360F0045FC2D /* SpanQueryFilter.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B1DA66390F340B85152CE697 /* SimpleFragmenter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7E83EB9372570C10A6CEB6B6 /* SimpleFragmenter.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B1E0DB703BE557A672B1E345 /* NearSpansOrdered.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5DF72D32A04B571A69F9019F /* NearSpansOrdered.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B209F9C8B5E9553B2B1CC36B /* SpanScorer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 198D32677B449C31264CC924 /* SpanScorer.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B2FC553B9896E1343EE88049 /* TermVector.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E43193F2F0A7BEC76507B3D /* TermVector.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B32E96531D4C0D042E33F7CB /* MergePolicy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 989DDAFD77677DE9770763D4 /* MergePolicy.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B335E2CB6EB32481985FE089 /* SimpleFragmenter.h in Headers */ = {isa = PBXBuildFile; fileRef = 13E2105B0E5A40085B063C99 /* SimpleFragmenter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B38A92D4AE83771114866B9E /* WeightedTerm.h in Headers */ = {isa = PBXBuildFile; fileRef = ACC13AD187B30C8FE98BDEF4 /* WeightedTerm.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B3A38CF9DDBD077FE28842F2 /* CachingTokenFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 646D984DA01519CE1CE0F18E /* CachingTokenFilter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B3D54A44FDB0E621A22C8B70 /* Misc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B7A08A712776F849131C3724 /* Misc.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B42C0D1EC1451654305D85BC /* gzipcompressstream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 91D5FD2E8E8D5AADC6AFC18F /* gzipcompressstream.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B46D1E495006E185DDF67AD0 /* LockFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C65BB8C950BD3D088902E271 /* LockFactory.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B523E383F57DE24E2E248509 /* _dirent.h in Headers */ = {isa = PBXBuildFile; fileRef = 23E597168FBD2407E903A258 /* _dirent.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B52C1844337182FFD1E988A3 /* _FieldCacheImpl.h in Headers */ = {isa = PBXBuildFile; fileRef = 627AE9BA1D456E672F0978D9 /* _FieldCacheImpl.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B584610A897A9C44FEE37ED4 /* Misc.h in Headers */ = {isa = PBXBuildFile; fileRef = 85A1065260F668F703369982 /* Misc.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B5DCC30F61FA58A0CBD4DD0C /* StandardTokenizer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E063671C87DD5BD49E46EA9F /* StandardTokenizer.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B695344286CDBD6D94971FEB /* repl_lltot.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 602EC519A3E66D140B2859EC /* repl_lltot.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B71ACF986317D1F721129557 /* MMapInput.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EEA2C8FA695558871EA174AA /* MMapInput.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B78F1874579D479397307B12 /* CachingWrapperFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 944D8B83FADF6F0C5ED5A0D2 /* CachingWrapperFilter.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B7C94724D5AB27EC270A547F /* FilteredTermEnum.h in Headers */ = {isa = PBXBuildFile; fileRef = 55F6970EA8C4AADA5A214168 /* FilteredTermEnum.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B83399E0A0CD1F78EB430E92 /* SimpleHTMLEncoder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7E47EE3B1FA8B01F42A6F2A5 /* SimpleHTMLEncoder.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B8E26C3BE136EDBC0E9CCF7B /* NumberTools.h in Headers */ = {isa = PBXBuildFile; fileRef = 2923454DC0414315374C5EED /* NumberTools.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B8E5F3EA5F71AFD07E0587A6 /* stem_ISO_8859_1_spanish.h in Headers */ = {isa = PBXBuildFile; fileRef = D21681199F2C28266563161C /* stem_ISO_8859_1_spanish.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B931A29DDB8478C76503B6B1 /* _SharedHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = 650A560B46237D58801A90A3 /* _SharedHeader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B95DCE654DBD0D856534B0C0 /* IndexReader.h in Headers */ = {isa = PBXBuildFile; fileRef = ED5D200BBD68E5DD8F1ECA26 /* IndexReader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B9F23EB7B89AC11FDC57EDE9 /* stem_UTF_8_danish.c in Sources */ = {isa = PBXBuildFile; fileRef = DC98E89A0ED4FB8BA5508ED2 /* stem_UTF_8_danish.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + BAAE00874D78DCB05FF80CB2 /* stem_ISO_8859_1_dutch.c in Sources */ = {isa = PBXBuildFile; fileRef = 179B255A228E9B9E4FD36995 /* stem_ISO_8859_1_dutch.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + BACF6E0A20BE0A26B2BFE085 /* stem_ISO_8859_1_swedish.h in Headers */ = {isa = PBXBuildFile; fileRef = 766AA2B34AAFCF76B1F3D526 /* stem_ISO_8859_1_swedish.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BACFF5AEA06D802381A38B5D /* libstemmer.h in Headers */ = {isa = PBXBuildFile; fileRef = DA2D5F840DB2036D97DC7E39 /* libstemmer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BAD0B843F834E61B3C70A3AC /* stem_ISO_8859_1_italian.h in Headers */ = {isa = PBXBuildFile; fileRef = FF47A291D095583938BCCE6F /* stem_ISO_8859_1_italian.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BB0918AFF04E0CA486404BCF /* StandardTokenizer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E063671C87DD5BD49E46EA9F /* StandardTokenizer.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + BBAAF0107F6F578C6C70802C /* lucenebase.h in Headers */ = {isa = PBXBuildFile; fileRef = 091B1611175D2D4F7C2D282B /* lucenebase.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BBEF59B2EC875AD9F41A6079 /* ScorerDocQueue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7269750624A74B0D02FE2A9C /* ScorerDocQueue.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + BC0A21762392C50293916006 /* Fragmenter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8A3B0A4220061DBBE14A0EDC /* Fragmenter.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + BCC84F8ABE37837BC2A3C9F8 /* StandardFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B4217FE2826681C9571EAD92 /* StandardFilter.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + BCCBFBC5D5584E817F0BA111 /* StandardTokenizer.h in Headers */ = {isa = PBXBuildFile; fileRef = 350C146EFD9C0884BD724FD5 /* StandardTokenizer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BD0C10AA1FAF382D6C1CC4EF /* BooleanQuery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3B19C2031B14D9646AFE28EC /* BooleanQuery.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + BD589F0E47F4E7DE065A76C3 /* Terms.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D5B6CC86362332A6F2839964 /* Terms.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + BD5CCFA09A9EFE16BD10B6F6 /* Scorer.h in Headers */ = {isa = PBXBuildFile; fileRef = CD101E72857254DE70CA0442 /* Scorer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BDF3359D3B99391145769068 /* MultipleTermPositions.h in Headers */ = {isa = PBXBuildFile; fileRef = EE68C43C9CE9BBCED15DBA30 /* MultipleTermPositions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BE46E25F981BAB8FFE1C43B7 /* SpanNearQuery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E87776AC74E5E2FFD18A381B /* SpanNearQuery.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + BE83B97062BF769ADB2937AA /* PhrasePositions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 022B190EC27B593695204DAB /* PhrasePositions.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + BE8689D87DCF9A68BC419245 /* WildcardTermEnum.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 59472088F0CB14C50E3B8250 /* WildcardTermEnum.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + BE9AEB626B8D7FBF9A9BC941 /* Misc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B7A08A712776F849131C3724 /* Misc.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + BEA43B7AA113546ADF46A582 /* FilteredTermEnum.h in Headers */ = {isa = PBXBuildFile; fileRef = 55F6970EA8C4AADA5A214168 /* FilteredTermEnum.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BF04A515703224B966E891E1 /* FSDirectory.h in Headers */ = {isa = PBXBuildFile; fileRef = 2CBED8DF2F1E9E7467DE3537 /* FSDirectory.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BF235884E3452F4AE4C90290 /* SpanFilterResult.h in Headers */ = {isa = PBXBuildFile; fileRef = 7EE719468C11B64E40622BF0 /* SpanFilterResult.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BF8F09B74EB4D8096B1A2EEB /* _ConjunctionScorer.h in Headers */ = {isa = PBXBuildFile; fileRef = C05BA5FC49FD02E0C15821C7 /* _ConjunctionScorer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BFA7D59FFA87DB09F62012DF /* Scorer.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DA51F90DA79B1071D8B1288 /* Scorer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C0C1B9DC2B240E6CA97878DD /* LockFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A8462EC58F207BCC7472090 /* LockFactory.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C0C5464108E192D81F0ED6BF /* CJKAnalyzer.h in Headers */ = {isa = PBXBuildFile; fileRef = F1C3CF60424D58A52AF05B1E /* CJKAnalyzer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C0F226B04E55E2CD50211F9D /* stem_ISO_8859_1_english.c in Sources */ = {isa = PBXBuildFile; fileRef = 05A08F757DF09A0054795337 /* stem_ISO_8859_1_english.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C134CFDDB69FCDE9BBE05443 /* FuzzyQuery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9058F7809EA379D35E92D268 /* FuzzyQuery.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C13BA278E35F96A0C238F75D /* _Arrays.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D1A9CB59C0AD5B26B898ABA /* _Arrays.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C19CDC7E4ADC820B6ECA38E8 /* GermanStemmer.h in Headers */ = {isa = PBXBuildFile; fileRef = 94B1109EB501086D81FAF74F /* GermanStemmer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C1F828983B726E947B28B72B /* NearSpansUnordered.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6A59577679CC4CEC9F8CC8EB /* NearSpansUnordered.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C212A3752A68FA601782EE4A /* BooleanScorer2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 50965D84FBD88CF6E549299B /* BooleanScorer2.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C2CA3E748D0874F45B2BB37F /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 872D2A9F1471134AB2EBA436 /* Cocoa.framework */; }; + C2DFCFA5824CFE09800F3D66 /* Payload.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1C069324AE3E4A26964298FF /* Payload.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C2FF7A7B6D2DBFC8D6270C29 /* SegmentMergeInfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 942ED4342AC269C65C0E81CD /* SegmentMergeInfo.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C3471AD77F443E6CCDFDC1BC /* PriorityQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 44799C0DE82687B1856E7B90 /* PriorityQueue.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C3C6D47411055D403D820E57 /* GermanStemFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = B1E07F1888DEDFCA13AC51BE /* GermanStemFilter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C3E993A441B19FA2B022C437 /* QueryFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FF7508D2F9070F750E6E7033 /* QueryFilter.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C3F28B4F270BB9798CBF17A8 /* stem_UTF_8_danish.h in Headers */ = {isa = PBXBuildFile; fileRef = ED4C6B04C2F120273C226877 /* stem_UTF_8_danish.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C4AB0DA7774C448B85421856 /* FieldCacheImpl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E28A55F200369E49461C7A01 /* FieldCacheImpl.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C5417C6B172E1BC46583BE2B /* repl_tcstoll.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A975AA85AD3A0FF93E402E4 /* repl_tcstoll.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C55592E2F08BE83085B9EB65 /* SegmentTermDocs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 86A917E90ABB2C84EFE23BB1 /* SegmentTermDocs.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C5FC154167D7D3D27FA8CFC7 /* SpanNearQuery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E87776AC74E5E2FFD18A381B /* SpanNearQuery.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C63AE09C7ED114E2124D6135 /* FieldDoc.h in Headers */ = {isa = PBXBuildFile; fileRef = A042B88B39AC31C1407BEA94 /* FieldDoc.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C65B440993A4649544A435B0 /* CachingSpanFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = EFB69E0443F3A22116F5363C /* CachingSpanFilter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C66E32635310651C7F81384D /* stem_ISO_8859_1_norwegian.h in Headers */ = {isa = PBXBuildFile; fileRef = 63281A45C3F3B0CB3A6E7025 /* stem_ISO_8859_1_norwegian.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C6712FF1475EFCC3392A7C48 /* FilteredTermEnum.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7941776DE9A915442BCCF7B7 /* FilteredTermEnum.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C6F076414A2D5346C3711AD2 /* _ApiHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = 080038A2810DF1B7AF5430B8 /* _ApiHeader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C6FF7201D500DD495D51E7DD /* SpanWeight.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F63FF2BFB9642EA9F4CD1EAE /* SpanWeight.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C707E19073FC61178008B573 /* MultiPhraseQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = 3535995D4A28B8869157F67F /* MultiPhraseQuery.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C70B97D64570E05AFEC4BDD3 /* VoidList.h in Headers */ = {isa = PBXBuildFile; fileRef = 0ED2707ADF8A710AB8C04354 /* VoidList.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C732208FD620111965C365D5 /* SegmentInfos.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 50649A638AD306D1396C9CFA /* SegmentInfos.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C7347030351B01EB126F4C54 /* _FieldDocSortedHitQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 91DE2F0AC9C47E9329B7397F /* _FieldDocSortedHitQueue.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C7751C2C887F0023673129EB /* stem_ISO_8859_1_english.c in Sources */ = {isa = PBXBuildFile; fileRef = 05A08F757DF09A0054795337 /* stem_ISO_8859_1_english.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C822D5C92541F1C09BDC530C /* SpanFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 872C96F28C7FE3EBA881336C /* SpanFilter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C8616CA8D69552C122063484 /* _TermVector.h in Headers */ = {isa = PBXBuildFile; fileRef = 8565CF0D75DC28F681E3E039 /* _TermVector.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C87FA37A78A65AB20CFC11D0 /* stem_ISO_8859_1_portuguese.c in Sources */ = {isa = PBXBuildFile; fileRef = CD7BB525AEDFEAA2B610804F /* stem_ISO_8859_1_portuguese.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C8C9BF8DD705D1C4ADDA6EC6 /* _FieldInfos.h in Headers */ = {isa = PBXBuildFile; fileRef = 97DCFFA75EFBC35B9EE08783 /* _FieldInfos.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C976782639AF9226BB72227F /* Lock.h in Headers */ = {isa = PBXBuildFile; fileRef = 2F0D1D02B142098F0EDD555C /* Lock.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C985EBCCB60724B7F8D8602C /* _SkipListReader.h in Headers */ = {isa = PBXBuildFile; fileRef = 929BA395AF172F9582E56EC8 /* _SkipListReader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C9EBB931A21816753FAEF9C3 /* SpanNearQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = 7950725A0B3603036B7B80AF /* SpanNearQuery.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CA4C9CAD916B718D31952E34 /* QueryTermExtractor.h in Headers */ = {isa = PBXBuildFile; fileRef = 17964AB66E2FF261BCCF392B /* QueryTermExtractor.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CA9008D5D2B4002A522B4159 /* stem_ISO_8859_1_norwegian.h in Headers */ = {isa = PBXBuildFile; fileRef = 63281A45C3F3B0CB3A6E7025 /* stem_ISO_8859_1_norwegian.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CA9BC45B558D7C2542B47BB0 /* _PhrasePositions.h in Headers */ = {isa = PBXBuildFile; fileRef = FC3F89837B731B223F71435F /* _PhrasePositions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CAFF655782C832A6FFCA8088 /* _streambuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 547B57C4BCEA74606B2C7155 /* _streambuffer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CC1084200F2971549E99DBD6 /* _streambase.h in Headers */ = {isa = PBXBuildFile; fileRef = 9EF8DB5A95B45741D9635539 /* _streambase.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CC10CDCE8A6143EB8CE24985 /* MultiTermQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = 731DA62C2861ED07FA667D29 /* MultiTermQuery.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CC2DEA5A84A9AAC67E90944F /* NumberTools.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7E4B24911973F60CE6076892 /* NumberTools.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + CC318948923A585CB8763714 /* MultiReader.h in Headers */ = {isa = PBXBuildFile; fileRef = 8677A29928A78E301D0F517B /* MultiReader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CD47120EECFAAA73846B9124 /* SpanFirstQuery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F7A7CC1278FE6BF4C200F3D3 /* SpanFirstQuery.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + CD8463857F3AD2B675F543A0 /* TermInfosWriter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 55D29F50902214B0652807B4 /* TermInfosWriter.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + CD9D351AB1AB37BA92CA3CD9 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 479C19A019A38B5EFA99E17C /* Foundation.framework */; }; + CDEA8376E752DDBC6FF06B8C /* _FastCharStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C820EC029EE9C8D84F1B918 /* _FastCharStream.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CDFB9806CFFB037B724F5530 /* CLConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 99B579C4BF8A3BE3878628BA /* CLConfig.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CE42D895582557542667E73B /* IndexOutput.h in Headers */ = {isa = PBXBuildFile; fileRef = A74EE63073B59E49EED0CC73 /* IndexOutput.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CE673F94F69159185FA32840 /* Fragmenter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8A3B0A4220061DBBE14A0EDC /* Fragmenter.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + CE6D9E3BEFC478CD1D52233C /* stem_ISO_8859_1_danish.c in Sources */ = {isa = PBXBuildFile; fileRef = A361F6AE71675BCA7694ED1C /* stem_ISO_8859_1_danish.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + CE94B66D5596EAB687B37ADB /* IndexReader.h in Headers */ = {isa = PBXBuildFile; fileRef = ED5D200BBD68E5DD8F1ECA26 /* IndexReader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CEE474710D776CA8F24D72D0 /* _gunichartables.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C560253277C5924B77F32B6 /* _gunichartables.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CEFC5592E3C60648EB17C0D7 /* Scorer.h in Headers */ = {isa = PBXBuildFile; fileRef = CD101E72857254DE70CA0442 /* Scorer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CF24C5D45553128E162936BA /* stem_UTF_8_norwegian.c in Sources */ = {isa = PBXBuildFile; fileRef = AD83C3B75390F54F1CFB7090 /* stem_UTF_8_norwegian.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + CF53C782EEF639CF95BF07E6 /* DateFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E168F5C855FFE88A4486E8CA /* DateFilter.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + CF775E2C9EDB6AF256624505 /* _HitQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = E8F83A5CFCC4D3B26C4E3CF3 /* _HitQueue.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CF7A13DB488034EACB9A8087 /* SpanFirstQuery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F7A7CC1278FE6BF4C200F3D3 /* SpanFirstQuery.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + CFD40F87FAC56B53AABE0CA0 /* MatchAllDocsQuery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A2DEC5A03C4993CCC35B4135 /* MatchAllDocsQuery.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + CFE60A44BABC74D21672D881 /* stem_UTF_8_english.h in Headers */ = {isa = PBXBuildFile; fileRef = 7ABEF88AC3ACE18E1ED39699 /* stem_UTF_8_english.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CFFD340F7FF83A1236F2DB55 /* SharedHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = 51970B97C036DDAF996030F6 /* SharedHeader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D02FADF0391D98A15A37774F /* CachingWrapperFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = EB5239CF6EF0AD13D813486A /* CachingWrapperFilter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D032BCDA41A8B56E33F26E0E /* FieldCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 7F22C7CB57C09C24383D7107 /* FieldCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D0774B82BF46666B490188F0 /* ConstantScoreQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = 06BDB38963A90CFB6B9A17FE /* ConstantScoreQuery.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D0FBC3AD7DDA8ABBEB897955 /* _BooleanScorer2.h in Headers */ = {isa = PBXBuildFile; fileRef = 5933935B34B1DF1B909A82E1 /* _BooleanScorer2.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D13DFF3D6E3927799A829B6A /* stem_ISO_8859_1_french.c in Sources */ = {isa = PBXBuildFile; fileRef = 73BABBFE77D30CD9A7EF3147 /* stem_ISO_8859_1_french.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D1572C2F58BB6A8343901DA9 /* TermSpans.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C689EF134FEFB13911FC5165 /* TermSpans.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D2041050D97665AAE6B798D9 /* TokenGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = FDF46E905461FE8E96D416CA /* TokenGroup.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D273A66028C370A7C2890E64 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 479C19A019A38B5EFA99E17C /* Foundation.framework */; }; + D29269470EB12F684C94B9CB /* _threads.h in Headers */ = {isa = PBXBuildFile; fileRef = D3495D678ADEB38CDF6C3BF5 /* _threads.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D29FBE79D00BE78A5A55100A /* gzipcompressstream.h in Headers */ = {isa = PBXBuildFile; fileRef = F53B4AC72D5DA32F908E71D0 /* gzipcompressstream.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D2FE740AFDBB735F05F6DBDC /* TermScorer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DED5E1334CF9AA568354E30F /* TermScorer.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D36C45B74B54A71659719831 /* stem_UTF_8_porter.h in Headers */ = {isa = PBXBuildFile; fileRef = 6996EC84817B1EC2677FD772 /* stem_UTF_8_porter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D3788DE3C18E04B1796F53AF /* Term.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99AC527687D6316E67D8CED /* Term.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D3B15405B868CDE5AE5DB5C7 /* _IndexFileNames.h in Headers */ = {isa = PBXBuildFile; fileRef = B4A68DF41CAD862B699025AE /* _IndexFileNames.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D50E61CB4E7449F8E804D04E /* stem_KOI8_R_russian.c in Sources */ = {isa = PBXBuildFile; fileRef = 584C0ADCC53DEDA1B327E07A /* stem_KOI8_R_russian.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D53127606D032D4731D1CF40 /* Fragmenter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C263AD4FCE70A40F9D2B365 /* Fragmenter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D597D08FDE861618DA4F76B8 /* StandardFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A47E596A3AC81B1FF249DB1 /* StandardFilter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D5B63068BA7774EE0B74A070 /* FieldsReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 572456C6E2E13D0F9BB87A93 /* FieldsReader.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D6810986DDBDC3618C4BE7B7 /* arrayinputstream.h in Headers */ = {isa = PBXBuildFile; fileRef = 7F39E1E03B9D83FEC19B360F /* arrayinputstream.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D684CB423A32EB85564B7C0C /* FieldDocSortedHitQueue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 47FBF81F0D8B8F4FD9F8E133 /* FieldDocSortedHitQueue.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D6A3E0BDB30EC925BACCCF9C /* IndexFileDeleter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 17598ACC84E85A239272C398 /* IndexFileDeleter.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D6B950E3D3C20CD0B48DA1ED /* repl_tprintf.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 86C3166A689142932B326EE8 /* repl_tprintf.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D6D1EE92D9BEB7BE6C60B0A0 /* Sort.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A3EA9DC1BB124B3059D0E1D3 /* Sort.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D72EDBC8E4D16FFE6522B8E3 /* RangeFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = EEDCA5C051084BDD5A5A970B /* RangeFilter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D73ED8760FA1869174FD71D9 /* WeightedTerm.h in Headers */ = {isa = PBXBuildFile; fileRef = ACC13AD187B30C8FE98BDEF4 /* WeightedTerm.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D744B7E701CEE2BFBC5D7207 /* _Lock.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F7A8C6A99F8F23C3A7DF1F6 /* _Lock.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D7724C17F1D00576AEC16807 /* stem_UTF_8_porter.c in Sources */ = {isa = PBXBuildFile; fileRef = 67C48AE06CDA84D04C7CCA3A /* stem_UTF_8_porter.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D807FDAF6E828DA1EC8924E0 /* QueryParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 37C53A756CCC6A64E96334FD /* QueryParser.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D851B6C5DC3D265C0AFCC075 /* SpanOrQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = 0E5828676B5A86E4523513B4 /* SpanOrQuery.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D87B7EC6171BA11691E08C09 /* Reader.h in Headers */ = {isa = PBXBuildFile; fileRef = F3C06EA481D25C5A7420C040 /* Reader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D8B85D4D83C2C06DF28819D6 /* IndexOutput.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB3039F361815D24182FBDA4 /* IndexOutput.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D8F7C38193765D0AB8B2850D /* _FieldsReader.h in Headers */ = {isa = PBXBuildFile; fileRef = 81E56C8BEF8D1690265A69EF /* _FieldsReader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D8F7CB7734E536F3615D2249 /* MultipleTermPositions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 97A841B81A9045DD77B2D129 /* MultipleTermPositions.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D8FDDE02CC42C2EDC4B6DA21 /* MultiFieldQueryParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C25B9D58C74C755DCA8A7321 /* MultiFieldQueryParser.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D90BBB216780F8F7573CE67A /* stem_UTF_8_swedish.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C3A327328A0743345D8F800 /* stem_UTF_8_swedish.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D92E3E51F8DF24B63C3BA9B3 /* stem_UTF_8_spanish.h in Headers */ = {isa = PBXBuildFile; fileRef = 1CCED5D968A1EA94CE495CA3 /* stem_UTF_8_spanish.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D9678054AE405B64F824E737 /* RangeQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = C70B81556630B837C83A9BC8 /* RangeQuery.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D9710F25B0D1008F5027F3B9 /* stem_UTF_8_russian.c in Sources */ = {isa = PBXBuildFile; fileRef = AB2A564E26C8A74D8358AC1A /* stem_UTF_8_russian.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D9B1C29D17D7E15FAE601E1C /* _FastCharStream.h in Headers */ = {isa = PBXBuildFile; fileRef = CD34A0EC6C214EE624A7C782 /* _FastCharStream.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D9E40A16AC963BCDC791C892 /* _TermInfosReader.h in Headers */ = {isa = PBXBuildFile; fileRef = 4DAA73037B6B6F5E88B462B8 /* _TermInfosReader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DA2508E85D3E8610E0E6B1C1 /* Hits.h in Headers */ = {isa = PBXBuildFile; fileRef = 9EDFE19FF4B4CF03C431B501 /* Hits.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DAEEB06C5B90A09603795A17 /* QueryParserTokenManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E25DB4BD66003ACCB49451B3 /* QueryParserTokenManager.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + DB4628B2E96B7FE7E66F3B59 /* _PhraseQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = A277BD760515F233445AA8DC /* _PhraseQueue.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DBAC588180237FDA73E3BDC5 /* _CharStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 26262E4D44B664DF1E9B7F75 /* _CharStream.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DBEF8BD2423C8AE8D5C49025 /* MultipleTermPositions.h in Headers */ = {isa = PBXBuildFile; fileRef = EE68C43C9CE9BBCED15DBA30 /* MultipleTermPositions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DC5E1308AA9B0E24A05F51C9 /* Compare.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0FC5F064A580142587634973 /* Compare.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + DCDCA23DA77C0F46856924BF /* QueryScorer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F086C33A44537F89BF7AE119 /* QueryScorer.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + DD5A42A946761678FC4C9E4D /* StringBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 09E6C8ECD2BB1F9E684E8165 /* StringBuffer.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + DDB251A10617FCAC6E9220B3 /* utf8.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B6066E59EBFD4D71863B360E /* utf8.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + DE1765661B8301D3E6C92757 /* _condition.h in Headers */ = {isa = PBXBuildFile; fileRef = B3C9301311C64378638AB1BA /* _condition.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DE5A36E8892BE3CE1D9AC417 /* _IndexFileNames.h in Headers */ = {isa = PBXBuildFile; fileRef = B4A68DF41CAD862B699025AE /* _IndexFileNames.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DEF67693BA09B589EBA7D51E /* SharedHeader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0DCDD4CCA56765CF5A37A011 /* SharedHeader.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + DFBBB76E8B1A2CE98355326F /* _RAMDirectory.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E23224E5681D39877908E16 /* _RAMDirectory.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DFF9F091A6F1BF3B3A829AEE /* StandardAnalyzer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B520E0B2845F0C0274582E69 /* StandardAnalyzer.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E0109D2F581DDA9ACEBE1488 /* SimpleHTMLFormatter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AE20E1E48FFA3F76CCF1C604 /* SimpleHTMLFormatter.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E0C3FC4965AA4EEE6AD07B61 /* TextFragment.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5D57A3028FBCC4A47A78535F /* TextFragment.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E0DEC89C8E5089B3933246A1 /* LuceneThreads.h in Headers */ = {isa = PBXBuildFile; fileRef = B73CCF67C806F8DC83DD935F /* LuceneThreads.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E1055B28566941B500765658 /* IndexSearcher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 579D02079930C4A85DFF0E30 /* IndexSearcher.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E19D6F65CB7E237CB1E256F3 /* _DocumentsWriter.h in Headers */ = {isa = PBXBuildFile; fileRef = FB9A2E81B21A808D0123E909 /* _DocumentsWriter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E1D07240A5E64379C55DD4F7 /* SpanNotQuery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5DD38BAB6D1319E5E0598C37 /* SpanNotQuery.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E1D1CF872D5A8F682645A990 /* gzipinputstream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2D2E3088B9B9EB2BAF44DCDE /* gzipinputstream.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E21CD5C3238BBE07E66BDD1C /* repl_tcscasecmp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 45D60C3013E274720409E6A6 /* repl_tcscasecmp.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E24CFC9AB87A4540434F429A /* SegmentMerger.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4004532F0166A1386D036590 /* SegmentMerger.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E24F2C695AF88213850B9084 /* SpanTermQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = F6C93EA3C96FCD751A1C4817 /* SpanTermQuery.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E25E5361D3B0FA75BD47222A /* WildcardTermEnum.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 59472088F0CB14C50E3B8250 /* WildcardTermEnum.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E2EF35958491BC8D3BEA570B /* libstemmer.h in Headers */ = {isa = PBXBuildFile; fileRef = 57549DDD865284D9D8F04A04 /* libstemmer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E357198A11177367C85E683B /* _SegmentMergeInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 05826F4281A90CE9ACDBE2DF /* _SegmentMergeInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E3B3AC39888BF0E23A60DCCA /* stem_ISO_8859_1_french.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F55A7FAC0A31D45362DBCD1 /* stem_ISO_8859_1_french.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E3E666914A7439435874CCF2 /* _FieldInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = B6FEB8A07263C5EBA87C1D11 /* _FieldInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E4A50AF1A8ED5EF496617617 /* CachingTokenFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3D035FF38F964DAAB7BECDB7 /* CachingTokenFilter.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E5A0B23206EFC642B88B9D0E /* PhrasePositions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 022B190EC27B593695204DAB /* PhrasePositions.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E5C4A76CE89676EB8DDD1B3D /* SpanQueryFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 53614503EC77360F0045FC2D /* SpanQueryFilter.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E6111F11FD0AB5E754F512D5 /* FieldCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 7F22C7CB57C09C24383D7107 /* FieldCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E662BA1FCBAC392D6777B0D7 /* stem_UTF_8_dutch.c in Sources */ = {isa = PBXBuildFile; fileRef = 6D9D525816087C7D2523A318 /* stem_UTF_8_dutch.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E7EC06DC86242ED44DF70183 /* BitSet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 380534FAD021EAE958AD0732 /* BitSet.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E8219EDF5838DC612233AD73 /* dirent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 49B2499F9D502737FAE54719 /* dirent.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E849A451D8488C3A99EA82E8 /* SimpleFragmenter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7E83EB9372570C10A6CEB6B6 /* SimpleFragmenter.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E871EFBEF06A6114EABBE22A /* RangeFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 244C93D14B664DB2EF5E6615 /* RangeFilter.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E87C8A560E949082E0650E10 /* Equators.h in Headers */ = {isa = PBXBuildFile; fileRef = A4C9F126F3FEA27B4A31A96A /* Equators.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E89A9608808F00CEA054607C /* ChainedFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 27661B81017336047D801E85 /* ChainedFilter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E8D07E136A7B2C51F78CE6F0 /* VoidMap.h in Headers */ = {isa = PBXBuildFile; fileRef = 9493084135638233C4304DE0 /* VoidMap.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E96CFEAB39EDC96E5DAA75CB /* stem_UTF_8_portuguese.h in Headers */ = {isa = PBXBuildFile; fileRef = C9F431FADD31D5F953F292FA /* stem_UTF_8_portuguese.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E9B0A49CBA5DAA03580D52CE /* ConstantScoreQuery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CFF49D6518AC608DE37C5E13 /* ConstantScoreQuery.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + EA8E61E10EBE69F095A0846B /* StdHeader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D93CE9411FA30234DCFC273B /* StdHeader.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + EAD167478834614086DF1A2C /* DateField.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D545707185C7C927AE1B38B5 /* DateField.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + EB4545C32E575E6995B910A2 /* IndexSearcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 7929F4FC21D5DB72EF954399 /* IndexSearcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EB72779AFDDDB6BA634C824E /* SpanOrQuery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B1BE2ECBE886050BAF96719F /* SpanOrQuery.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + EBC628907381E49818FB23D7 /* _IndexFileDeleter.h in Headers */ = {isa = PBXBuildFile; fileRef = 48C5D40EA8A54D51028D6241 /* _IndexFileDeleter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EBDE93A6AA4110D5A3C9ACCB /* _MD5Digester.h in Headers */ = {isa = PBXBuildFile; fileRef = EE71038CC6DBB4F26B63FD6E /* _MD5Digester.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EBEF315A97CCB9912BB4D715 /* CompoundFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BE1CAEC04FF3A035BD7A9FE2 /* CompoundFile.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + ECA21E7C24498526DC1F5EB9 /* FieldSelector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C8DF2B8D9E760A058241AEB5 /* FieldSelector.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + ED089C4C8DBF8A968459995C /* PhraseQuery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0619CA2714CEFA60FDBBD26D /* PhraseQuery.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + ED5BDBD0C2A10A6D8BB72FE1 /* SpanTermQuery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D3AC7D296DFA696042D4418A /* SpanTermQuery.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + ED99FFDE1CC6B04582691CDB /* _DisjunctionSumScorer.h in Headers */ = {isa = PBXBuildFile; fileRef = EEFF108302039F9FDD5B6CE9 /* _DisjunctionSumScorer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EDB8AF6C01427D3A2037EB7B /* Term.h in Headers */ = {isa = PBXBuildFile; fileRef = 37D8B4E914F79328F26AE2C5 /* Term.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EE12E5C981D441B6039054C3 /* IndexOutput.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB3039F361815D24182FBDA4 /* IndexOutput.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + EE13840AEA3A88A2F19F306F /* Query.h in Headers */ = {isa = PBXBuildFile; fileRef = FA8B537C87459A530F2BBB89 /* Query.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EE1B4775F85EDE55DE0F4090 /* HitQueue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 22953DF075C61EA5AC13EEE6 /* HitQueue.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + EEE45355D62069CF0591D20E /* GermanStemmer.h in Headers */ = {isa = PBXBuildFile; fileRef = 94B1109EB501086D81FAF74F /* GermanStemmer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EF112DEEB4B832B0653302E1 /* stem_ISO_8859_1_german.c in Sources */ = {isa = PBXBuildFile; fileRef = 89226E0920A85262E5591BF5 /* stem_ISO_8859_1_german.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + EF5C8A41C866863111747422 /* SkipListReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A7A6D6F6E8DC27E164765E58 /* SkipListReader.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + EFB39F43FA91AA1B9110B4FE /* FieldSelector.h in Headers */ = {isa = PBXBuildFile; fileRef = FA502083055EC660DA3ECAD0 /* FieldSelector.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EFD349EAD411B331D9710035 /* stem_UTF_8_finnish.c in Sources */ = {isa = PBXBuildFile; fileRef = DBA415471EF1AE130E180C95 /* stem_UTF_8_finnish.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + EFD9D6490034C7CF6DC9408F /* Similarity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2FE89EA1708D0B4D0BC64389 /* Similarity.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + EFF1BBAE5E30BCD8EE67B80F /* stem_KOI8_R_russian.c in Sources */ = {isa = PBXBuildFile; fileRef = 584C0ADCC53DEDA1B327E07A /* stem_KOI8_R_russian.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F0727B51CCC890B9907A811E /* IndexModifier.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB2A600EEA35EE2AD4F7E6B5 /* IndexModifier.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F0AFDE3DDC3DAFD576666A07 /* _SegmentHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = 8CAB5B5EDF27414162D95761 /* _SegmentHeader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F0C996FC7556A4722CCEE2FD /* SpanWeight.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F63FF2BFB9642EA9F4CD1EAE /* SpanWeight.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F0E00B84B1FD83DC52CB0C2A /* IndexModifier.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB2A600EEA35EE2AD4F7E6B5 /* IndexModifier.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F10BB4AF6EEC472E2789C4A0 /* _MultiSegmentReader.h in Headers */ = {isa = PBXBuildFile; fileRef = EBCD61BEF0E8DD788FD46F40 /* _MultiSegmentReader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F15BA841CE04B2D91C9128E3 /* Highlighter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A3B1A6219EE98FDABFFCA0B7 /* Highlighter.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F17789516C069C2FAAF2630F /* GermanAnalyzer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 54410BD7D8977AC67D8EA7A4 /* GermanAnalyzer.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F1873A979BF39AC707294B19 /* FastCharStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 498C52B7D9522BE5D6A1F341 /* FastCharStream.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F193ACAE4C3FE747A67C56A8 /* repl_wchar.h in Headers */ = {isa = PBXBuildFile; fileRef = 63E00C178A9FF52F0285E37D /* repl_wchar.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F1F8771DDC943DA6D5627A1A /* IndexSearcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 7929F4FC21D5DB72EF954399 /* IndexSearcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F2047F7F2A957947F4704EB0 /* _EmptySpans.h in Headers */ = {isa = PBXBuildFile; fileRef = EC82991EF5B45C2238F3EE46 /* _EmptySpans.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F269FCD3E844A2552A5EBB36 /* Scorer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9631DE8DF29AEF40018C176C /* Scorer.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F2B49A276044C03873F63D91 /* Directory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D87ACB5ACA8E211976DFDF1A /* Directory.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F2DA696F8F641610A8D00401 /* Formatter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E594263C6B82D8697924DD5F /* Formatter.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F331A23FD152D205998B2913 /* SegmentTermPositions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A39B973A80204F79C3D147F /* SegmentTermPositions.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F3A5FBF4EDE65B22F5924486 /* FieldInfos.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C31D97E55D7845929D793A5F /* FieldInfos.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F40661278649759E0E0B7393 /* StandardTokenizerConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = BA1B9D3E319A89A133A99F9C /* StandardTokenizerConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F4421F50C30C8794AB4EE7FA /* ChainedFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 27661B81017336047D801E85 /* ChainedFilter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F541857961D6ABFC732F7F43 /* WildcardQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = 0DB8965C3EF1A51DC6374257 /* WildcardQuery.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F54E6B0C0BA6279910498B84 /* Similarity.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ADD7FCC4105391234393B2C /* Similarity.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F57E0C6226026CBA55A4E3A9 /* stem_ISO_8859_1_dutch.h in Headers */ = {isa = PBXBuildFile; fileRef = D83428FF628EEBCF6838DF5C /* stem_ISO_8859_1_dutch.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F5A166DCEB0D0E4994B8F5BA /* StringIntern.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F7A4034C03F76123B7C2826F /* StringIntern.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F5B5961FD02CB76ABF137520 /* LanguageBasedAnalyzer.h in Headers */ = {isa = PBXBuildFile; fileRef = DC60B8F8DB6948CF82538BF6 /* LanguageBasedAnalyzer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F5DF60FCF58C18AFC4A980E1 /* SpanQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = 55DD481AB7F720CD4FAA543B /* SpanQuery.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F6ED056BAE62333755C5EF04 /* SnowballAnalyzer.h in Headers */ = {isa = PBXBuildFile; fileRef = EB6E700B85989270AC20382A /* SnowballAnalyzer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F70A03A5FC04A44A86308D3B /* _TermInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 7288F6FB8BEED013C9FE3051 /* _TermInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F7BE74CD5D82F05E4DDD7507 /* Reader.h in Headers */ = {isa = PBXBuildFile; fileRef = F3C06EA481D25C5A7420C040 /* Reader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F7DD8A7A5DFFAEB393D59971 /* _FieldCacheImpl.h in Headers */ = {isa = PBXBuildFile; fileRef = 627AE9BA1D456E672F0978D9 /* _FieldCacheImpl.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F806586772588460F7E3E4DD /* QueryTermExtractor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 29532C586B5C9ACE350875C7 /* QueryTermExtractor.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F84E20D03CFE5BBCF19B16E4 /* _IndexFileNameFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 73F5EEEA5D31D545EC728CD4 /* _IndexFileNameFilter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F916A8AD84B37CA443C03C9E /* DocumentsWriter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E35194B046FA8A38D3C1B301 /* DocumentsWriter.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F9A19DCE0B04DAA4FE00A446 /* stem_UTF_8_english.h in Headers */ = {isa = PBXBuildFile; fileRef = 7ABEF88AC3ACE18E1ED39699 /* stem_UTF_8_english.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FA08DCE7ABA985F13EEA4930 /* stem_UTF_8_russian.h in Headers */ = {isa = PBXBuildFile; fileRef = 8150375DE47FB4492DE04833 /* stem_UTF_8_russian.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FA72952D792C1F5994C2FB9A /* _CompoundFile.h in Headers */ = {isa = PBXBuildFile; fileRef = E614CE0A040C3323578DD203 /* _CompoundFile.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FA94F9DC0E9AC6BBF171B69A /* Formatter.h in Headers */ = {isa = PBXBuildFile; fileRef = DFACDEA32C33E7B6CBE253CF /* Formatter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FB5B0328634A36E8125484BE /* LuceneThreads.h in Headers */ = {isa = PBXBuildFile; fileRef = B73CCF67C806F8DC83DD935F /* LuceneThreads.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FB87E2DC397D18F1502773CF /* Encoder.h in Headers */ = {isa = PBXBuildFile; fileRef = B1E85BE64E549D2A654576A3 /* Encoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FBD6308F391103C9E665B1DD /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 479C19A019A38B5EFA99E17C /* Foundation.framework */; }; + FC30115737D54E4AE161572B /* Formatter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E594263C6B82D8697924DD5F /* Formatter.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + FC82A4282258B43736D14AF2 /* SimpleHTMLEncoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F1BF2C4703E4252831B0501 /* SimpleHTMLEncoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FC87B0A619EE02455EE52AE0 /* gzipinputstream.h in Headers */ = {isa = PBXBuildFile; fileRef = 8C11605A23EF651B64C23DFC /* gzipinputstream.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FCA640EEAB8863E4C6762E91 /* TermQuery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0CDFD53D0FA9728CB24B68E9 /* TermQuery.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + FD4CE601B2EF217413E16415 /* FieldSortedHitQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 2019F730B605453ACA44B804 /* FieldSortedHitQueue.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FDB3E0E151288B50009EE7FB /* WildcardTermEnum.h in Headers */ = {isa = PBXBuildFile; fileRef = 24ACCD09C4CCCC8102BD0651 /* WildcardTermEnum.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FE046C6905B39669F9710954 /* stem_UTF_8_swedish.c in Sources */ = {isa = PBXBuildFile; fileRef = 94BC7B1991D96E91AF1A14C9 /* stem_UTF_8_swedish.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + FEC7B68B3086D626E213FE98 /* _FastCharStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C820EC029EE9C8D84F1B918 /* _FastCharStream.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FF124604036B4A4F32F908D4 /* stem_UTF_8_dutch.c in Sources */ = {isa = PBXBuildFile; fileRef = 6D9D525816087C7D2523A318 /* stem_UTF_8_dutch.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + FF2BD2BD7A2E12D767FCB94C /* _bufferedstream.h in Headers */ = {isa = PBXBuildFile; fileRef = F0D1CBA8E8C1F476F5AE9467 /* _bufferedstream.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FFA36C48FCD46E7B27EC42CA /* FastCharStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 498C52B7D9522BE5D6A1F341 /* FastCharStream.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + FFB2139702D6F1A1D32C6422 /* DateFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E168F5C855FFE88A4486E8CA /* DateFilter.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 80CFBDE7FBBB784CC61EAB99 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 4AF624F79E63D15AB6AF3160 /* Project object */; + proxyType = 1; + remoteGlobalIDString = A4C1C2F64E5FCB267E3F4B5B; + remoteInfo = "BRCLucene-OSX"; + }; + 9A916263C4F2744470E6B91B /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 4AF624F79E63D15AB6AF3160 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 97920DEC9C19B079CEC274ED; + remoteInfo = "BRCLucene-iOS"; + }; + E3D52EBA7619E290171766FF /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 4AF624F79E63D15AB6AF3160 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 97920DEC9C19B079CEC274ED; + remoteInfo = "BRCLucene-iOS"; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 01C5084C0EB7A50F30E153E3 /* SearchHeader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SearchHeader.h; path = src/core/CLucene/search/SearchHeader.h; sourceTree = ""; }; + 022B190EC27B593695204DAB /* PhrasePositions.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = PhrasePositions.cpp; path = src/core/CLucene/search/PhrasePositions.cpp; sourceTree = ""; }; + 0435F1F15171D12EC7EA51E5 /* DateField.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DateField.h; path = src/core/CLucene/document/DateField.h; sourceTree = ""; }; + 0531221156E4ACCD80378784 /* repl_tchar.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = repl_tchar.h; path = src/shared/CLucene/config/repl_tchar.h; sourceTree = ""; }; + 05826F4281A90CE9ACDBE2DF /* _SegmentMergeInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _SegmentMergeInfo.h; path = src/core/CLucene/index/_SegmentMergeInfo.h; sourceTree = ""; }; + 05A08F757DF09A0054795337 /* stem_ISO_8859_1_english.c */ = {isa = PBXFileReference; includeInIndex = 1; name = stem_ISO_8859_1_english.c; path = "src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_english.c"; sourceTree = ""; }; + 0619CA2714CEFA60FDBBD26D /* PhraseQuery.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = PhraseQuery.cpp; path = src/core/CLucene/search/PhraseQuery.cpp; sourceTree = ""; }; + 062F745174D862AD163D74AE /* QueryParser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = QueryParser.h; path = src/core/CLucene/queryParser/QueryParser.h; sourceTree = ""; }; + 06BDB38963A90CFB6B9A17FE /* ConstantScoreQuery.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ConstantScoreQuery.h; path = src/core/CLucene/search/ConstantScoreQuery.h; sourceTree = ""; }; + 07426F4294F1E8AF0ED1DFA8 /* SpanQueryFilter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SpanQueryFilter.h; path = src/core/CLucene/search/SpanQueryFilter.h; sourceTree = ""; }; + 075E7B74158EB07D3573CDCE /* _SegmentMerger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _SegmentMerger.h; path = src/core/CLucene/index/_SegmentMerger.h; sourceTree = ""; }; + 080038A2810DF1B7AF5430B8 /* _ApiHeader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _ApiHeader.h; path = src/core/CLucene/_ApiHeader.h; sourceTree = ""; }; + 0838EB93707F329DF8B3C410 /* WeightedTerm.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = WeightedTerm.cpp; path = "src/contribs-lib/CLucene/highlighter/WeightedTerm.cpp"; sourceTree = ""; }; + 08565E16DB82DF2ED956B64A /* FuzzyQuery.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FuzzyQuery.h; path = src/core/CLucene/search/FuzzyQuery.h; sourceTree = ""; }; + 08A3884580B9C317D269FDDD /* utilities.c */ = {isa = PBXFileReference; includeInIndex = 1; name = utilities.c; path = "src/contribs-lib/CLucene/snowball/runtime/utilities.c"; sourceTree = ""; }; + 08D3EC8C3906A87D0C7BD3C4 /* SpanNotQuery.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SpanNotQuery.h; path = src/core/CLucene/search/spans/SpanNotQuery.h; sourceTree = ""; }; + 091B1611175D2D4F7C2D282B /* lucenebase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = lucenebase.h; path = src/core/CLucene/debug/lucenebase.h; sourceTree = ""; }; + 0969387C0A1DC3002ADCB9FA /* CLucene.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLucene.h; path = src/core/CLucene.h; sourceTree = ""; }; + 09E6C8ECD2BB1F9E684E8165 /* StringBuffer.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = StringBuffer.cpp; path = src/shared/CLucene/util/StringBuffer.cpp; sourceTree = ""; }; + 0A39B973A80204F79C3D147F /* SegmentTermPositions.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = SegmentTermPositions.cpp; path = src/core/CLucene/index/SegmentTermPositions.cpp; sourceTree = ""; }; + 0A975AA85AD3A0FF93E402E4 /* repl_tcstoll.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = repl_tcstoll.cpp; path = src/shared/CLucene/config/repl_tcstoll.cpp; sourceTree = ""; }; + 0B00EDD282D48542E9F83C77 /* Pods-BasePods-BRFullTextSearch-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-BasePods-BRFullTextSearch-acknowledgements.plist"; sourceTree = ""; }; + 0B1AF9A436F8023B6FE019ED /* libPods-BasePods-BRFullTextSearchMacOS.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = "libPods-BasePods-BRFullTextSearchMacOS.a"; path = "libPods-BasePods-BRFullTextSearchMacOS.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 0BBDF23FE12A2BF32407A389 /* MultiFieldQueryParser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MultiFieldQueryParser.h; path = src/core/CLucene/queryParser/MultiFieldQueryParser.h; sourceTree = ""; }; + 0C942B208D7CDE8D1F9A7E5F /* Pods-BasePods-BRFullTextSearchTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-BasePods-BRFullTextSearchTests.release.xcconfig"; sourceTree = ""; }; + 0CDFD53D0FA9728CB24B68E9 /* TermQuery.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = TermQuery.cpp; path = src/core/CLucene/search/TermQuery.cpp; sourceTree = ""; }; + 0D1A9CB59C0AD5B26B898ABA /* _Arrays.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _Arrays.h; path = src/core/CLucene/util/_Arrays.h; sourceTree = ""; }; + 0DB8965C3EF1A51DC6374257 /* WildcardQuery.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WildcardQuery.h; path = src/core/CLucene/search/WildcardQuery.h; sourceTree = ""; }; + 0DCDD4CCA56765CF5A37A011 /* SharedHeader.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = SharedHeader.cpp; path = src/shared/CLucene/SharedHeader.cpp; sourceTree = ""; }; + 0E5828676B5A86E4523513B4 /* SpanOrQuery.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SpanOrQuery.h; path = src/core/CLucene/search/spans/SpanOrQuery.h; sourceTree = ""; }; + 0ED2707ADF8A710AB8C04354 /* VoidList.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VoidList.h; path = src/core/CLucene/util/VoidList.h; sourceTree = ""; }; + 0FAE946BEA51836D00F731C9 /* stem_UTF_8_norwegian.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = stem_UTF_8_norwegian.h; path = "src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_norwegian.h"; sourceTree = ""; }; + 0FC5F064A580142587634973 /* Compare.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = Compare.cpp; path = src/core/CLucene/search/Compare.cpp; sourceTree = ""; }; + 128A0FA14C4275A64361ABD8 /* IndexModifier.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IndexModifier.h; path = src/core/CLucene/index/IndexModifier.h; sourceTree = ""; }; + 13E2105B0E5A40085B063C99 /* SimpleFragmenter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SimpleFragmenter.h; path = "src/contribs-lib/CLucene/highlighter/SimpleFragmenter.h"; sourceTree = ""; }; + 148B18AA3BA2A25110EDC1DB /* stem_ISO_8859_1_danish.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = stem_ISO_8859_1_danish.h; path = "src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_danish.h"; sourceTree = ""; }; + 14F6B97A6357B73EC360FDD2 /* Compare.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Compare.h; path = src/core/CLucene/search/Compare.h; sourceTree = ""; }; + 1554EFC1DA92717F9D83B7EC /* Directory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Directory.h; path = src/core/CLucene/store/Directory.h; sourceTree = ""; }; + 161A0C13CA693AF3721D042A /* IndexWriter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IndexWriter.h; path = src/core/CLucene/index/IndexWriter.h; sourceTree = ""; }; + 17598ACC84E85A239272C398 /* IndexFileDeleter.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = IndexFileDeleter.cpp; path = src/core/CLucene/index/IndexFileDeleter.cpp; sourceTree = ""; }; + 17964AB66E2FF261BCCF392B /* QueryTermExtractor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = QueryTermExtractor.h; path = "src/contribs-lib/CLucene/highlighter/QueryTermExtractor.h"; sourceTree = ""; }; + 179B255A228E9B9E4FD36995 /* stem_ISO_8859_1_dutch.c */ = {isa = PBXFileReference; includeInIndex = 1; name = stem_ISO_8859_1_dutch.c; path = "src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_dutch.c"; sourceTree = ""; }; + 192483D95C2815AA17FF4223 /* SegmentTermVector.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = SegmentTermVector.cpp; path = src/core/CLucene/index/SegmentTermVector.cpp; sourceTree = ""; }; + 198D32677B449C31264CC924 /* SpanScorer.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = SpanScorer.cpp; path = src/core/CLucene/search/spans/SpanScorer.cpp; sourceTree = ""; }; + 1A8462EC58F207BCC7472090 /* LockFactory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LockFactory.h; path = src/core/CLucene/store/LockFactory.h; sourceTree = ""; }; + 1ADD7FCC4105391234393B2C /* Similarity.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Similarity.h; path = src/core/CLucene/search/Similarity.h; sourceTree = ""; }; + 1C069324AE3E4A26964298FF /* Payload.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = Payload.cpp; path = src/core/CLucene/index/Payload.cpp; sourceTree = ""; }; + 1CCED5D968A1EA94CE495CA3 /* stem_UTF_8_spanish.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = stem_UTF_8_spanish.h; path = "src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_spanish.h"; sourceTree = ""; }; + 1D935829581CC8F7928E1616 /* FieldsWriter.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = FieldsWriter.cpp; path = src/core/CLucene/index/FieldsWriter.cpp; sourceTree = ""; }; + 1E6C66429E77E9D0CF89CC2A /* Field.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Field.h; path = src/core/CLucene/document/Field.h; sourceTree = ""; }; + 1F5C6F2C1490733B1A017D8C /* stem_ISO_8859_1_swedish.c */ = {isa = PBXFileReference; includeInIndex = 1; name = stem_ISO_8859_1_swedish.c; path = "src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_swedish.c"; sourceTree = ""; }; + 2019F730B605453ACA44B804 /* FieldSortedHitQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FieldSortedHitQueue.h; path = src/core/CLucene/search/FieldSortedHitQueue.h; sourceTree = ""; }; + 20AB6CAC2EAA6F7C1D421424 /* FSDirectory.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = FSDirectory.cpp; path = src/core/CLucene/store/FSDirectory.cpp; sourceTree = ""; }; + 22953DF075C61EA5AC13EEE6 /* HitQueue.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = HitQueue.cpp; path = src/core/CLucene/search/HitQueue.cpp; sourceTree = ""; }; + 23E597168FBD2407E903A258 /* _dirent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _dirent.h; path = src/shared/CLucene/util/_dirent.h; sourceTree = ""; }; + 242D86ABA0BBD072655BC3A4 /* header.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = header.h; path = "src/contribs-lib/CLucene/snowball/runtime/header.h"; sourceTree = ""; }; + 244C93D14B664DB2EF5E6615 /* RangeFilter.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = RangeFilter.cpp; path = src/core/CLucene/search/RangeFilter.cpp; sourceTree = ""; }; + 24ACCD09C4CCCC8102BD0651 /* WildcardTermEnum.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WildcardTermEnum.h; path = src/core/CLucene/search/WildcardTermEnum.h; sourceTree = ""; }; + 24B454F42CA28C2F37E07D53 /* FastCharStream.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = FastCharStream.cpp; path = src/core/CLucene/util/FastCharStream.cpp; sourceTree = ""; }; + 24BFC6BC4EE381C63F672010 /* DateFilter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DateFilter.h; path = src/core/CLucene/search/DateFilter.h; sourceTree = ""; }; + 24C1C0EEF48E5B94B51C6661 /* QueryScorer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = QueryScorer.h; path = "src/contribs-lib/CLucene/highlighter/QueryScorer.h"; sourceTree = ""; }; + 25D821FC2F980CA08B56EE95 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + 25F1308411FC4B1B441A7E70 /* TokenSources.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = TokenSources.cpp; path = "src/contribs-lib/CLucene/highlighter/TokenSources.cpp"; sourceTree = ""; }; + 2615983316A44758FFEC2490 /* _BooleanScorer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _BooleanScorer.h; path = src/core/CLucene/search/_BooleanScorer.h; sourceTree = ""; }; + 26262E4D44B664DF1E9B7F75 /* _CharStream.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _CharStream.h; path = src/core/CLucene/queryParser/_CharStream.h; sourceTree = ""; }; + 27661B81017336047D801E85 /* ChainedFilter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ChainedFilter.h; path = src/core/CLucene/search/ChainedFilter.h; sourceTree = ""; }; + 2821A9CBA3B5C489E85A51E5 /* _ExactPhraseScorer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _ExactPhraseScorer.h; path = src/core/CLucene/search/_ExactPhraseScorer.h; sourceTree = ""; }; + 28982B02FDD90738646B409F /* BitSet.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BitSet.h; path = src/core/CLucene/util/BitSet.h; sourceTree = ""; }; + 2923454DC0414315374C5EED /* NumberTools.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = NumberTools.h; path = src/core/CLucene/document/NumberTools.h; sourceTree = ""; }; + 292F2872B768EED5AF2EED7C /* _SegmentTermEnum.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _SegmentTermEnum.h; path = src/core/CLucene/index/_SegmentTermEnum.h; sourceTree = ""; }; + 29532C586B5C9ACE350875C7 /* QueryTermExtractor.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = QueryTermExtractor.cpp; path = "src/contribs-lib/CLucene/highlighter/QueryTermExtractor.cpp"; sourceTree = ""; }; + 29C228F1AC57C1F0958DF81D /* _VoidMap.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _VoidMap.h; path = src/core/CLucene/util/_VoidMap.h; sourceTree = ""; }; + 29F79C08F44AB3096416CA2E /* Pods-BasePods-BRFullTextSearchTests-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-BasePods-BRFullTextSearchTests-frameworks.sh"; sourceTree = ""; }; + 2C22BB7A902145397DDA3542 /* _TermInfosWriter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _TermInfosWriter.h; path = src/core/CLucene/index/_TermInfosWriter.h; sourceTree = ""; }; + 2C263AD4FCE70A40F9D2B365 /* Fragmenter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Fragmenter.h; path = "src/contribs-lib/CLucene/highlighter/Fragmenter.h"; sourceTree = ""; }; + 2C3C39AC1AF22628C8972F33 /* IndexReader.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = IndexReader.cpp; path = src/core/CLucene/index/IndexReader.cpp; sourceTree = ""; }; + 2C60F04635F3FEDFBF49CA60 /* Field.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = Field.cpp; path = src/core/CLucene/document/Field.cpp; sourceTree = ""; }; + 2C864D82EFB49DEB16946EB6 /* SegmentMergeQueue.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = SegmentMergeQueue.cpp; path = src/core/CLucene/index/SegmentMergeQueue.cpp; sourceTree = ""; }; + 2CBED8DF2F1E9E7467DE3537 /* FSDirectory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FSDirectory.h; path = src/core/CLucene/store/FSDirectory.h; sourceTree = ""; }; + 2CDFF10CDB7CBA238F57E2F7 /* PhraseQuery.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PhraseQuery.h; path = src/core/CLucene/search/PhraseQuery.h; sourceTree = ""; }; + 2D2E3088B9B9EB2BAF44DCDE /* gzipinputstream.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = gzipinputstream.cpp; path = "src/contribs-lib/CLucene/util/gzipinputstream.cpp"; sourceTree = ""; }; + 2DA51F90DA79B1071D8B1288 /* Scorer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Scorer.h; path = "src/contribs-lib/CLucene/highlighter/Scorer.h"; sourceTree = ""; }; + 2DFE76AF194234A2CE68B28D /* Pods-BasePods-BRFullTextSearchTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-BasePods-BRFullTextSearchTests.debug.xcconfig"; sourceTree = ""; }; + 2F0D1D02B142098F0EDD555C /* Lock.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Lock.h; path = src/core/CLucene/store/Lock.h; sourceTree = ""; }; + 2F200C192FF0E7225FF60750 /* IndexInput.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = IndexInput.cpp; path = src/core/CLucene/store/IndexInput.cpp; sourceTree = ""; }; + 2FE89EA1708D0B4D0BC64389 /* Similarity.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = Similarity.cpp; path = src/core/CLucene/search/Similarity.cpp; sourceTree = ""; }; + 3156191A827F28916EAD039B /* stem_UTF_8_finnish.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = stem_UTF_8_finnish.h; path = "src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_finnish.h"; sourceTree = ""; }; + 3489740AA4F7A8C9B2E52B61 /* Lock.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = Lock.cpp; path = src/core/CLucene/store/Lock.cpp; sourceTree = ""; }; + 34AB0B068653D8F99851D1A7 /* MatchAllDocsQuery.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MatchAllDocsQuery.h; path = src/core/CLucene/search/MatchAllDocsQuery.h; sourceTree = ""; }; + 350C146EFD9C0884BD724FD5 /* StandardTokenizer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = StandardTokenizer.h; path = src/core/CLucene/analysis/standard/StandardTokenizer.h; sourceTree = ""; }; + 3535995D4A28B8869157F67F /* MultiPhraseQuery.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MultiPhraseQuery.h; path = src/core/CLucene/search/MultiPhraseQuery.h; sourceTree = ""; }; + 363DE4971D255F5C461EC4A1 /* Encoder.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = Encoder.cpp; path = "src/contribs-lib/CLucene/highlighter/Encoder.cpp"; sourceTree = ""; }; + 3721FC63F5E3DE1E25972B0B /* MergeScheduler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MergeScheduler.h; path = src/core/CLucene/index/MergeScheduler.h; sourceTree = ""; }; + 37C53A756CCC6A64E96334FD /* QueryParser.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = QueryParser.cpp; path = src/core/CLucene/queryParser/QueryParser.cpp; sourceTree = ""; }; + 37D8B4E914F79328F26AE2C5 /* Term.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Term.h; path = src/core/CLucene/index/Term.h; sourceTree = ""; }; + 380534FAD021EAE958AD0732 /* BitSet.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = BitSet.cpp; path = src/core/CLucene/util/BitSet.cpp; sourceTree = ""; }; + 381F1366DEAFEA368FEC0FC2 /* QueryParserTokenManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = QueryParserTokenManager.h; path = src/core/CLucene/queryParser/QueryParserTokenManager.h; sourceTree = ""; }; + 39FF9F55D084054CD22FDB4C /* IndexDeletionPolicy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IndexDeletionPolicy.h; path = src/core/CLucene/index/IndexDeletionPolicy.h; sourceTree = ""; }; + 3A47E596A3AC81B1FF249DB1 /* StandardFilter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = StandardFilter.h; path = src/core/CLucene/analysis/standard/StandardFilter.h; sourceTree = ""; }; + 3B19C2031B14D9646AFE28EC /* BooleanQuery.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = BooleanQuery.cpp; path = src/core/CLucene/search/BooleanQuery.cpp; sourceTree = ""; }; + 3BFD48A29FB623B946670107 /* QueryToken.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = QueryToken.cpp; path = src/core/CLucene/queryParser/QueryToken.cpp; sourceTree = ""; }; + 3C072AC85BCC6C0C8F1D35B5 /* BRCLucene-iOS.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "BRCLucene-iOS.xcconfig"; path = "../BRCLucene-iOS/BRCLucene-iOS.xcconfig"; sourceTree = ""; }; + 3C560253277C5924B77F32B6 /* _gunichartables.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _gunichartables.h; path = src/shared/CLucene/config/_gunichartables.h; sourceTree = ""; }; + 3C6A7D93E7265CB888079AB3 /* Pods-BasePods-BRFullTextSearchTests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-BasePods-BRFullTextSearchTests-dummy.m"; sourceTree = ""; }; + 3C820EC029EE9C8D84F1B918 /* _FastCharStream.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _FastCharStream.h; path = src/core/CLucene/queryParser/_FastCharStream.h; sourceTree = ""; }; + 3D035FF38F964DAAB7BECDB7 /* CachingTokenFilter.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = CachingTokenFilter.cpp; path = src/core/CLucene/analysis/CachingTokenFilter.cpp; sourceTree = ""; }; + 3D827F7D58BF1FA89FBE77E2 /* api.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = api.h; path = "src/contribs-lib/CLucene/snowball/runtime/api.h"; sourceTree = ""; }; + 3E23224E5681D39877908E16 /* _RAMDirectory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _RAMDirectory.h; path = src/core/CLucene/store/_RAMDirectory.h; sourceTree = ""; }; + 3E5787FA0F95DFCF53963348 /* stem_UTF_8_italian.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = stem_UTF_8_italian.h; path = "src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_italian.h"; sourceTree = ""; }; + 3E67D77C29B1265C3305C5A4 /* _StringIntern.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _StringIntern.h; path = src/core/CLucene/util/_StringIntern.h; sourceTree = ""; }; + 3F1BF2C4703E4252831B0501 /* SimpleHTMLEncoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SimpleHTMLEncoder.h; path = "src/contribs-lib/CLucene/highlighter/SimpleHTMLEncoder.h"; sourceTree = ""; }; + 3F2A02C6E7B896E0963ED0BC /* byteinputstream.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = byteinputstream.h; path = "src/contribs-lib/CLucene/util/byteinputstream.h"; sourceTree = ""; }; + 3F4FC420F98D71F60728DC78 /* IndexDeletionPolicy.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = IndexDeletionPolicy.cpp; path = src/core/CLucene/index/IndexDeletionPolicy.cpp; sourceTree = ""; }; + 3F7A8C6A99F8F23C3A7DF1F6 /* _Lock.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _Lock.h; path = src/core/CLucene/store/_Lock.h; sourceTree = ""; }; + 4004532F0166A1386D036590 /* SegmentMerger.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = SegmentMerger.cpp; path = src/core/CLucene/index/SegmentMerger.cpp; sourceTree = ""; }; + 416A1790EE52ECA04818E23A /* Document.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Document.h; path = src/core/CLucene/document/Document.h; sourceTree = ""; }; + 418DB995E02950B58BA21FD1 /* error.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = error.h; path = src/core/CLucene/debug/error.h; sourceTree = ""; }; + 41CBAC46264848FB3C9E091E /* BooleanClause.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BooleanClause.h; path = src/core/CLucene/search/BooleanClause.h; sourceTree = ""; }; + 42323A6CEBEFD53A6D924181 /* IndexFileNameFilter.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = IndexFileNameFilter.cpp; path = src/core/CLucene/index/IndexFileNameFilter.cpp; sourceTree = ""; }; + 42A091A817377B4255C21D27 /* libstemmer.c */ = {isa = PBXFileReference; includeInIndex = 1; name = libstemmer.c; path = "src/contribs-lib/CLucene/snowball/libstemmer/libstemmer.c"; sourceTree = ""; }; + 43F3948F67562D60FB9E6AF4 /* stem_ISO_8859_1_porter.c */ = {isa = PBXFileReference; includeInIndex = 1; name = stem_ISO_8859_1_porter.c; path = "src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_porter.c"; sourceTree = ""; }; + 444FBAA447CE99673FBB730B /* DirectoryIndexReader.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = DirectoryIndexReader.cpp; path = src/core/CLucene/index/DirectoryIndexReader.cpp; sourceTree = ""; }; + 44799C0DE82687B1856E7B90 /* PriorityQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PriorityQueue.h; path = src/core/CLucene/util/PriorityQueue.h; sourceTree = ""; }; + 449486BD85A6632E73FEA6A9 /* ChainedFilter.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = ChainedFilter.cpp; path = src/core/CLucene/search/ChainedFilter.cpp; sourceTree = ""; }; + 44E2EBB7ABCC4B29648C9D85 /* api.c */ = {isa = PBXFileReference; includeInIndex = 1; name = api.c; path = "src/contribs-lib/CLucene/snowball/runtime/api.c"; sourceTree = ""; }; + 45D60C3013E274720409E6A6 /* repl_tcscasecmp.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = repl_tcscasecmp.cpp; path = src/shared/CLucene/config/repl_tcscasecmp.cpp; sourceTree = ""; }; + 479C19A019A38B5EFA99E17C /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; + 47FBF81F0D8B8F4FD9F8E133 /* FieldDocSortedHitQueue.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = FieldDocSortedHitQueue.cpp; path = src/core/CLucene/search/FieldDocSortedHitQueue.cpp; sourceTree = ""; }; + 488E09F443E2F81ED283F1FD /* Pods-BasePods-BRFullTextSearchMacOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-BasePods-BRFullTextSearchMacOS.debug.xcconfig"; sourceTree = ""; }; + 48C5D40EA8A54D51028D6241 /* _IndexFileDeleter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _IndexFileDeleter.h; path = src/core/CLucene/index/_IndexFileDeleter.h; sourceTree = ""; }; + 498AAB6DA0DE3AF69709EB59 /* IndexFileNames.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = IndexFileNames.cpp; path = src/core/CLucene/index/IndexFileNames.cpp; sourceTree = ""; }; + 498C52B7D9522BE5D6A1F341 /* FastCharStream.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = FastCharStream.cpp; path = src/core/CLucene/queryParser/FastCharStream.cpp; sourceTree = ""; }; + 49B2499F9D502737FAE54719 /* dirent.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = dirent.cpp; path = src/shared/CLucene/util/dirent.cpp; sourceTree = ""; }; + 49EDA20802C7F20DB2009F11 /* SnowballFilter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SnowballFilter.h; path = "src/contribs-lib/CLucene/snowball/SnowballFilter.h"; sourceTree = ""; }; + 4AD541647FF856D30C83A7B3 /* Snowball.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = Snowball.cpp; path = "src/contribs-lib/CLucene/snowball/Snowball.cpp"; sourceTree = ""; }; + 4C3A327328A0743345D8F800 /* stem_UTF_8_swedish.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = stem_UTF_8_swedish.h; path = "src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_swedish.h"; sourceTree = ""; }; + 4DAA73037B6B6F5E88B462B8 /* _TermInfosReader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _TermInfosReader.h; path = src/core/CLucene/index/_TermInfosReader.h; sourceTree = ""; }; + 4F55A7FAC0A31D45362DBCD1 /* stem_ISO_8859_1_french.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = stem_ISO_8859_1_french.h; path = "src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_french.h"; sourceTree = ""; }; + 50649A638AD306D1396C9CFA /* SegmentInfos.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = SegmentInfos.cpp; path = src/core/CLucene/index/SegmentInfos.cpp; sourceTree = ""; }; + 50965D84FBD88CF6E549299B /* BooleanScorer2.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = BooleanScorer2.cpp; path = src/core/CLucene/search/BooleanScorer2.cpp; sourceTree = ""; }; + 51970B97C036DDAF996030F6 /* SharedHeader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SharedHeader.h; path = src/shared/CLucene/SharedHeader.h; sourceTree = ""; }; + 5244FE031290E63408326EE1 /* BooleanScorer.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = BooleanScorer.cpp; path = src/core/CLucene/search/BooleanScorer.cpp; sourceTree = ""; }; + 53125008FB1F47E205B61CC4 /* StdHeader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = StdHeader.h; path = src/core/CLucene/StdHeader.h; sourceTree = ""; }; + 53614503EC77360F0045FC2D /* SpanQueryFilter.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = SpanQueryFilter.cpp; path = src/core/CLucene/search/SpanQueryFilter.cpp; sourceTree = ""; }; + 54410BD7D8977AC67D8EA7A4 /* GermanAnalyzer.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = GermanAnalyzer.cpp; path = "src/contribs-lib/CLucene/analysis/de/GermanAnalyzer.cpp"; sourceTree = ""; }; + 546E7280DBEF27E1EFB1947C /* streamarray.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = streamarray.h; path = "src/contribs-lib/CLucene/util/streamarray.h"; sourceTree = ""; }; + 547B57C4BCEA74606B2C7155 /* _streambuffer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _streambuffer.h; path = src/core/CLucene/util/_streambuffer.h; sourceTree = ""; }; + 55D29F50902214B0652807B4 /* TermInfosWriter.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = TermInfosWriter.cpp; path = src/core/CLucene/index/TermInfosWriter.cpp; sourceTree = ""; }; + 55DD481AB7F720CD4FAA543B /* SpanQuery.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SpanQuery.h; path = src/core/CLucene/search/spans/SpanQuery.h; sourceTree = ""; }; + 55F6970EA8C4AADA5A214168 /* FilteredTermEnum.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FilteredTermEnum.h; path = src/core/CLucene/search/FilteredTermEnum.h; sourceTree = ""; }; + 561A23B57EBC4AB3104B2135 /* DisjunctionSumScorer.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = DisjunctionSumScorer.cpp; path = src/core/CLucene/search/DisjunctionSumScorer.cpp; sourceTree = ""; }; + 572456C6E2E13D0F9BB87A93 /* FieldsReader.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = FieldsReader.cpp; path = src/core/CLucene/index/FieldsReader.cpp; sourceTree = ""; }; + 5727D0A80F77B33D73278FEA /* libBRCLucene-OSX.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = "libBRCLucene-OSX.a"; path = "libBRCLucene-OSX.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 57549DDD865284D9D8F04A04 /* libstemmer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = libstemmer.h; path = "src/contribs-lib/CLucene/snowball/libstemmer.h"; sourceTree = ""; }; + 579D02079930C4A85DFF0E30 /* IndexSearcher.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = IndexSearcher.cpp; path = src/core/CLucene/search/IndexSearcher.cpp; sourceTree = ""; }; + 584C0ADCC53DEDA1B327E07A /* stem_KOI8_R_russian.c */ = {isa = PBXFileReference; includeInIndex = 1; name = stem_KOI8_R_russian.c; path = "src/contribs-lib/CLucene/snowball/src_c/stem_KOI8_R_russian.c"; sourceTree = ""; }; + 5933935B34B1DF1B909A82E1 /* _BooleanScorer2.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _BooleanScorer2.h; path = src/core/CLucene/search/_BooleanScorer2.h; sourceTree = ""; }; + 59472088F0CB14C50E3B8250 /* WildcardTermEnum.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = WildcardTermEnum.cpp; path = src/core/CLucene/search/WildcardTermEnum.cpp; sourceTree = ""; }; + 598BCDE0CB72EB179F420AEF /* MD5Digester.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = MD5Digester.cpp; path = src/core/CLucene/util/MD5Digester.cpp; sourceTree = ""; }; + 5A7CAD795C53CB90DB677BB8 /* GermanStemFilter.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = GermanStemFilter.cpp; path = "src/contribs-lib/CLucene/analysis/de/GermanStemFilter.cpp"; sourceTree = ""; }; + 5AB8128CFF9B3DE50E6E93C5 /* repl_tcslwr.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = repl_tcslwr.cpp; path = src/shared/CLucene/config/repl_tcslwr.cpp; sourceTree = ""; }; + 5AD98019D95FA39573B5A783 /* stem_UTF_8_spanish.c */ = {isa = PBXFileReference; includeInIndex = 1; name = stem_UTF_8_spanish.c; path = "src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_spanish.c"; sourceTree = ""; }; + 5D57A3028FBCC4A47A78535F /* TextFragment.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = TextFragment.cpp; path = "src/contribs-lib/CLucene/highlighter/TextFragment.cpp"; sourceTree = ""; }; + 5DCA51C5675E327CCA6B303D /* _SegmentInfos.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _SegmentInfos.h; path = src/core/CLucene/index/_SegmentInfos.h; sourceTree = ""; }; + 5DD38BAB6D1319E5E0598C37 /* SpanNotQuery.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = SpanNotQuery.cpp; path = src/core/CLucene/search/spans/SpanNotQuery.cpp; sourceTree = ""; }; + 5DF72D32A04B571A69F9019F /* NearSpansOrdered.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = NearSpansOrdered.cpp; path = src/core/CLucene/search/spans/NearSpansOrdered.cpp; sourceTree = ""; }; + 602EC519A3E66D140B2859EC /* repl_lltot.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = repl_lltot.cpp; path = src/shared/CLucene/config/repl_lltot.cpp; sourceTree = ""; }; + 618E8E5524841BF7F44040A0 /* GermanStemmer.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = GermanStemmer.cpp; path = "src/contribs-lib/CLucene/analysis/de/GermanStemmer.cpp"; sourceTree = ""; }; + 627AE9BA1D456E672F0978D9 /* _FieldCacheImpl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _FieldCacheImpl.h; path = src/core/CLucene/search/_FieldCacheImpl.h; sourceTree = ""; }; + 6284B6CE304456F7AC277046 /* ThreadLocal.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = ThreadLocal.cpp; path = src/core/CLucene/util/ThreadLocal.cpp; sourceTree = ""; }; + 62A0C45CC0014353E3FD136C /* BRCLucene-OSX.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "BRCLucene-OSX.xcconfig"; sourceTree = ""; }; + 632616E10F6905871654E773 /* PrefixQuery.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PrefixQuery.h; path = src/core/CLucene/search/PrefixQuery.h; sourceTree = ""; }; + 63281A45C3F3B0CB3A6E7025 /* stem_ISO_8859_1_norwegian.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = stem_ISO_8859_1_norwegian.h; path = "src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_norwegian.h"; sourceTree = ""; }; + 63E00C178A9FF52F0285E37D /* repl_wchar.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = repl_wchar.h; path = src/shared/CLucene/config/repl_wchar.h; sourceTree = ""; }; + 646D984DA01519CE1CE0F18E /* CachingTokenFilter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CachingTokenFilter.h; path = src/core/CLucene/analysis/CachingTokenFilter.h; sourceTree = ""; }; + 650A560B46237D58801A90A3 /* _SharedHeader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _SharedHeader.h; path = src/shared/CLucene/_SharedHeader.h; sourceTree = ""; }; + 6698C8F6B9D04C25F88EEF9F /* _NearSpansUnordered.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _NearSpansUnordered.h; path = src/core/CLucene/search/spans/_NearSpansUnordered.h; sourceTree = ""; }; + 67C48AE06CDA84D04C7CCA3A /* stem_UTF_8_porter.c */ = {isa = PBXFileReference; includeInIndex = 1; name = stem_UTF_8_porter.c; path = "src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_porter.c"; sourceTree = ""; }; + 68087F57847D61D65F78E340 /* MultiPhraseQuery.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = MultiPhraseQuery.cpp; path = src/core/CLucene/search/MultiPhraseQuery.cpp; sourceTree = ""; }; + 682B2446D9218CC38D48CDEB /* Document.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = Document.cpp; path = src/core/CLucene/document/Document.cpp; sourceTree = ""; }; + 691E7585FCFA1F07170E7156 /* Pods-BasePods-BRFullTextSearchTests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-BasePods-BRFullTextSearchTests-acknowledgements.plist"; sourceTree = ""; }; + 696BD38B0EAA77AAF9E060CE /* DateTools.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = DateTools.cpp; path = src/core/CLucene/document/DateTools.cpp; sourceTree = ""; }; + 6996EC84817B1EC2677FD772 /* stem_UTF_8_porter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = stem_UTF_8_porter.h; path = "src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_porter.h"; sourceTree = ""; }; + 6A0B958A01F1A1C850AF9113 /* LanguageBasedAnalyzer.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = LanguageBasedAnalyzer.cpp; path = "src/contribs-lib/CLucene/analysis/LanguageBasedAnalyzer.cpp"; sourceTree = ""; }; + 6A59577679CC4CEC9F8CC8EB /* NearSpansUnordered.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = NearSpansUnordered.cpp; path = src/core/CLucene/search/spans/NearSpansUnordered.cpp; sourceTree = ""; }; + 6A7C9ABB8BA4CB7B38610EF7 /* QueryToken.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = QueryToken.h; path = src/core/CLucene/queryParser/QueryToken.h; sourceTree = ""; }; + 6D40C9B7228F5E891C332B15 /* condition.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = condition.cpp; path = src/shared/CLucene/debug/condition.cpp; sourceTree = ""; }; + 6D8E9C46D7C29EE73FBBC824 /* _ThreadLocal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _ThreadLocal.h; path = src/core/CLucene/util/_ThreadLocal.h; sourceTree = ""; }; + 6D9D525816087C7D2523A318 /* stem_UTF_8_dutch.c */ = {isa = PBXFileReference; includeInIndex = 1; name = stem_UTF_8_dutch.c; path = "src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_dutch.c"; sourceTree = ""; }; + 6E1A98BC88E6F6AE8C44393A /* _TermScorer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _TermScorer.h; path = src/core/CLucene/search/_TermScorer.h; sourceTree = ""; }; + 6FDB4B7F2922844D1D26D43E /* BRCLucene-OSX-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "BRCLucene-OSX-prefix.pch"; sourceTree = ""; }; + 70C22977A6B70616EE12ED42 /* RangeQuery.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = RangeQuery.cpp; path = src/core/CLucene/search/RangeQuery.cpp; sourceTree = ""; }; + 71761D115AC3B36A9C7F0855 /* AnalysisHeader.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = AnalysisHeader.cpp; path = src/core/CLucene/analysis/AnalysisHeader.cpp; sourceTree = ""; }; + 7269750624A74B0D02FE2A9C /* ScorerDocQueue.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = ScorerDocQueue.cpp; path = src/core/CLucene/search/ScorerDocQueue.cpp; sourceTree = ""; }; + 727632919006A5F9C125FF85 /* BRCLucene-OSX-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "BRCLucene-OSX-dummy.m"; sourceTree = ""; }; + 7288F6FB8BEED013C9FE3051 /* _TermInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _TermInfo.h; path = src/core/CLucene/index/_TermInfo.h; sourceTree = ""; }; + 72F575D6C9139A25D5E03773 /* SloppyPhraseScorer.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = SloppyPhraseScorer.cpp; path = src/core/CLucene/search/SloppyPhraseScorer.cpp; sourceTree = ""; }; + 72F5AFF8E9BD9EABE2B64223 /* Explanation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Explanation.h; path = src/core/CLucene/search/Explanation.h; sourceTree = ""; }; + 731DA62C2861ED07FA667D29 /* MultiTermQuery.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MultiTermQuery.h; path = src/core/CLucene/search/MultiTermQuery.h; sourceTree = ""; }; + 73BABBFE77D30CD9A7EF3147 /* stem_ISO_8859_1_french.c */ = {isa = PBXFileReference; includeInIndex = 1; name = stem_ISO_8859_1_french.c; path = "src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_french.c"; sourceTree = ""; }; + 73F5EEEA5D31D545EC728CD4 /* _IndexFileNameFilter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _IndexFileNameFilter.h; path = src/core/CLucene/index/_IndexFileNameFilter.h; sourceTree = ""; }; + 766AA2B34AAFCF76B1F3D526 /* stem_ISO_8859_1_swedish.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = stem_ISO_8859_1_swedish.h; path = "src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_swedish.h"; sourceTree = ""; }; + 770990EEBAD703DFEB329D81 /* Hits.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = Hits.cpp; path = src/core/CLucene/search/Hits.cpp; sourceTree = ""; }; + 777EA46A351F2E4477E560AA /* Pods-BasePods-BRFullTextSearchTests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-BasePods-BRFullTextSearchTests-acknowledgements.markdown"; sourceTree = ""; }; + 782739F6CE5C46C963EC74C1 /* stem_UTF_8_dutch.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = stem_UTF_8_dutch.h; path = "src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_dutch.h"; sourceTree = ""; }; + 7929F4FC21D5DB72EF954399 /* IndexSearcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IndexSearcher.h; path = src/core/CLucene/search/IndexSearcher.h; sourceTree = ""; }; + 7941776DE9A915442BCCF7B7 /* FilteredTermEnum.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = FilteredTermEnum.cpp; path = src/core/CLucene/search/FilteredTermEnum.cpp; sourceTree = ""; }; + 7950725A0B3603036B7B80AF /* SpanNearQuery.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SpanNearQuery.h; path = src/core/CLucene/search/spans/SpanNearQuery.h; sourceTree = ""; }; + 795B33C5E107310E1F2D37BE /* Pods-BasePods-BRFullTextSearch.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-BasePods-BRFullTextSearch.debug.xcconfig"; sourceTree = ""; }; + 79BDC5A2DADD567AA7B91A8B /* stem_ISO_8859_1_spanish.c */ = {isa = PBXFileReference; includeInIndex = 1; name = stem_ISO_8859_1_spanish.c; path = "src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_spanish.c"; sourceTree = ""; }; + 7ABEF88AC3ACE18E1ED39699 /* stem_UTF_8_english.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = stem_UTF_8_english.h; path = "src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_english.h"; sourceTree = ""; }; + 7C89E2A10F35E0711CA0B857 /* repl_wctype.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = repl_wctype.h; path = src/shared/CLucene/config/repl_wctype.h; sourceTree = ""; }; + 7D99C04C29049C71354E2722 /* stem_ISO_8859_1_italian.c */ = {isa = PBXFileReference; includeInIndex = 1; name = stem_ISO_8859_1_italian.c; path = "src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_italian.c"; sourceTree = ""; }; + 7E47EE3B1FA8B01F42A6F2A5 /* SimpleHTMLEncoder.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = SimpleHTMLEncoder.cpp; path = "src/contribs-lib/CLucene/highlighter/SimpleHTMLEncoder.cpp"; sourceTree = ""; }; + 7E4B24911973F60CE6076892 /* NumberTools.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = NumberTools.cpp; path = src/core/CLucene/document/NumberTools.cpp; sourceTree = ""; }; + 7E83EB9372570C10A6CEB6B6 /* SimpleFragmenter.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = SimpleFragmenter.cpp; path = "src/contribs-lib/CLucene/highlighter/SimpleFragmenter.cpp"; sourceTree = ""; }; + 7EE719468C11B64E40622BF0 /* SpanFilterResult.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SpanFilterResult.h; path = src/core/CLucene/search/SpanFilterResult.h; sourceTree = ""; }; + 7F22C7CB57C09C24383D7107 /* FieldCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FieldCache.h; path = src/core/CLucene/search/FieldCache.h; sourceTree = ""; }; + 7F39E1E03B9D83FEC19B360F /* arrayinputstream.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = arrayinputstream.h; path = "src/contribs-lib/CLucene/util/arrayinputstream.h"; sourceTree = ""; }; + 8131981DF7D13C79FD86CF00 /* Explanation.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = Explanation.cpp; path = src/core/CLucene/search/Explanation.cpp; sourceTree = ""; }; + 8150375DE47FB4492DE04833 /* stem_UTF_8_russian.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = stem_UTF_8_russian.h; path = "src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_russian.h"; sourceTree = ""; }; + 8177BE194773021F64AC9B22 /* RAMDirectory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RAMDirectory.h; path = src/core/CLucene/store/RAMDirectory.h; sourceTree = ""; }; + 818A9068B3FD13D69636F427 /* TextFragment.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = TextFragment.h; path = "src/contribs-lib/CLucene/highlighter/TextFragment.h"; sourceTree = ""; }; + 81E56C8BEF8D1690265A69EF /* _FieldsReader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _FieldsReader.h; path = src/core/CLucene/index/_FieldsReader.h; sourceTree = ""; }; + 8250CD2D402839BE57170FE0 /* modules.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = modules.h; path = "src/contribs-lib/CLucene/snowball/libstemmer/modules.h"; sourceTree = ""; }; + 8386CE4235C56DBAE73C949B /* Equators.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = Equators.cpp; path = src/core/CLucene/util/Equators.cpp; sourceTree = ""; }; + 84EA720160389AE05DA86401 /* SpanScorer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SpanScorer.h; path = src/core/CLucene/search/spans/SpanScorer.h; sourceTree = ""; }; + 850AE498F808E9DFFF14C329 /* Analyzers.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = Analyzers.cpp; path = src/core/CLucene/analysis/Analyzers.cpp; sourceTree = ""; }; + 85145B0375A157A82DEC19A2 /* stem_ISO_8859_1_porter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = stem_ISO_8859_1_porter.h; path = "src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_porter.h"; sourceTree = ""; }; + 8565CF0D75DC28F681E3E039 /* _TermVector.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _TermVector.h; path = src/core/CLucene/index/_TermVector.h; sourceTree = ""; }; + 85A1065260F668F703369982 /* Misc.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Misc.h; path = src/shared/CLucene/util/Misc.h; sourceTree = ""; }; + 8677A29928A78E301D0F517B /* MultiReader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MultiReader.h; path = src/core/CLucene/index/MultiReader.h; sourceTree = ""; }; + 86A917E90ABB2C84EFE23BB1 /* SegmentTermDocs.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = SegmentTermDocs.cpp; path = src/core/CLucene/index/SegmentTermDocs.cpp; sourceTree = ""; }; + 86C3166A689142932B326EE8 /* repl_tprintf.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = repl_tprintf.cpp; path = src/shared/CLucene/config/repl_tprintf.cpp; sourceTree = ""; }; + 86E15A9EB69363D10D913642 /* IndexInput.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IndexInput.h; path = src/core/CLucene/store/IndexInput.h; sourceTree = ""; }; + 872C96F28C7FE3EBA881336C /* SpanFilter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SpanFilter.h; path = src/core/CLucene/search/SpanFilter.h; sourceTree = ""; }; + 872D2A9F1471134AB2EBA436 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/System/Library/Frameworks/Cocoa.framework; sourceTree = DEVELOPER_DIR; }; + 87FE3634F7F1E05CA7D522D6 /* mem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = mem.h; path = src/core/CLucene/debug/mem.h; sourceTree = ""; }; + 880E2676F9904DB7B53CEC79 /* Analyzers.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Analyzers.h; path = src/core/CLucene/analysis/Analyzers.h; sourceTree = ""; }; + 89226E0920A85262E5591BF5 /* stem_ISO_8859_1_german.c */ = {isa = PBXFileReference; includeInIndex = 1; name = stem_ISO_8859_1_german.c; path = "src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_german.c"; sourceTree = ""; }; + 898A500B20CCDFDC0AF6D2E0 /* QueryParserConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = QueryParserConstants.h; path = src/core/CLucene/queryParser/QueryParserConstants.h; sourceTree = ""; }; + 89B4FA065EEC6C655788DC63 /* _SegmentMergeQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _SegmentMergeQueue.h; path = src/core/CLucene/index/_SegmentMergeQueue.h; sourceTree = ""; }; + 8A0D8B4C254B952C4EF189CC /* stem_ISO_8859_1_norwegian.c */ = {isa = PBXFileReference; includeInIndex = 1; name = stem_ISO_8859_1_norwegian.c; path = "src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_norwegian.c"; sourceTree = ""; }; + 8A3B0A4220061DBBE14A0EDC /* Fragmenter.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = Fragmenter.cpp; path = "src/contribs-lib/CLucene/highlighter/Fragmenter.cpp"; sourceTree = ""; }; + 8A94213291EAAE06BBB8E0BD /* _PhraseScorer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _PhraseScorer.h; path = src/core/CLucene/search/_PhraseScorer.h; sourceTree = ""; }; + 8B3E4408F3CE3908861990DC /* ConjunctionScorer.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = ConjunctionScorer.cpp; path = src/core/CLucene/search/ConjunctionScorer.cpp; sourceTree = ""; }; + 8C11605A23EF651B64C23DFC /* gzipinputstream.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = gzipinputstream.h; path = "src/contribs-lib/CLucene/util/gzipinputstream.h"; sourceTree = ""; }; + 8C87FA1353739983EF4BD445 /* Searchable.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Searchable.h; path = src/core/CLucene/search/Searchable.h; sourceTree = ""; }; + 8CAB5B5EDF27414162D95761 /* _SegmentHeader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _SegmentHeader.h; path = src/core/CLucene/index/_SegmentHeader.h; sourceTree = ""; }; + 8CC3A6FE3ACE1E3529AE3FE4 /* Pods-BasePods-BRFullTextSearchTests-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-BasePods-BRFullTextSearchTests-resources.sh"; sourceTree = ""; }; + 8E43193F2F0A7BEC76507B3D /* TermVector.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = TermVector.h; path = src/core/CLucene/index/TermVector.h; sourceTree = ""; }; + 8FB7EAD910904FBC1E803A92 /* MultiSegmentReader.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = MultiSegmentReader.cpp; path = src/core/CLucene/index/MultiSegmentReader.cpp; sourceTree = ""; }; + 8FE62E2C9BE065ED04B141A2 /* Spans.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Spans.h; path = src/core/CLucene/search/spans/Spans.h; sourceTree = ""; }; + 9058F7809EA379D35E92D268 /* FuzzyQuery.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = FuzzyQuery.cpp; path = src/core/CLucene/search/FuzzyQuery.cpp; sourceTree = ""; }; + 90905C590BE1580DC15B5D72 /* RAMDirectory.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = RAMDirectory.cpp; path = src/core/CLucene/store/RAMDirectory.cpp; sourceTree = ""; }; + 909FB425551C99481AA9162B /* gunichartables.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = gunichartables.cpp; path = src/shared/CLucene/config/gunichartables.cpp; sourceTree = ""; }; + 91D5FD2E8E8D5AADC6AFC18F /* gzipcompressstream.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = gzipcompressstream.cpp; path = "src/contribs-lib/CLucene/util/gzipcompressstream.cpp"; sourceTree = ""; }; + 91DE2F0AC9C47E9329B7397F /* _FieldDocSortedHitQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _FieldDocSortedHitQueue.h; path = src/core/CLucene/search/_FieldDocSortedHitQueue.h; sourceTree = ""; }; + 9244E614D6DABBEC580121AD /* Pods-BasePods-BRFullTextSearch-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-BasePods-BRFullTextSearch-dummy.m"; sourceTree = ""; }; + 929BA395AF172F9582E56EC8 /* _SkipListReader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _SkipListReader.h; path = src/core/CLucene/index/_SkipListReader.h; sourceTree = ""; }; + 942ED4342AC269C65C0E81CD /* SegmentMergeInfo.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = SegmentMergeInfo.cpp; path = src/core/CLucene/index/SegmentMergeInfo.cpp; sourceTree = ""; }; + 944D8B83FADF6F0C5ED5A0D2 /* CachingWrapperFilter.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = CachingWrapperFilter.cpp; path = src/core/CLucene/search/CachingWrapperFilter.cpp; sourceTree = ""; }; + 9493084135638233C4304DE0 /* VoidMap.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VoidMap.h; path = src/core/CLucene/util/VoidMap.h; sourceTree = ""; }; + 94B1109EB501086D81FAF74F /* GermanStemmer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GermanStemmer.h; path = "src/contribs-lib/CLucene/analysis/de/GermanStemmer.h"; sourceTree = ""; }; + 94BC7B1991D96E91AF1A14C9 /* stem_UTF_8_swedish.c */ = {isa = PBXFileReference; includeInIndex = 1; name = stem_UTF_8_swedish.c; path = "src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_swedish.c"; sourceTree = ""; }; + 95862E334098E3EB9F92ADD3 /* Pods-BasePods-BRFullTextSearchMacOS-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-BasePods-BRFullTextSearchMacOS-acknowledgements.markdown"; sourceTree = ""; }; + 9631DE8DF29AEF40018C176C /* Scorer.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = Scorer.cpp; path = src/core/CLucene/search/Scorer.cpp; sourceTree = ""; }; + 967217E67E512175B6731208 /* BooleanQuery.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BooleanQuery.h; path = src/core/CLucene/search/BooleanQuery.h; sourceTree = ""; }; + 9689F9F14A10EFB29C4C2765 /* StringBuffer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = StringBuffer.h; path = src/shared/CLucene/util/StringBuffer.h; sourceTree = ""; }; + 97A841B81A9045DD77B2D129 /* MultipleTermPositions.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = MultipleTermPositions.cpp; path = src/core/CLucene/index/MultipleTermPositions.cpp; sourceTree = ""; }; + 97DCFFA75EFBC35B9EE08783 /* _FieldInfos.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _FieldInfos.h; path = src/core/CLucene/index/_FieldInfos.h; sourceTree = ""; }; + 9853ABDC632E9F9F0AF7B1E2 /* TermInfo.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = TermInfo.cpp; path = src/core/CLucene/index/TermInfo.cpp; sourceTree = ""; }; + 989DDAFD77677DE9770763D4 /* MergePolicy.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = MergePolicy.cpp; path = src/core/CLucene/index/MergePolicy.cpp; sourceTree = ""; }; + 99B579C4BF8A3BE3878628BA /* CLConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLConfig.h; path = src/core/CLucene/CLConfig.h; sourceTree = ""; }; + 9B7C64F2F23938B239313B56 /* CLStreams.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLStreams.h; path = src/core/CLucene/util/CLStreams.h; sourceTree = ""; }; + 9EDFE19FF4B4CF03C431B501 /* Hits.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Hits.h; path = src/core/CLucene/search/Hits.h; sourceTree = ""; }; + 9EF8DB5A95B45741D9635539 /* _streambase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _streambase.h; path = src/core/CLucene/util/_streambase.h; sourceTree = ""; }; + 9F7536781E3934942BB35CCD /* Pods-BasePods-BRFullTextSearchMacOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-BasePods-BRFullTextSearchMacOS.release.xcconfig"; sourceTree = ""; }; + A02E865272F7A096250DAF8E /* clucene-config.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "clucene-config.h"; path = "BRCLucene/src/CLucene/clucene-config.h"; sourceTree = ""; }; + A02EE6B24F45CA042375C4C9 /* Payload.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Payload.h; path = src/core/CLucene/index/Payload.h; sourceTree = ""; }; + A042B88B39AC31C1407BEA94 /* FieldDoc.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FieldDoc.h; path = src/core/CLucene/search/FieldDoc.h; sourceTree = ""; }; + A277BD760515F233445AA8DC /* _PhraseQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _PhraseQueue.h; path = src/core/CLucene/search/_PhraseQueue.h; sourceTree = ""; }; + A2BA2637A9C24B098EC6345B /* libPods-BasePods-BRFullTextSearch.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = "libPods-BasePods-BRFullTextSearch.a"; path = "libPods-BasePods-BRFullTextSearch.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + A2DEC5A03C4993CCC35B4135 /* MatchAllDocsQuery.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = MatchAllDocsQuery.cpp; path = src/core/CLucene/search/MatchAllDocsQuery.cpp; sourceTree = ""; }; + A361F6AE71675BCA7694ED1C /* stem_ISO_8859_1_danish.c */ = {isa = PBXFileReference; includeInIndex = 1; name = stem_ISO_8859_1_danish.c; path = "src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_danish.c"; sourceTree = ""; }; + A3B1A6219EE98FDABFFCA0B7 /* Highlighter.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = Highlighter.cpp; path = "src/contribs-lib/CLucene/highlighter/Highlighter.cpp"; sourceTree = ""; }; + A3EA9DC1BB124B3059D0E1D3 /* Sort.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = Sort.cpp; path = src/core/CLucene/search/Sort.cpp; sourceTree = ""; }; + A43880175020462A96391077 /* AnalysisHeader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AnalysisHeader.h; path = src/core/CLucene/analysis/AnalysisHeader.h; sourceTree = ""; }; + A4C0A317D0BD30F8A57BB4DB /* HighlightScorer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HighlightScorer.h; path = "src/contribs-lib/CLucene/highlighter/HighlightScorer.h"; sourceTree = ""; }; + A4C9F126F3FEA27B4A31A96A /* Equators.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Equators.h; path = src/core/CLucene/util/Equators.h; sourceTree = ""; }; + A74EE63073B59E49EED0CC73 /* IndexOutput.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IndexOutput.h; path = src/core/CLucene/store/IndexOutput.h; sourceTree = ""; }; + A7A6D6F6E8DC27E164765E58 /* SkipListReader.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = SkipListReader.cpp; path = src/core/CLucene/index/SkipListReader.cpp; sourceTree = ""; }; + A7FF2DFE608F4496127F1767 /* stem_UTF_8_german.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = stem_UTF_8_german.h; path = "src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_german.h"; sourceTree = ""; }; + A84DDC3C18DB7F42298C59BD /* IndexWriter.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = IndexWriter.cpp; path = src/core/CLucene/index/IndexWriter.cpp; sourceTree = ""; }; + A8A065338915556B8F986F52 /* stem_UTF_8_portuguese.c */ = {isa = PBXFileReference; includeInIndex = 1; name = stem_UTF_8_portuguese.c; path = "src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_portuguese.c"; sourceTree = ""; }; + A8B2143D61244E46BC66ADA9 /* _SkipListWriter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _SkipListWriter.h; path = src/core/CLucene/index/_SkipListWriter.h; sourceTree = ""; }; + A8B7BC78D6C3F7870EC85FAB /* SpanFirstQuery.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SpanFirstQuery.h; path = src/core/CLucene/search/spans/SpanFirstQuery.h; sourceTree = ""; }; + A8E51998B27E27442F92A0D4 /* SearchHeader.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = SearchHeader.cpp; path = src/core/CLucene/search/SearchHeader.cpp; sourceTree = ""; }; + A95D85165E09C2D9E8B193DF /* _VoidList.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _VoidList.h; path = src/core/CLucene/util/_VoidList.h; sourceTree = ""; }; + A9627C18AE73CE1C935A697D /* StandardAnalyzer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = StandardAnalyzer.h; path = src/core/CLucene/analysis/standard/StandardAnalyzer.h; sourceTree = ""; }; + AB2A564E26C8A74D8358AC1A /* stem_UTF_8_russian.c */ = {isa = PBXFileReference; includeInIndex = 1; name = stem_UTF_8_russian.c; path = "src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_russian.c"; sourceTree = ""; }; + AB3039F361815D24182FBDA4 /* IndexOutput.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = IndexOutput.cpp; path = src/core/CLucene/store/IndexOutput.cpp; sourceTree = ""; }; + AB98165ADE90ADADFEF8C05B /* libBRCLucene-iOS.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = "libBRCLucene-iOS.a"; path = "libBRCLucene-iOS.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + ABECEBECAD1EBEE9656B1511 /* MergePolicy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MergePolicy.h; path = src/core/CLucene/index/MergePolicy.h; sourceTree = ""; }; + AC8751090E6E3C49B858C374 /* MultiReader.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = MultiReader.cpp; path = src/core/CLucene/index/MultiReader.cpp; sourceTree = ""; }; + ACB710A42B9F368BC95D775D /* Filter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Filter.h; path = src/core/CLucene/search/Filter.h; sourceTree = ""; }; + ACC13AD187B30C8FE98BDEF4 /* WeightedTerm.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WeightedTerm.h; path = "src/contribs-lib/CLucene/highlighter/WeightedTerm.h"; sourceTree = ""; }; + AD4324FEBE87298569D61E16 /* Pods-BasePods-BRFullTextSearch-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-BasePods-BRFullTextSearch-acknowledgements.markdown"; sourceTree = ""; }; + AD83C3B75390F54F1CFB7090 /* stem_UTF_8_norwegian.c */ = {isa = PBXFileReference; includeInIndex = 1; name = stem_UTF_8_norwegian.c; path = "src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_norwegian.c"; sourceTree = ""; }; + AE20E1E48FFA3F76CCF1C604 /* SimpleHTMLFormatter.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = SimpleHTMLFormatter.cpp; path = "src/contribs-lib/CLucene/highlighter/SimpleHTMLFormatter.cpp"; sourceTree = ""; }; + AE274E7ED56AD5F29CABEA7C /* Pods-BasePods-BRFullTextSearchMacOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-BasePods-BRFullTextSearchMacOS-dummy.m"; sourceTree = ""; }; + B1A483489A404CDEAFD6271C /* BRCLucene-iOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "BRCLucene-iOS-prefix.pch"; path = "../BRCLucene-iOS/BRCLucene-iOS-prefix.pch"; sourceTree = ""; }; + B1BE2ECBE886050BAF96719F /* SpanOrQuery.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = SpanOrQuery.cpp; path = src/core/CLucene/search/spans/SpanOrQuery.cpp; sourceTree = ""; }; + B1E07F1888DEDFCA13AC51BE /* GermanStemFilter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GermanStemFilter.h; path = "src/contribs-lib/CLucene/analysis/de/GermanStemFilter.h"; sourceTree = ""; }; + B1E85BE64E549D2A654576A3 /* Encoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Encoder.h; path = "src/contribs-lib/CLucene/highlighter/Encoder.h"; sourceTree = ""; }; + B23F142DBEB2DBE1CFC39D56 /* stem_UTF_8_french.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = stem_UTF_8_french.h; path = "src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_french.h"; sourceTree = ""; }; + B3C9301311C64378638AB1BA /* _condition.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _condition.h; path = src/shared/CLucene/debug/_condition.h; sourceTree = ""; }; + B4217FE2826681C9571EAD92 /* StandardFilter.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = StandardFilter.cpp; path = src/core/CLucene/analysis/standard/StandardFilter.cpp; sourceTree = ""; }; + B4A68DF41CAD862B699025AE /* _IndexFileNames.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _IndexFileNames.h; path = src/core/CLucene/index/_IndexFileNames.h; sourceTree = ""; }; + B520E0B2845F0C0274582E69 /* StandardAnalyzer.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = StandardAnalyzer.cpp; path = src/core/CLucene/analysis/standard/StandardAnalyzer.cpp; sourceTree = ""; }; + B5EB47B2B6F3F36AEA8B0568 /* Terms.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Terms.h; path = src/core/CLucene/index/Terms.h; sourceTree = ""; }; + B6066E59EBFD4D71863B360E /* utf8.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = utf8.cpp; path = src/shared/CLucene/config/utf8.cpp; sourceTree = ""; }; + B6FEB8A07263C5EBA87C1D11 /* _FieldInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _FieldInfo.h; path = src/core/CLucene/index/_FieldInfo.h; sourceTree = ""; }; + B73CCF67C806F8DC83DD935F /* LuceneThreads.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LuceneThreads.h; path = src/shared/CLucene/LuceneThreads.h; sourceTree = ""; }; + B747B0D193B44B5389361ABC /* SegmentReader.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = SegmentReader.cpp; path = src/core/CLucene/index/SegmentReader.cpp; sourceTree = ""; }; + B7A08A712776F849131C3724 /* Misc.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = Misc.cpp; path = src/shared/CLucene/util/Misc.cpp; sourceTree = ""; }; + BA1B9D3E319A89A133A99F9C /* StandardTokenizerConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = StandardTokenizerConstants.h; path = src/core/CLucene/analysis/standard/StandardTokenizerConstants.h; sourceTree = ""; }; + BA4F4C78DE804F2F4C4AF2F6 /* Highlighter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Highlighter.h; path = "src/contribs-lib/CLucene/highlighter/Highlighter.h"; sourceTree = ""; }; + BB2A600EEA35EE2AD4F7E6B5 /* IndexModifier.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = IndexModifier.cpp; path = src/core/CLucene/index/IndexModifier.cpp; sourceTree = ""; }; + BC3A854954D51BEC440F8C4C /* Pods-BasePods-BRFullTextSearchMacOS-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-BasePods-BRFullTextSearchMacOS-resources.sh"; sourceTree = ""; }; + BC45EF9298BBF1CBF5DAEFAE /* SegmentTermEnum.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = SegmentTermEnum.cpp; path = src/core/CLucene/index/SegmentTermEnum.cpp; sourceTree = ""; }; + BE1CAEC04FF3A035BD7A9FE2 /* CompoundFile.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = CompoundFile.cpp; path = src/core/CLucene/index/CompoundFile.cpp; sourceTree = ""; }; + BF119CB72BC2FA5795FEDB1E /* SpanWeight.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SpanWeight.h; path = src/core/CLucene/search/spans/SpanWeight.h; sourceTree = ""; }; + BF3FA77DBA865A7EA0F87D43 /* _MMapIndexInput.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _MMapIndexInput.h; path = src/core/CLucene/store/_MMapIndexInput.h; sourceTree = ""; }; + BF5538278743742520868FC0 /* _clucene-config.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "_clucene-config.h"; path = "BRCLucene/src/CLucene/_clucene-config.h"; sourceTree = ""; }; + BF81D9F8FB3657A529720E93 /* stem_ISO_8859_1_english.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = stem_ISO_8859_1_english.h; path = "src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_english.h"; sourceTree = ""; }; + C05BA5FC49FD02E0C15821C7 /* _ConjunctionScorer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _ConjunctionScorer.h; path = src/core/CLucene/search/_ConjunctionScorer.h; sourceTree = ""; }; + C075F32DC3941F30B2189850 /* stem_UTF_8_english.c */ = {isa = PBXFileReference; includeInIndex = 1; name = stem_UTF_8_english.c; path = "src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_english.c"; sourceTree = ""; }; + C14BF1ECA6A7286DC68EEAF1 /* PorterStemmer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PorterStemmer.h; path = "src/contribs-lib/CLucene/analysis/PorterStemmer.h"; sourceTree = ""; }; + C25B9D58C74C755DCA8A7321 /* MultiFieldQueryParser.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = MultiFieldQueryParser.cpp; path = src/core/CLucene/queryParser/MultiFieldQueryParser.cpp; sourceTree = ""; }; + C2D85327D24A734C3D8AD3D2 /* FieldSortedHitQueue.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = FieldSortedHitQueue.cpp; path = src/core/CLucene/search/FieldSortedHitQueue.cpp; sourceTree = ""; }; + C31D97E55D7845929D793A5F /* FieldInfos.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = FieldInfos.cpp; path = src/core/CLucene/index/FieldInfos.cpp; sourceTree = ""; }; + C37C55BC741E3C8863C43937 /* FieldCache.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = FieldCache.cpp; path = src/core/CLucene/search/FieldCache.cpp; sourceTree = ""; }; + C41F9E30FD9198F7297128C4 /* stem_UTF_8_german.c */ = {isa = PBXFileReference; includeInIndex = 1; name = stem_UTF_8_german.c; path = "src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_german.c"; sourceTree = ""; }; + C4597FC38C46E0D8C60AB1DC /* MultiSearcher.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = MultiSearcher.cpp; path = src/core/CLucene/search/MultiSearcher.cpp; sourceTree = ""; }; + C560E89140891536E480371B /* BRCLucene-iOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "BRCLucene-iOS-dummy.m"; path = "../BRCLucene-iOS/BRCLucene-iOS-dummy.m"; sourceTree = ""; }; + C65BB8C950BD3D088902E271 /* LockFactory.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = LockFactory.cpp; path = src/core/CLucene/store/LockFactory.cpp; sourceTree = ""; }; + C689EF134FEFB13911FC5165 /* TermSpans.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = TermSpans.cpp; path = src/core/CLucene/search/spans/TermSpans.cpp; sourceTree = ""; }; + C70B81556630B837C83A9BC8 /* RangeQuery.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RangeQuery.h; path = src/core/CLucene/search/RangeQuery.h; sourceTree = ""; }; + C7E5113841A81E955FAC79B7 /* repl_tcstod.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = repl_tcstod.cpp; path = src/shared/CLucene/config/repl_tcstod.cpp; sourceTree = ""; }; + C7F9AFABC1C734A4A035937B /* GermanAnalyzer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GermanAnalyzer.h; path = "src/contribs-lib/CLucene/analysis/de/GermanAnalyzer.h"; sourceTree = ""; }; + C833C400B1D27CBCA5C28C03 /* SkipListWriter.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = SkipListWriter.cpp; path = src/core/CLucene/index/SkipListWriter.cpp; sourceTree = ""; }; + C887FA5266066B86DF635C6D /* CJKAnalyzer.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = CJKAnalyzer.cpp; path = "src/contribs-lib/CLucene/analysis/cjk/CJKAnalyzer.cpp"; sourceTree = ""; }; + C8DF2B8D9E760A058241AEB5 /* FieldSelector.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = FieldSelector.cpp; path = src/core/CLucene/document/FieldSelector.cpp; sourceTree = ""; }; + C951D813358FB229881B81E9 /* _TermSpans.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _TermSpans.h; path = src/core/CLucene/search/spans/_TermSpans.h; sourceTree = ""; }; + C9F431FADD31D5F953F292FA /* stem_UTF_8_portuguese.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = stem_UTF_8_portuguese.h; path = "src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_portuguese.h"; sourceTree = ""; }; + CAAB067E1FD52B99F7DD6B24 /* TermVectorReader.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = TermVectorReader.cpp; path = src/core/CLucene/index/TermVectorReader.cpp; sourceTree = ""; }; + CAAB903DFEEC9662774A2799 /* TermVectorWriter.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = TermVectorWriter.cpp; path = src/core/CLucene/index/TermVectorWriter.cpp; sourceTree = ""; }; + CD101E72857254DE70CA0442 /* Scorer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Scorer.h; path = src/core/CLucene/search/Scorer.h; sourceTree = ""; }; + CD34A0EC6C214EE624A7C782 /* _FastCharStream.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _FastCharStream.h; path = src/core/CLucene/util/_FastCharStream.h; sourceTree = ""; }; + CD7BB525AEDFEAA2B610804F /* stem_ISO_8859_1_portuguese.c */ = {isa = PBXFileReference; includeInIndex = 1; name = stem_ISO_8859_1_portuguese.c; path = "src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_portuguese.c"; sourceTree = ""; }; + CE0CD854DDBCAEEEB189BA79 /* PhraseScorer.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = PhraseScorer.cpp; path = src/core/CLucene/search/PhraseScorer.cpp; sourceTree = ""; }; + CE7D186707CB6315363BA5BF /* TokenSources.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = TokenSources.h; path = "src/contribs-lib/CLucene/highlighter/TokenSources.h"; sourceTree = ""; }; + CE83932C566294FA69BE30D0 /* threads.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = threads.cpp; path = src/shared/CLucene/config/threads.cpp; sourceTree = ""; }; + CEDE1E95F6AEB482DEC50837 /* ExactPhraseScorer.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = ExactPhraseScorer.cpp; path = src/core/CLucene/search/ExactPhraseScorer.cpp; sourceTree = ""; }; + CF9E0327487590018A827FA1 /* DirectoryIndexReader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DirectoryIndexReader.h; path = src/core/CLucene/index/DirectoryIndexReader.h; sourceTree = ""; }; + CFF49D6518AC608DE37C5E13 /* ConstantScoreQuery.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = ConstantScoreQuery.cpp; path = src/core/CLucene/search/ConstantScoreQuery.cpp; sourceTree = ""; }; + D058C1BD8E32F4161EA1ACCD /* DateTools.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DateTools.h; path = src/core/CLucene/document/DateTools.h; sourceTree = ""; }; + D0680B69A04A33D50CEC65F1 /* _NearSpansOrdered.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _NearSpansOrdered.h; path = src/core/CLucene/search/spans/_NearSpansOrdered.h; sourceTree = ""; }; + D0AC77605F4B1CBDA47BC5A0 /* stem_KOI8_R_russian.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = stem_KOI8_R_russian.h; path = "src/contribs-lib/CLucene/snowball/src_c/stem_KOI8_R_russian.h"; sourceTree = ""; }; + D1E2D2D2D2C0422EEDE7419F /* PrefixQuery.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = PrefixQuery.cpp; path = src/core/CLucene/search/PrefixQuery.cpp; sourceTree = ""; }; + D21681199F2C28266563161C /* stem_ISO_8859_1_spanish.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = stem_ISO_8859_1_spanish.h; path = "src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_spanish.h"; sourceTree = ""; }; + D3495D678ADEB38CDF6C3BF5 /* _threads.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _threads.h; path = src/shared/CLucene/config/_threads.h; sourceTree = ""; }; + D3AC7D296DFA696042D4418A /* SpanTermQuery.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = SpanTermQuery.cpp; path = src/core/CLucene/search/spans/SpanTermQuery.cpp; sourceTree = ""; }; + D545707185C7C927AE1B38B5 /* DateField.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = DateField.cpp; path = src/core/CLucene/document/DateField.cpp; sourceTree = ""; }; + D58B32B62F500FF008ECA9AE /* _Term.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _Term.h; path = src/core/CLucene/index/_Term.h; sourceTree = ""; }; + D5A5A0CB48E4FCAB9D1D4C7B /* PorterStemmer.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = PorterStemmer.cpp; path = "src/contribs-lib/CLucene/analysis/PorterStemmer.cpp"; sourceTree = ""; }; + D5B6CC86362332A6F2839964 /* Terms.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = Terms.cpp; path = src/core/CLucene/index/Terms.cpp; sourceTree = ""; }; + D64323EE913FFD6C2FCE0307 /* SimpleHTMLFormatter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SimpleHTMLFormatter.h; path = "src/contribs-lib/CLucene/highlighter/SimpleHTMLFormatter.h"; sourceTree = ""; }; + D83428FF628EEBCF6838DF5C /* stem_ISO_8859_1_dutch.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = stem_ISO_8859_1_dutch.h; path = "src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_dutch.h"; sourceTree = ""; }; + D87ACB5ACA8E211976DFDF1A /* Directory.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = Directory.cpp; path = src/core/CLucene/store/Directory.cpp; sourceTree = ""; }; + D8D262E268C2818EA8C39513 /* stem_UTF_8_italian.c */ = {isa = PBXFileReference; includeInIndex = 1; name = stem_UTF_8_italian.c; path = "src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_italian.c"; sourceTree = ""; }; + D93CE9411FA30234DCFC273B /* StdHeader.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = StdHeader.cpp; path = src/core/CLucene/StdHeader.cpp; sourceTree = ""; }; + DA2D5F840DB2036D97DC7E39 /* libstemmer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = libstemmer.h; path = "src/contribs-lib/CLucene/snowball/include/libstemmer.h"; sourceTree = ""; }; + DB698CD825EF1E2BFF3B24A4 /* Pods-BasePods-BRFullTextSearchMacOS-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-BasePods-BRFullTextSearchMacOS-acknowledgements.plist"; sourceTree = ""; }; + DBA415471EF1AE130E180C95 /* stem_UTF_8_finnish.c */ = {isa = PBXFileReference; includeInIndex = 1; name = stem_UTF_8_finnish.c; path = "src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_finnish.c"; sourceTree = ""; }; + DC60B8F8DB6948CF82538BF6 /* LanguageBasedAnalyzer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LanguageBasedAnalyzer.h; path = "src/contribs-lib/CLucene/analysis/LanguageBasedAnalyzer.h"; sourceTree = ""; }; + DC64AFC50165328425654FE2 /* stem_UTF_8_french.c */ = {isa = PBXFileReference; includeInIndex = 1; name = stem_UTF_8_french.c; path = "src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_french.c"; sourceTree = ""; }; + DC98E89A0ED4FB8BA5508ED2 /* stem_UTF_8_danish.c */ = {isa = PBXFileReference; includeInIndex = 1; name = stem_UTF_8_danish.c; path = "src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_danish.c"; sourceTree = ""; }; + DD8B2CA2D3265AF8911E9BAB /* stem_ISO_8859_1_portuguese.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = stem_ISO_8859_1_portuguese.h; path = "src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_portuguese.h"; sourceTree = ""; }; + DED5E1334CF9AA568354E30F /* TermScorer.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = TermScorer.cpp; path = src/core/CLucene/search/TermScorer.cpp; sourceTree = ""; }; + DF24B1B1D4A77EFAB9F71585 /* CachingSpanFilter.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = CachingSpanFilter.cpp; path = src/core/CLucene/search/CachingSpanFilter.cpp; sourceTree = ""; }; + DF5E0DCEA28982A2A0A3973C /* Array.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Array.h; path = src/core/CLucene/util/Array.h; sourceTree = ""; }; + DFACDEA32C33E7B6CBE253CF /* Formatter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Formatter.h; path = "src/contribs-lib/CLucene/highlighter/Formatter.h"; sourceTree = ""; }; + E063671C87DD5BD49E46EA9F /* StandardTokenizer.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = StandardTokenizer.cpp; path = src/core/CLucene/analysis/standard/StandardTokenizer.cpp; sourceTree = ""; }; + E168F5C855FFE88A4486E8CA /* DateFilter.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = DateFilter.cpp; path = src/core/CLucene/search/DateFilter.cpp; sourceTree = ""; }; + E1692F9B56F25005C5F44DCB /* Pods-BasePods-BRFullTextSearch-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-BasePods-BRFullTextSearch-resources.sh"; sourceTree = ""; }; + E218636CDC69F8FCE8435253 /* MergeScheduler.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = MergeScheduler.cpp; path = src/core/CLucene/index/MergeScheduler.cpp; sourceTree = ""; }; + E220EEFD07722DDA6CEA178D /* WildcardQuery.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = WildcardQuery.cpp; path = src/core/CLucene/search/WildcardQuery.cpp; sourceTree = ""; }; + E25DB4BD66003ACCB49451B3 /* QueryParserTokenManager.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = QueryParserTokenManager.cpp; path = src/core/CLucene/queryParser/QueryParserTokenManager.cpp; sourceTree = ""; }; + E279BADCE6B6B837E61A4427 /* libPods-BasePods-BRFullTextSearchTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = "libPods-BasePods-BRFullTextSearchTests.a"; path = "libPods-BasePods-BRFullTextSearchTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + E28A55F200369E49461C7A01 /* FieldCacheImpl.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = FieldCacheImpl.cpp; path = src/core/CLucene/search/FieldCacheImpl.cpp; sourceTree = ""; }; + E290402EE94F042E03B6C0F9 /* stem_ISO_8859_1_finnish.c */ = {isa = PBXFileReference; includeInIndex = 1; name = stem_ISO_8859_1_finnish.c; path = "src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_finnish.c"; sourceTree = ""; }; + E35194B046FA8A38D3C1B301 /* DocumentsWriter.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = DocumentsWriter.cpp; path = src/core/CLucene/index/DocumentsWriter.cpp; sourceTree = ""; }; + E594263C6B82D8697924DD5F /* Formatter.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = Formatter.cpp; path = "src/contribs-lib/CLucene/highlighter/Formatter.cpp"; sourceTree = ""; }; + E614CE0A040C3323578DD203 /* _CompoundFile.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _CompoundFile.h; path = src/core/CLucene/index/_CompoundFile.h; sourceTree = ""; }; + E647B4CE88D910BD909EF7D5 /* QueryFilter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = QueryFilter.h; path = src/core/CLucene/search/QueryFilter.h; sourceTree = ""; }; + E70F94904D7CECD23D3DF37D /* TermQuery.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = TermQuery.h; path = src/core/CLucene/search/TermQuery.h; sourceTree = ""; }; + E87776AC74E5E2FFD18A381B /* SpanNearQuery.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = SpanNearQuery.cpp; path = src/core/CLucene/search/spans/SpanNearQuery.cpp; sourceTree = ""; }; + E8F83A5CFCC4D3B26C4E3CF3 /* _HitQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _HitQueue.h; path = src/core/CLucene/search/_HitQueue.h; sourceTree = ""; }; + E93615AB0B63397AD859F32A /* Reader.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = Reader.cpp; path = src/core/CLucene/util/Reader.cpp; sourceTree = ""; }; + EB5239CF6EF0AD13D813486A /* CachingWrapperFilter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CachingWrapperFilter.h; path = src/core/CLucene/search/CachingWrapperFilter.h; sourceTree = ""; }; + EB6E700B85989270AC20382A /* SnowballAnalyzer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SnowballAnalyzer.h; path = "src/contribs-lib/CLucene/snowball/SnowballAnalyzer.h"; sourceTree = ""; }; + EBCD61BEF0E8DD788FD46F40 /* _MultiSegmentReader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _MultiSegmentReader.h; path = src/core/CLucene/index/_MultiSegmentReader.h; sourceTree = ""; }; + EC82991EF5B45C2238F3EE46 /* _EmptySpans.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _EmptySpans.h; path = src/core/CLucene/search/spans/_EmptySpans.h; sourceTree = ""; }; + ED4C6B04C2F120273C226877 /* stem_UTF_8_danish.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = stem_UTF_8_danish.h; path = "src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_danish.h"; sourceTree = ""; }; + ED5D200BBD68E5DD8F1ECA26 /* IndexReader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IndexReader.h; path = src/core/CLucene/index/IndexReader.h; sourceTree = ""; }; + EE68C43C9CE9BBCED15DBA30 /* MultipleTermPositions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MultipleTermPositions.h; path = src/core/CLucene/index/MultipleTermPositions.h; sourceTree = ""; }; + EE71038CC6DBB4F26B63FD6E /* _MD5Digester.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _MD5Digester.h; path = src/core/CLucene/util/_MD5Digester.h; sourceTree = ""; }; + EEA2C8FA695558871EA174AA /* MMapInput.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = MMapInput.cpp; path = src/core/CLucene/store/MMapInput.cpp; sourceTree = ""; }; + EEC57888D3B4C451F1449713 /* _FieldsWriter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _FieldsWriter.h; path = src/core/CLucene/index/_FieldsWriter.h; sourceTree = ""; }; + EEC930EE946D36F5C93EE592 /* Pods-BasePods-BRFullTextSearch.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-BasePods-BRFullTextSearch.release.xcconfig"; sourceTree = ""; }; + EEDCA5C051084BDD5A5A970B /* RangeFilter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RangeFilter.h; path = src/core/CLucene/search/RangeFilter.h; sourceTree = ""; }; + EEFF108302039F9FDD5B6CE9 /* _DisjunctionSumScorer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _DisjunctionSumScorer.h; path = src/core/CLucene/search/_DisjunctionSumScorer.h; sourceTree = ""; }; + EFB69E0443F3A22116F5363C /* CachingSpanFilter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CachingSpanFilter.h; path = src/core/CLucene/search/CachingSpanFilter.h; sourceTree = ""; }; + F086C33A44537F89BF7AE119 /* QueryScorer.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = QueryScorer.cpp; path = "src/contribs-lib/CLucene/highlighter/QueryScorer.cpp"; sourceTree = ""; }; + F0D1CBA8E8C1F476F5AE9467 /* _bufferedstream.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _bufferedstream.h; path = src/core/CLucene/util/_bufferedstream.h; sourceTree = ""; }; + F1C3CF60424D58A52AF05B1E /* CJKAnalyzer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CJKAnalyzer.h; path = "src/contribs-lib/CLucene/analysis/cjk/CJKAnalyzer.h"; sourceTree = ""; }; + F1EF4AB922B873E0FF40FC36 /* TermInfosReader.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = TermInfosReader.cpp; path = src/core/CLucene/index/TermInfosReader.cpp; sourceTree = ""; }; + F3C06EA481D25C5A7420C040 /* Reader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Reader.h; path = src/core/CLucene/util/Reader.h; sourceTree = ""; }; + F4C7B28B021C2514814F9E7D /* ScorerDocQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ScorerDocQueue.h; path = src/core/CLucene/search/ScorerDocQueue.h; sourceTree = ""; }; + F53B4AC72D5DA32F908E71D0 /* gzipcompressstream.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = gzipcompressstream.h; path = "src/contribs-lib/CLucene/util/gzipcompressstream.h"; sourceTree = ""; }; + F5DC46D60CEC863B51316925 /* error.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = error.cpp; path = src/core/CLucene/debug/error.cpp; sourceTree = ""; }; + F5DEC96F8DBFAF2F8075304C /* TokenGroup.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = TokenGroup.cpp; path = "src/contribs-lib/CLucene/highlighter/TokenGroup.cpp"; sourceTree = ""; }; + F63FF2BFB9642EA9F4CD1EAE /* SpanWeight.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = SpanWeight.cpp; path = src/core/CLucene/search/spans/SpanWeight.cpp; sourceTree = ""; }; + F69E59585132793AB9949898 /* Pods-BasePods-BRFullTextSearch-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-BasePods-BRFullTextSearch-frameworks.sh"; sourceTree = ""; }; + F6C93EA3C96FCD751A1C4817 /* SpanTermQuery.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SpanTermQuery.h; path = src/core/CLucene/search/spans/SpanTermQuery.h; sourceTree = ""; }; + F761DF92DCB308899C093A6B /* Sort.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Sort.h; path = src/core/CLucene/search/Sort.h; sourceTree = ""; }; + F798CB269FBD5E74EB6D9D43 /* MultiSearcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MultiSearcher.h; path = src/core/CLucene/search/MultiSearcher.h; sourceTree = ""; }; + F7A4034C03F76123B7C2826F /* StringIntern.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = StringIntern.cpp; path = src/core/CLucene/util/StringIntern.cpp; sourceTree = ""; }; + F7A7CC1278FE6BF4C200F3D3 /* SpanFirstQuery.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = SpanFirstQuery.cpp; path = src/core/CLucene/search/spans/SpanFirstQuery.cpp; sourceTree = ""; }; + F8D5FE654BCE6411503AC36B /* stem_ISO_8859_1_german.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = stem_ISO_8859_1_german.h; path = "src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_german.h"; sourceTree = ""; }; + F99A638F6183AF3DBD44E920 /* MultiTermQuery.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = MultiTermQuery.cpp; path = src/core/CLucene/search/MultiTermQuery.cpp; sourceTree = ""; }; + F99AC527687D6316E67D8CED /* Term.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = Term.cpp; path = src/core/CLucene/index/Term.cpp; sourceTree = ""; }; + FA502083055EC660DA3ECAD0 /* FieldSelector.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FieldSelector.h; path = src/core/CLucene/document/FieldSelector.h; sourceTree = ""; }; + FA8B537C87459A530F2BBB89 /* Query.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Query.h; path = src/core/CLucene/search/Query.h; sourceTree = ""; }; + FB9A2E81B21A808D0123E909 /* _DocumentsWriter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _DocumentsWriter.h; path = src/core/CLucene/index/_DocumentsWriter.h; sourceTree = ""; }; + FC3F89837B731B223F71435F /* _PhrasePositions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _PhrasePositions.h; path = src/core/CLucene/search/_PhrasePositions.h; sourceTree = ""; }; + FCDF6E3711A81B94187D5EB2 /* _SloppyPhraseScorer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _SloppyPhraseScorer.h; path = src/core/CLucene/search/_SloppyPhraseScorer.h; sourceTree = ""; }; + FCFF6C99F270D75331A591FF /* stem_ISO_8859_1_finnish.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = stem_ISO_8859_1_finnish.h; path = "src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_finnish.h"; sourceTree = ""; }; + FDF46E905461FE8E96D416CA /* TokenGroup.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = TokenGroup.h; path = "src/contribs-lib/CLucene/highlighter/TokenGroup.h"; sourceTree = ""; }; + FEC597FA4342157402BCEC9C /* DocumentsWriterThreadState.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = DocumentsWriterThreadState.cpp; path = src/core/CLucene/index/DocumentsWriterThreadState.cpp; sourceTree = ""; }; + FF47A291D095583938BCCE6F /* stem_ISO_8859_1_italian.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = stem_ISO_8859_1_italian.h; path = "src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_italian.h"; sourceTree = ""; }; + FF7508D2F9070F750E6E7033 /* QueryFilter.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = QueryFilter.cpp; path = src/core/CLucene/search/QueryFilter.cpp; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 0383DDFC6C2912C3E07C60DA /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + CD9D351AB1AB37BA92CA3CD9 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 26B5D1282DDD83D27752D2D2 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + C2CA3E748D0874F45B2BB37F /* Cocoa.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2C89514746B37C9FC26A32FF /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 3088174ABCE5F5C4CEA9E854 /* Cocoa.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 72125FB6904187CC6DCDA0F2 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + FBD6308F391103C9E665B1DD /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + D93AB9DEB26E900807A96334 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + D273A66028C370A7C2890E64 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 16EF3FB1E4D1A40D89E23A6F /* CLucene-Contribs-Lib */ = { + isa = PBXGroup; + children = ( + 44E2EBB7ABCC4B29648C9D85 /* api.c */, + 3D827F7D58BF1FA89FBE77E2 /* api.h */, + 7F39E1E03B9D83FEC19B360F /* arrayinputstream.h */, + 3F2A02C6E7B896E0963ED0BC /* byteinputstream.h */, + C887FA5266066B86DF635C6D /* CJKAnalyzer.cpp */, + F1C3CF60424D58A52AF05B1E /* CJKAnalyzer.h */, + 363DE4971D255F5C461EC4A1 /* Encoder.cpp */, + B1E85BE64E549D2A654576A3 /* Encoder.h */, + E594263C6B82D8697924DD5F /* Formatter.cpp */, + DFACDEA32C33E7B6CBE253CF /* Formatter.h */, + 8A3B0A4220061DBBE14A0EDC /* Fragmenter.cpp */, + 2C263AD4FCE70A40F9D2B365 /* Fragmenter.h */, + 54410BD7D8977AC67D8EA7A4 /* GermanAnalyzer.cpp */, + C7F9AFABC1C734A4A035937B /* GermanAnalyzer.h */, + 5A7CAD795C53CB90DB677BB8 /* GermanStemFilter.cpp */, + B1E07F1888DEDFCA13AC51BE /* GermanStemFilter.h */, + 618E8E5524841BF7F44040A0 /* GermanStemmer.cpp */, + 94B1109EB501086D81FAF74F /* GermanStemmer.h */, + 91D5FD2E8E8D5AADC6AFC18F /* gzipcompressstream.cpp */, + F53B4AC72D5DA32F908E71D0 /* gzipcompressstream.h */, + 2D2E3088B9B9EB2BAF44DCDE /* gzipinputstream.cpp */, + 8C11605A23EF651B64C23DFC /* gzipinputstream.h */, + 242D86ABA0BBD072655BC3A4 /* header.h */, + A3B1A6219EE98FDABFFCA0B7 /* Highlighter.cpp */, + BA4F4C78DE804F2F4C4AF2F6 /* Highlighter.h */, + A4C0A317D0BD30F8A57BB4DB /* HighlightScorer.h */, + 6A0B958A01F1A1C850AF9113 /* LanguageBasedAnalyzer.cpp */, + DC60B8F8DB6948CF82538BF6 /* LanguageBasedAnalyzer.h */, + 42A091A817377B4255C21D27 /* libstemmer.c */, + DA2D5F840DB2036D97DC7E39 /* libstemmer.h */, + 57549DDD865284D9D8F04A04 /* libstemmer.h */, + 8250CD2D402839BE57170FE0 /* modules.h */, + D5A5A0CB48E4FCAB9D1D4C7B /* PorterStemmer.cpp */, + C14BF1ECA6A7286DC68EEAF1 /* PorterStemmer.h */, + F086C33A44537F89BF7AE119 /* QueryScorer.cpp */, + 24C1C0EEF48E5B94B51C6661 /* QueryScorer.h */, + 29532C586B5C9ACE350875C7 /* QueryTermExtractor.cpp */, + 17964AB66E2FF261BCCF392B /* QueryTermExtractor.h */, + 2DA51F90DA79B1071D8B1288 /* Scorer.h */, + 7E83EB9372570C10A6CEB6B6 /* SimpleFragmenter.cpp */, + 13E2105B0E5A40085B063C99 /* SimpleFragmenter.h */, + 7E47EE3B1FA8B01F42A6F2A5 /* SimpleHTMLEncoder.cpp */, + 3F1BF2C4703E4252831B0501 /* SimpleHTMLEncoder.h */, + AE20E1E48FFA3F76CCF1C604 /* SimpleHTMLFormatter.cpp */, + D64323EE913FFD6C2FCE0307 /* SimpleHTMLFormatter.h */, + 4AD541647FF856D30C83A7B3 /* Snowball.cpp */, + EB6E700B85989270AC20382A /* SnowballAnalyzer.h */, + 49EDA20802C7F20DB2009F11 /* SnowballFilter.h */, + A361F6AE71675BCA7694ED1C /* stem_ISO_8859_1_danish.c */, + 148B18AA3BA2A25110EDC1DB /* stem_ISO_8859_1_danish.h */, + 179B255A228E9B9E4FD36995 /* stem_ISO_8859_1_dutch.c */, + D83428FF628EEBCF6838DF5C /* stem_ISO_8859_1_dutch.h */, + 05A08F757DF09A0054795337 /* stem_ISO_8859_1_english.c */, + BF81D9F8FB3657A529720E93 /* stem_ISO_8859_1_english.h */, + E290402EE94F042E03B6C0F9 /* stem_ISO_8859_1_finnish.c */, + FCFF6C99F270D75331A591FF /* stem_ISO_8859_1_finnish.h */, + 73BABBFE77D30CD9A7EF3147 /* stem_ISO_8859_1_french.c */, + 4F55A7FAC0A31D45362DBCD1 /* stem_ISO_8859_1_french.h */, + 89226E0920A85262E5591BF5 /* stem_ISO_8859_1_german.c */, + F8D5FE654BCE6411503AC36B /* stem_ISO_8859_1_german.h */, + 7D99C04C29049C71354E2722 /* stem_ISO_8859_1_italian.c */, + FF47A291D095583938BCCE6F /* stem_ISO_8859_1_italian.h */, + 8A0D8B4C254B952C4EF189CC /* stem_ISO_8859_1_norwegian.c */, + 63281A45C3F3B0CB3A6E7025 /* stem_ISO_8859_1_norwegian.h */, + 43F3948F67562D60FB9E6AF4 /* stem_ISO_8859_1_porter.c */, + 85145B0375A157A82DEC19A2 /* stem_ISO_8859_1_porter.h */, + CD7BB525AEDFEAA2B610804F /* stem_ISO_8859_1_portuguese.c */, + DD8B2CA2D3265AF8911E9BAB /* stem_ISO_8859_1_portuguese.h */, + 79BDC5A2DADD567AA7B91A8B /* stem_ISO_8859_1_spanish.c */, + D21681199F2C28266563161C /* stem_ISO_8859_1_spanish.h */, + 1F5C6F2C1490733B1A017D8C /* stem_ISO_8859_1_swedish.c */, + 766AA2B34AAFCF76B1F3D526 /* stem_ISO_8859_1_swedish.h */, + 584C0ADCC53DEDA1B327E07A /* stem_KOI8_R_russian.c */, + D0AC77605F4B1CBDA47BC5A0 /* stem_KOI8_R_russian.h */, + DC98E89A0ED4FB8BA5508ED2 /* stem_UTF_8_danish.c */, + ED4C6B04C2F120273C226877 /* stem_UTF_8_danish.h */, + 6D9D525816087C7D2523A318 /* stem_UTF_8_dutch.c */, + 782739F6CE5C46C963EC74C1 /* stem_UTF_8_dutch.h */, + C075F32DC3941F30B2189850 /* stem_UTF_8_english.c */, + 7ABEF88AC3ACE18E1ED39699 /* stem_UTF_8_english.h */, + DBA415471EF1AE130E180C95 /* stem_UTF_8_finnish.c */, + 3156191A827F28916EAD039B /* stem_UTF_8_finnish.h */, + DC64AFC50165328425654FE2 /* stem_UTF_8_french.c */, + B23F142DBEB2DBE1CFC39D56 /* stem_UTF_8_french.h */, + C41F9E30FD9198F7297128C4 /* stem_UTF_8_german.c */, + A7FF2DFE608F4496127F1767 /* stem_UTF_8_german.h */, + D8D262E268C2818EA8C39513 /* stem_UTF_8_italian.c */, + 3E5787FA0F95DFCF53963348 /* stem_UTF_8_italian.h */, + AD83C3B75390F54F1CFB7090 /* stem_UTF_8_norwegian.c */, + 0FAE946BEA51836D00F731C9 /* stem_UTF_8_norwegian.h */, + 67C48AE06CDA84D04C7CCA3A /* stem_UTF_8_porter.c */, + 6996EC84817B1EC2677FD772 /* stem_UTF_8_porter.h */, + A8A065338915556B8F986F52 /* stem_UTF_8_portuguese.c */, + C9F431FADD31D5F953F292FA /* stem_UTF_8_portuguese.h */, + AB2A564E26C8A74D8358AC1A /* stem_UTF_8_russian.c */, + 8150375DE47FB4492DE04833 /* stem_UTF_8_russian.h */, + 5AD98019D95FA39573B5A783 /* stem_UTF_8_spanish.c */, + 1CCED5D968A1EA94CE495CA3 /* stem_UTF_8_spanish.h */, + 94BC7B1991D96E91AF1A14C9 /* stem_UTF_8_swedish.c */, + 4C3A327328A0743345D8F800 /* stem_UTF_8_swedish.h */, + 546E7280DBEF27E1EFB1947C /* streamarray.h */, + 5D57A3028FBCC4A47A78535F /* TextFragment.cpp */, + 818A9068B3FD13D69636F427 /* TextFragment.h */, + F5DEC96F8DBFAF2F8075304C /* TokenGroup.cpp */, + FDF46E905461FE8E96D416CA /* TokenGroup.h */, + 25F1308411FC4B1B441A7E70 /* TokenSources.cpp */, + CE7D186707CB6315363BA5BF /* TokenSources.h */, + 08A3884580B9C317D269FDDD /* utilities.c */, + 0838EB93707F329DF8B3C410 /* WeightedTerm.cpp */, + ACC13AD187B30C8FE98BDEF4 /* WeightedTerm.h */, + ); + name = "CLucene-Contribs-Lib"; + sourceTree = ""; + }; + 1B4AE327695A38BC120DFED5 /* Products */ = { + isa = PBXGroup; + children = ( + AB98165ADE90ADADFEF8C05B /* libBRCLucene-iOS.a */, + 5727D0A80F77B33D73278FEA /* libBRCLucene-OSX.a */, + A2BA2637A9C24B098EC6345B /* libPods-BasePods-BRFullTextSearch.a */, + 0B1AF9A436F8023B6FE019ED /* libPods-BasePods-BRFullTextSearchMacOS.a */, + E279BADCE6B6B837E61A4427 /* libPods-BasePods-BRFullTextSearchTests.a */, + ); + name = Products; + sourceTree = ""; + }; + 2CFD81CCAF18CA62031729E5 /* Support Files */ = { + isa = PBXGroup; + children = ( + 3C072AC85BCC6C0C8F1D35B5 /* BRCLucene-iOS.xcconfig */, + C560E89140891536E480371B /* BRCLucene-iOS-dummy.m */, + B1A483489A404CDEAFD6271C /* BRCLucene-iOS-prefix.pch */, + 62A0C45CC0014353E3FD136C /* BRCLucene-OSX.xcconfig */, + 727632919006A5F9C125FF85 /* BRCLucene-OSX-dummy.m */, + 6FDB4B7F2922844D1D26D43E /* BRCLucene-OSX-prefix.pch */, + ); + name = "Support Files"; + path = "../Target Support Files/BRCLucene-OSX"; + sourceTree = ""; + }; + 3B798D5EDAB3771A1C69BBE5 = { + isa = PBXGroup; + children = ( + 25D821FC2F980CA08B56EE95 /* Podfile */, + 9971DF77534CC4BAC1C08FA2 /* Frameworks */, + A4030E970D687369BA4975B1 /* Pods */, + 1B4AE327695A38BC120DFED5 /* Products */, + 5B5CD06A3A91B671F898EEDF /* Targets Support Files */, + ); + sourceTree = ""; + }; + 46AE0A7BBF45153D7F285036 /* iOS */ = { + isa = PBXGroup; + children = ( + 479C19A019A38B5EFA99E17C /* Foundation.framework */, + ); + name = iOS; + sourceTree = ""; + }; + 5B5CD06A3A91B671F898EEDF /* Targets Support Files */ = { + isa = PBXGroup; + children = ( + C490AF1BE553F645908AED78 /* Pods-BasePods-BRFullTextSearch */, + F0FD48F89A744BE8ECD09979 /* Pods-BasePods-BRFullTextSearchMacOS */, + FD0BA733DBBCEBAF164FA27B /* Pods-BasePods-BRFullTextSearchTests */, + ); + name = "Targets Support Files"; + sourceTree = ""; + }; + 6928B6F821D27032A7B5409E /* CLucene-Config */ = { + isa = PBXGroup; + children = ( + BF5538278743742520868FC0 /* _clucene-config.h */, + A02E865272F7A096250DAF8E /* clucene-config.h */, + ); + name = "CLucene-Config"; + sourceTree = ""; + }; + 73531DDFE73955FA397C712F /* BRCLucene */ = { + isa = PBXGroup; + children = ( + 6928B6F821D27032A7B5409E /* CLucene-Config */, + 16EF3FB1E4D1A40D89E23A6F /* CLucene-Contribs-Lib */, + E53FD2C976D13D20419A354D /* CLucene-Core */, + 8FC4AFCE60ED2649616C6F3A /* CLucene-Core-API */, + C472B934F42A817190584006 /* CLucene-Shared */, + 2CFD81CCAF18CA62031729E5 /* Support Files */, + ); + name = BRCLucene; + path = BRCLucene; + sourceTree = ""; + }; + 8FC4AFCE60ED2649616C6F3A /* CLucene-Core-API */ = { + isa = PBXGroup; + children = ( + 080038A2810DF1B7AF5430B8 /* _ApiHeader.h */, + 0D1A9CB59C0AD5B26B898ABA /* _Arrays.h */, + 2615983316A44758FFEC2490 /* _BooleanScorer.h */, + 5933935B34B1DF1B909A82E1 /* _BooleanScorer2.h */, + F0D1CBA8E8C1F476F5AE9467 /* _bufferedstream.h */, + 26262E4D44B664DF1E9B7F75 /* _CharStream.h */, + E614CE0A040C3323578DD203 /* _CompoundFile.h */, + C05BA5FC49FD02E0C15821C7 /* _ConjunctionScorer.h */, + EEFF108302039F9FDD5B6CE9 /* _DisjunctionSumScorer.h */, + FB9A2E81B21A808D0123E909 /* _DocumentsWriter.h */, + EC82991EF5B45C2238F3EE46 /* _EmptySpans.h */, + 2821A9CBA3B5C489E85A51E5 /* _ExactPhraseScorer.h */, + CD34A0EC6C214EE624A7C782 /* _FastCharStream.h */, + 3C820EC029EE9C8D84F1B918 /* _FastCharStream.h */, + 627AE9BA1D456E672F0978D9 /* _FieldCacheImpl.h */, + 91DE2F0AC9C47E9329B7397F /* _FieldDocSortedHitQueue.h */, + B6FEB8A07263C5EBA87C1D11 /* _FieldInfo.h */, + 97DCFFA75EFBC35B9EE08783 /* _FieldInfos.h */, + 81E56C8BEF8D1690265A69EF /* _FieldsReader.h */, + EEC57888D3B4C451F1449713 /* _FieldsWriter.h */, + E8F83A5CFCC4D3B26C4E3CF3 /* _HitQueue.h */, + 48C5D40EA8A54D51028D6241 /* _IndexFileDeleter.h */, + 73F5EEEA5D31D545EC728CD4 /* _IndexFileNameFilter.h */, + B4A68DF41CAD862B699025AE /* _IndexFileNames.h */, + 3F7A8C6A99F8F23C3A7DF1F6 /* _Lock.h */, + EE71038CC6DBB4F26B63FD6E /* _MD5Digester.h */, + BF3FA77DBA865A7EA0F87D43 /* _MMapIndexInput.h */, + EBCD61BEF0E8DD788FD46F40 /* _MultiSegmentReader.h */, + D0680B69A04A33D50CEC65F1 /* _NearSpansOrdered.h */, + 6698C8F6B9D04C25F88EEF9F /* _NearSpansUnordered.h */, + FC3F89837B731B223F71435F /* _PhrasePositions.h */, + A277BD760515F233445AA8DC /* _PhraseQueue.h */, + 8A94213291EAAE06BBB8E0BD /* _PhraseScorer.h */, + 3E23224E5681D39877908E16 /* _RAMDirectory.h */, + 8CAB5B5EDF27414162D95761 /* _SegmentHeader.h */, + 5DCA51C5675E327CCA6B303D /* _SegmentInfos.h */, + 05826F4281A90CE9ACDBE2DF /* _SegmentMergeInfo.h */, + 89B4FA065EEC6C655788DC63 /* _SegmentMergeQueue.h */, + 075E7B74158EB07D3573CDCE /* _SegmentMerger.h */, + 292F2872B768EED5AF2EED7C /* _SegmentTermEnum.h */, + 929BA395AF172F9582E56EC8 /* _SkipListReader.h */, + A8B2143D61244E46BC66ADA9 /* _SkipListWriter.h */, + FCDF6E3711A81B94187D5EB2 /* _SloppyPhraseScorer.h */, + 9EF8DB5A95B45741D9635539 /* _streambase.h */, + 547B57C4BCEA74606B2C7155 /* _streambuffer.h */, + 3E67D77C29B1265C3305C5A4 /* _StringIntern.h */, + D58B32B62F500FF008ECA9AE /* _Term.h */, + 7288F6FB8BEED013C9FE3051 /* _TermInfo.h */, + 4DAA73037B6B6F5E88B462B8 /* _TermInfosReader.h */, + 2C22BB7A902145397DDA3542 /* _TermInfosWriter.h */, + 6E1A98BC88E6F6AE8C44393A /* _TermScorer.h */, + C951D813358FB229881B81E9 /* _TermSpans.h */, + 8565CF0D75DC28F681E3E039 /* _TermVector.h */, + 6D8E9C46D7C29EE73FBBC824 /* _ThreadLocal.h */, + A95D85165E09C2D9E8B193DF /* _VoidList.h */, + 29C228F1AC57C1F0958DF81D /* _VoidMap.h */, + A43880175020462A96391077 /* AnalysisHeader.h */, + 880E2676F9904DB7B53CEC79 /* Analyzers.h */, + DF5E0DCEA28982A2A0A3973C /* Array.h */, + 28982B02FDD90738646B409F /* BitSet.h */, + 41CBAC46264848FB3C9E091E /* BooleanClause.h */, + 967217E67E512175B6731208 /* BooleanQuery.h */, + EFB69E0443F3A22116F5363C /* CachingSpanFilter.h */, + 646D984DA01519CE1CE0F18E /* CachingTokenFilter.h */, + EB5239CF6EF0AD13D813486A /* CachingWrapperFilter.h */, + 27661B81017336047D801E85 /* ChainedFilter.h */, + 99B579C4BF8A3BE3878628BA /* CLConfig.h */, + 9B7C64F2F23938B239313B56 /* CLStreams.h */, + 0969387C0A1DC3002ADCB9FA /* CLucene.h */, + 14F6B97A6357B73EC360FDD2 /* Compare.h */, + 06BDB38963A90CFB6B9A17FE /* ConstantScoreQuery.h */, + 0435F1F15171D12EC7EA51E5 /* DateField.h */, + 24BFC6BC4EE381C63F672010 /* DateFilter.h */, + D058C1BD8E32F4161EA1ACCD /* DateTools.h */, + 1554EFC1DA92717F9D83B7EC /* Directory.h */, + CF9E0327487590018A827FA1 /* DirectoryIndexReader.h */, + 416A1790EE52ECA04818E23A /* Document.h */, + A4C9F126F3FEA27B4A31A96A /* Equators.h */, + 418DB995E02950B58BA21FD1 /* error.h */, + 72F5AFF8E9BD9EABE2B64223 /* Explanation.h */, + 1E6C66429E77E9D0CF89CC2A /* Field.h */, + 7F22C7CB57C09C24383D7107 /* FieldCache.h */, + A042B88B39AC31C1407BEA94 /* FieldDoc.h */, + FA502083055EC660DA3ECAD0 /* FieldSelector.h */, + 2019F730B605453ACA44B804 /* FieldSortedHitQueue.h */, + ACB710A42B9F368BC95D775D /* Filter.h */, + 55F6970EA8C4AADA5A214168 /* FilteredTermEnum.h */, + 2CBED8DF2F1E9E7467DE3537 /* FSDirectory.h */, + 08565E16DB82DF2ED956B64A /* FuzzyQuery.h */, + 9EDFE19FF4B4CF03C431B501 /* Hits.h */, + 39FF9F55D084054CD22FDB4C /* IndexDeletionPolicy.h */, + 86E15A9EB69363D10D913642 /* IndexInput.h */, + 128A0FA14C4275A64361ABD8 /* IndexModifier.h */, + A74EE63073B59E49EED0CC73 /* IndexOutput.h */, + ED5D200BBD68E5DD8F1ECA26 /* IndexReader.h */, + 7929F4FC21D5DB72EF954399 /* IndexSearcher.h */, + 161A0C13CA693AF3721D042A /* IndexWriter.h */, + 2F0D1D02B142098F0EDD555C /* Lock.h */, + 1A8462EC58F207BCC7472090 /* LockFactory.h */, + 091B1611175D2D4F7C2D282B /* lucenebase.h */, + 34AB0B068653D8F99851D1A7 /* MatchAllDocsQuery.h */, + 87FE3634F7F1E05CA7D522D6 /* mem.h */, + ABECEBECAD1EBEE9656B1511 /* MergePolicy.h */, + 3721FC63F5E3DE1E25972B0B /* MergeScheduler.h */, + 0BBDF23FE12A2BF32407A389 /* MultiFieldQueryParser.h */, + 3535995D4A28B8869157F67F /* MultiPhraseQuery.h */, + EE68C43C9CE9BBCED15DBA30 /* MultipleTermPositions.h */, + 8677A29928A78E301D0F517B /* MultiReader.h */, + F798CB269FBD5E74EB6D9D43 /* MultiSearcher.h */, + 731DA62C2861ED07FA667D29 /* MultiTermQuery.h */, + 2923454DC0414315374C5EED /* NumberTools.h */, + A02EE6B24F45CA042375C4C9 /* Payload.h */, + 2CDFF10CDB7CBA238F57E2F7 /* PhraseQuery.h */, + 632616E10F6905871654E773 /* PrefixQuery.h */, + 44799C0DE82687B1856E7B90 /* PriorityQueue.h */, + FA8B537C87459A530F2BBB89 /* Query.h */, + E647B4CE88D910BD909EF7D5 /* QueryFilter.h */, + 062F745174D862AD163D74AE /* QueryParser.h */, + 898A500B20CCDFDC0AF6D2E0 /* QueryParserConstants.h */, + 381F1366DEAFEA368FEC0FC2 /* QueryParserTokenManager.h */, + 6A7C9ABB8BA4CB7B38610EF7 /* QueryToken.h */, + 8177BE194773021F64AC9B22 /* RAMDirectory.h */, + EEDCA5C051084BDD5A5A970B /* RangeFilter.h */, + C70B81556630B837C83A9BC8 /* RangeQuery.h */, + F3C06EA481D25C5A7420C040 /* Reader.h */, + CD101E72857254DE70CA0442 /* Scorer.h */, + F4C7B28B021C2514814F9E7D /* ScorerDocQueue.h */, + 8C87FA1353739983EF4BD445 /* Searchable.h */, + 01C5084C0EB7A50F30E153E3 /* SearchHeader.h */, + 1ADD7FCC4105391234393B2C /* Similarity.h */, + F761DF92DCB308899C093A6B /* Sort.h */, + 872C96F28C7FE3EBA881336C /* SpanFilter.h */, + 7EE719468C11B64E40622BF0 /* SpanFilterResult.h */, + A8B7BC78D6C3F7870EC85FAB /* SpanFirstQuery.h */, + 7950725A0B3603036B7B80AF /* SpanNearQuery.h */, + 08D3EC8C3906A87D0C7BD3C4 /* SpanNotQuery.h */, + 0E5828676B5A86E4523513B4 /* SpanOrQuery.h */, + 55DD481AB7F720CD4FAA543B /* SpanQuery.h */, + 07426F4294F1E8AF0ED1DFA8 /* SpanQueryFilter.h */, + 8FE62E2C9BE065ED04B141A2 /* Spans.h */, + 84EA720160389AE05DA86401 /* SpanScorer.h */, + F6C93EA3C96FCD751A1C4817 /* SpanTermQuery.h */, + BF119CB72BC2FA5795FEDB1E /* SpanWeight.h */, + A9627C18AE73CE1C935A697D /* StandardAnalyzer.h */, + 3A47E596A3AC81B1FF249DB1 /* StandardFilter.h */, + 350C146EFD9C0884BD724FD5 /* StandardTokenizer.h */, + BA1B9D3E319A89A133A99F9C /* StandardTokenizerConstants.h */, + 53125008FB1F47E205B61CC4 /* StdHeader.h */, + 37D8B4E914F79328F26AE2C5 /* Term.h */, + E70F94904D7CECD23D3DF37D /* TermQuery.h */, + B5EB47B2B6F3F36AEA8B0568 /* Terms.h */, + 8E43193F2F0A7BEC76507B3D /* TermVector.h */, + 0ED2707ADF8A710AB8C04354 /* VoidList.h */, + 9493084135638233C4304DE0 /* VoidMap.h */, + 0DB8965C3EF1A51DC6374257 /* WildcardQuery.h */, + 24ACCD09C4CCCC8102BD0651 /* WildcardTermEnum.h */, + ); + name = "CLucene-Core-API"; + sourceTree = ""; + }; + 9971DF77534CC4BAC1C08FA2 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 46AE0A7BBF45153D7F285036 /* iOS */, + CE4EF8E72EB5D57DEB64E471 /* OS X */, + ); + name = Frameworks; + sourceTree = ""; + }; + A4030E970D687369BA4975B1 /* Pods */ = { + isa = PBXGroup; + children = ( + 73531DDFE73955FA397C712F /* BRCLucene */, + ); + name = Pods; + sourceTree = ""; + }; + C472B934F42A817190584006 /* CLucene-Shared */ = { + isa = PBXGroup; + children = ( + B3C9301311C64378638AB1BA /* _condition.h */, + 23E597168FBD2407E903A258 /* _dirent.h */, + 3C560253277C5924B77F32B6 /* _gunichartables.h */, + 650A560B46237D58801A90A3 /* _SharedHeader.h */, + D3495D678ADEB38CDF6C3BF5 /* _threads.h */, + 6D40C9B7228F5E891C332B15 /* condition.cpp */, + 49B2499F9D502737FAE54719 /* dirent.cpp */, + 909FB425551C99481AA9162B /* gunichartables.cpp */, + B73CCF67C806F8DC83DD935F /* LuceneThreads.h */, + B7A08A712776F849131C3724 /* Misc.cpp */, + 85A1065260F668F703369982 /* Misc.h */, + 602EC519A3E66D140B2859EC /* repl_lltot.cpp */, + 0531221156E4ACCD80378784 /* repl_tchar.h */, + 45D60C3013E274720409E6A6 /* repl_tcscasecmp.cpp */, + 5AB8128CFF9B3DE50E6E93C5 /* repl_tcslwr.cpp */, + C7E5113841A81E955FAC79B7 /* repl_tcstod.cpp */, + 0A975AA85AD3A0FF93E402E4 /* repl_tcstoll.cpp */, + 86C3166A689142932B326EE8 /* repl_tprintf.cpp */, + 63E00C178A9FF52F0285E37D /* repl_wchar.h */, + 7C89E2A10F35E0711CA0B857 /* repl_wctype.h */, + 0DCDD4CCA56765CF5A37A011 /* SharedHeader.cpp */, + 51970B97C036DDAF996030F6 /* SharedHeader.h */, + 09E6C8ECD2BB1F9E684E8165 /* StringBuffer.cpp */, + 9689F9F14A10EFB29C4C2765 /* StringBuffer.h */, + CE83932C566294FA69BE30D0 /* threads.cpp */, + B6066E59EBFD4D71863B360E /* utf8.cpp */, + ); + name = "CLucene-Shared"; + sourceTree = ""; + }; + C490AF1BE553F645908AED78 /* Pods-BasePods-BRFullTextSearch */ = { + isa = PBXGroup; + children = ( + AD4324FEBE87298569D61E16 /* Pods-BasePods-BRFullTextSearch-acknowledgements.markdown */, + 0B00EDD282D48542E9F83C77 /* Pods-BasePods-BRFullTextSearch-acknowledgements.plist */, + 9244E614D6DABBEC580121AD /* Pods-BasePods-BRFullTextSearch-dummy.m */, + F69E59585132793AB9949898 /* Pods-BasePods-BRFullTextSearch-frameworks.sh */, + E1692F9B56F25005C5F44DCB /* Pods-BasePods-BRFullTextSearch-resources.sh */, + 795B33C5E107310E1F2D37BE /* Pods-BasePods-BRFullTextSearch.debug.xcconfig */, + EEC930EE946D36F5C93EE592 /* Pods-BasePods-BRFullTextSearch.release.xcconfig */, + ); + name = "Pods-BasePods-BRFullTextSearch"; + path = "Target Support Files/Pods-BasePods-BRFullTextSearch"; + sourceTree = ""; + }; + CE4EF8E72EB5D57DEB64E471 /* OS X */ = { + isa = PBXGroup; + children = ( + 872D2A9F1471134AB2EBA436 /* Cocoa.framework */, + ); + name = "OS X"; + sourceTree = ""; + }; + E53FD2C976D13D20419A354D /* CLucene-Core */ = { + isa = PBXGroup; + children = ( + 71761D115AC3B36A9C7F0855 /* AnalysisHeader.cpp */, + 850AE498F808E9DFFF14C329 /* Analyzers.cpp */, + 380534FAD021EAE958AD0732 /* BitSet.cpp */, + 3B19C2031B14D9646AFE28EC /* BooleanQuery.cpp */, + 5244FE031290E63408326EE1 /* BooleanScorer.cpp */, + 50965D84FBD88CF6E549299B /* BooleanScorer2.cpp */, + DF24B1B1D4A77EFAB9F71585 /* CachingSpanFilter.cpp */, + 3D035FF38F964DAAB7BECDB7 /* CachingTokenFilter.cpp */, + 944D8B83FADF6F0C5ED5A0D2 /* CachingWrapperFilter.cpp */, + 449486BD85A6632E73FEA6A9 /* ChainedFilter.cpp */, + 0FC5F064A580142587634973 /* Compare.cpp */, + BE1CAEC04FF3A035BD7A9FE2 /* CompoundFile.cpp */, + 8B3E4408F3CE3908861990DC /* ConjunctionScorer.cpp */, + CFF49D6518AC608DE37C5E13 /* ConstantScoreQuery.cpp */, + D545707185C7C927AE1B38B5 /* DateField.cpp */, + E168F5C855FFE88A4486E8CA /* DateFilter.cpp */, + 696BD38B0EAA77AAF9E060CE /* DateTools.cpp */, + D87ACB5ACA8E211976DFDF1A /* Directory.cpp */, + 444FBAA447CE99673FBB730B /* DirectoryIndexReader.cpp */, + 561A23B57EBC4AB3104B2135 /* DisjunctionSumScorer.cpp */, + 682B2446D9218CC38D48CDEB /* Document.cpp */, + E35194B046FA8A38D3C1B301 /* DocumentsWriter.cpp */, + FEC597FA4342157402BCEC9C /* DocumentsWriterThreadState.cpp */, + 8386CE4235C56DBAE73C949B /* Equators.cpp */, + F5DC46D60CEC863B51316925 /* error.cpp */, + CEDE1E95F6AEB482DEC50837 /* ExactPhraseScorer.cpp */, + 8131981DF7D13C79FD86CF00 /* Explanation.cpp */, + 498C52B7D9522BE5D6A1F341 /* FastCharStream.cpp */, + 24B454F42CA28C2F37E07D53 /* FastCharStream.cpp */, + 2C60F04635F3FEDFBF49CA60 /* Field.cpp */, + C37C55BC741E3C8863C43937 /* FieldCache.cpp */, + E28A55F200369E49461C7A01 /* FieldCacheImpl.cpp */, + 47FBF81F0D8B8F4FD9F8E133 /* FieldDocSortedHitQueue.cpp */, + C31D97E55D7845929D793A5F /* FieldInfos.cpp */, + C8DF2B8D9E760A058241AEB5 /* FieldSelector.cpp */, + C2D85327D24A734C3D8AD3D2 /* FieldSortedHitQueue.cpp */, + 572456C6E2E13D0F9BB87A93 /* FieldsReader.cpp */, + 1D935829581CC8F7928E1616 /* FieldsWriter.cpp */, + 7941776DE9A915442BCCF7B7 /* FilteredTermEnum.cpp */, + 20AB6CAC2EAA6F7C1D421424 /* FSDirectory.cpp */, + 9058F7809EA379D35E92D268 /* FuzzyQuery.cpp */, + 22953DF075C61EA5AC13EEE6 /* HitQueue.cpp */, + 770990EEBAD703DFEB329D81 /* Hits.cpp */, + 3F4FC420F98D71F60728DC78 /* IndexDeletionPolicy.cpp */, + 17598ACC84E85A239272C398 /* IndexFileDeleter.cpp */, + 42323A6CEBEFD53A6D924181 /* IndexFileNameFilter.cpp */, + 498AAB6DA0DE3AF69709EB59 /* IndexFileNames.cpp */, + 2F200C192FF0E7225FF60750 /* IndexInput.cpp */, + BB2A600EEA35EE2AD4F7E6B5 /* IndexModifier.cpp */, + AB3039F361815D24182FBDA4 /* IndexOutput.cpp */, + 2C3C39AC1AF22628C8972F33 /* IndexReader.cpp */, + 579D02079930C4A85DFF0E30 /* IndexSearcher.cpp */, + A84DDC3C18DB7F42298C59BD /* IndexWriter.cpp */, + 3489740AA4F7A8C9B2E52B61 /* Lock.cpp */, + C65BB8C950BD3D088902E271 /* LockFactory.cpp */, + A2DEC5A03C4993CCC35B4135 /* MatchAllDocsQuery.cpp */, + 598BCDE0CB72EB179F420AEF /* MD5Digester.cpp */, + 989DDAFD77677DE9770763D4 /* MergePolicy.cpp */, + E218636CDC69F8FCE8435253 /* MergeScheduler.cpp */, + EEA2C8FA695558871EA174AA /* MMapInput.cpp */, + C25B9D58C74C755DCA8A7321 /* MultiFieldQueryParser.cpp */, + 68087F57847D61D65F78E340 /* MultiPhraseQuery.cpp */, + 97A841B81A9045DD77B2D129 /* MultipleTermPositions.cpp */, + AC8751090E6E3C49B858C374 /* MultiReader.cpp */, + C4597FC38C46E0D8C60AB1DC /* MultiSearcher.cpp */, + 8FB7EAD910904FBC1E803A92 /* MultiSegmentReader.cpp */, + F99A638F6183AF3DBD44E920 /* MultiTermQuery.cpp */, + 5DF72D32A04B571A69F9019F /* NearSpansOrdered.cpp */, + 6A59577679CC4CEC9F8CC8EB /* NearSpansUnordered.cpp */, + 7E4B24911973F60CE6076892 /* NumberTools.cpp */, + 1C069324AE3E4A26964298FF /* Payload.cpp */, + 022B190EC27B593695204DAB /* PhrasePositions.cpp */, + 0619CA2714CEFA60FDBBD26D /* PhraseQuery.cpp */, + CE0CD854DDBCAEEEB189BA79 /* PhraseScorer.cpp */, + D1E2D2D2D2C0422EEDE7419F /* PrefixQuery.cpp */, + FF7508D2F9070F750E6E7033 /* QueryFilter.cpp */, + 37C53A756CCC6A64E96334FD /* QueryParser.cpp */, + E25DB4BD66003ACCB49451B3 /* QueryParserTokenManager.cpp */, + 3BFD48A29FB623B946670107 /* QueryToken.cpp */, + 90905C590BE1580DC15B5D72 /* RAMDirectory.cpp */, + 244C93D14B664DB2EF5E6615 /* RangeFilter.cpp */, + 70C22977A6B70616EE12ED42 /* RangeQuery.cpp */, + E93615AB0B63397AD859F32A /* Reader.cpp */, + 9631DE8DF29AEF40018C176C /* Scorer.cpp */, + 7269750624A74B0D02FE2A9C /* ScorerDocQueue.cpp */, + A8E51998B27E27442F92A0D4 /* SearchHeader.cpp */, + 50649A638AD306D1396C9CFA /* SegmentInfos.cpp */, + 942ED4342AC269C65C0E81CD /* SegmentMergeInfo.cpp */, + 2C864D82EFB49DEB16946EB6 /* SegmentMergeQueue.cpp */, + 4004532F0166A1386D036590 /* SegmentMerger.cpp */, + B747B0D193B44B5389361ABC /* SegmentReader.cpp */, + 86A917E90ABB2C84EFE23BB1 /* SegmentTermDocs.cpp */, + BC45EF9298BBF1CBF5DAEFAE /* SegmentTermEnum.cpp */, + 0A39B973A80204F79C3D147F /* SegmentTermPositions.cpp */, + 192483D95C2815AA17FF4223 /* SegmentTermVector.cpp */, + 2FE89EA1708D0B4D0BC64389 /* Similarity.cpp */, + A7A6D6F6E8DC27E164765E58 /* SkipListReader.cpp */, + C833C400B1D27CBCA5C28C03 /* SkipListWriter.cpp */, + 72F575D6C9139A25D5E03773 /* SloppyPhraseScorer.cpp */, + A3EA9DC1BB124B3059D0E1D3 /* Sort.cpp */, + F7A7CC1278FE6BF4C200F3D3 /* SpanFirstQuery.cpp */, + E87776AC74E5E2FFD18A381B /* SpanNearQuery.cpp */, + 5DD38BAB6D1319E5E0598C37 /* SpanNotQuery.cpp */, + B1BE2ECBE886050BAF96719F /* SpanOrQuery.cpp */, + 53614503EC77360F0045FC2D /* SpanQueryFilter.cpp */, + 198D32677B449C31264CC924 /* SpanScorer.cpp */, + D3AC7D296DFA696042D4418A /* SpanTermQuery.cpp */, + F63FF2BFB9642EA9F4CD1EAE /* SpanWeight.cpp */, + B520E0B2845F0C0274582E69 /* StandardAnalyzer.cpp */, + B4217FE2826681C9571EAD92 /* StandardFilter.cpp */, + E063671C87DD5BD49E46EA9F /* StandardTokenizer.cpp */, + D93CE9411FA30234DCFC273B /* StdHeader.cpp */, + F7A4034C03F76123B7C2826F /* StringIntern.cpp */, + F99AC527687D6316E67D8CED /* Term.cpp */, + 9853ABDC632E9F9F0AF7B1E2 /* TermInfo.cpp */, + F1EF4AB922B873E0FF40FC36 /* TermInfosReader.cpp */, + 55D29F50902214B0652807B4 /* TermInfosWriter.cpp */, + 0CDFD53D0FA9728CB24B68E9 /* TermQuery.cpp */, + D5B6CC86362332A6F2839964 /* Terms.cpp */, + DED5E1334CF9AA568354E30F /* TermScorer.cpp */, + C689EF134FEFB13911FC5165 /* TermSpans.cpp */, + CAAB067E1FD52B99F7DD6B24 /* TermVectorReader.cpp */, + CAAB903DFEEC9662774A2799 /* TermVectorWriter.cpp */, + 6284B6CE304456F7AC277046 /* ThreadLocal.cpp */, + E220EEFD07722DDA6CEA178D /* WildcardQuery.cpp */, + 59472088F0CB14C50E3B8250 /* WildcardTermEnum.cpp */, + ); + name = "CLucene-Core"; + sourceTree = ""; + }; + F0FD48F89A744BE8ECD09979 /* Pods-BasePods-BRFullTextSearchMacOS */ = { + isa = PBXGroup; + children = ( + 95862E334098E3EB9F92ADD3 /* Pods-BasePods-BRFullTextSearchMacOS-acknowledgements.markdown */, + DB698CD825EF1E2BFF3B24A4 /* Pods-BasePods-BRFullTextSearchMacOS-acknowledgements.plist */, + AE274E7ED56AD5F29CABEA7C /* Pods-BasePods-BRFullTextSearchMacOS-dummy.m */, + BC3A854954D51BEC440F8C4C /* Pods-BasePods-BRFullTextSearchMacOS-resources.sh */, + 488E09F443E2F81ED283F1FD /* Pods-BasePods-BRFullTextSearchMacOS.debug.xcconfig */, + 9F7536781E3934942BB35CCD /* Pods-BasePods-BRFullTextSearchMacOS.release.xcconfig */, + ); + name = "Pods-BasePods-BRFullTextSearchMacOS"; + path = "Target Support Files/Pods-BasePods-BRFullTextSearchMacOS"; + sourceTree = ""; + }; + FD0BA733DBBCEBAF164FA27B /* Pods-BasePods-BRFullTextSearchTests */ = { + isa = PBXGroup; + children = ( + 777EA46A351F2E4477E560AA /* Pods-BasePods-BRFullTextSearchTests-acknowledgements.markdown */, + 691E7585FCFA1F07170E7156 /* Pods-BasePods-BRFullTextSearchTests-acknowledgements.plist */, + 3C6A7D93E7265CB888079AB3 /* Pods-BasePods-BRFullTextSearchTests-dummy.m */, + 29F79C08F44AB3096416CA2E /* Pods-BasePods-BRFullTextSearchTests-frameworks.sh */, + 8CC3A6FE3ACE1E3529AE3FE4 /* Pods-BasePods-BRFullTextSearchTests-resources.sh */, + 2DFE76AF194234A2CE68B28D /* Pods-BasePods-BRFullTextSearchTests.debug.xcconfig */, + 0C942B208D7CDE8D1F9A7E5F /* Pods-BasePods-BRFullTextSearchTests.release.xcconfig */, + ); + name = "Pods-BasePods-BRFullTextSearchTests"; + path = "Target Support Files/Pods-BasePods-BRFullTextSearchTests"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + 41D9FC0957D3793696CC323F /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + C6F076414A2D5346C3711AD2 /* _ApiHeader.h in Headers */, + 43664F0B050323B5BA77ED7B /* _Arrays.h in Headers */, + 8DF5E43C522E2CA45427D7B3 /* _BooleanScorer.h in Headers */, + 4AD8BF9DEED68DB0363454E2 /* _BooleanScorer2.h in Headers */, + FF2BD2BD7A2E12D767FCB94C /* _bufferedstream.h in Headers */, + 7E3BD3531D3945AEC9D23BF7 /* _CharStream.h in Headers */, + 1C238242D9AF69F2852C03BE /* _clucene-config.h in Headers */, + FA72952D792C1F5994C2FB9A /* _CompoundFile.h in Headers */, + 5D2CAC25956A895CBDA41AD5 /* _condition.h in Headers */, + 51334B7D20EC4D3CDF0D42FE /* _ConjunctionScorer.h in Headers */, + B523E383F57DE24E2E248509 /* _dirent.h in Headers */, + 3736B242C087B9B96DEB2F93 /* _DisjunctionSumScorer.h in Headers */, + E19D6F65CB7E237CB1E256F3 /* _DocumentsWriter.h in Headers */, + 4E402F9B550D16C700A9E3D4 /* _EmptySpans.h in Headers */, + 951DFD48963F5AF07A6C84F8 /* _ExactPhraseScorer.h in Headers */, + 65CB905F370D725A584B15C8 /* _FastCharStream.h in Headers */, + CDEA8376E752DDBC6FF06B8C /* _FastCharStream.h in Headers */, + B52C1844337182FFD1E988A3 /* _FieldCacheImpl.h in Headers */, + 592B6A2F8A42B5E3BA18DEFB /* _FieldDocSortedHitQueue.h in Headers */, + E3E666914A7439435874CCF2 /* _FieldInfo.h in Headers */, + C8C9BF8DD705D1C4ADDA6EC6 /* _FieldInfos.h in Headers */, + 06FA04F1860A59159134D81E /* _FieldsReader.h in Headers */, + 6995C0352162274B0942E778 /* _FieldsWriter.h in Headers */, + CEE474710D776CA8F24D72D0 /* _gunichartables.h in Headers */, + 05506F7827F81FE734FAF48F /* _HitQueue.h in Headers */, + 81CB25F595B4DDB7FC638DE2 /* _IndexFileDeleter.h in Headers */, + 8FF937411034CC8FD60955F5 /* _IndexFileNameFilter.h in Headers */, + D3B15405B868CDE5AE5DB5C7 /* _IndexFileNames.h in Headers */, + D744B7E701CEE2BFBC5D7207 /* _Lock.h in Headers */, + EBDE93A6AA4110D5A3C9ACCB /* _MD5Digester.h in Headers */, + 237D3F5C1CB92BBB0F08E83E /* _MMapIndexInput.h in Headers */, + 632426F9207092DB2363E9FC /* _MultiSegmentReader.h in Headers */, + AC1A48107EEB0074E0B16822 /* _NearSpansOrdered.h in Headers */, + 52E636F9F6DDB7FB8358B2DD /* _NearSpansUnordered.h in Headers */, + 6B0B4B5D82C9CCAE95ADFEA2 /* _PhrasePositions.h in Headers */, + DB4628B2E96B7FE7E66F3B59 /* _PhraseQueue.h in Headers */, + 33FCC0B52E200222C807721B /* _PhraseScorer.h in Headers */, + DFBBB76E8B1A2CE98355326F /* _RAMDirectory.h in Headers */, + F0AFDE3DDC3DAFD576666A07 /* _SegmentHeader.h in Headers */, + 417EEF1F14A3288F6274EAAE /* _SegmentInfos.h in Headers */, + 4C0D577D945667878E8E6B9C /* _SegmentMergeInfo.h in Headers */, + 912ED9D846AD48B94F02FC78 /* _SegmentMergeQueue.h in Headers */, + 95269DF30D92CDED8FF1B80A /* _SegmentMerger.h in Headers */, + 5391075FC4D4F453F7446BCB /* _SegmentTermEnum.h in Headers */, + A4A19170EC9225B9F00409EA /* _SharedHeader.h in Headers */, + C985EBCCB60724B7F8D8602C /* _SkipListReader.h in Headers */, + AFFF1F080EADB0DE59C45710 /* _SkipListWriter.h in Headers */, + 725E0B2D2E603B1AE0794AAD /* _SloppyPhraseScorer.h in Headers */, + CC1084200F2971549E99DBD6 /* _streambase.h in Headers */, + CAFF655782C832A6FFCA8088 /* _streambuffer.h in Headers */, + 95D7ADCBC6C581B32F4BDE0B /* _StringIntern.h in Headers */, + 3BA2AACB7190408314722A7E /* _Term.h in Headers */, + 764F9D4BCCCE8E832211BE09 /* _TermInfo.h in Headers */, + AC6CFE07BCBC281AB2B835D5 /* _TermInfosReader.h in Headers */, + 74942B6BB480158F5654F492 /* _TermInfosWriter.h in Headers */, + 2F362A31F0F3D4D4CB6B5756 /* _TermScorer.h in Headers */, + 59EF6B8B181A1B6DC8B96039 /* _TermSpans.h in Headers */, + 2F8DFB7404A84FB5706BC800 /* _TermVector.h in Headers */, + 49E73C3B69B255D2D4454723 /* _ThreadLocal.h in Headers */, + 354264C9F1FF116CABA5E5B8 /* _threads.h in Headers */, + 4CF3E4A2289F88EEB2E34881 /* _VoidList.h in Headers */, + 62493B10C36A6883AAB89C15 /* _VoidMap.h in Headers */, + 24F770B670108B354E4692F7 /* AnalysisHeader.h in Headers */, + A077D6CD544A2B837A3BCF65 /* Analyzers.h in Headers */, + 72585C442AA479DA39021576 /* api.h in Headers */, + 2213D9263BA2B79CA23C4D31 /* Array.h in Headers */, + D6810986DDBDC3618C4BE7B7 /* arrayinputstream.h in Headers */, + 4E0B7FF62A9982E596C21F18 /* BitSet.h in Headers */, + 8FD5641F7EF311DCD0330E0D /* BooleanClause.h in Headers */, + 0986177A8F4031BB097B8733 /* BooleanQuery.h in Headers */, + 429E306779BDFDF1CE892FE1 /* byteinputstream.h in Headers */, + 0F0E92FFC573B854FF3C0FC1 /* CachingSpanFilter.h in Headers */, + 691E35AF2B1B841CEDB25D8D /* CachingTokenFilter.h in Headers */, + D02FADF0391D98A15A37774F /* CachingWrapperFilter.h in Headers */, + E89A9608808F00CEA054607C /* ChainedFilter.h in Headers */, + C0C5464108E192D81F0ED6BF /* CJKAnalyzer.h in Headers */, + 8A3D97430D5C7C463774BF1B /* CLConfig.h in Headers */, + 5393D4916DE79D04F9D41457 /* CLStreams.h in Headers */, + 2A24FC950142965A31D2FB79 /* clucene-config.h in Headers */, + 49569FA3EFBFEFA010A2739C /* CLucene.h in Headers */, + 4C7B0E3F8606D3781CE07896 /* Compare.h in Headers */, + 3A889A56371709B0C91178BF /* ConstantScoreQuery.h in Headers */, + 6F83B1EA06567A997A44852F /* DateField.h in Headers */, + 1E22A1C2DBE77F0E5523E2F3 /* DateFilter.h in Headers */, + 1A6AD405F553430E71A99C95 /* DateTools.h in Headers */, + 4143377EF4E86DD6F868B8E8 /* Directory.h in Headers */, + 5DD2957BD238CC5C97310EAF /* DirectoryIndexReader.h in Headers */, + 65F6ACC80BD7DEBA653BC1F9 /* Document.h in Headers */, + 8CC8347B3F080B35ECABBF93 /* Encoder.h in Headers */, + E87C8A560E949082E0650E10 /* Equators.h in Headers */, + 565783F08EEB20BCBCD52810 /* error.h in Headers */, + 21DECA4294DD75DA8FDA9141 /* Explanation.h in Headers */, + 81D8E973B3BA22346AC0B6FF /* Field.h in Headers */, + D032BCDA41A8B56E33F26E0E /* FieldCache.h in Headers */, + C63AE09C7ED114E2124D6135 /* FieldDoc.h in Headers */, + EFB39F43FA91AA1B9110B4FE /* FieldSelector.h in Headers */, + FD4CE601B2EF217413E16415 /* FieldSortedHitQueue.h in Headers */, + 22D36F853E3AF5594548A7F9 /* Filter.h in Headers */, + BEA43B7AA113546ADF46A582 /* FilteredTermEnum.h in Headers */, + FA94F9DC0E9AC6BBF171B69A /* Formatter.h in Headers */, + 323A70149AD9E36587CD80DE /* Fragmenter.h in Headers */, + 9C0C02395EDD868119AE9167 /* FSDirectory.h in Headers */, + 9E913EFE9607ECF583F20EFC /* FuzzyQuery.h in Headers */, + 018ACDDB2317330DC79EE06C /* GermanAnalyzer.h in Headers */, + C3C6D47411055D403D820E57 /* GermanStemFilter.h in Headers */, + EEE45355D62069CF0591D20E /* GermanStemmer.h in Headers */, + D29FBE79D00BE78A5A55100A /* gzipcompressstream.h in Headers */, + 7D1D105B1161F80BA9BA905C /* gzipinputstream.h in Headers */, + 1889C2AE19D91DBF35C60B0B /* header.h in Headers */, + 7C94FE2974DEBBAF06C87521 /* Highlighter.h in Headers */, + 19C4E578EFDFEB22687AD8E9 /* HighlightScorer.h in Headers */, + A356C249412AA74FD506CACD /* Hits.h in Headers */, + 1BCF039F72CAFBDACE51BCA0 /* IndexDeletionPolicy.h in Headers */, + 7EDA46A71503CC86FD79D079 /* IndexInput.h in Headers */, + 8241524EF697061E215AD6DA /* IndexModifier.h in Headers */, + 81EA9BE7F1A92DD7BA9DB8C8 /* IndexOutput.h in Headers */, + CE94B66D5596EAB687B37ADB /* IndexReader.h in Headers */, + F1F8771DDC943DA6D5627A1A /* IndexSearcher.h in Headers */, + 4EABAD69D02951DC0A079C45 /* IndexWriter.h in Headers */, + F5B5961FD02CB76ABF137520 /* LanguageBasedAnalyzer.h in Headers */, + BACFF5AEA06D802381A38B5D /* libstemmer.h in Headers */, + 50CB2211C0E410B381851AE4 /* libstemmer.h in Headers */, + C976782639AF9226BB72227F /* Lock.h in Headers */, + 99F371286A1DF33269912163 /* LockFactory.h in Headers */, + 4D4C223988F61E9B057AAE95 /* lucenebase.h in Headers */, + FB5B0328634A36E8125484BE /* LuceneThreads.h in Headers */, + 7B5615EC602AB8A53DA49D22 /* MatchAllDocsQuery.h in Headers */, + 366F4DBE9ACA3A54BAA482DD /* mem.h in Headers */, + 1168CE90961614405F9D92B3 /* MergePolicy.h in Headers */, + 41C28771B92EB88206B1D261 /* MergeScheduler.h in Headers */, + 6224458515ED433459D7FE7E /* Misc.h in Headers */, + 2EAC565BB6CFD578641ADBCE /* modules.h in Headers */, + 6D8797483D4D5ADA1160B6A5 /* MultiFieldQueryParser.h in Headers */, + 94438BA57DEA7DE7F2F8232D /* MultiPhraseQuery.h in Headers */, + DBEF8BD2423C8AE8D5C49025 /* MultipleTermPositions.h in Headers */, + CC318948923A585CB8763714 /* MultiReader.h in Headers */, + 2C9CF6E018CD464AB6BA786A /* MultiSearcher.h in Headers */, + 36EC19D1CED6D12862F54B75 /* MultiTermQuery.h in Headers */, + 6354A8DB8087171B022E1550 /* NumberTools.h in Headers */, + 2FA041848A1B7E69232BB104 /* Payload.h in Headers */, + 7AAA187313819FA7F32DEB25 /* PhraseQuery.h in Headers */, + 40599A7FA49FF827588BA925 /* PorterStemmer.h in Headers */, + 326387A0597033675A949725 /* PrefixQuery.h in Headers */, + AC1C94E91101D417A37E1DA2 /* PriorityQueue.h in Headers */, + 4BA42CFCA7152EF358919254 /* Query.h in Headers */, + A69ABE872112F12BA2CA9DEC /* QueryFilter.h in Headers */, + 511300A2CF591EC7F27FE223 /* QueryParser.h in Headers */, + A6C71D680DC39A5CF09171EC /* QueryParserConstants.h in Headers */, + 92B5B28E26F364B14EFCC20E /* QueryParserTokenManager.h in Headers */, + 92D5E32D5A00A1CB00993BF8 /* QueryScorer.h in Headers */, + CA4C9CAD916B718D31952E34 /* QueryTermExtractor.h in Headers */, + 38F7C197649178575A71F330 /* QueryToken.h in Headers */, + 712C3B0380EE7B46496FE84A /* RAMDirectory.h in Headers */, + D72EDBC8E4D16FFE6522B8E3 /* RangeFilter.h in Headers */, + D9678054AE405B64F824E737 /* RangeQuery.h in Headers */, + D87B7EC6171BA11691E08C09 /* Reader.h in Headers */, + 7E7CA5DB8B03E0996ED60CF4 /* repl_tchar.h in Headers */, + F193ACAE4C3FE747A67C56A8 /* repl_wchar.h in Headers */, + 9F7123A6FFECDDD429901267 /* repl_wctype.h in Headers */, + CEFC5592E3C60648EB17C0D7 /* Scorer.h in Headers */, + 81CAFBF99E725B9B77A14256 /* Scorer.h in Headers */, + 84D9C393133CCE0A2C6F0782 /* ScorerDocQueue.h in Headers */, + 020454D448A75C07D058192E /* Searchable.h in Headers */, + 259845644CF4E4194DB5CA30 /* SearchHeader.h in Headers */, + A6EDFA852D5C6EFBF08688C3 /* SharedHeader.h in Headers */, + 58BBF87D1AE47816DCC611A1 /* Similarity.h in Headers */, + B335E2CB6EB32481985FE089 /* SimpleFragmenter.h in Headers */, + FC82A4282258B43736D14AF2 /* SimpleHTMLEncoder.h in Headers */, + 20D7263A331EEBC35B514116 /* SimpleHTMLFormatter.h in Headers */, + F6ED056BAE62333755C5EF04 /* SnowballAnalyzer.h in Headers */, + 0883DE02FD3A55DDACDD23DF /* SnowballFilter.h in Headers */, + 724ED95FD33A8AD20265E518 /* Sort.h in Headers */, + C822D5C92541F1C09BDC530C /* SpanFilter.h in Headers */, + BF235884E3452F4AE4C90290 /* SpanFilterResult.h in Headers */, + 0BC0F0806A9D896C9F47A291 /* SpanFirstQuery.h in Headers */, + C9EBB931A21816753FAEF9C3 /* SpanNearQuery.h in Headers */, + 3A424F45FA44EBAC0D8C7538 /* SpanNotQuery.h in Headers */, + D851B6C5DC3D265C0AFCC075 /* SpanOrQuery.h in Headers */, + F5DF60FCF58C18AFC4A980E1 /* SpanQuery.h in Headers */, + 63ECE0738F4A07B0AF2D6DFC /* SpanQueryFilter.h in Headers */, + A0547122EB3CAE89A026FC4E /* Spans.h in Headers */, + 42C670505089055BB6059CD9 /* SpanScorer.h in Headers */, + 1A15D73C5E77E140DB486912 /* SpanTermQuery.h in Headers */, + 63886B64BB151BC71597B8C4 /* SpanWeight.h in Headers */, + 90A718D6E20BA3780429ED01 /* StandardAnalyzer.h in Headers */, + 232C44880AB31944709D867F /* StandardFilter.h in Headers */, + 60B30603170C0ED9D81CDE7D /* StandardTokenizer.h in Headers */, + 418658B08BA3A919B3AB7EC1 /* StandardTokenizerConstants.h in Headers */, + 4F99F196C3F242F11BFD6712 /* StdHeader.h in Headers */, + 248673EF049034057DE7D7DF /* stem_ISO_8859_1_danish.h in Headers */, + 4E3C6406D2E0DCBC442E38B1 /* stem_ISO_8859_1_dutch.h in Headers */, + 19AC38D86714026CE133C869 /* stem_ISO_8859_1_english.h in Headers */, + 09B2CBA629582C744A713BE7 /* stem_ISO_8859_1_finnish.h in Headers */, + ABEFF5987ED8B74E509B9EDA /* stem_ISO_8859_1_french.h in Headers */, + 1D896F7765C1A45772E58FAC /* stem_ISO_8859_1_german.h in Headers */, + BAD0B843F834E61B3C70A3AC /* stem_ISO_8859_1_italian.h in Headers */, + CA9008D5D2B4002A522B4159 /* stem_ISO_8859_1_norwegian.h in Headers */, + 1D771A32133D404CC29FECDF /* stem_ISO_8859_1_porter.h in Headers */, + 8EA57F207C7FDF4DFAAF46B5 /* stem_ISO_8859_1_portuguese.h in Headers */, + B8E5F3EA5F71AFD07E0587A6 /* stem_ISO_8859_1_spanish.h in Headers */, + 4D074812F25D6F65513F4E9A /* stem_ISO_8859_1_swedish.h in Headers */, + 7C7D12839FC31F25BF6F5A39 /* stem_KOI8_R_russian.h in Headers */, + 27DC4871DF8AB8ACD043FE52 /* stem_UTF_8_danish.h in Headers */, + 51A3F1F76167B12FA2B70510 /* stem_UTF_8_dutch.h in Headers */, + CFE60A44BABC74D21672D881 /* stem_UTF_8_english.h in Headers */, + 8CC7041E7D45B0A77FED26D1 /* stem_UTF_8_finnish.h in Headers */, + 375BF8F4B09707B0EFB091B5 /* stem_UTF_8_french.h in Headers */, + 7FF31952B1CD13A373C96793 /* stem_UTF_8_german.h in Headers */, + 24BB52ACA01FC9E1F4FE5991 /* stem_UTF_8_italian.h in Headers */, + 77F7CBD39B87E06DD6206C72 /* stem_UTF_8_norwegian.h in Headers */, + D36C45B74B54A71659719831 /* stem_UTF_8_porter.h in Headers */, + 650E33BE686B3CFED078A27E /* stem_UTF_8_portuguese.h in Headers */, + 970E178D0F5940A92CD348F9 /* stem_UTF_8_russian.h in Headers */, + 9D92E60127E28DD62D8F70FC /* stem_UTF_8_spanish.h in Headers */, + D90BBB216780F8F7573CE67A /* stem_UTF_8_swedish.h in Headers */, + 57F158A34AC17BD594639729 /* streamarray.h in Headers */, + 52D43C07459759299538369B /* StringBuffer.h in Headers */, + EDB8AF6C01427D3A2037EB7B /* Term.h in Headers */, + 7747382C67D4BB1BA01F2C42 /* TermQuery.h in Headers */, + A1DB245335B6423E6DECAF48 /* Terms.h in Headers */, + B2FC553B9896E1343EE88049 /* TermVector.h in Headers */, + AC6AE219BFCBB19870087516 /* TextFragment.h in Headers */, + D2041050D97665AAE6B798D9 /* TokenGroup.h in Headers */, + 8FF7E9FF13E030C1D9559273 /* TokenSources.h in Headers */, + 98C3F9B2B762F0C0EBC80310 /* VoidList.h in Headers */, + 41617E30BC9CF4B570E1FC1D /* VoidMap.h in Headers */, + D73ED8760FA1869174FD71D9 /* WeightedTerm.h in Headers */, + F541857961D6ABFC732F7F43 /* WildcardQuery.h in Headers */, + FDB3E0E151288B50009EE7FB /* WildcardTermEnum.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + CA15BAAD5276A8D1CC022DD2 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + AB01C191CBB3541ACB42C4AD /* _ApiHeader.h in Headers */, + C13BA278E35F96A0C238F75D /* _Arrays.h in Headers */, + B05D000F98F02C8DB5FCB32C /* _BooleanScorer.h in Headers */, + D0FBC3AD7DDA8ABBEB897955 /* _BooleanScorer2.h in Headers */, + 9D874C39221828DFB930F5D6 /* _bufferedstream.h in Headers */, + DBAC588180237FDA73E3BDC5 /* _CharStream.h in Headers */, + 58BDC2E7C96DC1ACA26FC8A1 /* _clucene-config.h in Headers */, + 64DCEA8B44AC1F48B33D56EF /* _CompoundFile.h in Headers */, + DE1765661B8301D3E6C92757 /* _condition.h in Headers */, + BF8F09B74EB4D8096B1A2EEB /* _ConjunctionScorer.h in Headers */, + 51DCA8EFA7D5701DBFD3331E /* _dirent.h in Headers */, + ED99FFDE1CC6B04582691CDB /* _DisjunctionSumScorer.h in Headers */, + 32B8B1C8F8D107CCA7332D58 /* _DocumentsWriter.h in Headers */, + F2047F7F2A957947F4704EB0 /* _EmptySpans.h in Headers */, + 2BFC37AC147035CEA56922E7 /* _ExactPhraseScorer.h in Headers */, + D9B1C29D17D7E15FAE601E1C /* _FastCharStream.h in Headers */, + FEC7B68B3086D626E213FE98 /* _FastCharStream.h in Headers */, + F7DD8A7A5DFFAEB393D59971 /* _FieldCacheImpl.h in Headers */, + C7347030351B01EB126F4C54 /* _FieldDocSortedHitQueue.h in Headers */, + 128FBF955B9B4B2C88E7CE42 /* _FieldInfo.h in Headers */, + 6B6017853FA2A707A7220089 /* _FieldInfos.h in Headers */, + D8F7C38193765D0AB8B2850D /* _FieldsReader.h in Headers */, + 190BD24ED9AB5BF848EC2472 /* _FieldsWriter.h in Headers */, + 0E2C9DE6858AA9EE923E95BC /* _gunichartables.h in Headers */, + CF775E2C9EDB6AF256624505 /* _HitQueue.h in Headers */, + EBC628907381E49818FB23D7 /* _IndexFileDeleter.h in Headers */, + F84E20D03CFE5BBCF19B16E4 /* _IndexFileNameFilter.h in Headers */, + DE5A36E8892BE3CE1D9AC417 /* _IndexFileNames.h in Headers */, + 42EA502EEE138BDF8107AC5B /* _Lock.h in Headers */, + A6D699D95B66BD3247FD6D59 /* _MD5Digester.h in Headers */, + ACC832EE6D43E66A0F462137 /* _MMapIndexInput.h in Headers */, + F10BB4AF6EEC472E2789C4A0 /* _MultiSegmentReader.h in Headers */, + 15A2A7BC9113620F13BE2DD6 /* _NearSpansOrdered.h in Headers */, + 556FE5BEAADE0F80ED418C7F /* _NearSpansUnordered.h in Headers */, + CA9BC45B558D7C2542B47BB0 /* _PhrasePositions.h in Headers */, + 833A558D4B5129A9B460E838 /* _PhraseQueue.h in Headers */, + 7F36B7FC0280B8CC4E258A50 /* _PhraseScorer.h in Headers */, + 0E9E23C8939389A1156FA39F /* _RAMDirectory.h in Headers */, + ACCE3D23B8050157E7852010 /* _SegmentHeader.h in Headers */, + 78938A7A5596C188A2FA6299 /* _SegmentInfos.h in Headers */, + E357198A11177367C85E683B /* _SegmentMergeInfo.h in Headers */, + 77C19C521733233AB4B62B70 /* _SegmentMergeQueue.h in Headers */, + 03D57248907907CDFD346D82 /* _SegmentMerger.h in Headers */, + 586D29FB0A210EEE1F8C7DC2 /* _SegmentTermEnum.h in Headers */, + B931A29DDB8478C76503B6B1 /* _SharedHeader.h in Headers */, + 4DB34157870A721DFBFAF447 /* _SkipListReader.h in Headers */, + 004D0C29120AB443220C47A3 /* _SkipListWriter.h in Headers */, + 7237C3AD91E3A02F4F75F4DD /* _SloppyPhraseScorer.h in Headers */, + 6D153DBBCC8AA8C0445D327B /* _streambase.h in Headers */, + 04677439678D1D9906272EC8 /* _streambuffer.h in Headers */, + 85E77487A0E52C8204A63FF5 /* _StringIntern.h in Headers */, + 19CCCE483EFCB5D11F551C24 /* _Term.h in Headers */, + F70A03A5FC04A44A86308D3B /* _TermInfo.h in Headers */, + D9E40A16AC963BCDC791C892 /* _TermInfosReader.h in Headers */, + 24AB942D2114F5BBCF2A2061 /* _TermInfosWriter.h in Headers */, + 584C59C5189CCE20B8F18F6A /* _TermScorer.h in Headers */, + 972315BD0190E7DF23DB427B /* _TermSpans.h in Headers */, + C8616CA8D69552C122063484 /* _TermVector.h in Headers */, + 040013D7BE7D168941425D38 /* _ThreadLocal.h in Headers */, + D29269470EB12F684C94B9CB /* _threads.h in Headers */, + 48188322F7EA856715CECC2E /* _VoidList.h in Headers */, + AFA54CAF286E72B1CA2584BD /* _VoidMap.h in Headers */, + 406E85BDEE0E262CF869C5A4 /* AnalysisHeader.h in Headers */, + A213F8BA660BE572F95DDB61 /* Analyzers.h in Headers */, + 3E56CE6BF4552AA8DA749257 /* api.h in Headers */, + 7FF90BF882BB8E271FB9E454 /* Array.h in Headers */, + ADC56240736063110EF44717 /* arrayinputstream.h in Headers */, + 3AB816B899E88739C8D2500E /* BitSet.h in Headers */, + 9DDF7E14494DFAC92E8F38EA /* BooleanClause.h in Headers */, + 7DD8F028F797BB4F77396909 /* BooleanQuery.h in Headers */, + 4F06435AE4B1FE0B88454704 /* byteinputstream.h in Headers */, + C65B440993A4649544A435B0 /* CachingSpanFilter.h in Headers */, + B3A38CF9DDBD077FE28842F2 /* CachingTokenFilter.h in Headers */, + 575010FC36A23A46CB4C1DD5 /* CachingWrapperFilter.h in Headers */, + F4421F50C30C8794AB4EE7FA /* ChainedFilter.h in Headers */, + 42C0C7A2BA773A8C0055A5A5 /* CJKAnalyzer.h in Headers */, + CDFB9806CFFB037B724F5530 /* CLConfig.h in Headers */, + 0F3B8645DADDF920F166F791 /* CLStreams.h in Headers */, + 24E76F53EA15B29E475D59F5 /* clucene-config.h in Headers */, + 7AEF881505B0E2BC26CF1C4E /* CLucene.h in Headers */, + 7D0C7CD1CFB3FB00F3459825 /* Compare.h in Headers */, + D0774B82BF46666B490188F0 /* ConstantScoreQuery.h in Headers */, + 81F611870DA464EFE91F7B35 /* DateField.h in Headers */, + 6FA59B5CFF420C9328A45AB2 /* DateFilter.h in Headers */, + 4F340EF3DA018B8D509A13DF /* DateTools.h in Headers */, + 1A42B1074D97BC0FD2C56824 /* Directory.h in Headers */, + 6B1E8298449C0980DE405EE0 /* DirectoryIndexReader.h in Headers */, + A49A7E92D3EEB2D84B606A1F /* Document.h in Headers */, + FB87E2DC397D18F1502773CF /* Encoder.h in Headers */, + 35A4C1A093B66A141959C5B4 /* Equators.h in Headers */, + 49BE342C72172C5F0CD42C7D /* error.h in Headers */, + 65C7E7CD7E019D9207488D14 /* Explanation.h in Headers */, + A98BF1D78F05B07F198B17DD /* Field.h in Headers */, + E6111F11FD0AB5E754F512D5 /* FieldCache.h in Headers */, + 7B7DAACFA36DB46401B06379 /* FieldDoc.h in Headers */, + 04449F91FC798F19E4640C73 /* FieldSelector.h in Headers */, + 8D53731267BA020C219C2718 /* FieldSortedHitQueue.h in Headers */, + A10F683DF611107A36C99085 /* Filter.h in Headers */, + B7C94724D5AB27EC270A547F /* FilteredTermEnum.h in Headers */, + 34B960BF15A952D3D87D1A6C /* Formatter.h in Headers */, + D53127606D032D4731D1CF40 /* Fragmenter.h in Headers */, + BF04A515703224B966E891E1 /* FSDirectory.h in Headers */, + 03AECA30F7BF1FE3F7119DFD /* FuzzyQuery.h in Headers */, + 016F30BB2D386E42F6964217 /* GermanAnalyzer.h in Headers */, + 6C1A667A5CF607258CF069FF /* GermanStemFilter.h in Headers */, + C19CDC7E4ADC820B6ECA38E8 /* GermanStemmer.h in Headers */, + 47CCCD7B3A23CB14E56F5EBE /* gzipcompressstream.h in Headers */, + FC87B0A619EE02455EE52AE0 /* gzipinputstream.h in Headers */, + 530A0AA0C6F9FF46A5170BCD /* header.h in Headers */, + 74F79D05D2D03C523DF6C326 /* Highlighter.h in Headers */, + 39BD57D26B095145FBE7F057 /* HighlightScorer.h in Headers */, + DA2508E85D3E8610E0E6B1C1 /* Hits.h in Headers */, + 6E174F1321A8977145549F9E /* IndexDeletionPolicy.h in Headers */, + 1FA9124F4D6C21D048DA7AE7 /* IndexInput.h in Headers */, + 1D24C593D8C386838546D409 /* IndexModifier.h in Headers */, + CE42D895582557542667E73B /* IndexOutput.h in Headers */, + B95DCE654DBD0D856534B0C0 /* IndexReader.h in Headers */, + EB4545C32E575E6995B910A2 /* IndexSearcher.h in Headers */, + 978173A0EE764929ACFB7AE7 /* IndexWriter.h in Headers */, + 450E9686FF4CD317225661ED /* LanguageBasedAnalyzer.h in Headers */, + 0F4B40FC00FC1D080182B3FC /* libstemmer.h in Headers */, + E2EF35958491BC8D3BEA570B /* libstemmer.h in Headers */, + 3A2F96EB97F953E94A80C10F /* Lock.h in Headers */, + C0C1B9DC2B240E6CA97878DD /* LockFactory.h in Headers */, + BBAAF0107F6F578C6C70802C /* lucenebase.h in Headers */, + E0DEC89C8E5089B3933246A1 /* LuceneThreads.h in Headers */, + AEB897ECDCA434EFB50A4DAA /* MatchAllDocsQuery.h in Headers */, + 1AEA995E35A40C4827E5D724 /* mem.h in Headers */, + 461679432078E5288D644303 /* MergePolicy.h in Headers */, + 8A21A6477E4AFD0FCFDA27B3 /* MergeScheduler.h in Headers */, + B584610A897A9C44FEE37ED4 /* Misc.h in Headers */, + 9F69DBEDB09F4A9E7628AC03 /* modules.h in Headers */, + 98C3E4AC262806767DBDAB99 /* MultiFieldQueryParser.h in Headers */, + C707E19073FC61178008B573 /* MultiPhraseQuery.h in Headers */, + BDF3359D3B99391145769068 /* MultipleTermPositions.h in Headers */, + 13A86684594B39A2786AF5F8 /* MultiReader.h in Headers */, + 6458825BA0A200D86FD6AE07 /* MultiSearcher.h in Headers */, + CC10CDCE8A6143EB8CE24985 /* MultiTermQuery.h in Headers */, + B8E26C3BE136EDBC0E9CCF7B /* NumberTools.h in Headers */, + 9AA8C1B51B5644F573E87798 /* Payload.h in Headers */, + 8284CC6D9BE42BB2ECC46FCB /* PhraseQuery.h in Headers */, + 48F981AC5A0390310BAAD42A /* PorterStemmer.h in Headers */, + 0B01FA3FCD6A90E5277C03A8 /* PrefixQuery.h in Headers */, + C3471AD77F443E6CCDFDC1BC /* PriorityQueue.h in Headers */, + EE13840AEA3A88A2F19F306F /* Query.h in Headers */, + 939DF333A259D78CCFD4FF35 /* QueryFilter.h in Headers */, + 78337ED5352902BE63B243EC /* QueryParser.h in Headers */, + 1444F01C4D8A5A17A6617AF9 /* QueryParserConstants.h in Headers */, + 58F7E88F60BF539772A1E2F0 /* QueryParserTokenManager.h in Headers */, + 9DA8BE35B6BF9B912546F64C /* QueryScorer.h in Headers */, + 8DC89159FC4E8836F3199B6F /* QueryTermExtractor.h in Headers */, + 093CF3660C74B337863CD448 /* QueryToken.h in Headers */, + 5B0A97ECEB65707133A11D82 /* RAMDirectory.h in Headers */, + B18916EBCD8C437B37E1FDE0 /* RangeFilter.h in Headers */, + 748E5B2D846EBA44C37ED008 /* RangeQuery.h in Headers */, + F7BE74CD5D82F05E4DDD7507 /* Reader.h in Headers */, + 8F83DEED13CF0C2F7B29C32D /* repl_tchar.h in Headers */, + 3ED63D641DD15615AB482E45 /* repl_wchar.h in Headers */, + 2BC40751CF55648DFB59D37D /* repl_wctype.h in Headers */, + BD5CCFA09A9EFE16BD10B6F6 /* Scorer.h in Headers */, + BFA7D59FFA87DB09F62012DF /* Scorer.h in Headers */, + 06EC29CB89150F7EC5F63A4D /* ScorerDocQueue.h in Headers */, + 58BF437822D032859C582BE8 /* Searchable.h in Headers */, + 9E68074AB63E87D2CD641D57 /* SearchHeader.h in Headers */, + CFFD340F7FF83A1236F2DB55 /* SharedHeader.h in Headers */, + F54E6B0C0BA6279910498B84 /* Similarity.h in Headers */, + 04CA5400AFCB1FF19116A26E /* SimpleFragmenter.h in Headers */, + 47239C55A3C36A911939459B /* SimpleHTMLEncoder.h in Headers */, + 6D78502CF04034644161D111 /* SimpleHTMLFormatter.h in Headers */, + 4A5B4D8052A46868300E0F3E /* SnowballAnalyzer.h in Headers */, + 451FAB39613C9B24F8A23F20 /* SnowballFilter.h in Headers */, + 60D5C62E722B8BBB4432DD2E /* Sort.h in Headers */, + 6BC4EAA5FC501EFF8D321674 /* SpanFilter.h in Headers */, + 260E89AEBA44FC79F692E594 /* SpanFilterResult.h in Headers */, + 2955F3322326D0CB6E64376F /* SpanFirstQuery.h in Headers */, + 4982FADD04AB6315D793D4B5 /* SpanNearQuery.h in Headers */, + 2373EB8ED6ED9FE185537DAF /* SpanNotQuery.h in Headers */, + 127D3AFB3CB14636642931DE /* SpanOrQuery.h in Headers */, + 5F43606A0E0A2DE759493665 /* SpanQuery.h in Headers */, + 4CC612D0AF72ED0183CC6E09 /* SpanQueryFilter.h in Headers */, + 22191DE808D1FADF0F0CDA86 /* Spans.h in Headers */, + 4A6EACBFABB57DBE18FD4380 /* SpanScorer.h in Headers */, + E24F2C695AF88213850B9084 /* SpanTermQuery.h in Headers */, + 9D6EC587B4291167A70A1E48 /* SpanWeight.h in Headers */, + 8A73D4FBF8BFF90E540EED6F /* StandardAnalyzer.h in Headers */, + D597D08FDE861618DA4F76B8 /* StandardFilter.h in Headers */, + BCCBFBC5D5584E817F0BA111 /* StandardTokenizer.h in Headers */, + F40661278649759E0E0B7393 /* StandardTokenizerConstants.h in Headers */, + 336C64F5ABC9AC8ECBC1BC04 /* StdHeader.h in Headers */, + 19E52FDF903F0BCF8E36F6DC /* stem_ISO_8859_1_danish.h in Headers */, + F57E0C6226026CBA55A4E3A9 /* stem_ISO_8859_1_dutch.h in Headers */, + 6C80E383E2A7E1A6BA92BEAF /* stem_ISO_8859_1_english.h in Headers */, + A829387B0973483079EAA736 /* stem_ISO_8859_1_finnish.h in Headers */, + E3B3AC39888BF0E23A60DCCA /* stem_ISO_8859_1_french.h in Headers */, + 7064384673528000A1977730 /* stem_ISO_8859_1_german.h in Headers */, + 5AA6BE2DE2566CF328AFA132 /* stem_ISO_8859_1_italian.h in Headers */, + C66E32635310651C7F81384D /* stem_ISO_8859_1_norwegian.h in Headers */, + A226818AC2BE679F9A30F28D /* stem_ISO_8859_1_porter.h in Headers */, + 1E5DD93E728E443B6D87DE4E /* stem_ISO_8859_1_portuguese.h in Headers */, + 1F33C9F689A89A258CA2D29E /* stem_ISO_8859_1_spanish.h in Headers */, + BACF6E0A20BE0A26B2BFE085 /* stem_ISO_8859_1_swedish.h in Headers */, + 220D40A966FBE0648FD26F55 /* stem_KOI8_R_russian.h in Headers */, + C3F28B4F270BB9798CBF17A8 /* stem_UTF_8_danish.h in Headers */, + 9D7DAD3BDA5240E33A6ED982 /* stem_UTF_8_dutch.h in Headers */, + F9A19DCE0B04DAA4FE00A446 /* stem_UTF_8_english.h in Headers */, + 53AE13A4FAB9EDD28731DF17 /* stem_UTF_8_finnish.h in Headers */, + 050C934D444D946ED07B018A /* stem_UTF_8_french.h in Headers */, + 094A4879FD2B96A7400DAFF8 /* stem_UTF_8_german.h in Headers */, + 2AEC8825BA5100A1D01BBD0A /* stem_UTF_8_italian.h in Headers */, + B10921EC28E60DF78EF9428D /* stem_UTF_8_norwegian.h in Headers */, + 127BE8900BE3569F62FD74EA /* stem_UTF_8_porter.h in Headers */, + E96CFEAB39EDC96E5DAA75CB /* stem_UTF_8_portuguese.h in Headers */, + FA08DCE7ABA985F13EEA4930 /* stem_UTF_8_russian.h in Headers */, + D92E3E51F8DF24B63C3BA9B3 /* stem_UTF_8_spanish.h in Headers */, + A129CDA4E88C386FB74DC1CA /* stem_UTF_8_swedish.h in Headers */, + 70562809DFA21204CB8B4A70 /* streamarray.h in Headers */, + 49D9176F66929FB270EA7B33 /* StringBuffer.h in Headers */, + 681F82A02AA40A81651DB75C /* Term.h in Headers */, + 6103F780E8E29CD4DAC23901 /* TermQuery.h in Headers */, + 706B5C511EDA1F76ABADE69D /* Terms.h in Headers */, + 643E09A331B5A0615842072B /* TermVector.h in Headers */, + 38F32A5AAAC8785435F32059 /* TextFragment.h in Headers */, + 16FCE63B9C6C8C078E6E0838 /* TokenGroup.h in Headers */, + 3D88F256347FAF81B417D84E /* TokenSources.h in Headers */, + C70B97D64570E05AFEC4BDD3 /* VoidList.h in Headers */, + E8D07E136A7B2C51F78CE6F0 /* VoidMap.h in Headers */, + B38A92D4AE83771114866B9E /* WeightedTerm.h in Headers */, + 6AF8089BAA9AF6F14080B2DC /* WildcardQuery.h in Headers */, + 9B93535060FDB71FB50F25E6 /* WildcardTermEnum.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + 128F971DAD395C0A2CD34524 /* Pods-BasePods-BRFullTextSearch */ = { + isa = PBXNativeTarget; + buildConfigurationList = 7AA140232490A9588F92E696 /* Build configuration list for PBXNativeTarget "Pods-BasePods-BRFullTextSearch" */; + buildPhases = ( + 9CCAB6D40B6E271053391F14 /* Sources */, + 0383DDFC6C2912C3E07C60DA /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + 7D872898799025A1D51D427F /* PBXTargetDependency */, + ); + name = "Pods-BasePods-BRFullTextSearch"; + productName = "Pods-BasePods-BRFullTextSearch"; + productReference = A2BA2637A9C24B098EC6345B /* libPods-BasePods-BRFullTextSearch.a */; + productType = "com.apple.product-type.library.static"; + }; + 7BAACC3D7C7BB5617583D37F /* Pods-BasePods-BRFullTextSearchMacOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 61AFD665AC571F5EA364C963 /* Build configuration list for PBXNativeTarget "Pods-BasePods-BRFullTextSearchMacOS" */; + buildPhases = ( + 6F020B5540BF6D4CA2C44C59 /* Sources */, + 2C89514746B37C9FC26A32FF /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + 4CC2D136A882F50ABEA2E3D6 /* PBXTargetDependency */, + ); + name = "Pods-BasePods-BRFullTextSearchMacOS"; + productName = "Pods-BasePods-BRFullTextSearchMacOS"; + productReference = 0B1AF9A436F8023B6FE019ED /* libPods-BasePods-BRFullTextSearchMacOS.a */; + productType = "com.apple.product-type.library.static"; + }; + 97920DEC9C19B079CEC274ED /* BRCLucene-iOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 78F74BFDDF3406B59A957514 /* Build configuration list for PBXNativeTarget "BRCLucene-iOS" */; + buildPhases = ( + D53C4FF74A497307A599E685 /* Sources */, + 72125FB6904187CC6DCDA0F2 /* Frameworks */, + CA15BAAD5276A8D1CC022DD2 /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "BRCLucene-iOS"; + productName = "BRCLucene-iOS"; + productReference = AB98165ADE90ADADFEF8C05B /* libBRCLucene-iOS.a */; + productType = "com.apple.product-type.library.static"; + }; + A4C1C2F64E5FCB267E3F4B5B /* BRCLucene-OSX */ = { + isa = PBXNativeTarget; + buildConfigurationList = 4E103961CB1B7999A29D0C7F /* Build configuration list for PBXNativeTarget "BRCLucene-OSX" */; + buildPhases = ( + B29605C7BAC26431E8B38FF1 /* Sources */, + 26B5D1282DDD83D27752D2D2 /* Frameworks */, + 41D9FC0957D3793696CC323F /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "BRCLucene-OSX"; + productName = "BRCLucene-OSX"; + productReference = 5727D0A80F77B33D73278FEA /* libBRCLucene-OSX.a */; + productType = "com.apple.product-type.library.static"; + }; + C611DD46E4ACD9BF18B33788 /* Pods-BasePods-BRFullTextSearchTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 3FAE10A8BD3315F3C0F673F8 /* Build configuration list for PBXNativeTarget "Pods-BasePods-BRFullTextSearchTests" */; + buildPhases = ( + DB6062D8CAB545D3FF0CAD96 /* Sources */, + D93AB9DEB26E900807A96334 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + 9CEADD22B58B0922C912AB98 /* PBXTargetDependency */, + ); + name = "Pods-BasePods-BRFullTextSearchTests"; + productName = "Pods-BasePods-BRFullTextSearchTests"; + productReference = E279BADCE6B6B837E61A4427 /* libPods-BasePods-BRFullTextSearchTests.a */; + productType = "com.apple.product-type.library.static"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 4AF624F79E63D15AB6AF3160 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 0730; + LastUpgradeCheck = 0700; + }; + buildConfigurationList = 8A0CE0600FF6C5F1393C97F8 /* Build configuration list for PBXProject "Pods" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = 3B798D5EDAB3771A1C69BBE5; + productRefGroup = 1B4AE327695A38BC120DFED5 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 97920DEC9C19B079CEC274ED /* BRCLucene-iOS */, + A4C1C2F64E5FCB267E3F4B5B /* BRCLucene-OSX */, + 128F971DAD395C0A2CD34524 /* Pods-BasePods-BRFullTextSearch */, + 7BAACC3D7C7BB5617583D37F /* Pods-BasePods-BRFullTextSearchMacOS */, + C611DD46E4ACD9BF18B33788 /* Pods-BasePods-BRFullTextSearchTests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXSourcesBuildPhase section */ + 6F020B5540BF6D4CA2C44C59 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 69DF7A98B46D316664AA3CCE /* Pods-BasePods-BRFullTextSearchMacOS-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 9CCAB6D40B6E271053391F14 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 13828EA30381A9615C73D35D /* Pods-BasePods-BRFullTextSearch-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B29605C7BAC26431E8B38FF1 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 97B0A34D7A8F6641504EDE53 /* AnalysisHeader.cpp in Sources */, + 48110BFC54093CA72ABE81BD /* Analyzers.cpp in Sources */, + 155B04E6B9949BF423DCB285 /* api.c in Sources */, + A6DB997894BC6382D1BDA3F1 /* BitSet.cpp in Sources */, + AB4F1076029FB1B88481EA3F /* BooleanQuery.cpp in Sources */, + 39B22B3A5B9AED55DA07D0C9 /* BooleanScorer.cpp in Sources */, + C212A3752A68FA601782EE4A /* BooleanScorer2.cpp in Sources */, + 7DA2F9D2EF33081211858067 /* BRCLucene-OSX-dummy.m in Sources */, + 8E4EEA1DB1A922E105B76655 /* CachingSpanFilter.cpp in Sources */, + E4A50AF1A8ED5EF496617617 /* CachingTokenFilter.cpp in Sources */, + B78F1874579D479397307B12 /* CachingWrapperFilter.cpp in Sources */, + 36848BEDE5D9586B9E747BE4 /* ChainedFilter.cpp in Sources */, + 2780681999A040FEFC497563 /* CJKAnalyzer.cpp in Sources */, + DC5E1308AA9B0E24A05F51C9 /* Compare.cpp in Sources */, + 3042F346B7E3FD153CC1B441 /* CompoundFile.cpp in Sources */, + 89E22E9FF47D525D91E018D0 /* condition.cpp in Sources */, + 78E3C67F518B731DD8E70533 /* ConjunctionScorer.cpp in Sources */, + E9B0A49CBA5DAA03580D52CE /* ConstantScoreQuery.cpp in Sources */, + EAD167478834614086DF1A2C /* DateField.cpp in Sources */, + CF53C782EEF639CF95BF07E6 /* DateFilter.cpp in Sources */, + 811C91DC0B03B7E0CC4F9802 /* DateTools.cpp in Sources */, + F2B49A276044C03873F63D91 /* Directory.cpp in Sources */, + 8CF9B9E240FE212AEA7FABD3 /* DirectoryIndexReader.cpp in Sources */, + 1829C02712C1597E8F91561D /* dirent.cpp in Sources */, + 986D5230EA858A080365CE1A /* DisjunctionSumScorer.cpp in Sources */, + 5B5C1011EDF88C199786FD59 /* Document.cpp in Sources */, + F916A8AD84B37CA443C03C9E /* DocumentsWriter.cpp in Sources */, + 20AF8B1EE35183C260C0648C /* DocumentsWriterThreadState.cpp in Sources */, + 12A4D165FC32075D349AB207 /* Encoder.cpp in Sources */, + A805502475425A1BA4771737 /* Equators.cpp in Sources */, + 83D6F85A49FBB46E06BCD7F7 /* error.cpp in Sources */, + 712FDD157503C40DF368EEEA /* ExactPhraseScorer.cpp in Sources */, + 8618292725EEA4F326712B48 /* Explanation.cpp in Sources */, + FFA36C48FCD46E7B27EC42CA /* FastCharStream.cpp in Sources */, + 2F809693E846D5BE171930A9 /* FastCharStream.cpp in Sources */, + 35B92B1E3B202ACCBE9E1558 /* Field.cpp in Sources */, + 60E73A8E6C014F4D884A0C58 /* FieldCache.cpp in Sources */, + C4AB0DA7774C448B85421856 /* FieldCacheImpl.cpp in Sources */, + D684CB423A32EB85564B7C0C /* FieldDocSortedHitQueue.cpp in Sources */, + 5C88D143CDAE5F069871ECB4 /* FieldInfos.cpp in Sources */, + 82293E14A370DA8FD5D7367C /* FieldSelector.cpp in Sources */, + 38DBCB206C0606A4FC794EAA /* FieldSortedHitQueue.cpp in Sources */, + D5B63068BA7774EE0B74A070 /* FieldsReader.cpp in Sources */, + 5CA7FB4E1ABB5DB585A1C46B /* FieldsWriter.cpp in Sources */, + 070233024B2492DE3BBB6103 /* FilteredTermEnum.cpp in Sources */, + FC30115737D54E4AE161572B /* Formatter.cpp in Sources */, + CE673F94F69159185FA32840 /* Fragmenter.cpp in Sources */, + 1E379296B26516ED1D5167E2 /* FSDirectory.cpp in Sources */, + C134CFDDB69FCDE9BBE05443 /* FuzzyQuery.cpp in Sources */, + 18333C09C33FDCE5E00D5A39 /* GermanAnalyzer.cpp in Sources */, + 6EDF5E9D4486C5DB45BB57E6 /* GermanStemFilter.cpp in Sources */, + 848A3DE94D6A3F0DFCD8C0BE /* GermanStemmer.cpp in Sources */, + 30A36A6521A0BC1890F0F631 /* gunichartables.cpp in Sources */, + B42C0D1EC1451654305D85BC /* gzipcompressstream.cpp in Sources */, + 4BD82E839E771314A9DB73D9 /* gzipinputstream.cpp in Sources */, + 6AAB8863595F2CDDC3542CEC /* Highlighter.cpp in Sources */, + AC68583D05883379693FBCF0 /* HitQueue.cpp in Sources */, + 605E55DDC3C82CF566932E72 /* Hits.cpp in Sources */, + 7744C79311F4B49CC65AB687 /* IndexDeletionPolicy.cpp in Sources */, + D6A3E0BDB30EC925BACCCF9C /* IndexFileDeleter.cpp in Sources */, + ADDB0B1205C7AD76FCBDEF98 /* IndexFileNameFilter.cpp in Sources */, + 086EBD9BBF61812009D733BF /* IndexFileNames.cpp in Sources */, + 2C17818172C4E23A0D8CD528 /* IndexInput.cpp in Sources */, + F0727B51CCC890B9907A811E /* IndexModifier.cpp in Sources */, + D8B85D4D83C2C06DF28819D6 /* IndexOutput.cpp in Sources */, + 59001E26E2ED992EE3989BCA /* IndexReader.cpp in Sources */, + E1055B28566941B500765658 /* IndexSearcher.cpp in Sources */, + A35CAFF2061FD96FAC595F5F /* IndexWriter.cpp in Sources */, + 4C27E10DFD8A57BC01884DD9 /* LanguageBasedAnalyzer.cpp in Sources */, + 541BDAF256D1FA7F55F15285 /* libstemmer.c in Sources */, + 3C19D3EC54FECACF914549F8 /* Lock.cpp in Sources */, + 52013353033F36FD59682602 /* LockFactory.cpp in Sources */, + 01DD63A069F3583290B95F6A /* MatchAllDocsQuery.cpp in Sources */, + 42DD1C9F17C6EDC052C04748 /* MD5Digester.cpp in Sources */, + 40ADF4ABB2C3280D8677C91D /* MergePolicy.cpp in Sources */, + AC49255CD1F6C0CAE6F38A6F /* MergeScheduler.cpp in Sources */, + BE9AEB626B8D7FBF9A9BC941 /* Misc.cpp in Sources */, + B71ACF986317D1F721129557 /* MMapInput.cpp in Sources */, + D8FDDE02CC42C2EDC4B6DA21 /* MultiFieldQueryParser.cpp in Sources */, + 35020E32A66F46E01CF895F0 /* MultiPhraseQuery.cpp in Sources */, + 98107EACED05CE1F709A6E4D /* MultipleTermPositions.cpp in Sources */, + A0BC44CA83ECE1C59156E907 /* MultiReader.cpp in Sources */, + 7450765E7B228543F543EB13 /* MultiSearcher.cpp in Sources */, + 33A8F861643C1B809AF32C8E /* MultiSegmentReader.cpp in Sources */, + 39133E850597FFCEB5316B44 /* MultiTermQuery.cpp in Sources */, + B1E0DB703BE557A672B1E345 /* NearSpansOrdered.cpp in Sources */, + C1F828983B726E947B28B72B /* NearSpansUnordered.cpp in Sources */, + CC2DEA5A84A9AAC67E90944F /* NumberTools.cpp in Sources */, + 4B5BCA1A6779D3BDCF9E1AC4 /* Payload.cpp in Sources */, + BE83B97062BF769ADB2937AA /* PhrasePositions.cpp in Sources */, + ED089C4C8DBF8A968459995C /* PhraseQuery.cpp in Sources */, + AEA4912FAC0F5A0DB338C797 /* PhraseScorer.cpp in Sources */, + 3CD505CFE927B44F89992FAD /* PorterStemmer.cpp in Sources */, + 82C97C79479E047CAFCE6A82 /* PrefixQuery.cpp in Sources */, + C3E993A441B19FA2B022C437 /* QueryFilter.cpp in Sources */, + D807FDAF6E828DA1EC8924E0 /* QueryParser.cpp in Sources */, + DAEEB06C5B90A09603795A17 /* QueryParserTokenManager.cpp in Sources */, + DCDCA23DA77C0F46856924BF /* QueryScorer.cpp in Sources */, + F806586772588460F7E3E4DD /* QueryTermExtractor.cpp in Sources */, + 28A6B8690FD6EF2FA7CFBAD7 /* QueryToken.cpp in Sources */, + 96348D29A4B1434527FFB861 /* RAMDirectory.cpp in Sources */, + 357B649CEB465994C257A1B9 /* RangeFilter.cpp in Sources */, + 87EF113CE0624066DF4C5016 /* RangeQuery.cpp in Sources */, + 0313EE64DEEA3C471EF6E7BF /* Reader.cpp in Sources */, + B695344286CDBD6D94971FEB /* repl_lltot.cpp in Sources */, + 52A78CE3367E3B2AC7CACEA6 /* repl_tcscasecmp.cpp in Sources */, + 0C8D78C113F047795804B79C /* repl_tcslwr.cpp in Sources */, + 2F146DEC9944CB168609467E /* repl_tcstod.cpp in Sources */, + 4D30BE328E1FEF36DF06D942 /* repl_tcstoll.cpp in Sources */, + D6B950E3D3C20CD0B48DA1ED /* repl_tprintf.cpp in Sources */, + F269FCD3E844A2552A5EBB36 /* Scorer.cpp in Sources */, + BBEF59B2EC875AD9F41A6079 /* ScorerDocQueue.cpp in Sources */, + 7E7C617D4A1AE25329C598BB /* SearchHeader.cpp in Sources */, + C732208FD620111965C365D5 /* SegmentInfos.cpp in Sources */, + C2FF7A7B6D2DBFC8D6270C29 /* SegmentMergeInfo.cpp in Sources */, + 6A116E81D06A90BDAA8332F8 /* SegmentMergeQueue.cpp in Sources */, + E24CFC9AB87A4540434F429A /* SegmentMerger.cpp in Sources */, + 57DFE608DD90BAE626F83876 /* SegmentReader.cpp in Sources */, + C55592E2F08BE83085B9EB65 /* SegmentTermDocs.cpp in Sources */, + A1F4229D33D5823A55FCD212 /* SegmentTermEnum.cpp in Sources */, + F331A23FD152D205998B2913 /* SegmentTermPositions.cpp in Sources */, + 1E11924F0D7A536BF9E76376 /* SegmentTermVector.cpp in Sources */, + DEF67693BA09B589EBA7D51E /* SharedHeader.cpp in Sources */, + EFD9D6490034C7CF6DC9408F /* Similarity.cpp in Sources */, + E849A451D8488C3A99EA82E8 /* SimpleFragmenter.cpp in Sources */, + B83399E0A0CD1F78EB430E92 /* SimpleHTMLEncoder.cpp in Sources */, + 18724DF69FEF723BF9AB70F7 /* SimpleHTMLFormatter.cpp in Sources */, + 783029B627D9E598BD20E5E7 /* SkipListReader.cpp in Sources */, + 97033D6749D59CA36BA599AD /* SkipListWriter.cpp in Sources */, + 56AD814B9B6E9DA8968FC59C /* SloppyPhraseScorer.cpp in Sources */, + 25E417C2DAF3AD116C2549A9 /* Snowball.cpp in Sources */, + D6D1EE92D9BEB7BE6C60B0A0 /* Sort.cpp in Sources */, + CD47120EECFAAA73846B9124 /* SpanFirstQuery.cpp in Sources */, + C5FC154167D7D3D27FA8CFC7 /* SpanNearQuery.cpp in Sources */, + 0072B91DDB08238435582A32 /* SpanNotQuery.cpp in Sources */, + 0C7D7FFEB760B8EE4433ED8C /* SpanOrQuery.cpp in Sources */, + B1A801DC597F132A6B56780C /* SpanQueryFilter.cpp in Sources */, + 748DB1E54448134B8C27D5D0 /* SpanScorer.cpp in Sources */, + ED5BDBD0C2A10A6D8BB72FE1 /* SpanTermQuery.cpp in Sources */, + F0C996FC7556A4722CCEE2FD /* SpanWeight.cpp in Sources */, + DFF9F091A6F1BF3B3A829AEE /* StandardAnalyzer.cpp in Sources */, + 78C93E2D0ADC23F1AB96E43F /* StandardFilter.cpp in Sources */, + B5DCC30F61FA58A0CBD4DD0C /* StandardTokenizer.cpp in Sources */, + 4C7922805636D38B94E852E6 /* StdHeader.cpp in Sources */, + CE6D9E3BEFC478CD1D52233C /* stem_ISO_8859_1_danish.c in Sources */, + 5CCB33908E1AA558AA3BEE46 /* stem_ISO_8859_1_dutch.c in Sources */, + C7751C2C887F0023673129EB /* stem_ISO_8859_1_english.c in Sources */, + 2486E00446F2879391617C67 /* stem_ISO_8859_1_finnish.c in Sources */, + 607BB04458F7472E5EF59B28 /* stem_ISO_8859_1_french.c in Sources */, + 0D6A3A87002002DC84A5931E /* stem_ISO_8859_1_german.c in Sources */, + 7401D5AF791BB062DE32B1E7 /* stem_ISO_8859_1_italian.c in Sources */, + 11700B17DB330C868ABE1476 /* stem_ISO_8859_1_norwegian.c in Sources */, + AD4255B1EBEFF388162E214A /* stem_ISO_8859_1_porter.c in Sources */, + 2207E383CE46BEA676C13686 /* stem_ISO_8859_1_portuguese.c in Sources */, + 7F25DF989EF7CFD62B5B5873 /* stem_ISO_8859_1_spanish.c in Sources */, + 5C8692AE77147B5BF07541E6 /* stem_ISO_8859_1_swedish.c in Sources */, + D50E61CB4E7449F8E804D04E /* stem_KOI8_R_russian.c in Sources */, + A40526F9727AE528B4FC18CC /* stem_UTF_8_danish.c in Sources */, + FF124604036B4A4F32F908D4 /* stem_UTF_8_dutch.c in Sources */, + AF12D3B83AAFC35A51CAC05D /* stem_UTF_8_english.c in Sources */, + EFD349EAD411B331D9710035 /* stem_UTF_8_finnish.c in Sources */, + 256081838566C1C5121E2735 /* stem_UTF_8_french.c in Sources */, + 33C021CDB3AA1ED301176207 /* stem_UTF_8_german.c in Sources */, + 1D34E7ED4F77E5FA6D80DAB1 /* stem_UTF_8_italian.c in Sources */, + 2F28DC8BD482521271E1144D /* stem_UTF_8_norwegian.c in Sources */, + D7724C17F1D00576AEC16807 /* stem_UTF_8_porter.c in Sources */, + 5FE75F55583BDA6245C8AFE9 /* stem_UTF_8_portuguese.c in Sources */, + D9710F25B0D1008F5027F3B9 /* stem_UTF_8_russian.c in Sources */, + 9BFE527B60269541617220CE /* stem_UTF_8_spanish.c in Sources */, + 9B4A77851DC8C561E0AF5346 /* stem_UTF_8_swedish.c in Sources */, + 2D3FF42AA9695CBC10682A03 /* StringBuffer.cpp in Sources */, + 6F2D37B0D8133F85D8B128D8 /* StringIntern.cpp in Sources */, + 2BF7F3D6AD4008EBD6052F23 /* Term.cpp in Sources */, + 95CFF92A0919DD7B12168F20 /* TermInfo.cpp in Sources */, + A65E58AB6876F0EAFD4E6348 /* TermInfosReader.cpp in Sources */, + CD8463857F3AD2B675F543A0 /* TermInfosWriter.cpp in Sources */, + 33C4E67E975C7212716FD7C5 /* TermQuery.cpp in Sources */, + BD589F0E47F4E7DE065A76C3 /* Terms.cpp in Sources */, + D2FE740AFDBB735F05F6DBDC /* TermScorer.cpp in Sources */, + D1572C2F58BB6A8343901DA9 /* TermSpans.cpp in Sources */, + 2B34FE95097379E41C519B40 /* TermVectorReader.cpp in Sources */, + 63F1FA05A436D36B6D92008F /* TermVectorWriter.cpp in Sources */, + 89E06CCB02CE1EE31012423A /* TextFragment.cpp in Sources */, + 9609425CCEC353CD8AE21913 /* ThreadLocal.cpp in Sources */, + 73BDA69EB908DE6120CC7243 /* threads.cpp in Sources */, + 9C50AA8F2319192844263D36 /* TokenGroup.cpp in Sources */, + 933208FE8AD5A42930049DA6 /* TokenSources.cpp in Sources */, + B04113067CA4EC337D7FB94F /* utf8.cpp in Sources */, + 979B769C820F8ECD7F40E232 /* utilities.c in Sources */, + 4F5228ADF0B76022051B4099 /* WeightedTerm.cpp in Sources */, + 95E6760ABE23D10A88EFAE97 /* WildcardQuery.cpp in Sources */, + E25E5361D3B0FA75BD47222A /* WildcardTermEnum.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + D53C4FF74A497307A599E685 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 7273E2260B508A03BB9FEC39 /* AnalysisHeader.cpp in Sources */, + 537125B706253A43C670814A /* Analyzers.cpp in Sources */, + 4158AA6DBEBB7F9115E61D08 /* api.c in Sources */, + E7EC06DC86242ED44DF70183 /* BitSet.cpp in Sources */, + BD0C10AA1FAF382D6C1CC4EF /* BooleanQuery.cpp in Sources */, + 2253B798EB8277E7C6B63C90 /* BooleanScorer.cpp in Sources */, + 229AFEACADF81C22BB50E063 /* BooleanScorer2.cpp in Sources */, + 9674C8E0085073C0689D3887 /* BRCLucene-iOS-dummy.m in Sources */, + 261D0A2D1E68932D11B1847E /* CachingSpanFilter.cpp in Sources */, + 5AB3F9C65D05D82B56E1F1DD /* CachingTokenFilter.cpp in Sources */, + 8B01CDA82C3A60C5E9D6B111 /* CachingWrapperFilter.cpp in Sources */, + 430ACF0717CA243840CBE8D7 /* ChainedFilter.cpp in Sources */, + 1165A7E231175240555F426A /* CJKAnalyzer.cpp in Sources */, + 425411CEB1FD73E98B91CC67 /* Compare.cpp in Sources */, + EBEF315A97CCB9912BB4D715 /* CompoundFile.cpp in Sources */, + 8563C7B2C7993628E742B20F /* condition.cpp in Sources */, + 0FAECD1A3746351C4B5E0914 /* ConjunctionScorer.cpp in Sources */, + 4E05EB1D327FDDA70DCFE329 /* ConstantScoreQuery.cpp in Sources */, + A8BF0822C351F99E1593E681 /* DateField.cpp in Sources */, + FFB2139702D6F1A1D32C6422 /* DateFilter.cpp in Sources */, + 093AF642D0E1DA35B9A68861 /* DateTools.cpp in Sources */, + 35EF5C5272A4F85AD35C6E2E /* Directory.cpp in Sources */, + A34113B9606B609D132C0D5C /* DirectoryIndexReader.cpp in Sources */, + E8219EDF5838DC612233AD73 /* dirent.cpp in Sources */, + 003197170D0B8496AC46662D /* DisjunctionSumScorer.cpp in Sources */, + 1BC8025862B21554F968919B /* Document.cpp in Sources */, + 4C31002523CA232532C48A09 /* DocumentsWriter.cpp in Sources */, + 5CF6FE96225F6E0083948EB1 /* DocumentsWriterThreadState.cpp in Sources */, + 3A42B7E7186179C2B5B270E1 /* Encoder.cpp in Sources */, + A2832903671139126DFFD165 /* Equators.cpp in Sources */, + 649EC0624E7566B7A6A86E86 /* error.cpp in Sources */, + ACDE7E4082B42996FADED0CD /* ExactPhraseScorer.cpp in Sources */, + 37A18EC160FBC86E08A3BAD5 /* Explanation.cpp in Sources */, + F1873A979BF39AC707294B19 /* FastCharStream.cpp in Sources */, + A5684FC921514E372A8F89CF /* FastCharStream.cpp in Sources */, + 7C34F83718AAA8517189AF1F /* Field.cpp in Sources */, + 0EEC5F7DB6562FE4D7D4D1B8 /* FieldCache.cpp in Sources */, + 7934AAC3EF4CC312B8647B13 /* FieldCacheImpl.cpp in Sources */, + 4B7546357A9B2249E86F7411 /* FieldDocSortedHitQueue.cpp in Sources */, + F3A5FBF4EDE65B22F5924486 /* FieldInfos.cpp in Sources */, + ECA21E7C24498526DC1F5EB9 /* FieldSelector.cpp in Sources */, + 6F7D1979DEA13CCEBFE15604 /* FieldSortedHitQueue.cpp in Sources */, + 951ECD0C85413FD3D05CCDB1 /* FieldsReader.cpp in Sources */, + 80CC4BF87B956F5E6C792402 /* FieldsWriter.cpp in Sources */, + C6712FF1475EFCC3392A7C48 /* FilteredTermEnum.cpp in Sources */, + F2DA696F8F641610A8D00401 /* Formatter.cpp in Sources */, + BC0A21762392C50293916006 /* Fragmenter.cpp in Sources */, + 320741800BD742D1B7EFF873 /* FSDirectory.cpp in Sources */, + A63784073CD5978FE4628D49 /* FuzzyQuery.cpp in Sources */, + F17789516C069C2FAAF2630F /* GermanAnalyzer.cpp in Sources */, + 2319494824F47908628FFD9A /* GermanStemFilter.cpp in Sources */, + 4A83686C2BEA94DC7074F027 /* GermanStemmer.cpp in Sources */, + 0472064260D443354C698CA1 /* gunichartables.cpp in Sources */, + 51D2253CB1E4D9CA043887C5 /* gzipcompressstream.cpp in Sources */, + E1D1CF872D5A8F682645A990 /* gzipinputstream.cpp in Sources */, + F15BA841CE04B2D91C9128E3 /* Highlighter.cpp in Sources */, + EE1B4775F85EDE55DE0F4090 /* HitQueue.cpp in Sources */, + 2FCCD6282925CF24092F06EC /* Hits.cpp in Sources */, + A430EC2A92DB0D00BFBADE7E /* IndexDeletionPolicy.cpp in Sources */, + 36C50B3B8E462AB7CD09A3F9 /* IndexFileDeleter.cpp in Sources */, + 1BF2DF7D92A0049722316F55 /* IndexFileNameFilter.cpp in Sources */, + 099615CB72952D58E777819F /* IndexFileNames.cpp in Sources */, + B01EBA2F7ACF7DAB8D2F2EBB /* IndexInput.cpp in Sources */, + F0E00B84B1FD83DC52CB0C2A /* IndexModifier.cpp in Sources */, + EE12E5C981D441B6039054C3 /* IndexOutput.cpp in Sources */, + 56FFAF81F585A0B83AD9AE3F /* IndexReader.cpp in Sources */, + 42FF3E61A4EFE93849DF243A /* IndexSearcher.cpp in Sources */, + 6A972B0A344FA04E638A063D /* IndexWriter.cpp in Sources */, + 0C07C348985220A621972915 /* LanguageBasedAnalyzer.cpp in Sources */, + 55D3B1CC659EBDFD63BEB268 /* libstemmer.c in Sources */, + AFF6053459BAC0874276405C /* Lock.cpp in Sources */, + B46D1E495006E185DDF67AD0 /* LockFactory.cpp in Sources */, + CFD40F87FAC56B53AABE0CA0 /* MatchAllDocsQuery.cpp in Sources */, + 96799F96738CA78D4BC6774F /* MD5Digester.cpp in Sources */, + B32E96531D4C0D042E33F7CB /* MergePolicy.cpp in Sources */, + 24DC43ED69781B22C3DD8F5E /* MergeScheduler.cpp in Sources */, + B3D54A44FDB0E621A22C8B70 /* Misc.cpp in Sources */, + 9DDA15EFB38A896A449E518F /* MMapInput.cpp in Sources */, + 510407A949853CA34A7CF723 /* MultiFieldQueryParser.cpp in Sources */, + 7DEFC2C015648CB0B90C3DBD /* MultiPhraseQuery.cpp in Sources */, + D8F7CB7734E536F3615D2249 /* MultipleTermPositions.cpp in Sources */, + 5B3E63A52DCDC859E3A4416C /* MultiReader.cpp in Sources */, + 54EC98B175991E6156FB4A99 /* MultiSearcher.cpp in Sources */, + 3F1AF11AF6F1211074454980 /* MultiSegmentReader.cpp in Sources */, + 4A3263A5097B3982687522AB /* MultiTermQuery.cpp in Sources */, + 66A48CF8EE44E13C433BFCAC /* NearSpansOrdered.cpp in Sources */, + 6591AAA2DB09933C5DF687DB /* NearSpansUnordered.cpp in Sources */, + 55F0222E1CE950E16A27C38A /* NumberTools.cpp in Sources */, + C2DFCFA5824CFE09800F3D66 /* Payload.cpp in Sources */, + E5A0B23206EFC642B88B9D0E /* PhrasePositions.cpp in Sources */, + 91164FD1C95E8F7EB8EC8FF9 /* PhraseQuery.cpp in Sources */, + 3E9F40221902AF3E6C08F699 /* PhraseScorer.cpp in Sources */, + 254DB7B0434B151236BC6A2C /* PorterStemmer.cpp in Sources */, + 42899D34EEF9CDB0815B8555 /* PrefixQuery.cpp in Sources */, + 72168E134E7D5A85C4606539 /* QueryFilter.cpp in Sources */, + 513E5C49F929DC67241A295A /* QueryParser.cpp in Sources */, + 2F5BE504AF489A28D2D8E8E0 /* QueryParserTokenManager.cpp in Sources */, + 533F7D20A082C2E7839F1C53 /* QueryScorer.cpp in Sources */, + 7962B4786DF89A785E138920 /* QueryTermExtractor.cpp in Sources */, + 5915622BE827C0A9CDBFE69A /* QueryToken.cpp in Sources */, + 140D9635418A72BEA01003AF /* RAMDirectory.cpp in Sources */, + E871EFBEF06A6114EABBE22A /* RangeFilter.cpp in Sources */, + 3E6F343B8F84622AF5AA31ED /* RangeQuery.cpp in Sources */, + 0CA7EFC634004204A3A5D3E8 /* Reader.cpp in Sources */, + 6924DB85C432B56ABC7BA856 /* repl_lltot.cpp in Sources */, + E21CD5C3238BBE07E66BDD1C /* repl_tcscasecmp.cpp in Sources */, + 3C32C7DD769E167F1374792D /* repl_tcslwr.cpp in Sources */, + AEC7D2CE999030C831B5DD22 /* repl_tcstod.cpp in Sources */, + C5417C6B172E1BC46583BE2B /* repl_tcstoll.cpp in Sources */, + 2194220F658AD2403E157363 /* repl_tprintf.cpp in Sources */, + 617D19DCC169111D1FD31705 /* Scorer.cpp in Sources */, + 7664C233ABB21ABCD1FB9D8D /* ScorerDocQueue.cpp in Sources */, + 141F9D527F8D577C99661FE2 /* SearchHeader.cpp in Sources */, + B059782BB3D8454C4A8A963B /* SegmentInfos.cpp in Sources */, + 9AB12BF5518FABB43841E436 /* SegmentMergeInfo.cpp in Sources */, + 550C0A0AC295096C39F78BD6 /* SegmentMergeQueue.cpp in Sources */, + 713094E1E08AF41F031794AB /* SegmentMerger.cpp in Sources */, + 9D88F056DB4B5952069090C5 /* SegmentReader.cpp in Sources */, + A4484C1091DA7E65A8642292 /* SegmentTermDocs.cpp in Sources */, + 4D94D84C953533B15EA89452 /* SegmentTermEnum.cpp in Sources */, + 1C7E1C619AAF89AA60339256 /* SegmentTermPositions.cpp in Sources */, + 5B5C95B5CE8F860D2391C87C /* SegmentTermVector.cpp in Sources */, + 1531CBDA7B367B1D095F0D5B /* SharedHeader.cpp in Sources */, + 7ECBCED8DC64BB8F662DEA78 /* Similarity.cpp in Sources */, + B1DA66390F340B85152CE697 /* SimpleFragmenter.cpp in Sources */, + 139AA6DA383773D9A877FE31 /* SimpleHTMLEncoder.cpp in Sources */, + E0109D2F581DDA9ACEBE1488 /* SimpleHTMLFormatter.cpp in Sources */, + EF5C8A41C866863111747422 /* SkipListReader.cpp in Sources */, + 130D7D5576079BCA1468E11A /* SkipListWriter.cpp in Sources */, + 44DC18A870D5D9130677187E /* SloppyPhraseScorer.cpp in Sources */, + 31537593E8A77729906F8AE1 /* Snowball.cpp in Sources */, + 776816329D6BF5161152A93B /* Sort.cpp in Sources */, + CF7A13DB488034EACB9A8087 /* SpanFirstQuery.cpp in Sources */, + BE46E25F981BAB8FFE1C43B7 /* SpanNearQuery.cpp in Sources */, + E1D07240A5E64379C55DD4F7 /* SpanNotQuery.cpp in Sources */, + EB72779AFDDDB6BA634C824E /* SpanOrQuery.cpp in Sources */, + E5C4A76CE89676EB8DDD1B3D /* SpanQueryFilter.cpp in Sources */, + B209F9C8B5E9553B2B1CC36B /* SpanScorer.cpp in Sources */, + 64BF108AA139E636124DB1A8 /* SpanTermQuery.cpp in Sources */, + C6FF7201D500DD495D51E7DD /* SpanWeight.cpp in Sources */, + 18028ED842F1EAABD2C0DED9 /* StandardAnalyzer.cpp in Sources */, + BCC84F8ABE37837BC2A3C9F8 /* StandardFilter.cpp in Sources */, + BB0918AFF04E0CA486404BCF /* StandardTokenizer.cpp in Sources */, + EA8E61E10EBE69F095A0846B /* StdHeader.cpp in Sources */, + 77AA7AB9EE1AA2C434F2D869 /* stem_ISO_8859_1_danish.c in Sources */, + BAAE00874D78DCB05FF80CB2 /* stem_ISO_8859_1_dutch.c in Sources */, + C0F226B04E55E2CD50211F9D /* stem_ISO_8859_1_english.c in Sources */, + 8DABD7BC701959899EF4F423 /* stem_ISO_8859_1_finnish.c in Sources */, + D13DFF3D6E3927799A829B6A /* stem_ISO_8859_1_french.c in Sources */, + EF112DEEB4B832B0653302E1 /* stem_ISO_8859_1_german.c in Sources */, + 69193EC12CD118B6EA25E5B9 /* stem_ISO_8859_1_italian.c in Sources */, + 749AEB215493300F7A25D878 /* stem_ISO_8859_1_norwegian.c in Sources */, + 77CE0F208152561E1DAB072E /* stem_ISO_8859_1_porter.c in Sources */, + C87FA37A78A65AB20CFC11D0 /* stem_ISO_8859_1_portuguese.c in Sources */, + 3FECADE2369E573C67C6FB30 /* stem_ISO_8859_1_spanish.c in Sources */, + 8E657DB3EF39041BA22A6024 /* stem_ISO_8859_1_swedish.c in Sources */, + EFF1BBAE5E30BCD8EE67B80F /* stem_KOI8_R_russian.c in Sources */, + B9F23EB7B89AC11FDC57EDE9 /* stem_UTF_8_danish.c in Sources */, + E662BA1FCBAC392D6777B0D7 /* stem_UTF_8_dutch.c in Sources */, + 91FAFC3EE99E4294DFFD58C8 /* stem_UTF_8_english.c in Sources */, + 7F83A2519B42FD86171DBD13 /* stem_UTF_8_finnish.c in Sources */, + 5D8E511CE783140425C7C6DA /* stem_UTF_8_french.c in Sources */, + 52243C412010FB8A2437BB0E /* stem_UTF_8_german.c in Sources */, + 2B40B9C324702A9F47A7AED2 /* stem_UTF_8_italian.c in Sources */, + CF24C5D45553128E162936BA /* stem_UTF_8_norwegian.c in Sources */, + 0247CF860141509CD745DF15 /* stem_UTF_8_porter.c in Sources */, + 07922D6A1E829B15A56088BD /* stem_UTF_8_portuguese.c in Sources */, + 7E6483B1A12A72D41BDB79ED /* stem_UTF_8_russian.c in Sources */, + AC55A4BED2FF7168AE61B7A0 /* stem_UTF_8_spanish.c in Sources */, + FE046C6905B39669F9710954 /* stem_UTF_8_swedish.c in Sources */, + DD5A42A946761678FC4C9E4D /* StringBuffer.cpp in Sources */, + F5A166DCEB0D0E4994B8F5BA /* StringIntern.cpp in Sources */, + D3788DE3C18E04B1796F53AF /* Term.cpp in Sources */, + 1E2B2898ABF4F575E5AA0696 /* TermInfo.cpp in Sources */, + 97DA9C904417F4BD1A367625 /* TermInfosReader.cpp in Sources */, + 76DE2CEC1935BE5689FDE1C5 /* TermInfosWriter.cpp in Sources */, + FCA640EEAB8863E4C6762E91 /* TermQuery.cpp in Sources */, + 2026A178A237C56E0ADA3BF4 /* Terms.cpp in Sources */, + 1851481692848EEC27352282 /* TermScorer.cpp in Sources */, + 14178196B952AE2D949A7C13 /* TermSpans.cpp in Sources */, + 6DBD6B69B35BC9C75C2D99E3 /* TermVectorReader.cpp in Sources */, + 3FFA879C8263EB68EE9D93C4 /* TermVectorWriter.cpp in Sources */, + E0C3FC4965AA4EEE6AD07B61 /* TextFragment.cpp in Sources */, + 02248EDA06CE0D8350520BFD /* ThreadLocal.cpp in Sources */, + 016836DB7EB131CFAD0A253D /* threads.cpp in Sources */, + 2E759E14F3A937F040D9C82B /* TokenGroup.cpp in Sources */, + 6D2D333F320321D09BC1DC22 /* TokenSources.cpp in Sources */, + DDB251A10617FCAC6E9220B3 /* utf8.cpp in Sources */, + 2EEC0E58BE7031A1F914D058 /* utilities.c in Sources */, + 3E6063A7C9D767F27FD153B2 /* WeightedTerm.cpp in Sources */, + 4CEB92C70E36FB28B18789D5 /* WildcardQuery.cpp in Sources */, + BE8689D87DCF9A68BC419245 /* WildcardTermEnum.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + DB6062D8CAB545D3FF0CAD96 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 454DCAB995B08BF174F411F1 /* Pods-BasePods-BRFullTextSearchTests-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 4CC2D136A882F50ABEA2E3D6 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "BRCLucene-OSX"; + target = A4C1C2F64E5FCB267E3F4B5B /* BRCLucene-OSX */; + targetProxy = 80CFBDE7FBBB784CC61EAB99 /* PBXContainerItemProxy */; + }; + 7D872898799025A1D51D427F /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "BRCLucene-iOS"; + target = 97920DEC9C19B079CEC274ED /* BRCLucene-iOS */; + targetProxy = 9A916263C4F2744470E6B91B /* PBXContainerItemProxy */; + }; + 9CEADD22B58B0922C912AB98 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "BRCLucene-iOS"; + target = 97920DEC9C19B079CEC274ED /* BRCLucene-iOS */; + targetProxy = E3D52EBA7619E290171766FF /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + 1BCB24638F718E731D899763 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9F7536781E3934942BB35CCD /* Pods-BasePods-BRFullTextSearchMacOS.release.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = "-"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + EXECUTABLE_PREFIX = lib; + GCC_NO_COMMON_BLOCKS = YES; + MACH_O_TYPE = staticlib; + MACOSX_DEPLOYMENT_TARGET = 10.7; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx; + SKIP_INSTALL = YES; + }; + name = Release; + }; + 4418DF95BA05724A82F60DFD /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 62A0C45CC0014353E3FD136C /* BRCLucene-OSX.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = "-"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + EXECUTABLE_PREFIX = lib; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/BRCLucene-OSX/BRCLucene-OSX-prefix.pch"; + MACOSX_DEPLOYMENT_TARGET = 10.7; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + PUBLIC_HEADERS_FOLDER_PATH = ""; + SDKROOT = macosx; + }; + name = Release; + }; + 45925E9A3F21E39C310C4B50 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 3C072AC85BCC6C0C8F1D35B5 /* BRCLucene-iOS.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/BRCLucene-iOS/BRCLucene-iOS-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 5.1; + MTL_ENABLE_DEBUG_INFO = YES; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + PUBLIC_HEADERS_FOLDER_PATH = ""; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + }; + name = Debug; + }; + 46ABE2CA87CA7F7C36607E94 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 0C942B208D7CDE8D1F9A7E5F /* Pods-BasePods-BRFullTextSearchTests.release.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + IPHONEOS_DEPLOYMENT_TARGET = 5.1; + MACH_O_TYPE = staticlib; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + }; + name = Release; + }; + 695D456DFE3B2D0B7B62B2E1 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGNING_REQUIRED = NO; + COPY_PHASE_STRIP = YES; + ENABLE_NS_ASSERTIONS = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_PREPROCESSOR_DEFINITIONS = ( + "POD_CONFIGURATION_RELEASE=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 5.1; + MACOSX_DEPLOYMENT_TARGET = 10.7; + PROVISIONING_PROFILE_SPECIFIER = NO_SIGNING/; + STRIP_INSTALLED_PRODUCT = NO; + SYMROOT = "${SRCROOT}/../build"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 72934705D2108B9D82E18F7B /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 2DFE76AF194234A2CE68B28D /* Pods-BasePods-BRFullTextSearchTests.debug.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + IPHONEOS_DEPLOYMENT_TARGET = 5.1; + MACH_O_TYPE = staticlib; + MTL_ENABLE_DEBUG_INFO = YES; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + }; + name = Debug; + }; + 83E696961DE237E4B14C7746 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = EEC930EE946D36F5C93EE592 /* Pods-BasePods-BRFullTextSearch.release.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + IPHONEOS_DEPLOYMENT_TARGET = 5.1; + MACH_O_TYPE = staticlib; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + }; + name = Release; + }; + 8F1C2C490E90934727D107B5 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 62A0C45CC0014353E3FD136C /* BRCLucene-OSX.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = "-"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + EXECUTABLE_PREFIX = lib; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/BRCLucene-OSX/BRCLucene-OSX-prefix.pch"; + MACOSX_DEPLOYMENT_TARGET = 10.7; + MTL_ENABLE_DEBUG_INFO = YES; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + PUBLIC_HEADERS_FOLDER_PATH = ""; + SDKROOT = macosx; + }; + name = Debug; + }; + B927F4B55994113C52C1A80E /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 488E09F443E2F81ED283F1FD /* Pods-BasePods-BRFullTextSearchMacOS.debug.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = "-"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + EXECUTABLE_PREFIX = lib; + GCC_NO_COMMON_BLOCKS = YES; + MACH_O_TYPE = staticlib; + MACOSX_DEPLOYMENT_TARGET = 10.7; + MTL_ENABLE_DEBUG_INFO = YES; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx; + SKIP_INSTALL = YES; + }; + name = Debug; + }; + BC418932A75173DE7C6CF235 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 3C072AC85BCC6C0C8F1D35B5 /* BRCLucene-iOS.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/BRCLucene-iOS/BRCLucene-iOS-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 5.1; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + PUBLIC_HEADERS_FOLDER_PATH = ""; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + }; + name = Release; + }; + C8913DBDAA6C22194179AA03 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 795B33C5E107310E1F2D37BE /* Pods-BasePods-BRFullTextSearch.debug.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + IPHONEOS_DEPLOYMENT_TARGET = 5.1; + MACH_O_TYPE = staticlib; + MTL_ENABLE_DEBUG_INFO = YES; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + }; + name = Debug; + }; + D74DCB8F74B5D22E83B15813 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGNING_REQUIRED = NO; + COPY_PHASE_STRIP = NO; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "POD_CONFIGURATION_DEBUG=1", + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 5.1; + MACOSX_DEPLOYMENT_TARGET = 10.7; + ONLY_ACTIVE_ARCH = YES; + PROVISIONING_PROFILE_SPECIFIER = NO_SIGNING/; + STRIP_INSTALLED_PRODUCT = NO; + SYMROOT = "${SRCROOT}/../build"; + }; + name = Debug; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 3FAE10A8BD3315F3C0F673F8 /* Build configuration list for PBXNativeTarget "Pods-BasePods-BRFullTextSearchTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 72934705D2108B9D82E18F7B /* Debug */, + 46ABE2CA87CA7F7C36607E94 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 4E103961CB1B7999A29D0C7F /* Build configuration list for PBXNativeTarget "BRCLucene-OSX" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 8F1C2C490E90934727D107B5 /* Debug */, + 4418DF95BA05724A82F60DFD /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 61AFD665AC571F5EA364C963 /* Build configuration list for PBXNativeTarget "Pods-BasePods-BRFullTextSearchMacOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + B927F4B55994113C52C1A80E /* Debug */, + 1BCB24638F718E731D899763 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 78F74BFDDF3406B59A957514 /* Build configuration list for PBXNativeTarget "BRCLucene-iOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 45925E9A3F21E39C310C4B50 /* Debug */, + BC418932A75173DE7C6CF235 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 7AA140232490A9588F92E696 /* Build configuration list for PBXNativeTarget "Pods-BasePods-BRFullTextSearch" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + C8913DBDAA6C22194179AA03 /* Debug */, + 83E696961DE237E4B14C7746 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 8A0CE0600FF6C5F1393C97F8 /* Build configuration list for PBXProject "Pods" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D74DCB8F74B5D22E83B15813 /* Debug */, + 695D456DFE3B2D0B7B62B2E1 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 4AF624F79E63D15AB6AF3160 /* Project object */; +} diff --git a/Pods/Target Support Files/BRCLucene-OSX/BRCLucene-OSX-dummy.m b/Pods/Target Support Files/BRCLucene-OSX/BRCLucene-OSX-dummy.m new file mode 100644 index 0000000..e272272 --- /dev/null +++ b/Pods/Target Support Files/BRCLucene-OSX/BRCLucene-OSX-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_BRCLucene_OSX : NSObject +@end +@implementation PodsDummy_BRCLucene_OSX +@end diff --git a/Pods/Target Support Files/BRCLucene-OSX/BRCLucene-OSX-prefix.pch b/Pods/Target Support Files/BRCLucene-OSX/BRCLucene-OSX-prefix.pch new file mode 100644 index 0000000..b9c163b --- /dev/null +++ b/Pods/Target Support Files/BRCLucene-OSX/BRCLucene-OSX-prefix.pch @@ -0,0 +1,4 @@ +#ifdef __OBJC__ +#import +#endif + diff --git a/Pods/Target Support Files/BRCLucene-OSX/BRCLucene-OSX.xcconfig b/Pods/Target Support Files/BRCLucene-OSX/BRCLucene-OSX.xcconfig new file mode 100644 index 0000000..3bf93b7 --- /dev/null +++ b/Pods/Target Support Files/BRCLucene-OSX/BRCLucene-OSX.xcconfig @@ -0,0 +1,9 @@ +CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/BRCLucene-OSX +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 _WCHAR_H_CPLUSPLUS_98_CONFORMANCE_ +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/BRCLucene" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/BRCLucene" +OTHER_LDFLAGS = -l"c++" -l"z" +PODS_BUILD_DIR = $BUILD_DIR +PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES diff --git a/Pods/Target Support Files/BRCLucene-iOS/BRCLucene-iOS-dummy.m b/Pods/Target Support Files/BRCLucene-iOS/BRCLucene-iOS-dummy.m new file mode 100644 index 0000000..bdb2c0d --- /dev/null +++ b/Pods/Target Support Files/BRCLucene-iOS/BRCLucene-iOS-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_BRCLucene_iOS : NSObject +@end +@implementation PodsDummy_BRCLucene_iOS +@end diff --git a/Pods/Target Support Files/BRCLucene-iOS/BRCLucene-iOS-prefix.pch b/Pods/Target Support Files/BRCLucene-iOS/BRCLucene-iOS-prefix.pch new file mode 100644 index 0000000..aa992a4 --- /dev/null +++ b/Pods/Target Support Files/BRCLucene-iOS/BRCLucene-iOS-prefix.pch @@ -0,0 +1,4 @@ +#ifdef __OBJC__ +#import +#endif + diff --git a/Pods/Target Support Files/BRCLucene-iOS/BRCLucene-iOS.xcconfig b/Pods/Target Support Files/BRCLucene-iOS/BRCLucene-iOS.xcconfig new file mode 100644 index 0000000..123c304 --- /dev/null +++ b/Pods/Target Support Files/BRCLucene-iOS/BRCLucene-iOS.xcconfig @@ -0,0 +1,9 @@ +CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/BRCLucene-iOS +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 _WCHAR_H_CPLUSPLUS_98_CONFORMANCE_ +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/BRCLucene" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/BRCLucene" +OTHER_LDFLAGS = -l"c++" -l"z" +PODS_BUILD_DIR = $BUILD_DIR +PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES diff --git a/Pods/Target Support Files/Pods-BasePods-BRFullTextSearch/Pods-BasePods-BRFullTextSearch-acknowledgements.markdown b/Pods/Target Support Files/Pods-BasePods-BRFullTextSearch/Pods-BasePods-BRFullTextSearch-acknowledgements.markdown new file mode 100644 index 0000000..102af75 --- /dev/null +++ b/Pods/Target Support Files/Pods-BasePods-BRFullTextSearch/Pods-BasePods-BRFullTextSearch-acknowledgements.markdown @@ -0,0 +1,3 @@ +# Acknowledgements +This application makes use of the following third party libraries: +Generated by CocoaPods - https://cocoapods.org diff --git a/Pods/Target Support Files/Pods-BasePods-BRFullTextSearch/Pods-BasePods-BRFullTextSearch-acknowledgements.plist b/Pods/Target Support Files/Pods-BasePods-BRFullTextSearch/Pods-BasePods-BRFullTextSearch-acknowledgements.plist new file mode 100644 index 0000000..7acbad1 --- /dev/null +++ b/Pods/Target Support Files/Pods-BasePods-BRFullTextSearch/Pods-BasePods-BRFullTextSearch-acknowledgements.plist @@ -0,0 +1,29 @@ + + + + + PreferenceSpecifiers + + + FooterText + This application makes use of the following third party libraries: + Title + Acknowledgements + Type + PSGroupSpecifier + + + FooterText + Generated by CocoaPods - https://cocoapods.org + Title + + Type + PSGroupSpecifier + + + StringsTable + Acknowledgements + Title + Acknowledgements + + diff --git a/Pods/Target Support Files/Pods-BasePods-BRFullTextSearch/Pods-BasePods-BRFullTextSearch-dummy.m b/Pods/Target Support Files/Pods-BasePods-BRFullTextSearch/Pods-BasePods-BRFullTextSearch-dummy.m new file mode 100644 index 0000000..e936b27 --- /dev/null +++ b/Pods/Target Support Files/Pods-BasePods-BRFullTextSearch/Pods-BasePods-BRFullTextSearch-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Pods_BasePods_BRFullTextSearch : NSObject +@end +@implementation PodsDummy_Pods_BasePods_BRFullTextSearch +@end diff --git a/Pods/Target Support Files/Pods-BasePods-BRFullTextSearch/Pods-BasePods-BRFullTextSearch-frameworks.sh b/Pods/Target Support Files/Pods-BasePods-BRFullTextSearch/Pods-BasePods-BRFullTextSearch-frameworks.sh new file mode 100755 index 0000000..893c16a --- /dev/null +++ b/Pods/Target Support Files/Pods-BasePods-BRFullTextSearch/Pods-BasePods-BRFullTextSearch-frameworks.sh @@ -0,0 +1,84 @@ +#!/bin/sh +set -e + +echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" +mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + +SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" + +install_framework() +{ + if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then + local source="${BUILT_PRODUCTS_DIR}/$1" + elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then + local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" + elif [ -r "$1" ]; then + local source="$1" + fi + + local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + + if [ -L "${source}" ]; then + echo "Symlinked..." + source="$(readlink "${source}")" + fi + + # use filter instead of exclude so missing patterns dont' throw errors + echo "rsync -av --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" + rsync -av --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" + + local basename + basename="$(basename -s .framework "$1")" + binary="${destination}/${basename}.framework/${basename}" + if ! [ -r "$binary" ]; then + binary="${destination}/${basename}" + fi + + # Strip invalid architectures so "fat" simulator / device frameworks work on device + if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then + strip_invalid_archs "$binary" + fi + + # Resign the code if required by the build settings to avoid unstable apps + code_sign_if_enabled "${destination}/$(basename "$1")" + + # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. + if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then + local swift_runtime_libs + swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) + for lib in $swift_runtime_libs; do + echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" + rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" + code_sign_if_enabled "${destination}/${lib}" + done + fi +} + +# Signs a framework with the provided identity +code_sign_if_enabled() { + if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then + # Use the current code_sign_identitiy + echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" + echo "/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements \"$1\"" + /usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements "$1" + fi +} + +# Strip invalid architectures +strip_invalid_archs() { + binary="$1" + # Get architectures for current file + archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)" + stripped="" + for arch in $archs; do + if ! [[ "${VALID_ARCHS}" == *"$arch"* ]]; then + # Strip non-valid architectures in-place + lipo -remove "$arch" -output "$binary" "$binary" || exit 1 + stripped="$stripped $arch" + fi + done + if [[ "$stripped" ]]; then + echo "Stripped $binary of architectures:$stripped" + fi +} + diff --git a/Pods/Target Support Files/Pods-BasePods-BRFullTextSearch/Pods-BasePods-BRFullTextSearch-resources.sh b/Pods/Target Support Files/Pods-BasePods-BRFullTextSearch/Pods-BasePods-BRFullTextSearch-resources.sh new file mode 100755 index 0000000..59077e2 --- /dev/null +++ b/Pods/Target Support Files/Pods-BasePods-BRFullTextSearch/Pods-BasePods-BRFullTextSearch-resources.sh @@ -0,0 +1,96 @@ +#!/bin/sh +set -e + +mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + +RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt +> "$RESOURCES_TO_COPY" + +XCASSET_FILES=() + +case "${TARGETED_DEVICE_FAMILY}" in + 1,2) + TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" + ;; + 1) + TARGET_DEVICE_ARGS="--target-device iphone" + ;; + 2) + TARGET_DEVICE_ARGS="--target-device ipad" + ;; + *) + TARGET_DEVICE_ARGS="--target-device mac" + ;; +esac + +install_resource() +{ + if [[ "$1" = /* ]] ; then + RESOURCE_PATH="$1" + else + RESOURCE_PATH="${PODS_ROOT}/$1" + fi + if [[ ! -e "$RESOURCE_PATH" ]] ; then + cat << EOM +error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. +EOM + exit 1 + fi + case $RESOURCE_PATH in + *.storyboard) + echo "ibtool --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" + ibtool --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} + ;; + *.xib) + echo "ibtool --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" + ibtool --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} + ;; + *.framework) + echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + echo "rsync -av $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + rsync -av "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + ;; + *.xcdatamodel) + echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" + xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" + ;; + *.xcdatamodeld) + echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" + xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" + ;; + *.xcmappingmodel) + echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" + xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" + ;; + *.xcassets) + ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH" + XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") + ;; + *) + echo "$RESOURCE_PATH" + echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" + ;; + esac +} + +mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then + mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +fi +rm -f "$RESOURCES_TO_COPY" + +if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] +then + # Find all other xcassets (this unfortunately includes those of path pods and other targets). + OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) + while read line; do + if [[ $line != "${PODS_ROOT}*" ]]; then + XCASSET_FILES+=("$line") + fi + done <<<"$OTHER_XCASSETS" + + printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +fi diff --git a/Pods/Target Support Files/Pods-BasePods-BRFullTextSearch/Pods-BasePods-BRFullTextSearch.debug.xcconfig b/Pods/Target Support Files/Pods-BasePods-BRFullTextSearch/Pods-BasePods-BRFullTextSearch.debug.xcconfig new file mode 100644 index 0000000..5de0dae --- /dev/null +++ b/Pods/Target Support Files/Pods-BasePods-BRFullTextSearch/Pods-BasePods-BRFullTextSearch.debug.xcconfig @@ -0,0 +1,9 @@ +ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 _WCHAR_H_CPLUSPLUS_98_CONFORMANCE_ +HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/BRCLucene" +LIBRARY_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/BRCLucene-iOS" +OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/BRCLucene" +OTHER_LDFLAGS = $(inherited) -ObjC -l"BRCLucene-iOS" -l"c++" -l"z" +PODS_BUILD_DIR = $BUILD_DIR +PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT}/Pods diff --git a/Pods/Target Support Files/Pods-BasePods-BRFullTextSearch/Pods-BasePods-BRFullTextSearch.release.xcconfig b/Pods/Target Support Files/Pods-BasePods-BRFullTextSearch/Pods-BasePods-BRFullTextSearch.release.xcconfig new file mode 100644 index 0000000..5de0dae --- /dev/null +++ b/Pods/Target Support Files/Pods-BasePods-BRFullTextSearch/Pods-BasePods-BRFullTextSearch.release.xcconfig @@ -0,0 +1,9 @@ +ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 _WCHAR_H_CPLUSPLUS_98_CONFORMANCE_ +HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/BRCLucene" +LIBRARY_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/BRCLucene-iOS" +OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/BRCLucene" +OTHER_LDFLAGS = $(inherited) -ObjC -l"BRCLucene-iOS" -l"c++" -l"z" +PODS_BUILD_DIR = $BUILD_DIR +PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT}/Pods diff --git a/Pods/Target Support Files/Pods-BasePods-BRFullTextSearchMacOS/Pods-BasePods-BRFullTextSearchMacOS-acknowledgements.markdown b/Pods/Target Support Files/Pods-BasePods-BRFullTextSearchMacOS/Pods-BasePods-BRFullTextSearchMacOS-acknowledgements.markdown new file mode 100644 index 0000000..102af75 --- /dev/null +++ b/Pods/Target Support Files/Pods-BasePods-BRFullTextSearchMacOS/Pods-BasePods-BRFullTextSearchMacOS-acknowledgements.markdown @@ -0,0 +1,3 @@ +# Acknowledgements +This application makes use of the following third party libraries: +Generated by CocoaPods - https://cocoapods.org diff --git a/Pods/Target Support Files/Pods-BasePods-BRFullTextSearchMacOS/Pods-BasePods-BRFullTextSearchMacOS-acknowledgements.plist b/Pods/Target Support Files/Pods-BasePods-BRFullTextSearchMacOS/Pods-BasePods-BRFullTextSearchMacOS-acknowledgements.plist new file mode 100644 index 0000000..7acbad1 --- /dev/null +++ b/Pods/Target Support Files/Pods-BasePods-BRFullTextSearchMacOS/Pods-BasePods-BRFullTextSearchMacOS-acknowledgements.plist @@ -0,0 +1,29 @@ + + + + + PreferenceSpecifiers + + + FooterText + This application makes use of the following third party libraries: + Title + Acknowledgements + Type + PSGroupSpecifier + + + FooterText + Generated by CocoaPods - https://cocoapods.org + Title + + Type + PSGroupSpecifier + + + StringsTable + Acknowledgements + Title + Acknowledgements + + diff --git a/Pods/Target Support Files/Pods-BasePods-BRFullTextSearchMacOS/Pods-BasePods-BRFullTextSearchMacOS-dummy.m b/Pods/Target Support Files/Pods-BasePods-BRFullTextSearchMacOS/Pods-BasePods-BRFullTextSearchMacOS-dummy.m new file mode 100644 index 0000000..42480c6 --- /dev/null +++ b/Pods/Target Support Files/Pods-BasePods-BRFullTextSearchMacOS/Pods-BasePods-BRFullTextSearchMacOS-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Pods_BasePods_BRFullTextSearchMacOS : NSObject +@end +@implementation PodsDummy_Pods_BasePods_BRFullTextSearchMacOS +@end diff --git a/Pods/Target Support Files/Pods-BasePods-BRFullTextSearchMacOS/Pods-BasePods-BRFullTextSearchMacOS-resources.sh b/Pods/Target Support Files/Pods-BasePods-BRFullTextSearchMacOS/Pods-BasePods-BRFullTextSearchMacOS-resources.sh new file mode 100755 index 0000000..59077e2 --- /dev/null +++ b/Pods/Target Support Files/Pods-BasePods-BRFullTextSearchMacOS/Pods-BasePods-BRFullTextSearchMacOS-resources.sh @@ -0,0 +1,96 @@ +#!/bin/sh +set -e + +mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + +RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt +> "$RESOURCES_TO_COPY" + +XCASSET_FILES=() + +case "${TARGETED_DEVICE_FAMILY}" in + 1,2) + TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" + ;; + 1) + TARGET_DEVICE_ARGS="--target-device iphone" + ;; + 2) + TARGET_DEVICE_ARGS="--target-device ipad" + ;; + *) + TARGET_DEVICE_ARGS="--target-device mac" + ;; +esac + +install_resource() +{ + if [[ "$1" = /* ]] ; then + RESOURCE_PATH="$1" + else + RESOURCE_PATH="${PODS_ROOT}/$1" + fi + if [[ ! -e "$RESOURCE_PATH" ]] ; then + cat << EOM +error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. +EOM + exit 1 + fi + case $RESOURCE_PATH in + *.storyboard) + echo "ibtool --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" + ibtool --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} + ;; + *.xib) + echo "ibtool --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" + ibtool --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} + ;; + *.framework) + echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + echo "rsync -av $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + rsync -av "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + ;; + *.xcdatamodel) + echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" + xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" + ;; + *.xcdatamodeld) + echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" + xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" + ;; + *.xcmappingmodel) + echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" + xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" + ;; + *.xcassets) + ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH" + XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") + ;; + *) + echo "$RESOURCE_PATH" + echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" + ;; + esac +} + +mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then + mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +fi +rm -f "$RESOURCES_TO_COPY" + +if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] +then + # Find all other xcassets (this unfortunately includes those of path pods and other targets). + OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) + while read line; do + if [[ $line != "${PODS_ROOT}*" ]]; then + XCASSET_FILES+=("$line") + fi + done <<<"$OTHER_XCASSETS" + + printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +fi diff --git a/Pods/Target Support Files/Pods-BasePods-BRFullTextSearchMacOS/Pods-BasePods-BRFullTextSearchMacOS.debug.xcconfig b/Pods/Target Support Files/Pods-BasePods-BRFullTextSearchMacOS/Pods-BasePods-BRFullTextSearchMacOS.debug.xcconfig new file mode 100644 index 0000000..2a4872b --- /dev/null +++ b/Pods/Target Support Files/Pods-BasePods-BRFullTextSearchMacOS/Pods-BasePods-BRFullTextSearchMacOS.debug.xcconfig @@ -0,0 +1,9 @@ +ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 _WCHAR_H_CPLUSPLUS_98_CONFORMANCE_ +HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/BRCLucene" +LIBRARY_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/BRCLucene-OSX" +OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/BRCLucene" +OTHER_LDFLAGS = $(inherited) -ObjC -l"BRCLucene-OSX" -l"c++" -l"z" +PODS_BUILD_DIR = $BUILD_DIR +PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT}/Pods diff --git a/Pods/Target Support Files/Pods-BasePods-BRFullTextSearchMacOS/Pods-BasePods-BRFullTextSearchMacOS.release.xcconfig b/Pods/Target Support Files/Pods-BasePods-BRFullTextSearchMacOS/Pods-BasePods-BRFullTextSearchMacOS.release.xcconfig new file mode 100644 index 0000000..2a4872b --- /dev/null +++ b/Pods/Target Support Files/Pods-BasePods-BRFullTextSearchMacOS/Pods-BasePods-BRFullTextSearchMacOS.release.xcconfig @@ -0,0 +1,9 @@ +ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 _WCHAR_H_CPLUSPLUS_98_CONFORMANCE_ +HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/BRCLucene" +LIBRARY_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/BRCLucene-OSX" +OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/BRCLucene" +OTHER_LDFLAGS = $(inherited) -ObjC -l"BRCLucene-OSX" -l"c++" -l"z" +PODS_BUILD_DIR = $BUILD_DIR +PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT}/Pods diff --git a/Pods/Target Support Files/Pods-BasePods-BRFullTextSearchTests/Pods-BasePods-BRFullTextSearchTests-acknowledgements.markdown b/Pods/Target Support Files/Pods-BasePods-BRFullTextSearchTests/Pods-BasePods-BRFullTextSearchTests-acknowledgements.markdown new file mode 100644 index 0000000..102af75 --- /dev/null +++ b/Pods/Target Support Files/Pods-BasePods-BRFullTextSearchTests/Pods-BasePods-BRFullTextSearchTests-acknowledgements.markdown @@ -0,0 +1,3 @@ +# Acknowledgements +This application makes use of the following third party libraries: +Generated by CocoaPods - https://cocoapods.org diff --git a/Pods/Target Support Files/Pods-BasePods-BRFullTextSearchTests/Pods-BasePods-BRFullTextSearchTests-acknowledgements.plist b/Pods/Target Support Files/Pods-BasePods-BRFullTextSearchTests/Pods-BasePods-BRFullTextSearchTests-acknowledgements.plist new file mode 100644 index 0000000..7acbad1 --- /dev/null +++ b/Pods/Target Support Files/Pods-BasePods-BRFullTextSearchTests/Pods-BasePods-BRFullTextSearchTests-acknowledgements.plist @@ -0,0 +1,29 @@ + + + + + PreferenceSpecifiers + + + FooterText + This application makes use of the following third party libraries: + Title + Acknowledgements + Type + PSGroupSpecifier + + + FooterText + Generated by CocoaPods - https://cocoapods.org + Title + + Type + PSGroupSpecifier + + + StringsTable + Acknowledgements + Title + Acknowledgements + + diff --git a/Pods/Target Support Files/Pods-BasePods-BRFullTextSearchTests/Pods-BasePods-BRFullTextSearchTests-dummy.m b/Pods/Target Support Files/Pods-BasePods-BRFullTextSearchTests/Pods-BasePods-BRFullTextSearchTests-dummy.m new file mode 100644 index 0000000..f4f1f19 --- /dev/null +++ b/Pods/Target Support Files/Pods-BasePods-BRFullTextSearchTests/Pods-BasePods-BRFullTextSearchTests-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Pods_BasePods_BRFullTextSearchTests : NSObject +@end +@implementation PodsDummy_Pods_BasePods_BRFullTextSearchTests +@end diff --git a/Pods/Target Support Files/Pods-BasePods-BRFullTextSearchTests/Pods-BasePods-BRFullTextSearchTests-frameworks.sh b/Pods/Target Support Files/Pods-BasePods-BRFullTextSearchTests/Pods-BasePods-BRFullTextSearchTests-frameworks.sh new file mode 100755 index 0000000..893c16a --- /dev/null +++ b/Pods/Target Support Files/Pods-BasePods-BRFullTextSearchTests/Pods-BasePods-BRFullTextSearchTests-frameworks.sh @@ -0,0 +1,84 @@ +#!/bin/sh +set -e + +echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" +mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + +SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" + +install_framework() +{ + if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then + local source="${BUILT_PRODUCTS_DIR}/$1" + elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then + local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" + elif [ -r "$1" ]; then + local source="$1" + fi + + local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + + if [ -L "${source}" ]; then + echo "Symlinked..." + source="$(readlink "${source}")" + fi + + # use filter instead of exclude so missing patterns dont' throw errors + echo "rsync -av --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" + rsync -av --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" + + local basename + basename="$(basename -s .framework "$1")" + binary="${destination}/${basename}.framework/${basename}" + if ! [ -r "$binary" ]; then + binary="${destination}/${basename}" + fi + + # Strip invalid architectures so "fat" simulator / device frameworks work on device + if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then + strip_invalid_archs "$binary" + fi + + # Resign the code if required by the build settings to avoid unstable apps + code_sign_if_enabled "${destination}/$(basename "$1")" + + # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. + if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then + local swift_runtime_libs + swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) + for lib in $swift_runtime_libs; do + echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" + rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" + code_sign_if_enabled "${destination}/${lib}" + done + fi +} + +# Signs a framework with the provided identity +code_sign_if_enabled() { + if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then + # Use the current code_sign_identitiy + echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" + echo "/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements \"$1\"" + /usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements "$1" + fi +} + +# Strip invalid architectures +strip_invalid_archs() { + binary="$1" + # Get architectures for current file + archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)" + stripped="" + for arch in $archs; do + if ! [[ "${VALID_ARCHS}" == *"$arch"* ]]; then + # Strip non-valid architectures in-place + lipo -remove "$arch" -output "$binary" "$binary" || exit 1 + stripped="$stripped $arch" + fi + done + if [[ "$stripped" ]]; then + echo "Stripped $binary of architectures:$stripped" + fi +} + diff --git a/Pods/Target Support Files/Pods-BasePods-BRFullTextSearchTests/Pods-BasePods-BRFullTextSearchTests-resources.sh b/Pods/Target Support Files/Pods-BasePods-BRFullTextSearchTests/Pods-BasePods-BRFullTextSearchTests-resources.sh new file mode 100755 index 0000000..59077e2 --- /dev/null +++ b/Pods/Target Support Files/Pods-BasePods-BRFullTextSearchTests/Pods-BasePods-BRFullTextSearchTests-resources.sh @@ -0,0 +1,96 @@ +#!/bin/sh +set -e + +mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + +RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt +> "$RESOURCES_TO_COPY" + +XCASSET_FILES=() + +case "${TARGETED_DEVICE_FAMILY}" in + 1,2) + TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" + ;; + 1) + TARGET_DEVICE_ARGS="--target-device iphone" + ;; + 2) + TARGET_DEVICE_ARGS="--target-device ipad" + ;; + *) + TARGET_DEVICE_ARGS="--target-device mac" + ;; +esac + +install_resource() +{ + if [[ "$1" = /* ]] ; then + RESOURCE_PATH="$1" + else + RESOURCE_PATH="${PODS_ROOT}/$1" + fi + if [[ ! -e "$RESOURCE_PATH" ]] ; then + cat << EOM +error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. +EOM + exit 1 + fi + case $RESOURCE_PATH in + *.storyboard) + echo "ibtool --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" + ibtool --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} + ;; + *.xib) + echo "ibtool --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" + ibtool --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} + ;; + *.framework) + echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + echo "rsync -av $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + rsync -av "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + ;; + *.xcdatamodel) + echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" + xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" + ;; + *.xcdatamodeld) + echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" + xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" + ;; + *.xcmappingmodel) + echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" + xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" + ;; + *.xcassets) + ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH" + XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") + ;; + *) + echo "$RESOURCE_PATH" + echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" + ;; + esac +} + +mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then + mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +fi +rm -f "$RESOURCES_TO_COPY" + +if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] +then + # Find all other xcassets (this unfortunately includes those of path pods and other targets). + OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) + while read line; do + if [[ $line != "${PODS_ROOT}*" ]]; then + XCASSET_FILES+=("$line") + fi + done <<<"$OTHER_XCASSETS" + + printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +fi diff --git a/Pods/Target Support Files/Pods-BasePods-BRFullTextSearchTests/Pods-BasePods-BRFullTextSearchTests.debug.xcconfig b/Pods/Target Support Files/Pods-BasePods-BRFullTextSearchTests/Pods-BasePods-BRFullTextSearchTests.debug.xcconfig new file mode 100644 index 0000000..5de0dae --- /dev/null +++ b/Pods/Target Support Files/Pods-BasePods-BRFullTextSearchTests/Pods-BasePods-BRFullTextSearchTests.debug.xcconfig @@ -0,0 +1,9 @@ +ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 _WCHAR_H_CPLUSPLUS_98_CONFORMANCE_ +HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/BRCLucene" +LIBRARY_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/BRCLucene-iOS" +OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/BRCLucene" +OTHER_LDFLAGS = $(inherited) -ObjC -l"BRCLucene-iOS" -l"c++" -l"z" +PODS_BUILD_DIR = $BUILD_DIR +PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT}/Pods diff --git a/Pods/Target Support Files/Pods-BasePods-BRFullTextSearchTests/Pods-BasePods-BRFullTextSearchTests.release.xcconfig b/Pods/Target Support Files/Pods-BasePods-BRFullTextSearchTests/Pods-BasePods-BRFullTextSearchTests.release.xcconfig new file mode 100644 index 0000000..5de0dae --- /dev/null +++ b/Pods/Target Support Files/Pods-BasePods-BRFullTextSearchTests/Pods-BasePods-BRFullTextSearchTests.release.xcconfig @@ -0,0 +1,9 @@ +ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 _WCHAR_H_CPLUSPLUS_98_CONFORMANCE_ +HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/BRCLucene" +LIBRARY_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/BRCLucene-iOS" +OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/BRCLucene" +OTHER_LDFLAGS = $(inherited) -ObjC -l"BRCLucene-iOS" -l"c++" -l"z" +PODS_BUILD_DIR = $BUILD_DIR +PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT}/Pods diff --git a/README.md b/README.md index 2928c25..7827ed5 100644 --- a/README.md +++ b/README.md @@ -33,13 +33,10 @@ id results = [service search:@"special"]; # Sample projects -There are several sample projects included in the source distribution: +There are some sample projects included in the source distribution: * [SampleCocoaPodsProject](SampleCocoaPodsProject/) - a Core Data based iOS application using CocoaPods integration - * [SampleCoreDataProject](SampleCoreDataProject/) - a Core Data based iOS application using dependent project integration - * [SampleDependentProject](SampleDependentProject) - a basic iOS application using dependent project integration * [SampleOSXCocoaPodsProject](SampleOSXCocoaPodsProject/) - a Core Data based OS X application using CocoaPods integration - * [SampleStaticLibraryProject](SampleStaticLibraryProject/) - a basic iOS application using static library integration # Predicate queries @@ -140,10 +137,10 @@ id service = ...; It's pretty easy to integrate BRFullTextSearch with Core Data, to maintain a search index while changes are persisted in Core Data. One way is to listen for the `NSManagedObjectContextDidSaveNotification` notification and process Core Data -changes as index delete and update operations. The **SampleCoreDataProject** iOS project +changes as index delete and update operations. The **SampleCocoaPodsProject** iOS project contains an example of this integration. The app allows you to create small _sticky notes_ and search the text of those notes. See the -[CoreDataManager](SampleCoreDataProject/SampleCoreDataProject/CoreDataManager.m) class in the sample +[CoreDataManager](SampleCocoaPodsProject/SampleCocoaPodsProject/CoreDataManager.m) class in the sample project, whose `maintainSearchIndexFromManagedObjectDidSave:` method handles this. The **SampleOSXCocoaPodsProject** OS X project also contains an example of this integration. @@ -169,7 +166,7 @@ Change to the directory of your Xcode project, and create a file named `Podfile` contents similar to this: platform :ios, '5.0' - pod 'BRFullTextSearch', '~> 1.0' + pod 'BRFullTextSearch', '~> 2.0' Install into your project: @@ -182,26 +179,10 @@ Open your project in Xcode using the **.xcworkspace** file CocoaPods generated. **Note:** the `use_frameworks!` option is not supported, see #4. Any pull requests to allow for building as a dynamic framework are very welcome! -**Note:** CocoaPods as of version 0.39 might not produce a valid project for this pod. -You can work around it by running `pod` like this: - -``` bash -$ COCOAPODS_DISABLE_DETERMINISTIC_UUIDS=YES pod install -``` -or you can manually modify the target membership of any files that are the cause of linker -errors to be included in the `BRFullTextSearch` target in Xcode. - ## via static framework Using this approach you'll build a static library framework that you can manually -integrate into your own project. After cloning the BRFullTextSearch repository, -first initialize git submodules. For example: - - git clone https://github.com/Blue-Rocket/BRFullTextSearch.git - cd BRFullTextSearch - git submodule update --init - -This will pull in the relevant submodules, e.g. CLucene. +integrate into your own project. The BRFullTextSearch Xcode project includes a target called **BRFullTextSearch.framework** that builds a static library framework. Build that @@ -214,10 +195,10 @@ clicking the **+** button in the **Link Binary With Libraries** section of the **Build Phases** tab in the project settings: * libz - * libstdc++ + * libc++ Next, add `-ObjC` as an *Other Linker Flags* build setting. If you do not have any -C++ sources in your project, you probably also need to add `-stdlib=libstdc++` to +C++ sources in your project, you probably also need to add `-stdlib=libc++` to this setting as well. Finally, you'll need to add the path to the directory containing the @@ -229,40 +210,3 @@ set up using the static library framework integration approach. You must build **BRFullTextSearch.framework** first, then open this project. When you run the project, it will index a set of documents using some Latin text. You can then search for latin words using a simple UI. - -## via dependent project - -Another way you can integrate BRFullTextSearch into your project is to add the -BRFullTextSearch Xcode project as a dependent project of your project. The -BRFullTextSearch Xcode project includes a target called **BRFullTextSearch** that -builds a static library. You can use that target as a dependency in your own project. - -After cloning the BRFullTextSearch repository, first initialize git submodules. For -example: - - git clone https://github.com/Blue-Rocket/BRFullTextSearch.git - cd BRFullTextSearch - git submodule update --init - -This will pull in the relevant submodules, e.g. CLucene. - -Then drag the **BRFullTextSearch.xcodeproj** onto your project in the Project -Navigator. Then go to the **Build Phases** tab of your project's settings. Expand the -**Target Dependencies** section and click the **+** button. You should see the -**BRFullTextSearch** static library target as an available option. Select that and -click the **Add** button. - -You must also add the following linker build dependencies, which you can do by -clicking the **+** button in the **Link Binary With Libraries** section of the -**Build Phases** tab in the project settings: - - * libz - * libstdc++ - -Next, add `-ObjC` as an *Other Linker Flags* build setting. - -Finally, you'll need to add the path to the directory containing the -*BRFullTextSearch.xcodeproj* file as a **Header Search Paths** value in the **Build -Settings** tab of the project settings. If you have added BRFullTextSearch as a git -submodule to your own project, then the path might be something like -**"$(PROJECT_DIR)/../BRFullTextSearch"**. diff --git a/SampleCocoaPodsProject/Podfile b/SampleCocoaPodsProject/Podfile index f6da575..10c5704 100644 --- a/SampleCocoaPodsProject/Podfile +++ b/SampleCocoaPodsProject/Podfile @@ -4,5 +4,7 @@ platform :ios, '7.0' inhibit_all_warnings! -pod 'BRFullTextSearch', :path => '../' -pod 'MagicalRecord', '2.2' +target :SampleCocoaPodsProject do + pod 'BRFullTextSearch', :path => '../' + pod 'MagicalRecord', '2.2' +end diff --git a/SampleCocoaPodsProject/Podfile.lock b/SampleCocoaPodsProject/Podfile.lock index 7af7872..14f3893 100644 --- a/SampleCocoaPodsProject/Podfile.lock +++ b/SampleCocoaPodsProject/Podfile.lock @@ -1,28 +1,30 @@ PODS: - - BRFullTextSearch (1.1.0): - - BRFullTextSearch/Core (= 1.1.0) - - BRFullTextSearch/API (1.1.0) - - BRFullTextSearch/CLucene (1.1.0): - - BRFullTextSearch/CLucene-Contribs-Lib - - BRFullTextSearch/CLucene-Core - - BRFullTextSearch/CLucene-Shared - - BRFullTextSearch/CLucene-Config (1.1.0) - - BRFullTextSearch/CLucene-Contribs-Lib (1.1.0): - - BRFullTextSearch/CLucene-Core - - BRFullTextSearch/CLucene-Shared - - BRFullTextSearch/CLucene-Core (1.1.0): - - BRFullTextSearch/CLucene-Core-API - - BRFullTextSearch/CLucene-Shared - - BRFullTextSearch/CLucene-Core-API (1.1.0): - - BRFullTextSearch/CLucene-Config - - BRFullTextSearch/CLucene-Shared (1.1.0): - - BRFullTextSearch/CLucene-Core-API - - BRFullTextSearch/Core (1.1.0): + - BRCLucene (0.1.0): + - BRCLucene/CLucene (= 0.1.0) + - BRCLucene/CLucene (0.1.0): + - BRCLucene/CLucene-Contribs-Lib + - BRCLucene/CLucene-Core + - BRCLucene/CLucene-Shared + - BRCLucene/CLucene-Config (0.1.0) + - BRCLucene/CLucene-Contribs-Lib (0.1.0): + - BRCLucene/CLucene-Core + - BRCLucene/CLucene-Shared + - BRCLucene/CLucene-Core (0.1.0): + - BRCLucene/CLucene-Core-API + - BRCLucene/CLucene-Shared + - BRCLucene/CLucene-Core-API (0.1.0): + - BRCLucene/CLucene-Config + - BRCLucene/CLucene-Shared (0.1.0): + - BRCLucene/CLucene-Core-API + - BRFullTextSearch (2.0.0): + - BRFullTextSearch/Core (= 2.0.0) + - BRFullTextSearch/API (2.0.0) + - BRFullTextSearch/Core (2.0.0): - BRFullTextSearch/API - BRFullTextSearch/Implementation-CLucene - - BRFullTextSearch/Implementation-CLucene (1.1.0): + - BRFullTextSearch/Implementation-CLucene (2.0.0): + - BRCLucene (< 2.0) - BRFullTextSearch/API - - BRFullTextSearch/CLucene - MagicalRecord (2.2): - MagicalRecord/Core (= 2.2) - MagicalRecord/Core (2.2) @@ -36,7 +38,10 @@ EXTERNAL SOURCES: :path: ../ SPEC CHECKSUMS: - BRFullTextSearch: d865ee81c77daece2fa1dd25bad951de5290b848 + BRCLucene: 1035562d82d9bdad637ce0991b0b8ef4f8720ce3 + BRFullTextSearch: 5f5ee65e1e8a26c5743664361c1008d1f16b6983 MagicalRecord: 2dc87179ae7c1f2a274442624ec65a07d4357a6f -COCOAPODS: 0.39.0 +PODFILE CHECKSUM: da9c2e42421055fb31e54963a997135e5ba06d73 + +COCOAPODS: 1.1.1 diff --git a/SampleCocoaPodsProject/SampleCocoaPodsProject.xcodeproj/project.pbxproj b/SampleCocoaPodsProject/SampleCocoaPodsProject.xcodeproj/project.pbxproj index 40f1c3c..1fe2a08 100644 --- a/SampleCocoaPodsProject/SampleCocoaPodsProject.xcodeproj/project.pbxproj +++ b/SampleCocoaPodsProject/SampleCocoaPodsProject.xcodeproj/project.pbxproj @@ -21,12 +21,12 @@ C9D34825192413830021FF0B /* StickyNote.m in Sources */ = {isa = PBXBuildFile; fileRef = C9D3481D192413830021FF0B /* StickyNote.m */; }; C9D34826192413830021FF0B /* StickyNoteListViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C9D3481F192413830021FF0B /* StickyNoteListViewController.m */; }; C9D34827192413830021FF0B /* StickyNoteViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C9D34821192413830021FF0B /* StickyNoteViewController.m */; }; - EA838DCEC4BB4D0AE5A719D3 /* libPods.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 93862DD2F770400AB73C2C7B /* libPods.a */; }; + CB1CD2ACB0D66030AEE4BD1E /* libPods-SampleCocoaPodsProject.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 983A03669FF6F19DE8B5D57B /* libPods-SampleCocoaPodsProject.a */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ - 1178D11A65828B4C3B41DDE8 /* Pods.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.debug.xcconfig; path = "Pods/Target Support Files/Pods/Pods.debug.xcconfig"; sourceTree = ""; }; - 93862DD2F770400AB73C2C7B /* libPods.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libPods.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 983A03669FF6F19DE8B5D57B /* libPods-SampleCocoaPodsProject.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-SampleCocoaPodsProject.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + B41D7DB4D48C3FBD297C65BC /* Pods-SampleCocoaPodsProject.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SampleCocoaPodsProject.debug.xcconfig"; path = "Pods/Target Support Files/Pods-SampleCocoaPodsProject/Pods-SampleCocoaPodsProject.debug.xcconfig"; sourceTree = ""; }; C9D347CF192412DF0021FF0B /* SampleCocoaPodsProject.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SampleCocoaPodsProject.app; sourceTree = BUILT_PRODUCTS_DIR; }; C9D347D2192412DF0021FF0B /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; C9D347D4192412DF0021FF0B /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; @@ -51,7 +51,7 @@ C9D3481F192413830021FF0B /* StickyNoteListViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = StickyNoteListViewController.m; sourceTree = ""; }; C9D34820192413830021FF0B /* StickyNoteViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StickyNoteViewController.h; sourceTree = ""; }; C9D34821192413830021FF0B /* StickyNoteViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = StickyNoteViewController.m; sourceTree = ""; }; - DB47DD24440F6CEAEA80E5C9 /* Pods.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.release.xcconfig; path = "Pods/Target Support Files/Pods/Pods.release.xcconfig"; sourceTree = ""; }; + D3E41D2FE71BF80F209C0684 /* Pods-SampleCocoaPodsProject.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SampleCocoaPodsProject.release.xcconfig"; path = "Pods/Target Support Files/Pods-SampleCocoaPodsProject/Pods-SampleCocoaPodsProject.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -62,18 +62,18 @@ C9D347D5192412DF0021FF0B /* CoreGraphics.framework in Frameworks */, C9D347D7192412DF0021FF0B /* UIKit.framework in Frameworks */, C9D347D3192412DF0021FF0B /* Foundation.framework in Frameworks */, - EA838DCEC4BB4D0AE5A719D3 /* libPods.a in Frameworks */, + CB1CD2ACB0D66030AEE4BD1E /* libPods-SampleCocoaPodsProject.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 4702EABB7E8E03A74F2AB626 /* Pods */ = { + 15CA0555351E061D76A15175 /* Pods */ = { isa = PBXGroup; children = ( - 1178D11A65828B4C3B41DDE8 /* Pods.debug.xcconfig */, - DB47DD24440F6CEAEA80E5C9 /* Pods.release.xcconfig */, + B41D7DB4D48C3FBD297C65BC /* Pods-SampleCocoaPodsProject.debug.xcconfig */, + D3E41D2FE71BF80F209C0684 /* Pods-SampleCocoaPodsProject.release.xcconfig */, ); name = Pods; sourceTree = ""; @@ -94,7 +94,7 @@ C9D347D8192412DF0021FF0B /* SampleCocoaPodsProject */, C9D347D1192412DF0021FF0B /* Frameworks */, C9D347D0192412DF0021FF0B /* Products */, - 4702EABB7E8E03A74F2AB626 /* Pods */, + 15CA0555351E061D76A15175 /* Pods */, ); sourceTree = ""; }; @@ -113,7 +113,7 @@ C9D347D4192412DF0021FF0B /* CoreGraphics.framework */, C9D347D6192412DF0021FF0B /* UIKit.framework */, C9D347F1192412DF0021FF0B /* XCTest.framework */, - 93862DD2F770400AB73C2C7B /* libPods.a */, + 983A03669FF6F19DE8B5D57B /* libPods-SampleCocoaPodsProject.a */, ); name = Frameworks; sourceTree = ""; @@ -157,12 +157,12 @@ isa = PBXNativeTarget; buildConfigurationList = C9D34801192412DF0021FF0B /* Build configuration list for PBXNativeTarget "SampleCocoaPodsProject" */; buildPhases = ( - 50FBCD46A9AD4D449A0CA2DE /* Check Pods Manifest.lock */, + 8DC5BF17F658D6A185152324 /* [CP] Check Pods Manifest.lock */, C9D347CB192412DF0021FF0B /* Sources */, C9D347CC192412DF0021FF0B /* Frameworks */, C9D347CD192412DF0021FF0B /* Resources */, - 0D1275ABF81240DE8C7BDDA0 /* Copy Pods Resources */, - C1ED7AF19AC72C71D482605C /* Embed Pods Frameworks */, + 2D0DCC0677E43E128A711E5E /* [CP] Embed Pods Frameworks */, + 4D95BD6881C61DD929C4CEE4 /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -214,49 +214,49 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 0D1275ABF81240DE8C7BDDA0 /* Copy Pods Resources */ = { + 2D0DCC0677E43E128A711E5E /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); - name = "Copy Pods Resources"; + name = "[CP] Embed Pods Frameworks"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods/Pods-resources.sh\"\n"; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-SampleCocoaPodsProject/Pods-SampleCocoaPodsProject-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 50FBCD46A9AD4D449A0CA2DE /* Check Pods Manifest.lock */ = { + 4D95BD6881C61DD929C4CEE4 /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); - name = "Check Pods Manifest.lock"; + name = "[CP] Copy Pods Resources"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-SampleCocoaPodsProject/Pods-SampleCocoaPodsProject-resources.sh\"\n"; showEnvVarsInLog = 0; }; - C1ED7AF19AC72C71D482605C /* Embed Pods Frameworks */ = { + 8DC5BF17F658D6A185152324 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); - name = "Embed Pods Frameworks"; + name = "[CP] Check Pods Manifest.lock"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods/Pods-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -372,7 +372,7 @@ }; C9D34802192412DF0021FF0B /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1178D11A65828B4C3B41DDE8 /* Pods.debug.xcconfig */; + baseConfigurationReference = B41D7DB4D48C3FBD297C65BC /* Pods-SampleCocoaPodsProject.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; @@ -388,7 +388,7 @@ }; C9D34803192412DF0021FF0B /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = DB47DD24440F6CEAEA80E5C9 /* Pods.release.xcconfig */; + baseConfigurationReference = D3E41D2FE71BF80F209C0684 /* Pods-SampleCocoaPodsProject.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; diff --git a/SampleCoreDataProject/Podfile b/SampleCoreDataProject/Podfile deleted file mode 100644 index b45cb33..0000000 --- a/SampleCoreDataProject/Podfile +++ /dev/null @@ -1,3 +0,0 @@ -platform :ios, '7.0' - -pod 'MagicalRecord', '~> 2.2', :inhibit_warnings => true diff --git a/SampleCoreDataProject/Podfile.lock b/SampleCoreDataProject/Podfile.lock deleted file mode 100644 index 31a2df0..0000000 --- a/SampleCoreDataProject/Podfile.lock +++ /dev/null @@ -1,12 +0,0 @@ -PODS: - - MagicalRecord (2.2): - - MagicalRecord/Core (= 2.2) - - MagicalRecord/Core (2.2) - -DEPENDENCIES: - - MagicalRecord (~> 2.2) - -SPEC CHECKSUMS: - MagicalRecord: 2b471584fc9e3137f3d0a56967917baa4979e224 - -COCOAPODS: 0.35.0 diff --git a/SampleCoreDataProject/Pods/Headers/Build/MagicalRecord/CoreData+MagicalRecord.h b/SampleCoreDataProject/Pods/Headers/Build/MagicalRecord/CoreData+MagicalRecord.h deleted file mode 120000 index 837f543..0000000 --- a/SampleCoreDataProject/Pods/Headers/Build/MagicalRecord/CoreData+MagicalRecord.h +++ /dev/null @@ -1 +0,0 @@ -../../../MagicalRecord/MagicalRecord/CoreData+MagicalRecord.h \ No newline at end of file diff --git a/SampleCoreDataProject/Pods/Headers/Build/MagicalRecord/MagicalImportFunctions.h b/SampleCoreDataProject/Pods/Headers/Build/MagicalRecord/MagicalImportFunctions.h deleted file mode 120000 index bc1f0d7..0000000 --- a/SampleCoreDataProject/Pods/Headers/Build/MagicalRecord/MagicalImportFunctions.h +++ /dev/null @@ -1 +0,0 @@ -../../../MagicalRecord/MagicalRecord/Categories/DataImport/MagicalImportFunctions.h \ No newline at end of file diff --git a/SampleCoreDataProject/Pods/Headers/Build/MagicalRecord/MagicalRecord+Actions.h b/SampleCoreDataProject/Pods/Headers/Build/MagicalRecord/MagicalRecord+Actions.h deleted file mode 120000 index f8a94dc..0000000 --- a/SampleCoreDataProject/Pods/Headers/Build/MagicalRecord/MagicalRecord+Actions.h +++ /dev/null @@ -1 +0,0 @@ -../../../MagicalRecord/MagicalRecord/Core/MagicalRecord+Actions.h \ No newline at end of file diff --git a/SampleCoreDataProject/Pods/Headers/Build/MagicalRecord/MagicalRecord+ErrorHandling.h b/SampleCoreDataProject/Pods/Headers/Build/MagicalRecord/MagicalRecord+ErrorHandling.h deleted file mode 120000 index 96e58a2..0000000 --- a/SampleCoreDataProject/Pods/Headers/Build/MagicalRecord/MagicalRecord+ErrorHandling.h +++ /dev/null @@ -1 +0,0 @@ -../../../MagicalRecord/MagicalRecord/Core/MagicalRecord+ErrorHandling.h \ No newline at end of file diff --git a/SampleCoreDataProject/Pods/Headers/Build/MagicalRecord/MagicalRecord+Options.h b/SampleCoreDataProject/Pods/Headers/Build/MagicalRecord/MagicalRecord+Options.h deleted file mode 120000 index 0ac9163..0000000 --- a/SampleCoreDataProject/Pods/Headers/Build/MagicalRecord/MagicalRecord+Options.h +++ /dev/null @@ -1 +0,0 @@ -../../../MagicalRecord/MagicalRecord/Core/MagicalRecord+Options.h \ No newline at end of file diff --git a/SampleCoreDataProject/Pods/Headers/Build/MagicalRecord/MagicalRecord+Setup.h b/SampleCoreDataProject/Pods/Headers/Build/MagicalRecord/MagicalRecord+Setup.h deleted file mode 120000 index 7ff7580..0000000 --- a/SampleCoreDataProject/Pods/Headers/Build/MagicalRecord/MagicalRecord+Setup.h +++ /dev/null @@ -1 +0,0 @@ -../../../MagicalRecord/MagicalRecord/Core/MagicalRecord+Setup.h \ No newline at end of file diff --git a/SampleCoreDataProject/Pods/Headers/Build/MagicalRecord/MagicalRecord+ShorthandSupport.h b/SampleCoreDataProject/Pods/Headers/Build/MagicalRecord/MagicalRecord+ShorthandSupport.h deleted file mode 120000 index cdb8e8a..0000000 --- a/SampleCoreDataProject/Pods/Headers/Build/MagicalRecord/MagicalRecord+ShorthandSupport.h +++ /dev/null @@ -1 +0,0 @@ -../../../MagicalRecord/MagicalRecord/Core/MagicalRecord+ShorthandSupport.h \ No newline at end of file diff --git a/SampleCoreDataProject/Pods/Headers/Build/MagicalRecord/MagicalRecord+iCloud.h b/SampleCoreDataProject/Pods/Headers/Build/MagicalRecord/MagicalRecord+iCloud.h deleted file mode 120000 index 02f6d09..0000000 --- a/SampleCoreDataProject/Pods/Headers/Build/MagicalRecord/MagicalRecord+iCloud.h +++ /dev/null @@ -1 +0,0 @@ -../../../MagicalRecord/MagicalRecord/Core/MagicalRecord+iCloud.h \ No newline at end of file diff --git a/SampleCoreDataProject/Pods/Headers/Build/MagicalRecord/MagicalRecord.h b/SampleCoreDataProject/Pods/Headers/Build/MagicalRecord/MagicalRecord.h deleted file mode 120000 index 21e45f4..0000000 --- a/SampleCoreDataProject/Pods/Headers/Build/MagicalRecord/MagicalRecord.h +++ /dev/null @@ -1 +0,0 @@ -../../../MagicalRecord/MagicalRecord/Core/MagicalRecord.h \ No newline at end of file diff --git a/SampleCoreDataProject/Pods/Headers/Build/MagicalRecord/MagicalRecordShorthand.h b/SampleCoreDataProject/Pods/Headers/Build/MagicalRecord/MagicalRecordShorthand.h deleted file mode 120000 index eba9cd6..0000000 --- a/SampleCoreDataProject/Pods/Headers/Build/MagicalRecord/MagicalRecordShorthand.h +++ /dev/null @@ -1 +0,0 @@ -../../../MagicalRecord/MagicalRecord/Core/MagicalRecordShorthand.h \ No newline at end of file diff --git a/SampleCoreDataProject/Pods/Headers/Build/MagicalRecord/NSAttributeDescription+MagicalDataImport.h b/SampleCoreDataProject/Pods/Headers/Build/MagicalRecord/NSAttributeDescription+MagicalDataImport.h deleted file mode 120000 index 6460e42..0000000 --- a/SampleCoreDataProject/Pods/Headers/Build/MagicalRecord/NSAttributeDescription+MagicalDataImport.h +++ /dev/null @@ -1 +0,0 @@ -../../../MagicalRecord/MagicalRecord/Categories/DataImport/NSAttributeDescription+MagicalDataImport.h \ No newline at end of file diff --git a/SampleCoreDataProject/Pods/Headers/Build/MagicalRecord/NSEntityDescription+MagicalDataImport.h b/SampleCoreDataProject/Pods/Headers/Build/MagicalRecord/NSEntityDescription+MagicalDataImport.h deleted file mode 120000 index c9a76c1..0000000 --- a/SampleCoreDataProject/Pods/Headers/Build/MagicalRecord/NSEntityDescription+MagicalDataImport.h +++ /dev/null @@ -1 +0,0 @@ -../../../MagicalRecord/MagicalRecord/Categories/DataImport/NSEntityDescription+MagicalDataImport.h \ No newline at end of file diff --git a/SampleCoreDataProject/Pods/Headers/Build/MagicalRecord/NSManagedObject+MagicalAggregation.h b/SampleCoreDataProject/Pods/Headers/Build/MagicalRecord/NSManagedObject+MagicalAggregation.h deleted file mode 120000 index fe3e64b..0000000 --- a/SampleCoreDataProject/Pods/Headers/Build/MagicalRecord/NSManagedObject+MagicalAggregation.h +++ /dev/null @@ -1 +0,0 @@ -../../../MagicalRecord/MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalAggregation.h \ No newline at end of file diff --git a/SampleCoreDataProject/Pods/Headers/Build/MagicalRecord/NSManagedObject+MagicalDataImport.h b/SampleCoreDataProject/Pods/Headers/Build/MagicalRecord/NSManagedObject+MagicalDataImport.h deleted file mode 120000 index f79c498..0000000 --- a/SampleCoreDataProject/Pods/Headers/Build/MagicalRecord/NSManagedObject+MagicalDataImport.h +++ /dev/null @@ -1 +0,0 @@ -../../../MagicalRecord/MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalDataImport.h \ No newline at end of file diff --git a/SampleCoreDataProject/Pods/Headers/Build/MagicalRecord/NSManagedObject+MagicalFinders.h b/SampleCoreDataProject/Pods/Headers/Build/MagicalRecord/NSManagedObject+MagicalFinders.h deleted file mode 120000 index ef62d1f..0000000 --- a/SampleCoreDataProject/Pods/Headers/Build/MagicalRecord/NSManagedObject+MagicalFinders.h +++ /dev/null @@ -1 +0,0 @@ -../../../MagicalRecord/MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalFinders.h \ No newline at end of file diff --git a/SampleCoreDataProject/Pods/Headers/Build/MagicalRecord/NSManagedObject+MagicalRecord.h b/SampleCoreDataProject/Pods/Headers/Build/MagicalRecord/NSManagedObject+MagicalRecord.h deleted file mode 120000 index e3e3f5c..0000000 --- a/SampleCoreDataProject/Pods/Headers/Build/MagicalRecord/NSManagedObject+MagicalRecord.h +++ /dev/null @@ -1 +0,0 @@ -../../../MagicalRecord/MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalRecord.h \ No newline at end of file diff --git a/SampleCoreDataProject/Pods/Headers/Build/MagicalRecord/NSManagedObject+MagicalRequests.h b/SampleCoreDataProject/Pods/Headers/Build/MagicalRecord/NSManagedObject+MagicalRequests.h deleted file mode 120000 index 9d4489a..0000000 --- a/SampleCoreDataProject/Pods/Headers/Build/MagicalRecord/NSManagedObject+MagicalRequests.h +++ /dev/null @@ -1 +0,0 @@ -../../../MagicalRecord/MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalRequests.h \ No newline at end of file diff --git a/SampleCoreDataProject/Pods/Headers/Build/MagicalRecord/NSManagedObjectContext+MagicalObserving.h b/SampleCoreDataProject/Pods/Headers/Build/MagicalRecord/NSManagedObjectContext+MagicalObserving.h deleted file mode 120000 index 4148256..0000000 --- a/SampleCoreDataProject/Pods/Headers/Build/MagicalRecord/NSManagedObjectContext+MagicalObserving.h +++ /dev/null @@ -1 +0,0 @@ -../../../MagicalRecord/MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalObserving.h \ No newline at end of file diff --git a/SampleCoreDataProject/Pods/Headers/Build/MagicalRecord/NSManagedObjectContext+MagicalRecord.h b/SampleCoreDataProject/Pods/Headers/Build/MagicalRecord/NSManagedObjectContext+MagicalRecord.h deleted file mode 120000 index a4b07c1..0000000 --- a/SampleCoreDataProject/Pods/Headers/Build/MagicalRecord/NSManagedObjectContext+MagicalRecord.h +++ /dev/null @@ -1 +0,0 @@ -../../../MagicalRecord/MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalRecord.h \ No newline at end of file diff --git a/SampleCoreDataProject/Pods/Headers/Build/MagicalRecord/NSManagedObjectContext+MagicalSaves.h b/SampleCoreDataProject/Pods/Headers/Build/MagicalRecord/NSManagedObjectContext+MagicalSaves.h deleted file mode 120000 index 070ea25..0000000 --- a/SampleCoreDataProject/Pods/Headers/Build/MagicalRecord/NSManagedObjectContext+MagicalSaves.h +++ /dev/null @@ -1 +0,0 @@ -../../../MagicalRecord/MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalSaves.h \ No newline at end of file diff --git a/SampleCoreDataProject/Pods/Headers/Build/MagicalRecord/NSManagedObjectContext+MagicalThreading.h b/SampleCoreDataProject/Pods/Headers/Build/MagicalRecord/NSManagedObjectContext+MagicalThreading.h deleted file mode 120000 index 83f6359..0000000 --- a/SampleCoreDataProject/Pods/Headers/Build/MagicalRecord/NSManagedObjectContext+MagicalThreading.h +++ /dev/null @@ -1 +0,0 @@ -../../../MagicalRecord/MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalThreading.h \ No newline at end of file diff --git a/SampleCoreDataProject/Pods/Headers/Build/MagicalRecord/NSManagedObjectModel+MagicalRecord.h b/SampleCoreDataProject/Pods/Headers/Build/MagicalRecord/NSManagedObjectModel+MagicalRecord.h deleted file mode 120000 index 7fb5863..0000000 --- a/SampleCoreDataProject/Pods/Headers/Build/MagicalRecord/NSManagedObjectModel+MagicalRecord.h +++ /dev/null @@ -1 +0,0 @@ -../../../MagicalRecord/MagicalRecord/Categories/NSManagedObjectModel+MagicalRecord.h \ No newline at end of file diff --git a/SampleCoreDataProject/Pods/Headers/Build/MagicalRecord/NSNumber+MagicalDataImport.h b/SampleCoreDataProject/Pods/Headers/Build/MagicalRecord/NSNumber+MagicalDataImport.h deleted file mode 120000 index efda51f..0000000 --- a/SampleCoreDataProject/Pods/Headers/Build/MagicalRecord/NSNumber+MagicalDataImport.h +++ /dev/null @@ -1 +0,0 @@ -../../../MagicalRecord/MagicalRecord/Categories/DataImport/NSNumber+MagicalDataImport.h \ No newline at end of file diff --git a/SampleCoreDataProject/Pods/Headers/Build/MagicalRecord/NSObject+MagicalDataImport.h b/SampleCoreDataProject/Pods/Headers/Build/MagicalRecord/NSObject+MagicalDataImport.h deleted file mode 120000 index e529ae9..0000000 --- a/SampleCoreDataProject/Pods/Headers/Build/MagicalRecord/NSObject+MagicalDataImport.h +++ /dev/null @@ -1 +0,0 @@ -../../../MagicalRecord/MagicalRecord/Categories/DataImport/NSObject+MagicalDataImport.h \ No newline at end of file diff --git a/SampleCoreDataProject/Pods/Headers/Build/MagicalRecord/NSPersistentStore+MagicalRecord.h b/SampleCoreDataProject/Pods/Headers/Build/MagicalRecord/NSPersistentStore+MagicalRecord.h deleted file mode 120000 index 301e167..0000000 --- a/SampleCoreDataProject/Pods/Headers/Build/MagicalRecord/NSPersistentStore+MagicalRecord.h +++ /dev/null @@ -1 +0,0 @@ -../../../MagicalRecord/MagicalRecord/Categories/NSPersistentStore+MagicalRecord.h \ No newline at end of file diff --git a/SampleCoreDataProject/Pods/Headers/Build/MagicalRecord/NSPersistentStoreCoordinator+MagicalRecord.h b/SampleCoreDataProject/Pods/Headers/Build/MagicalRecord/NSPersistentStoreCoordinator+MagicalRecord.h deleted file mode 120000 index bc69026..0000000 --- a/SampleCoreDataProject/Pods/Headers/Build/MagicalRecord/NSPersistentStoreCoordinator+MagicalRecord.h +++ /dev/null @@ -1 +0,0 @@ -../../../MagicalRecord/MagicalRecord/Categories/NSPersistentStoreCoordinator+MagicalRecord.h \ No newline at end of file diff --git a/SampleCoreDataProject/Pods/Headers/Build/MagicalRecord/NSRelationshipDescription+MagicalDataImport.h b/SampleCoreDataProject/Pods/Headers/Build/MagicalRecord/NSRelationshipDescription+MagicalDataImport.h deleted file mode 120000 index a77c3b8..0000000 --- a/SampleCoreDataProject/Pods/Headers/Build/MagicalRecord/NSRelationshipDescription+MagicalDataImport.h +++ /dev/null @@ -1 +0,0 @@ -../../../MagicalRecord/MagicalRecord/Categories/DataImport/NSRelationshipDescription+MagicalDataImport.h \ No newline at end of file diff --git a/SampleCoreDataProject/Pods/Headers/Build/MagicalRecord/NSString+MagicalDataImport.h b/SampleCoreDataProject/Pods/Headers/Build/MagicalRecord/NSString+MagicalDataImport.h deleted file mode 120000 index d4b6ccf..0000000 --- a/SampleCoreDataProject/Pods/Headers/Build/MagicalRecord/NSString+MagicalDataImport.h +++ /dev/null @@ -1 +0,0 @@ -../../../MagicalRecord/MagicalRecord/Categories/DataImport/NSString+MagicalDataImport.h \ No newline at end of file diff --git a/SampleCoreDataProject/Pods/Headers/Public/MagicalRecord/CoreData+MagicalRecord.h b/SampleCoreDataProject/Pods/Headers/Public/MagicalRecord/CoreData+MagicalRecord.h deleted file mode 120000 index 837f543..0000000 --- a/SampleCoreDataProject/Pods/Headers/Public/MagicalRecord/CoreData+MagicalRecord.h +++ /dev/null @@ -1 +0,0 @@ -../../../MagicalRecord/MagicalRecord/CoreData+MagicalRecord.h \ No newline at end of file diff --git a/SampleCoreDataProject/Pods/Headers/Public/MagicalRecord/MagicalImportFunctions.h b/SampleCoreDataProject/Pods/Headers/Public/MagicalRecord/MagicalImportFunctions.h deleted file mode 120000 index bc1f0d7..0000000 --- a/SampleCoreDataProject/Pods/Headers/Public/MagicalRecord/MagicalImportFunctions.h +++ /dev/null @@ -1 +0,0 @@ -../../../MagicalRecord/MagicalRecord/Categories/DataImport/MagicalImportFunctions.h \ No newline at end of file diff --git a/SampleCoreDataProject/Pods/Headers/Public/MagicalRecord/MagicalRecord+Actions.h b/SampleCoreDataProject/Pods/Headers/Public/MagicalRecord/MagicalRecord+Actions.h deleted file mode 120000 index f8a94dc..0000000 --- a/SampleCoreDataProject/Pods/Headers/Public/MagicalRecord/MagicalRecord+Actions.h +++ /dev/null @@ -1 +0,0 @@ -../../../MagicalRecord/MagicalRecord/Core/MagicalRecord+Actions.h \ No newline at end of file diff --git a/SampleCoreDataProject/Pods/Headers/Public/MagicalRecord/MagicalRecord+ErrorHandling.h b/SampleCoreDataProject/Pods/Headers/Public/MagicalRecord/MagicalRecord+ErrorHandling.h deleted file mode 120000 index 96e58a2..0000000 --- a/SampleCoreDataProject/Pods/Headers/Public/MagicalRecord/MagicalRecord+ErrorHandling.h +++ /dev/null @@ -1 +0,0 @@ -../../../MagicalRecord/MagicalRecord/Core/MagicalRecord+ErrorHandling.h \ No newline at end of file diff --git a/SampleCoreDataProject/Pods/Headers/Public/MagicalRecord/MagicalRecord+Options.h b/SampleCoreDataProject/Pods/Headers/Public/MagicalRecord/MagicalRecord+Options.h deleted file mode 120000 index 0ac9163..0000000 --- a/SampleCoreDataProject/Pods/Headers/Public/MagicalRecord/MagicalRecord+Options.h +++ /dev/null @@ -1 +0,0 @@ -../../../MagicalRecord/MagicalRecord/Core/MagicalRecord+Options.h \ No newline at end of file diff --git a/SampleCoreDataProject/Pods/Headers/Public/MagicalRecord/MagicalRecord+Setup.h b/SampleCoreDataProject/Pods/Headers/Public/MagicalRecord/MagicalRecord+Setup.h deleted file mode 120000 index 7ff7580..0000000 --- a/SampleCoreDataProject/Pods/Headers/Public/MagicalRecord/MagicalRecord+Setup.h +++ /dev/null @@ -1 +0,0 @@ -../../../MagicalRecord/MagicalRecord/Core/MagicalRecord+Setup.h \ No newline at end of file diff --git a/SampleCoreDataProject/Pods/Headers/Public/MagicalRecord/MagicalRecord+ShorthandSupport.h b/SampleCoreDataProject/Pods/Headers/Public/MagicalRecord/MagicalRecord+ShorthandSupport.h deleted file mode 120000 index cdb8e8a..0000000 --- a/SampleCoreDataProject/Pods/Headers/Public/MagicalRecord/MagicalRecord+ShorthandSupport.h +++ /dev/null @@ -1 +0,0 @@ -../../../MagicalRecord/MagicalRecord/Core/MagicalRecord+ShorthandSupport.h \ No newline at end of file diff --git a/SampleCoreDataProject/Pods/Headers/Public/MagicalRecord/MagicalRecord+iCloud.h b/SampleCoreDataProject/Pods/Headers/Public/MagicalRecord/MagicalRecord+iCloud.h deleted file mode 120000 index 02f6d09..0000000 --- a/SampleCoreDataProject/Pods/Headers/Public/MagicalRecord/MagicalRecord+iCloud.h +++ /dev/null @@ -1 +0,0 @@ -../../../MagicalRecord/MagicalRecord/Core/MagicalRecord+iCloud.h \ No newline at end of file diff --git a/SampleCoreDataProject/Pods/Headers/Public/MagicalRecord/MagicalRecord.h b/SampleCoreDataProject/Pods/Headers/Public/MagicalRecord/MagicalRecord.h deleted file mode 120000 index 21e45f4..0000000 --- a/SampleCoreDataProject/Pods/Headers/Public/MagicalRecord/MagicalRecord.h +++ /dev/null @@ -1 +0,0 @@ -../../../MagicalRecord/MagicalRecord/Core/MagicalRecord.h \ No newline at end of file diff --git a/SampleCoreDataProject/Pods/Headers/Public/MagicalRecord/MagicalRecordShorthand.h b/SampleCoreDataProject/Pods/Headers/Public/MagicalRecord/MagicalRecordShorthand.h deleted file mode 120000 index eba9cd6..0000000 --- a/SampleCoreDataProject/Pods/Headers/Public/MagicalRecord/MagicalRecordShorthand.h +++ /dev/null @@ -1 +0,0 @@ -../../../MagicalRecord/MagicalRecord/Core/MagicalRecordShorthand.h \ No newline at end of file diff --git a/SampleCoreDataProject/Pods/Headers/Public/MagicalRecord/NSAttributeDescription+MagicalDataImport.h b/SampleCoreDataProject/Pods/Headers/Public/MagicalRecord/NSAttributeDescription+MagicalDataImport.h deleted file mode 120000 index 6460e42..0000000 --- a/SampleCoreDataProject/Pods/Headers/Public/MagicalRecord/NSAttributeDescription+MagicalDataImport.h +++ /dev/null @@ -1 +0,0 @@ -../../../MagicalRecord/MagicalRecord/Categories/DataImport/NSAttributeDescription+MagicalDataImport.h \ No newline at end of file diff --git a/SampleCoreDataProject/Pods/Headers/Public/MagicalRecord/NSEntityDescription+MagicalDataImport.h b/SampleCoreDataProject/Pods/Headers/Public/MagicalRecord/NSEntityDescription+MagicalDataImport.h deleted file mode 120000 index c9a76c1..0000000 --- a/SampleCoreDataProject/Pods/Headers/Public/MagicalRecord/NSEntityDescription+MagicalDataImport.h +++ /dev/null @@ -1 +0,0 @@ -../../../MagicalRecord/MagicalRecord/Categories/DataImport/NSEntityDescription+MagicalDataImport.h \ No newline at end of file diff --git a/SampleCoreDataProject/Pods/Headers/Public/MagicalRecord/NSManagedObject+MagicalAggregation.h b/SampleCoreDataProject/Pods/Headers/Public/MagicalRecord/NSManagedObject+MagicalAggregation.h deleted file mode 120000 index fe3e64b..0000000 --- a/SampleCoreDataProject/Pods/Headers/Public/MagicalRecord/NSManagedObject+MagicalAggregation.h +++ /dev/null @@ -1 +0,0 @@ -../../../MagicalRecord/MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalAggregation.h \ No newline at end of file diff --git a/SampleCoreDataProject/Pods/Headers/Public/MagicalRecord/NSManagedObject+MagicalDataImport.h b/SampleCoreDataProject/Pods/Headers/Public/MagicalRecord/NSManagedObject+MagicalDataImport.h deleted file mode 120000 index f79c498..0000000 --- a/SampleCoreDataProject/Pods/Headers/Public/MagicalRecord/NSManagedObject+MagicalDataImport.h +++ /dev/null @@ -1 +0,0 @@ -../../../MagicalRecord/MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalDataImport.h \ No newline at end of file diff --git a/SampleCoreDataProject/Pods/Headers/Public/MagicalRecord/NSManagedObject+MagicalFinders.h b/SampleCoreDataProject/Pods/Headers/Public/MagicalRecord/NSManagedObject+MagicalFinders.h deleted file mode 120000 index ef62d1f..0000000 --- a/SampleCoreDataProject/Pods/Headers/Public/MagicalRecord/NSManagedObject+MagicalFinders.h +++ /dev/null @@ -1 +0,0 @@ -../../../MagicalRecord/MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalFinders.h \ No newline at end of file diff --git a/SampleCoreDataProject/Pods/Headers/Public/MagicalRecord/NSManagedObject+MagicalRecord.h b/SampleCoreDataProject/Pods/Headers/Public/MagicalRecord/NSManagedObject+MagicalRecord.h deleted file mode 120000 index e3e3f5c..0000000 --- a/SampleCoreDataProject/Pods/Headers/Public/MagicalRecord/NSManagedObject+MagicalRecord.h +++ /dev/null @@ -1 +0,0 @@ -../../../MagicalRecord/MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalRecord.h \ No newline at end of file diff --git a/SampleCoreDataProject/Pods/Headers/Public/MagicalRecord/NSManagedObject+MagicalRequests.h b/SampleCoreDataProject/Pods/Headers/Public/MagicalRecord/NSManagedObject+MagicalRequests.h deleted file mode 120000 index 9d4489a..0000000 --- a/SampleCoreDataProject/Pods/Headers/Public/MagicalRecord/NSManagedObject+MagicalRequests.h +++ /dev/null @@ -1 +0,0 @@ -../../../MagicalRecord/MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalRequests.h \ No newline at end of file diff --git a/SampleCoreDataProject/Pods/Headers/Public/MagicalRecord/NSManagedObjectContext+MagicalObserving.h b/SampleCoreDataProject/Pods/Headers/Public/MagicalRecord/NSManagedObjectContext+MagicalObserving.h deleted file mode 120000 index 4148256..0000000 --- a/SampleCoreDataProject/Pods/Headers/Public/MagicalRecord/NSManagedObjectContext+MagicalObserving.h +++ /dev/null @@ -1 +0,0 @@ -../../../MagicalRecord/MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalObserving.h \ No newline at end of file diff --git a/SampleCoreDataProject/Pods/Headers/Public/MagicalRecord/NSManagedObjectContext+MagicalRecord.h b/SampleCoreDataProject/Pods/Headers/Public/MagicalRecord/NSManagedObjectContext+MagicalRecord.h deleted file mode 120000 index a4b07c1..0000000 --- a/SampleCoreDataProject/Pods/Headers/Public/MagicalRecord/NSManagedObjectContext+MagicalRecord.h +++ /dev/null @@ -1 +0,0 @@ -../../../MagicalRecord/MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalRecord.h \ No newline at end of file diff --git a/SampleCoreDataProject/Pods/Headers/Public/MagicalRecord/NSManagedObjectContext+MagicalSaves.h b/SampleCoreDataProject/Pods/Headers/Public/MagicalRecord/NSManagedObjectContext+MagicalSaves.h deleted file mode 120000 index 070ea25..0000000 --- a/SampleCoreDataProject/Pods/Headers/Public/MagicalRecord/NSManagedObjectContext+MagicalSaves.h +++ /dev/null @@ -1 +0,0 @@ -../../../MagicalRecord/MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalSaves.h \ No newline at end of file diff --git a/SampleCoreDataProject/Pods/Headers/Public/MagicalRecord/NSManagedObjectContext+MagicalThreading.h b/SampleCoreDataProject/Pods/Headers/Public/MagicalRecord/NSManagedObjectContext+MagicalThreading.h deleted file mode 120000 index 83f6359..0000000 --- a/SampleCoreDataProject/Pods/Headers/Public/MagicalRecord/NSManagedObjectContext+MagicalThreading.h +++ /dev/null @@ -1 +0,0 @@ -../../../MagicalRecord/MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalThreading.h \ No newline at end of file diff --git a/SampleCoreDataProject/Pods/Headers/Public/MagicalRecord/NSManagedObjectModel+MagicalRecord.h b/SampleCoreDataProject/Pods/Headers/Public/MagicalRecord/NSManagedObjectModel+MagicalRecord.h deleted file mode 120000 index 7fb5863..0000000 --- a/SampleCoreDataProject/Pods/Headers/Public/MagicalRecord/NSManagedObjectModel+MagicalRecord.h +++ /dev/null @@ -1 +0,0 @@ -../../../MagicalRecord/MagicalRecord/Categories/NSManagedObjectModel+MagicalRecord.h \ No newline at end of file diff --git a/SampleCoreDataProject/Pods/Headers/Public/MagicalRecord/NSNumber+MagicalDataImport.h b/SampleCoreDataProject/Pods/Headers/Public/MagicalRecord/NSNumber+MagicalDataImport.h deleted file mode 120000 index efda51f..0000000 --- a/SampleCoreDataProject/Pods/Headers/Public/MagicalRecord/NSNumber+MagicalDataImport.h +++ /dev/null @@ -1 +0,0 @@ -../../../MagicalRecord/MagicalRecord/Categories/DataImport/NSNumber+MagicalDataImport.h \ No newline at end of file diff --git a/SampleCoreDataProject/Pods/Headers/Public/MagicalRecord/NSObject+MagicalDataImport.h b/SampleCoreDataProject/Pods/Headers/Public/MagicalRecord/NSObject+MagicalDataImport.h deleted file mode 120000 index e529ae9..0000000 --- a/SampleCoreDataProject/Pods/Headers/Public/MagicalRecord/NSObject+MagicalDataImport.h +++ /dev/null @@ -1 +0,0 @@ -../../../MagicalRecord/MagicalRecord/Categories/DataImport/NSObject+MagicalDataImport.h \ No newline at end of file diff --git a/SampleCoreDataProject/Pods/Headers/Public/MagicalRecord/NSPersistentStore+MagicalRecord.h b/SampleCoreDataProject/Pods/Headers/Public/MagicalRecord/NSPersistentStore+MagicalRecord.h deleted file mode 120000 index 301e167..0000000 --- a/SampleCoreDataProject/Pods/Headers/Public/MagicalRecord/NSPersistentStore+MagicalRecord.h +++ /dev/null @@ -1 +0,0 @@ -../../../MagicalRecord/MagicalRecord/Categories/NSPersistentStore+MagicalRecord.h \ No newline at end of file diff --git a/SampleCoreDataProject/Pods/Headers/Public/MagicalRecord/NSPersistentStoreCoordinator+MagicalRecord.h b/SampleCoreDataProject/Pods/Headers/Public/MagicalRecord/NSPersistentStoreCoordinator+MagicalRecord.h deleted file mode 120000 index bc69026..0000000 --- a/SampleCoreDataProject/Pods/Headers/Public/MagicalRecord/NSPersistentStoreCoordinator+MagicalRecord.h +++ /dev/null @@ -1 +0,0 @@ -../../../MagicalRecord/MagicalRecord/Categories/NSPersistentStoreCoordinator+MagicalRecord.h \ No newline at end of file diff --git a/SampleCoreDataProject/Pods/Headers/Public/MagicalRecord/NSRelationshipDescription+MagicalDataImport.h b/SampleCoreDataProject/Pods/Headers/Public/MagicalRecord/NSRelationshipDescription+MagicalDataImport.h deleted file mode 120000 index a77c3b8..0000000 --- a/SampleCoreDataProject/Pods/Headers/Public/MagicalRecord/NSRelationshipDescription+MagicalDataImport.h +++ /dev/null @@ -1 +0,0 @@ -../../../MagicalRecord/MagicalRecord/Categories/DataImport/NSRelationshipDescription+MagicalDataImport.h \ No newline at end of file diff --git a/SampleCoreDataProject/Pods/Headers/Public/MagicalRecord/NSString+MagicalDataImport.h b/SampleCoreDataProject/Pods/Headers/Public/MagicalRecord/NSString+MagicalDataImport.h deleted file mode 120000 index d4b6ccf..0000000 --- a/SampleCoreDataProject/Pods/Headers/Public/MagicalRecord/NSString+MagicalDataImport.h +++ /dev/null @@ -1 +0,0 @@ -../../../MagicalRecord/MagicalRecord/Categories/DataImport/NSString+MagicalDataImport.h \ No newline at end of file diff --git a/SampleCoreDataProject/Pods/MagicalRecord/LICENSE b/SampleCoreDataProject/Pods/MagicalRecord/LICENSE deleted file mode 100644 index 4b9553c..0000000 --- a/SampleCoreDataProject/Pods/MagicalRecord/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ - Copyright (c) 2010, Magical Panda Software, LLC - - Permission is hereby granted, free of charge, to any person - obtaining a copy of this software and associated documentation - files (the "Software"), to deal in the Software without - restriction, including without limitation the rights to use, - copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the - Software is furnished to do so, subject to the following - conditions: - - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES - OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - OTHER DEALINGS IN THE SOFTWARE. diff --git a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/MagicalImportFunctions.h b/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/MagicalImportFunctions.h deleted file mode 100644 index f7d52da..0000000 --- a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/MagicalImportFunctions.h +++ /dev/null @@ -1,28 +0,0 @@ -// -// MagicalImportFunctions.h -// Magical Record -// -// Created by Saul Mora on 3/7/12. -// Copyright (c) 2012 Magical Panda Software LLC. All rights reserved. -// - -#import - - -NSDate * adjustDateForDST(NSDate *date); -NSDate * dateFromString(NSString *value, NSString *format); -NSNumber * numberFromString(NSString *value); -NSString * attributeNameFromString(NSString *value); -NSString * primaryKeyNameFromString(NSString *value); - -#if TARGET_OS_IPHONE -#import -UIColor * UIColorFromString(NSString *serializedColor); - -#else -#import -NSColor * NSColorFromString(NSString *serializedColor); - -#endif -extern id (*colorFromString)(NSString *); - diff --git a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/MagicalImportFunctions.m b/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/MagicalImportFunctions.m deleted file mode 100644 index 0f4f196..0000000 --- a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/MagicalImportFunctions.m +++ /dev/null @@ -1,105 +0,0 @@ -// -// MagicalImportFunctions.m -// Magical Record -// -// Created by Saul Mora on 3/7/12. -// Copyright (c) 2012 Magical Panda Software LLC. All rights reserved. -// - -#import "MagicalImportFunctions.h" - - -#pragma mark - Data import helper functions - -NSString * attributeNameFromString(NSString *value) -{ - NSString *firstCharacter = [[value substringToIndex:1] capitalizedString]; - return [firstCharacter stringByAppendingString:[value substringFromIndex:1]]; -} - -NSString * primaryKeyNameFromString(NSString *value) -{ - NSString *firstCharacter = [[value substringToIndex:1] lowercaseString]; - return [firstCharacter stringByAppendingFormat:@"%@ID", [value substringFromIndex:1]]; -} - -NSDate * adjustDateForDST(NSDate *date) -{ - NSTimeInterval dstOffset = [[NSTimeZone localTimeZone] daylightSavingTimeOffsetForDate:date]; - NSDate *actualDate = [date dateByAddingTimeInterval:dstOffset]; - - return actualDate; -} - -NSDate * dateFromString(NSString *value, NSString *format) -{ - NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; - [formatter setTimeZone:[NSTimeZone localTimeZone]]; - [formatter setLocale:[NSLocale currentLocale]]; - [formatter setDateFormat:format]; - - NSDate *parsedDate = [formatter dateFromString:value]; - - return parsedDate; -} - -NSNumber * numberFromString(NSString *value) { - return [NSNumber numberWithDouble:[value doubleValue]]; -} - -NSInteger* newColorComponentsFromString(NSString *serializedColor); -NSInteger* newColorComponentsFromString(NSString *serializedColor) -{ - NSScanner *colorScanner = [NSScanner scannerWithString:serializedColor]; - NSString *colorType; - [colorScanner scanUpToString:@"(" intoString:&colorType]; - - NSInteger *componentValues = malloc(4 * sizeof(NSInteger)); - if ([colorType hasPrefix:@"rgba"]) - { - NSCharacterSet *rgbaCharacterSet = [NSCharacterSet characterSetWithCharactersInString:@"(,)"]; - - NSInteger *componentValue = componentValues; - while (![colorScanner isAtEnd]) - { - [colorScanner scanCharactersFromSet:rgbaCharacterSet intoString:nil]; - [colorScanner scanInteger:componentValue]; - componentValue++; - } - } - //else if ([colorType hasPrefix:@"hsba"]) - //else if ([colorType hasPrefix:@""]) - return componentValues; -} - -#if TARGET_OS_IPHONE - -UIColor * UIColorFromString(NSString *serializedColor) -{ - NSInteger *componentValues = newColorComponentsFromString(serializedColor); - UIColor *color = [UIColor colorWithRed:(componentValues[0] / 255.0f) - green:(componentValues[1] / 255.0f) - blue:(componentValues[2] / 255.0f) - alpha:componentValues[3]]; - - free(componentValues); - return color; -} -id (*colorFromString)(NSString *) = UIColorFromString; - -#else - -NSColor * NSColorFromString(NSString *serializedColor) -{ - NSInteger *componentValues = newColorComponentsFromString(serializedColor); - NSColor *color = [NSColor colorWithDeviceRed:(componentValues[0] / 255.0f) - green:(componentValues[1] / 255.0f) - blue:(componentValues[2] / 255.0f) - alpha:componentValues[3]]; - free(componentValues); - return color; -} -id (*colorFromString)(NSString *) = NSColorFromString; - - -#endif diff --git a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/NSAttributeDescription+MagicalDataImport.h b/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/NSAttributeDescription+MagicalDataImport.h deleted file mode 100644 index ee99d5f..0000000 --- a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/NSAttributeDescription+MagicalDataImport.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// NSAttributeDescription+MagicalDataImport.h -// Magical Record -// -// Created by Saul Mora on 9/4/11. -// Copyright 2011 Magical Panda Software LLC. All rights reserved. -// - -#import - -@interface NSAttributeDescription (MagicalRecord_DataImport) - -- (NSString *) MR_primaryKey; -- (id) MR_valueForKeyPath:(NSString *)keyPath fromObjectData:(id)objectData; - -@end diff --git a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/NSAttributeDescription+MagicalDataImport.m b/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/NSAttributeDescription+MagicalDataImport.m deleted file mode 100644 index a039502..0000000 --- a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/NSAttributeDescription+MagicalDataImport.m +++ /dev/null @@ -1,59 +0,0 @@ -// -// NSAttributeDescription+MagicalDataImport.m -// Magical Record -// -// Created by Saul Mora on 9/4/11. -// Copyright 2011 Magical Panda Software LLC. All rights reserved. -// - -#import "NSAttributeDescription+MagicalDataImport.h" -#import "NSManagedObject+MagicalDataImport.h" -#import "MagicalImportFunctions.h" - -@implementation NSAttributeDescription (MagicalRecord_DataImport) - -- (NSString *) MR_primaryKey; -{ - return nil; -} - -- (id) MR_valueForKeyPath:(NSString *)keyPath fromObjectData:(id)objectData; -{ - id value = [objectData valueForKeyPath:keyPath]; - - NSAttributeType attributeType = [self attributeType]; - NSString *desiredAttributeType = [[self userInfo] valueForKey:kMagicalRecordImportAttributeValueClassNameKey]; - if (desiredAttributeType) - { - if ([desiredAttributeType hasSuffix:@"Color"]) - { - value = colorFromString(value); - } - } - else - { - if (attributeType == NSDateAttributeType) - { - if (![value isKindOfClass:[NSDate class]]) - { - NSString *dateFormat = [[self userInfo] valueForKey:kMagicalRecordImportCustomDateFormatKey]; - value = dateFromString([value description], dateFormat ?: kMagicalRecordImportDefaultDateFormatString); - } - // value = adjustDateForDST(value); - } - else if (attributeType == NSInteger16AttributeType || - attributeType == NSInteger32AttributeType || - attributeType == NSInteger64AttributeType || - attributeType == NSDecimalAttributeType || - attributeType == NSDoubleAttributeType || - attributeType == NSFloatAttributeType) { - if (![value isKindOfClass:[NSNumber class]] && value != [NSNull null]) { - value = numberFromString([value description]); - } - } - } - - return value == [NSNull null] ? nil : value; -} - -@end diff --git a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/NSEntityDescription+MagicalDataImport.h b/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/NSEntityDescription+MagicalDataImport.h deleted file mode 100644 index 0e89ba6..0000000 --- a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/NSEntityDescription+MagicalDataImport.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// NSEntityDescription+MagicalDataImport.h -// Magical Record -// -// Created by Saul Mora on 9/5/11. -// Copyright 2011 Magical Panda Software LLC. All rights reserved. -// - - -@interface NSEntityDescription (MagicalRecord_DataImport) - -- (NSAttributeDescription *) MR_primaryAttributeToRelateBy; -- (NSManagedObject *) MR_createInstanceInContext:(NSManagedObjectContext *)context; - -@end diff --git a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/NSEntityDescription+MagicalDataImport.m b/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/NSEntityDescription+MagicalDataImport.m deleted file mode 100644 index 8ce691c..0000000 --- a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/NSEntityDescription+MagicalDataImport.m +++ /dev/null @@ -1,34 +0,0 @@ -// -// NSEntityDescription+MagicalDataImport.m -// Magical Record -// -// Created by Saul Mora on 9/5/11. -// Copyright 2011 Magical Panda Software LLC. All rights reserved. -// - -#import "CoreData+MagicalRecord.h" - -@implementation NSEntityDescription (MagicalRecord_DataImport) - -- (NSAttributeDescription *) MR_primaryAttributeToRelateBy; -{ - NSString *lookupKey = [[self userInfo] valueForKey:kMagicalRecordImportRelationshipLinkedByKey] ?: primaryKeyNameFromString([self name]); - NSDictionary *attributesByName = [self attributesByName]; - - if ([attributesByName count] == 0) return nil; - - NSAttributeDescription *primaryAttribute = [attributesByName objectForKey:lookupKey]; - - return primaryAttribute; -} - -- (NSManagedObject *) MR_createInstanceInContext:(NSManagedObjectContext *)context; -{ - Class relatedClass = NSClassFromString([self managedObjectClassName]); - NSManagedObject *newInstance = [relatedClass MR_createInContext:context]; - - return newInstance; -} - - -@end diff --git a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/NSNumber+MagicalDataImport.h b/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/NSNumber+MagicalDataImport.h deleted file mode 100644 index fc1736e..0000000 --- a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/NSNumber+MagicalDataImport.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// NSNumber+MagicalDataImport.h -// Magical Record -// -// Created by Saul Mora on 9/4/11. -// Copyright 2011 Magical Panda Software LLC. All rights reserved. -// - -#import - -@interface NSNumber (MagicalRecord_DataImport) - -- (NSString *) MR_lookupKeyForAttribute:(NSAttributeDescription *)attributeInfo; -- (id) MR_relatedValueForRelationship:(NSRelationshipDescription *)relationshipInfo; - -@end diff --git a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/NSNumber+MagicalDataImport.m b/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/NSNumber+MagicalDataImport.m deleted file mode 100644 index 561af39..0000000 --- a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/NSNumber+MagicalDataImport.m +++ /dev/null @@ -1,25 +0,0 @@ -// -// NSNumber+MagicalDataImport.m -// Magical Record -// -// Created by Saul Mora on 9/4/11. -// Copyright 2011 Magical Panda Software LLC. All rights reserved. -// - -#import "NSNumber+MagicalDataImport.h" - - - -@implementation NSNumber (MagicalRecord_DataImport) - -- (id) MR_relatedValueForRelationship:(NSRelationshipDescription *)relationshipInfo -{ - return self; -} - -- (NSString *) MR_lookupKeyForAttribute:(NSAttributeDescription *)attributeInfo -{ - return nil; -} - -@end diff --git a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/NSObject+MagicalDataImport.h b/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/NSObject+MagicalDataImport.h deleted file mode 100644 index e22aa8b..0000000 --- a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/NSObject+MagicalDataImport.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// NSDictionary+MagicalDataImport.h -// Magical Record -// -// Created by Saul Mora on 9/4/11. -// Copyright 2011 Magical Panda Software LLC. All rights reserved. -// - -#import - -@interface NSObject (MagicalRecord_DataImport) - -- (NSString *) MR_lookupKeyForAttribute:(NSAttributeDescription *)attributeInfo; -- (id) MR_valueForAttribute:(NSAttributeDescription *)attributeInfo; - -- (NSString *) MR_lookupKeyForRelationship:(NSRelationshipDescription *)relationshipInfo; -- (id) MR_relatedValueForRelationship:(NSRelationshipDescription *)relationshipInfo; - -@end diff --git a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/NSObject+MagicalDataImport.m b/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/NSObject+MagicalDataImport.m deleted file mode 100644 index 900d78f..0000000 --- a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/NSObject+MagicalDataImport.m +++ /dev/null @@ -1,75 +0,0 @@ -// -// NSDictionary+MagicalDataImport.m -// Magical Record -// -// Created by Saul Mora on 9/4/11. -// Copyright 2011 Magical Panda Software LLC. All rights reserved. -// - -#import "NSObject+MagicalDataImport.h" -#import "NSManagedObject+MagicalDataImport.h" -#import "MagicalRecord.h" -#import "CoreData+MagicalRecord.h" - -NSUInteger const kMagicalRecordImportMaximumAttributeFailoverDepth = 10; - - -@implementation NSObject (MagicalRecord_DataImport) - -//#warning If you implement valueForUndefinedKey: in any NSObject in your code, this may be the problem if something broke -- (id) MR_valueForUndefinedKey:(NSString *)key -{ - return nil; -} - -- (NSString *) MR_lookupKeyForAttribute:(NSAttributeDescription *)attributeInfo; -{ - NSString *attributeName = [attributeInfo name]; - NSString *lookupKey = [[attributeInfo userInfo] valueForKey:kMagicalRecordImportAttributeKeyMapKey] ?: attributeName; - - id value = [self valueForKeyPath:lookupKey]; - - for (NSUInteger i = 1; i < kMagicalRecordImportMaximumAttributeFailoverDepth && value == nil; i++) - { - attributeName = [NSString stringWithFormat:@"%@.%lu", kMagicalRecordImportAttributeKeyMapKey, (unsigned long)i]; - lookupKey = [[attributeInfo userInfo] valueForKey:attributeName]; - if (lookupKey == nil) - { - return nil; - } - value = [self valueForKeyPath:lookupKey]; - } - - return value != nil ? lookupKey : nil; -} - -- (id) MR_valueForAttribute:(NSAttributeDescription *)attributeInfo -{ - NSString *lookupKey = [self MR_lookupKeyForAttribute:attributeInfo]; - return lookupKey ? [self valueForKeyPath:lookupKey] : nil; -} - -- (NSString *) MR_lookupKeyForRelationship:(NSRelationshipDescription *)relationshipInfo -{ - NSEntityDescription *destinationEntity = [relationshipInfo destinationEntity]; - if (destinationEntity == nil) - { - MRLog(@"Unable to find entity for type '%@'", [self valueForKey:kMagicalRecordImportRelationshipTypeKey]); - return nil; - } - - NSString *primaryKeyName = [relationshipInfo MR_primaryKey]; - - NSAttributeDescription *primaryKeyAttribute = [[destinationEntity attributesByName] valueForKey:primaryKeyName]; - NSString *lookupKey = [[primaryKeyAttribute userInfo] valueForKey:kMagicalRecordImportAttributeKeyMapKey] ?: [primaryKeyAttribute name]; - - return lookupKey; -} - -- (id) MR_relatedValueForRelationship:(NSRelationshipDescription *)relationshipInfo -{ - NSString *lookupKey = [self MR_lookupKeyForRelationship:relationshipInfo]; - return lookupKey ? [self valueForKeyPath:lookupKey] : nil; -} - -@end diff --git a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/NSRelationshipDescription+MagicalDataImport.h b/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/NSRelationshipDescription+MagicalDataImport.h deleted file mode 100644 index 118c943..0000000 --- a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/NSRelationshipDescription+MagicalDataImport.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// NSRelationshipDescription+MagicalDataImport.h -// Magical Record -// -// Created by Saul Mora on 9/4/11. -// Copyright 2011 Magical Panda Software LLC. All rights reserved. -// - -#import - -@interface NSRelationshipDescription (MagicalRecord_DataImport) - -- (NSString *) MR_primaryKey; - -@end diff --git a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/NSRelationshipDescription+MagicalDataImport.m b/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/NSRelationshipDescription+MagicalDataImport.m deleted file mode 100644 index 770d14c..0000000 --- a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/NSRelationshipDescription+MagicalDataImport.m +++ /dev/null @@ -1,24 +0,0 @@ -// -// NSRelationshipDescription+MagicalDataImport.m -// Magical Record -// -// Created by Saul Mora on 9/4/11. -// Copyright 2011 Magical Panda Software LLC. All rights reserved. -// - -#import "NSRelationshipDescription+MagicalDataImport.h" -#import "NSManagedObject+MagicalDataImport.h" -#import "MagicalImportFunctions.h" -#import "MagicalRecord.h" - -@implementation NSRelationshipDescription (MagicalRecord_DataImport) - -- (NSString *) MR_primaryKey; -{ - NSString *primaryKeyName = [[self userInfo] valueForKey:kMagicalRecordImportRelationshipLinkedByKey] ?: - primaryKeyNameFromString([[self destinationEntity] name]); - - return primaryKeyName; -} - -@end diff --git a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/NSString+MagicalDataImport.h b/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/NSString+MagicalDataImport.h deleted file mode 100644 index 09da58a..0000000 --- a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/NSString+MagicalDataImport.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// NSString+MagicalRecord_MagicalDataImport.h -// Magical Record -// -// Created by Saul Mora on 12/10/11. -// Copyright (c) 2011 Magical Panda Software LLC. All rights reserved. -// - -#import - -@interface NSString (MagicalRecord_DataImport) - -- (NSString *) MR_capitalizedFirstCharacterString; - -@end diff --git a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/NSString+MagicalDataImport.m b/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/NSString+MagicalDataImport.m deleted file mode 100644 index 6af78db..0000000 --- a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/DataImport/NSString+MagicalDataImport.m +++ /dev/null @@ -1,35 +0,0 @@ -// -// NSString+MagicalRecord_MagicalDataImport.m -// Magical Record -// -// Created by Saul Mora on 12/10/11. -// Copyright (c) 2011 Magical Panda Software LLC. All rights reserved. -// - -#import "NSString+MagicalDataImport.h" - - -@implementation NSString (MagicalRecord_DataImport) - -- (NSString *) MR_capitalizedFirstCharacterString; -{ - if ([self length] > 0) - { - NSString *firstChar = [[self substringToIndex:1] capitalizedString]; - return [firstChar stringByAppendingString:[self substringFromIndex:1]]; - } - return self; -} - -- (id) MR_relatedValueForRelationship:(NSRelationshipDescription *)relationshipInfo -{ - return self; -} - -- (NSString *) MR_lookupKeyForAttribute:(NSAttributeDescription *)attributeInfo -{ - return nil; -} - -@end - diff --git a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalAggregation.h b/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalAggregation.h deleted file mode 100644 index 1e68eb7..0000000 --- a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalAggregation.h +++ /dev/null @@ -1,32 +0,0 @@ -// -// NSManagedObject+MagicalAggregation.h -// Magical Record -// -// Created by Saul Mora on 3/7/12. -// Copyright (c) 2012 Magical Panda Software LLC. All rights reserved. -// - -#import - -@interface NSManagedObject (MagicalAggregation) - -+ (NSNumber *) MR_numberOfEntities; -+ (NSNumber *) MR_numberOfEntitiesWithContext:(NSManagedObjectContext *)context; -+ (NSNumber *) MR_numberOfEntitiesWithPredicate:(NSPredicate *)searchTerm; -+ (NSNumber *) MR_numberOfEntitiesWithPredicate:(NSPredicate *)searchTerm inContext:(NSManagedObjectContext *)context; - -+ (NSUInteger) MR_countOfEntities; -+ (NSUInteger) MR_countOfEntitiesWithContext:(NSManagedObjectContext *)context; -+ (NSUInteger) MR_countOfEntitiesWithPredicate:(NSPredicate *)searchFilter; -+ (NSUInteger) MR_countOfEntitiesWithPredicate:(NSPredicate *)searchFilter inContext:(NSManagedObjectContext *)context; - -+ (BOOL) MR_hasAtLeastOneEntity; -+ (BOOL) MR_hasAtLeastOneEntityInContext:(NSManagedObjectContext *)context; - -+ (NSNumber *)MR_aggregateOperation:(NSString *)function onAttribute:(NSString *)attributeName withPredicate:(NSPredicate *)predicate inContext:(NSManagedObjectContext *)context; -+ (NSNumber *)MR_aggregateOperation:(NSString *)function onAttribute:(NSString *)attributeName withPredicate:(NSPredicate *)predicate; - -- (id) MR_objectWithMinValueFor:(NSString *)property; -- (id) MR_objectWithMinValueFor:(NSString *)property inContext:(NSManagedObjectContext *)context; - -@end diff --git a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalAggregation.m b/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalAggregation.m deleted file mode 100644 index 1d4644b..0000000 --- a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalAggregation.m +++ /dev/null @@ -1,140 +0,0 @@ -// -// NSManagedObject+MagicalAggregation.m -// Magical Record -// -// Created by Saul Mora on 3/7/12. -// Copyright (c) 2012 Magical Panda Software LLC. All rights reserved. -// - -#import "NSManagedObject+MagicalAggregation.h" -#import "NSManagedObjectContext+MagicalRecord.h" -#import "NSManagedObjectContext+MagicalThreading.h" -#import "NSManagedObject+MagicalRequests.h" -#import "NSManagedObject+MagicalRecord.h" -#import "NSManagedObject+MagicalFinders.h" -#import "MagicalRecord+ErrorHandling.h" - -@implementation NSManagedObject (MagicalAggregation) - -#pragma mark - -#pragma mark Number of Entities - -+ (NSNumber *) MR_numberOfEntitiesWithContext:(NSManagedObjectContext *)context -{ - return [NSNumber numberWithUnsignedInteger:[self MR_countOfEntitiesWithContext:context]]; -} - -+ (NSNumber *) MR_numberOfEntities -{ - return [self MR_numberOfEntitiesWithContext:[NSManagedObjectContext MR_contextForCurrentThread]]; -} - -+ (NSNumber *) MR_numberOfEntitiesWithPredicate:(NSPredicate *)searchTerm inContext:(NSManagedObjectContext *)context -{ - - return [NSNumber numberWithUnsignedInteger:[self MR_countOfEntitiesWithPredicate:searchTerm inContext:context]]; -} - -+ (NSNumber *) MR_numberOfEntitiesWithPredicate:(NSPredicate *)searchTerm; -{ - return [self MR_numberOfEntitiesWithPredicate:searchTerm - inContext:[NSManagedObjectContext MR_contextForCurrentThread]]; -} - -+ (NSUInteger) MR_countOfEntities; -{ - return [self MR_countOfEntitiesWithContext:[NSManagedObjectContext MR_contextForCurrentThread]]; -} - -+ (NSUInteger) MR_countOfEntitiesWithContext:(NSManagedObjectContext *)context; -{ - NSError *error = nil; - NSUInteger count = [context countForFetchRequest:[self MR_createFetchRequestInContext:context] error:&error]; - [MagicalRecord handleErrors:error]; - - return count; -} - -+ (NSUInteger) MR_countOfEntitiesWithPredicate:(NSPredicate *)searchFilter; -{ - return [self MR_countOfEntitiesWithPredicate:searchFilter inContext:[NSManagedObjectContext MR_defaultContext]]; -} - -+ (NSUInteger) MR_countOfEntitiesWithPredicate:(NSPredicate *)searchFilter inContext:(NSManagedObjectContext *)context; -{ - NSError *error = nil; - NSFetchRequest *request = [self MR_createFetchRequestInContext:context]; - [request setPredicate:searchFilter]; - - NSUInteger count = [context countForFetchRequest:request error:&error]; - [MagicalRecord handleErrors:error]; - - return count; -} - -+ (BOOL) MR_hasAtLeastOneEntity -{ - return [self MR_hasAtLeastOneEntityInContext:[NSManagedObjectContext MR_contextForCurrentThread]]; -} - -+ (BOOL) MR_hasAtLeastOneEntityInContext:(NSManagedObjectContext *)context -{ - return [[self MR_numberOfEntitiesWithContext:context] intValue] > 0; -} - -- (NSNumber *) MR_maxValueFor:(NSString *)property -{ - NSManagedObject *obj = [[self class] MR_findFirstByAttribute:property - withValue:[NSString stringWithFormat:@"max(%@)", property]]; - - return [obj valueForKey:property]; -} - -- (id) MR_objectWithMinValueFor:(NSString *)property inContext:(NSManagedObjectContext *)context -{ - NSFetchRequest *request = [[self class] MR_createFetchRequestInContext:context]; - - NSPredicate *searchFor = [NSPredicate predicateWithFormat:@"SELF = %@ AND %K = min(%@)", self, property, property]; - [request setPredicate:searchFor]; - - return [[self class] MR_executeFetchRequestAndReturnFirstObject:request inContext:context]; -} - -- (id) MR_objectWithMinValueFor:(NSString *)property -{ - return [self MR_objectWithMinValueFor:property inContext:[self managedObjectContext]]; -} - -+ (NSNumber *) MR_aggregateOperation:(NSString *)function onAttribute:(NSString *)attributeName withPredicate:(NSPredicate *)predicate inContext:(NSManagedObjectContext *)context -{ - NSExpression *ex = [NSExpression expressionForFunction:function - arguments:[NSArray arrayWithObject:[NSExpression expressionForKeyPath:attributeName]]]; - - NSExpressionDescription *ed = [[NSExpressionDescription alloc] init]; - [ed setName:@"result"]; - [ed setExpression:ex]; - - // determine the type of attribute, required to set the expression return type - NSAttributeDescription *attributeDescription = [[[self MR_entityDescription] attributesByName] objectForKey:attributeName]; - [ed setExpressionResultType:[attributeDescription attributeType]]; - NSArray *properties = [NSArray arrayWithObject:ed]; - - NSFetchRequest *request = [self MR_requestAllWithPredicate:predicate inContext:context]; - [request setPropertiesToFetch:properties]; - [request setResultType:NSDictionaryResultType]; - - NSDictionary *resultsDictionary = [self MR_executeFetchRequestAndReturnFirstObject:request inContext:context]; - NSNumber *resultValue = [resultsDictionary objectForKey:@"result"]; - - return resultValue; -} - -+ (NSNumber *) MR_aggregateOperation:(NSString *)function onAttribute:(NSString *)attributeName withPredicate:(NSPredicate *)predicate -{ - return [self MR_aggregateOperation:function - onAttribute:attributeName - withPredicate:predicate - inContext:[NSManagedObjectContext MR_defaultContext]]; -} - -@end diff --git a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalDataImport.h b/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalDataImport.h deleted file mode 100644 index c537630..0000000 --- a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalDataImport.h +++ /dev/null @@ -1,29 +0,0 @@ -// -// NSManagedObject+JSONHelpers.h -// -// Created by Saul Mora on 6/28/11. -// Copyright 2011 Magical Panda Software LLC. All rights reserved. -// - -#import - -extern NSString * const kMagicalRecordImportCustomDateFormatKey; -extern NSString * const kMagicalRecordImportDefaultDateFormatString; -extern NSString * const kMagicalRecordImportAttributeKeyMapKey; -extern NSString * const kMagicalRecordImportAttributeValueClassNameKey; - -extern NSString * const kMagicalRecordImportRelationshipMapKey; -extern NSString * const kMagicalRecordImportRelationshipLinkedByKey; -extern NSString * const kMagicalRecordImportRelationshipTypeKey; - -@interface NSManagedObject (MagicalRecord_DataImport) - -- (BOOL) MR_importValuesForKeysWithObject:(id)objectData; - -+ (id) MR_importFromObject:(id)data; -+ (id) MR_importFromObject:(id)data inContext:(NSManagedObjectContext *)context; - -+ (NSArray *) MR_importFromArray:(NSArray *)listOfObjectData; -+ (NSArray *) MR_importFromArray:(NSArray *)listOfObjectData inContext:(NSManagedObjectContext *)context; - -@end diff --git a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalDataImport.m b/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalDataImport.m deleted file mode 100644 index 4e5fb5c..0000000 --- a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalDataImport.m +++ /dev/null @@ -1,298 +0,0 @@ -// -// NSManagedObject+JSONHelpers.m -// -// Created by Saul Mora on 6/28/11. -// Copyright 2011 Magical Panda Software LLC. All rights reserved. -// - -#import "CoreData+MagicalRecord.h" -#import - -void MR_swapMethodsFromClass(Class c, SEL orig, SEL new); - -NSString * const kMagicalRecordImportCustomDateFormatKey = @"dateFormat"; -NSString * const kMagicalRecordImportDefaultDateFormatString = @"yyyy-MM-dd'T'HH:mm:ss'Z'"; - -NSString * const kMagicalRecordImportAttributeKeyMapKey = @"mappedKeyName"; -NSString * const kMagicalRecordImportAttributeValueClassNameKey = @"attributeValueClassName"; - -NSString * const kMagicalRecordImportRelationshipMapKey = @"mappedKeyName"; -NSString * const kMagicalRecordImportRelationshipLinkedByKey = @"relatedByAttribute"; -NSString * const kMagicalRecordImportRelationshipTypeKey = @"type"; //this needs to be revisited - -NSString * const kMagicalRecordImportAttributeUseDefaultValueWhenNotPresent = @"useDefaultValueWhenNotPresent"; - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Warc-performSelector-leaks" - -@implementation NSManagedObject (MagicalRecord_DataImport) - -- (BOOL) MR_importValue:(id)value forKey:(NSString *)key -{ - NSString *selectorString = [NSString stringWithFormat:@"import%@:", [key MR_capitalizedFirstCharacterString]]; - SEL selector = NSSelectorFromString(selectorString); - if ([self respondsToSelector:selector]) - { - [self performSelector:selector withObject:value]; - return YES; - } - return NO; -} - -- (void) MR_setAttributes:(NSDictionary *)attributes forKeysWithObject:(id)objectData -{ - for (NSString *attributeName in attributes) - { - NSAttributeDescription *attributeInfo = [attributes valueForKey:attributeName]; - NSString *lookupKeyPath = [objectData MR_lookupKeyForAttribute:attributeInfo]; - - if (lookupKeyPath) - { - id value = [attributeInfo MR_valueForKeyPath:lookupKeyPath fromObjectData:objectData]; - if (![self MR_importValue:value forKey:attributeName]) - { - [self setValue:value forKey:attributeName]; - } - } - else - { - if ([[[attributeInfo userInfo] objectForKey:kMagicalRecordImportAttributeUseDefaultValueWhenNotPresent] boolValue]) - { - id value = [attributeInfo defaultValue]; - if (![self MR_importValue:value forKey:attributeName]) - { - [self setValue:value forKey:attributeName]; - } - } - } - } -} - -- (NSManagedObject *) MR_findObjectForRelationship:(NSRelationshipDescription *)relationshipInfo withData:(id)singleRelatedObjectData -{ - NSEntityDescription *destinationEntity = [relationshipInfo destinationEntity]; - NSManagedObject *objectForRelationship = nil; - id relatedValue = [singleRelatedObjectData MR_relatedValueForRelationship:relationshipInfo]; - - if (relatedValue) - { - NSManagedObjectContext *context = [self managedObjectContext]; - Class managedObjectClass = NSClassFromString([destinationEntity managedObjectClassName]); - NSString *primaryKey = [relationshipInfo MR_primaryKey]; - objectForRelationship = [managedObjectClass MR_findFirstByAttribute:primaryKey - withValue:relatedValue - inContext:context]; - } - - return objectForRelationship; -} - -- (void) MR_addObject:(NSManagedObject *)relatedObject forRelationship:(NSRelationshipDescription *)relationshipInfo -{ - NSAssert2(relatedObject != nil, @"Cannot add nil to %@ for attribute %@", NSStringFromClass([self class]), [relationshipInfo name]); - NSAssert2([relatedObject entity] == [relationshipInfo destinationEntity], @"related object entity %@ not same as destination entity %@", [relatedObject entity], [relationshipInfo destinationEntity]); - - //add related object to set - NSString *addRelationMessageFormat = @"set%@:"; - id relationshipSource = self; - if ([relationshipInfo isToMany]) - { - addRelationMessageFormat = @"add%@Object:"; - if ([relationshipInfo respondsToSelector:@selector(isOrdered)] && [relationshipInfo isOrdered]) - { - //Need to get the ordered set - NSString *selectorName = [[relationshipInfo name] stringByAppendingString:@"Set"]; - relationshipSource = [self performSelector:NSSelectorFromString(selectorName)]; - addRelationMessageFormat = @"addObject:"; - } - } - - NSString *addRelatedObjectToSetMessage = [NSString stringWithFormat:addRelationMessageFormat, attributeNameFromString([relationshipInfo name])]; - - SEL selector = NSSelectorFromString(addRelatedObjectToSetMessage); - - @try - { - [relationshipSource performSelector:selector withObject:relatedObject]; - } - @catch (NSException *exception) - { - MRLog(@"Adding object for relationship failed: %@\n", relationshipInfo); - MRLog(@"relatedObject.entity %@", [relatedObject entity]); - MRLog(@"relationshipInfo.destinationEntity %@", [relationshipInfo destinationEntity]); - MRLog(@"Add Relationship Selector: %@", addRelatedObjectToSetMessage); - MRLog(@"perform selector error: %@", exception); - } -} - -- (void) MR_setRelationships:(NSDictionary *)relationships forKeysWithObject:(id)relationshipData withBlock:(void(^)(NSRelationshipDescription *,id))setRelationshipBlock -{ - for (NSString *relationshipName in relationships) - { - if ([self MR_importValue:relationshipData forKey:relationshipName]) - { - continue; - } - - NSRelationshipDescription *relationshipInfo = [relationships valueForKey:relationshipName]; - - NSString *lookupKey = [[relationshipInfo userInfo] valueForKey:kMagicalRecordImportRelationshipMapKey] ?: relationshipName; - id relatedObjectData = [relationshipData valueForKeyPath:lookupKey]; - - if (relatedObjectData == nil || [relatedObjectData isEqual:[NSNull null]]) - { - continue; - } - - SEL shouldImportSelector = NSSelectorFromString([NSString stringWithFormat:@"shouldImport%@:", [relationshipName MR_capitalizedFirstCharacterString]]); - BOOL implementsShouldImport = (BOOL)[self respondsToSelector:shouldImportSelector]; - void (^establishRelationship)(NSRelationshipDescription *, id) = ^(NSRelationshipDescription *blockInfo, id blockData) - { - if (!(implementsShouldImport && !(BOOL)[self performSelector:shouldImportSelector withObject:relatedObjectData])) - { - setRelationshipBlock(blockInfo, blockData); - } - }; - - if ([relationshipInfo isToMany] && [relatedObjectData isKindOfClass:[NSArray class]]) - { - for (id singleRelatedObjectData in relatedObjectData) - { - establishRelationship(relationshipInfo, singleRelatedObjectData); - } - } - else - { - establishRelationship(relationshipInfo, relatedObjectData); - } - } -} - -- (BOOL) MR_preImport:(id)objectData; -{ - if ([self respondsToSelector:@selector(shouldImport:)]) - { - BOOL shouldImport = (BOOL)[self performSelector:@selector(shouldImport:) withObject:objectData]; - if (!shouldImport) - { - return NO; - } - } - - if ([self respondsToSelector:@selector(willImport:)]) - { - [self performSelector:@selector(willImport:) withObject:objectData]; - } - MR_swapMethodsFromClass([objectData class], @selector(valueForUndefinedKey:), @selector(MR_valueForUndefinedKey:)); - return YES; -} - -- (BOOL) MR_postImport:(id)objectData; -{ - MR_swapMethodsFromClass([objectData class], @selector(valueForUndefinedKey:), @selector(MR_valueForUndefinedKey:)); - if ([self respondsToSelector:@selector(didImport:)]) - { - [self performSelector:@selector(didImport:) withObject:objectData]; - } - return YES; -} - -- (BOOL) MR_performDataImportFromObject:(id)objectData relationshipBlock:(void(^)(NSRelationshipDescription*, id))relationshipBlock; -{ - BOOL didStartimporting = [self MR_preImport:objectData]; - if (!didStartimporting) return NO; - - NSDictionary *attributes = [[self entity] attributesByName]; - [self MR_setAttributes:attributes forKeysWithObject:objectData]; - - NSDictionary *relationships = [[self entity] relationshipsByName]; - [self MR_setRelationships:relationships forKeysWithObject:objectData withBlock:relationshipBlock]; - - return [self MR_postImport:objectData]; -} - -- (BOOL) MR_importValuesForKeysWithObject:(id)objectData -{ - typeof(self) weakself = self; - return [self MR_performDataImportFromObject:objectData - relationshipBlock:^(NSRelationshipDescription *relationshipInfo, id localObjectData) { - - NSManagedObject *relatedObject = [weakself MR_findObjectForRelationship:relationshipInfo withData:localObjectData]; - - if (relatedObject == nil) - { - NSEntityDescription *entityDescription = [relationshipInfo destinationEntity]; - relatedObject = [entityDescription MR_createInstanceInContext:[weakself managedObjectContext]]; - } - [relatedObject MR_importValuesForKeysWithObject:localObjectData]; - - [weakself MR_addObject:relatedObject forRelationship:relationshipInfo]; - } ]; -} - -+ (id) MR_importFromObject:(id)objectData inContext:(NSManagedObjectContext *)context; -{ - NSAttributeDescription *primaryAttribute = [[self MR_entityDescription] MR_primaryAttributeToRelateBy]; - - id value = [objectData MR_valueForAttribute:primaryAttribute]; - - NSManagedObject *managedObject = [self MR_findFirstByAttribute:[primaryAttribute name] withValue:value inContext:context]; - if (managedObject == nil) - { - managedObject = [self MR_createInContext:context]; - } - - [managedObject MR_importValuesForKeysWithObject:objectData]; - - return managedObject; -} - -+ (id) MR_importFromObject:(id)objectData -{ - return [self MR_importFromObject:objectData inContext:[NSManagedObjectContext MR_defaultContext]]; -} - -+ (NSArray *) MR_importFromArray:(NSArray *)listOfObjectData -{ - return [self MR_importFromArray:listOfObjectData inContext:[NSManagedObjectContext MR_defaultContext]]; -} - -+ (NSArray *) MR_importFromArray:(NSArray *)listOfObjectData inContext:(NSManagedObjectContext *)context -{ - NSMutableArray *objectIDs = [NSMutableArray array]; - - [MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext) - { - [listOfObjectData enumerateObjectsWithOptions:0 usingBlock:^(id obj, NSUInteger idx, BOOL *stop) - { - NSDictionary *objectData = (NSDictionary *)obj; - - NSManagedObject *dataObject = [self MR_importFromObject:objectData inContext:localContext]; - - if ([context obtainPermanentIDsForObjects:[NSArray arrayWithObject:dataObject] error:nil]) - { - [objectIDs addObject:[dataObject objectID]]; - } - }]; - }]; - - return [self MR_findAllWithPredicate:[NSPredicate predicateWithFormat:@"self IN %@", objectIDs] inContext:context]; -} - -@end - -#pragma clang diagnostic pop - -void MR_swapMethodsFromClass(Class c, SEL orig, SEL new) -{ - Method origMethod = class_getInstanceMethod(c, orig); - Method newMethod = class_getInstanceMethod(c, new); - if (class_addMethod(c, orig, method_getImplementation(newMethod), method_getTypeEncoding(newMethod))) - { - class_replaceMethod(c, new, method_getImplementation(origMethod), method_getTypeEncoding(origMethod)); - } - else - { - method_exchangeImplementations(origMethod, newMethod); - } -} diff --git a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalFinders.h b/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalFinders.h deleted file mode 100644 index 02aadc0..0000000 --- a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalFinders.h +++ /dev/null @@ -1,59 +0,0 @@ -// -// NSManagedObject+MagicalFinders.h -// Magical Record -// -// Created by Saul Mora on 3/7/12. -// Copyright (c) 2012 Magical Panda Software LLC. All rights reserved. -// - -#import - -@interface NSManagedObject (MagicalFinders) - -+ (NSArray *) MR_findAll; -+ (NSArray *) MR_findAllInContext:(NSManagedObjectContext *)context; -+ (NSArray *) MR_findAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending; -+ (NSArray *) MR_findAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending inContext:(NSManagedObjectContext *)context; -+ (NSArray *) MR_findAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending withPredicate:(NSPredicate *)searchTerm; -+ (NSArray *) MR_findAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending withPredicate:(NSPredicate *)searchTerm inContext:(NSManagedObjectContext *)context; - -+ (NSArray *) MR_findAllWithPredicate:(NSPredicate *)searchTerm; -+ (NSArray *) MR_findAllWithPredicate:(NSPredicate *)searchTerm inContext:(NSManagedObjectContext *)context; - -+ (id) MR_findFirst; -+ (id) MR_findFirstInContext:(NSManagedObjectContext *)context; -+ (id) MR_findFirstWithPredicate:(NSPredicate *)searchTerm; -+ (id) MR_findFirstWithPredicate:(NSPredicate *)searchTerm inContext:(NSManagedObjectContext *)context; -+ (id) MR_findFirstWithPredicate:(NSPredicate *)searchterm sortedBy:(NSString *)property ascending:(BOOL)ascending; -+ (id) MR_findFirstWithPredicate:(NSPredicate *)searchterm sortedBy:(NSString *)property ascending:(BOOL)ascending inContext:(NSManagedObjectContext *)context; -+ (id) MR_findFirstWithPredicate:(NSPredicate *)searchTerm andRetrieveAttributes:(NSArray *)attributes; -+ (id) MR_findFirstWithPredicate:(NSPredicate *)searchTerm andRetrieveAttributes:(NSArray *)attributes inContext:(NSManagedObjectContext *)context; -+ (id) MR_findFirstWithPredicate:(NSPredicate *)searchTerm sortedBy:(NSString *)sortBy ascending:(BOOL)ascending andRetrieveAttributes:(id)attributes, ...; -+ (id) MR_findFirstWithPredicate:(NSPredicate *)searchTerm sortedBy:(NSString *)sortBy ascending:(BOOL)ascending inContext:(NSManagedObjectContext *)context andRetrieveAttributes:(id)attributes, ...; -+ (id) MR_findFirstByAttribute:(NSString *)attribute withValue:(id)searchValue; -+ (id) MR_findFirstByAttribute:(NSString *)attribute withValue:(id)searchValue inContext:(NSManagedObjectContext *)context; -+ (id) MR_findFirstOrderedByAttribute:(NSString *)attribute ascending:(BOOL)ascending; -+ (id) MR_findFirstOrderedByAttribute:(NSString *)attribute ascending:(BOOL)ascending inContext:(NSManagedObjectContext *)context; - -+ (NSArray *) MR_findByAttribute:(NSString *)attribute withValue:(id)searchValue; -+ (NSArray *) MR_findByAttribute:(NSString *)attribute withValue:(id)searchValue inContext:(NSManagedObjectContext *)context; -+ (NSArray *) MR_findByAttribute:(NSString *)attribute withValue:(id)searchValue andOrderBy:(NSString *)sortTerm ascending:(BOOL)ascending; -+ (NSArray *) MR_findByAttribute:(NSString *)attribute withValue:(id)searchValue andOrderBy:(NSString *)sortTerm ascending:(BOOL)ascending inContext:(NSManagedObjectContext *)context; - -#if TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR - -+ (NSFetchedResultsController *) MR_fetchAllWithDelegate:(id)delegate; -+ (NSFetchedResultsController *) MR_fetchAllWithDelegate:(id)delegate inContext:(NSManagedObjectContext *)context; - -+ (NSFetchedResultsController *) MR_fetchAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending withPredicate:(NSPredicate *)searchTerm groupBy:(NSString *)groupingKeyPath delegate:(id)delegate; -+ (NSFetchedResultsController *) MR_fetchAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending withPredicate:(NSPredicate *)searchTerm groupBy:(NSString *)groupingKeyPath delegate:(id)delegate inContext:(NSManagedObjectContext *)context; - -+ (NSFetchedResultsController *) MR_fetchAllGroupedBy:(NSString *)group withPredicate:(NSPredicate *)searchTerm sortedBy:(NSString *)sortTerm ascending:(BOOL)ascending; -+ (NSFetchedResultsController *) MR_fetchAllGroupedBy:(NSString *)group withPredicate:(NSPredicate *)searchTerm sortedBy:(NSString *)sortTerm ascending:(BOOL)ascending inContext:(NSManagedObjectContext *)context; - -+ (NSFetchedResultsController *) MR_fetchAllGroupedBy:(NSString *)group withPredicate:(NSPredicate *)searchTerm sortedBy:(NSString *)sortTerm ascending:(BOOL)ascending delegate:(id)delegate; -+ (NSFetchedResultsController *) MR_fetchAllGroupedBy:(NSString *)group withPredicate:(NSPredicate *)searchTerm sortedBy:(NSString *)sortTerm ascending:(BOOL)ascending delegate:(id)delegate inContext:(NSManagedObjectContext *)context; - -#endif - -@end diff --git a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalFinders.m b/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalFinders.m deleted file mode 100644 index a298385..0000000 --- a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalFinders.m +++ /dev/null @@ -1,346 +0,0 @@ - // -// NSManagedObject+MagicalFinders.m -// Magical Record -// -// Created by Saul Mora on 3/7/12. -// Copyright (c) 2012 Magical Panda Software LLC. All rights reserved. -// - -#import "NSManagedObject+MagicalFinders.h" -#import "NSManagedObject+MagicalRequests.h" -#import "NSManagedObject+MagicalRecord.h" -#import "NSManagedObjectContext+MagicalThreading.h" - -@implementation NSManagedObject (MagicalFinders) - -#pragma mark - Finding Data - - -+ (NSArray *) MR_findAllInContext:(NSManagedObjectContext *)context -{ - return [self MR_executeFetchRequest:[self MR_requestAllInContext:context] inContext:context]; -} - -+ (NSArray *) MR_findAll -{ - return [self MR_findAllInContext:[NSManagedObjectContext MR_contextForCurrentThread]]; -} - -+ (NSArray *) MR_findAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending inContext:(NSManagedObjectContext *)context -{ - NSFetchRequest *request = [self MR_requestAllSortedBy:sortTerm ascending:ascending inContext:context]; - - return [self MR_executeFetchRequest:request inContext:context]; -} - -+ (NSArray *) MR_findAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending -{ - return [self MR_findAllSortedBy:sortTerm - ascending:ascending - inContext:[NSManagedObjectContext MR_contextForCurrentThread]]; -} - -+ (NSArray *) MR_findAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending withPredicate:(NSPredicate *)searchTerm inContext:(NSManagedObjectContext *)context -{ - NSFetchRequest *request = [self MR_requestAllSortedBy:sortTerm - ascending:ascending - withPredicate:searchTerm - inContext:context]; - - return [self MR_executeFetchRequest:request inContext:context]; -} - -+ (NSArray *) MR_findAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending withPredicate:(NSPredicate *)searchTerm -{ - return [self MR_findAllSortedBy:sortTerm - ascending:ascending - withPredicate:searchTerm - inContext:[NSManagedObjectContext MR_contextForCurrentThread]]; -} - - -+ (NSArray *) MR_findAllWithPredicate:(NSPredicate *)searchTerm inContext:(NSManagedObjectContext *)context -{ - NSFetchRequest *request = [self MR_createFetchRequestInContext:context]; - [request setPredicate:searchTerm]; - - return [self MR_executeFetchRequest:request - inContext:context]; -} - -+ (NSArray *) MR_findAllWithPredicate:(NSPredicate *)searchTerm -{ - return [self MR_findAllWithPredicate:searchTerm - inContext:[NSManagedObjectContext MR_contextForCurrentThread]]; -} - -+ (id) MR_findFirstInContext:(NSManagedObjectContext *)context -{ - NSFetchRequest *request = [self MR_createFetchRequestInContext:context]; - - return [self MR_executeFetchRequestAndReturnFirstObject:request inContext:context]; -} - -+ (id) MR_findFirst -{ - return [self MR_findFirstInContext:[NSManagedObjectContext MR_contextForCurrentThread]]; -} - -+ (id) MR_findFirstByAttribute:(NSString *)attribute withValue:(id)searchValue inContext:(NSManagedObjectContext *)context -{ - NSFetchRequest *request = [self MR_requestFirstByAttribute:attribute withValue:searchValue inContext:context]; - // [request setPropertiesToFetch:[NSArray arrayWithObject:attribute]]; - - return [self MR_executeFetchRequestAndReturnFirstObject:request inContext:context]; -} - -+ (id) MR_findFirstByAttribute:(NSString *)attribute withValue:(id)searchValue -{ - return [self MR_findFirstByAttribute:attribute - withValue:searchValue - inContext:[NSManagedObjectContext MR_contextForCurrentThread]]; -} - -+ (id) MR_findFirstOrderedByAttribute:(NSString *)attribute ascending:(BOOL)ascending inContext:(NSManagedObjectContext *)context; -{ - NSFetchRequest *request = [self MR_requestAllSortedBy:attribute ascending:ascending inContext:context]; - [request setFetchLimit:1]; - - return [self MR_executeFetchRequestAndReturnFirstObject:request inContext:context]; -} - -+ (id) MR_findFirstOrderedByAttribute:(NSString *)attribute ascending:(BOOL)ascending; -{ - return [self MR_findFirstOrderedByAttribute:attribute - ascending:ascending - inContext:[NSManagedObjectContext MR_contextForCurrentThread]]; -} - -+ (id) MR_findFirstWithPredicate:(NSPredicate *)searchTerm -{ - return [self MR_findFirstWithPredicate:searchTerm inContext:[NSManagedObjectContext MR_contextForCurrentThread]]; -} - -+ (id) MR_findFirstWithPredicate:(NSPredicate *)searchTerm inContext:(NSManagedObjectContext *)context -{ - NSFetchRequest *request = [self MR_requestFirstWithPredicate:searchTerm inContext:context]; - - return [self MR_executeFetchRequestAndReturnFirstObject:request inContext:context]; -} - -+ (id) MR_findFirstWithPredicate:(NSPredicate *)searchterm sortedBy:(NSString *)property ascending:(BOOL)ascending inContext:(NSManagedObjectContext *)context -{ - NSFetchRequest *request = [self MR_requestAllSortedBy:property ascending:ascending withPredicate:searchterm inContext:context]; - - return [self MR_executeFetchRequestAndReturnFirstObject:request inContext:context]; -} - -+ (id) MR_findFirstWithPredicate:(NSPredicate *)searchterm sortedBy:(NSString *)property ascending:(BOOL)ascending -{ - return [self MR_findFirstWithPredicate:searchterm - sortedBy:property - ascending:ascending - inContext:[NSManagedObjectContext MR_contextForCurrentThread]]; -} - -+ (id) MR_findFirstWithPredicate:(NSPredicate *)searchTerm andRetrieveAttributes:(NSArray *)attributes inContext:(NSManagedObjectContext *)context -{ - NSFetchRequest *request = [self MR_createFetchRequestInContext:context]; - [request setPredicate:searchTerm]; - [request setPropertiesToFetch:attributes]; - - return [self MR_executeFetchRequestAndReturnFirstObject:request inContext:context]; -} - -+ (id) MR_findFirstWithPredicate:(NSPredicate *)searchTerm andRetrieveAttributes:(NSArray *)attributes -{ - return [self MR_findFirstWithPredicate:searchTerm - andRetrieveAttributes:attributes - inContext:[NSManagedObjectContext MR_contextForCurrentThread]]; -} - -+ (id) MR_findFirstWithPredicate:(NSPredicate *)searchTerm sortedBy:(NSString *)sortBy ascending:(BOOL)ascending inContext:(NSManagedObjectContext *)context andRetrieveAttributes:(id)attributes, ... -{ - NSFetchRequest *request = [self MR_requestAllSortedBy:sortBy - ascending:ascending - withPredicate:searchTerm - inContext:context]; - [request setPropertiesToFetch:[self MR_propertiesNamed:attributes]]; - - return [self MR_executeFetchRequestAndReturnFirstObject:request inContext:context]; -} - -+ (id) MR_findFirstWithPredicate:(NSPredicate *)searchTerm sortedBy:(NSString *)sortBy ascending:(BOOL)ascending andRetrieveAttributes:(id)attributes, ... -{ - return [self MR_findFirstWithPredicate:searchTerm - sortedBy:sortBy - ascending:ascending - inContext:[NSManagedObjectContext MR_contextForCurrentThread] - andRetrieveAttributes:attributes]; -} - -+ (NSArray *) MR_findByAttribute:(NSString *)attribute withValue:(id)searchValue inContext:(NSManagedObjectContext *)context -{ - NSFetchRequest *request = [self MR_requestAllWhere:attribute isEqualTo:searchValue inContext:context]; - - return [self MR_executeFetchRequest:request inContext:context]; -} - -+ (NSArray *) MR_findByAttribute:(NSString *)attribute withValue:(id)searchValue -{ - return [self MR_findByAttribute:attribute - withValue:searchValue - inContext:[NSManagedObjectContext MR_contextForCurrentThread]]; -} - -+ (NSArray *) MR_findByAttribute:(NSString *)attribute withValue:(id)searchValue andOrderBy:(NSString *)sortTerm ascending:(BOOL)ascending inContext:(NSManagedObjectContext *)context -{ - NSPredicate *searchTerm = [NSPredicate predicateWithFormat:@"%K = %@", attribute, searchValue]; - NSFetchRequest *request = [self MR_requestAllSortedBy:sortTerm ascending:ascending withPredicate:searchTerm inContext:context]; - - return [self MR_executeFetchRequest:request inContext:context]; -} - -+ (NSArray *) MR_findByAttribute:(NSString *)attribute withValue:(id)searchValue andOrderBy:(NSString *)sortTerm ascending:(BOOL)ascending -{ - return [self MR_findByAttribute:attribute - withValue:searchValue - andOrderBy:sortTerm - ascending:ascending - inContext:[NSManagedObjectContext MR_contextForCurrentThread]]; -} - - -#pragma mark - -#pragma mark NSFetchedResultsController helpers - - -#if TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR - -+ (NSFetchedResultsController *) MR_fetchController:(NSFetchRequest *)request delegate:(id)delegate useFileCache:(BOOL)useFileCache groupedBy:(NSString *)groupKeyPath inContext:(NSManagedObjectContext *)context -{ - NSString *cacheName = useFileCache ? [NSString stringWithFormat:@"MagicalRecord-Cache-%@", NSStringFromClass([self class])] : nil; - - NSFetchedResultsController *controller = - [[NSFetchedResultsController alloc] initWithFetchRequest:request - managedObjectContext:context - sectionNameKeyPath:groupKeyPath - cacheName:cacheName]; - controller.delegate = delegate; - - return controller; -} - -+ (NSFetchedResultsController *) MR_fetchAllWithDelegate:(id)delegate; -{ - return [self MR_fetchAllWithDelegate:delegate inContext:[NSManagedObjectContext MR_contextForCurrentThread]]; -} - -+ (NSFetchedResultsController *) MR_fetchAllWithDelegate:(id)delegate inContext:(NSManagedObjectContext *)context; -{ - NSFetchRequest *request = [self MR_requestAllInContext:context]; - NSFetchedResultsController *controller = [self MR_fetchController:request delegate:delegate useFileCache:NO groupedBy:nil inContext:context]; - - [self MR_performFetch:controller]; - return controller; -} - -+ (NSFetchedResultsController *) MR_fetchAllGroupedBy:(NSString *)group withPredicate:(NSPredicate *)searchTerm sortedBy:(NSString *)sortTerm ascending:(BOOL)ascending delegate:(id)delegate inContext:(NSManagedObjectContext *)context -{ - NSFetchRequest *request = [self MR_requestAllSortedBy:sortTerm - ascending:ascending - withPredicate:searchTerm - inContext:context]; - - NSFetchedResultsController *controller = [self MR_fetchController:request - delegate:delegate - useFileCache:NO - groupedBy:group - inContext:context]; - - [self MR_performFetch:controller]; - return controller; -} - -+ (NSFetchedResultsController *) MR_fetchAllGroupedBy:(NSString *)group withPredicate:(NSPredicate *)searchTerm sortedBy:(NSString *)sortTerm ascending:(BOOL)ascending delegate:(id)delegate -{ - return [self MR_fetchAllGroupedBy:group - withPredicate:searchTerm - sortedBy:sortTerm - ascending:ascending - delegate:delegate - inContext:[NSManagedObjectContext MR_contextForCurrentThread]]; -} - -+ (NSFetchedResultsController *) MR_fetchAllGroupedBy:(NSString *)group withPredicate:(NSPredicate *)searchTerm sortedBy:(NSString *)sortTerm ascending:(BOOL)ascending inContext:(NSManagedObjectContext *)context; -{ - return [self MR_fetchAllGroupedBy:group - withPredicate:searchTerm - sortedBy:sortTerm - ascending:ascending - delegate:nil - inContext:context]; -} - -+ (NSFetchedResultsController *) MR_fetchAllGroupedBy:(NSString *)group withPredicate:(NSPredicate *)searchTerm sortedBy:(NSString *)sortTerm ascending:(BOOL)ascending -{ - return [self MR_fetchAllGroupedBy:group - withPredicate:searchTerm - sortedBy:sortTerm - ascending:ascending - inContext:[NSManagedObjectContext MR_contextForCurrentThread]]; -} - - -+ (NSFetchedResultsController *) MR_fetchAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending withPredicate:(NSPredicate *)searchTerm groupBy:(NSString *)groupingKeyPath inContext:(NSManagedObjectContext *)context -{ - NSFetchRequest *request = [self MR_requestAllSortedBy:sortTerm - ascending:ascending - withPredicate:searchTerm - inContext:context]; - - NSFetchedResultsController *controller = [self MR_fetchController:request - delegate:nil - useFileCache:NO - groupedBy:groupingKeyPath - inContext:[NSManagedObjectContext MR_contextForCurrentThread]]; - - [self MR_performFetch:controller]; - return controller; -} - -+ (NSFetchedResultsController *) MR_fetchAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending withPredicate:(NSPredicate *)searchTerm groupBy:(NSString *)groupingKeyPath; -{ - return [self MR_fetchAllSortedBy:sortTerm - ascending:ascending - withPredicate:searchTerm - groupBy:groupingKeyPath - inContext:[NSManagedObjectContext MR_contextForCurrentThread]]; -} - -+ (NSFetchedResultsController *) MR_fetchAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending withPredicate:(NSPredicate *)searchTerm groupBy:(NSString *)groupingKeyPath delegate:(id)delegate inContext:(NSManagedObjectContext *)context -{ - NSFetchedResultsController *controller = [self MR_fetchAllGroupedBy:groupingKeyPath - withPredicate:searchTerm - sortedBy:sortTerm - ascending:ascending - delegate:delegate - inContext:context]; - - [self MR_performFetch:controller]; - return controller; -} - -+ (NSFetchedResultsController *) MR_fetchAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending withPredicate:(NSPredicate *)searchTerm groupBy:(NSString *)groupingKeyPath delegate:(id)delegate -{ - return [self MR_fetchAllSortedBy:sortTerm - ascending:ascending - withPredicate:searchTerm - groupBy:groupingKeyPath - delegate:delegate - inContext:[NSManagedObjectContext MR_contextForCurrentThread]]; -} - -#endif - -@end diff --git a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalRecord.h b/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalRecord.h deleted file mode 100644 index bf7a8c9..0000000 --- a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalRecord.h +++ /dev/null @@ -1,50 +0,0 @@ -// -// -// Created by Saul Mora on 11/15/09. -// Copyright 2010 Magical Panda Software, LLC All rights reserved. -// - -#import -#import "MagicalRecord.h" - -#define kMagicalRecordDefaultBatchSize 20 - -@interface NSManagedObject (MagicalRecord) - -+ (NSUInteger) MR_defaultBatchSize; -+ (void) MR_setDefaultBatchSize:(NSUInteger)newBatchSize; - -+ (NSArray *) MR_executeFetchRequest:(NSFetchRequest *)request; -+ (NSArray *) MR_executeFetchRequest:(NSFetchRequest *)request inContext:(NSManagedObjectContext *)context; -+ (id) MR_executeFetchRequestAndReturnFirstObject:(NSFetchRequest *)request; -+ (id) MR_executeFetchRequestAndReturnFirstObject:(NSFetchRequest *)request inContext:(NSManagedObjectContext *)context; - -#if TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR - -+ (void) MR_performFetch:(NSFetchedResultsController *)controller; - -#endif - -+ (NSEntityDescription *) MR_entityDescription; -+ (NSEntityDescription *) MR_entityDescriptionInContext:(NSManagedObjectContext *)context; -+ (NSArray *) MR_propertiesNamed:(NSArray *)properties; - -+ (id) MR_createEntity; -+ (id) MR_createInContext:(NSManagedObjectContext *)context; -- (BOOL) MR_deleteEntity; -- (BOOL) MR_deleteInContext:(NSManagedObjectContext *)context; - -+ (BOOL) MR_deleteAllMatchingPredicate:(NSPredicate *)predicate; -+ (BOOL) MR_deleteAllMatchingPredicate:(NSPredicate *)predicate inContext:(NSManagedObjectContext *)context; - -+ (BOOL) MR_truncateAll; -+ (BOOL) MR_truncateAllInContext:(NSManagedObjectContext *)context; - -+ (NSArray *) MR_ascendingSortDescriptors:(NSArray *)attributesToSortBy; -+ (NSArray *) MR_descendingSortDescriptors:(NSArray *)attributesToSortBy; - -- (id) MR_inContext:(NSManagedObjectContext *)otherContext; -- (id) MR_inThreadContext; - -@end - diff --git a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalRecord.m b/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalRecord.m deleted file mode 100644 index 8bd7a8e..0000000 --- a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalRecord.m +++ /dev/null @@ -1,237 +0,0 @@ - -// Created by Saul Mora on 11/15/09. -// Copyright 2010 Magical Panda Software, LLC All rights reserved. -// - -#import "CoreData+MagicalRecord.h" - -static NSUInteger defaultBatchSize = kMagicalRecordDefaultBatchSize; - - -@implementation NSManagedObject (MagicalRecord) - -+ (void) MR_setDefaultBatchSize:(NSUInteger)newBatchSize -{ - @synchronized(self) - { - defaultBatchSize = newBatchSize; - } -} - -+ (NSUInteger) MR_defaultBatchSize -{ - return defaultBatchSize; -} - -+ (NSArray *) MR_executeFetchRequest:(NSFetchRequest *)request inContext:(NSManagedObjectContext *)context -{ - __block NSArray *results = nil; - [context performBlockAndWait:^{ - - NSError *error = nil; - - results = [context executeFetchRequest:request error:&error]; - - if (results == nil) - { - [MagicalRecord handleErrors:error]; - } - - }]; - return results; -} - -+ (NSArray *) MR_executeFetchRequest:(NSFetchRequest *)request -{ - return [self MR_executeFetchRequest:request inContext:[NSManagedObjectContext MR_contextForCurrentThread]]; -} - -+ (id) MR_executeFetchRequestAndReturnFirstObject:(NSFetchRequest *)request inContext:(NSManagedObjectContext *)context -{ - [request setFetchLimit:1]; - - NSArray *results = [self MR_executeFetchRequest:request inContext:context]; - if ([results count] == 0) - { - return nil; - } - return [results objectAtIndex:0]; -} - -+ (id) MR_executeFetchRequestAndReturnFirstObject:(NSFetchRequest *)request -{ - return [self MR_executeFetchRequestAndReturnFirstObject:request inContext:[NSManagedObjectContext MR_contextForCurrentThread]]; -} - -#if TARGET_OS_IPHONE - -+ (void) MR_performFetch:(NSFetchedResultsController *)controller -{ - NSError *error = nil; - if (![controller performFetch:&error]) - { - [MagicalRecord handleErrors:error]; - } -} - -#endif - -+ (NSString *) MR_entityName -{ - return NSStringFromClass(self); -} - -+ (NSEntityDescription *) MR_entityDescriptionInContext:(NSManagedObjectContext *)context -{ - if ([self respondsToSelector:@selector(entityInManagedObjectContext:)]) - { - NSEntityDescription *entity = [self performSelector:@selector(entityInManagedObjectContext:) withObject:context]; - return entity; - } - else - { - NSString *entityName = [self MR_entityName]; - return [NSEntityDescription entityForName:entityName inManagedObjectContext:context]; - } -} - -+ (NSEntityDescription *) MR_entityDescription -{ - return [self MR_entityDescriptionInContext:[NSManagedObjectContext MR_contextForCurrentThread]]; -} - -+ (NSArray *) MR_propertiesNamed:(NSArray *)properties -{ - NSEntityDescription *description = [self MR_entityDescription]; - NSMutableArray *propertiesWanted = [NSMutableArray array]; - - if (properties) - { - NSDictionary *propDict = [description propertiesByName]; - - for (NSString *propertyName in properties) - { - NSPropertyDescription *property = [propDict objectForKey:propertyName]; - if (property) - { - [propertiesWanted addObject:property]; - } - else - { - MRLog(@"Property '%@' not found in %lx properties for %@", propertyName, (unsigned long)[propDict count], NSStringFromClass(self)); - } - } - } - return propertiesWanted; -} - -+ (NSArray *) MR_sortAscending:(BOOL)ascending attributes:(NSArray *)attributesToSortBy -{ - NSMutableArray *attributes = [NSMutableArray array]; - - for (NSString *attributeName in attributesToSortBy) - { - NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:attributeName ascending:ascending]; - [attributes addObject:sortDescriptor]; - } - - return attributes; -} - -+ (NSArray *) MR_ascendingSortDescriptors:(NSArray *)attributesToSortBy -{ - return [self MR_sortAscending:YES attributes:attributesToSortBy]; -} - -+ (NSArray *) MR_descendingSortDescriptors:(NSArray *)attributesToSortBy -{ - return [self MR_sortAscending:NO attributes:attributesToSortBy]; -} - -#pragma mark - - -+ (id) MR_createInContext:(NSManagedObjectContext *)context -{ - if ([self respondsToSelector:@selector(insertInManagedObjectContext:)]) - { - id entity = [self performSelector:@selector(insertInManagedObjectContext:) withObject:context]; - return entity; - } - else - { - return [NSEntityDescription insertNewObjectForEntityForName:[self MR_entityName] inManagedObjectContext:context]; - } -} - -+ (id) MR_createEntity -{ - NSManagedObject *newEntity = [self MR_createInContext:[NSManagedObjectContext MR_contextForCurrentThread]]; - - return newEntity; -} - -- (BOOL) MR_deleteInContext:(NSManagedObjectContext *)context -{ - [context deleteObject:self]; - return YES; -} - -- (BOOL) MR_deleteEntity -{ - [self MR_deleteInContext:[self managedObjectContext]]; - return YES; -} - -+ (BOOL) MR_deleteAllMatchingPredicate:(NSPredicate *)predicate inContext:(NSManagedObjectContext *)context -{ - NSFetchRequest *request = [self MR_requestAllWithPredicate:predicate inContext:context]; - [request setReturnsObjectsAsFaults:YES]; - [request setIncludesPropertyValues:NO]; - - NSArray *objectsToTruncate = [self MR_executeFetchRequest:request inContext:context]; - - for (id objectToTruncate in objectsToTruncate) - { - [objectToTruncate MR_deleteInContext:context]; - } - - return YES; -} - -+ (BOOL) MR_deleteAllMatchingPredicate:(NSPredicate *)predicate -{ - return [self MR_deleteAllMatchingPredicate:predicate inContext:[NSManagedObjectContext MR_contextForCurrentThread]]; -} - -+ (BOOL) MR_truncateAllInContext:(NSManagedObjectContext *)context -{ - NSArray *allEntities = [self MR_findAllInContext:context]; - for (NSManagedObject *obj in allEntities) - { - [obj MR_deleteInContext:context]; - } - return YES; -} - -+ (BOOL) MR_truncateAll -{ - [self MR_truncateAllInContext:[NSManagedObjectContext MR_contextForCurrentThread]]; - return YES; -} - -- (id) MR_inContext:(NSManagedObjectContext *)otherContext -{ - NSError *error = nil; - NSManagedObject *inContext = [otherContext existingObjectWithID:[self objectID] error:&error]; - [MagicalRecord handleErrors:error]; - - return inContext; -} - -- (id) MR_inThreadContext -{ - NSManagedObject *weakSelf = self; - return [weakSelf MR_inContext:[NSManagedObjectContext MR_contextForCurrentThread]]; -} - -@end diff --git a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalRequests.h b/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalRequests.h deleted file mode 100644 index 53d8541..0000000 --- a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalRequests.h +++ /dev/null @@ -1,32 +0,0 @@ -// -// NSManagedObject+MagicalRequests.h -// Magical Record -// -// Created by Saul Mora on 3/7/12. -// Copyright (c) 2012 Magical Panda Software LLC. All rights reserved. -// - -#import - -@interface NSManagedObject (MagicalRequests) - -+ (NSFetchRequest *) MR_createFetchRequest; -+ (NSFetchRequest *) MR_createFetchRequestInContext:(NSManagedObjectContext *)context; - -+ (NSFetchRequest *) MR_requestAll; -+ (NSFetchRequest *) MR_requestAllInContext:(NSManagedObjectContext *)context; -+ (NSFetchRequest *) MR_requestAllWithPredicate:(NSPredicate *)searchTerm; -+ (NSFetchRequest *) MR_requestAllWithPredicate:(NSPredicate *)searchTerm inContext:(NSManagedObjectContext *)context; -+ (NSFetchRequest *) MR_requestAllWhere:(NSString *)property isEqualTo:(id)value; -+ (NSFetchRequest *) MR_requestAllWhere:(NSString *)property isEqualTo:(id)value inContext:(NSManagedObjectContext *)context; -+ (NSFetchRequest *) MR_requestFirstWithPredicate:(NSPredicate *)searchTerm; -+ (NSFetchRequest *) MR_requestFirstWithPredicate:(NSPredicate *)searchTerm inContext:(NSManagedObjectContext *)context; -+ (NSFetchRequest *) MR_requestFirstByAttribute:(NSString *)attribute withValue:(id)searchValue; -+ (NSFetchRequest *) MR_requestFirstByAttribute:(NSString *)attribute withValue:(id)searchValue inContext:(NSManagedObjectContext *)context; -+ (NSFetchRequest *) MR_requestAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending; -+ (NSFetchRequest *) MR_requestAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending inContext:(NSManagedObjectContext *)context; -+ (NSFetchRequest *) MR_requestAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending withPredicate:(NSPredicate *)searchTerm; -+ (NSFetchRequest *) MR_requestAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending withPredicate:(NSPredicate *)searchTerm inContext:(NSManagedObjectContext *)context; - - -@end diff --git a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalRequests.m b/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalRequests.m deleted file mode 100644 index 0c6b2a1..0000000 --- a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalRequests.m +++ /dev/null @@ -1,140 +0,0 @@ -// -// NSManagedObject+MagicalRequests.m -// Magical Record -// -// Created by Saul Mora on 3/7/12. -// Copyright (c) 2012 Magical Panda Software LLC. All rights reserved. -// - -#import "NSManagedObject+MagicalRequests.h" -#import "NSManagedObject+MagicalRecord.h" -#import "NSManagedObjectContext+MagicalThreading.h" - -@implementation NSManagedObject (MagicalRequests) - - -+ (NSFetchRequest *)MR_createFetchRequestInContext:(NSManagedObjectContext *)context -{ - NSFetchRequest *request = [[NSFetchRequest alloc] init]; - [request setEntity:[self MR_entityDescriptionInContext:context]]; - - return request; -} - -+ (NSFetchRequest *) MR_createFetchRequest -{ - return [self MR_createFetchRequestInContext:[NSManagedObjectContext MR_contextForCurrentThread]]; -} - - -+ (NSFetchRequest *) MR_requestAll -{ - return [self MR_createFetchRequestInContext:[NSManagedObjectContext MR_contextForCurrentThread]]; -} - -+ (NSFetchRequest *) MR_requestAllInContext:(NSManagedObjectContext *)context -{ - return [self MR_createFetchRequestInContext:context]; -} - -+ (NSFetchRequest *) MR_requestAllWithPredicate:(NSPredicate *)searchTerm; -{ - return [self MR_requestAllWithPredicate:searchTerm inContext:[NSManagedObjectContext MR_contextForCurrentThread]]; -} - -+ (NSFetchRequest *) MR_requestAllWithPredicate:(NSPredicate *)searchTerm inContext:(NSManagedObjectContext *)context; -{ - NSFetchRequest *request = [self MR_createFetchRequestInContext:context]; - [request setPredicate:searchTerm]; - - return request; -} - -+ (NSFetchRequest *) MR_requestAllWhere:(NSString *)property isEqualTo:(id)value -{ - return [self MR_requestAllWhere:property isEqualTo:value inContext:[NSManagedObjectContext MR_contextForCurrentThread]]; -} - -+ (NSFetchRequest *) MR_requestAllWhere:(NSString *)property isEqualTo:(id)value inContext:(NSManagedObjectContext *)context -{ - NSFetchRequest *request = [self MR_createFetchRequestInContext:context]; - [request setPredicate:[NSPredicate predicateWithFormat:@"%K = %@", property, value]]; - - return request; -} - -+ (NSFetchRequest *) MR_requestFirstWithPredicate:(NSPredicate *)searchTerm -{ - return [self MR_requestFirstWithPredicate:searchTerm inContext:[NSManagedObjectContext MR_contextForCurrentThread]]; -} - -+ (NSFetchRequest *) MR_requestFirstWithPredicate:(NSPredicate *)searchTerm inContext:(NSManagedObjectContext *)context -{ - NSFetchRequest *request = [self MR_createFetchRequestInContext:context]; - [request setPredicate:searchTerm]; - [request setFetchLimit:1]; - - return request; -} - -+ (NSFetchRequest *) MR_requestFirstByAttribute:(NSString *)attribute withValue:(id)searchValue; -{ - return [self MR_requestFirstByAttribute:attribute withValue:searchValue inContext:[NSManagedObjectContext MR_contextForCurrentThread]]; -} - -+ (NSFetchRequest *) MR_requestFirstByAttribute:(NSString *)attribute withValue:(id)searchValue inContext:(NSManagedObjectContext *)context; -{ - NSFetchRequest *request = [self MR_requestAllWhere:attribute isEqualTo:searchValue inContext:context]; - [request setFetchLimit:1]; - - return request; -} - -+ (NSFetchRequest *) MR_requestAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending inContext:(NSManagedObjectContext *)context -{ - return [self MR_requestAllSortedBy:sortTerm - ascending:ascending - withPredicate:nil - inContext:context]; -} - -+ (NSFetchRequest *) MR_requestAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending -{ - return [self MR_requestAllSortedBy:sortTerm - ascending:ascending - inContext:[NSManagedObjectContext MR_contextForCurrentThread]]; -} - -+ (NSFetchRequest *) MR_requestAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending withPredicate:(NSPredicate *)searchTerm inContext:(NSManagedObjectContext *)context -{ - NSFetchRequest *request = [self MR_requestAllInContext:context]; - if (searchTerm) - { - [request setPredicate:searchTerm]; - } - [request setFetchBatchSize:[self MR_defaultBatchSize]]; - - NSMutableArray* sortDescriptors = [[NSMutableArray alloc] init]; - NSArray* sortKeys = [sortTerm componentsSeparatedByString:@","]; - for (NSString* sortKey in sortKeys) - { - NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:sortKey ascending:ascending]; - [sortDescriptors addObject:sortDescriptor]; - } - - [request setSortDescriptors:sortDescriptors]; - - return request; -} - -+ (NSFetchRequest *) MR_requestAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending withPredicate:(NSPredicate *)searchTerm; -{ - NSFetchRequest *request = [self MR_requestAllSortedBy:sortTerm - ascending:ascending - withPredicate:searchTerm - inContext:[NSManagedObjectContext MR_contextForCurrentThread]]; - return request; -} - - -@end diff --git a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalObserving.h b/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalObserving.h deleted file mode 100644 index 8faf340..0000000 --- a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalObserving.h +++ /dev/null @@ -1,20 +0,0 @@ -// -// NSManagedObjectContext+MagicalObserving.h -// Magical Record -// -// Created by Saul Mora on 3/9/12. -// Copyright (c) 2012 Magical Panda Software LLC. All rights reserved. -// - -#import - -@interface NSManagedObjectContext (MagicalObserving) - -- (void) MR_observeContext:(NSManagedObjectContext *)otherContext; -- (void) MR_stopObservingContext:(NSManagedObjectContext *)otherContext; -- (void) MR_observeContextOnMainThread:(NSManagedObjectContext *)otherContext; - -- (void) MR_observeiCloudChangesInCoordinator:(NSPersistentStoreCoordinator *)coordinator; -- (void) MR_stopObservingiCloudChangesInCoordinator:(NSPersistentStoreCoordinator *)coordinator; - -@end diff --git a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalObserving.m b/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalObserving.m deleted file mode 100644 index 81f84e5..0000000 --- a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalObserving.m +++ /dev/null @@ -1,109 +0,0 @@ -// -// NSManagedObjectContext+MagicalObserving.m -// Magical Record -// -// Created by Saul Mora on 3/9/12. -// Copyright (c) 2012 Magical Panda Software LLC. All rights reserved. -// - -#import "NSManagedObjectContext+MagicalObserving.h" -#import "NSManagedObjectContext+MagicalRecord.h" -#import "MagicalRecord.h" -#import "MagicalRecord+iCloud.h" - -NSString * const kMagicalRecordDidMergeChangesFromiCloudNotification = @"kMagicalRecordDidMergeChangesFromiCloudNotification"; - - -@implementation NSManagedObjectContext (MagicalObserving) - -#pragma mark - Context Observation Helpers - -- (void) MR_observeContext:(NSManagedObjectContext *)otherContext -{ - NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; - [notificationCenter addObserver:self - selector:@selector(MR_mergeChangesFromNotification:) - name:NSManagedObjectContextDidSaveNotification - object:otherContext]; -} - -- (void) MR_observeContextOnMainThread:(NSManagedObjectContext *)otherContext -{ - NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; - [notificationCenter addObserver:self - selector:@selector(MR_mergeChangesOnMainThread:) - name:NSManagedObjectContextDidSaveNotification - object:otherContext]; -} - -- (void) MR_stopObservingContext:(NSManagedObjectContext *)otherContext -{ - NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; - - [notificationCenter removeObserver:self - name:NSManagedObjectContextDidSaveNotification - object:otherContext]; -} - -#pragma mark - Context iCloud Merge Helpers - -- (void) MR_mergeChangesFromiCloud:(NSNotification *)notification; -{ - [self performBlock:^{ - - MRLog(@"Merging changes From iCloud %@context%@", - self == [NSManagedObjectContext MR_defaultContext] ? @"*** DEFAULT *** " : @"", - ([NSThread isMainThread] ? @" *** on Main Thread ***" : @"")); - - [self mergeChangesFromContextDidSaveNotification:notification]; - - NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; - - [notificationCenter postNotificationName:kMagicalRecordDidMergeChangesFromiCloudNotification - object:self - userInfo:[notification userInfo]]; - }]; -} - -- (void) MR_mergeChangesFromNotification:(NSNotification *)notification; -{ - MRLog(@"Merging changes to %@context%@", - self == [NSManagedObjectContext MR_defaultContext] ? @"*** DEFAULT *** " : @"", - ([NSThread isMainThread] ? @" *** on Main Thread ***" : @"")); - - [self mergeChangesFromContextDidSaveNotification:notification]; -} - -- (void) MR_mergeChangesOnMainThread:(NSNotification *)notification; -{ - if ([NSThread isMainThread]) - { - [self MR_mergeChangesFromNotification:notification]; - } - else - { - [self performSelectorOnMainThread:@selector(MR_mergeChangesFromNotification:) withObject:notification waitUntilDone:YES]; - } -} - -- (void) MR_observeiCloudChangesInCoordinator:(NSPersistentStoreCoordinator *)coordinator; -{ - if (![MagicalRecord isICloudEnabled]) return; - NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; - [notificationCenter addObserver:self - selector:@selector(MR_mergeChangesFromiCloud:) - name:NSPersistentStoreDidImportUbiquitousContentChangesNotification - object:coordinator]; - -} - -- (void) MR_stopObservingiCloudChangesInCoordinator:(NSPersistentStoreCoordinator *)coordinator; -{ - if (![MagicalRecord isICloudEnabled]) return; - NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; - [notificationCenter removeObserver:self - name:NSPersistentStoreDidImportUbiquitousContentChangesNotification - object:coordinator]; -} - -@end diff --git a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalRecord.h b/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalRecord.h deleted file mode 100644 index 2fb684b..0000000 --- a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalRecord.h +++ /dev/null @@ -1,30 +0,0 @@ -// -// NSManagedObjectContext+MagicalRecord.h -// -// Created by Saul Mora on 11/23/09. -// Copyright 2010 Magical Panda Software, LLC All rights reserved. -// - -#import "MagicalRecord.h" - -extern NSString * const kMagicalRecordDidMergeChangesFromiCloudNotification; - -@interface NSManagedObjectContext (MagicalRecord) - -+ (void) MR_initializeDefaultContextWithCoordinator:(NSPersistentStoreCoordinator *)coordinator; - -+ (NSManagedObjectContext *) MR_context NS_RETURNS_RETAINED; -+ (NSManagedObjectContext *) MR_contextWithParent:(NSManagedObjectContext *)parentContext NS_RETURNS_RETAINED; -+ (NSManagedObjectContext *) MR_newMainQueueContext NS_RETURNS_RETAINED; -+ (NSManagedObjectContext *) MR_contextWithStoreCoordinator:(NSPersistentStoreCoordinator *)coordinator NS_RETURNS_RETAINED; - -+ (void) MR_resetDefaultContext; -+ (NSManagedObjectContext *) MR_rootSavingContext; -+ (NSManagedObjectContext *) MR_defaultContext; - -- (NSString *) MR_description; -- (NSString *) MR_parentChain; - -@property (nonatomic, copy, setter = MR_setWorkingName:) NSString *MR_workingName; - -@end diff --git a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalRecord.m b/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalRecord.m deleted file mode 100644 index cbeeb5a..0000000 --- a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalRecord.m +++ /dev/null @@ -1,252 +0,0 @@ -// -// NSManagedObjectContext+MagicalRecord.m -// -// Created by Saul Mora on 11/23/09. -// Copyright 2010 Magical Panda Software, LLC All rights reserved. -// - -#import "CoreData+MagicalRecord.h" -#import - -static NSManagedObjectContext *rootSavingContext = nil; -static NSManagedObjectContext *defaultManagedObjectContext_ = nil; -static id iCloudSetupNotificationObserver = nil; - -static NSString * const kMagicalRecordNSManagedObjectContextWorkingName = @"kNSManagedObjectContextWorkingName"; - -@interface NSManagedObjectContext (MagicalRecordInternal) - -- (void) MR_mergeChangesFromNotification:(NSNotification *)notification; -- (void) MR_mergeChangesOnMainThread:(NSNotification *)notification; -+ (void) MR_setDefaultContext:(NSManagedObjectContext *)moc; -+ (void) MR_setRootSavingContext:(NSManagedObjectContext *)context; - -@end - - -@implementation NSManagedObjectContext (MagicalRecord) - -+ (void) MR_cleanUp; -{ - [self MR_setDefaultContext:nil]; - [self MR_setRootSavingContext:nil]; -} - -- (NSString *) MR_description; -{ - NSString *contextLabel = [NSString stringWithFormat:@"*** %@ ***", [self MR_workingName]]; - NSString *onMainThread = [NSThread isMainThread] ? @"*** MAIN THREAD ***" : @"*** BACKGROUND THREAD ***"; - - return [NSString stringWithFormat:@"<%@ (%p): %@> on %@", NSStringFromClass([self class]), self, contextLabel, onMainThread]; -} - -- (NSString *) MR_parentChain; -{ - NSMutableString *familyTree = [@"\n" mutableCopy]; - NSManagedObjectContext *currentContext = self; - do - { - [familyTree appendFormat:@"- %@ (%p) %@\n", [currentContext MR_workingName], currentContext, (currentContext == self ? @"(*)" : @"")]; - } - while ((currentContext = [currentContext parentContext])); - - return [NSString stringWithString:familyTree]; -} - -+ (NSManagedObjectContext *) MR_defaultContext -{ - @synchronized (self) - { - NSAssert(defaultManagedObjectContext_ != nil, @"Default Context is nil! Did you forget to initialize the Core Data Stack?"); - return defaultManagedObjectContext_; - } -} - -+ (void) MR_setDefaultContext:(NSManagedObjectContext *)moc -{ - if (defaultManagedObjectContext_) - { - [[NSNotificationCenter defaultCenter] removeObserver:defaultManagedObjectContext_]; - } - - NSPersistentStoreCoordinator *coordinator = [NSPersistentStoreCoordinator MR_defaultStoreCoordinator]; - if (iCloudSetupNotificationObserver) - { - [[NSNotificationCenter defaultCenter] removeObserver:iCloudSetupNotificationObserver]; - iCloudSetupNotificationObserver = nil; - } - - if ([MagicalRecord isICloudEnabled]) - { - [defaultManagedObjectContext_ MR_stopObservingiCloudChangesInCoordinator:coordinator]; - } - - defaultManagedObjectContext_ = moc; - [defaultManagedObjectContext_ MR_setWorkingName:@"DEFAULT"]; - - if ((defaultManagedObjectContext_ != nil) && ([self MR_rootSavingContext] != nil)) { - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(rootContextChanged:) - name:NSManagedObjectContextDidSaveNotification - object:[self MR_rootSavingContext]]; - } - - [moc MR_obtainPermanentIDsBeforeSaving]; - if ([MagicalRecord isICloudEnabled]) - { - [defaultManagedObjectContext_ MR_observeiCloudChangesInCoordinator:coordinator]; - } - else - { - // If icloud is NOT enabled at the time of this method being called, listen for it to be setup later, and THEN set up observing cloud changes - iCloudSetupNotificationObserver = [[NSNotificationCenter defaultCenter] addObserverForName:kMagicalRecordPSCDidCompleteiCloudSetupNotification - object:nil - queue:[NSOperationQueue mainQueue] - usingBlock:^(NSNotification *note) { - [[NSManagedObjectContext MR_defaultContext] MR_observeiCloudChangesInCoordinator:coordinator]; - }]; - } - MRLog(@"Set Default Context: %@", defaultManagedObjectContext_); -} - -+ (void)rootContextChanged:(NSNotification *)notification { - if ([NSThread isMainThread] == NO) { - dispatch_async(dispatch_get_main_queue(), ^{ - [self rootContextChanged:notification]; - }); - - return; - } - - [[self MR_defaultContext] mergeChangesFromContextDidSaveNotification:notification]; -} - -+ (NSManagedObjectContext *) MR_rootSavingContext; -{ - return rootSavingContext; -} - -+ (void) MR_setRootSavingContext:(NSManagedObjectContext *)context; -{ - if (rootSavingContext) - { - [[NSNotificationCenter defaultCenter] removeObserver:rootSavingContext]; - } - - rootSavingContext = context; - [context MR_obtainPermanentIDsBeforeSaving]; - [rootSavingContext setMergePolicy:NSMergeByPropertyObjectTrumpMergePolicy]; - [rootSavingContext MR_setWorkingName:@"BACKGROUND SAVING (ROOT)"]; - MRLog(@"Set Root Saving Context: %@", rootSavingContext); -} - -+ (void) MR_initializeDefaultContextWithCoordinator:(NSPersistentStoreCoordinator *)coordinator; -{ - if (defaultManagedObjectContext_ == nil) - { - NSManagedObjectContext *rootContext = [self MR_contextWithStoreCoordinator:coordinator]; - [self MR_setRootSavingContext:rootContext]; - - NSManagedObjectContext *defaultContext = [self MR_newMainQueueContext]; - [self MR_setDefaultContext:defaultContext]; - - [defaultContext setParentContext:rootContext]; - } -} - -+ (void) MR_resetDefaultContext -{ - void (^resetBlock)(void) = ^{ - [[NSManagedObjectContext MR_defaultContext] reset]; - }; - - dispatch_async(dispatch_get_main_queue(), resetBlock); -} - -+ (NSManagedObjectContext *) MR_contextWithoutParent; -{ - NSManagedObjectContext *context = [[self alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType]; - return context; -} - -+ (NSManagedObjectContext *) MR_context; -{ - NSManagedObjectContext *context = [[self alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType]; - [context setParentContext:[self MR_defaultContext]]; - return context; -} - -+ (NSManagedObjectContext *) MR_contextWithParent:(NSManagedObjectContext *)parentContext; -{ - NSManagedObjectContext *context = [self MR_contextWithoutParent]; - [context setParentContext:parentContext]; - [context MR_obtainPermanentIDsBeforeSaving]; - return context; -} - -+ (NSManagedObjectContext *) MR_newMainQueueContext; -{ - NSManagedObjectContext *context = [[self alloc] initWithConcurrencyType:NSMainQueueConcurrencyType]; - MRLog(@"Created Main Queue Context: %@", context); - return context; -} - -+ (NSManagedObjectContext *) MR_contextWithStoreCoordinator:(NSPersistentStoreCoordinator *)coordinator; -{ - NSManagedObjectContext *context = nil; - if (coordinator != nil) - { - context = [self MR_contextWithoutParent]; - [context performBlockAndWait:^{ - [context setPersistentStoreCoordinator:coordinator]; - }]; - - MRLog(@"-> Created Context %@", [context MR_workingName]); - } - return context; -} - -- (void) MR_obtainPermanentIDsBeforeSaving; -{ - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(MR_contextWillSave:) - name:NSManagedObjectContextWillSaveNotification - object:self]; - - -} - -- (void) MR_contextWillSave:(NSNotification *)notification -{ - NSManagedObjectContext *context = [notification object]; - NSSet *insertedObjects = [context insertedObjects]; - - if ([insertedObjects count]) - { - MRLog(@"Context %@ is about to save. Obtaining permanent IDs for new %lu inserted objects", [context MR_workingName], (unsigned long)[insertedObjects count]); - NSError *error = nil; - BOOL success = [context obtainPermanentIDsForObjects:[insertedObjects allObjects] error:&error]; - if (!success) - { - [MagicalRecord handleErrors:error]; - } - } -} - -- (void) MR_setWorkingName:(NSString *)workingName; -{ - [[self userInfo] setObject:workingName forKey:kMagicalRecordNSManagedObjectContextWorkingName]; -} - -- (NSString *) MR_workingName; -{ - NSString *workingName = [[self userInfo] objectForKey:kMagicalRecordNSManagedObjectContextWorkingName]; - if (nil == workingName) - { - workingName = @"UNNAMED"; - } - return workingName; -} - - -@end diff --git a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalSaves.h b/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalSaves.h deleted file mode 100644 index 2eb1bc7..0000000 --- a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalSaves.h +++ /dev/null @@ -1,93 +0,0 @@ -// -// NSManagedObjectContext+MagicalSaves.h -// Magical Record -// -// Created by Saul Mora on 3/9/12. -// Copyright (c) 2012 Magical Panda Software LLC. All rights reserved. -// - -#import - -typedef NS_OPTIONS(NSUInteger, MRSaveContextOptions) { - MRSaveParentContexts = 1, ///< When saving, continue saving parent contexts until the changes are present in the persistent store - MRSaveSynchronously = 2 ///< Peform saves synchronously, blocking execution on the current thread until the save is complete -}; - -typedef void (^MRSaveCompletionHandler)(BOOL success, NSError *error); - -@interface NSManagedObjectContext (MagicalSaves) - -/// \brief Asynchronously save changes in the current context and it's parent -/// \param completion Completion block that is called after the save has completed. The block is passed a success state as a `BOOL` and an `NSError` instance if an error occurs. Always called on the main queue. -/// \discussion Executes a save on the current context's dispatch queue asynchronously. This method only saves the current context, and the parent of the current context if one is set. The completion block will always be called on the main queue. -- (void) MR_saveOnlySelfWithCompletion:(MRSaveCompletionHandler)completion; - -/// \brief Asynchronously save changes in the current context all the way back to the persistent store -/// \param completion Completion block that is called after the save has completed. The block is passed a success state as a `BOOL` and an `NSError` instance if an error occurs. Always called on the main queue. -/// \discussion Executes asynchronous saves on the current context, and any ancestors, until the changes have been persisted to the assigned persistent store. The completion block will always be called on the main queue. -- (void) MR_saveToPersistentStoreWithCompletion:(MRSaveCompletionHandler)completion; - -/// \brief Synchronously save changes in the current context and it's parent -/// \discussion Executes a save on the current context's dispatch queue. This method only saves the current context, and the parent of the current context if one is set. The method will not return until the save is complete. -- (void) MR_saveOnlySelfAndWait; - -/// \brief Synchronously save changes in the current context all the way back to the persistent store -/// \discussion Executes saves on the current context, and any ancestors, until the changes have been persisted to the assigned persistent store. The method will not return until the save is complete. -- (void) MR_saveToPersistentStoreAndWait; - -/// \brief Save the current context with options -/// \param mask bitmasked options for the save process -/// \param completion Completion block that is called after the save has completed. The block is passed a success state as a `BOOL` and an `NSError` instance if an error occurs. Always called on the main queue. -/// \discussion All other save methods are conveniences to this method. - - (void) MR_saveWithOptions:(MRSaveContextOptions)mask completion:(MRSaveCompletionHandler)completion; - - -/* DEPRECATION NOTICE: - * The following methods are deprecated, but remain in place for backwards compatibility until the next major version (3.x) - */ - -/// \brief Synchronously save changes in the current context all the way back to the persistent store -/// \discussion Replaced by \MR_saveToPersistentStoreAndWait -/// \deprecated -- (void) MR_save __attribute__((deprecated)); - -/// \brief Synchronously save changes in the current context all the way back to the persistent store -/// \param errorCallback Block that is called if an error is encountered while saving. Always called on the main thread. -/// \deprecated -- (void) MR_saveWithErrorCallback:(void(^)(NSError *error))errorCallback __attribute__((deprecated)); - -/// \brief Asynchronously save changes in the current context and it's parent -/// \param completion Completion block that is called after the save has completed. Always called on the main queue. -/// \deprecated -- (void) MR_saveInBackgroundCompletion:(void (^)(void))completion __attribute__((deprecated)); - -/// \brief Asynchronously save changes in the current context and it's parent -/// \param errorCallback Block that is called if an error is encountered while saving. Always called on the main thread. -/// \deprecated -- (void) MR_saveInBackgroundErrorHandler:(void (^)(NSError *error))errorCallback __attribute__((deprecated)); - -/// \brief Asynchronously save changes in the current context and it's parent -/// \param errorCallback Block that is called if an error is encountered while saving. Always called on the main thread. -/// \param completion Completion block that is called after the save has completed. Always called on the main queue. -/// \deprecated -- (void) MR_saveInBackgroundErrorHandler:(void (^)(NSError *error))errorCallback completion:(void (^)(void))completion __attribute__((deprecated)); - -/// \brief Asynchronously save changes in the current context all the way back to the persistent store -/// \discussion Replaced by \MR_saveToPersistentStoreWithCompletion: -/// \deprecated -- (void) MR_saveNestedContexts __attribute__((deprecated)); - -/// \brief Asynchronously save changes in the current context all the way back to the persistent store -/// \param errorCallback Block that is called if an error is encountered while saving. Always called on the main thread. -/// \discussion Replaced by \MR_saveToPersistentStoreWithCompletion: -/// \deprecated -- (void) MR_saveNestedContextsErrorHandler:(void (^)(NSError *error))errorCallback __attribute__((deprecated)); - -/// \brief Asynchronously save changes in the current context all the way back to the persistent store -/// \param errorCallback Block that is called if an error is encountered while saving. Always called on the main thread. -/// \param completion Completion block that is called after the save has completed. Always called on the main queue. -/// \discussion Replaced by \MR_saveToPersistentStoreWithCompletion: -/// \deprecated -- (void) MR_saveNestedContextsErrorHandler:(void (^)(NSError *error))errorCallback completion:(void (^)(void))completion __attribute__((deprecated)); - -@end diff --git a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalSaves.m b/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalSaves.m deleted file mode 100644 index 35239e0..0000000 --- a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalSaves.m +++ /dev/null @@ -1,202 +0,0 @@ -// -// NSManagedObjectContext+MagicalSaves.m -// Magical Record -// -// Created by Saul Mora on 3/9/12. -// Copyright (c) 2012 Magical Panda Software LLC. All rights reserved. -// - -#import "NSManagedObjectContext+MagicalSaves.h" -#import "MagicalRecord+ErrorHandling.h" -#import "NSManagedObjectContext+MagicalRecord.h" -#import "MagicalRecord.h" - -@implementation NSManagedObjectContext (MagicalSaves) - -- (void)MR_saveOnlySelfWithCompletion:(MRSaveCompletionHandler)completion; -{ - [self MR_saveWithOptions:0 completion:completion]; -} - -- (void)MR_saveOnlySelfAndWait; -{ - [self MR_saveWithOptions:MRSaveSynchronously completion:nil]; -} - -- (void) MR_saveToPersistentStoreWithCompletion:(MRSaveCompletionHandler)completion; -{ - [self MR_saveWithOptions:MRSaveParentContexts completion:completion]; -} - -- (void) MR_saveToPersistentStoreAndWait; -{ - [self MR_saveWithOptions:MRSaveParentContexts | MRSaveSynchronously completion:nil]; -} - -- (void)MR_saveWithOptions:(MRSaveContextOptions)mask completion:(MRSaveCompletionHandler)completion; -{ - BOOL syncSave = ((mask & MRSaveSynchronously) == MRSaveSynchronously); - BOOL saveParentContexts = ((mask & MRSaveParentContexts) == MRSaveParentContexts); - - if (![self hasChanges]) { - MRLog(@"NO CHANGES IN ** %@ ** CONTEXT - NOT SAVING", [self MR_workingName]); - - if (completion) - { - dispatch_async(dispatch_get_main_queue(), ^{ - completion(NO, nil); - }); - } - - return; - } - - MRLog(@"→ Saving %@", [self MR_description]); - MRLog(@"→ Save Parents? %@", @(saveParentContexts)); - MRLog(@"→ Save Synchronously? %@", @(syncSave)); - - id saveBlock = ^{ - NSError *error = nil; - BOOL saved = NO; - - @try - { - saved = [self save:&error]; - } - @catch(NSException *exception) - { - MRLog(@"Unable to perform save: %@", (id)[exception userInfo] ? : (id)[exception reason]); - } - - @finally - { - if (!saved) { - [MagicalRecord handleErrors:error]; - - if (completion) { - dispatch_async(dispatch_get_main_queue(), ^{ - completion(saved, error); - }); - } - } else { - // If we're the default context, save to disk too (the user expects it to persist) - BOOL isDefaultContext = (self == [[self class] MR_defaultContext]); - BOOL shouldSaveParentContext = ((YES == saveParentContexts) || isDefaultContext); - - if (shouldSaveParentContext && [self parentContext]) { - [[self parentContext] MR_saveWithOptions:mask completion:completion]; - } - // If we should not save the parent context, or there is not a parent context to save (root context), call the completion block - else { - MRLog(@"→ Finished saving: %@", [self MR_description]); - - if (completion) { - dispatch_async(dispatch_get_main_queue(), ^{ - completion(saved, error); - }); - } - } - } - } - }; - - if (YES == syncSave) { - [self performBlockAndWait:saveBlock]; - } else { - [self performBlock:saveBlock]; - } -} - -#pragma mark - Deprecated methods -// These methods will be removed in MagicalRecord 3.0 - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-implementations" - -- (void)MR_save; -{ - [self MR_saveToPersistentStoreAndWait]; -} - -- (void)MR_saveWithErrorCallback:(void (^)(NSError *error))errorCallback; -{ - [self MR_saveWithOptions:MRSaveSynchronously|MRSaveParentContexts completion:^(BOOL success, NSError *error) { - if (!success) { - if (errorCallback) { - errorCallback(error); - } - } - }]; -} - -- (void)MR_saveInBackgroundCompletion:(void (^)(void))completion; -{ - [self MR_saveOnlySelfWithCompletion:^(BOOL success, NSError *error) { - if (success) { - if (completion) { - completion(); - } - } - }]; -} - -- (void)MR_saveInBackgroundErrorHandler:(void (^)(NSError *error))errorCallback; -{ - [self MR_saveOnlySelfWithCompletion:^(BOOL success, NSError *error) { - if (!success) { - if (errorCallback) { - errorCallback(error); - } - } - }]; -} - -- (void)MR_saveInBackgroundErrorHandler:(void (^)(NSError *error))errorCallback completion:(void (^)(void))completion; -{ - [self MR_saveOnlySelfWithCompletion:^(BOOL success, NSError *error) { - if (success) { - if (completion) { - completion(); - } - } else { - if (errorCallback) { - errorCallback(error); - } - } - }]; -} - -- (void)MR_saveNestedContexts; -{ - [self MR_saveToPersistentStoreWithCompletion:nil]; -} - -- (void)MR_saveNestedContextsErrorHandler:(void (^)(NSError *error))errorCallback; -{ - [self MR_saveToPersistentStoreWithCompletion:^(BOOL success, NSError *error) { - if (!success) { - if (errorCallback) { - errorCallback(error); - } - } - }]; -} - -- (void)MR_saveNestedContextsErrorHandler:(void (^)(NSError *error))errorCallback completion:(void (^)(void))completion; -{ - [self MR_saveToPersistentStoreWithCompletion:^(BOOL success, NSError *error) { - if (success) { - if (completion) { - completion(); - } - } else { - if (errorCallback) { - errorCallback(error); - } - } - }]; -} - -#pragma clang diagnostic pop // ignored "-Wdeprecated-implementations" - -@end diff --git a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalThreading.h b/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalThreading.h deleted file mode 100644 index 6b9ae00..0000000 --- a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalThreading.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// NSManagedObjectContext+MagicalThreading.h -// Magical Record -// -// Created by Saul Mora on 3/9/12. -// Copyright (c) 2012 Magical Panda Software LLC. All rights reserved. -// - -#import - -@interface NSManagedObjectContext (MagicalThreading) - -+ (NSManagedObjectContext *) MR_contextForCurrentThread; -+ (void) MR_resetContextForCurrentThread; - -@end diff --git a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalThreading.m b/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalThreading.m deleted file mode 100644 index 7d345e5..0000000 --- a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalThreading.m +++ /dev/null @@ -1,41 +0,0 @@ -// -// NSManagedObjectContext+MagicalThreading.m -// Magical Record -// -// Created by Saul Mora on 3/9/12. -// Copyright (c) 2012 Magical Panda Software LLC. All rights reserved. -// - -#import "NSManagedObjectContext+MagicalThreading.h" -#import "NSManagedObject+MagicalRecord.h" -#import "NSManagedObjectContext+MagicalRecord.h" - -static NSString const * kMagicalRecordManagedObjectContextKey = @"MagicalRecord_NSManagedObjectContextForThreadKey"; - -@implementation NSManagedObjectContext (MagicalThreading) - -+ (void)MR_resetContextForCurrentThread -{ - [[NSManagedObjectContext MR_contextForCurrentThread] reset]; -} - -+ (NSManagedObjectContext *) MR_contextForCurrentThread; -{ - if ([NSThread isMainThread]) - { - return [self MR_defaultContext]; - } - else - { - NSMutableDictionary *threadDict = [[NSThread currentThread] threadDictionary]; - NSManagedObjectContext *threadContext = [threadDict objectForKey:kMagicalRecordManagedObjectContextKey]; - if (threadContext == nil) - { - threadContext = [self MR_contextWithParent:[NSManagedObjectContext MR_defaultContext]]; - [threadDict setObject:threadContext forKey:kMagicalRecordManagedObjectContextKey]; - } - return threadContext; - } -} - -@end diff --git a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObjectModel+MagicalRecord.h b/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObjectModel+MagicalRecord.h deleted file mode 100644 index 8a543b4..0000000 --- a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObjectModel+MagicalRecord.h +++ /dev/null @@ -1,23 +0,0 @@ -// -// NSManagedObjectModel+MagicalRecord.h -// -// Created by Saul Mora on 3/11/10. -// Copyright 2010 Magical Panda Software, LLC All rights reserved. -// - -#import -#import "MagicalRecord.h" - - -@interface NSManagedObjectModel (MagicalRecord) - -+ (NSManagedObjectModel *) MR_defaultManagedObjectModel; - -+ (void) MR_setDefaultManagedObjectModel:(NSManagedObjectModel *)newDefaultModel; - -+ (NSManagedObjectModel *) MR_mergedObjectModelFromMainBundle; -+ (NSManagedObjectModel *) MR_newManagedObjectModelNamed:(NSString *)modelFileName NS_RETURNS_RETAINED; -+ (NSManagedObjectModel *) MR_managedObjectModelNamed:(NSString *)modelFileName; -+ (NSManagedObjectModel *) MR_newModelNamed:(NSString *) modelName inBundleNamed:(NSString *) bundleName NS_RETURNS_RETAINED; - -@end diff --git a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObjectModel+MagicalRecord.m b/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObjectModel+MagicalRecord.m deleted file mode 100644 index cc4df40..0000000 --- a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/NSManagedObjectModel+MagicalRecord.m +++ /dev/null @@ -1,63 +0,0 @@ -// -// NSManagedObjectModel+MagicalRecord.m -// -// Created by Saul Mora on 3/11/10. -// Copyright 2010 Magical Panda Software, LLC All rights reserved. -// - -//#import "NSManagedObjectModel+MagicalRecord.h" -#import "CoreData+MagicalRecord.h" - - -static NSManagedObjectModel *defaultManagedObjectModel_ = nil; - -@implementation NSManagedObjectModel (MagicalRecord) - -+ (NSManagedObjectModel *) MR_defaultManagedObjectModel -{ - if (defaultManagedObjectModel_ == nil && [MagicalRecord shouldAutoCreateManagedObjectModel]) - { - [self MR_setDefaultManagedObjectModel:[self MR_mergedObjectModelFromMainBundle]]; - } - return defaultManagedObjectModel_; -} - -+ (void) MR_setDefaultManagedObjectModel:(NSManagedObjectModel *)newDefaultModel -{ - defaultManagedObjectModel_ = newDefaultModel; -} - -+ (NSManagedObjectModel *) MR_mergedObjectModelFromMainBundle; -{ - return [self mergedModelFromBundles:nil]; -} - -+ (NSManagedObjectModel *) MR_newModelNamed:(NSString *) modelName inBundleNamed:(NSString *) bundleName -{ - NSString *path = [[NSBundle mainBundle] pathForResource:[modelName stringByDeletingPathExtension] - ofType:[modelName pathExtension] - inDirectory:bundleName]; - NSURL *modelUrl = [NSURL fileURLWithPath:path]; - - NSManagedObjectModel *mom = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelUrl]; - - return mom; -} - -+ (NSManagedObjectModel *) MR_newManagedObjectModelNamed:(NSString *)modelFileName -{ - NSString *path = [[NSBundle mainBundle] pathForResource:[modelFileName stringByDeletingPathExtension] - ofType:[modelFileName pathExtension]]; - NSURL *momURL = [NSURL fileURLWithPath:path]; - - NSManagedObjectModel *model = [[NSManagedObjectModel alloc] initWithContentsOfURL:momURL]; - return model; -} - -+ (NSManagedObjectModel *) MR_managedObjectModelNamed:(NSString *)modelFileName -{ - NSManagedObjectModel *model = [self MR_newManagedObjectModelNamed:modelFileName]; - return model; -} - -@end diff --git a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/NSPersistentStore+MagicalRecord.h b/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/NSPersistentStore+MagicalRecord.h deleted file mode 100644 index 948aa2e..0000000 --- a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/NSPersistentStore+MagicalRecord.h +++ /dev/null @@ -1,27 +0,0 @@ -// -// NSPersistentStore+MagicalRecord.h -// -// Created by Saul Mora on 3/11/10. -// Copyright 2010 Magical Panda Software, LLC All rights reserved. -// - -#import "MagicalRecord.h" - -// option to autodelete store if it already exists - -extern NSString * const kMagicalRecordDefaultStoreFileName; - - -@interface NSPersistentStore (MagicalRecord) - -+ (NSURL *) MR_defaultLocalStoreUrl; - -+ (NSPersistentStore *) MR_defaultPersistentStore; -+ (void) MR_setDefaultPersistentStore:(NSPersistentStore *) store; - -+ (NSURL *) MR_urlForStoreName:(NSString *)storeFileName; -+ (NSURL *) MR_cloudURLForUbiqutiousContainer:(NSString *)bucketName; - -@end - - diff --git a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/NSPersistentStore+MagicalRecord.m b/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/NSPersistentStore+MagicalRecord.m deleted file mode 100644 index 44ccf78..0000000 --- a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/NSPersistentStore+MagicalRecord.m +++ /dev/null @@ -1,79 +0,0 @@ -// -// NSPersistentStore+MagicalRecord.m -// -// Created by Saul Mora on 3/11/10. -// Copyright 2010 Magical Panda Software, LLC All rights reserved. -// - -//#import "NSPersistentStore+MagicalRecord.h" -#import "CoreData+MagicalRecord.h" - -NSString * const kMagicalRecordDefaultStoreFileName = @"CoreDataStore.sqlite"; - -static NSPersistentStore *defaultPersistentStore_ = nil; - - -@implementation NSPersistentStore (MagicalRecord) - -+ (NSPersistentStore *) MR_defaultPersistentStore -{ - return defaultPersistentStore_; -} - -+ (void) MR_setDefaultPersistentStore:(NSPersistentStore *) store -{ - defaultPersistentStore_ = store; -} - -+ (NSString *) MR_directory:(int) type -{ - return [NSSearchPathForDirectoriesInDomains(type, NSUserDomainMask, YES) lastObject]; -} - -+ (NSString *)MR_applicationDocumentsDirectory -{ - return [self MR_directory:NSDocumentDirectory]; -} - -+ (NSString *)MR_applicationStorageDirectory -{ - NSString *applicationName = [[[NSBundle mainBundle] infoDictionary] valueForKey:(NSString *)kCFBundleNameKey]; - return [[self MR_directory:NSApplicationSupportDirectory] stringByAppendingPathComponent:applicationName]; -} - -+ (NSURL *) MR_urlForStoreName:(NSString *)storeFileName -{ - NSArray *paths = [NSArray arrayWithObjects:[self MR_applicationDocumentsDirectory], [self MR_applicationStorageDirectory], nil]; - NSFileManager *fm = [[NSFileManager alloc] init]; - - for (NSString *path in paths) - { - NSString *filepath = [path stringByAppendingPathComponent:storeFileName]; - if ([fm fileExistsAtPath:filepath]) - { - return [NSURL fileURLWithPath:filepath]; - } - } - - //set default url - return [NSURL fileURLWithPath:[[self MR_applicationStorageDirectory] stringByAppendingPathComponent:storeFileName]]; -} - -+ (NSURL *) MR_cloudURLForUbiqutiousContainer:(NSString *)bucketName; -{ - NSFileManager *fileManager = [[NSFileManager alloc] init]; - NSURL *cloudURL = nil; - if ([fileManager respondsToSelector:@selector(URLForUbiquityContainerIdentifier:)]) - { - cloudURL = [fileManager URLForUbiquityContainerIdentifier:bucketName]; - } - - return cloudURL; -} - -+ (NSURL *) MR_defaultLocalStoreUrl -{ - return [self MR_urlForStoreName:kMagicalRecordDefaultStoreFileName]; -} - -@end diff --git a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/NSPersistentStoreCoordinator+MagicalRecord.h b/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/NSPersistentStoreCoordinator+MagicalRecord.h deleted file mode 100644 index b4be8b7..0000000 --- a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/NSPersistentStoreCoordinator+MagicalRecord.h +++ /dev/null @@ -1,36 +0,0 @@ -// -// NSPersistentStoreCoordinator+MagicalRecord.h -// -// Created by Saul Mora on 3/11/10. -// Copyright 2010 Magical Panda Software, LLC All rights reserved. -// - -#import "MagicalRecord.h" -#import "NSPersistentStore+MagicalRecord.h" - -extern NSString * const kMagicalRecordPSCDidCompleteiCloudSetupNotification; - -@interface NSPersistentStoreCoordinator (MagicalRecord) - -+ (NSPersistentStoreCoordinator *) MR_defaultStoreCoordinator; -+ (void) MR_setDefaultStoreCoordinator:(NSPersistentStoreCoordinator *)coordinator; - -+ (NSPersistentStoreCoordinator *) MR_coordinatorWithInMemoryStore; - -+ (NSPersistentStoreCoordinator *) MR_newPersistentStoreCoordinator NS_RETURNS_RETAINED; - -+ (NSPersistentStoreCoordinator *) MR_coordinatorWithSqliteStoreNamed:(NSString *)storeFileName; -+ (NSPersistentStoreCoordinator *) MR_coordinatorWithAutoMigratingSqliteStoreNamed:(NSString *)storeFileName; -+ (NSPersistentStoreCoordinator *) MR_coordinatorWithPersistentStore:(NSPersistentStore *)persistentStore; -+ (NSPersistentStoreCoordinator *) MR_coordinatorWithiCloudContainerID:(NSString *)containerID contentNameKey:(NSString *)contentNameKey localStoreNamed:(NSString *)localStoreName cloudStorePathComponent:(NSString *)subPathComponent; - -+ (NSPersistentStoreCoordinator *) MR_coordinatorWithiCloudContainerID:(NSString *)containerID contentNameKey:(NSString *)contentNameKey localStoreNamed:(NSString *)localStoreName cloudStorePathComponent:(NSString *)subPathComponent completion:(void(^)(void))completionHandler; - -- (NSPersistentStore *) MR_addInMemoryStore; -- (NSPersistentStore *) MR_addAutoMigratingSqliteStoreNamed:(NSString *) storeFileName; -- (NSPersistentStore *) MR_addSqliteStoreNamed:(id)storeFileName withOptions:(__autoreleasing NSDictionary *)options; - -- (void) MR_addiCloudContainerID:(NSString *)containerID contentNameKey:(NSString *)contentNameKey localStoreNamed:(NSString *)localStoreName cloudStorePathComponent:(NSString *)subPathComponent; -- (void) MR_addiCloudContainerID:(NSString *)containerID contentNameKey:(NSString *)contentNameKey localStoreNamed:(NSString *)localStoreName cloudStorePathComponent:(NSString *)subPathComponent completion:(void(^)(void))completionBlock; - -@end diff --git a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/NSPersistentStoreCoordinator+MagicalRecord.m b/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/NSPersistentStoreCoordinator+MagicalRecord.m deleted file mode 100644 index 80c8cd3..0000000 --- a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Categories/NSPersistentStoreCoordinator+MagicalRecord.m +++ /dev/null @@ -1,300 +0,0 @@ -// -// NSPersistentStoreCoordinator+MagicalRecord.m -// -// Created by Saul Mora on 3/11/10. -// Copyright 2010 Magical Panda Software, LLC All rights reserved. -// - -#import "CoreData+MagicalRecord.h" - -static NSPersistentStoreCoordinator *defaultCoordinator_ = nil; -NSString * const kMagicalRecordPSCDidCompleteiCloudSetupNotification = @"kMagicalRecordPSCDidCompleteiCloudSetupNotification"; - -@interface NSDictionary (MagicalRecordMerging) - -- (NSMutableDictionary*) MR_dictionaryByMergingDictionary:(NSDictionary*)d; - -@end - -@interface MagicalRecord (iCloudPrivate) - -+ (void) setICloudEnabled:(BOOL)enabled; - -@end - -@implementation NSPersistentStoreCoordinator (MagicalRecord) - -+ (NSPersistentStoreCoordinator *) MR_defaultStoreCoordinator -{ - if (defaultCoordinator_ == nil && [MagicalRecord shouldAutoCreateDefaultPersistentStoreCoordinator]) - { - [self MR_setDefaultStoreCoordinator:[self MR_newPersistentStoreCoordinator]]; - } - return defaultCoordinator_; -} - -+ (void) MR_setDefaultStoreCoordinator:(NSPersistentStoreCoordinator *)coordinator -{ - defaultCoordinator_ = coordinator; - - if (defaultCoordinator_ != nil) - { - NSArray *persistentStores = [defaultCoordinator_ persistentStores]; - - if ([persistentStores count] && [NSPersistentStore MR_defaultPersistentStore] == nil) - { - [NSPersistentStore MR_setDefaultPersistentStore:[persistentStores objectAtIndex:0]]; - } - } -} - -- (void) MR_createPathToStoreFileIfNeccessary:(NSURL *)urlForStore -{ - NSFileManager *fileManager = [NSFileManager defaultManager]; - NSURL *pathToStore = [urlForStore URLByDeletingLastPathComponent]; - - NSError *error = nil; - BOOL pathWasCreated = [fileManager createDirectoryAtPath:[pathToStore path] withIntermediateDirectories:YES attributes:nil error:&error]; - - if (!pathWasCreated) - { - [MagicalRecord handleErrors:error]; - } -} - -- (NSPersistentStore *) MR_addSqliteStoreNamed:(id)storeFileName withOptions:(__autoreleasing NSDictionary *)options -{ - NSURL *url = [storeFileName isKindOfClass:[NSURL class]] ? storeFileName : [NSPersistentStore MR_urlForStoreName:storeFileName]; - NSError *error = nil; - - [self MR_createPathToStoreFileIfNeccessary:url]; - - NSPersistentStore *store = [self addPersistentStoreWithType:NSSQLiteStoreType - configuration:nil - URL:url - options:options - error:&error]; - - if (!store && [MagicalRecord shouldDeleteStoreOnModelMismatch]) - { - BOOL isMigrationError = [error code] == NSPersistentStoreIncompatibleVersionHashError || [error code] == NSMigrationMissingSourceModelError; - if ([[error domain] isEqualToString:NSCocoaErrorDomain] && isMigrationError) - { - // Could not open the database, so... kill it! - [[NSFileManager defaultManager] removeItemAtURL:url error:nil]; - - MRLog(@"Removed incompatible model version: %@", [url lastPathComponent]); - - // Try one more time to create the store - store = [self addPersistentStoreWithType:NSSQLiteStoreType - configuration:nil - URL:url - options:options - error:&error]; - if (store) - { - // If we successfully added a store, remove the error that was initially created - error = nil; - } - } - - [MagicalRecord handleErrors:error]; - } - return store; -} - - -#pragma mark - Public Instance Methods - -- (NSPersistentStore *) MR_addInMemoryStore -{ - NSError *error = nil; - NSPersistentStore *store = [self addPersistentStoreWithType:NSInMemoryStoreType - configuration:nil - URL:nil - options:nil - error:&error]; - if (!store) - { - [MagicalRecord handleErrors:error]; - } - return store; -} - -+ (NSDictionary *) MR_autoMigrationOptions; -{ - // Adding the journalling mode recommended by apple - NSMutableDictionary *sqliteOptions = [NSMutableDictionary dictionary]; - [sqliteOptions setObject:@"WAL" forKey:@"journal_mode"]; - - NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys: - [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption, - [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, - sqliteOptions, NSSQLitePragmasOption, - nil]; - return options; -} - -- (NSPersistentStore *) MR_addAutoMigratingSqliteStoreNamed:(NSString *) storeFileName; -{ - NSDictionary *options = [[self class] MR_autoMigrationOptions]; - return [self MR_addSqliteStoreNamed:storeFileName withOptions:options]; -} - - -#pragma mark - Public Class Methods - - -+ (NSPersistentStoreCoordinator *) MR_coordinatorWithAutoMigratingSqliteStoreNamed:(NSString *) storeFileName -{ - NSManagedObjectModel *model = [NSManagedObjectModel MR_defaultManagedObjectModel]; - NSPersistentStoreCoordinator *coordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model]; - - [coordinator MR_addAutoMigratingSqliteStoreNamed:storeFileName]; - - //HACK: lame solution to fix automigration error "Migration failed after first pass" - if ([[coordinator persistentStores] count] == 0) - { - [coordinator performSelector:@selector(MR_addAutoMigratingSqliteStoreNamed:) withObject:storeFileName afterDelay:0.5]; - } - - return coordinator; -} - -+ (NSPersistentStoreCoordinator *) MR_coordinatorWithInMemoryStore -{ - NSManagedObjectModel *model = [NSManagedObjectModel MR_defaultManagedObjectModel]; - NSPersistentStoreCoordinator *coordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model]; - - [coordinator MR_addInMemoryStore]; - - return coordinator; -} - -+ (NSPersistentStoreCoordinator *) MR_newPersistentStoreCoordinator -{ - NSPersistentStoreCoordinator *coordinator = [self MR_coordinatorWithSqliteStoreNamed:[MagicalRecord defaultStoreName]]; - - return coordinator; -} - -- (void) MR_addiCloudContainerID:(NSString *)containerID contentNameKey:(NSString *)contentNameKey localStoreNamed:(NSString *)localStoreName cloudStorePathComponent:(NSString *)subPathComponent; -{ - [self MR_addiCloudContainerID:containerID - contentNameKey:contentNameKey - localStoreNamed:localStoreName - cloudStorePathComponent:subPathComponent - completion:nil]; -} - -- (void) MR_addiCloudContainerID:(NSString *)containerID contentNameKey:(NSString *)contentNameKey localStoreNamed:(NSString *)localStoreName cloudStorePathComponent:(NSString *)subPathComponent completion:(void(^)(void))completionBlock; -{ - dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ - - NSURL *cloudURL = [NSPersistentStore MR_cloudURLForUbiqutiousContainer:containerID]; - if (subPathComponent) - { - cloudURL = [cloudURL URLByAppendingPathComponent:subPathComponent]; - } - - [MagicalRecord setICloudEnabled:cloudURL != nil]; - - NSDictionary *options = [[self class] MR_autoMigrationOptions]; - if (cloudURL) //iCloud is available - { - NSDictionary *iCloudOptions = [NSDictionary dictionaryWithObjectsAndKeys: - contentNameKey, NSPersistentStoreUbiquitousContentNameKey, - cloudURL, NSPersistentStoreUbiquitousContentURLKey, nil]; - options = [options MR_dictionaryByMergingDictionary:iCloudOptions]; - } - else - { - MRLog(@"iCloud is not enabled"); - } - - [self lock]; - [self MR_addSqliteStoreNamed:localStoreName withOptions:options]; - [self unlock]; - - dispatch_async(dispatch_get_main_queue(), ^{ - if ([NSPersistentStore MR_defaultPersistentStore] == nil) - { - [NSPersistentStore MR_setDefaultPersistentStore:[[self persistentStores] objectAtIndex:0]]; - } - if (completionBlock) - { - completionBlock(); - } - NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; - [notificationCenter postNotificationName:kMagicalRecordPSCDidCompleteiCloudSetupNotification object:nil]; - }); - }); -} - -+ (NSPersistentStoreCoordinator *) MR_coordinatorWithiCloudContainerID:(NSString *)containerID - contentNameKey:(NSString *)contentNameKey - localStoreNamed:(NSString *)localStoreName - cloudStorePathComponent:(NSString *)subPathComponent; -{ - return [self MR_coordinatorWithiCloudContainerID:containerID - contentNameKey:contentNameKey - localStoreNamed:localStoreName - cloudStorePathComponent:subPathComponent - completion:nil]; -} - -+ (NSPersistentStoreCoordinator *) MR_coordinatorWithiCloudContainerID:(NSString *)containerID - contentNameKey:(NSString *)contentNameKey - localStoreNamed:(NSString *)localStoreName - cloudStorePathComponent:(NSString *)subPathComponent - completion:(void(^)(void))completionHandler; -{ - NSManagedObjectModel *model = [NSManagedObjectModel MR_defaultManagedObjectModel]; - NSPersistentStoreCoordinator *psc = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model]; - - [psc MR_addiCloudContainerID:containerID - contentNameKey:contentNameKey - localStoreNamed:localStoreName - cloudStorePathComponent:subPathComponent - completion:completionHandler]; - - return psc; -} - -+ (NSPersistentStoreCoordinator *) MR_coordinatorWithPersistentStore:(NSPersistentStore *)persistentStore; -{ - NSManagedObjectModel *model = [NSManagedObjectModel MR_defaultManagedObjectModel]; - NSPersistentStoreCoordinator *psc = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model]; - - [psc MR_addSqliteStoreNamed:[persistentStore URL] withOptions:nil]; - - return psc; -} - -+ (NSPersistentStoreCoordinator *) MR_coordinatorWithSqliteStoreNamed:(NSString *)storeFileName withOptions:(NSDictionary *)options -{ - NSManagedObjectModel *model = [NSManagedObjectModel MR_defaultManagedObjectModel]; - NSPersistentStoreCoordinator *psc = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model]; - - [psc MR_addSqliteStoreNamed:storeFileName withOptions:options]; - return psc; -} - -+ (NSPersistentStoreCoordinator *) MR_coordinatorWithSqliteStoreNamed:(NSString *)storeFileName -{ - return [self MR_coordinatorWithSqliteStoreNamed:storeFileName withOptions:nil]; -} - -@end - - -@implementation NSDictionary (Merging) - -- (NSMutableDictionary *) MR_dictionaryByMergingDictionary:(NSDictionary *)d; -{ - NSMutableDictionary *mutDict = [self mutableCopy]; - [mutDict addEntriesFromDictionary:d]; - return mutDict; -} - -@end diff --git a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecord+Actions.h b/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecord+Actions.h deleted file mode 100644 index c11759d..0000000 --- a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecord+Actions.h +++ /dev/null @@ -1,44 +0,0 @@ -// -// MagicalRecord+Actions.h -// -// Created by Saul Mora on 2/24/11. -// Copyright 2011 Magical Panda Software. All rights reserved. -// - -#import -#import "NSManagedObjectContext+MagicalRecord.h" -#import "NSManagedObjectContext+MagicalSaves.h" - -@interface MagicalRecord (Actions) - -/* For all background saving operations. These calls will be sent to a different thread/queue. - */ -+ (void) saveWithBlock:(void(^)(NSManagedObjectContext *localContext))block; -+ (void) saveWithBlock:(void(^)(NSManagedObjectContext *localContext))block completion:(MRSaveCompletionHandler)completion; - -/* For saving on the current thread as the caller, only with a seperate context. Useful when you're managing your own threads/queues and need a serial call to create or change data - */ -+ (void) saveWithBlockAndWait:(void(^)(NSManagedObjectContext *localContext))block; - -/* - If you want to reuse the context on the current thread, use these methods. - */ -+ (void) saveUsingCurrentThreadContextWithBlock:(void (^)(NSManagedObjectContext *localContext))block completion:(MRSaveCompletionHandler)completion; -+ (void) saveUsingCurrentThreadContextWithBlockAndWait:(void (^)(NSManagedObjectContext *localContext))block; - - -/* DEPRECATION NOTICE: - * The following methods are deprecated, but remain in place for backwards compatibility until the next major version (3.x) - */ - -/* For all background saving operations. These calls will be sent to a different thread/queue. - */ -+ (void) saveInBackgroundWithBlock:(void(^)(NSManagedObjectContext *localContext))block __attribute__((deprecated)); -+ (void) saveInBackgroundWithBlock:(void(^)(NSManagedObjectContext *localContext))block completion:(void(^)(void))completion __attribute__((deprecated)); - -/* - If you want to reuse the context on the current thread, use this method. - */ -+ (void) saveInBackgroundUsingCurrentContextWithBlock:(void (^)(NSManagedObjectContext *localContext))block completion:(void (^)(void))completion errorHandler:(void (^)(NSError *error))errorHandler __attribute__((deprecated)); - -@end diff --git a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecord+Actions.m b/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecord+Actions.m deleted file mode 100644 index 0d3eeab..0000000 --- a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecord+Actions.m +++ /dev/null @@ -1,135 +0,0 @@ -// -// MagicalRecord+Actions.m -// -// Created by Saul Mora on 2/24/11. -// Copyright 2011 Magical Panda Software. All rights reserved. -// - -#import "CoreData+MagicalRecord.h" -#import "NSManagedObjectContext+MagicalRecord.h" - - -@implementation MagicalRecord (Actions) - -#pragma mark - Asynchronous saving - -+ (void) saveWithBlock:(void(^)(NSManagedObjectContext *localContext))block; -{ - [self saveWithBlock:block completion:nil]; -} - -+ (void) saveWithBlock:(void(^)(NSManagedObjectContext *localContext))block completion:(MRSaveCompletionHandler)completion; -{ - NSManagedObjectContext *mainContext = [NSManagedObjectContext MR_rootSavingContext]; - NSManagedObjectContext *localContext = [NSManagedObjectContext MR_contextWithParent:mainContext]; - - [localContext performBlock:^{ - if (block) { - block(localContext); - } - - [localContext MR_saveWithOptions:MRSaveParentContexts completion:completion]; - }]; -} - -+ (void) saveUsingCurrentThreadContextWithBlock:(void (^)(NSManagedObjectContext *localContext))block completion:(MRSaveCompletionHandler)completion; -{ - NSManagedObjectContext *localContext = [NSManagedObjectContext MR_contextForCurrentThread]; - - [localContext performBlock:^{ - if (block) { - block(localContext); - } - - [localContext MR_saveWithOptions:MRSaveParentContexts completion:completion]; - }]; -} - - -#pragma mark - Synchronous saving - -+ (void) saveWithBlockAndWait:(void(^)(NSManagedObjectContext *localContext))block; -{ - NSManagedObjectContext *mainContext = [NSManagedObjectContext MR_rootSavingContext]; - NSManagedObjectContext *localContext = [NSManagedObjectContext MR_contextWithParent:mainContext]; - - [localContext performBlockAndWait:^{ - if (block) { - block(localContext); - } - - [localContext MR_saveWithOptions:MRSaveParentContexts|MRSaveSynchronously completion:nil]; - }]; -} - -+ (void) saveUsingCurrentThreadContextWithBlockAndWait:(void (^)(NSManagedObjectContext *localContext))block; -{ - NSManagedObjectContext *localContext = [NSManagedObjectContext MR_contextForCurrentThread]; - - [localContext performBlockAndWait:^{ - if (block) { - block(localContext); - } - - [localContext MR_saveWithOptions:MRSaveParentContexts|MRSaveSynchronously completion:nil]; - }]; -} - - -#pragma mark - Deprecated methods - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-implementations" - -+ (void) saveInBackgroundWithBlock:(void(^)(NSManagedObjectContext *localContext))block -{ - [[self class] saveWithBlock:block completion:nil]; -} - -+ (void) saveInBackgroundWithBlock:(void(^)(NSManagedObjectContext *localContext))block completion:(void(^)(void))completion -{ - NSManagedObjectContext *mainContext = [NSManagedObjectContext MR_defaultContext]; - NSManagedObjectContext *localContext = [NSManagedObjectContext MR_contextWithParent:mainContext]; - - [localContext performBlock:^{ - if (block) - { - block(localContext); - } - - [localContext MR_saveToPersistentStoreAndWait]; - - if (completion) - { - completion(); - } - }]; -} - -+ (void) saveInBackgroundUsingCurrentContextWithBlock:(void (^)(NSManagedObjectContext *localContext))block completion:(void (^)(void))completion errorHandler:(void (^)(NSError *error))errorHandler; -{ - NSManagedObjectContext *localContext = [NSManagedObjectContext MR_contextForCurrentThread]; - - [localContext performBlock:^{ - if (block) { - block(localContext); - } - - [localContext MR_saveToPersistentStoreWithCompletion:^(BOOL success, NSError *error) { - if (success) { - if (completion) { - completion(); - } - } - else { - if (errorHandler) { - errorHandler(error); - } - } - }]; - }]; -} - -#pragma clang diagnostic pop // ignored "-Wdeprecated-implementations" - -@end diff --git a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecord+ErrorHandling.h b/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecord+ErrorHandling.h deleted file mode 100644 index f247b7c..0000000 --- a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecord+ErrorHandling.h +++ /dev/null @@ -1,20 +0,0 @@ -// -// MagicalRecord+ErrorHandling.h -// Magical Record -// -// Created by Saul Mora on 3/6/12. -// Copyright (c) 2012 Magical Panda Software LLC. All rights reserved. -// - -#import "MagicalRecord.h" - -@interface MagicalRecord (ErrorHandling) - -+ (void) handleErrors:(NSError *)error; -- (void) handleErrors:(NSError *)error; - -+ (void) setErrorHandlerTarget:(id)target action:(SEL)action; -+ (SEL) errorHandlerAction; -+ (id) errorHandlerTarget; - -@end diff --git a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecord+ErrorHandling.m b/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecord+ErrorHandling.m deleted file mode 100644 index eaf1c05..0000000 --- a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecord+ErrorHandling.m +++ /dev/null @@ -1,94 +0,0 @@ -// -// MagicalRecord+ErrorHandling.m -// Magical Record -// -// Created by Saul Mora on 3/6/12. -// Copyright (c) 2012 Magical Panda Software LLC. All rights reserved. -// - -#import "MagicalRecord+ErrorHandling.h" - - -static id errorHandlerTarget = nil; -static SEL errorHandlerAction = nil; - - -@implementation MagicalRecord (ErrorHandling) - -+ (void) cleanUpErrorHanding; -{ - errorHandlerTarget = nil; - errorHandlerAction = nil; -} - -+ (void) defaultErrorHandler:(NSError *)error -{ - NSDictionary *userInfo = [error userInfo]; - for (NSArray *detailedError in [userInfo allValues]) - { - if ([detailedError isKindOfClass:[NSArray class]]) - { - for (NSError *e in detailedError) - { - if ([e respondsToSelector:@selector(userInfo)]) - { - MRLog(@"Error Details: %@", [e userInfo]); - } - else - { - MRLog(@"Error Details: %@", e); - } - } - } - else - { - MRLog(@"Error: %@", detailedError); - } - } - MRLog(@"Error Message: %@", [error localizedDescription]); - MRLog(@"Error Domain: %@", [error domain]); - MRLog(@"Recovery Suggestion: %@", [error localizedRecoverySuggestion]); -} - -+ (void) handleErrors:(NSError *)error -{ - if (error) - { - // If a custom error handler is set, call that - if (errorHandlerTarget != nil && errorHandlerAction != nil) - { -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Warc-performSelector-leaks" - [errorHandlerTarget performSelector:errorHandlerAction withObject:error]; -#pragma clang diagnostic pop - } - else - { - // Otherwise, fall back to the default error handling - [self defaultErrorHandler:error]; - } - } -} - -+ (id) errorHandlerTarget -{ - return errorHandlerTarget; -} - -+ (SEL) errorHandlerAction -{ - return errorHandlerAction; -} - -+ (void) setErrorHandlerTarget:(id)target action:(SEL)action -{ - errorHandlerTarget = target; /* Deliberately don't retain to avoid potential retain cycles */ - errorHandlerAction = action; -} - -- (void) handleErrors:(NSError *)error -{ - [[self class] handleErrors:error]; -} - -@end diff --git a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecord+Options.h b/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecord+Options.h deleted file mode 100644 index 72012c7..0000000 --- a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecord+Options.h +++ /dev/null @@ -1,33 +0,0 @@ -// -// MagicalRecord+Options.h -// Magical Record -// -// Created by Saul Mora on 3/6/12. -// Copyright (c) 2012 Magical Panda Software LLC. All rights reserved. -// - -#import "MagicalRecord.h" - -@interface MagicalRecord (Options) - -//global options -// enable/disable logging -// add logging provider -// autocreate new PSC per Store -// autoassign new instances to default store - -+ (BOOL) shouldAutoCreateManagedObjectModel; -+ (void) setShouldAutoCreateManagedObjectModel:(BOOL)shouldAutoCreate; -+ (BOOL) shouldAutoCreateDefaultPersistentStoreCoordinator; -+ (void) setShouldAutoCreateDefaultPersistentStoreCoordinator:(BOOL)shouldAutoCreate; -+ (void) setShouldDeleteStoreOnModelMismatch:(BOOL)shouldDeleteStoreOnModelMismatch; - -/*! - @method shouldDeleteStoreOnModelMistmatch - @abstract If true, when configuring the persistant store coordinator, and Magical Record encounters a store that does not match the model, it will attempt to remove it and re-create a new store. - This is extremely useful during development where every model change could potentially require a delete/reinstall of the app. - */ -+ (BOOL) shouldDeleteStoreOnModelMismatch; - - -@end diff --git a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecord+Options.m b/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecord+Options.m deleted file mode 100644 index a076558..0000000 --- a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecord+Options.m +++ /dev/null @@ -1,49 +0,0 @@ -// -// MagicalRecord+Options.m -// Magical Record -// -// Created by Saul Mora on 3/6/12. -// Copyright (c) 2012 Magical Panda Software LLC. All rights reserved. -// - -#import "MagicalRecord+Options.h" - -static BOOL shouldAutoCreateManagedObjectModel_; -static BOOL shouldAutoCreateDefaultPersistentStoreCoordinator_; -static BOOL shouldDeleteStoreOnModelMismatch_; - -@implementation MagicalRecord (Options) - -#pragma mark - Options - -+ (BOOL) shouldAutoCreateManagedObjectModel; -{ - return shouldAutoCreateManagedObjectModel_; -} - -+ (void) setShouldAutoCreateManagedObjectModel:(BOOL)shouldAutoCreate; -{ - shouldAutoCreateManagedObjectModel_ = shouldAutoCreate; -} - -+ (BOOL) shouldAutoCreateDefaultPersistentStoreCoordinator; -{ - return shouldAutoCreateDefaultPersistentStoreCoordinator_; -} - -+ (void) setShouldAutoCreateDefaultPersistentStoreCoordinator:(BOOL)shouldAutoCreate; -{ - shouldAutoCreateDefaultPersistentStoreCoordinator_ = shouldAutoCreate; -} - -+ (BOOL) shouldDeleteStoreOnModelMismatch; -{ - return shouldDeleteStoreOnModelMismatch_; -} - -+ (void) setShouldDeleteStoreOnModelMismatch:(BOOL)shouldDeleteStoreOnModelMismatch -{ - shouldDeleteStoreOnModelMismatch_ = shouldDeleteStoreOnModelMismatch; -} - -@end diff --git a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecord+Setup.h b/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecord+Setup.h deleted file mode 100644 index a92fa92..0000000 --- a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecord+Setup.h +++ /dev/null @@ -1,21 +0,0 @@ -// -// MagicalRecord+Setup.h -// Magical Record -// -// Created by Saul Mora on 3/7/12. -// Copyright (c) 2012 Magical Panda Software LLC. All rights reserved. -// - -#import "MagicalRecord.h" - -@interface MagicalRecord (Setup) - -+ (void) setupCoreDataStack; -+ (void) setupCoreDataStackWithInMemoryStore; -+ (void) setupAutoMigratingCoreDataStack; - -+ (void) setupCoreDataStackWithStoreNamed:(NSString *)storeName; -+ (void) setupCoreDataStackWithAutoMigratingSqliteStoreNamed:(NSString *)storeName; - - -@end diff --git a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecord+Setup.m b/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecord+Setup.m deleted file mode 100644 index 1d5c1fd..0000000 --- a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecord+Setup.m +++ /dev/null @@ -1,56 +0,0 @@ -// -// MagicalRecord+Setup.m -// Magical Record -// -// Created by Saul Mora on 3/7/12. -// Copyright (c) 2012 Magical Panda Software LLC. All rights reserved. -// - -#import "MagicalRecord+Setup.h" -#import "NSManagedObject+MagicalRecord.h" -#import "NSPersistentStoreCoordinator+MagicalRecord.h" -#import "NSManagedObjectContext+MagicalRecord.h" - -@implementation MagicalRecord (Setup) - -+ (void) setupCoreDataStack -{ - [self setupCoreDataStackWithStoreNamed:[self defaultStoreName]]; -} - -+ (void) setupAutoMigratingCoreDataStack -{ - [self setupCoreDataStackWithAutoMigratingSqliteStoreNamed:[self defaultStoreName]]; -} - -+ (void) setupCoreDataStackWithStoreNamed:(NSString *)storeName -{ - if ([NSPersistentStoreCoordinator MR_defaultStoreCoordinator] != nil) return; - - NSPersistentStoreCoordinator *coordinator = [NSPersistentStoreCoordinator MR_coordinatorWithSqliteStoreNamed:storeName]; - [NSPersistentStoreCoordinator MR_setDefaultStoreCoordinator:coordinator]; - - [NSManagedObjectContext MR_initializeDefaultContextWithCoordinator:coordinator]; -} - -+ (void) setupCoreDataStackWithAutoMigratingSqliteStoreNamed:(NSString *)storeName -{ - if ([NSPersistentStoreCoordinator MR_defaultStoreCoordinator] != nil) return; - - NSPersistentStoreCoordinator *coordinator = [NSPersistentStoreCoordinator MR_coordinatorWithAutoMigratingSqliteStoreNamed:storeName]; - [NSPersistentStoreCoordinator MR_setDefaultStoreCoordinator:coordinator]; - - [NSManagedObjectContext MR_initializeDefaultContextWithCoordinator:coordinator]; -} - -+ (void) setupCoreDataStackWithInMemoryStore; -{ - if ([NSPersistentStoreCoordinator MR_defaultStoreCoordinator] != nil) return; - - NSPersistentStoreCoordinator *coordinator = [NSPersistentStoreCoordinator MR_coordinatorWithInMemoryStore]; - [NSPersistentStoreCoordinator MR_setDefaultStoreCoordinator:coordinator]; - - [NSManagedObjectContext MR_initializeDefaultContextWithCoordinator:coordinator]; -} - -@end diff --git a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecord+ShorthandSupport.h b/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecord+ShorthandSupport.h deleted file mode 100644 index f283599..0000000 --- a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecord+ShorthandSupport.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// MagicalRecord+ShorthandSupport.h -// Magical Record -// -// Created by Saul Mora on 3/6/12. -// Copyright (c) 2012 Magical Panda Software LLC. All rights reserved. -// - -#import "MagicalRecord.h" - -@interface MagicalRecord (ShorthandSupport) - -#ifdef MR_SHORTHAND -+ (void) swizzleShorthandMethods; -#endif - -@end diff --git a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecord+ShorthandSupport.m b/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecord+ShorthandSupport.m deleted file mode 100644 index e36ffc6..0000000 --- a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecord+ShorthandSupport.m +++ /dev/null @@ -1,147 +0,0 @@ -// -// MagicalRecord+ShorthandSupport.m -// Magical Record -// -// Created by Saul Mora on 3/6/12. -// Copyright (c) 2012 Magical Panda Software LLC. All rights reserved. -// - -#import "MagicalRecord+ShorthandSupport.h" -#import - - -static NSString * const kMagicalRecordCategoryPrefix = @"MR_"; -#ifdef MR_SHORTHAND -static BOOL methodsHaveBeenSwizzled = NO; -#endif - - -//Dynamic shorthand method helpers -BOOL addMagicalRecordShortHandMethodToPrefixedClassMethod(Class class, SEL selector); -BOOL addMagicalRecordShorthandMethodToPrefixedInstanceMethod(Class klass, SEL originalSelector); - -void swizzleInstanceMethods(Class originalClass, SEL originalSelector, Class targetClass, SEL newSelector); -void replaceSelectorForTargetWithSourceImpAndSwizzle(Class originalClass, SEL originalSelector, Class newClass, SEL newSelector); - - -@implementation MagicalRecord (ShorthandSupport) - -#pragma mark - Support methods for shorthand methods - -#ifdef MR_SHORTHAND -+ (BOOL) MR_resolveClassMethod:(SEL)originalSelector -{ - BOOL resolvedClassMethod = [self MR_resolveClassMethod:originalSelector]; - if (!resolvedClassMethod) - { - resolvedClassMethod = addMagicalRecordShortHandMethodToPrefixedClassMethod(self, originalSelector); - } - return resolvedClassMethod; -} - -+ (BOOL) MR_resolveInstanceMethod:(SEL)originalSelector -{ - BOOL resolvedClassMethod = [self MR_resolveInstanceMethod:originalSelector]; - if (!resolvedClassMethod) - { - resolvedClassMethod = addMagicalRecordShorthandMethodToPrefixedInstanceMethod(self, originalSelector); - } - return resolvedClassMethod; -} - -//In order to add support for non-prefixed AND prefixed methods, we need to swap the existing resolveClassMethod: and resolveInstanceMethod: implementations with the one in this class. -+ (void) updateResolveMethodsForClass:(Class)klass -{ - replaceSelectorForTargetWithSourceImpAndSwizzle(self, @selector(MR_resolveClassMethod:), klass, @selector(resolveClassMethod:)); - replaceSelectorForTargetWithSourceImpAndSwizzle(self, @selector(MR_resolveInstanceMethod:), klass, @selector(resolveInstanceMethod:)); -} - -+ (void) swizzleShorthandMethods; -{ - if (methodsHaveBeenSwizzled) return; - - NSArray *classes = [NSArray arrayWithObjects: - [NSManagedObject class], - [NSManagedObjectContext class], - [NSManagedObjectModel class], - [NSPersistentStore class], - [NSPersistentStoreCoordinator class], nil]; - - [classes enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { - Class klass = (Class)obj; - - [self updateResolveMethodsForClass:klass]; - }]; - methodsHaveBeenSwizzled = YES; -} -#endif - -@end - -#pragma mark - Support functions for runtime shorthand Method calling - -void replaceSelectorForTargetWithSourceImpAndSwizzle(Class sourceClass, SEL sourceSelector, Class targetClass, SEL targetSelector) -{ - Method sourceClassMethod = class_getClassMethod(sourceClass, sourceSelector); - Method targetClassMethod = class_getClassMethod(targetClass, targetSelector); - - Class targetMetaClass = objc_getMetaClass([NSStringFromClass(targetClass) cStringUsingEncoding:NSUTF8StringEncoding]); - - BOOL methodWasAdded = class_addMethod(targetMetaClass, sourceSelector, - method_getImplementation(targetClassMethod), - method_getTypeEncoding(targetClassMethod)); - - if (methodWasAdded) - { - class_replaceMethod(targetMetaClass, targetSelector, - method_getImplementation(sourceClassMethod), - method_getTypeEncoding(sourceClassMethod)); - } -} - -BOOL addMagicalRecordShorthandMethodToPrefixedInstanceMethod(Class klass, SEL originalSelector) -{ - NSString *originalSelectorString = NSStringFromSelector(originalSelector); - if ([originalSelectorString hasPrefix:@"_"] || [originalSelectorString hasPrefix:@"init"]) return NO; - - if (![originalSelectorString hasPrefix:kMagicalRecordCategoryPrefix]) - { - NSString *prefixedSelector = [kMagicalRecordCategoryPrefix stringByAppendingString:originalSelectorString]; - Method existingMethod = class_getInstanceMethod(klass, NSSelectorFromString(prefixedSelector)); - - if (existingMethod) - { - BOOL methodWasAdded = class_addMethod(klass, - originalSelector, - method_getImplementation(existingMethod), - method_getTypeEncoding(existingMethod)); - - return methodWasAdded; - } - } - return NO; -} - - -BOOL addMagicalRecordShortHandMethodToPrefixedClassMethod(Class klass, SEL originalSelector) -{ - NSString *originalSelectorString = NSStringFromSelector(originalSelector); - if (![originalSelectorString hasPrefix:kMagicalRecordCategoryPrefix]) - { - NSString *prefixedSelector = [kMagicalRecordCategoryPrefix stringByAppendingString:originalSelectorString]; - Method existingMethod = class_getClassMethod(klass, NSSelectorFromString(prefixedSelector)); - - if (existingMethod) - { - Class metaClass = objc_getMetaClass([NSStringFromClass(klass) cStringUsingEncoding:NSUTF8StringEncoding]); - BOOL methodWasAdded = class_addMethod(metaClass, - originalSelector, - method_getImplementation(existingMethod), - method_getTypeEncoding(existingMethod)); - - return methodWasAdded; - } - } - return NO; -} - diff --git a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecord+iCloud.h b/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecord+iCloud.h deleted file mode 100644 index b7818b2..0000000 --- a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecord+iCloud.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// MagicalRecord+iCloud.h -// Magical Record -// -// Created by Saul Mora on 3/7/12. -// Copyright (c) 2012 Magical Panda Software LLC. All rights reserved. -// - -#import "MagicalRecord.h" - -@interface MagicalRecord (iCloud) - -+ (BOOL) isICloudEnabled; - -+ (void) setupCoreDataStackWithiCloudContainer:(NSString *)icloudBucket localStoreNamed:(NSString *)localStore; -+ (void) setupCoreDataStackWithiCloudContainer:(NSString *)containerID contentNameKey:(NSString *)contentNameKey localStoreNamed:(NSString *)localStoreName cloudStorePathComponent:(NSString *)pathSubcomponent; -+ (void) setupCoreDataStackWithiCloudContainer:(NSString *)containerID contentNameKey:(NSString *)contentNameKey localStoreNamed:(NSString *)localStoreName cloudStorePathComponent:(NSString *)pathSubcomponent completion:(void(^)(void))completion; - -@end diff --git a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecord+iCloud.m b/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecord+iCloud.m deleted file mode 100644 index bcaf0dc..0000000 --- a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecord+iCloud.m +++ /dev/null @@ -1,61 +0,0 @@ -// -// MagicalRecord+iCloud.m -// Magical Record -// -// Created by Saul Mora on 3/7/12. -// Copyright (c) 2012 Magical Panda Software LLC. All rights reserved. -// - -#import "MagicalRecord+iCloud.h" -#import "NSPersistentStoreCoordinator+MagicalRecord.h" -#import "NSManagedObjectContext+MagicalRecord.h" - -static BOOL _iCloudEnabled = NO; - -@implementation MagicalRecord (iCloud) - -#pragma mark - iCloud Methods - -+ (BOOL) isICloudEnabled; -{ - return _iCloudEnabled; -} - -+ (void) setICloudEnabled:(BOOL)enabled; -{ - @synchronized(self) - { - _iCloudEnabled = enabled; - } -} - -+ (void) setupCoreDataStackWithiCloudContainer:(NSString *)icloudBucket localStoreNamed:(NSString *)localStore; -{ - NSString *contentNameKey = [[[NSBundle mainBundle] infoDictionary] objectForKey:(id)kCFBundleIdentifierKey]; - [self setupCoreDataStackWithiCloudContainer:icloudBucket - contentNameKey:contentNameKey - localStoreNamed:localStore - cloudStorePathComponent:nil]; -} - -+ (void) setupCoreDataStackWithiCloudContainer:(NSString *)containerID contentNameKey:(NSString *)contentNameKey localStoreNamed:(NSString *)localStoreName cloudStorePathComponent:(NSString *)pathSubcomponent; -{ - [self setupCoreDataStackWithiCloudContainer:containerID - contentNameKey:contentNameKey - localStoreNamed:localStoreName - cloudStorePathComponent:pathSubcomponent - completion:nil]; -} - -+ (void) setupCoreDataStackWithiCloudContainer:(NSString *)containerID contentNameKey:(NSString *)contentNameKey localStoreNamed:(NSString *)localStoreName cloudStorePathComponent:(NSString *)pathSubcomponent completion:(void(^)(void))completion; -{ - NSPersistentStoreCoordinator *coordinator = [NSPersistentStoreCoordinator MR_coordinatorWithiCloudContainerID:containerID - contentNameKey:contentNameKey - localStoreNamed:localStoreName - cloudStorePathComponent:pathSubcomponent - completion:completion]; - [NSPersistentStoreCoordinator MR_setDefaultStoreCoordinator:coordinator]; - [NSManagedObjectContext MR_initializeDefaultContextWithCoordinator:coordinator]; -} - -@end diff --git a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecord.h b/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecord.h deleted file mode 100644 index dbc8937..0000000 --- a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecord.h +++ /dev/null @@ -1,52 +0,0 @@ -// -// MagicalRecord.h -// -// Created by Saul Mora on 3/11/10. -// Copyright 2010 Magical Panda Software, LLC All rights reserved. -// - -#if TARGET_OS_IPHONE == 0 -#define MAC_PLATFORM_ONLY YES -#endif - -// enable to use caches for the fetchedResultsControllers (iOS only) -// #define STORE_USE_CACHE - -#ifndef MR_ENABLE_ACTIVE_RECORD_LOGGING - #ifdef DEBUG - #define MR_ENABLE_ACTIVE_RECORD_LOGGING 1 - #else - #define MR_ENABLE_ACTIVE_RECORD_LOGGING 0 - #endif -#endif - -#if MR_ENABLE_ACTIVE_RECORD_LOGGING != 0 - // First, check if we can use Cocoalumberjack for logging - #ifdef LOG_VERBOSE - extern int ddLogLevel; - #define MRLog(...) DDLogVerbose(__VA_ARGS__) - #else - #define MRLog(...) NSLog(@"%s(%p) %@", __PRETTY_FUNCTION__, self, [NSString stringWithFormat:__VA_ARGS__]) - #endif -#else - #define MRLog(...) ((void)0) -#endif - -#ifdef NS_BLOCKS_AVAILABLE - -@class NSManagedObjectContext; -typedef void (^CoreDataBlock)(NSManagedObjectContext *context); - -#endif - -@interface MagicalRecord : NSObject - -+ (NSString *) currentStack; - -+ (void) cleanUp; - -+ (void) setDefaultModelFromClass:(Class)klass; -+ (void) setDefaultModelNamed:(NSString *)modelName; -+ (NSString *) defaultStoreName; - -@end diff --git a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecord.m b/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecord.m deleted file mode 100644 index 42d577a..0000000 --- a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecord.m +++ /dev/null @@ -1,103 +0,0 @@ -// -// MagicalRecord.m -// -// Created by Saul Mora on 3/11/10. -// Copyright 2010 Magical Panda Software, LLC All rights reserved. -// - -#import "CoreData+MagicalRecord.h" - -@interface MagicalRecord (Internal) - -+ (void) cleanUpStack; -+ (void) cleanUpErrorHanding; - -@end - -@interface NSManagedObjectContext (MagicalRecordInternal) - -+ (void) MR_cleanUp; - -@end - - -@implementation MagicalRecord - -+ (void) cleanUp -{ - [self cleanUpErrorHanding]; - [self cleanUpStack]; -} - -+ (void) cleanUpStack; -{ - [NSManagedObjectContext MR_cleanUp]; - [NSManagedObjectModel MR_setDefaultManagedObjectModel:nil]; - [NSPersistentStoreCoordinator MR_setDefaultStoreCoordinator:nil]; - [NSPersistentStore MR_setDefaultPersistentStore:nil]; -} - -+ (NSString *) currentStack -{ - NSMutableString *status = [NSMutableString stringWithString:@"Current Default Core Data Stack: ---- \n"]; - - [status appendFormat:@"Model: %@\n", [[NSManagedObjectModel MR_defaultManagedObjectModel] entityVersionHashesByName]]; - [status appendFormat:@"Coordinator: %@\n", [NSPersistentStoreCoordinator MR_defaultStoreCoordinator]]; - [status appendFormat:@"Store: %@\n", [NSPersistentStore MR_defaultPersistentStore]]; - [status appendFormat:@"Default Context: %@\n", [[NSManagedObjectContext MR_defaultContext] MR_description]]; - [status appendFormat:@"Context Chain: \n%@\n", [[NSManagedObjectContext MR_defaultContext] MR_parentChain]]; - - return status; -} - -+ (void) setDefaultModelNamed:(NSString *)modelName; -{ - NSManagedObjectModel *model = [NSManagedObjectModel MR_managedObjectModelNamed:modelName]; - [NSManagedObjectModel MR_setDefaultManagedObjectModel:model]; -} - -+ (void) setDefaultModelFromClass:(Class)klass; -{ - NSBundle *bundle = [NSBundle bundleForClass:klass]; - NSManagedObjectModel *model = [NSManagedObjectModel mergedModelFromBundles:[NSArray arrayWithObject:bundle]]; - [NSManagedObjectModel MR_setDefaultManagedObjectModel:model]; -} - -+ (NSString *) defaultStoreName; -{ - NSString *defaultName = [[[NSBundle mainBundle] infoDictionary] valueForKey:(id)kCFBundleNameKey]; - if (defaultName == nil) - { - defaultName = kMagicalRecordDefaultStoreFileName; - } - if (![defaultName hasSuffix:@"sqlite"]) - { - defaultName = [defaultName stringByAppendingPathExtension:@"sqlite"]; - } - - return defaultName; -} - - -#pragma mark - initialize - -+ (void) initialize; -{ - if (self == [MagicalRecord class]) - { -#ifdef MR_SHORTHAND - [self swizzleShorthandMethods]; -#endif - [self setShouldAutoCreateManagedObjectModel:YES]; - [self setShouldAutoCreateDefaultPersistentStoreCoordinator:NO]; -#ifdef DEBUG - [self setShouldDeleteStoreOnModelMismatch:YES]; -#else - [self setShouldDeleteStoreOnModelMismatch:NO]; -#endif - } -} - -@end - - diff --git a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecordShorthand.h b/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecordShorthand.h deleted file mode 100644 index ccac6fe..0000000 --- a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/Core/MagicalRecordShorthand.h +++ /dev/null @@ -1,194 +0,0 @@ -#ifdef MR_SHORTHAND - - - - - - - -@interface NSManagedObject (MagicalAggregationShortHand) -+ (NSNumber *) numberOfEntities; -+ (NSNumber *) numberOfEntitiesWithContext:(NSManagedObjectContext *)context; -+ (NSNumber *) numberOfEntitiesWithPredicate:(NSPredicate *)searchTerm; -+ (NSNumber *) numberOfEntitiesWithPredicate:(NSPredicate *)searchTerm inContext:(NSManagedObjectContext *)context; -+ (NSUInteger) countOfEntities; -+ (NSUInteger) countOfEntitiesWithContext:(NSManagedObjectContext *)context; -+ (NSUInteger) countOfEntitiesWithPredicate:(NSPredicate *)searchFilter; -+ (NSUInteger) countOfEntitiesWithPredicate:(NSPredicate *)searchFilter inContext:(NSManagedObjectContext *)context; -+ (BOOL) hasAtLeastOneEntity; -+ (BOOL) hasAtLeastOneEntityInContext:(NSManagedObjectContext *)context; -+ (NSNumber *)aggregateOperation:(NSString *)function onAttribute:(NSString *)attributeName withPredicate:(NSPredicate *)predicate inContext:(NSManagedObjectContext *)context; -+ (NSNumber *)aggregateOperation:(NSString *)function onAttribute:(NSString *)attributeName withPredicate:(NSPredicate *)predicate; -- (id) objectWithMinValueFor:(NSString *)property; -- (id) objectWithMinValueFor:(NSString *)property inContext:(NSManagedObjectContext *)context; -@end -@interface NSManagedObject (MagicalRecord_DataImportShortHand) -- (BOOL) importValuesForKeysWithObject:(id)objectData; -+ (id) importFromObject:(id)data; -+ (id) importFromObject:(id)data inContext:(NSManagedObjectContext *)context; -+ (NSArray *) importFromArray:(NSArray *)listOfObjectData; -+ (NSArray *) importFromArray:(NSArray *)listOfObjectData inContext:(NSManagedObjectContext *)context; -@end -@interface NSManagedObject (MagicalFindersShortHand) -+ (NSArray *) findAll; -+ (NSArray *) findAllInContext:(NSManagedObjectContext *)context; -+ (NSArray *) findAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending; -+ (NSArray *) findAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending inContext:(NSManagedObjectContext *)context; -+ (NSArray *) findAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending withPredicate:(NSPredicate *)searchTerm; -+ (NSArray *) findAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending withPredicate:(NSPredicate *)searchTerm inContext:(NSManagedObjectContext *)context; -+ (NSArray *) findAllWithPredicate:(NSPredicate *)searchTerm; -+ (NSArray *) findAllWithPredicate:(NSPredicate *)searchTerm inContext:(NSManagedObjectContext *)context; -+ (id) findFirst; -+ (id) findFirstInContext:(NSManagedObjectContext *)context; -+ (id) findFirstWithPredicate:(NSPredicate *)searchTerm; -+ (id) findFirstWithPredicate:(NSPredicate *)searchTerm inContext:(NSManagedObjectContext *)context; -+ (id) findFirstWithPredicate:(NSPredicate *)searchterm sortedBy:(NSString *)property ascending:(BOOL)ascending; -+ (id) findFirstWithPredicate:(NSPredicate *)searchterm sortedBy:(NSString *)property ascending:(BOOL)ascending inContext:(NSManagedObjectContext *)context; -+ (id) findFirstWithPredicate:(NSPredicate *)searchTerm andRetrieveAttributes:(NSArray *)attributes; -+ (id) findFirstWithPredicate:(NSPredicate *)searchTerm andRetrieveAttributes:(NSArray *)attributes inContext:(NSManagedObjectContext *)context; -+ (id) findFirstWithPredicate:(NSPredicate *)searchTerm sortedBy:(NSString *)sortBy ascending:(BOOL)ascending andRetrieveAttributes:(id)attributes, ...; -+ (id) findFirstWithPredicate:(NSPredicate *)searchTerm sortedBy:(NSString *)sortBy ascending:(BOOL)ascending inContext:(NSManagedObjectContext *)context andRetrieveAttributes:(id)attributes, ...; -+ (id) findFirstByAttribute:(NSString *)attribute withValue:(id)searchValue; -+ (id) findFirstByAttribute:(NSString *)attribute withValue:(id)searchValue inContext:(NSManagedObjectContext *)context; -+ (id) findFirstOrderedByAttribute:(NSString *)attribute ascending:(BOOL)ascending; -+ (id) findFirstOrderedByAttribute:(NSString *)attribute ascending:(BOOL)ascending inContext:(NSManagedObjectContext *)context; -+ (NSArray *) findByAttribute:(NSString *)attribute withValue:(id)searchValue; -+ (NSArray *) findByAttribute:(NSString *)attribute withValue:(id)searchValue inContext:(NSManagedObjectContext *)context; -+ (NSArray *) findByAttribute:(NSString *)attribute withValue:(id)searchValue andOrderBy:(NSString *)sortTerm ascending:(BOOL)ascending; -+ (NSArray *) findByAttribute:(NSString *)attribute withValue:(id)searchValue andOrderBy:(NSString *)sortTerm ascending:(BOOL)ascending inContext:(NSManagedObjectContext *)context; -#if TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR -+ (NSFetchedResultsController *) fetchAllWithDelegate:(id)delegate; -+ (NSFetchedResultsController *) fetchAllWithDelegate:(id)delegate inContext:(NSManagedObjectContext *)context; -+ (NSFetchedResultsController *) fetchAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending withPredicate:(NSPredicate *)searchTerm groupBy:(NSString *)groupingKeyPath delegate:(id)delegate; -+ (NSFetchedResultsController *) fetchAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending withPredicate:(NSPredicate *)searchTerm groupBy:(NSString *)groupingKeyPath delegate:(id)delegate inContext:(NSManagedObjectContext *)context; -+ (NSFetchedResultsController *) fetchAllGroupedBy:(NSString *)group withPredicate:(NSPredicate *)searchTerm sortedBy:(NSString *)sortTerm ascending:(BOOL)ascending; -+ (NSFetchedResultsController *) fetchAllGroupedBy:(NSString *)group withPredicate:(NSPredicate *)searchTerm sortedBy:(NSString *)sortTerm ascending:(BOOL)ascending inContext:(NSManagedObjectContext *)context; -+ (NSFetchedResultsController *) fetchAllGroupedBy:(NSString *)group withPredicate:(NSPredicate *)searchTerm sortedBy:(NSString *)sortTerm ascending:(BOOL)ascending delegate:(id)delegate; -+ (NSFetchedResultsController *) fetchAllGroupedBy:(NSString *)group withPredicate:(NSPredicate *)searchTerm sortedBy:(NSString *)sortTerm ascending:(BOOL)ascending delegate:(id)delegate inContext:(NSManagedObjectContext *)context; -#endif -@end -@interface NSManagedObject (MagicalRecordShortHand) -+ (NSUInteger) defaultBatchSize; -+ (void) setDefaultBatchSize:(NSUInteger)newBatchSize; -+ (NSArray *) executeFetchRequest:(NSFetchRequest *)request; -+ (NSArray *) executeFetchRequest:(NSFetchRequest *)request inContext:(NSManagedObjectContext *)context; -+ (id) executeFetchRequestAndReturnFirstObject:(NSFetchRequest *)request; -+ (id) executeFetchRequestAndReturnFirstObject:(NSFetchRequest *)request inContext:(NSManagedObjectContext *)context; -#if TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR -+ (void) performFetch:(NSFetchedResultsController *)controller; -#endif -+ (NSEntityDescription *) entityDescription; -+ (NSEntityDescription *) entityDescriptionInContext:(NSManagedObjectContext *)context; -+ (NSArray *) propertiesNamed:(NSArray *)properties; -+ (id) createEntity; -+ (id) createInContext:(NSManagedObjectContext *)context; -- (BOOL) deleteEntity; -- (BOOL) deleteInContext:(NSManagedObjectContext *)context; -+ (BOOL) deleteAllMatchingPredicate:(NSPredicate *)predicate; -+ (BOOL) deleteAllMatchingPredicate:(NSPredicate *)predicate inContext:(NSManagedObjectContext *)context; -+ (BOOL) truncateAll; -+ (BOOL) truncateAllInContext:(NSManagedObjectContext *)context; -+ (NSArray *) ascendingSortDescriptors:(NSArray *)attributesToSortBy; -+ (NSArray *) descendingSortDescriptors:(NSArray *)attributesToSortBy; -- (id) inContext:(NSManagedObjectContext *)otherContext; -- (id) inThreadContext; -@end -@interface NSManagedObject (MagicalRequestsShortHand) -+ (NSFetchRequest *) createFetchRequest; -+ (NSFetchRequest *) createFetchRequestInContext:(NSManagedObjectContext *)context; -+ (NSFetchRequest *) requestAll; -+ (NSFetchRequest *) requestAllInContext:(NSManagedObjectContext *)context; -+ (NSFetchRequest *) requestAllWithPredicate:(NSPredicate *)searchTerm; -+ (NSFetchRequest *) requestAllWithPredicate:(NSPredicate *)searchTerm inContext:(NSManagedObjectContext *)context; -+ (NSFetchRequest *) requestAllWhere:(NSString *)property isEqualTo:(id)value; -+ (NSFetchRequest *) requestAllWhere:(NSString *)property isEqualTo:(id)value inContext:(NSManagedObjectContext *)context; -+ (NSFetchRequest *) requestFirstWithPredicate:(NSPredicate *)searchTerm; -+ (NSFetchRequest *) requestFirstWithPredicate:(NSPredicate *)searchTerm inContext:(NSManagedObjectContext *)context; -+ (NSFetchRequest *) requestFirstByAttribute:(NSString *)attribute withValue:(id)searchValue; -+ (NSFetchRequest *) requestFirstByAttribute:(NSString *)attribute withValue:(id)searchValue inContext:(NSManagedObjectContext *)context; -+ (NSFetchRequest *) requestAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending; -+ (NSFetchRequest *) requestAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending inContext:(NSManagedObjectContext *)context; -+ (NSFetchRequest *) requestAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending withPredicate:(NSPredicate *)searchTerm; -+ (NSFetchRequest *) requestAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending withPredicate:(NSPredicate *)searchTerm inContext:(NSManagedObjectContext *)context; -@end -@interface NSManagedObjectContext (MagicalObservingShortHand) -- (void) observeContext:(NSManagedObjectContext *)otherContext; -- (void) stopObservingContext:(NSManagedObjectContext *)otherContext; -- (void) observeContextOnMainThread:(NSManagedObjectContext *)otherContext; -- (void) observeiCloudChangesInCoordinator:(NSPersistentStoreCoordinator *)coordinator; -- (void) stopObservingiCloudChangesInCoordinator:(NSPersistentStoreCoordinator *)coordinator; -@end -@interface NSManagedObjectContext (MagicalRecordShortHand) -+ (void) initializeDefaultContextWithCoordinator:(NSPersistentStoreCoordinator *)coordinator; -+ (NSManagedObjectContext *) context NS_RETURNS_RETAINED; -+ (NSManagedObjectContext *) contextWithParent:(NSManagedObjectContext *)parentContext NS_RETURNS_RETAINED; -+ (NSManagedObjectContext *) newMainQueueContext NS_RETURNS_RETAINED; -+ (NSManagedObjectContext *) contextThatPushesChangesToDefaultContext NS_RETURNS_RETAINED; -+ (NSManagedObjectContext *) contextWithStoreCoordinator:(NSPersistentStoreCoordinator *)coordinator NS_RETURNS_RETAINED; -+ (void) resetDefaultContext; -+ (NSManagedObjectContext *) rootSavingContext; -+ (NSManagedObjectContext *) defaultContext; -+ (void) cleanUp; -- (NSString *) description; -@end -#import "NSManagedObjectContext+MagicalSaves.h" -@interface NSManagedObjectContext (MagicalSavesShortHand) -- (void) saveOnlySelfWithCompletion:(MRSaveCompletionHandler)completion; -- (void) saveToPersistentStoreWithCompletion:(MRSaveCompletionHandler)completion; -- (void) saveOnlySelfAndWait; -- (void) saveToPersistentStoreAndWait; -- (void) saveWithOptions:(MRSaveContextOptions)mask completion:(MRSaveCompletionHandler)completion; -- (void) save __attribute__((deprecated)); -- (void) saveWithErrorCallback:(void(^)(NSError *error))errorCallback __attribute__((deprecated)); -- (void) saveInBackgroundCompletion:(void (^)(void))completion __attribute__((deprecated)); -- (void) saveInBackgroundErrorHandler:(void (^)(NSError *error))errorCallback __attribute__((deprecated)); -- (void) saveInBackgroundErrorHandler:(void (^)(NSError *error))errorCallback completion:(void (^)(void))completion __attribute__((deprecated)); -- (void) saveNestedContexts __attribute__((deprecated)); -- (void) saveNestedContextsErrorHandler:(void (^)(NSError *error))errorCallback __attribute__((deprecated)); -- (void) saveNestedContextsErrorHandler:(void (^)(NSError *error))errorCallback completion:(void (^)(void))completion __attribute__((deprecated)); -@end -@interface NSManagedObjectContext (MagicalThreadingShortHand) -+ (NSManagedObjectContext *) contextForCurrentThread; -+ (NSManagedObjectContext *) contextThatNotifiesDefaultContextOnMainThread; -+ (NSManagedObjectContext *) contextThatNotifiesDefaultContextOnMainThreadWithCoordinator:(NSPersistentStoreCoordinator *)coordinator; -+ (void) resetContextForCurrentThread; -@end -@interface NSManagedObjectModel (MagicalRecordShortHand) -+ (NSManagedObjectModel *) defaultManagedObjectModel; -+ (void) setDefaultManagedObjectModel:(NSManagedObjectModel *)newDefaultModel; -+ (NSManagedObjectModel *) mergedObjectModelFromMainBundle; -+ (NSManagedObjectModel *) newManagedObjectModelNamed:(NSString *)modelFileName NS_RETURNS_RETAINED; -+ (NSManagedObjectModel *) managedObjectModelNamed:(NSString *)modelFileName; -+ (NSManagedObjectModel *) newModelNamed:(NSString *) modelName inBundleNamed:(NSString *) bundleName NS_RETURNS_RETAINED; -@end -@interface NSPersistentStore (MagicalRecordShortHand) -+ (NSURL *) defaultLocalStoreUrl; -+ (NSPersistentStore *) defaultPersistentStore; -+ (void) setDefaultPersistentStore:(NSPersistentStore *) store; -+ (NSURL *) urlForStoreName:(NSString *)storeFileName; -+ (NSURL *) cloudURLForUbiqutiousContainer:(NSString *)bucketName; -@end -@interface NSPersistentStoreCoordinator (MagicalRecordShortHand) -+ (NSPersistentStoreCoordinator *) defaultStoreCoordinator; -+ (void) setDefaultStoreCoordinator:(NSPersistentStoreCoordinator *)coordinator; -+ (NSPersistentStoreCoordinator *) coordinatorWithInMemoryStore; -+ (NSPersistentStoreCoordinator *) newPersistentStoreCoordinator NS_RETURNS_RETAINED; -+ (NSPersistentStoreCoordinator *) coordinatorWithSqliteStoreNamed:(NSString *)storeFileName; -+ (NSPersistentStoreCoordinator *) coordinatorWithAutoMigratingSqliteStoreNamed:(NSString *)storeFileName; -+ (NSPersistentStoreCoordinator *) coordinatorWithPersistentStore:(NSPersistentStore *)persistentStore; -+ (NSPersistentStoreCoordinator *) coordinatorWithiCloudContainerID:(NSString *)containerID contentNameKey:(NSString *)contentNameKey localStoreNamed:(NSString *)localStoreName cloudStorePathComponent:(NSString *)subPathComponent; -+ (NSPersistentStoreCoordinator *) coordinatorWithiCloudContainerID:(NSString *)containerID contentNameKey:(NSString *)contentNameKey localStoreNamed:(NSString *)localStoreName cloudStorePathComponent:(NSString *)subPathComponent completion:(void(^)(void))completionHandler; -- (NSPersistentStore *) addInMemoryStore; -- (NSPersistentStore *) addAutoMigratingSqliteStoreNamed:(NSString *) storeFileName; -- (NSPersistentStore *) addSqliteStoreNamed:(id)storeFileName withOptions:(__autoreleasing NSDictionary *)options; -- (void) addiCloudContainerID:(NSString *)containerID contentNameKey:(NSString *)contentNameKey localStoreNamed:(NSString *)localStoreName cloudStorePathComponent:(NSString *)subPathComponent; -- (void) addiCloudContainerID:(NSString *)containerID contentNameKey:(NSString *)contentNameKey localStoreNamed:(NSString *)localStoreName cloudStorePathComponent:(NSString *)subPathComponent completion:(void(^)(void))completionBlock; -@end - - - - - - -#endif - diff --git a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/CoreData+MagicalRecord.h b/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/CoreData+MagicalRecord.h deleted file mode 100644 index 17dd22e..0000000 --- a/SampleCoreDataProject/Pods/MagicalRecord/MagicalRecord/CoreData+MagicalRecord.h +++ /dev/null @@ -1,62 +0,0 @@ - -#ifndef NS_BLOCKS_AVAILABLE - #warning MagicalRecord requires blocks -#endif - -#ifdef __OBJC__ -// #if !( __has_feature(objc_arc) && __has_feature(objc_arc_weak) ) -// #error MagicalRecord now requires ARC to be enabled -// #endif - - #import - #import - - #ifdef MR_SHORTHAND - #import "MagicalRecordShorthand.h" - #endif - - #import "MagicalRecord.h" - #import "MagicalRecord+Actions.h" - #import "MagicalRecord+ErrorHandling.h" - #import "MagicalRecord+Options.h" - #import "MagicalRecord+ShorthandSupport.h" - #import "MagicalRecord+Setup.h" - #import "MagicalRecord+iCloud.h" - - #import "NSManagedObject+MagicalRecord.h" - #import "NSManagedObject+MagicalRequests.h" - #import "NSManagedObject+MagicalFinders.h" - #import "NSManagedObject+MagicalAggregation.h" - #import "NSManagedObjectContext+MagicalRecord.h" - #import "NSManagedObjectContext+MagicalObserving.h" - #import "NSManagedObjectContext+MagicalSaves.h" - #import "NSManagedObjectContext+MagicalThreading.h" - #import "NSPersistentStoreCoordinator+MagicalRecord.h" - #import "NSManagedObjectModel+MagicalRecord.h" - #import "NSPersistentStore+MagicalRecord.h" - - #import "MagicalImportFunctions.h" - #import "NSManagedObject+MagicalDataImport.h" - #import "NSNumber+MagicalDataImport.h" - #import "NSObject+MagicalDataImport.h" - #import "NSString+MagicalDataImport.h" - #import "NSAttributeDescription+MagicalDataImport.h" - #import "NSRelationshipDescription+MagicalDataImport.h" - #import "NSEntityDescription+MagicalDataImport.h" - -#endif - -// @see https://github.com/ccgus/fmdb/commit/aef763eeb64e6fa654e7d121f1df4c16a98d9f4f -#define MRDispatchQueueRelease(q) (dispatch_release(q)) - -#if TARGET_OS_IPHONE - #if __IPHONE_OS_VERSION_MIN_REQUIRED >= 60000 - #undef MRDispatchQueueRelease - #define MRDispatchQueueRelease(q) - #endif -#else - #if MAC_OS_X_VERSION_MIN_REQUIRED >= 1080 - #undef MRDispatchQueueRelease - #define MRDispatchQueueRelease(q) - #endif -#endif diff --git a/SampleCoreDataProject/Pods/MagicalRecord/README.md b/SampleCoreDataProject/Pods/MagicalRecord/README.md deleted file mode 100644 index ddc90f9..0000000 --- a/SampleCoreDataProject/Pods/MagicalRecord/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# ![Awesome](https://github.com/magicalpanda/magicalpanda.github.com/blob/master/images/awesome_logo_small.png?raw=true) MagicalRecord - -In software engineering, the active record pattern is a design pattern found in software that stores its data in relational databases. It was named by Martin Fowler in his book Patterns of Enterprise Application Architecture. The interface to such an object would include functions such as Insert, Update, and Delete, plus properties that correspond more-or-less directly to the columns in the underlying database table. - -> Active record is an approach to accessing data in a database. A database table or view is wrapped into a class; thus an object instance is tied to a single row in the table. After creation of an object, a new row is added to the table upon save. Any object loaded gets its information from the database; when an object is updated, the corresponding row in the table is also updated. The wrapper class implements accessor methods or properties for each column in the table or view. - -> *- [Wikipedia]("http://en.wikipedia.org/wiki/Active_record_pattern")* - -MagicalRecord was inspired by the ease of Ruby on Rails' Active Record fetching. The goals of this code are: - -* Clean up my Core Data related code -* Allow for clear, simple, one-line fetches -* Still allow the modification of the NSFetchRequest when request optimizations are needed - - diff --git a/SampleCoreDataProject/Pods/Manifest.lock b/SampleCoreDataProject/Pods/Manifest.lock deleted file mode 100644 index 31a2df0..0000000 --- a/SampleCoreDataProject/Pods/Manifest.lock +++ /dev/null @@ -1,12 +0,0 @@ -PODS: - - MagicalRecord (2.2): - - MagicalRecord/Core (= 2.2) - - MagicalRecord/Core (2.2) - -DEPENDENCIES: - - MagicalRecord (~> 2.2) - -SPEC CHECKSUMS: - MagicalRecord: 2b471584fc9e3137f3d0a56967917baa4979e224 - -COCOAPODS: 0.35.0 diff --git a/SampleCoreDataProject/Pods/Pods.xcodeproj/project.pbxproj b/SampleCoreDataProject/Pods/Pods.xcodeproj/project.pbxproj deleted file mode 100644 index 22209d8..0000000 --- a/SampleCoreDataProject/Pods/Pods.xcodeproj/project.pbxproj +++ /dev/null @@ -1,2389 +0,0 @@ - - - - - archiveVersion - 1 - classes - - objectVersion - 46 - objects - - 0018B4BC39E8A056FB46B0C2 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - MagicalRecord.m - path - MagicalRecord/Core/MagicalRecord.m - sourceTree - <group> - - 0ADF3C53FAA6CBAD7418FDFE - - fileRef - A320FB97C43AA98982FAAC2F - isa - PBXBuildFile - - 0CAA8234F8890A74C34F7194 - - baseConfigurationReference - A47B1E85E510CBF5A477806B - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - ARCHS - $(ARCHS_STANDARD_INCLUDING_64_BIT) - COPY_PHASE_STRIP - YES - DSTROOT - /tmp/xcodeproj.dst - GCC_PRECOMPILE_PREFIX_HEADER - YES - INSTALL_PATH - $(BUILT_PRODUCTS_DIR) - IPHONEOS_DEPLOYMENT_TARGET - 7.0 - OTHER_CFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_CPLUSPLUSFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_LDFLAGS - - OTHER_LIBTOOLFLAGS - - PRODUCT_NAME - $(TARGET_NAME) - PUBLIC_HEADERS_FOLDER_PATH - $(TARGET_NAME) - SDKROOT - iphoneos - SKIP_INSTALL - YES - VALIDATE_PRODUCT - YES - - isa - XCBuildConfiguration - name - Release - - 0DA14724AA6C50DC3371F510 - - fileRef - B63A423731148CF266EC57CB - isa - PBXBuildFile - - 0DB6DB336AE0C02303861B9D - - fileRef - EFEA3E45C9726E441966EE03 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker -Xanalyzer deadcode - - - 0FFD8D064CD491FCB5728D7F - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - MagicalRecord+iCloud.m - path - MagicalRecord/Core/MagicalRecord+iCloud.m - sourceTree - <group> - - 136067153DF30BC907925FA5 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text - name - Podfile - path - ../Podfile - sourceTree - SOURCE_ROOT - xcLanguageSpecificationIdentifier - xcode.lang.ruby - - 15B8ADC5D8E6CC34080E0D66 - - fileRef - 6168834BCC2FF2BAFB279109 - isa - PBXBuildFile - - 1663ABA44E0F7DDD4C540B84 - - containerPortal - A1409A9C8BE307846A4A8E3E - isa - PBXContainerItemProxy - proxyType - 1 - remoteGlobalIDString - 43411ED9928ECF8507C94ACF - remoteInfo - Pods-MagicalRecord - - 176089595106421E4D21FC90 - - fileRef - 49909C35177E764E51445675 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker -Xanalyzer deadcode - - - 1918B71A9A0B9DEFD26C945F - - fileRef - B33F6EA2AB9BFF5EF7D07008 - isa - PBXBuildFile - - 1996A6199F0D2BD0ADCD625C - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - NSRelationshipDescription+MagicalDataImport.h - path - MagicalRecord/Categories/DataImport/NSRelationshipDescription+MagicalDataImport.h - sourceTree - <group> - - 1A86B25876897ED024AADC09 - - children - - 61317F6C36FD97AE3EC1ECB8 - 473F948697312DB5381FC0FD - CC3E460D603D1900DC60CBC0 - 22B0BB10F0C9D397291C5353 - 0018B4BC39E8A056FB46B0C2 - A320FB97C43AA98982FAAC2F - A40255DC3E40381694CB5FE4 - ED4589CCDBC7B30F2AE72CA3 - 97725FF6D24DFBABE5B2EA58 - B831B1981273ED59B870136C - B802EA02BA910DA20B835337 - B0D506C909BA73D0235364D7 - F1090C2566061CCCF1B00F59 - ED08A5CAB68249CE5B4827A9 - 271B4C15D6425612FE0C2164 - 488176F0656F1D821E569466 - 0FFD8D064CD491FCB5728D7F - D473028D72FB5A2C06C1B860 - FC0271B849D483D73EFD967B - EFEA3E45C9726E441966EE03 - 4AC72B596BC6038FA6C95E55 - DF2ED1D1CF9CA63DA555CB31 - 5C6A8FFAC2C3C45CDCC050A5 - C966DA5B439B0CBA761217B6 - B63A423731148CF266EC57CB - ADB7E5DCBDCEE5FE671F47E0 - 6168834BCC2FF2BAFB279109 - 6D93FDD55B1A406AB01713CB - F0D394D5BA10ABD93BCD7EF6 - 71F358CE82601FFC81F49EE2 - B82AE9294CAB98DE4896F949 - AB3E46A5B2A5E26264935C6E - B2418F6419A6524D14FCD8E5 - 5515863EA7FCD1A161276C12 - B33F6EA2AB9BFF5EF7D07008 - C9F4DCE623011DA25EAAFFC4 - 70BA697A416F058D5640255D - 1DD92AA833AD26383301393E - 9C637A629AFD42B2E0E747C0 - 495FB6F8221E2236C78AAFBD - 8C816D1DC50ED8DB8F952ACB - 82636E48D1F523A84230ABB7 - ECA4565D79552B9B2E50C98C - 773AAE74DF43F2F8CB1B8647 - 5157BF22CBB5B99417D3583A - 4A8CCE55A6C8ACE4A18DCEE1 - F719C358361C8753325FEEFE - 49909C35177E764E51445675 - 4B4480BB883E8800487D7F22 - 47D8B639BD657040625265AF - 1996A6199F0D2BD0ADCD625C - 400501832F1B64C54CEA1F4C - F7B6B2E7C2F4B9D71DBC12E8 - 522CC722ECF570F61B06E7FB - - isa - PBXGroup - name - Core - sourceTree - <group> - - 1C1CC440D15F6B4EB05AF46F - - isa - PBXFileReference - lastKnownFileType - wrapper.framework - name - CoreData.framework - path - Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk/System/Library/Frameworks/CoreData.framework - sourceTree - DEVELOPER_DIR - - 1C1FB073AA7711B56FFAC84E - - explicitFileType - archive.ar - includeInIndex - 0 - isa - PBXFileReference - path - libPods.a - sourceTree - BUILT_PRODUCTS_DIR - - 1DD92AA833AD26383301393E - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - NSManagedObjectContext+MagicalSaves.m - path - MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalSaves.m - sourceTree - <group> - - 1DFF22FE775851CF08DCC9EA - - fileRef - 4A8CCE55A6C8ACE4A18DCEE1 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker -Xanalyzer deadcode - - - 21E3AC66A56CBFBABC61F0C9 - - fileRef - 6D93FDD55B1A406AB01713CB - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker -Xanalyzer deadcode - - - 22B0BB10F0C9D397291C5353 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - MagicalRecord.h - path - MagicalRecord/Core/MagicalRecord.h - sourceTree - <group> - - 2593D51C402030CD5EDC8647 - - fileRef - 8BE9615EAAD304B3BF20A766 - isa - PBXBuildFile - - 26197C118582F7E98E34C90B - - fileRef - 1996A6199F0D2BD0ADCD625C - isa - PBXBuildFile - - 26807D0412BFF0A90FF8DF76 - - children - - 7867037F9FC02FFFE7C6DB33 - - isa - PBXGroup - name - Targets Support Files - sourceTree - <group> - - 271B4C15D6425612FE0C2164 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - MagicalRecord+ShorthandSupport.m - path - MagicalRecord/Core/MagicalRecord+ShorthandSupport.m - sourceTree - <group> - - 29562717389580EB469A0808 - - fileRef - CC3E460D603D1900DC60CBC0 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker -Xanalyzer deadcode - - - 2ABB696091BAD76DD1EDA58B - - fileRef - ED4589CCDBC7B30F2AE72CA3 - isa - PBXBuildFile - - 2B38DEF4428E6AE41EFD649A - - explicitFileType - archive.ar - includeInIndex - 0 - isa - PBXFileReference - path - libPods-MagicalRecord.a - sourceTree - BUILT_PRODUCTS_DIR - - 2BB2B0CC4C569B0EE44B25D4 - - fileRef - 9C637A629AFD42B2E0E747C0 - isa - PBXBuildFile - - 2CFFB48E3D4EE835D5FD8F98 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text.xcconfig - path - Pods.debug.xcconfig - sourceTree - <group> - - 3195C2D6D6F1DC910421EEBF - - children - - CCB531F4B23E86A47CA0C255 - 939F899D550078F3B47AF852 - 8BE9615EAAD304B3BF20A766 - 6148E6ED9944C6BD4368D201 - - isa - PBXGroup - name - Support Files - path - ../Target Support Files/Pods-MagicalRecord - sourceTree - <group> - - 332D1B3959F23BF561FD2CF7 - - children - - 1A86B25876897ED024AADC09 - 3195C2D6D6F1DC910421EEBF - - isa - PBXGroup - name - MagicalRecord - path - MagicalRecord - sourceTree - <group> - - 337D562576007514BD56D753 - - fileRef - 47D8B639BD657040625265AF - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker -Xanalyzer deadcode - - - 3411AE328A5C3B827EF5C97F - - fileRef - ED08A5CAB68249CE5B4827A9 - isa - PBXBuildFile - - 344C7A1BA9A9E2B47A77C519 - - fileRef - 71F358CE82601FFC81F49EE2 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker -Xanalyzer deadcode - - - 34C44ADE07A87370154AA6C4 - - fileRef - 1DD92AA833AD26383301393E - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker -Xanalyzer deadcode - - - 36B05D957AE04DD8E874B44F - - fileRef - 495FB6F8221E2236C78AAFBD - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker -Xanalyzer deadcode - - - 37ACBFC8F66EBCE5C7DB95D8 - - fileRef - AB3E46A5B2A5E26264935C6E - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker -Xanalyzer deadcode - - - 3BA18AA3FFFF077BBA9309E9 - - isa - PBXTargetDependency - name - Pods-MagicalRecord - target - 43411ED9928ECF8507C94ACF - targetProxy - 1663ABA44E0F7DDD4C540B84 - - 3C433B3C390FA0C4BBDD4D09 - - isa - PBXFileReference - lastKnownFileType - wrapper.framework - name - Foundation.framework - path - Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk/System/Library/Frameworks/Foundation.framework - sourceTree - DEVELOPER_DIR - - 3EC7AF8CEB29E408470307B6 - - fileRef - 473F948697312DB5381FC0FD - isa - PBXBuildFile - - 400501832F1B64C54CEA1F4C - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - NSRelationshipDescription+MagicalDataImport.m - path - MagicalRecord/Categories/DataImport/NSRelationshipDescription+MagicalDataImport.m - sourceTree - <group> - - 402A2AB72B5A67F6CA783DB1 - - fileRef - 0FFD8D064CD491FCB5728D7F - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker -Xanalyzer deadcode - - - 43411ED9928ECF8507C94ACF - - buildConfigurationList - 85B76E89FB14729EE125E4E7 - buildPhases - - F70768DDD6E5AF300E5A2082 - E684C238BDFAB2FEA3B92827 - B7211910536959B2BA200F55 - - buildRules - - dependencies - - isa - PBXNativeTarget - name - Pods-MagicalRecord - productName - Pods-MagicalRecord - productReference - 2B38DEF4428E6AE41EFD649A - productType - com.apple.product-type.library.static - - 473F948697312DB5381FC0FD - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - MagicalImportFunctions.h - path - MagicalRecord/Categories/DataImport/MagicalImportFunctions.h - sourceTree - <group> - - 47D8B639BD657040625265AF - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - NSPersistentStoreCoordinator+MagicalRecord.m - path - MagicalRecord/Categories/NSPersistentStoreCoordinator+MagicalRecord.m - sourceTree - <group> - - 488176F0656F1D821E569466 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - MagicalRecord+iCloud.h - path - MagicalRecord/Core/MagicalRecord+iCloud.h - sourceTree - <group> - - 495FB6F8221E2236C78AAFBD - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - NSManagedObjectContext+MagicalThreading.m - path - MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalThreading.m - sourceTree - <group> - - 49909C35177E764E51445675 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - NSPersistentStore+MagicalRecord.m - path - MagicalRecord/Categories/NSPersistentStore+MagicalRecord.m - sourceTree - <group> - - 4A8CCE55A6C8ACE4A18DCEE1 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - NSObject+MagicalDataImport.m - path - MagicalRecord/Categories/DataImport/NSObject+MagicalDataImport.m - sourceTree - <group> - - 4AC72B596BC6038FA6C95E55 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - NSEntityDescription+MagicalDataImport.h - path - MagicalRecord/Categories/DataImport/NSEntityDescription+MagicalDataImport.h - sourceTree - <group> - - 4B4480BB883E8800487D7F22 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - NSPersistentStoreCoordinator+MagicalRecord.h - path - MagicalRecord/Categories/NSPersistentStoreCoordinator+MagicalRecord.h - sourceTree - <group> - - 4BC3226B4F04523C11D2CEBA - - fileRef - 8C816D1DC50ED8DB8F952ACB - isa - PBXBuildFile - - 5030FED1B3851BD689EC945D - - fileRef - 522CC722ECF570F61B06E7FB - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker -Xanalyzer deadcode - - - 5157BF22CBB5B99417D3583A - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - NSObject+MagicalDataImport.h - path - MagicalRecord/Categories/DataImport/NSObject+MagicalDataImport.h - sourceTree - <group> - - 522CC722ECF570F61B06E7FB - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - NSString+MagicalDataImport.m - path - MagicalRecord/Categories/DataImport/NSString+MagicalDataImport.m - sourceTree - <group> - - 5515863EA7FCD1A161276C12 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - NSManagedObjectContext+MagicalObserving.m - path - MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalObserving.m - sourceTree - <group> - - 57FB9E2023E2A2DCF6CCBF16 - - fileRef - 400501832F1B64C54CEA1F4C - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker -Xanalyzer deadcode - - - 58E0F7C22429F2DD6DEFA0B5 - - children - - 136067153DF30BC907925FA5 - ED1C8EF913B43A824C357F34 - 7BA4BA6293B126A5D9950945 - 8546931C719ED39A09D4A9A4 - 26807D0412BFF0A90FF8DF76 - - isa - PBXGroup - sourceTree - <group> - - 5C6A8FFAC2C3C45CDCC050A5 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - NSManagedObject+MagicalAggregation.h - path - MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalAggregation.h - sourceTree - <group> - - 5D2C9FDA4AFE44BF50E0E9E5 - - fileRef - 4AC72B596BC6038FA6C95E55 - isa - PBXBuildFile - - 5E1E172437C6264D6C4AC4E8 - - fileRef - 5C6A8FFAC2C3C45CDCC050A5 - isa - PBXBuildFile - - 600411717113FB70CC1A4AD9 - - fileRef - 773AAE74DF43F2F8CB1B8647 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker -Xanalyzer deadcode - - - 61317F6C36FD97AE3EC1ECB8 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - CoreData+MagicalRecord.h - path - MagicalRecord/CoreData+MagicalRecord.h - sourceTree - <group> - - 6148E6ED9944C6BD4368D201 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - Pods-MagicalRecord-prefix.pch - sourceTree - <group> - - 6168834BCC2FF2BAFB279109 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - NSManagedObject+MagicalFinders.h - path - MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalFinders.h - sourceTree - <group> - - 65FCFEBA9F95DCAC0B46287F - - fileRef - BEF87D2782256E1ED4396415 - isa - PBXBuildFile - - 6AA9DF54064C980D62C19F6B - - baseConfigurationReference - 2CFFB48E3D4EE835D5FD8F98 - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - ARCHS - $(ARCHS_STANDARD_INCLUDING_64_BIT) - COPY_PHASE_STRIP - NO - DSTROOT - /tmp/xcodeproj.dst - GCC_DYNAMIC_NO_PIC - NO - GCC_OPTIMIZATION_LEVEL - 0 - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_PREPROCESSOR_DEFINITIONS - - DEBUG=1 - $(inherited) - - GCC_SYMBOLS_PRIVATE_EXTERN - NO - INSTALL_PATH - $(BUILT_PRODUCTS_DIR) - IPHONEOS_DEPLOYMENT_TARGET - 7.0 - OTHER_LDFLAGS - - OTHER_LIBTOOLFLAGS - - PRODUCT_NAME - $(TARGET_NAME) - PUBLIC_HEADERS_FOLDER_PATH - $(TARGET_NAME) - SDKROOT - iphoneos - SKIP_INSTALL - YES - - isa - XCBuildConfiguration - name - Debug - - 6B0DE771208D59CC648C7A99 - - fileRef - 22B0BB10F0C9D397291C5353 - isa - PBXBuildFile - - 6D93FDD55B1A406AB01713CB - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - NSManagedObject+MagicalFinders.m - path - MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalFinders.m - sourceTree - <group> - - 70BA697A416F058D5640255D - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - NSManagedObjectContext+MagicalSaves.h - path - MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalSaves.h - sourceTree - <group> - - 70F701D764C947130F36F7D5 - - fileRef - F7B6B2E7C2F4B9D71DBC12E8 - isa - PBXBuildFile - - 71F358CE82601FFC81F49EE2 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - NSManagedObject+MagicalRecord.m - path - MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalRecord.m - sourceTree - <group> - - 72572796B8244AF35F1C085E - - fileRef - ECA4565D79552B9B2E50C98C - isa - PBXBuildFile - - 755A24BEDB7A9FC0A8615046 - - fileRef - 271B4C15D6425612FE0C2164 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker -Xanalyzer deadcode - - - 773AAE74DF43F2F8CB1B8647 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - NSNumber+MagicalDataImport.m - path - MagicalRecord/Categories/DataImport/NSNumber+MagicalDataImport.m - sourceTree - <group> - - 7867037F9FC02FFFE7C6DB33 - - children - - EDF8FF5FA907229E3254D9FB - EB7B1065FD31F02DEC0AC482 - BEF87D2782256E1ED4396415 - CDB1C2F713ED0AFB846A8D8A - E87486250C2722CB3A40226E - 2CFFB48E3D4EE835D5FD8F98 - A47B1E85E510CBF5A477806B - - isa - PBXGroup - name - Pods - path - Target Support Files/Pods - sourceTree - <group> - - 79D6EBEEA9E1CE1EF05154E4 - - buildConfigurations - - D08DA7474882832CA20FE98A - 849071219BA1146241D11A46 - - defaultConfigurationIsVisible - 0 - defaultConfigurationName - Release - isa - XCConfigurationList - - 7ABF64B475E99088FF03573F - - buildActionMask - 2147483647 - files - - CFAE6BA53D26C794C3D1AE39 - - isa - PBXFrameworksBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - 7BA4BA6293B126A5D9950945 - - children - - 332D1B3959F23BF561FD2CF7 - - isa - PBXGroup - name - Pods - sourceTree - <group> - - 7BE6B062F103E03B49185ECC - - fileRef - 0018B4BC39E8A056FB46B0C2 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker -Xanalyzer deadcode - - - 7D1FAFF649A9BF40DCC02241 - - children - - 1C1CC440D15F6B4EB05AF46F - 3C433B3C390FA0C4BBDD4D09 - - isa - PBXGroup - name - iOS - sourceTree - <group> - - 7DBE60F3BDEA5EB5FE50CA49 - - fileRef - B831B1981273ED59B870136C - isa - PBXBuildFile - - 7F64422F2B2BEAA3FFF4165F - - fileRef - 488176F0656F1D821E569466 - isa - PBXBuildFile - - 81E6FF5936EFAA73DF85B546 - - fileRef - F1090C2566061CCCF1B00F59 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker -Xanalyzer deadcode - - - 82636E48D1F523A84230ABB7 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - NSManagedObjectModel+MagicalRecord.m - path - MagicalRecord/Categories/NSManagedObjectModel+MagicalRecord.m - sourceTree - <group> - - 849071219BA1146241D11A46 - - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - CLANG_CXX_LANGUAGE_STANDARD - gnu++0x - CLANG_CXX_LIBRARY - libc++ - CLANG_ENABLE_MODULES - YES - CLANG_ENABLE_OBJC_ARC - YES - CLANG_WARN_BOOL_CONVERSION - YES - CLANG_WARN_CONSTANT_CONVERSION - YES - CLANG_WARN_DIRECT_OBJC_ISA_USAGE - YES - CLANG_WARN_EMPTY_BODY - YES - CLANG_WARN_ENUM_CONVERSION - YES - CLANG_WARN_INT_CONVERSION - YES - CLANG_WARN_OBJC_ROOT_CLASS - YES - COPY_PHASE_STRIP - NO - ENABLE_NS_ASSERTIONS - NO - GCC_C_LANGUAGE_STANDARD - gnu99 - GCC_PREPROCESSOR_DEFINITIONS - - RELEASE=1 - - GCC_WARN_64_TO_32_BIT_CONVERSION - YES - GCC_WARN_ABOUT_RETURN_TYPE - YES - GCC_WARN_UNDECLARED_SELECTOR - YES - GCC_WARN_UNINITIALIZED_AUTOS - YES - GCC_WARN_UNUSED_FUNCTION - YES - GCC_WARN_UNUSED_VARIABLE - YES - IPHONEOS_DEPLOYMENT_TARGET - 7.0 - STRIP_INSTALLED_PRODUCT - NO - VALIDATE_PRODUCT - YES - - isa - XCBuildConfiguration - name - Release - - 8546931C719ED39A09D4A9A4 - - children - - 1C1FB073AA7711B56FFAC84E - 2B38DEF4428E6AE41EFD649A - - isa - PBXGroup - name - Products - sourceTree - <group> - - 85650CC643FEF3CE3AAE00E8 - - fileRef - A40255DC3E40381694CB5FE4 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker -Xanalyzer deadcode - - - 85B76E89FB14729EE125E4E7 - - buildConfigurations - - F02A188759A8A93324794884 - F7B86C227168DA297D9F5651 - - defaultConfigurationIsVisible - 0 - defaultConfigurationName - Release - isa - XCConfigurationList - - 89E1B60E8E7EB3C30C0E266C - - fileRef - FC0271B849D483D73EFD967B - isa - PBXBuildFile - - 8BE9615EAAD304B3BF20A766 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - path - Pods-MagicalRecord-dummy.m - sourceTree - <group> - - 8C816D1DC50ED8DB8F952ACB - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - NSManagedObjectModel+MagicalRecord.h - path - MagicalRecord/Categories/NSManagedObjectModel+MagicalRecord.h - sourceTree - <group> - - 939F899D550078F3B47AF852 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text.xcconfig - path - Pods-MagicalRecord-Private.xcconfig - sourceTree - <group> - - 9560199FC96B89D10B441A0D - - buildConfigurations - - 6AA9DF54064C980D62C19F6B - 0CAA8234F8890A74C34F7194 - - defaultConfigurationIsVisible - 0 - defaultConfigurationName - Release - isa - XCConfigurationList - - 97725FF6D24DFBABE5B2EA58 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - MagicalRecord+ErrorHandling.m - path - MagicalRecord/Core/MagicalRecord+ErrorHandling.m - sourceTree - <group> - - 9A292363FF9996813D78378A - - fileRef - 61317F6C36FD97AE3EC1ECB8 - isa - PBXBuildFile - - 9A44CB66738F23414B62E93A - - fileRef - 70BA697A416F058D5640255D - isa - PBXBuildFile - - 9C637A629AFD42B2E0E747C0 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - NSManagedObjectContext+MagicalThreading.h - path - MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalThreading.h - sourceTree - <group> - - 9D07AB7A74F087F335C28BE6 - - fileRef - 1C1CC440D15F6B4EB05AF46F - isa - PBXBuildFile - - 9F763EFEA975906F93C95B9B - - fileRef - 82636E48D1F523A84230ABB7 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker -Xanalyzer deadcode - - - A1409A9C8BE307846A4A8E3E - - attributes - - LastUpgradeCheck - 0510 - - buildConfigurationList - 79D6EBEEA9E1CE1EF05154E4 - compatibilityVersion - Xcode 3.2 - developmentRegion - English - hasScannedForEncodings - 0 - isa - PBXProject - knownRegions - - en - - mainGroup - 58E0F7C22429F2DD6DEFA0B5 - productRefGroup - 8546931C719ED39A09D4A9A4 - projectDirPath - - projectReferences - - projectRoot - - targets - - B6F0944318A3457C5FE3A1E7 - 43411ED9928ECF8507C94ACF - - - A320FB97C43AA98982FAAC2F - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - MagicalRecord+Actions.h - path - MagicalRecord/Core/MagicalRecord+Actions.h - sourceTree - <group> - - A40255DC3E40381694CB5FE4 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - MagicalRecord+Actions.m - path - MagicalRecord/Core/MagicalRecord+Actions.m - sourceTree - <group> - - A47B1E85E510CBF5A477806B - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text.xcconfig - path - Pods.release.xcconfig - sourceTree - <group> - - AB3E46A5B2A5E26264935C6E - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - NSManagedObject+MagicalRequests.m - path - MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalRequests.m - sourceTree - <group> - - ADB7E5DCBDCEE5FE671F47E0 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - NSManagedObject+MagicalDataImport.m - path - MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalDataImport.m - sourceTree - <group> - - B0D506C909BA73D0235364D7 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - MagicalRecord+Setup.h - path - MagicalRecord/Core/MagicalRecord+Setup.h - sourceTree - <group> - - B2418F6419A6524D14FCD8E5 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - NSManagedObjectContext+MagicalObserving.h - path - MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalObserving.h - sourceTree - <group> - - B33F6EA2AB9BFF5EF7D07008 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - NSManagedObjectContext+MagicalRecord.h - path - MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalRecord.h - sourceTree - <group> - - B62AAFCD5708C85D7C61EF79 - - fileRef - B2418F6419A6524D14FCD8E5 - isa - PBXBuildFile - - B63A423731148CF266EC57CB - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - NSManagedObject+MagicalDataImport.h - path - MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalDataImport.h - sourceTree - <group> - - B6F0944318A3457C5FE3A1E7 - - buildConfigurationList - 9560199FC96B89D10B441A0D - buildPhases - - E0446C9F02A27C40731D0CD7 - 7ABF64B475E99088FF03573F - - buildRules - - dependencies - - 3BA18AA3FFFF077BBA9309E9 - - isa - PBXNativeTarget - name - Pods - productName - Pods - productReference - 1C1FB073AA7711B56FFAC84E - productType - com.apple.product-type.library.static - - B7211910536959B2BA200F55 - - buildActionMask - 2147483647 - files - - 9A292363FF9996813D78378A - 3EC7AF8CEB29E408470307B6 - 0ADF3C53FAA6CBAD7418FDFE - 2ABB696091BAD76DD1EDA58B - 7DBE60F3BDEA5EB5FE50CA49 - BA08F134FE744AAA0B75E87A - 3411AE328A5C3B827EF5C97F - 7F64422F2B2BEAA3FFF4165F - 6B0DE771208D59CC648C7A99 - C3468933C150613609DC76EB - 89E1B60E8E7EB3C30C0E266C - 5D2C9FDA4AFE44BF50E0E9E5 - 5E1E172437C6264D6C4AC4E8 - 0DA14724AA6C50DC3371F510 - 15B8ADC5D8E6CC34080E0D66 - EDA6FF5C3363D1E1B8C8FC39 - CAD3A920941C03CD5063D78A - B62AAFCD5708C85D7C61EF79 - 1918B71A9A0B9DEFD26C945F - 9A44CB66738F23414B62E93A - 2BB2B0CC4C569B0EE44B25D4 - 4BC3226B4F04523C11D2CEBA - 72572796B8244AF35F1C085E - FDF61B6B4C2A5E74E04C90A3 - EBFF81071DE0BD7E31DA2F7F - CECDD52C8D229419F61ABAB3 - 26197C118582F7E98E34C90B - 70F701D764C947130F36F7D5 - - isa - PBXHeadersBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - B802EA02BA910DA20B835337 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - MagicalRecord+Options.m - path - MagicalRecord/Core/MagicalRecord+Options.m - sourceTree - <group> - - B82AE9294CAB98DE4896F949 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - NSManagedObject+MagicalRequests.h - path - MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalRequests.h - sourceTree - <group> - - B831B1981273ED59B870136C - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - MagicalRecord+Options.h - path - MagicalRecord/Core/MagicalRecord+Options.h - sourceTree - <group> - - B9D012FF44601DAA206BFCEA - - fileRef - 5515863EA7FCD1A161276C12 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker -Xanalyzer deadcode - - - BA08F134FE744AAA0B75E87A - - fileRef - B0D506C909BA73D0235364D7 - isa - PBXBuildFile - - BEF87D2782256E1ED4396415 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - path - Pods-dummy.m - sourceTree - <group> - - C3468933C150613609DC76EB - - fileRef - D473028D72FB5A2C06C1B860 - isa - PBXBuildFile - - C67388113D6EA3781174FEA0 - - fileRef - C966DA5B439B0CBA761217B6 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker -Xanalyzer deadcode - - - C6B0167B3298CEA8F9776C88 - - fileRef - 3C433B3C390FA0C4BBDD4D09 - isa - PBXBuildFile - - C966DA5B439B0CBA761217B6 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - NSManagedObject+MagicalAggregation.m - path - MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalAggregation.m - sourceTree - <group> - - C9D0F54EA3745D34C82DD162 - - fileRef - C9F4DCE623011DA25EAAFFC4 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker -Xanalyzer deadcode - - - C9F4DCE623011DA25EAAFFC4 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - NSManagedObjectContext+MagicalRecord.m - path - MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalRecord.m - sourceTree - <group> - - CAD3A920941C03CD5063D78A - - fileRef - B82AE9294CAB98DE4896F949 - isa - PBXBuildFile - - CC3E460D603D1900DC60CBC0 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - MagicalImportFunctions.m - path - MagicalRecord/Categories/DataImport/MagicalImportFunctions.m - sourceTree - <group> - - CCB531F4B23E86A47CA0C255 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text.xcconfig - path - Pods-MagicalRecord.xcconfig - sourceTree - <group> - - CDB1C2F713ED0AFB846A8D8A - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - Pods-environment.h - sourceTree - <group> - - CECDD52C8D229419F61ABAB3 - - fileRef - 4B4480BB883E8800487D7F22 - isa - PBXBuildFile - - CFAE6BA53D26C794C3D1AE39 - - fileRef - 3C433B3C390FA0C4BBDD4D09 - isa - PBXBuildFile - - D08DA7474882832CA20FE98A - - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - CLANG_CXX_LANGUAGE_STANDARD - gnu++0x - CLANG_CXX_LIBRARY - libc++ - CLANG_ENABLE_MODULES - YES - CLANG_ENABLE_OBJC_ARC - YES - CLANG_WARN_BOOL_CONVERSION - YES - CLANG_WARN_CONSTANT_CONVERSION - YES - CLANG_WARN_DIRECT_OBJC_ISA_USAGE - YES - CLANG_WARN_EMPTY_BODY - YES - CLANG_WARN_ENUM_CONVERSION - YES - CLANG_WARN_INT_CONVERSION - YES - CLANG_WARN_OBJC_ROOT_CLASS - YES - COPY_PHASE_STRIP - YES - GCC_C_LANGUAGE_STANDARD - gnu99 - GCC_DYNAMIC_NO_PIC - NO - GCC_OPTIMIZATION_LEVEL - 0 - GCC_PREPROCESSOR_DEFINITIONS - - DEBUG=1 - $(inherited) - - GCC_SYMBOLS_PRIVATE_EXTERN - NO - GCC_WARN_64_TO_32_BIT_CONVERSION - YES - GCC_WARN_ABOUT_RETURN_TYPE - YES - GCC_WARN_UNDECLARED_SELECTOR - YES - GCC_WARN_UNINITIALIZED_AUTOS - YES - GCC_WARN_UNUSED_FUNCTION - YES - GCC_WARN_UNUSED_VARIABLE - YES - IPHONEOS_DEPLOYMENT_TARGET - 7.0 - ONLY_ACTIVE_ARCH - YES - STRIP_INSTALLED_PRODUCT - NO - - isa - XCBuildConfiguration - name - Debug - - D2D06931B0197DB4832F334D - - fileRef - 97725FF6D24DFBABE5B2EA58 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker -Xanalyzer deadcode - - - D473028D72FB5A2C06C1B860 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - MagicalRecordShorthand.h - path - MagicalRecord/Core/MagicalRecordShorthand.h - sourceTree - <group> - - DD4285AEFB08CBE6586719A6 - - fileRef - DF2ED1D1CF9CA63DA555CB31 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker -Xanalyzer deadcode - - - DF2ED1D1CF9CA63DA555CB31 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - NSEntityDescription+MagicalDataImport.m - path - MagicalRecord/Categories/DataImport/NSEntityDescription+MagicalDataImport.m - sourceTree - <group> - - E0446C9F02A27C40731D0CD7 - - buildActionMask - 2147483647 - files - - 65FCFEBA9F95DCAC0B46287F - - isa - PBXSourcesBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - E684C238BDFAB2FEA3B92827 - - buildActionMask - 2147483647 - files - - 9D07AB7A74F087F335C28BE6 - C6B0167B3298CEA8F9776C88 - - isa - PBXFrameworksBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - E87486250C2722CB3A40226E - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text.script.sh - path - Pods-resources.sh - sourceTree - <group> - - E8F1D3245584F50891CB1575 - - fileRef - ADB7E5DCBDCEE5FE671F47E0 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker -Xanalyzer deadcode - - - EB7B1065FD31F02DEC0AC482 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text.plist.xml - path - Pods-acknowledgements.plist - sourceTree - <group> - - EBFF81071DE0BD7E31DA2F7F - - fileRef - F719C358361C8753325FEEFE - isa - PBXBuildFile - - ECA4565D79552B9B2E50C98C - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - NSNumber+MagicalDataImport.h - path - MagicalRecord/Categories/DataImport/NSNumber+MagicalDataImport.h - sourceTree - <group> - - ED08A5CAB68249CE5B4827A9 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - MagicalRecord+ShorthandSupport.h - path - MagicalRecord/Core/MagicalRecord+ShorthandSupport.h - sourceTree - <group> - - ED1C8EF913B43A824C357F34 - - children - - 7D1FAFF649A9BF40DCC02241 - - isa - PBXGroup - name - Frameworks - sourceTree - <group> - - ED4589CCDBC7B30F2AE72CA3 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - MagicalRecord+ErrorHandling.h - path - MagicalRecord/Core/MagicalRecord+ErrorHandling.h - sourceTree - <group> - - EDA6FF5C3363D1E1B8C8FC39 - - fileRef - F0D394D5BA10ABD93BCD7EF6 - isa - PBXBuildFile - - EDF8FF5FA907229E3254D9FB - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text - path - Pods-acknowledgements.markdown - sourceTree - <group> - - EFEA3E45C9726E441966EE03 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - NSAttributeDescription+MagicalDataImport.m - path - MagicalRecord/Categories/DataImport/NSAttributeDescription+MagicalDataImport.m - sourceTree - <group> - - F02A188759A8A93324794884 - - baseConfigurationReference - 939F899D550078F3B47AF852 - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - ARCHS - $(ARCHS_STANDARD_INCLUDING_64_BIT) - COPY_PHASE_STRIP - NO - DSTROOT - /tmp/xcodeproj.dst - GCC_DYNAMIC_NO_PIC - NO - GCC_OPTIMIZATION_LEVEL - 0 - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_PREFIX_HEADER - Target Support Files/Pods-MagicalRecord/Pods-MagicalRecord-prefix.pch - GCC_PREPROCESSOR_DEFINITIONS - - DEBUG=1 - $(inherited) - - GCC_SYMBOLS_PRIVATE_EXTERN - NO - INSTALL_PATH - $(BUILT_PRODUCTS_DIR) - IPHONEOS_DEPLOYMENT_TARGET - 7.0 - OTHER_LDFLAGS - - OTHER_LIBTOOLFLAGS - - PRODUCT_NAME - $(TARGET_NAME) - PUBLIC_HEADERS_FOLDER_PATH - $(TARGET_NAME) - SDKROOT - iphoneos - SKIP_INSTALL - YES - - isa - XCBuildConfiguration - name - Debug - - F0D394D5BA10ABD93BCD7EF6 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - NSManagedObject+MagicalRecord.h - path - MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalRecord.h - sourceTree - <group> - - F1090C2566061CCCF1B00F59 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - MagicalRecord+Setup.m - path - MagicalRecord/Core/MagicalRecord+Setup.m - sourceTree - <group> - - F70768DDD6E5AF300E5A2082 - - buildActionMask - 2147483647 - files - - 29562717389580EB469A0808 - 85650CC643FEF3CE3AAE00E8 - D2D06931B0197DB4832F334D - FB8C44E55CC25D3059FC4E0A - 81E6FF5936EFAA73DF85B546 - 755A24BEDB7A9FC0A8615046 - 402A2AB72B5A67F6CA783DB1 - 7BE6B062F103E03B49185ECC - 0DB6DB336AE0C02303861B9D - DD4285AEFB08CBE6586719A6 - C67388113D6EA3781174FEA0 - E8F1D3245584F50891CB1575 - 21E3AC66A56CBFBABC61F0C9 - 344C7A1BA9A9E2B47A77C519 - 37ACBFC8F66EBCE5C7DB95D8 - B9D012FF44601DAA206BFCEA - C9D0F54EA3745D34C82DD162 - 34C44ADE07A87370154AA6C4 - 36B05D957AE04DD8E874B44F - 9F763EFEA975906F93C95B9B - 600411717113FB70CC1A4AD9 - 1DFF22FE775851CF08DCC9EA - 176089595106421E4D21FC90 - 337D562576007514BD56D753 - 57FB9E2023E2A2DCF6CCBF16 - 5030FED1B3851BD689EC945D - 2593D51C402030CD5EDC8647 - - isa - PBXSourcesBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - F719C358361C8753325FEEFE - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - NSPersistentStore+MagicalRecord.h - path - MagicalRecord/Categories/NSPersistentStore+MagicalRecord.h - sourceTree - <group> - - F7B6B2E7C2F4B9D71DBC12E8 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - NSString+MagicalDataImport.h - path - MagicalRecord/Categories/DataImport/NSString+MagicalDataImport.h - sourceTree - <group> - - F7B86C227168DA297D9F5651 - - baseConfigurationReference - 939F899D550078F3B47AF852 - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - ARCHS - $(ARCHS_STANDARD_INCLUDING_64_BIT) - COPY_PHASE_STRIP - YES - DSTROOT - /tmp/xcodeproj.dst - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_PREFIX_HEADER - Target Support Files/Pods-MagicalRecord/Pods-MagicalRecord-prefix.pch - INSTALL_PATH - $(BUILT_PRODUCTS_DIR) - IPHONEOS_DEPLOYMENT_TARGET - 7.0 - OTHER_CFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_CPLUSPLUSFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_LDFLAGS - - OTHER_LIBTOOLFLAGS - - PRODUCT_NAME - $(TARGET_NAME) - PUBLIC_HEADERS_FOLDER_PATH - $(TARGET_NAME) - SDKROOT - iphoneos - SKIP_INSTALL - YES - VALIDATE_PRODUCT - YES - - isa - XCBuildConfiguration - name - Release - - FB8C44E55CC25D3059FC4E0A - - fileRef - B802EA02BA910DA20B835337 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-checker -Xanalyzer deadcode - - - FC0271B849D483D73EFD967B - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - NSAttributeDescription+MagicalDataImport.h - path - MagicalRecord/Categories/DataImport/NSAttributeDescription+MagicalDataImport.h - sourceTree - <group> - - FDF61B6B4C2A5E74E04C90A3 - - fileRef - 5157BF22CBB5B99417D3583A - isa - PBXBuildFile - - - rootObject - A1409A9C8BE307846A4A8E3E - - diff --git a/SampleCoreDataProject/Pods/Target Support Files/Pods-MagicalRecord/Pods-MagicalRecord-Private.xcconfig b/SampleCoreDataProject/Pods/Target Support Files/Pods-MagicalRecord/Pods-MagicalRecord-Private.xcconfig deleted file mode 100644 index 88feed3..0000000 --- a/SampleCoreDataProject/Pods/Target Support Files/Pods-MagicalRecord/Pods-MagicalRecord-Private.xcconfig +++ /dev/null @@ -1,5 +0,0 @@ -#include "Pods-MagicalRecord.xcconfig" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Build" "${PODS_ROOT}/Headers/Build/MagicalRecord" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/MagicalRecord" -OTHER_LDFLAGS = ${PODS_MAGICALRECORD_OTHER_LDFLAGS} -ObjC -PODS_ROOT = ${SRCROOT} \ No newline at end of file diff --git a/SampleCoreDataProject/Pods/Target Support Files/Pods-MagicalRecord/Pods-MagicalRecord-dummy.m b/SampleCoreDataProject/Pods/Target Support Files/Pods-MagicalRecord/Pods-MagicalRecord-dummy.m deleted file mode 100644 index bb79c41..0000000 --- a/SampleCoreDataProject/Pods/Target Support Files/Pods-MagicalRecord/Pods-MagicalRecord-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_Pods_MagicalRecord : NSObject -@end -@implementation PodsDummy_Pods_MagicalRecord -@end diff --git a/SampleCoreDataProject/Pods/Target Support Files/Pods-MagicalRecord/Pods-MagicalRecord-prefix.pch b/SampleCoreDataProject/Pods/Target Support Files/Pods-MagicalRecord/Pods-MagicalRecord-prefix.pch deleted file mode 100644 index d534bb8..0000000 --- a/SampleCoreDataProject/Pods/Target Support Files/Pods-MagicalRecord/Pods-MagicalRecord-prefix.pch +++ /dev/null @@ -1,7 +0,0 @@ -#ifdef __OBJC__ -#import -#endif - -#import "Pods-environment.h" -#import -#import "CoreData+MagicalRecord.h" diff --git a/SampleCoreDataProject/Pods/Target Support Files/Pods-MagicalRecord/Pods-MagicalRecord.xcconfig b/SampleCoreDataProject/Pods/Target Support Files/Pods-MagicalRecord/Pods-MagicalRecord.xcconfig deleted file mode 100644 index c966b7a..0000000 --- a/SampleCoreDataProject/Pods/Target Support Files/Pods-MagicalRecord/Pods-MagicalRecord.xcconfig +++ /dev/null @@ -1 +0,0 @@ -PODS_MAGICALRECORD_OTHER_LDFLAGS = -framework "CoreData" \ No newline at end of file diff --git a/SampleCoreDataProject/Pods/Target Support Files/Pods/Pods-acknowledgements.markdown b/SampleCoreDataProject/Pods/Target Support Files/Pods/Pods-acknowledgements.markdown deleted file mode 100644 index 87e7879..0000000 --- a/SampleCoreDataProject/Pods/Target Support Files/Pods/Pods-acknowledgements.markdown +++ /dev/null @@ -1,29 +0,0 @@ -# Acknowledgements -This application makes use of the following third party libraries: - -## MagicalRecord - - Copyright (c) 2010, Magical Panda Software, LLC - - Permission is hereby granted, free of charge, to any person - obtaining a copy of this software and associated documentation - files (the "Software"), to deal in the Software without - restriction, including without limitation the rights to use, - copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the - Software is furnished to do so, subject to the following - conditions: - - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES - OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - OTHER DEALINGS IN THE SOFTWARE. - -Generated by CocoaPods - http://cocoapods.org diff --git a/SampleCoreDataProject/Pods/Target Support Files/Pods/Pods-acknowledgements.plist b/SampleCoreDataProject/Pods/Target Support Files/Pods/Pods-acknowledgements.plist deleted file mode 100644 index 2dd4ca2..0000000 --- a/SampleCoreDataProject/Pods/Target Support Files/Pods/Pods-acknowledgements.plist +++ /dev/null @@ -1,59 +0,0 @@ - - - - - PreferenceSpecifiers - - - FooterText - This application makes use of the following third party libraries: - Title - Acknowledgements - Type - PSGroupSpecifier - - - FooterText - Copyright (c) 2010, Magical Panda Software, LLC - - Permission is hereby granted, free of charge, to any person - obtaining a copy of this software and associated documentation - files (the "Software"), to deal in the Software without - restriction, including without limitation the rights to use, - copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the - Software is furnished to do so, subject to the following - conditions: - - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES - OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - OTHER DEALINGS IN THE SOFTWARE. - - Title - MagicalRecord - Type - PSGroupSpecifier - - - FooterText - Generated by CocoaPods - http://cocoapods.org - Title - - Type - PSGroupSpecifier - - - StringsTable - Acknowledgements - Title - Acknowledgements - - diff --git a/SampleCoreDataProject/Pods/Target Support Files/Pods/Pods-dummy.m b/SampleCoreDataProject/Pods/Target Support Files/Pods/Pods-dummy.m deleted file mode 100644 index ade64bd..0000000 --- a/SampleCoreDataProject/Pods/Target Support Files/Pods/Pods-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_Pods : NSObject -@end -@implementation PodsDummy_Pods -@end diff --git a/SampleCoreDataProject/Pods/Target Support Files/Pods/Pods-environment.h b/SampleCoreDataProject/Pods/Target Support Files/Pods/Pods-environment.h deleted file mode 100644 index fc5012d..0000000 --- a/SampleCoreDataProject/Pods/Target Support Files/Pods/Pods-environment.h +++ /dev/null @@ -1,20 +0,0 @@ - -// To check if a library is compiled with CocoaPods you -// can use the `COCOAPODS` macro definition which is -// defined in the xcconfigs so it is available in -// headers also when they are imported in the client -// project. - - -// MagicalRecord -#define COCOAPODS_POD_AVAILABLE_MagicalRecord -#define COCOAPODS_VERSION_MAJOR_MagicalRecord 2 -#define COCOAPODS_VERSION_MINOR_MagicalRecord 2 -#define COCOAPODS_VERSION_PATCH_MagicalRecord 0 - -// MagicalRecord/Core -#define COCOAPODS_POD_AVAILABLE_MagicalRecord_Core -#define COCOAPODS_VERSION_MAJOR_MagicalRecord_Core 2 -#define COCOAPODS_VERSION_MINOR_MagicalRecord_Core 2 -#define COCOAPODS_VERSION_PATCH_MagicalRecord_Core 0 - diff --git a/SampleCoreDataProject/Pods/Target Support Files/Pods/Pods-resources.sh b/SampleCoreDataProject/Pods/Target Support Files/Pods/Pods-resources.sh deleted file mode 100755 index e149064..0000000 --- a/SampleCoreDataProject/Pods/Target Support Files/Pods/Pods-resources.sh +++ /dev/null @@ -1,74 +0,0 @@ -#!/bin/sh -set -e - -mkdir -p "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" - -RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt -> "$RESOURCES_TO_COPY" - -install_resource() -{ - case $1 in - *.storyboard) - echo "ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .storyboard`.storyboardc ${PODS_ROOT}/$1 --sdk ${SDKROOT}" - ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .storyboard`.storyboardc" "${PODS_ROOT}/$1" --sdk "${SDKROOT}" - ;; - *.xib) - echo "ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .xib`.nib ${PODS_ROOT}/$1 --sdk ${SDKROOT}" - ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .xib`.nib" "${PODS_ROOT}/$1" --sdk "${SDKROOT}" - ;; - *.framework) - echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - echo "rsync -av ${PODS_ROOT}/$1 ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - rsync -av "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - ;; - *.xcdatamodel) - echo "xcrun momc \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1"`.mom\"" - xcrun momc "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodel`.mom" - ;; - *.xcdatamodeld) - echo "xcrun momc \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodeld`.momd\"" - xcrun momc "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodeld`.momd" - ;; - *.xcmappingmodel) - echo "xcrun mapc \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcmappingmodel`.cdm\"" - xcrun mapc "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcmappingmodel`.cdm" - ;; - *.xcassets) - ;; - /*) - echo "$1" - echo "$1" >> "$RESOURCES_TO_COPY" - ;; - *) - echo "${PODS_ROOT}/$1" - echo "${PODS_ROOT}/$1" >> "$RESOURCES_TO_COPY" - ;; - esac -} - -rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" -if [[ "${ACTION}" == "install" ]]; then - rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" -fi -rm -f "$RESOURCES_TO_COPY" - -if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ `find . -name '*.xcassets' | wc -l` -ne 0 ] -then - case "${TARGETED_DEVICE_FAMILY}" in - 1,2) - TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" - ;; - 1) - TARGET_DEVICE_ARGS="--target-device iphone" - ;; - 2) - TARGET_DEVICE_ARGS="--target-device ipad" - ;; - *) - TARGET_DEVICE_ARGS="--target-device mac" - ;; - esac - find "${PWD}" -name "*.xcassets" -print0 | xargs -0 actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${IPHONEOS_DEPLOYMENT_TARGET}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" -fi diff --git a/SampleCoreDataProject/Pods/Target Support Files/Pods/Pods.debug.xcconfig b/SampleCoreDataProject/Pods/Target Support Files/Pods/Pods.debug.xcconfig deleted file mode 100644 index 2d76fdb..0000000 --- a/SampleCoreDataProject/Pods/Target Support Files/Pods/Pods.debug.xcconfig +++ /dev/null @@ -1,6 +0,0 @@ -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/MagicalRecord" -OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/MagicalRecord" -OTHER_LDFLAGS = -ObjC -l"Pods-MagicalRecord" -framework "CoreData" -OTHER_LIBTOOLFLAGS = $(OTHER_LDFLAGS) -PODS_ROOT = ${SRCROOT}/Pods \ No newline at end of file diff --git a/SampleCoreDataProject/Pods/Target Support Files/Pods/Pods.release.xcconfig b/SampleCoreDataProject/Pods/Target Support Files/Pods/Pods.release.xcconfig deleted file mode 100644 index 2d76fdb..0000000 --- a/SampleCoreDataProject/Pods/Target Support Files/Pods/Pods.release.xcconfig +++ /dev/null @@ -1,6 +0,0 @@ -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/MagicalRecord" -OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/MagicalRecord" -OTHER_LDFLAGS = -ObjC -l"Pods-MagicalRecord" -framework "CoreData" -OTHER_LIBTOOLFLAGS = $(OTHER_LDFLAGS) -PODS_ROOT = ${SRCROOT}/Pods \ No newline at end of file diff --git a/SampleCoreDataProject/SampleCoreDataProject.xcodeproj/project.pbxproj b/SampleCoreDataProject/SampleCoreDataProject.xcodeproj/project.pbxproj deleted file mode 100644 index 747c7a8..0000000 --- a/SampleCoreDataProject/SampleCoreDataProject.xcodeproj/project.pbxproj +++ /dev/null @@ -1,534 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - C9049B1717CAC48E0099F480 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C9049B1617CAC48E0099F480 /* UIKit.framework */; }; - C9049B1917CAC48E0099F480 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C9049B1817CAC48E0099F480 /* Foundation.framework */; }; - C9049B1B17CAC48E0099F480 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C9049B1A17CAC48E0099F480 /* CoreGraphics.framework */; }; - C9049B2117CAC48E0099F480 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = C9049B1F17CAC48E0099F480 /* InfoPlist.strings */; }; - C9049B2317CAC48E0099F480 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = C9049B2217CAC48E0099F480 /* main.m */; }; - C9049B2717CAC48E0099F480 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = C9049B2617CAC48E0099F480 /* AppDelegate.m */; }; - C9049B2917CAC48F0099F480 /* Default.png in Resources */ = {isa = PBXBuildFile; fileRef = C9049B2817CAC48F0099F480 /* Default.png */; }; - C9049B2B17CAC48F0099F480 /* Default@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = C9049B2A17CAC48F0099F480 /* Default@2x.png */; }; - C9049B2D17CAC48F0099F480 /* Default-568h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = C9049B2C17CAC48F0099F480 /* Default-568h@2x.png */; }; - C9049B4717CAC4DE0099F480 /* libBRFullTextSearch.a in Frameworks */ = {isa = PBXBuildFile; fileRef = C9049B4217CAC4CC0099F480 /* libBRFullTextSearch.a */; }; - C9049B4917CAC4E50099F480 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = C9049B4817CAC4E40099F480 /* libz.dylib */; }; - C9049B4B17CAC4EE0099F480 /* libstdc++.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = C9049B4A17CAC4EE0099F480 /* libstdc++.dylib */; }; - C9049B4D17CAC5100099F480 /* CoreData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C9049B4C17CAC5100099F480 /* CoreData.framework */; }; - C9049BAA17CAC6BA0099F480 /* CoreDataManager.m in Sources */ = {isa = PBXBuildFile; fileRef = C9049BA917CAC6BA0099F480 /* CoreDataManager.m */; }; - C9049BAD17CAC9CD0099F480 /* Model.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = C9049BAB17CAC9CD0099F480 /* Model.xcdatamodeld */; }; - C9049BB017CACA5C0099F480 /* StickyNote.m in Sources */ = {isa = PBXBuildFile; fileRef = C9049BAF17CACA5C0099F480 /* StickyNote.m */; }; - C9049BB517CACD870099F480 /* StickyNoteListViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C9049BB317CACD870099F480 /* StickyNoteListViewController.m */; }; - C9049BB617CACD870099F480 /* StickyNoteListViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = C9049BB417CACD870099F480 /* StickyNoteListViewController.xib */; }; - C9049BBA17CAD3860099F480 /* StickyNoteViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C9049BB817CAD3860099F480 /* StickyNoteViewController.m */; }; - C9049BBB17CAD3860099F480 /* StickyNoteViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = C9049BB917CAD3860099F480 /* StickyNoteViewController.xib */; }; - C9049BC217CAE7700099F480 /* stop-words.txt in Resources */ = {isa = PBXBuildFile; fileRef = C9049BC017CAE7700099F480 /* stop-words.txt */; }; - C9049BC517CB10800099F480 /* Notifications.m in Sources */ = {isa = PBXBuildFile; fileRef = C9049BC417CB10800099F480 /* Notifications.m */; }; - C9B506F71AE72F1B00108562 /* SettingsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C9B506F51AE72F1B00108562 /* SettingsViewController.m */; }; - C9B506F81AE72F1B00108562 /* SettingsViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = C9B506F61AE72F1B00108562 /* SettingsViewController.xib */; }; - EED3B88A827168F2772DB75F /* libPods.a in Frameworks */ = {isa = PBXBuildFile; fileRef = A06DBFE5733C082A1D5847E4 /* libPods.a */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - C9049B4117CAC4CC0099F480 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = C9049B3B17CAC4CC0099F480 /* BRFullTextSearch.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = C909C2611784CB600016C25E; - remoteInfo = BRFullTextSearch; - }; - C9049B4317CAC4CC0099F480 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = C9049B3B17CAC4CC0099F480 /* BRFullTextSearch.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = C909C2721784CB600016C25E; - remoteInfo = BRFullTextSearchTests; - }; - C9049B4517CAC4D50099F480 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = C9049B3B17CAC4CC0099F480 /* BRFullTextSearch.xcodeproj */; - proxyType = 1; - remoteGlobalIDString = C909C2601784CB600016C25E; - remoteInfo = BRFullTextSearch; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXFileReference section */ - 0697CF9C57C1EABE6B92AFE7 /* Pods.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.debug.xcconfig; path = "Pods/Target Support Files/Pods/Pods.debug.xcconfig"; sourceTree = ""; }; - 6D852EE8FD9DA1755B51BFC8 /* Pods.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.release.xcconfig; path = "Pods/Target Support Files/Pods/Pods.release.xcconfig"; sourceTree = ""; }; - A06DBFE5733C082A1D5847E4 /* libPods.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libPods.a; sourceTree = BUILT_PRODUCTS_DIR; }; - C9049B1317CAC48E0099F480 /* SampleCoreDataProject.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SampleCoreDataProject.app; sourceTree = BUILT_PRODUCTS_DIR; }; - C9049B1617CAC48E0099F480 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; - C9049B1817CAC48E0099F480 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; - C9049B1A17CAC48E0099F480 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; - C9049B1E17CAC48E0099F480 /* SampleCoreDataProject-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "SampleCoreDataProject-Info.plist"; sourceTree = ""; }; - C9049B2017CAC48E0099F480 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; - C9049B2217CAC48E0099F480 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; - C9049B2417CAC48E0099F480 /* SampleCoreDataProject-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "SampleCoreDataProject-Prefix.pch"; sourceTree = ""; }; - C9049B2517CAC48E0099F480 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; - C9049B2617CAC48E0099F480 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; - C9049B2817CAC48F0099F480 /* Default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Default.png; sourceTree = ""; }; - C9049B2A17CAC48F0099F480 /* Default@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default@2x.png"; sourceTree = ""; }; - C9049B2C17CAC48F0099F480 /* Default-568h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-568h@2x.png"; sourceTree = ""; }; - C9049B3B17CAC4CC0099F480 /* BRFullTextSearch.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = BRFullTextSearch.xcodeproj; path = ../BRFullTextSearch.xcodeproj; sourceTree = ""; }; - C9049B4817CAC4E40099F480 /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = usr/lib/libz.dylib; sourceTree = SDKROOT; }; - C9049B4A17CAC4EE0099F480 /* libstdc++.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libstdc++.dylib"; path = "usr/lib/libstdc++.dylib"; sourceTree = SDKROOT; }; - C9049B4C17CAC5100099F480 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; }; - C9049BA817CAC6BA0099F480 /* CoreDataManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CoreDataManager.h; sourceTree = ""; }; - C9049BA917CAC6BA0099F480 /* CoreDataManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CoreDataManager.m; sourceTree = ""; }; - C9049BAC17CAC9CD0099F480 /* Model.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = Model.xcdatamodel; sourceTree = ""; }; - C9049BAE17CACA5C0099F480 /* StickyNote.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StickyNote.h; sourceTree = ""; }; - C9049BAF17CACA5C0099F480 /* StickyNote.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = StickyNote.m; sourceTree = ""; }; - C9049BB217CACD870099F480 /* StickyNoteListViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StickyNoteListViewController.h; sourceTree = ""; }; - C9049BB317CACD870099F480 /* StickyNoteListViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = StickyNoteListViewController.m; sourceTree = ""; }; - C9049BB417CACD870099F480 /* StickyNoteListViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = StickyNoteListViewController.xib; sourceTree = ""; }; - C9049BB717CAD3860099F480 /* StickyNoteViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StickyNoteViewController.h; sourceTree = ""; }; - C9049BB817CAD3860099F480 /* StickyNoteViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = StickyNoteViewController.m; sourceTree = ""; }; - C9049BB917CAD3860099F480 /* StickyNoteViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = StickyNoteViewController.xib; sourceTree = ""; }; - C9049BC117CAE7700099F480 /* en */ = {isa = PBXFileReference; lastKnownFileType = text; name = en; path = "stop-words.txt"; sourceTree = ""; }; - C9049BC317CB10800099F480 /* Notifications.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Notifications.h; sourceTree = ""; }; - C9049BC417CB10800099F480 /* Notifications.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Notifications.m; sourceTree = ""; }; - C9B506F41AE72F1B00108562 /* SettingsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SettingsViewController.h; sourceTree = ""; }; - C9B506F51AE72F1B00108562 /* SettingsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SettingsViewController.m; sourceTree = ""; }; - C9B506F61AE72F1B00108562 /* SettingsViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = SettingsViewController.xib; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - C9049B1017CAC48E0099F480 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - C9049B4D17CAC5100099F480 /* CoreData.framework in Frameworks */, - C9049B4B17CAC4EE0099F480 /* libstdc++.dylib in Frameworks */, - C9049B4917CAC4E50099F480 /* libz.dylib in Frameworks */, - C9049B4717CAC4DE0099F480 /* libBRFullTextSearch.a in Frameworks */, - C9049B1717CAC48E0099F480 /* UIKit.framework in Frameworks */, - C9049B1917CAC48E0099F480 /* Foundation.framework in Frameworks */, - C9049B1B17CAC48E0099F480 /* CoreGraphics.framework in Frameworks */, - EED3B88A827168F2772DB75F /* libPods.a in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 0799BDC59971C242B1883469 /* Pods */ = { - isa = PBXGroup; - children = ( - 0697CF9C57C1EABE6B92AFE7 /* Pods.debug.xcconfig */, - 6D852EE8FD9DA1755B51BFC8 /* Pods.release.xcconfig */, - ); - name = Pods; - sourceTree = ""; - }; - C9049B0A17CAC48E0099F480 = { - isa = PBXGroup; - children = ( - C9049B3B17CAC4CC0099F480 /* BRFullTextSearch.xcodeproj */, - C9049B1C17CAC48E0099F480 /* SampleCoreDataProject */, - C9049B1517CAC48E0099F480 /* Frameworks */, - C9049B1417CAC48E0099F480 /* Products */, - 0799BDC59971C242B1883469 /* Pods */, - ); - sourceTree = ""; - }; - C9049B1417CAC48E0099F480 /* Products */ = { - isa = PBXGroup; - children = ( - C9049B1317CAC48E0099F480 /* SampleCoreDataProject.app */, - ); - name = Products; - sourceTree = ""; - }; - C9049B1517CAC48E0099F480 /* Frameworks */ = { - isa = PBXGroup; - children = ( - C9049B4A17CAC4EE0099F480 /* libstdc++.dylib */, - C9049B4817CAC4E40099F480 /* libz.dylib */, - C9049B4C17CAC5100099F480 /* CoreData.framework */, - C9049B1617CAC48E0099F480 /* UIKit.framework */, - C9049B1817CAC48E0099F480 /* Foundation.framework */, - C9049B1A17CAC48E0099F480 /* CoreGraphics.framework */, - A06DBFE5733C082A1D5847E4 /* libPods.a */, - ); - name = Frameworks; - sourceTree = ""; - }; - C9049B1C17CAC48E0099F480 /* SampleCoreDataProject */ = { - isa = PBXGroup; - children = ( - C9049BB117CACA630099F480 /* Model */, - C9049B2517CAC48E0099F480 /* AppDelegate.h */, - C9049B2617CAC48E0099F480 /* AppDelegate.m */, - C9049BA817CAC6BA0099F480 /* CoreDataManager.h */, - C9049BA917CAC6BA0099F480 /* CoreDataManager.m */, - C9049BC317CB10800099F480 /* Notifications.h */, - C9049BC417CB10800099F480 /* Notifications.m */, - C9B506F41AE72F1B00108562 /* SettingsViewController.h */, - C9B506F51AE72F1B00108562 /* SettingsViewController.m */, - C9B506F61AE72F1B00108562 /* SettingsViewController.xib */, - C9049BB217CACD870099F480 /* StickyNoteListViewController.h */, - C9049BB317CACD870099F480 /* StickyNoteListViewController.m */, - C9049BB417CACD870099F480 /* StickyNoteListViewController.xib */, - C9049BB717CAD3860099F480 /* StickyNoteViewController.h */, - C9049BB817CAD3860099F480 /* StickyNoteViewController.m */, - C9049BB917CAD3860099F480 /* StickyNoteViewController.xib */, - C9049B1D17CAC48E0099F480 /* Supporting Files */, - ); - path = SampleCoreDataProject; - sourceTree = ""; - }; - C9049B1D17CAC48E0099F480 /* Supporting Files */ = { - isa = PBXGroup; - children = ( - C9049BBF17CAE7700099F480 /* en.lproj */, - C9049B1E17CAC48E0099F480 /* SampleCoreDataProject-Info.plist */, - C9049B1F17CAC48E0099F480 /* InfoPlist.strings */, - C9049B2217CAC48E0099F480 /* main.m */, - C9049B2417CAC48E0099F480 /* SampleCoreDataProject-Prefix.pch */, - C9049B2817CAC48F0099F480 /* Default.png */, - C9049B2A17CAC48F0099F480 /* Default@2x.png */, - C9049B2C17CAC48F0099F480 /* Default-568h@2x.png */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; - C9049B3C17CAC4CC0099F480 /* Products */ = { - isa = PBXGroup; - children = ( - C9049B4217CAC4CC0099F480 /* libBRFullTextSearch.a */, - C9049B4417CAC4CC0099F480 /* BRFullTextSearchTests.xctest */, - ); - name = Products; - sourceTree = ""; - }; - C9049BB117CACA630099F480 /* Model */ = { - isa = PBXGroup; - children = ( - C9049BAB17CAC9CD0099F480 /* Model.xcdatamodeld */, - C9049BAE17CACA5C0099F480 /* StickyNote.h */, - C9049BAF17CACA5C0099F480 /* StickyNote.m */, - ); - name = Model; - sourceTree = ""; - }; - C9049BBF17CAE7700099F480 /* en.lproj */ = { - isa = PBXGroup; - children = ( - C9049BC017CAE7700099F480 /* stop-words.txt */, - ); - name = en.lproj; - path = ../../BRFullTextSearch/en.lproj; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - C9049B1217CAC48E0099F480 /* SampleCoreDataProject */ = { - isa = PBXNativeTarget; - buildConfigurationList = C9049B3617CAC48F0099F480 /* Build configuration list for PBXNativeTarget "SampleCoreDataProject" */; - buildPhases = ( - CAEFB7F882574FF37634E085 /* Check Pods Manifest.lock */, - C9049B0F17CAC48E0099F480 /* Sources */, - C9049B1017CAC48E0099F480 /* Frameworks */, - C9049B1117CAC48E0099F480 /* Resources */, - 71B6D800708B7BC5C2E60E5E /* Copy Pods Resources */, - ); - buildRules = ( - ); - dependencies = ( - C9049B4617CAC4D50099F480 /* PBXTargetDependency */, - ); - name = SampleCoreDataProject; - productName = SampleCoreDataProject; - productReference = C9049B1317CAC48E0099F480 /* SampleCoreDataProject.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - C9049B0B17CAC48E0099F480 /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 0460; - ORGANIZATIONNAME = "Blue Rocket, Inc."; - }; - buildConfigurationList = C9049B0E17CAC48E0099F480 /* Build configuration list for PBXProject "SampleCoreDataProject" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; - hasScannedForEncodings = 0; - knownRegions = ( - en, - ); - mainGroup = C9049B0A17CAC48E0099F480; - productRefGroup = C9049B1417CAC48E0099F480 /* Products */; - projectDirPath = ""; - projectReferences = ( - { - ProductGroup = C9049B3C17CAC4CC0099F480 /* Products */; - ProjectRef = C9049B3B17CAC4CC0099F480 /* BRFullTextSearch.xcodeproj */; - }, - ); - projectRoot = ""; - targets = ( - C9049B1217CAC48E0099F480 /* SampleCoreDataProject */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXReferenceProxy section */ - C9049B4217CAC4CC0099F480 /* libBRFullTextSearch.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libBRFullTextSearch.a; - remoteRef = C9049B4117CAC4CC0099F480 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - C9049B4417CAC4CC0099F480 /* BRFullTextSearchTests.xctest */ = { - isa = PBXReferenceProxy; - fileType = wrapper.cfbundle; - path = BRFullTextSearchTests.xctest; - remoteRef = C9049B4317CAC4CC0099F480 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; -/* End PBXReferenceProxy section */ - -/* Begin PBXResourcesBuildPhase section */ - C9049B1117CAC48E0099F480 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - C9049B2117CAC48E0099F480 /* InfoPlist.strings in Resources */, - C9049B2917CAC48F0099F480 /* Default.png in Resources */, - C9049B2B17CAC48F0099F480 /* Default@2x.png in Resources */, - C9B506F81AE72F1B00108562 /* SettingsViewController.xib in Resources */, - C9049B2D17CAC48F0099F480 /* Default-568h@2x.png in Resources */, - C9049BB617CACD870099F480 /* StickyNoteListViewController.xib in Resources */, - C9049BBB17CAD3860099F480 /* StickyNoteViewController.xib in Resources */, - C9049BC217CAE7700099F480 /* stop-words.txt in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXShellScriptBuildPhase section */ - 71B6D800708B7BC5C2E60E5E /* Copy Pods Resources */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Copy Pods Resources"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods/Pods-resources.sh\"\n"; - showEnvVarsInLog = 0; - }; - CAEFB7F882574FF37634E085 /* Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Check Pods Manifest.lock"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; - showEnvVarsInLog = 0; - }; -/* End PBXShellScriptBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - C9049B0F17CAC48E0099F480 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - C9049B2317CAC48E0099F480 /* main.m in Sources */, - C9049B2717CAC48E0099F480 /* AppDelegate.m in Sources */, - C9049BAA17CAC6BA0099F480 /* CoreDataManager.m in Sources */, - C9B506F71AE72F1B00108562 /* SettingsViewController.m in Sources */, - C9049BAD17CAC9CD0099F480 /* Model.xcdatamodeld in Sources */, - C9049BB017CACA5C0099F480 /* StickyNote.m in Sources */, - C9049BB517CACD870099F480 /* StickyNoteListViewController.m in Sources */, - C9049BBA17CAD3860099F480 /* StickyNoteViewController.m in Sources */, - C9049BC517CB10800099F480 /* Notifications.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - C9049B4617CAC4D50099F480 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = BRFullTextSearch; - targetProxy = C9049B4517CAC4D50099F480 /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin PBXVariantGroup section */ - C9049B1F17CAC48E0099F480 /* InfoPlist.strings */ = { - isa = PBXVariantGroup; - children = ( - C9049B2017CAC48E0099F480 /* en */, - ); - name = InfoPlist.strings; - sourceTree = ""; - }; - C9049BC017CAE7700099F480 /* stop-words.txt */ = { - isa = PBXVariantGroup; - children = ( - C9049BC117CAE7700099F480 /* en */, - ); - name = "stop-words.txt"; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - C9049B3417CAC48F0099F480 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = YES; - ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)"; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - FRAMEWORK_SEARCH_PATHS = ""; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - HEADER_SEARCH_PATHS = "\"$(PROJECT_DIR)/..\""; - IPHONEOS_DEPLOYMENT_TARGET = 6.1; - ONLY_ACTIVE_ARCH = YES; - OTHER_LDFLAGS = "-ObjC"; - SDKROOT = iphoneos; - }; - name = Debug; - }; - C9049B3517CAC48F0099F480 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = YES; - ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)"; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = YES; - FRAMEWORK_SEARCH_PATHS = ""; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - HEADER_SEARCH_PATHS = "\"$(PROJECT_DIR)/..\""; - IPHONEOS_DEPLOYMENT_TARGET = 6.1; - OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1"; - OTHER_LDFLAGS = "-ObjC"; - SDKROOT = iphoneos; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - C9049B3717CAC48F0099F480 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 0697CF9C57C1EABE6B92AFE7 /* Pods.debug.xcconfig */; - buildSettings = { - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "SampleCoreDataProject/SampleCoreDataProject-Prefix.pch"; - HEADER_SEARCH_PATHS = ( - "\"${PODS_ROOT}/Headers/Public\"", - "\"${PODS_ROOT}/Headers/Public/MagicalRecord\"", - "\"$(PROJECT_DIR)/..\"", - ); - INFOPLIST_FILE = "SampleCoreDataProject/SampleCoreDataProject-Info.plist"; - PRODUCT_NAME = "$(TARGET_NAME)"; - WRAPPER_EXTENSION = app; - }; - name = Debug; - }; - C9049B3817CAC48F0099F480 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 6D852EE8FD9DA1755B51BFC8 /* Pods.release.xcconfig */; - buildSettings = { - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "SampleCoreDataProject/SampleCoreDataProject-Prefix.pch"; - HEADER_SEARCH_PATHS = ( - "\"${PODS_ROOT}/Headers/Public\"", - "\"${PODS_ROOT}/Headers/Public/MagicalRecord\"", - "\"$(PROJECT_DIR)/..\"", - ); - INFOPLIST_FILE = "SampleCoreDataProject/SampleCoreDataProject-Info.plist"; - PRODUCT_NAME = "$(TARGET_NAME)"; - WRAPPER_EXTENSION = app; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - C9049B0E17CAC48E0099F480 /* Build configuration list for PBXProject "SampleCoreDataProject" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - C9049B3417CAC48F0099F480 /* Debug */, - C9049B3517CAC48F0099F480 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - C9049B3617CAC48F0099F480 /* Build configuration list for PBXNativeTarget "SampleCoreDataProject" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - C9049B3717CAC48F0099F480 /* Debug */, - C9049B3817CAC48F0099F480 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - -/* Begin XCVersionGroup section */ - C9049BAB17CAC9CD0099F480 /* Model.xcdatamodeld */ = { - isa = XCVersionGroup; - children = ( - C9049BAC17CAC9CD0099F480 /* Model.xcdatamodel */, - ); - currentVersion = C9049BAC17CAC9CD0099F480 /* Model.xcdatamodel */; - path = Model.xcdatamodeld; - sourceTree = ""; - versionGroupType = wrapper.xcdatamodel; - }; -/* End XCVersionGroup section */ - }; - rootObject = C9049B0B17CAC48E0099F480 /* Project object */; -} diff --git a/SampleCoreDataProject/SampleCoreDataProject.xcworkspace/contents.xcworkspacedata b/SampleCoreDataProject/SampleCoreDataProject.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 5afbf1a..0000000 --- a/SampleCoreDataProject/SampleCoreDataProject.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - diff --git a/SampleCoreDataProject/SampleCoreDataProject/AppDelegate.h b/SampleCoreDataProject/SampleCoreDataProject/AppDelegate.h deleted file mode 100644 index d0398ee..0000000 --- a/SampleCoreDataProject/SampleCoreDataProject/AppDelegate.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// AppDelegate.h -// SampleCoreDataProject -// -// Created by Matt on 8/26/13. -// Copyright (c) 2013 Blue Rocket, Inc. Distributable under the terms of the Apache License, Version 2.0. -// - -#import - -@class StickyNoteListViewController; - -@interface AppDelegate : UIResponder - -@property (strong, nonatomic) UIWindow *window; - -@property (strong, nonatomic) StickyNoteListViewController *viewController; - -@end diff --git a/SampleCoreDataProject/SampleCoreDataProject/AppDelegate.m b/SampleCoreDataProject/SampleCoreDataProject/AppDelegate.m deleted file mode 100644 index 6dc8b69..0000000 --- a/SampleCoreDataProject/SampleCoreDataProject/AppDelegate.m +++ /dev/null @@ -1,58 +0,0 @@ -// -// AppDelegate.m -// SampleCoreDataProject -// -// Created by Matt on 8/26/13. -// Copyright (c) 2013 Blue Rocket, Inc. Distributable under the terms of the Apache License, Version 2.0. -// - -#import "AppDelegate.h" - -#import -#import -#import "CoreDataManager.h" -#import "SettingsViewController.h" -#import "StickyNoteListViewController.h" - -@implementation AppDelegate { - CoreDataManager *coreDataManager; - CLuceneSearchService *searchService; -} - -- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { - // set up search, core data - searchService = [CLuceneSearchService new]; - searchService.supportStemmedPrefixSearches = YES; // new in 1.0.5 - NSLog(@"Lucene index initialized at %@", searchService.indexPath); - coreDataManager = [CoreDataManager new]; - coreDataManager.searchService = searchService; - - self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; - self.viewController = [[StickyNoteListViewController alloc] initWithNibName:@"StickyNoteListViewController" bundle:nil]; - self.viewController.searchService = searchService; - self.window.rootViewController = [[UINavigationController alloc] initWithRootViewController:self.viewController]; - [self.window makeKeyAndVisible]; - - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(settingsChanged:) name:NSUserDefaultsDidChangeNotification object:nil]; - return YES; -} - -- (void)settingsChanged:(NSNotification *)notification { - NSUserDefaults *defaults = notification.object; - const BOOL stemmingDisabled = [defaults boolForKey:kStemmingDisabledKey]; - const BOOL stemmingPrefixEnabled = [defaults boolForKey:kStemmingPrefixSupportEnabledKey]; - BOOL reindex = NO; - if ( stemmingDisabled != searchService.stemmingDisabled ) { - searchService.stemmingDisabled = stemmingDisabled; - reindex = YES; - } - if ( stemmingPrefixEnabled != searchService.supportStemmedPrefixSearches ) { - searchService.supportStemmedPrefixSearches = stemmingPrefixEnabled; - reindex = YES; - } - if ( reindex ) { - [coreDataManager reindex]; - } -} - -@end diff --git a/SampleCoreDataProject/SampleCoreDataProject/CoreDataManager.h b/SampleCoreDataProject/SampleCoreDataProject/CoreDataManager.h deleted file mode 100644 index ea25a2c..0000000 --- a/SampleCoreDataProject/SampleCoreDataProject/CoreDataManager.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// CoreDataManager.h -// SampleCoreDataProject -// -// Created by Matt on 8/26/13. -// Copyright (c) 2013 Blue Rocket, Inc. Distributable under the terms of the Apache License, Version 2.0. -// - -#import - -@protocol BRSearchService; - -@interface CoreDataManager : NSObject - -@property (nonatomic, strong) id searchService; - -- (void)reindex; - -@end diff --git a/SampleCoreDataProject/SampleCoreDataProject/CoreDataManager.m b/SampleCoreDataProject/SampleCoreDataProject/CoreDataManager.m deleted file mode 100644 index 3bf936c..0000000 --- a/SampleCoreDataProject/SampleCoreDataProject/CoreDataManager.m +++ /dev/null @@ -1,94 +0,0 @@ -// -// CoreDataManager.m -// SampleCoreDataProject -// -// Created by Matt on 8/26/13. -// Copyright (c) 2013 Blue Rocket, Inc. Distributable under the terms of the Apache License, Version 2.0. -// - -#import "CoreDataManager.h" - -#import -#import -#import "Notifications.h" -#import "StickyNote.h" - -@implementation CoreDataManager - -- (id)init { - if ( (self = [super init]) ) { - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - [MagicalRecord setupCoreDataStack]; - }); - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(maintainSearchIndexFromManagedObjectDidSave:) - name:NSManagedObjectContextDidSaveNotification - object:[NSManagedObjectContext MR_defaultContext]]; - } - return self; -} - -- (void)dealloc { - [[NSNotificationCenter defaultCenter] removeObserver:self]; -} - -- (void)maintainSearchIndexFromManagedObjectDidSave:(NSNotification *)notification { - // for inserted or updated objects, collect into array so we can add them to index in batch on background thread - NSMutableSet *changed = [NSMutableSet new]; - [changed addObjectsFromArray:[[notification.userInfo objectForKey:NSUpdatedObjectsKey] allObjects]]; - [changed addObjectsFromArray:[[notification.userInfo objectForKey:NSInsertedObjectsKey] allObjects]]; - NSMutableArray *updatedIndexables = [[NSMutableArray alloc] initWithCapacity:[changed count]]; - for ( id obj in changed ) { - if ( [obj conformsToProtocol:@protocol(BRIndexable)] ) { - [updatedIndexables addObject:obj]; - } - } - - // for deleted objects, create dictionary of object type -> identifier, so we can delete them in batch - NSSet *deleted = [notification.userInfo objectForKey:NSDeletedObjectsKey]; - NSMutableDictionary *deletedIndexableIds = [[NSMutableDictionary alloc] initWithCapacity:[deleted count]]; - for ( id obj in deleted ) { - if ( [obj conformsToProtocol:@protocol(BRIndexable)] ) { - NSString *objectType = StringForBRSearchObjectType([obj indexObjectType]); - NSMutableArray *ids = [deletedIndexableIds objectForKey:objectType]; - if ( ids == nil ) { - ids = [[NSMutableArray alloc] initWithCapacity:[deleted count]]; - [deletedIndexableIds setObject:ids forKey:objectType]; - } - [ids addObject:[obj indexIdentifier]]; - } - } - - // perform the index update batch operation on a background thread - [self.searchService bulkUpdateIndex:^(id updateContext) { - [NSManagedObjectContext MR_resetContextForCurrentThread]; // make sure we pull in latest data - for ( NSString *objectType in deletedIndexableIds ) { - BRSearchObjectType type = BRSearchObjectTypeForString(objectType); - for ( NSString *identifier in [deletedIndexableIds objectForKey:objectType] ) { - [self.searchService removeObjectFromIndex:type withIdentifier:identifier context:updateContext]; - } - } - for ( NSManagedObject *obj in updatedIndexables ) { - NSManagedObject *localObj = (NSManagedObject *)[obj MR_inThreadContext]; - [self.searchService addObjectToIndex:localObj context:updateContext]; - } - } queue:dispatch_get_main_queue() finished:^(int updateCount, NSError *error) { - [[NSNotificationCenter defaultCenter] postNotificationName:SearchIndexDidChange object:nil]; - }]; -} - -- (void)reindex { - [self.searchService bulkUpdateIndex:^(id updateContext) { - NSLog(@"Reindexing..."); - [NSManagedObjectContext MR_resetContextForCurrentThread]; // make sure we pull in latest data - for ( StickyNote *note in [StickyNote MR_findAll] ) { - [self.searchService addObjectToIndex:note context:updateContext]; - } - } queue:dispatch_get_main_queue() finished:^(int updateCount, NSError *error) { - NSLog(@"Reindexing complete."); - [[NSNotificationCenter defaultCenter] postNotificationName:SearchIndexDidChange object:nil]; - }]; -} - -@end diff --git a/SampleCoreDataProject/SampleCoreDataProject/Default-568h@2x.png b/SampleCoreDataProject/SampleCoreDataProject/Default-568h@2x.png deleted file mode 100644 index 0891b7a..0000000 Binary files a/SampleCoreDataProject/SampleCoreDataProject/Default-568h@2x.png and /dev/null differ diff --git a/SampleCoreDataProject/SampleCoreDataProject/Default.png b/SampleCoreDataProject/SampleCoreDataProject/Default.png deleted file mode 100644 index 4c8ca6f..0000000 Binary files a/SampleCoreDataProject/SampleCoreDataProject/Default.png and /dev/null differ diff --git a/SampleCoreDataProject/SampleCoreDataProject/Default@2x.png b/SampleCoreDataProject/SampleCoreDataProject/Default@2x.png deleted file mode 100644 index 35b84cf..0000000 Binary files a/SampleCoreDataProject/SampleCoreDataProject/Default@2x.png and /dev/null differ diff --git a/SampleCoreDataProject/SampleCoreDataProject/Model.xcdatamodeld/Model.xcdatamodel/contents b/SampleCoreDataProject/SampleCoreDataProject/Model.xcdatamodeld/Model.xcdatamodel/contents deleted file mode 100644 index 7a56cc4..0000000 --- a/SampleCoreDataProject/SampleCoreDataProject/Model.xcdatamodeld/Model.xcdatamodel/contents +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/SampleCoreDataProject/SampleCoreDataProject/Notifications.h b/SampleCoreDataProject/SampleCoreDataProject/Notifications.h deleted file mode 100644 index 4b6ed90..0000000 --- a/SampleCoreDataProject/SampleCoreDataProject/Notifications.h +++ /dev/null @@ -1,11 +0,0 @@ -// -// Notifications.h -// SampleCoreDataProject -// -// Created by Matt on 8/26/13. -// Copyright (c) 2013 Blue Rocket, Inc. Distributable under the terms of the Apache License, Version 2.0. -// - -#import - -extern NSString * const SearchIndexDidChange; diff --git a/SampleCoreDataProject/SampleCoreDataProject/Notifications.m b/SampleCoreDataProject/SampleCoreDataProject/Notifications.m deleted file mode 100644 index bd8e4ea..0000000 --- a/SampleCoreDataProject/SampleCoreDataProject/Notifications.m +++ /dev/null @@ -1,11 +0,0 @@ -// -// Notifications.m -// SampleCoreDataProject -// -// Created by Matt on 8/26/13. -// Copyright (c) 2013 Blue Rocket, Inc. Distributable under the terms of the Apache License, Version 2.0. -// - -#import "Notifications.h" - -NSString * const SearchIndexDidChange = @"SearchIndexDidChange"; diff --git a/SampleCoreDataProject/SampleCoreDataProject/SampleCoreDataProject-Info.plist b/SampleCoreDataProject/SampleCoreDataProject/SampleCoreDataProject-Info.plist deleted file mode 100644 index af95d30..0000000 --- a/SampleCoreDataProject/SampleCoreDataProject/SampleCoreDataProject-Info.plist +++ /dev/null @@ -1,38 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleDisplayName - BRFTS Data - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - us.bluerocket.${PRODUCT_NAME:rfc1034identifier} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1.0 - LSRequiresIPhoneOS - - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - - diff --git a/SampleCoreDataProject/SampleCoreDataProject/SampleCoreDataProject-Prefix.pch b/SampleCoreDataProject/SampleCoreDataProject/SampleCoreDataProject-Prefix.pch deleted file mode 100644 index 48d004f..0000000 --- a/SampleCoreDataProject/SampleCoreDataProject/SampleCoreDataProject-Prefix.pch +++ /dev/null @@ -1,14 +0,0 @@ -// -// Prefix header for all source files of the 'SampleCoreDataProject' target in the 'SampleCoreDataProject' project -// - -#import - -#ifndef __IPHONE_5_1 -#warning "This project uses features only available in iOS SDK 5.1 and later." -#endif - -#ifdef __OBJC__ - #import - #import -#endif diff --git a/SampleCoreDataProject/SampleCoreDataProject/SettingsViewController.h b/SampleCoreDataProject/SampleCoreDataProject/SettingsViewController.h deleted file mode 100644 index 304310a..0000000 --- a/SampleCoreDataProject/SampleCoreDataProject/SettingsViewController.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// SettingsViewController.h -// SampleCoreDataProject -// -// Created by Matt on 4/22/15. -// Copyright (c) 2015 Blue Rocket, Inc. All rights reserved. -// - -#import - -extern NSString * const kStemmingDisabledKey; -extern NSString * const kStemmingPrefixSupportEnabledKey; - -/** - Provide a UI for changing system settings. Add settings are stored in @c NSUserDefaults. - */ -@interface SettingsViewController : UIViewController - -@end diff --git a/SampleCoreDataProject/SampleCoreDataProject/SettingsViewController.m b/SampleCoreDataProject/SampleCoreDataProject/SettingsViewController.m deleted file mode 100644 index bf09e6a..0000000 --- a/SampleCoreDataProject/SampleCoreDataProject/SettingsViewController.m +++ /dev/null @@ -1,49 +0,0 @@ -// -// SettingsViewController.m -// SampleCoreDataProject -// -// Created by Matt on 4/22/15. -// Copyright (c) 2015 Blue Rocket, Inc. All rights reserved. -// - -#import "SettingsViewController.h" - -NSString * const kStemmingDisabledKey = @"StemmingDisabled"; -NSString * const kStemmingPrefixSupportEnabledKey = @"StemmingPrefixSupportEnabled"; - -@interface SettingsViewController () -@property (strong, nonatomic) IBOutlet NSLayoutConstraint *topMarginConstraint; -@property (strong, nonatomic) IBOutlet UISwitch *stemmingSwitch; -@property (strong, nonatomic) IBOutlet UISwitch *stemmingPrefixSwitch; -@end - -@implementation SettingsViewController - -- (void)viewWillAppear:(BOOL)animated { - [super viewWillAppear:animated]; - [self updateUIFromModel]; -} - -- (void)viewWillLayoutSubviews { - [super viewWillLayoutSubviews]; - self.topMarginConstraint.constant = (self.topLayoutGuide.length + 20); -} - -- (void)updateUIFromModel { - NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; - self.stemmingSwitch.on = ([defaults boolForKey:kStemmingDisabledKey] != YES); - self.stemmingPrefixSwitch.enabled = self.stemmingSwitch.on; - self.stemmingPrefixSwitch.on = [defaults boolForKey:kStemmingPrefixSupportEnabledKey]; -} - -- (IBAction)switchDidChange:(UISwitch *)sender { - NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; - if ( sender == self.stemmingSwitch ) { - [defaults setBool:!sender.on forKey:kStemmingDisabledKey]; - [self updateUIFromModel]; - } else if ( sender == self.stemmingPrefixSwitch ) { - [defaults setBool:sender.on forKey:kStemmingPrefixSupportEnabledKey]; - } -} - -@end diff --git a/SampleCoreDataProject/SampleCoreDataProject/SettingsViewController.xib b/SampleCoreDataProject/SampleCoreDataProject/SettingsViewController.xib deleted file mode 100644 index b5ec62a..0000000 --- a/SampleCoreDataProject/SampleCoreDataProject/SettingsViewController.xib +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/SampleCoreDataProject/SampleCoreDataProject/StickyNote.h b/SampleCoreDataProject/SampleCoreDataProject/StickyNote.h deleted file mode 100644 index 338d6f3..0000000 --- a/SampleCoreDataProject/SampleCoreDataProject/StickyNote.h +++ /dev/null @@ -1,20 +0,0 @@ -// -// StickyNote.h -// SampleCoreDataProject -// -// Created by Matt on 8/26/13. -// Copyright (c) 2013 Blue Rocket, Inc. Distributable under the terms of the Apache License, Version 2.0. -// - -#import -#import -#import - -extern const BRSearchObjectType kStickyNoteSearchObjectType; - -@interface StickyNote : NSManagedObject - -@property (nonatomic, retain) NSDate * created; -@property (nonatomic, retain) NSString * text; - -@end diff --git a/SampleCoreDataProject/SampleCoreDataProject/StickyNote.m b/SampleCoreDataProject/SampleCoreDataProject/StickyNote.m deleted file mode 100644 index 297f3be..0000000 --- a/SampleCoreDataProject/SampleCoreDataProject/StickyNote.m +++ /dev/null @@ -1,48 +0,0 @@ -// -// StickyNote.m -// SampleCoreDataProject -// -// Created by Matt on 8/26/13. -// Copyright (c) 2013 Blue Rocket, Inc. Distributable under the terms of the Apache License, Version 2.0. -// - -#import "StickyNote.h" - -#import -#import - -const BRSearchObjectType kStickyNoteSearchObjectType = 'n'; - -@implementation StickyNote - -@dynamic created; -@dynamic text; - -#pragma mark - Indexable - -- (BRSearchObjectType)indexObjectType { - return kStickyNoteSearchObjectType; -} - -- (NSString *)indexIdentifier { - return [self.created asIndexTimestampString]; -} - -- (NSDictionary *)indexFieldsDictionary { - NSMutableDictionary *data = [[NSMutableDictionary alloc] initWithCapacity:4]; - if ( self.text != nil ) { - [data setObject:self.text forKey:kBRSearchFieldNameValue]; - } - [data setObject:[self.created asIndexTimestampString] forKey:kBRSearchFieldNameTimestamp]; - NSLog(@"StickyNote index data: %@", data); - return data; -} - -- (BRIndexableIndexType)indexFieldIndexType:(NSString *)fieldName { - if ( [kBRSearchFieldNameTimestamp isEqualToString:fieldName] ) { - return BRIndexableIndexTypeUntokenized; - } - return BRIndexableIndexTypeTokenized; -} - -@end diff --git a/SampleCoreDataProject/SampleCoreDataProject/StickyNoteListViewController.h b/SampleCoreDataProject/SampleCoreDataProject/StickyNoteListViewController.h deleted file mode 100644 index 3ca7581..0000000 --- a/SampleCoreDataProject/SampleCoreDataProject/StickyNoteListViewController.h +++ /dev/null @@ -1,20 +0,0 @@ -// -// StickyNoteListViewController.h -// SampleCoreDataProject -// -// Created by Matt on 8/26/13. -// Copyright (c) 2013 Blue Rocket, Inc. Distributable under the terms of the Apache License, Version 2.0. -// - -#import -#import - -@interface StickyNoteListViewController : UIViewController - -@property (nonatomic, strong) IBOutlet UITableView *tableView; -@property (nonatomic, strong) IBOutlet UISearchBar *searchBar; - -@property (nonatomic, strong) id searchService; - -@end diff --git a/SampleCoreDataProject/SampleCoreDataProject/StickyNoteListViewController.m b/SampleCoreDataProject/SampleCoreDataProject/StickyNoteListViewController.m deleted file mode 100644 index d935fcc..0000000 --- a/SampleCoreDataProject/SampleCoreDataProject/StickyNoteListViewController.m +++ /dev/null @@ -1,209 +0,0 @@ -// -// StickyNoteListViewController.m -// SampleCoreDataProject -// -// Created by Matt on 8/26/13. -// Copyright (c) 2013 Blue Rocket, Inc. Distributable under the terms of the Apache License, Version 2.0. -// - -#import "StickyNoteListViewController.h" - -#import -#import -#import "Notifications.h" -#import "SettingsViewController.h" -#import "StickyNote.h" -#import "StickyNoteViewController.h" - -@interface StickyNoteListViewController () -@end - -@implementation StickyNoteListViewController { - NSFetchedResultsController *stickyNotesModel; - id searchResults; -} - -- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { - if ( (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) ) { - self.navigationItem.title = @"Sticky Notes"; - - UIBarButtonItem *settings = [[UIBarButtonItem alloc] initWithTitle:@"Setup" style:UIBarButtonItemStylePlain target:self action:@selector(viewSettings:)]; - self.navigationItem.leftBarButtonItems = @[self.editButtonItem, settings]; - self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd - target:self - action:@selector(addStickyNote:)]; - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(searchIndexDidChange:) - name:SearchIndexDidChange - object:nil]; - } - return self; -} - -- (void)viewWillAppear:(BOOL)animated { - [super viewWillAppear:animated]; - if ( stickyNotesModel == nil ) { - stickyNotesModel = [StickyNote MR_fetchAllGroupedBy:nil withPredicate:nil sortedBy:@"created" ascending:NO delegate:self]; - [self.tableView reloadData]; - } -} - -- (IBAction)viewSettings:(id)sender { - SettingsViewController *dest = [[SettingsViewController alloc] initWithNibName:@"SettingsViewController" bundle:nil]; - [self.navigationController pushViewController:dest animated:YES]; -} - -- (IBAction)addStickyNote:(id)sender { - StickyNoteViewController *editor = [[StickyNoteViewController alloc] initWithNibName:@"StickyNoteViewController" bundle:nil]; - [self.navigationController pushViewController:editor animated:YES]; -} - -- (void)setEditing:(BOOL)editing animated:(BOOL)animated { - [super setEditing:editing animated:animated]; - [self.tableView setEditing:editing animated:animated]; -} - -- (void)searchIndexDidChange:(NSNotification *)notification { - if ( self.searchDisplayController.active ) { - [self.searchDisplayController.searchResultsTableView reloadData]; - } -} - -- (void)executeSearch { - NSString *query = self.searchBar.text; - searchResults = nil; - if ( [query length] > 1 ) { - searchResults = [self.searchService search:query]; - } -} - -#pragma mark - NSFetchedResultsControllerDelegate - -- (void)controllerWillChangeContent:(NSFetchedResultsController *)controller { - [self.tableView beginUpdates]; -} - -- (void)controller:(NSFetchedResultsController *)controller didChangeSection:(id )sectionInfo - atIndex:(NSUInteger)sectionIndex forChangeType:(NSFetchedResultsChangeType)type { - switch ( type ) { - case NSFetchedResultsChangeInsert: - [self.tableView insertSections:[NSIndexSet indexSetWithIndex:sectionIndex] - withRowAnimation:UITableViewRowAnimationFade]; - break; - - case NSFetchedResultsChangeDelete: - [self.tableView deleteSections:[NSIndexSet indexSetWithIndex:sectionIndex] - withRowAnimation:UITableViewRowAnimationFade]; - break; - } -} - -- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject - atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type - newIndexPath:(NSIndexPath *)newIndexPath { - - UITableView *tableView = self.tableView; - - switch ( type ) { - case NSFetchedResultsChangeInsert: - [tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:newIndexPath] - withRowAnimation:UITableViewRowAnimationFade]; - break; - - case NSFetchedResultsChangeDelete: - [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] - withRowAnimation:UITableViewRowAnimationFade]; - break; - - case NSFetchedResultsChangeUpdate: - [self configureTableView:tableView cell:[tableView cellForRowAtIndexPath:indexPath] - atIndexPath:indexPath]; - break; - - case NSFetchedResultsChangeMove: - [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] - withRowAnimation:UITableViewRowAnimationFade]; - [tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:newIndexPath] - withRowAnimation:UITableViewRowAnimationFade]; - break; - } -} - -- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller { - [self.tableView endUpdates]; -} - -#pragma mark - UITableView support - -- (void)configureTableView:(UITableView *)tableView cell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath { - static NSDateFormatter *dateFormatter; - if ( dateFormatter == nil ) { - dateFormatter = [[NSDateFormatter alloc] init]; - NSString *formatString = [NSDateFormatter dateFormatFromTemplate:@"h:m a MMMMddyyyy" options:0 locale:[NSLocale currentLocale]]; - [dateFormatter setDateFormat:formatString]; - } - - if ( tableView == self.tableView ) { - StickyNote *stickyNote = [stickyNotesModel objectAtIndexPath:indexPath]; - cell.textLabel.text = stickyNote.text; - cell.detailTextLabel.text = [dateFormatter stringFromDate:stickyNote.created]; - } else { - // seach results - id result = [searchResults resultAtIndex:indexPath.row]; - cell.textLabel.text = [result valueForField:kBRSearchFieldNameValue]; - cell.detailTextLabel.text = [dateFormatter stringFromDate: - [NSDate dateWithIndexTimestampString:[result valueForField:kBRSearchFieldNameTimestamp]]]; - } -} - -- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { - return 1; -} - -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { - if ( tableView == self.tableView ) { - return [StickyNote MR_countOfEntities]; - } - - // search results table view here - [self executeSearch]; - return [searchResults count]; -} - -- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { - static NSString *CellIdentifier = @"Cell"; - UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; - if ( cell == nil ) { - cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier]; - } - [self configureTableView:tableView cell:cell atIndexPath:indexPath]; - return cell; -} - -#pragma mark - Table view delegate - -- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { - [tableView deselectRowAtIndexPath:indexPath animated:YES]; - StickyNoteViewController *editor = [[StickyNoteViewController alloc] initWithNibName:@"StickyNoteViewController" bundle:nil]; - if ( tableView == self.tableView ) { - editor.stickyNote = [stickyNotesModel objectAtIndexPath:indexPath]; - } else { - // get StickyNote entity for search result - id result = [searchResults resultAtIndex:indexPath.row]; - NSDate *date = [NSDate dateWithIndexTimestampString:[result valueForField:kBRSearchFieldNameTimestamp]]; - editor.stickyNote = [StickyNote MR_findFirstByAttribute:@"created" withValue:date]; - } - [self.navigationController pushViewController:editor animated:YES]; -} - -- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { - if ( editingStyle == UITableViewCellEditingStyleDelete ) { - StickyNote *stickyNote = [stickyNotesModel objectAtIndexPath:indexPath]; - [MagicalRecord saveUsingCurrentThreadContextWithBlockAndWait:^(NSManagedObjectContext *localContext) { - [[stickyNote managedObjectContext] deleteObject:stickyNote]; - }]; - } -} - - -@end diff --git a/SampleCoreDataProject/SampleCoreDataProject/StickyNoteListViewController.xib b/SampleCoreDataProject/SampleCoreDataProject/StickyNoteListViewController.xib deleted file mode 100644 index e81aa2f..0000000 --- a/SampleCoreDataProject/SampleCoreDataProject/StickyNoteListViewController.xib +++ /dev/null @@ -1,395 +0,0 @@ - - - - 1552 - 14C109 - 6254 - 1344.72 - 757.30 - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - 6247 - - - IBProxyObject - IBUISearchBar - IBUISearchDisplayController - IBUITableView - IBUIView - - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - PluginDependencyRecalculationVersion - - - - - IBFilesOwner - IBCocoaTouchFramework - - - IBFirstResponder - IBCocoaTouchFramework - - - IBCocoaTouchFramework - - - - 292 - - - - 274 - - - - 290 - {320, 44} - - - _NS:9 - 3 - IBCocoaTouchFramework - - IBCocoaTouchFramework - - - - {320, 568} - - - _NS:9 - - 3 - MQA - - YES - IBCocoaTouchFramework - YES - 1 - 0 - YES - 44 - 22 - 22 - - - - {320, 568} - - - _NS:9 - - 3 - MQA - - 2 - - - - IBUIScreenMetrics - IBCocoaTouchFramework - iPhone 4-inch - - YES - - - - - - {320, 568} - {568, 320} - - - 2 - - IBCocoaTouchFramework - - - - - - - searchDisplayController - - - - 29 - - - - view - - - - 30 - - - - tableView - - - - 31 - - - - searchBar - - - - 32 - - - - delegate - - - - 16 - - - - searchContentsController - - - - 12 - - - - searchResultsDataSource - - - - 13 - - - - searchResultsDelegate - - - - 14 - - - - delegate - - - - 15 - - - - searchBar - - - - 10 - - - - dataSource - - - - 27 - - - - delegate - - - - 28 - - - - - - 0 - - - - - - -1 - - - File's Owner - - - -2 - - - - - 9 - - - - - 17 - - - - - - - - 22 - - - - - - - - 8 - - - - - - - StickyNoteListViewController - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - UIResponder - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - - - - 32 - - - - - StickyNoteListViewController - UIViewController - - UISearchBar - UITableView - - - - searchBar - UISearchBar - - - tableView - UITableView - - - - IBProjectSource - SampleCoreDataProject/SampleCoreDataProject/StickyNoteListViewController.h - - - - StickyNoteListViewController - - addStickyNote: - id - - - addStickyNote: - - addStickyNote: - id - - - - IBProjectSource - SampleCoreDataProject/SampleCoreDataProject/StickyNoteListViewController.m - - - - - - UIGestureRecognizer - NSObject - - IBFrameworkSource - UIKit.framework/Headers/UIGestureRecognizer.h - - - - UIResponder - NSObject - - IBFrameworkSource - UIKit.framework/Headers/UIResponder.h - - - - UIScrollView - UIView - - IBFrameworkSource - UIKit.framework/Headers/UIScrollView.h - - - - UISearchBar - UIView - - IBFrameworkSource - UIKit.framework/Headers/UISearchBar.h - - - - UISearchDisplayController - NSObject - - IBFrameworkSource - UIKit.framework/Headers/UISearchDisplayController.h - - - - UITableView - UIScrollView - - IBFrameworkSource - UIKit.framework/Headers/UITableView.h - - - - UIView - UIResponder - - IBFrameworkSource - UIKit.framework/Headers/UIView.h - - - - UIViewController - UIResponder - - IBFrameworkSource - UIKit.framework/Headers/UIViewController.h - - - - - 0 - IBCocoaTouchFramework - NO - - com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3 - - - YES - 3 - - diff --git a/SampleCoreDataProject/SampleCoreDataProject/StickyNoteViewController.h b/SampleCoreDataProject/SampleCoreDataProject/StickyNoteViewController.h deleted file mode 100644 index 01548f2..0000000 --- a/SampleCoreDataProject/SampleCoreDataProject/StickyNoteViewController.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// StickyNoteViewController.h -// SampleCoreDataProject -// -// Created by Matt on 8/26/13. -// Copyright (c) 2013 Blue Rocket, Inc. Distributable under the terms of the Apache License, Version 2.0. -// - -#import - -@class StickyNote; - -@interface StickyNoteViewController : UIViewController - -@property (nonatomic, strong) IBOutlet UITextView *textView; - -@property (nonatomic, strong) StickyNote *stickyNote; - -@end diff --git a/SampleCoreDataProject/SampleCoreDataProject/StickyNoteViewController.m b/SampleCoreDataProject/SampleCoreDataProject/StickyNoteViewController.m deleted file mode 100644 index 67d3f6a..0000000 --- a/SampleCoreDataProject/SampleCoreDataProject/StickyNoteViewController.m +++ /dev/null @@ -1,55 +0,0 @@ -// -// StickyNoteViewController.m -// SampleCoreDataProject -// -// Created by Matt on 8/26/13. -// Copyright (c) 2013 Blue Rocket, Inc. Distributable under the terms of the Apache License, Version 2.0. -// - -#import "StickyNoteViewController.h" - -#import -#import "StickyNote.h" - -@implementation StickyNoteViewController - -- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { - if ( (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) ) { - self.navigationItem.title = @"Edit Note"; - self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(doneEditing:)]; - } - return self; -} - -- (void)viewWillAppear:(BOOL)animated { - [super viewWillAppear:animated]; - self.textView.text = self.stickyNote.text; - [self.textView becomeFirstResponder]; -} - -- (void)viewWillDisappear:(BOOL)animated { - [super viewWillDisappear:animated]; - [self.textView resignFirstResponder]; -} - -- (IBAction)doneEditing:(id)sender { - if ( self.stickyNote == nil ) { - if ( [self.textView.text length] > 0 ) { - self.stickyNote = [StickyNote MR_createEntity]; - - // we use the time stamp, down to seconds granularity, as the primary key for this demo - NSCalendar *cal = [NSCalendar currentCalendar]; - NSDateComponents *timestamp = [cal components:(NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit|NSHourCalendarUnit|NSMinuteCalendarUnit|NSSecondCalendarUnit) - fromDate:[NSDate new]]; - self.stickyNote.created = [cal dateFromComponents:timestamp]; - } - } - if ( self.stickyNote != nil ) { - [MagicalRecord saveUsingCurrentThreadContextWithBlockAndWait:^(NSManagedObjectContext *localContext) { - self.stickyNote.text = self.textView.text; - }]; - } - [self.navigationController popViewControllerAnimated:YES]; -} - -@end diff --git a/SampleCoreDataProject/SampleCoreDataProject/StickyNoteViewController.xib b/SampleCoreDataProject/SampleCoreDataProject/StickyNoteViewController.xib deleted file mode 100644 index 04c52f7..0000000 --- a/SampleCoreDataProject/SampleCoreDataProject/StickyNoteViewController.xib +++ /dev/null @@ -1,195 +0,0 @@ - - - - 1552 - 12E55 - 3084 - 1187.39 - 626.00 - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - 2083 - - - IBProxyObject - IBUITextView - IBUIView - - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - PluginDependencyRecalculationVersion - - - - - IBFilesOwner - IBCocoaTouchFramework - - - IBFirstResponder - IBCocoaTouchFramework - - - - 274 - - - - 274 - {320, 548} - - - _NS:9 - - 1 - MSAxIDEAA - - YES - YES - IBCocoaTouchFramework - - - 2 - IBCocoaTouchFramework - - - 1 - 15 - - - Helvetica - 15 - 16 - - - - {{0, 20}, {320, 548}} - - - - 3 - MQA - - 2 - - - - - IBUIScreenMetrics - - YES - - - - - - {320, 568} - {568, 320} - - - IBCocoaTouchFramework - Retina 4 Full Screen - 2 - - IBCocoaTouchFramework - - - - - - - view - - - - 3 - - - - textView - - - - 9 - - - - - - 0 - - - - - - 1 - - - - - - - - -1 - - - File's Owner - - - -2 - - - - - 4 - - - - - - - StickyNoteViewController - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - UIResponder - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - - - - 9 - - - - - StickyNoteViewController - UIViewController - - textView - UITextView - - - textView - - textView - UITextView - - - - IBProjectSource - ./Classes/StickyNoteViewController.h - - - - - 0 - IBCocoaTouchFramework - YES - 3 - 2083 - - diff --git a/SampleCoreDataProject/SampleCoreDataProject/en.lproj/InfoPlist.strings b/SampleCoreDataProject/SampleCoreDataProject/en.lproj/InfoPlist.strings deleted file mode 100644 index 477b28f..0000000 --- a/SampleCoreDataProject/SampleCoreDataProject/en.lproj/InfoPlist.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* Localized versions of Info.plist keys */ - diff --git a/SampleCoreDataProject/SampleCoreDataProject/main.m b/SampleCoreDataProject/SampleCoreDataProject/main.m deleted file mode 100644 index 805932a..0000000 --- a/SampleCoreDataProject/SampleCoreDataProject/main.m +++ /dev/null @@ -1,18 +0,0 @@ -// -// main.m -// SampleCoreDataProject -// -// Created by Matt on 8/26/13. -// Copyright (c) 2013 Blue Rocket, Inc. Distributable under the terms of the Apache License, Version 2.0. -// - -#import - -#import "AppDelegate.h" - -int main(int argc, char *argv[]) -{ - @autoreleasepool { - return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); - } -} diff --git a/SampleDependentProject/README.md b/SampleDependentProject/README.md deleted file mode 100644 index cd66ccf..0000000 --- a/SampleDependentProject/README.md +++ /dev/null @@ -1,12 +0,0 @@ -FullTextSearch - Sample Dependent Project -========================================= - -This sample project shows how to integrate the `BRFullTextSearch` -framework into an application using a dependent Xcode project. This -project is configured to support iOS 5.1.1 in order to deploy onto -original iPad devices. - -The app is a very basic example of indexing documents and searching the -index. A set of random-length latin text is indexed for a set of -documents when the app launches. You can then search for latin terms, -e.g. "lorem". diff --git a/SampleDependentProject/SampleDependentProject.xcodeproj/project.pbxproj b/SampleDependentProject/SampleDependentProject.xcodeproj/project.pbxproj deleted file mode 100644 index c670c2a..0000000 --- a/SampleDependentProject/SampleDependentProject.xcodeproj/project.pbxproj +++ /dev/null @@ -1,396 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - C92BDBD5178BC63C00700BD0 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C92BDBD4178BC63C00700BD0 /* UIKit.framework */; }; - C92BDBD7178BC63C00700BD0 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C92BDBD6178BC63C00700BD0 /* Foundation.framework */; }; - C92BDBD9178BC63C00700BD0 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C92BDBD8178BC63C00700BD0 /* CoreGraphics.framework */; }; - C92BDBDF178BC63C00700BD0 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = C92BDBDD178BC63C00700BD0 /* InfoPlist.strings */; }; - C92BDBE1178BC63C00700BD0 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = C92BDBE0178BC63C00700BD0 /* main.m */; }; - C92BDBE7178BC63C00700BD0 /* Default.png in Resources */ = {isa = PBXBuildFile; fileRef = C92BDBE6178BC63C00700BD0 /* Default.png */; }; - C92BDBE9178BC63C00700BD0 /* Default@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = C92BDBE8178BC63C00700BD0 /* Default@2x.png */; }; - C92BDBEB178BC63C00700BD0 /* Default-568h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = C92BDBEA178BC63C00700BD0 /* Default-568h@2x.png */; }; - C92BDC07178BC6E000700BD0 /* libBRFullTextSearch.a in Frameworks */ = {isa = PBXBuildFile; fileRef = C92BDBFE178BC6B700700BD0 /* libBRFullTextSearch.a */; }; - C92BDC0D178BC71D00700BD0 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = C92BDC09178BC71D00700BD0 /* AppDelegate.m */; }; - C92BDC0E178BC71D00700BD0 /* TestCopy.txt in Resources */ = {isa = PBXBuildFile; fileRef = C92BDC0A178BC71D00700BD0 /* TestCopy.txt */; }; - C92BDC0F178BC71D00700BD0 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C92BDC0C178BC71D00700BD0 /* ViewController.m */; }; - C92BDC12178BC74900700BD0 /* ViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = C92BDC10178BC74900700BD0 /* ViewController.xib */; }; - C92BDC14178BC84000700BD0 /* libstdc++.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = C92BDC13178BC84000700BD0 /* libstdc++.dylib */; }; - C92BDC16178BC84500700BD0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = C92BDC15178BC84500700BD0 /* libz.dylib */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - C92BDBFD178BC6B700700BD0 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = C92BDBF7178BC6B700700BD0 /* BRFullTextSearch.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = C909C2611784CB600016C25E; - remoteInfo = BRFullTextSearch; - }; - C92BDBFF178BC6B700700BD0 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = C92BDBF7178BC6B700700BD0 /* BRFullTextSearch.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = C909C2721784CB600016C25E; - remoteInfo = BRFullTextSearchTests; - }; - C92BDC17178BC9E800700BD0 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = C92BDBF7178BC6B700700BD0 /* BRFullTextSearch.xcodeproj */; - proxyType = 1; - remoteGlobalIDString = C909C2601784CB600016C25E; - remoteInfo = BRFullTextSearch; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXFileReference section */ - C92BDBD1178BC63C00700BD0 /* SampleDependentProject.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SampleDependentProject.app; sourceTree = BUILT_PRODUCTS_DIR; }; - C92BDBD4178BC63C00700BD0 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; - C92BDBD6178BC63C00700BD0 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; - C92BDBD8178BC63C00700BD0 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; - C92BDBDC178BC63C00700BD0 /* SampleDependentProject-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "SampleDependentProject-Info.plist"; sourceTree = ""; }; - C92BDBDE178BC63C00700BD0 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; - C92BDBE0178BC63C00700BD0 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; - C92BDBE2178BC63C00700BD0 /* SampleDependentProject-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "SampleDependentProject-Prefix.pch"; sourceTree = ""; }; - C92BDBE6178BC63C00700BD0 /* Default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Default.png; sourceTree = ""; }; - C92BDBE8178BC63C00700BD0 /* Default@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default@2x.png"; sourceTree = ""; }; - C92BDBEA178BC63C00700BD0 /* Default-568h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-568h@2x.png"; sourceTree = ""; }; - C92BDBF7178BC6B700700BD0 /* BRFullTextSearch.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = BRFullTextSearch.xcodeproj; path = ../BRFullTextSearch.xcodeproj; sourceTree = ""; }; - C92BDC08178BC71D00700BD0 /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = ../../SampleStaticLibraryProject/SampleStaticLibraryProject/AppDelegate.h; sourceTree = ""; }; - C92BDC09178BC71D00700BD0 /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = ../../SampleStaticLibraryProject/SampleStaticLibraryProject/AppDelegate.m; sourceTree = ""; }; - C92BDC0A178BC71D00700BD0 /* TestCopy.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = TestCopy.txt; path = ../../SampleStaticLibraryProject/SampleStaticLibraryProject/TestCopy.txt; sourceTree = ""; }; - C92BDC0B178BC71D00700BD0 /* ViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ViewController.h; path = ../../SampleStaticLibraryProject/SampleStaticLibraryProject/ViewController.h; sourceTree = ""; }; - C92BDC0C178BC71D00700BD0 /* ViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ViewController.m; path = ../../SampleStaticLibraryProject/SampleStaticLibraryProject/ViewController.m; sourceTree = ""; }; - C92BDC11178BC74900700BD0 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = ../../SampleStaticLibraryProject/SampleStaticLibraryProject/en.lproj/ViewController.xib; sourceTree = ""; }; - C92BDC13178BC84000700BD0 /* libstdc++.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libstdc++.dylib"; path = "usr/lib/libstdc++.dylib"; sourceTree = SDKROOT; }; - C92BDC15178BC84500700BD0 /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = usr/lib/libz.dylib; sourceTree = SDKROOT; }; - C9EDB6EE18F36B0800675FFC /* README.md */ = {isa = PBXFileReference; lastKnownFileType = text; path = README.md; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - C92BDBCE178BC63C00700BD0 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - C92BDC16178BC84500700BD0 /* libz.dylib in Frameworks */, - C92BDC14178BC84000700BD0 /* libstdc++.dylib in Frameworks */, - C92BDC07178BC6E000700BD0 /* libBRFullTextSearch.a in Frameworks */, - C92BDBD5178BC63C00700BD0 /* UIKit.framework in Frameworks */, - C92BDBD7178BC63C00700BD0 /* Foundation.framework in Frameworks */, - C92BDBD9178BC63C00700BD0 /* CoreGraphics.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - C92BDBC8178BC63C00700BD0 = { - isa = PBXGroup; - children = ( - C9EDB6EE18F36B0800675FFC /* README.md */, - C92BDBF7178BC6B700700BD0 /* BRFullTextSearch.xcodeproj */, - C92BDBDA178BC63C00700BD0 /* SampleDependentProject */, - C92BDBD3178BC63C00700BD0 /* Frameworks */, - C92BDBD2178BC63C00700BD0 /* Products */, - ); - sourceTree = ""; - }; - C92BDBD2178BC63C00700BD0 /* Products */ = { - isa = PBXGroup; - children = ( - C92BDBD1178BC63C00700BD0 /* SampleDependentProject.app */, - ); - name = Products; - sourceTree = ""; - }; - C92BDBD3178BC63C00700BD0 /* Frameworks */ = { - isa = PBXGroup; - children = ( - C92BDC15178BC84500700BD0 /* libz.dylib */, - C92BDC13178BC84000700BD0 /* libstdc++.dylib */, - C92BDBD4178BC63C00700BD0 /* UIKit.framework */, - C92BDBD6178BC63C00700BD0 /* Foundation.framework */, - C92BDBD8178BC63C00700BD0 /* CoreGraphics.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - C92BDBDA178BC63C00700BD0 /* SampleDependentProject */ = { - isa = PBXGroup; - children = ( - C92BDC08178BC71D00700BD0 /* AppDelegate.h */, - C92BDC09178BC71D00700BD0 /* AppDelegate.m */, - C92BDC0B178BC71D00700BD0 /* ViewController.h */, - C92BDC0C178BC71D00700BD0 /* ViewController.m */, - C92BDC10178BC74900700BD0 /* ViewController.xib */, - C92BDBDB178BC63C00700BD0 /* Supporting Files */, - ); - path = SampleDependentProject; - sourceTree = ""; - }; - C92BDBDB178BC63C00700BD0 /* Supporting Files */ = { - isa = PBXGroup; - children = ( - C92BDC0A178BC71D00700BD0 /* TestCopy.txt */, - C92BDBDC178BC63C00700BD0 /* SampleDependentProject-Info.plist */, - C92BDBDD178BC63C00700BD0 /* InfoPlist.strings */, - C92BDBE0178BC63C00700BD0 /* main.m */, - C92BDBE2178BC63C00700BD0 /* SampleDependentProject-Prefix.pch */, - C92BDBE6178BC63C00700BD0 /* Default.png */, - C92BDBE8178BC63C00700BD0 /* Default@2x.png */, - C92BDBEA178BC63C00700BD0 /* Default-568h@2x.png */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; - C92BDBF8178BC6B700700BD0 /* Products */ = { - isa = PBXGroup; - children = ( - C92BDBFE178BC6B700700BD0 /* libBRFullTextSearch.a */, - C92BDC00178BC6B700700BD0 /* BRFullTextSearchTests.xctest */, - ); - name = Products; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - C92BDBD0178BC63C00700BD0 /* SampleDependentProject */ = { - isa = PBXNativeTarget; - buildConfigurationList = C92BDBF4178BC63C00700BD0 /* Build configuration list for PBXNativeTarget "SampleDependentProject" */; - buildPhases = ( - C92BDBCD178BC63C00700BD0 /* Sources */, - C92BDBCE178BC63C00700BD0 /* Frameworks */, - C92BDBCF178BC63C00700BD0 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - C92BDC18178BC9E800700BD0 /* PBXTargetDependency */, - ); - name = SampleDependentProject; - productName = SampleDependentProject; - productReference = C92BDBD1178BC63C00700BD0 /* SampleDependentProject.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - C92BDBC9178BC63C00700BD0 /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 0700; - ORGANIZATIONNAME = "Blue Rocket"; - }; - buildConfigurationList = C92BDBCC178BC63C00700BD0 /* Build configuration list for PBXProject "SampleDependentProject" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; - hasScannedForEncodings = 0; - knownRegions = ( - en, - ); - mainGroup = C92BDBC8178BC63C00700BD0; - productRefGroup = C92BDBD2178BC63C00700BD0 /* Products */; - projectDirPath = ""; - projectReferences = ( - { - ProductGroup = C92BDBF8178BC6B700700BD0 /* Products */; - ProjectRef = C92BDBF7178BC6B700700BD0 /* BRFullTextSearch.xcodeproj */; - }, - ); - projectRoot = ""; - targets = ( - C92BDBD0178BC63C00700BD0 /* SampleDependentProject */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXReferenceProxy section */ - C92BDBFE178BC6B700700BD0 /* libBRFullTextSearch.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libBRFullTextSearch.a; - remoteRef = C92BDBFD178BC6B700700BD0 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - C92BDC00178BC6B700700BD0 /* BRFullTextSearchTests.xctest */ = { - isa = PBXReferenceProxy; - fileType = wrapper.cfbundle; - path = BRFullTextSearchTests.xctest; - remoteRef = C92BDBFF178BC6B700700BD0 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; -/* End PBXReferenceProxy section */ - -/* Begin PBXResourcesBuildPhase section */ - C92BDBCF178BC63C00700BD0 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - C92BDBDF178BC63C00700BD0 /* InfoPlist.strings in Resources */, - C92BDBE7178BC63C00700BD0 /* Default.png in Resources */, - C92BDBE9178BC63C00700BD0 /* Default@2x.png in Resources */, - C92BDBEB178BC63C00700BD0 /* Default-568h@2x.png in Resources */, - C92BDC0E178BC71D00700BD0 /* TestCopy.txt in Resources */, - C92BDC12178BC74900700BD0 /* ViewController.xib in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - C92BDBCD178BC63C00700BD0 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - C92BDBE1178BC63C00700BD0 /* main.m in Sources */, - C92BDC0D178BC71D00700BD0 /* AppDelegate.m in Sources */, - C92BDC0F178BC71D00700BD0 /* ViewController.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - C92BDC18178BC9E800700BD0 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = BRFullTextSearch; - targetProxy = C92BDC17178BC9E800700BD0 /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin PBXVariantGroup section */ - C92BDBDD178BC63C00700BD0 /* InfoPlist.strings */ = { - isa = PBXVariantGroup; - children = ( - C92BDBDE178BC63C00700BD0 /* en */, - ); - name = InfoPlist.strings; - sourceTree = ""; - }; - C92BDC10178BC74900700BD0 /* ViewController.xib */ = { - isa = PBXVariantGroup; - children = ( - C92BDC11178BC74900700BD0 /* en */, - ); - name = ViewController.xib; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - C92BDBF2178BC63C00700BD0 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - HEADER_SEARCH_PATHS = "\"$(PROJECT_DIR)/..\""; - IPHONEOS_DEPLOYMENT_TARGET = 5.1.1; - ONLY_ACTIVE_ARCH = YES; - OTHER_LDFLAGS = "-ObjC"; - SDKROOT = iphoneos; - }; - name = Debug; - }; - C92BDBF3178BC63C00700BD0 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - HEADER_SEARCH_PATHS = "\"$(PROJECT_DIR)/..\""; - IPHONEOS_DEPLOYMENT_TARGET = 5.1.1; - OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1"; - OTHER_LDFLAGS = "-ObjC"; - SDKROOT = iphoneos; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - C92BDBF5178BC63C00700BD0 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "SampleDependentProject/SampleDependentProject-Prefix.pch"; - INFOPLIST_FILE = "SampleDependentProject/SampleDependentProject-Info.plist"; - PRODUCT_BUNDLE_IDENTIFIER = "us.bluerocket.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "$(TARGET_NAME)"; - WRAPPER_EXTENSION = app; - }; - name = Debug; - }; - C92BDBF6178BC63C00700BD0 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "SampleDependentProject/SampleDependentProject-Prefix.pch"; - INFOPLIST_FILE = "SampleDependentProject/SampleDependentProject-Info.plist"; - PRODUCT_BUNDLE_IDENTIFIER = "us.bluerocket.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "$(TARGET_NAME)"; - WRAPPER_EXTENSION = app; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - C92BDBCC178BC63C00700BD0 /* Build configuration list for PBXProject "SampleDependentProject" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - C92BDBF2178BC63C00700BD0 /* Debug */, - C92BDBF3178BC63C00700BD0 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - C92BDBF4178BC63C00700BD0 /* Build configuration list for PBXNativeTarget "SampleDependentProject" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - C92BDBF5178BC63C00700BD0 /* Debug */, - C92BDBF6178BC63C00700BD0 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = C92BDBC9178BC63C00700BD0 /* Project object */; -} diff --git a/SampleDependentProject/SampleDependentProject.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/SampleDependentProject/SampleDependentProject.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 6410902..0000000 --- a/SampleDependentProject/SampleDependentProject.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/SampleDependentProject/SampleDependentProject/Default-568h@2x.png b/SampleDependentProject/SampleDependentProject/Default-568h@2x.png deleted file mode 100644 index 0891b7a..0000000 Binary files a/SampleDependentProject/SampleDependentProject/Default-568h@2x.png and /dev/null differ diff --git a/SampleDependentProject/SampleDependentProject/Default.png b/SampleDependentProject/SampleDependentProject/Default.png deleted file mode 100644 index 4c8ca6f..0000000 Binary files a/SampleDependentProject/SampleDependentProject/Default.png and /dev/null differ diff --git a/SampleDependentProject/SampleDependentProject/Default@2x.png b/SampleDependentProject/SampleDependentProject/Default@2x.png deleted file mode 100644 index 35b84cf..0000000 Binary files a/SampleDependentProject/SampleDependentProject/Default@2x.png and /dev/null differ diff --git a/SampleDependentProject/SampleDependentProject/SampleDependentProject-Info.plist b/SampleDependentProject/SampleDependentProject/SampleDependentProject-Info.plist deleted file mode 100644 index 5860c3f..0000000 --- a/SampleDependentProject/SampleDependentProject/SampleDependentProject-Info.plist +++ /dev/null @@ -1,38 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleDisplayName - ${PRODUCT_NAME} - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1.0 - LSRequiresIPhoneOS - - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - - diff --git a/SampleDependentProject/SampleDependentProject/SampleDependentProject-Prefix.pch b/SampleDependentProject/SampleDependentProject/SampleDependentProject-Prefix.pch deleted file mode 100644 index 7313e6f..0000000 --- a/SampleDependentProject/SampleDependentProject/SampleDependentProject-Prefix.pch +++ /dev/null @@ -1,14 +0,0 @@ -// -// Prefix header for all source files of the 'SampleDependentProject' target in the 'SampleDependentProject' project -// - -#import - -#ifndef __IPHONE_4_0 -#warning "This project uses features only available in iOS SDK 4.0 and later." -#endif - -#ifdef __OBJC__ - #import - #import -#endif diff --git a/SampleDependentProject/SampleDependentProject/en.lproj/InfoPlist.strings b/SampleDependentProject/SampleDependentProject/en.lproj/InfoPlist.strings deleted file mode 100644 index 477b28f..0000000 --- a/SampleDependentProject/SampleDependentProject/en.lproj/InfoPlist.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* Localized versions of Info.plist keys */ - diff --git a/SampleDependentProject/SampleDependentProject/main.m b/SampleDependentProject/SampleDependentProject/main.m deleted file mode 100644 index c5a0bd9..0000000 --- a/SampleDependentProject/SampleDependentProject/main.m +++ /dev/null @@ -1,18 +0,0 @@ -// -// main.m -// SampleDependentProject -// -// Created by Matt on 7/9/13. -// Copyright (c) 2013 Blue Rocket, Inc. Distributable under the terms of the Apache License, Version 2.0. -// - -#import - -#import "AppDelegate.h" - -int main(int argc, char *argv[]) -{ - @autoreleasepool { - return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); - } -} diff --git a/SampleOSXCocoaPodsProject/Podfile b/SampleOSXCocoaPodsProject/Podfile index 2f9bba0..c7147ad 100644 --- a/SampleOSXCocoaPodsProject/Podfile +++ b/SampleOSXCocoaPodsProject/Podfile @@ -4,6 +4,8 @@ platform :osx, '10.9' inhibit_all_warnings! -pod 'BRFullTextSearch', :path => '../' -pod 'MagicalRecord', '2.2' +target :SampleOSXCocoaPodsProject do + pod 'BRFullTextSearch', :path => '../' + pod 'MagicalRecord', '2.2' +end diff --git a/SampleOSXCocoaPodsProject/Podfile.lock b/SampleOSXCocoaPodsProject/Podfile.lock index 802e796..fe44119 100644 --- a/SampleOSXCocoaPodsProject/Podfile.lock +++ b/SampleOSXCocoaPodsProject/Podfile.lock @@ -1,28 +1,30 @@ PODS: - - BRFullTextSearch (1.1.1): - - BRFullTextSearch/Core (= 1.1.1) - - BRFullTextSearch/API (1.1.1) - - BRFullTextSearch/CLucene (1.1.1): - - BRFullTextSearch/CLucene-Contribs-Lib - - BRFullTextSearch/CLucene-Core - - BRFullTextSearch/CLucene-Shared - - BRFullTextSearch/CLucene-Config (1.1.1) - - BRFullTextSearch/CLucene-Contribs-Lib (1.1.1): - - BRFullTextSearch/CLucene-Core - - BRFullTextSearch/CLucene-Shared - - BRFullTextSearch/CLucene-Core (1.1.1): - - BRFullTextSearch/CLucene-Core-API - - BRFullTextSearch/CLucene-Shared - - BRFullTextSearch/CLucene-Core-API (1.1.1): - - BRFullTextSearch/CLucene-Config - - BRFullTextSearch/CLucene-Shared (1.1.1): - - BRFullTextSearch/CLucene-Core-API - - BRFullTextSearch/Core (1.1.1): + - BRCLucene (0.1.0): + - BRCLucene/CLucene (= 0.1.0) + - BRCLucene/CLucene (0.1.0): + - BRCLucene/CLucene-Contribs-Lib + - BRCLucene/CLucene-Core + - BRCLucene/CLucene-Shared + - BRCLucene/CLucene-Config (0.1.0) + - BRCLucene/CLucene-Contribs-Lib (0.1.0): + - BRCLucene/CLucene-Core + - BRCLucene/CLucene-Shared + - BRCLucene/CLucene-Core (0.1.0): + - BRCLucene/CLucene-Core-API + - BRCLucene/CLucene-Shared + - BRCLucene/CLucene-Core-API (0.1.0): + - BRCLucene/CLucene-Config + - BRCLucene/CLucene-Shared (0.1.0): + - BRCLucene/CLucene-Core-API + - BRFullTextSearch (2.0.0): + - BRFullTextSearch/Core (= 2.0.0) + - BRFullTextSearch/API (2.0.0) + - BRFullTextSearch/Core (2.0.0): - BRFullTextSearch/API - BRFullTextSearch/Implementation-CLucene - - BRFullTextSearch/Implementation-CLucene (1.1.1): + - BRFullTextSearch/Implementation-CLucene (2.0.0): + - BRCLucene (< 2.0) - BRFullTextSearch/API - - BRFullTextSearch/CLucene - MagicalRecord (2.2): - MagicalRecord/Core (= 2.2) - MagicalRecord/Core (2.2) @@ -36,7 +38,10 @@ EXTERNAL SOURCES: :path: ../ SPEC CHECKSUMS: - BRFullTextSearch: 7e416f703adc68e7bc507273d0931b4199773dfb + BRCLucene: 1035562d82d9bdad637ce0991b0b8ef4f8720ce3 + BRFullTextSearch: 5f5ee65e1e8a26c5743664361c1008d1f16b6983 MagicalRecord: 2dc87179ae7c1f2a274442624ec65a07d4357a6f -COCOAPODS: 0.39.0 +PODFILE CHECKSUM: ec1511de673c0886b75c50decf58e5f961d4b808 + +COCOAPODS: 1.1.1 diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/BRCLucene/src/CLucene/_clucene-config.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/BRCLucene/src/CLucene/_clucene-config.h new file mode 100644 index 0000000..791a0c3 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/BRCLucene/src/CLucene/_clucene-config.h @@ -0,0 +1,112 @@ +#ifndef _SRC_CLUCENE_INTERNAL_CLUCENE_CONFIG_H +#define _SRC_CLUCENE_INTERNAL_CLUCENE_CONFIG_H 1 + +/* src/shared/CLucene/_clucene-config.h. +* Generated automatically at end of cmake. +* These are internal definitions, and this file does not need to be distributed +*/ + +/* CMake will look for these functions: */ +/* #undef _CL_HAVE_FUNCTION__VSNWPRINTF */ +/* #undef _CL_HAVE_FUNCTION__SNWPRINTF */ +#define _CL_HAVE_FUNCTION_WCSCASECMP +#define _CL_HAVE_FUNCTION_WCSCAT 1 +#define _CL_HAVE_FUNCTION_WCSCHR 1 +#define _CL_HAVE_FUNCTION_WCSCMP 1 +#define _CL_HAVE_FUNCTION_WCSCPY 1 +#define _CL_HAVE_FUNCTION_WCSCSPN 1 +/* #undef _CL_HAVE_FUNCTION_WCSICMP */ +#define _CL_HAVE_FUNCTION_WCSLEN 1 +#define _CL_HAVE_FUNCTION_WCSNCMP 1 +#define _CL_HAVE_FUNCTION_WCSNCPY 1 +#define _CL_HAVE_FUNCTION_WCSSTR 1 +#define _CL_HAVE_FUNCTION_WCSTOD 1 +#define _CL_HAVE_FUNCTION_WCSDUP 1 +#define _CL_HAVE_FUNCTION_WCSTOLL 1 +/* #undef _CL_HAVE_FUNCTION_WCSUPR */ +#define _CL_HAVE_FUNCTION_GETTIMEOFDAY 1 +/* #undef _CL_HAVE_FUNCTION_MAPVIEWOFFILE */ + +/* #undef _CL_HAVE_FUNCTION_LLTOA */ +/* #undef _CL_HAVE_FUNCTION_LLTOW */ +#define _CL_HAVE_FUNCTION_PRINTF 1 +#define _CL_HAVE_FUNCTION_SNPRINTF 1 +#define _CL_HAVE_FUNCTION_MMAP 1 +/* #undef _CL_HAVE_FUNCTION_STRLWR */ +#define _CL_HAVE_FUNCTION_STRTOLL 1 +/* #undef _CL_HAVE_FUNCTION_STRUPR */ +/* #undef _CL_HAVE_FUNCTION_GETPAGESIZE */ +#define _CL_HAVE_FUNCTION_USLEEP 1 +/* #undef _CL_HAVE_FUNCTION_SLEEP */ + +#define CL_MAX_PATH 4096 +//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 + +#define _O_RANDOM 0 +#define _O_BINARY 0 +#define _S_IREAD S_IREAD +#define _S_IWRITE S_IWRITE +#define _timeb timeb + +#define _ILONG(x) x ## L +#define _ILONGLONG(x) x ## LL + +#define fileStat stat +#define cl_stat_t stat +#define fileSize CL_NS(util)::Misc::filelength +#define fileSeek lseek +#define fileTell(fhandle) fileSeek(fhandle, 0, SEEK_CUR) +#define fileHandleStat fstat +#define _realpath realpath +#define _rename rename +#define _close close +#define _read read +#define _cl_open open +#define _write write +#define _snprintf snprintf +#define _mkdir(x) mkdir(x,0777) +#define _unlink unlink +#define _ftime ftime +#define SLEEPFUNCTION usleep + +/* CMake will determine these specifics. Things like bugs, etc */ + +/* Does not support new float byte<->float conversions */ +/* #undef _CL_HAVE_NO_FLOAT_BYTE */ + +/* Define if recursive pthread mutexes are available */ +#define _CL_HAVE_PTHREAD_MUTEX_RECURSIVE 1 + +/** define if you would like to force clucene to use the internal +* character functions. +* Tests may display unpredictable behaviour if this is not defined. +*/ +#ifndef LUCENE_USE_INTERNAL_CHAR_FUNCTIONS + #define LUCENE_USE_INTERNAL_CHAR_FUNCTIONS 1 +#endif + +/** fix ansi for loop scope */ +#if 1==0 + #define for if (0); else for +#endif + + +/* Compiler oddities */ + +//not sure why, but cygwin reports _S_IREAD, but doesn't actually work... +//TODO: make this work properly (this bit shouldn't be necessary) +#ifdef __CYGWIN__ + #define _S_IREAD 0333 + #define _S_IWRITE 0333 +#endif + +#ifdef __BORLANDC__ //borland compiler + #define O_RANDOM 0 +#endif + +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/BRCLucene/src/CLucene/clucene-config.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/BRCLucene/src/CLucene/clucene-config.h new file mode 100644 index 0000000..b3fe69f --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/BRCLucene/src/CLucene/clucene-config.h @@ -0,0 +1,148 @@ +#ifndef _SRC_CLUCENE_CLUCENE_CONFIG_H +#define _SRC_CLUCENE_CLUCENE_CONFIG_H 1 + +/* src/shared/CLucene/clucene-config.h. +* Generated automatically at end of cmake. +*/ + +/* CMake will look for these headers: */ +#define _CL_HAVE_STRING_H 1 +#define _CL_HAVE_MEMORY_H 1 +#define _CL_HAVE_UNISTD_H 1 +/* #undef _CL_HAVE_IO_H */ +/* #undef _CL_HAVE_DIRECT_H */ +#define _CL_HAVE_DIRENT_H 1 +#define _CL_HAVE_SYS_DIR_H +/* #undef _CL_HAVE_SYS_NDIR_H */ +#define _CL_HAVE_ERRNO_H 1 +#define _CL_HAVE_WCHAR_H 1 +#define _CL_HAVE_WCTYPE_H +#define _CL_HAVE_CTYPE_H 1 +/* #undef _CL_HAVE_WINDOWS_H */ +/* #undef _CL_HAVE_WINDEF_H */ +#define _CL_HAVE_SYS_TYPES_H 1 +/* #undef _CL_HAVE_DLFCN_H */ +#define _CL_HAVE_EXT_HASH_MAP 1 +/* #undef _CL_HAVE_EXT_HASH_SET */ +#define _CL_HAVE_TR1_UNORDERED_MAP 1 +#define _CL_HAVE_TR1_UNORDERED_SET 1 +/* #undef _CL_HAVE_HASH_MAP */ +/* #undef _CL_HAVE_HASH_SET */ +/* #undef _CL_HAVE_NDIR_H */ +#define _CL_HAVE_SYS_STAT_H 1 +#define _CL_HAVE_SYS_TIMEB_H 1 +#define _CL_HAVE_SYS_TIME_H 1 +/* #undef _CL_HAVE_TCHAR_H */ +#define _CL_HAVE_SYS_MMAN_H 1 +/* #undef _CL_HAVE_WINERROR_H */ +#define _CL_HAVE_STDINT_H 1 + +// our needed types +/* undef int8_t int8_t */ +/* undef uint8_t uint8_t */ +/* undef int16_t int16_t */ +/* undef uint16_t uint16_t */ +/* undef int32_t int32_t */ +/* undef uint32_t uint32_t */ +/* undef int64_t int64_t */ +/* undef uint64_t uint64_t */ + +/* undef float_t*/ + +/* undef size_t size_t */ + +/* tchar & _T definitions... */ +typedef wchar_t TCHAR; +#define _T(x) L ## x + +/* CMake will determine these specifics. Things like bugs, etc */ + +/* if we can't support the map/set hashing */ +/* #undef LUCENE_DISABLE_HASHING */ + +/* Define if you have POSIX threads libraries and header files. */ +#define _CL_HAVE_PTHREAD 1 + +/* Define if you have Win32 threads libraries and header files. */ +/* #undef _CL_HAVE_WIN32_THREADS */ + +/* Define if we have gcc atomic functions */ +#define _CL_HAVE_GCC_ATOMIC_FUNCTIONS 1 + +/* Define what eval method is required for float_t to be defined (for GCC). */ +/* #undef _FLT_EVAL_METHOD */ + +/* If we use hashmaps, which namespace do we use: */ +#define CL_NS_HASHING(func) std::tr1::func +/* If we use hashmaps, which classes do we use: */ +#define _CL_HASH_MAP unordered_map +#define _CL_HASH_SET unordered_set + +/* define if the compiler implements namespaces */ +#define _CL_HAVE_NAMESPACES + +/* Defined if the snprintf overflow test fails */ +/* #undef _CL_HAVE_SNPRINTF_BUG */ + +/* Defined if the swprintf test fails */ +/* #undef _CL_HAVE_SNWPRINTF_BUG */ + +/* How to define a static const in a class */ +#define LUCENE_STATIC_CONSTANT(type, assignment) static const type assignment + +/* Define to the necessary symbol if this constant uses a non-standard name on + your system. */ +//todo: not checked +/* #undef _CL_PTHREAD_CREATE_JOINABLE */ + +/* Define to 1 if the `S_IS*' macros in do not work properly. */ +//todo: not being checked for... +/* #undef _CL_STAT_MACROS_BROKEN */ + +/* Define to 1 if you can safely include both and . */ +//not actually used for anything... +//#define _CL_TIME_WITH_SYS_TIME 1 + +/* Define that we will be using -fvisibility=hidden, and + * make public classes visible using __attribute__ ((visibility("default"))) + */ +/* #undef _CL_HAVE_GCCVISIBILITYPATCH */ + + +/* Versions, etc */ + +/* Name of package */ +#define _CL_PACKAGE "clucene-core" + +/* Version number of package */ +#define _CL_VERSION "2.3.3.4" + +/* So-Version number of package */ +#define _CL_SOVERSION "1" + +/* A comparable version number */ +#define _CL_INT_VERSION 2030304 + +/* Configured options (from command line) */ + +/* Forces into Ascii mode */ +/* #undef _ASCII */ + +/* Conditional Debugging */ +/* #undef _CL__CND_DEBUG */ + +/* debuging option */ +/* #undef _DEBUG */ + +/* Disable multithreading */ +/* #undef _CL_DISABLE_MULTITHREADING */ + + +#ifdef __BORLANDC__ //borland compiler + //todo: bcc incorrectly detects this... fix this in cmake + #undef LUCENE_STATIC_CONSTANT + #define LUCENE_STATIC_CONSTANT(type, assignment) enum { assignment } +#endif + + +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/README b/SampleOSXCocoaPodsProject/Pods/BRCLucene/README new file mode 100644 index 0000000..9b411e7 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/README @@ -0,0 +1,63 @@ +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 +------------ +Read the INSTALL file + + +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 +------------- +You can build your own documentation by running 'make DoxygenDoc' from your +'out-of-source' cmake-configured build directory. +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/ +There is an online version (which won't be as up to date as if you build your +own) at http://clucene.sourceforge.net/doc/html/ + + +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: + +This software contains code derived from the RSA Data Security +Inc. MD5 Message-Digest Algorithm. + +CLucene relies heavily on the use of cmake to provide a stable build environment. + diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/README.PACKAGE b/SampleOSXCocoaPodsProject/Pods/BRCLucene/README.PACKAGE new file mode 100644 index 0000000..e33b1d4 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/README.PACKAGE @@ -0,0 +1,11 @@ +CLucene is a C++ port of the popular Apache Lucene search engine +(http://lucene.apache.org/java). It is released under LGPL or the Apache +License. + +CLucene aims to be a high-speed alternative to Java Lucene, its API is very +similar to that of the Java version. CLucene has recently been brought up to +date with Lucene 2.3.2. It contains most of the same functionality as the +Java version. + +This package contains the files necessary for running applications that +use the libclucene library. diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/analysis/LanguageBasedAnalyzer.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/analysis/LanguageBasedAnalyzer.cpp new file mode 100644 index 0000000..da28cbe --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/analysis/LanguageBasedAnalyzer.cpp @@ -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. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "LanguageBasedAnalyzer.h" +#include "CLucene/analysis/cjk/CJKAnalyzer.h" +#include "CLucene/analysis/Analyzers.h" +#include "CLucene/analysis/standard/StandardTokenizer.h" +#include "CLucene/analysis/standard/StandardFilter.h" +#include "CLucene/snowball/SnowballFilter.h" + +CL_NS_USE(util) +CL_NS_USE2(analysis,cjk) +CL_NS_USE2(analysis,standard) +CL_NS_USE2(analysis,snowball) + +CL_NS_DEF(analysis) + +LanguageBasedAnalyzer::LanguageBasedAnalyzer(const TCHAR* language, bool stem) +{ + if ( language == NULL ) + _tcsncpy(lang,LUCENE_BLANK_STRING,100); + else + _tcsncpy(lang,language,100); + this->stem = stem; +} +LanguageBasedAnalyzer::~LanguageBasedAnalyzer(){ +} +void LanguageBasedAnalyzer::setLanguage(const TCHAR* language){ + _tcsncpy(lang,language,100); +} +void LanguageBasedAnalyzer::setStem(bool stem){ + this->stem = stem; +} +TokenStream* LanguageBasedAnalyzer::tokenStream(const TCHAR* fieldName, Reader* reader) { + TokenStream* ret = NULL; + if ( _tcscmp(lang, _T("cjk"))==0 ){ + ret = _CLNEW CL_NS2(analysis,cjk)::CJKTokenizer(reader); + }else{ + BufferedReader* bufferedReader = reader->__asBufferedReader(); + if ( bufferedReader == NULL ) + ret = _CLNEW StandardTokenizer( _CLNEW FilteredBufferedReader(reader, false), true ); + else + ret = _CLNEW StandardTokenizer(bufferedReader); + + ret = _CLNEW StandardFilter(ret,true); + + if ( stem ) + ret = _CLNEW SnowballFilter(ret,lang, true); //todo: should check whether snowball supports the language + + if ( stem ) //hmm... this could be configured seperately from stem + ret = _CLNEW ISOLatin1AccentFilter(ret, true); //todo: this should really only be applied to latin languages... + + //lower case after the latin1 filter + ret = _CLNEW LowerCaseFilter(ret,true); + } + //todo: could add a stop filter based on the language - need to fix the stoplist loader first + + return ret; +} + +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/analysis/LanguageBasedAnalyzer.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/analysis/LanguageBasedAnalyzer.h new file mode 100644 index 0000000..596c86b --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/analysis/LanguageBasedAnalyzer.h @@ -0,0 +1,26 @@ +/*------------------------------------------------------------------------------ +* 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_languagebasedanalyzer_ +#define _lucene_analysis_languagebasedanalyzer_ + +#include "CLucene/analysis/AnalysisHeader.h" + +CL_NS_DEF(analysis) + +class CLUCENE_CONTRIBS_EXPORT LanguageBasedAnalyzer: public CL_NS(analysis)::Analyzer{ + TCHAR lang[100]; + bool stem; +public: + LanguageBasedAnalyzer(const TCHAR* language=NULL, bool stem=true); + ~LanguageBasedAnalyzer(); + void setLanguage(const TCHAR* language); + void setStem(bool stem); + TokenStream* tokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader); + }; + +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/analysis/PorterStemmer.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/analysis/PorterStemmer.cpp new file mode 100644 index 0000000..d5ec3a6 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/analysis/PorterStemmer.cpp @@ -0,0 +1,313 @@ +/* This is the Porter stemming algorithm, originally written by Martin Porter. + It may be regarded as cononical, in that it follows the + algorithm presented in + + Porter, 1980, An algorithm for suffix stripping, Program, Vol. 14, + no. 3, pp 130-137, + + See also http://www.tartarus.org/~martin/PorterStemmer + + Modified by "Hemant Muthiyan" + email: hemant_muthiyan@yahoo.co.in + +*/ + +#include "CLucene/_ApiHeader.h" +#include "PorterStemmer.h" + +CL_NS_DEF(analysis) + + bool PorterStemmer::cons(size_t i) { + switch (b[i]) { + case 'a': case 'e': case 'i': case 'o': case 'u': + return false; + case 'y': + return (i==k0) ? true : !cons(i-1); + default: + return true; + } + } + + int32_t PorterStemmer::m() { + int32_t n = 0; + size_t i = k0; + while(true) { + if (i > j) + return n; + if (! cons(i)) + break; + i++; + } + i++; + while(true) { + while(true) { + if (i > j) + return n; + if (cons(i)) + break; + i++; + } + i++; + n++; + while(true) { + if (i > j) + return n; + if (! cons(i)) + break; + i++; + } + i++; + } + } + + bool PorterStemmer::vowelinstem() { + for (size_t i = k0; i <= j; i++) + if (! cons(i)) + return true; + return false; + } + + /* doublec(j) is true <=> j,(j-1) contain a double consonant. */ + bool PorterStemmer::doublec(size_t j) { + if (j < k0+1) + return false; + if (b[j] != b[j-1]) + return false; + return cons(j); + } + + /* cvc(i) is true <=> i-2,i-1,i has the form consonant - vowel - consonant + and also if the second c is not w,x or y. this is used when trying to + restore an e at the end of a short word. e.g. + + cav(e), lov(e), hop(e), crim(e), but + snow, box, tray. + + */ + bool PorterStemmer::cvc(size_t i) { + if (i < k0+2 || !cons(i) || cons(i-1) || !cons(i-2)) + return false; + else { + int32_t ch = b[i]; + if (ch == 'w' || ch == 'x' || ch == 'y') return false; + } + return true; + } + + bool PorterStemmer::ends(TCHAR *s) { + size_t l = _tcslen(s); + size_t o = k-l+1; + if (o < k0) + return false; + for (size_t i = 0; i < l; i++) + if (b[o+i] != s[i]) + return false; + j = (l > k) ? 0 : k-l; + return true; + } + + void PorterStemmer::setto(const TCHAR *s) { + size_t l = _tcslen(s); + size_t o = j+1; + for (size_t i = 0; i < l; i++) + b[o+i] = s[i]; + k = j+l; + dirty = true; + } + + void PorterStemmer::r(const TCHAR *s) { + if (m() > 0) setto(s); + } + + void PorterStemmer::step1() { + if (b[k] == _T('s')) { + if (ends(_T("sses"))) k -= 2; + else if (ends(_T("ies"))) setto(_T("i")); + else if (b[k-1] != _T('s')) k--; + } + if (ends(_T("eed"))) { + if (m() > 0) + k--; + } + else if ((ends(_T("ed")) || ends(_T("ing"))) && vowelinstem()) { + k = j; + if (ends(_T("at"))) setto(_T("ate")); + else if (ends(_T("bl"))) setto(_T("ble")); + else if (ends(_T("iz"))) setto(_T("ize")); + else if (doublec(k)) { + int32_t ch = b[k--]; + if (ch == _T('l') || ch == _T('s') || ch == _T('z')) + k++; + } + else if (m() == 1 && cvc(k)) + setto(_T("e")); + } + } + + void PorterStemmer::step2() { + if (ends(_T("y")) && vowelinstem()) { + b[k] = 'i'; + dirty = true; + } + } + + void PorterStemmer::step3() { + if (k == k0) return; /* For Bug 1 */ + switch (b[k-1]) { + case 'a': + if (ends(_T("ational"))) { r(_T("ate")); break; } + if (ends(_T("tional"))) { r(_T("tion")); break; } + break; + case 'c': + if (ends(_T("enci"))) { r(_T("ence")); break; } + if (ends(_T("anci"))) { r(_T("ance")); break; } + break; + case 'e': + if (ends(_T("izer"))) { r(_T("ize")); break; } + break; + case 'l': + if (ends(_T("bli"))) { r(_T("ble")); break; } + if (ends(_T("alli"))) { r(_T("al")); break; } + if (ends(_T("entli"))) { r(_T("ent")); break; } + if (ends(_T("eli"))) { r(_T("e")); break; } + if (ends(_T("ousli"))) { r(_T("ous")); break; } + break; + case 'o': + if (ends(_T("ization"))) { r(_T("ize")); break; } + if (ends(_T("ation"))) { r(_T("ate")); break; } + if (ends(_T("ator"))) { r(_T("ate")); break; } + break; + case 's': + if (ends(_T("alism"))) { r(_T("al")); break; } + if (ends(_T("iveness"))) { r(_T("ive")); break; } + if (ends(_T("fulness"))) { r(_T("ful")); break; } + if (ends(_T("ousness"))) { r(_T("ous")); break; } + break; + case 't': + if (ends(_T("aliti"))) { r(_T("al")); break; } + if (ends(_T("iviti"))) { r(_T("ive")); break; } + if (ends(_T("biliti"))) { r(_T("ble")); break; } + break; + case 'g': + if (ends(_T("logi"))) { r(_T("log")); break; } + } + } + + void PorterStemmer::step4() { + switch (b[k]) { + case 'e': + if (ends(_T("icate"))) { r(_T("ic")); break; } + if (ends(_T("ative"))) { r(LUCENE_BLANK_STRING); break; } + if (ends(_T("alize"))) { r(_T("al")); break; } + break; + case 'i': + if (ends(_T("iciti"))) { r(_T("ic")); break; } + break; + case 'l': + if (ends(_T("ical"))) { r(_T("ic")); break; } + if (ends(_T("ful"))) { r(LUCENE_BLANK_STRING); break; } + break; + case 's': + if (ends(_T("ness"))) { r(LUCENE_BLANK_STRING); break; } + break; + } + } + + void PorterStemmer::step5() { + if (k == k0) return; /* for Bug 1 */ + switch (b[k-1]) { + case 'a': + if (ends(_T("al"))) break; + return; + case 'c': + if (ends(_T("ance"))) break; + if (ends(_T("ence"))) break; + return; + case 'e': + if (ends(_T("er"))) break; return; + case 'i': + if (ends(_T("ic"))) break; return; + case 'l': + if (ends(_T("able"))) break; + if (ends(_T("ible"))) break; return; + case 'n': + if (ends(_T("ant"))) break; + if (ends(_T("ement"))) break; + if (ends(_T("ment"))) break; + /* element etc. not stripped before the m */ + if (ends(_T("ent"))) break; + return; + case 'o': + if (ends(_T("ion")) && j >= 0 && (b[j] == 's' || b[j] == 't')) break; + /* j >= 0 fixes Bug 2 */ + if (ends(_T("ou"))) break; + return; + /* takes care of -ous */ + case 's': + if (ends(_T("ism"))) break; + return; + case 't': + if (ends(_T("ate"))) break; + if (ends(_T("iti"))) break; + return; + case 'u': + if (ends(_T("ous"))) break; + return; + case 'v': + if (ends(_T("ive"))) break; + return; + case 'z': + if (ends(_T("ize"))) break; + return; + default: + return; + } + if (m() > 1) + k = j; + } + + void PorterStemmer::step6() { + j = k; + if (b[k] == 'e') { + int32_t a = m(); + if (a > 1 || a == 1 && !cvc(k-1)) + k--; + } + if (b[k] == 'l' && doublec(k) && m() > 1) + k--; + } + + + PorterStemmer::PorterStemmer(TCHAR *Text) { + b = Text; + i = _tcslen(b); + dirty = false; + } + + PorterStemmer::~PorterStemmer(){ + b = NULL; + } + + + int32_t PorterStemmer::getResultLength() { return i; } + + bool PorterStemmer::stem() { + //i = strlen(b); + k = i -1; + k0 = 0; + if (k > k0+1) { + step1(); step2(); step3(); step4(); step5(); step6(); + } + // Also, a word is considered dirty if we lopped off letters + // Thanks to Ifigenia Vairelles for pointing this out. + if (i != k+1) + dirty = true; + i = k+1; + return dirty; + } + + const TCHAR* PorterStemmer::getResultBuffer() { + return b; + } + +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/analysis/PorterStemmer.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/analysis/PorterStemmer.h new file mode 100644 index 0000000..35ff817 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/analysis/PorterStemmer.h @@ -0,0 +1,151 @@ +/* This is the Porter stemming algorithm, originally written by Martin Porter. + It may be regarded as cononical, in that it follows the + algorithm presented in + + Porter, 1980, An algorithm for suffix stripping, Program, Vol. 14, + no. 3, pp 130-137, + + See also http://www.tartarus.org/~martin/PorterStemmer + + Modified by "Hemant Muthiyan" + email: hemant_muthiyan@yahoo.co.in + + The Porter stemmer should be regarded as �frozen�, that is, strictly defined, + and not amenable to further modification. As a stemmer, it is slightly inferior + to the Snowball English or Porter2 stemmer, which derives from it, and which is + subjected to occasional improvements. For practical work, therefore, the new + Snowball stemmer is recommended. The Porter stemmer is appropriate to IR + research work involving stemming where the experiments need to be exactly + repeatable. + +*/ +#ifndef _lucene_analysis_PorterStemmer_ +#define _lucene_analysis_PorterStemmer_ + +CL_NS_DEF(analysis) + +class CLUCENE_CONTRIBS_EXPORT PorterStemmer +{ +private: + TCHAR *b; + size_t i, /* offset into b */ + j, k, k0; + bool dirty; + //private static final int32_t EXTRA = 1; + + /* cons(i) is true <=> b[i] is a consonant. */ + +private: + bool cons(size_t i); + + /* m() measures the number of consonant sequences between k0 and j. if c is + a consonant sequence and v a vowel sequence, and <..> indicates arbitrary + presence, + + gives 0 + vc gives 1 + vcvc gives 2 + vcvcvc gives 3 + .... + */ + + int32_t m(); + + /* vowelinstem() is true <=> k0,...j contains a vowel */ + + bool vowelinstem(); + + /* doublec(j) is true <=> j,(j-1) contain a double consonant. */ + bool doublec(size_t j); + + /* cvc(i) is true <=> i-2,i-1,i has the form consonant - vowel - consonant + and also if the second c is not w,x or y. this is used when trying to + restore an e at the end of a short word. e.g. + + cav(e), lov(e), hop(e), crim(e), but + snow, box, tray. + + */ + bool cvc(size_t i); + + bool ends(TCHAR *s); + + /* setto(s) sets (j+1),...k to the characters in the string s, readjusting + k. */ + + void setto(const TCHAR *s); + + /* r(s) is used further down. */ + + void r(const TCHAR *s); + + /* step1() gets rid of plurals and -ed or -ing. e.g. + + caresses -> caress + ponies -> poni + ties -> ti + caress -> caress + cats -> cat + + feed -> feed + agreed -> agree + disabled -> disable + + matting -> mat + mating -> mate + meeting -> meet + milling -> mill + messing -> mess + + meetings -> meet + + */ + + void step1(); + + /* step2() turns terminal y to i when there is another vowel in the stem. */ + + void step2(); + + /* step3() maps double suffices to single ones. so -ization ( = -ize plus + -ation) maps to -ize etc. note that the string before the suffix must give + m() > 0. */ + + void step3(); + + /* step4() deals with -ic-, -full, -ness etc. similar strategy to step3. */ + + void step4(); + + /* step5() takes off -ant, -ence etc., in context vcvc. */ + + void step5(); + + /* step6() removes a final -e if m() > 1. */ + + void step6(); + + public: + + PorterStemmer(TCHAR *Text); + ~PorterStemmer(); + + + /** + * Returns the length of the word resulting from the stemming process. + */ + int32_t getResultLength(); + + bool stem(); + + /** + * Returns a reference to a character buffer containing the results of + * the stemming process. You also need to consult getResultLength() + * to determine the length of the result. + */ + const TCHAR* getResultBuffer(); + +}; +CL_NS_END + +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/analysis/cjk/CJKAnalyzer.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/analysis/cjk/CJKAnalyzer.cpp new file mode 100644 index 0000000..05a17e5 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/analysis/cjk/CJKAnalyzer.cpp @@ -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. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "CJKAnalyzer.h" +#include "CLucene/util/CLStreams.h" + +CL_NS_DEF2(analysis,cjk) +CL_NS_USE(analysis) +CL_NS_USE(util) + + +const TCHAR* CJKTokenizer::tokenTypeSingle = _T("single"); +const TCHAR* CJKTokenizer::tokenTypeDouble = _T("double"); + +CJKTokenizer::CJKTokenizer(Reader* in): + Tokenizer(in) +{ + tokenType = Token::getDefaultType(); + offset = 0; + bufferIndex = 0; + dataLen = 0; + preIsTokened = false; + ignoreSurrogates = true; +} + +CL_NS(analysis)::Token* CJKTokenizer::next(Token* token){ + /** how many character(s) has been stored in buffer */ + int32_t length = 0; + + /** the position used to create Token */ + int32_t start = offset; + + while (true) { + /** current character */ + clunichar c; + int charlen = 1; + + offset++; + + if (bufferIndex >= dataLen) { + dataLen = input->read(ioBuffer, 1, LUCENE_IO_BUFFER_SIZE); + bufferIndex = 0; + } + + if (dataLen == -1) { + if (length > 0) { + if (preIsTokened == true) { + length = 0; + preIsTokened = false; + } + + break; + } else { + return NULL; + } + } else { + //get current character + c = ioBuffer[bufferIndex++]; + } + + //to support surrogates, we'll need to convert the incoming utf16 into + //ucs4(c variable). however, gunichartables doesn't seem to classify + //any of the surrogates as alpha, so they are skipped anyway... + //so for now we just convert to ucs4 so that we dont corrupt the input. + if ( c >= 0xd800 || c <= 0xdfff ){ + clunichar c2 = ioBuffer[bufferIndex]; + if ( c2 >= 0xdc00 && c2 <= 0xdfff ){ + bufferIndex++; + offset++; + charlen=2; + + c = (((c & 0x03ffL) << 10) | ((c2 & 0x03ffL) << 0)) + 0x00010000L; + } + } + + //if the current character is ASCII or Extend ASCII + if ((c <= 0xFF) //is BASIC_LATIN + || (c>=0xFF00 && c<=0xFFEF) //ascii >0x74 cast to unsigned... + ) { + if (c >= 0xFF00) { + //todo: test this... only happens on platforms where char is signed, i think... + /** convert HALFWIDTH_AND_FULLWIDTH_FORMS to BASIC_LATIN */ + c -= 0xFEE0; + } + + // if the current character is a letter or "_" "+" "#" + if (_istalnum(c) || ((c == '_') || (c == '+') || (c == '#')) ) { + if (length == 0) { + // "javaC1C2C3C4linux"
+ // ^--: the current character begin to token the ASCII + // letter + start = offset - 1; + } else if (tokenType == tokenTypeDouble) { + // "javaC1C2C3C4linux"
+ // ^--: the previous non-ASCII + // : the current character + offset-=charlen; + bufferIndex-=charlen; + tokenType = tokenTypeSingle; + + if (preIsTokened == true) { + // there is only one non-ASCII has been stored + length = 0; + preIsTokened = false; + + break; + } else { + break; + } + } + + // store the LowerCase(c) in the buffer + buffer[length++] = _totlower((TCHAR)c); + tokenType = tokenTypeSingle; + + // break the procedure if buffer overflowed! + if (length == LUCENE_MAX_WORD_LEN) { + break; + } + } else if (length > 0) { + if (preIsTokened == true) { + length = 0; + preIsTokened = false; + } else { + break; + } + } + } else { + // non-ASCII letter, eg."C1C2C3C4" + if ( _istalpha(c) || (!ignoreSurrogates && c>=0x10000) ) { + if (length == 0) { + start = offset - 1; + + if ( c < 0x00010000L ) + buffer[length++] = (TCHAR)c; + else{ + clunichar ucs4 = c - 0x00010000L; + buffer[length++] = (TCHAR)((ucs4 >> 10) & 0x3ff) | 0xd800; + buffer[length++] = (TCHAR)((ucs4 >> 0) & 0x3ff) | 0xdc00; + } + + tokenType = tokenTypeDouble; + } else { + if (tokenType == tokenTypeSingle) { + offset-=charlen; + bufferIndex-=charlen; + + //return the previous ASCII characters + break; + } else { + if ( c < 0x00010000L ) + buffer[length++] = (TCHAR)c; + else{ + clunichar ucs4 = c - 0x00010000L; + buffer[length++] = (TCHAR)((ucs4 >> 10) & 0x3ff) | 0xd800; + buffer[length++] = (TCHAR)((ucs4 >> 0) & 0x3ff) | 0xdc00; + } + tokenType = tokenTypeDouble; + + if (length >= 2) { + offset-=charlen; + bufferIndex-=charlen; + preIsTokened = true; + + break; + } + } + } + } else if (length > 0) { + if (preIsTokened == true) { + // empty the buffer + length = 0; + preIsTokened = false; + } else { + break; + } + } + } + } + + buffer[length]='\0'; + token->set(buffer,start, start+length, tokenType); + return token; +} + +CL_NS_END2 diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/analysis/cjk/CJKAnalyzer.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/analysis/cjk/CJKAnalyzer.h new file mode 100644 index 0000000..8572094 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/analysis/cjk/CJKAnalyzer.h @@ -0,0 +1,94 @@ +/*------------------------------------------------------------------------------ +* 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_cjk_cjkanalyzer_ +#define _lucene_analysis_cjk_cjkanalyzer_ + +#include "CLucene/analysis/AnalysisHeader.h" + +CL_NS_DEF2(analysis,cjk) + +/** + * CJKTokenizer was modified from StopTokenizer which does a decent job for + * most European languages. It performs other token methods for double-byte + * Characters: the token will return at each two charactors with overlap match.
+ * Example: "java C1C2C3C4" will be segment to: "java" "C1C2" "C2C3" "C3C4" it + * also need filter filter zero length token ""
+ * for Digit: digit, '+', '#' will token as letter
+ * for more info on Asia language(Chinese Japanese Korean) text segmentation: + * please search google + * + * @author Che, Dong + */ +class CLUCENE_CONTRIBS_EXPORT CJKTokenizer: public CL_NS(analysis)::Tokenizer { +private: + /** word offset, used to imply which character(in ) is parsed */ + int32_t offset; + + /** the index used only for ioBuffer */ + int32_t bufferIndex; + + /** data length */ + int32_t dataLen; + + /** + * character buffer, store the characters which are used to compose
+ * the returned Token + */ + TCHAR buffer[LUCENE_MAX_WORD_LEN+1]; + + /** + * I/O buffer, used to store the content of the input(one of the
+ * members of Tokenizer) + */ + const TCHAR* ioBuffer; + + /** word type: single=>ASCII double=>non-ASCII word=>default */ + const TCHAR* tokenType; + + static const TCHAR* tokenTypeSingle; + static const TCHAR* tokenTypeDouble; + + /** + * tag: previous character is a cached double-byte character "C1C2C3C4" + * ----(set the C1 isTokened) C1C2 "C2C3C4" ----(set the C2 isTokened) + * C1C2 C2C3 "C3C4" ----(set the C3 isTokened) "C1C2 C2C3 C3C4" + */ + bool preIsTokened; + + + bool ignoreSurrogates; + +public: + /** + * Construct a token stream processing the given input. + * + * @param in I/O reader + */ + CJKTokenizer(CL_NS(util)::Reader* in); + + /** + * Returns the next token in the stream, or null at EOS. + * See http://java.sun.com/j2se/1.3/docs/api/java/lang/Character.UnicodeBlock.html + * for detail. + * + * @return Token + * + * @throws java.io.IOException - throw IOException when read error
+ * hanppened in the InputStream + * + */ + CL_NS(analysis)::Token* next(CL_NS(analysis)::Token* token); + + bool getIgnoreSurrogates(){ return ignoreSurrogates; }; + void setIgnoreSurrogates(bool ignoreSurrogates){ this->ignoreSurrogates = ignoreSurrogates; }; +}; + + + +CL_NS_END2 +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/analysis/de/GermanAnalyzer.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/analysis/de/GermanAnalyzer.cpp new file mode 100644 index 0000000..b2fe172 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/analysis/de/GermanAnalyzer.cpp @@ -0,0 +1,149 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2010 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/_ApiHeader.h" +#include "CLucene/util/CLStreams.h" +#include "CLucene/analysis/Analyzers.h" +#include "CLucene/analysis/standard/StandardTokenizer.h" +#include "CLucene/analysis/standard/StandardFilter.h" +#include "CLucene/util/StringBuffer.h" +#include "GermanAnalyzer.h" +#include "GermanStemmer.h" +#include "GermanStemFilter.h" + +CL_NS_USE(analysis) +CL_NS_USE2(analysis,de) +CL_NS_USE2(analysis,standard) + + const TCHAR GermanAnalyzer_DASZ[] = { 0x64, 0x61, 0xdf }; + const TCHAR GermanAnalyzer_FUER[] = { 0x66, 0xfc, 0x72 }; + const TCHAR* GermanAnalyzer_GERMAN_STOP_WORDS[] = { + _T("einer"), _T("eine"), _T("eines"), _T("einem"), _T("einen"), + _T("der"), _T("die"), _T("das"), _T("dass"), GermanAnalyzer_DASZ, + _T("du"), _T("er"), _T("sie"), _T("es"), + _T("was"), _T("wer"), _T("wie"), _T("wir"), + _T("und"), _T("oder"), _T("ohne"), _T("mit"), + _T("am"), _T("im"),_T("in"), _T("aus"), _T("auf"), + _T("ist"), _T("sein"), _T("war"), _T("wird"), + _T("ihr"), _T("ihre"), _T("ihres"), + _T("als"), GermanAnalyzer_FUER, _T("von"), _T("mit"), + _T("dich"), _T("dir"), _T("mich"), _T("mir"), + _T("mein"), _T("sein"), _T("kein"), + _T("durch"), _T("wegen"), _T("wird") + }; + + CL_NS(util)::ConstValueArray GermanAnalyzer::GERMAN_STOP_WORDS( GermanAnalyzer_GERMAN_STOP_WORDS, 48 ); + + class GermanAnalyzer::SavedStreams : public TokenStream { + public: + StandardTokenizer* tokenStream; + TokenStream* filteredTokenStream; + + SavedStreams():tokenStream(NULL), filteredTokenStream(NULL) + { + } + + void close(){} + Token* next(Token* token) {return NULL;} + }; + + GermanAnalyzer::GermanAnalyzer() { + exclusionSet = NULL; + stopSet = _CLNEW CLTCSetList; + StopFilter::fillStopTable(stopSet, GERMAN_STOP_WORDS.values); + } + + GermanAnalyzer::GermanAnalyzer(const TCHAR** stopwords) { + exclusionSet = NULL; + stopSet = _CLNEW CLTCSetList; + StopFilter::fillStopTable(stopSet, stopwords); + } + + GermanAnalyzer::GermanAnalyzer(CL_NS(analysis)::CLTCSetList* stopwords) { + exclusionSet = NULL; + stopSet = stopwords; + } + + GermanAnalyzer::GermanAnalyzer(const char* stopwordsFile, const char* enc) { + exclusionSet = NULL; + stopSet = WordlistLoader::getWordSet(stopwordsFile, enc); + } + + GermanAnalyzer::GermanAnalyzer(CL_NS(util)::Reader* stopwordsReader, const bool deleteReader) { + exclusionSet = NULL; + stopSet = WordlistLoader::getWordSet(stopwordsReader, NULL, deleteReader); + } + + GermanAnalyzer::~GermanAnalyzer() { + _CLLDELETE(stopSet); + _CLLDELETE(exclusionSet); + } + + void GermanAnalyzer::setStemExclusionTable(const TCHAR** exclusionlist) { + if (exclusionSet != NULL) { + exclusionSet->clear(); + } else { + exclusionSet = _CLNEW CLTCSetList; + } + + CL_NS(analysis)::StopFilter::fillStopTable(exclusionSet, exclusionlist); + } + + void GermanAnalyzer::setStemExclusionTable(CL_NS(analysis)::CLTCSetList* exclusionlist) { + if (exclusionSet != exclusionlist) { + _CLLDELETE(exclusionSet); + exclusionSet = exclusionlist; + } + } + + void GermanAnalyzer::setStemExclusionTable(const char* exclusionlistFile, const char* enc) { + exclusionSet = WordlistLoader::getWordSet(exclusionlistFile, enc, exclusionSet); + } + + void GermanAnalyzer::setStemExclusionTable(CL_NS(util)::Reader* exclusionlistReader, const bool deleteReader) { + exclusionSet = WordlistLoader::getWordSet(exclusionlistReader, exclusionSet, deleteReader); + } + + TokenStream* GermanAnalyzer::tokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader) { + TokenStream* result; + CL_NS(util)::BufferedReader* bufferedReader = reader->__asBufferedReader(); + + if ( bufferedReader == NULL ) + result = _CLNEW StandardTokenizer( _CLNEW CL_NS(util)::FilteredBufferedReader(reader, false), true ); + else + result = _CLNEW StandardTokenizer(bufferedReader); + + result = _CLNEW StandardFilter(result, true); + result = _CLNEW LowerCaseFilter(result, true); + result = _CLNEW StopFilter(result, true, stopSet); + result = _CLNEW GermanStemFilter(result, true, exclusionSet); + + return result; + } + + TokenStream* GermanAnalyzer::reusableTokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader) + { + SavedStreams* streams = reinterpret_cast(getPreviousTokenStream()); + + if (streams == NULL) { + streams = _CLNEW SavedStreams(); + CL_NS(util)::BufferedReader* bufferedReader = reader->__asBufferedReader(); + + if ( bufferedReader == NULL ) + streams->tokenStream = _CLNEW StandardTokenizer( _CLNEW CL_NS(util)::FilteredBufferedReader(reader, false), true ); + else + streams->tokenStream = _CLNEW StandardTokenizer(bufferedReader); + + streams->filteredTokenStream = _CLNEW StandardFilter(streams->tokenStream, true); + streams->filteredTokenStream = _CLNEW LowerCaseFilter(streams->filteredTokenStream, true); + streams->filteredTokenStream = _CLNEW StopFilter(streams->filteredTokenStream, true, stopSet); + streams->filteredTokenStream = _CLNEW GermanStemFilter(streams->filteredTokenStream, true, exclusionSet); + setPreviousTokenStream(streams); + } else + streams->tokenStream->reset(reader); + + return streams->filteredTokenStream; + } diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/analysis/de/GermanAnalyzer.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/analysis/de/GermanAnalyzer.h new file mode 100644 index 0000000..9c02073 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/analysis/de/GermanAnalyzer.h @@ -0,0 +1,108 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2010 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_de_GermanAnalyzer +#define _lucene_analysis_de_GermanAnalyzer + +CL_NS_DEF2(analysis,de) + +/** + * Analyzer for German language. Supports an external list of stopwords (words that + * will not be indexed at all) and an external list of exclusions (word that will + * not be stemmed, but indexed). + * A default set of stopwords is used unless an alternative list is specified, the + * exclusion list is empty by default. + * + * + * @version $Id: GermanAnalyzer.java 564236 2007-08-09 15:21:19Z gsingers $ + */ +class CLUCENE_CONTRIBS_EXPORT GermanAnalyzer : public CL_NS(analysis)::Analyzer { +public: + + /** + * List of typical german stopwords. + */ + static CL_NS(util)::ConstValueArray GERMAN_STOP_WORDS; + +private: + + class SavedStreams; + + /** + * Contains the stopwords used with the StopFilter. + */ + CL_NS(analysis)::CLTCSetList* stopSet; + + /** + * Contains words that should be indexed but not stemmed. + */ + CL_NS(analysis)::CLTCSetList* exclusionSet; + +public: + + /** + * Builds an analyzer with the default stop words + * (GERMAN_STOP_WORDS). + */ + GermanAnalyzer(); + + /** + * Builds an analyzer with the given stop words. + */ + GermanAnalyzer(const TCHAR** stopWords); + + /** + * Builds an analyzer with the given stop words. + */ + GermanAnalyzer(CL_NS(analysis)::CLTCSetList* stopwords); + + /** + * Builds an analyzer with the given stop words. + */ + GermanAnalyzer(const char* stopwordsFile, const char* enc = NULL); + + /** + * Builds an analyzer with the given stop words. + */ + GermanAnalyzer(CL_NS(util)::Reader* stopwordsReader, const bool deleteReader = false); + + /** + */ + virtual ~GermanAnalyzer(); + + /** + * Builds an exclusionlist from an array of Strings. + */ + void setStemExclusionTable(const TCHAR** exclusionlist); + + /** + * Builds an exclusionlist from a Hashtable. + */ + void setStemExclusionTable(CL_NS(analysis)::CLTCSetList* exclusionlist); + + /** + * Builds an exclusionlist from the words contained in the given file. + */ + void setStemExclusionTable(const char* exclusionlistFile, const char* enc = NULL); + + /** + * Builds an exclusionlist from the words contained in the given file. + */ + void setStemExclusionTable(CL_NS(util)::Reader* exclusionlistReader, const bool deleteReader = false); + + /** + * Creates a TokenStream which tokenizes all the text in the provided Reader. + * + * @return A TokenStream build from a StandardTokenizer filtered with + * StandardFilter, LowerCaseFilter, StopFilter, GermanStemFilter + */ + virtual TokenStream* tokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader); + + virtual TokenStream* reusableTokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader); +}; + +CL_NS_END2 +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/analysis/de/GermanStemFilter.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/analysis/de/GermanStemFilter.cpp new file mode 100644 index 0000000..c4fa71b --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/analysis/de/GermanStemFilter.cpp @@ -0,0 +1,66 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2010 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/_ApiHeader.h" +#include "CLucene/analysis/AnalysisHeader.h" +#include "CLucene/util/StringBuffer.h" +#include "GermanStemmer.h" +#include "GermanStemFilter.h" + +CL_NS_USE(analysis) +CL_NS_USE2(analysis,de) + + GermanStemFilter::GermanStemFilter(TokenStream* in, bool deleteTS) : + TokenFilter(in, deleteTS) + { + stemmer = _CLNEW GermanStemmer(); + exclusionSet = NULL; + } + + GermanStemFilter::GermanStemFilter(TokenStream* in, bool deleteTS, CLTCSetList* exclusionSet) : + TokenFilter(in, deleteTS) + { + stemmer = _CLNEW GermanStemmer(); + this->exclusionSet = exclusionSet; + } + + GermanStemFilter::~GermanStemFilter() + { + _CLDELETE(stemmer); + } + + Token* GermanStemFilter::next(Token* t) { + if (input->next(t) == NULL) { + return NULL; + } else if (exclusionSet != NULL && exclusionSet->find(t->termBuffer()) != exclusionSet->end()) { // Check the exclusiontable + return t; + } else { + TCHAR* s = stemmer->stem(t->termBuffer(), t->termLength()); + // If not stemmed, dont waste the time creating a new token + if (_tcscmp(s, t->termBuffer()) != 0) { + t->setText(s); + } + _CLDELETE_ARRAY(s); + return t; + } + } + + void GermanStemFilter::setStemmer(GermanStemmer* stemmer) { + if (stemmer != NULL && this->stemmer != stemmer) { + _CLLDELETE(this->stemmer); + this->stemmer = stemmer; + } + } + + /** + * Set an alternative exclusion list for this filter. + */ + void GermanStemFilter::setExclusionSet(CLTCSetList* exclusionSet) { + if (this->exclusionSet != exclusionSet) { + _CLLDELETE(exclusionSet); + this->exclusionSet = exclusionSet; + } + } diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/analysis/de/GermanStemFilter.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/analysis/de/GermanStemFilter.h new file mode 100644 index 0000000..7b70bfd --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/analysis/de/GermanStemFilter.h @@ -0,0 +1,56 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2010 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_de_GermanStemFilter +#define _lucene_analysis_de_GermanStemFilter + +CL_NS_DEF2(analysis,de) + +/** + * A filter that stems German words. It supports a table of words that should + * not be stemmed at all. The stemmer used can be changed at runtime after the + * filter object is created (as long as it is a GermanStemmer). + */ +class CLUCENE_CONTRIBS_EXPORT GermanStemFilter : public CL_NS(analysis)::TokenFilter +{ +private: + + /** + * The actual token in the input stream. + */ + CL_NS(analysis)::Token* token; + GermanStemmer* stemmer; + CL_NS(analysis)::CLTCSetList* exclusionSet; + +public: + + GermanStemFilter(TokenStream* in, bool deleteTS = false); + + /** + * Builds a GermanStemFilter that uses an exclusiontable. + */ + GermanStemFilter(TokenStream* in, bool deleteTS, CL_NS(analysis)::CLTCSetList* exclusionSet); + + virtual ~GermanStemFilter(); + + /** + * @return Returns the next token in the stream, or null at EOS + */ + virtual Token* next(Token* t); + + /** + * Set a alternative/custom GermanStemmer for this filter. + */ + void setStemmer(GermanStemmer* stemmer); + + /** + * Set an alternative exclusion list for this filter. + */ + void setExclusionSet(CL_NS(analysis)::CLTCSetList* exclusionSet); +}; + +CL_NS_END2 +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/analysis/de/GermanStemmer.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/analysis/de/GermanStemmer.cpp new file mode 100644 index 0000000..5ddb401 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/analysis/de/GermanStemmer.cpp @@ -0,0 +1,213 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2010 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/_ApiHeader.h" +#include "CLucene/util/StringBuffer.h" +#include "GermanStemmer.h" + +CL_NS_USE(util) +CL_NS_USE2(analysis,de) + + GermanStemmer::GermanStemmer() : + sb() { + } + + TCHAR* GermanStemmer::stem(const TCHAR* term, size_t length) { + if (length <= 0) { + length = _tcslen(term); + } + + // Reset the StringBuffer. + sb.clear(); + sb.append(term, length); + + if (!isStemmable(sb.getBuffer(), sb.length())) + return sb.giveBuffer(); + + // Stemming starts here... + substitute(sb); + strip(sb); + optimize(sb); + resubstitute(sb); + removeParticleDenotion(sb); + + return sb.giveBuffer(); + } + + bool GermanStemmer::isStemmable(const TCHAR* term, size_t length) const { + if (length <= 0) { + length = _tcslen(term); + } + for (size_t c = 0; c < length; c++) { + if (_istalpha(term[c]) == 0) + return false; + } + return true; + } + + void GermanStemmer::strip(StringBuffer& buffer) + { + bool doMore = true; + while ( doMore && buffer.length() > 3 ) { + if ( ( buffer.length() + substCount > 5 ) && + buffer.substringEquals( buffer.length() - 2, buffer.length(), _T("nd"), 2 ) ) + { + buffer.deleteChars( buffer.length() - 2, buffer.length() ); + } + else if ( ( buffer.length() + substCount > 4 ) && + buffer.substringEquals( buffer.length() - 2, buffer.length(), _T("em"), 2 ) ) { + buffer.deleteChars( buffer.length() - 2, buffer.length() ); + } + else if ( ( buffer.length() + substCount > 4 ) && + buffer.substringEquals( buffer.length() - 2, buffer.length(), _T("er"), 2 ) ) { + buffer.deleteChars( buffer.length() - 2, buffer.length() ); + } + else if ( buffer.charAt( buffer.length() - 1 ) == _T('e') ) { + buffer.deleteCharAt( buffer.length() - 1 ); + } + else if ( buffer.charAt( buffer.length() - 1 ) == _T('s') ) { + buffer.deleteCharAt( buffer.length() - 1 ); + } + else if ( buffer.charAt( buffer.length() - 1 ) == _T('n') ) { + buffer.deleteCharAt( buffer.length() - 1 ); + } + // "t" occurs only as suffix of verbs. + else if ( buffer.charAt( buffer.length() - 1 ) == _T('t') ) { + buffer.deleteCharAt( buffer.length() - 1 ); + } + else { + doMore = false; + } + } + } + + void GermanStemmer::optimize(StringBuffer& buffer) { + // Additional step for female plurals of professions and inhabitants. + if ( buffer.length() > 5 && buffer.substringEquals( buffer.length() - 5, buffer.length(), _T("erin*"), 5 ) ) { + buffer.deleteCharAt( buffer.length() -1 ); + strip( buffer ); + } + // Additional step for irregular plural nouns like "Matrizen -> Matrix". + if ( buffer.charAt( buffer.length() - 1 ) == ( _T('z') ) ) { + buffer.setCharAt( buffer.length() - 1, _T('x') ); + } + } + + void GermanStemmer::removeParticleDenotion(StringBuffer& buffer) { + if ( buffer.length() > 4 ) { + for ( size_t c = 0; c < buffer.length() - 3; c++ ) { + if ( buffer.substringEquals( c, c + 4, _T("gege"), 4 ) ) { + buffer.deleteChars( c, c + 2 ); + return; + } + } + } + } + + void GermanStemmer::substitute(StringBuffer& buffer) { + substCount = 0; + + for ( size_t i = 0; i < buffer.length(); i++ ) { +#ifdef _UCS2 + TCHAR c = buffer.charAt(i); +#else + unsigned char c = buffer.charAt(i); +#endif + // Replace the second char of a pair of the equal characters with an asterisk + if ( i > 0 && c == buffer.charAt ( i - 1 ) ) { + buffer.setCharAt( i, _T('*') ); + } + // Substitute Umlauts. + else if ( c == 0xe4 ) { + buffer.setCharAt( i, _T('a') ); + } + else if ( c == 0xf6 ) { + buffer.setCharAt( i, _T('o') ); + } + else if ( c == 0xfc ) { + buffer.setCharAt( i, _T('u') ); + } + // Fix bug so that 'ß' at the end of a word is replaced. + else if ( c == 0xdf ) { + buffer.setCharAt( i, _T('s') ); + buffer.insert( i + 1, _T('s') ); + substCount++; + } + // Take care that at least one character is left left side from the current one + if ( i < buffer.length() - 1 ) { + // Masking several common character combinations with an token + if ( ( i < buffer.length() - 2 ) && c == _T('s') && + buffer.charAt( i + 1 ) == _T('c') && buffer.charAt( i + 2 ) == _T('h') ) + { + buffer.setCharAt( i, _T('$') ); + buffer.deleteChars( i + 1, i + 3 ); + substCount += 2; + } + else if ( c == _T('c') && buffer.charAt( i + 1 ) == _T('h') ) { + buffer.setCharAt( i, 0xa7 ); // section sign in UTF-16 + buffer.deleteCharAt( i + 1 ); + substCount++; + } + else if ( c == _T('e') && buffer.charAt( i + 1 ) == _T('i') ) { + buffer.setCharAt( i, _T('%') ); + buffer.deleteCharAt( i + 1 ); + substCount++; + } + else if ( c == _T('i') && buffer.charAt( i + 1 ) == _T('e') ) { + buffer.setCharAt( i, _T('&') ); + buffer.deleteCharAt( i + 1 ); + substCount++; + } + else if ( c == _T('i') && buffer.charAt( i + 1 ) == _T('g') ) { + buffer.setCharAt( i, _T('#') ); + buffer.deleteCharAt( i + 1 ); + substCount++; + } + else if ( c == _T('s') && buffer.charAt( i + 1 ) == _T('t') ) { + buffer.setCharAt( i, _T('!') ); + buffer.deleteCharAt( i + 1 ); + substCount++; + } + } + } + } + + void GermanStemmer::resubstitute(StringBuffer& buffer) { + for ( size_t i = 0; i < buffer.length(); i++ ) { +#ifdef _UCS2 + TCHAR c = buffer.charAt(i); +#else + unsigned char c = buffer.charAt(i); +#endif + if ( c == _T('*') ) { + buffer.setCharAt( i, buffer.charAt( i - 1 ) ); + } + else if ( c == _T('$') ) { + buffer.setCharAt( i, 's' ); + buffer.insert( i + 1, _T("ch"), 2 ); + } + else if ( c == 0xa7 ) { // section sign in UTF-16 + buffer.setCharAt( i, _T('c') ); + buffer.insert( i + 1, _T('h') ); + } + else if ( c == _T('%') ) { + buffer.setCharAt( i, _T('e') ); + buffer.insert( i + 1, _T('i') ); + } + else if ( c == _T('&') ) { + buffer.setCharAt( i, _T('i') ); + buffer.insert( i + 1, _T('e') ); + } + else if ( c == _T('#') ) { + buffer.setCharAt( i, _T('i') ); + buffer.insert( i + 1, _T('g') ); + } + else if ( c == _T('!') ) { + buffer.setCharAt( i, _T('s') ); + buffer.insert( i + 1, _T('t') ); + } + } + } diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/analysis/de/GermanStemmer.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/analysis/de/GermanStemmer.h new file mode 100644 index 0000000..5743e94 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/analysis/de/GermanStemmer.h @@ -0,0 +1,98 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2003-2010 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_de_GermanStemmer +#define _lucene_analysis_de_GermanStemmer + +CL_CLASS_DEF(util,StringBuffer) + +CL_NS_DEF2(analysis,de) + +/** + * A stemmer for German words. The algorithm is based on the report + * "A Fast and Simple Stemming Algorithm for German Words" by Jörg + * Caumanns (joerg.caumanns at isst.fhg.de). + */ +class CLUCENE_CONTRIBS_EXPORT GermanStemmer +{ +private: + + /** + * Buffer for the terms while stemming them. + */ + CL_NS(util)::StringBuffer sb; + + /** + * Amount of characters that are removed with substitute() while stemming. + */ + int substCount; + +public: + + /** + */ + GermanStemmer(); + + /** + * Stemms the given term to an unique discriminator. + * + * @param term The term that should be stemmed. + * @return Discriminator for term + */ + TCHAR* stem(const TCHAR* term, size_t length = -1); + +private: + + /** + * Checks if a term could be stemmed. + * + * @return true if, and only if, the given term consists in letters. + */ + bool isStemmable(const TCHAR* term, size_t length = -1) const; + + /** + * suffix stripping (stemming) on the current term. The stripping is reduced + * to the seven "base" suffixes "e", "s", "n", "t", "em", "er" and * "nd", + * from which all regular suffixes are build of. The simplification causes + * some overstemming, and way more irregular stems, but still provides unique. + * discriminators in the most of those cases. + * The algorithm is context free, except of the length restrictions. + */ + void strip(CL_NS(util)::StringBuffer& buffer); + + /** + * Does some optimizations on the term. This optimisations are + * contextual. + */ + void optimize(CL_NS(util)::StringBuffer& buffer); + + /** + * Removes a particle denotion ("ge") from a term. + */ + void removeParticleDenotion(CL_NS(util)::StringBuffer& buffer); + + /** + * Do some substitutions for the term to reduce overstemming: + * + * - Substitute Umlauts with their corresponding vowel: äöü -> aou, + * "ß" is substituted by "ss" + * - Substitute a second char of a pair of equal characters with + * an asterisk: ?? -> ?* + * - Substitute some common character combinations with a token: + * sch/ch/ei/ie/ig/st -> $/§/%/&/#/! + */ + void substitute(CL_NS(util)::StringBuffer& buffer); + + /** + * Undoes the changes made by substitute(). That are character pairs and + * character combinations. Umlauts will remain as their corresponding vowel, + * as "ß" remains as "ss". + */ + void resubstitute(CL_NS(util)::StringBuffer& buffer); +}; + +CL_NS_END2 +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/Encoder.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/Encoder.cpp new file mode 100644 index 0000000..9541c35 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/Encoder.cpp @@ -0,0 +1,19 @@ +/** + * Copyright 2002-2004 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/_ApiHeader.h" +#include "Encoder.h" + diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/Encoder.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/Encoder.h new file mode 100644 index 0000000..b91ab29 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/Encoder.h @@ -0,0 +1,56 @@ +/** + * Copyright 2002-2004 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 _lucene_search_highlight_encoder_ +#define _lucene_search_highlight_encoder_ + + +CL_NS_DEF2(search,highlight) + +/** + * Encodes original text. The Encoder works with the Formatter to generate the output. + * + */ +class CLUCENE_CONTRIBS_EXPORT Encoder:LUCENE_BASE +{ +public: + /** Virtual destructor */ + virtual ~Encoder(){ + } + + /** + * @param originalText The section of text being output + */ + virtual TCHAR* encodeText(TCHAR* originalText) = 0; +}; + +/** + * Simple {@link Encoder} implementation that does not modify the output + * @author Nicko Cadell + * + */ +class DefaultEncoder: public Encoder +{ +public: + TCHAR* encodeText(TCHAR* originalText) + { + return STRDUP_TtoT(originalText); + } +}; + + +CL_NS_END2 + +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/Formatter.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/Formatter.cpp new file mode 100644 index 0000000..88b8a0e --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/Formatter.cpp @@ -0,0 +1,18 @@ +/** + * Copyright 2002-2004 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/_ApiHeader.h" +#include "Formatter.h" diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/Formatter.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/Formatter.h new file mode 100644 index 0000000..39c3315 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/Formatter.h @@ -0,0 +1,49 @@ +/** + * Copyright 2002-2004 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 _lucene_search_highlight_formatter_ +#define _lucene_search_highlight_formatter_ + +CL_NS_DEF2(search,highlight) +class TokenGroup; + +/** + * Processes terms found in the original text, typically by applying some form + * of mark-up to highlight terms in HTML search results pages. + * + */ +class CLUCENE_CONTRIBS_EXPORT Formatter:LUCENE_BASE +{ +public: + + /** Virtual destructor */ + virtual ~Formatter(){ + } + + /** + * @param originalText The section of text being considered for markup + * @param tokenGroup contains one or several overlapping Tokens along with + * their scores and positions. + */ + virtual TCHAR* highlightTerm(const TCHAR* originalTermText, const TokenGroup* tokenGroup) = 0; +}; + +CL_NS_END2 + +#endif + + + diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/Fragmenter.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/Fragmenter.cpp new file mode 100644 index 0000000..5d174b4 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/Fragmenter.cpp @@ -0,0 +1,19 @@ +/** + * Copyright 2002-2004 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/_ApiHeader.h" +#include "Fragmenter.h" + diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/Fragmenter.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/Fragmenter.h new file mode 100644 index 0000000..5a1b8c4 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/Fragmenter.h @@ -0,0 +1,52 @@ +/** + * Copyright 2002-2004 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 _lucene_search_highlight_fragmenter_ +#define _lucene_search_highlight_fragmenter_ + + +CL_CLASS_DEF(analysis, Token) + +CL_NS_DEF2(search,highlight) + +/** + * Implements the policy for breaking text into multiple fragments for consideration + * by the {@link Highlighter} class. A sophisticated implementation may do this on the basis + * of detecting end of sentences in the text. + */ +class CLUCENE_CONTRIBS_EXPORT Fragmenter:LUCENE_BASE +{ +public: + /** Virtual destructor */ + virtual ~Fragmenter(){ + } + + /** + * Initializes the Fragmenter + * @param originalText + */ + virtual void start(const TCHAR* originalText) = 0; + + /** + * Test to see if this token from the stream should be held in a new TextFragment + * @param nextToken + */ + virtual bool isNewFragment(const CL_NS(analysis)::Token * nextToken) = 0; +}; + +CL_NS_END2 + +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/HighlightScorer.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/HighlightScorer.h new file mode 100644 index 0000000..ed73998 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/HighlightScorer.h @@ -0,0 +1,63 @@ +/** + * Copyright 2002-2004 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 _lucene_search_highlight_highlighterscorer_ +#define _lucene_search_highlight_highlighterscorer_ + + +CL_CLASS_DEF(analysis, Token) +//#include "TextFragment.h" + +CL_NS_DEF2(search,highlight) +class TextFragment; + +/** + * Adds to the score for a fragment based on its tokens + */ +class CLUCENE_CONTRIBS_EXPORT HighlightScorer:LUCENE_BASE +{ +public: + virtual ~HighlightScorer(){ + } + + /** + * called when a new fragment is started for consideration + * @param newFragment + */ + virtual void startFragment(TextFragment* newFragment) = 0; + + /** + * Called for each token in the current fragment + * @param token The token to be scored + * @return a score which is passed to the Highlighter class to influence the mark-up of the text + * (this return value is NOT used to score the fragment) + */ + virtual float_t getTokenScore(CL_NS(analysis)::Token* token) = 0; + + + /** + * Called when the highlighter has no more tokens for the current fragment - the scorer returns + * the weighting it has derived for the most recent fragment, typically based on the tokens + * passed to getTokenScore(). + * + */ + virtual float_t getFragmentScore() = 0; +}; + +CL_NS_END2 +#endif + + diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/Highlighter.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/Highlighter.cpp new file mode 100644 index 0000000..f8571a5 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/Highlighter.cpp @@ -0,0 +1,527 @@ +/** + * Copyright 2002-2004 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/_ApiHeader.h" +#include "Highlighter.h" +#include "TokenGroup.h" +#include "Encoder.h" +#include "Scorer.h" +#include "Formatter.h" +#include "HighlightScorer.h" +#include "Fragmenter.h" +#include "TextFragment.h" +#include "SimpleFragmenter.h" +#include "SimpleHTMLFormatter.h" +#include "CLucene/analysis/AnalysisHeader.h" +#include "CLucene/util/PriorityQueue.h" +#include "CLucene/util/StringBuffer.h" +#include "CLucene/util/CLStreams.h" + +CL_NS_DEF2(search,highlight) +CL_NS_USE(analysis) +CL_NS_USE(util) + + class FragmentQueue : public CL_NS(util)::PriorityQueue > + { + public: + FragmentQueue(int32_t size) + { + initialize(size, true); + } + + protected: + bool lessThan(TextFragment * fragA, TextFragment * fragB) + { + if (fragA->getScore() == fragB->getScore()) + return fragA->getFragNum() > fragB->getFragNum(); + else + return fragA->getScore() < fragB->getScore(); + } + }; + + + Highlighter::Highlighter(HighlightScorer * fragmentScorer): + delete_textFragmenter(true), + delete_fragmentScorer(false), + delete_formatter(true), + delete_encoder(true) + { + maxDocBytesToAnalyze = DEFAULT_MAX_DOC_BYTES_TO_ANALYZE; + + _textFragmenter = _CLNEW SimpleFragmenter(); + _fragmentScorer = fragmentScorer; + _formatter = _CLNEW SimpleHTMLFormatter(); + _encoder = _CLNEW DefaultEncoder(); + } + + Highlighter::Highlighter(Formatter * formatter, HighlightScorer * fragmentScorer): + delete_textFragmenter(true), + delete_fragmentScorer(false), + delete_formatter(false), + delete_encoder(true) + { + maxDocBytesToAnalyze = DEFAULT_MAX_DOC_BYTES_TO_ANALYZE; + + _textFragmenter = _CLNEW SimpleFragmenter(); + _fragmentScorer = fragmentScorer; + _formatter = formatter; + _encoder = _CLNEW DefaultEncoder(); + } + + Highlighter::Highlighter(Formatter * formatter, Encoder* encoder, HighlightScorer * fragmentScorer): + delete_textFragmenter(true), + delete_fragmentScorer(false), + delete_formatter(false), + delete_encoder(false) + { + maxDocBytesToAnalyze = DEFAULT_MAX_DOC_BYTES_TO_ANALYZE; + _textFragmenter = _CLNEW SimpleFragmenter(); + _fragmentScorer = fragmentScorer; + _formatter = formatter; + _encoder = encoder; + } + + Highlighter::~Highlighter() + { + if ( delete_textFragmenter ) + _CLDELETE ( _textFragmenter ); + + if ( delete_fragmentScorer ) + _CLDELETE(_fragmentScorer); + + if( delete_formatter ) + _CLDELETE(_formatter); + + if ( delete_encoder ) + _CLDELETE(_encoder); + } + + TCHAR* Highlighter::getBestFragment(TokenStream * tokenStream, const TCHAR* text) + { + TCHAR** results = getBestFragments(tokenStream,text, 1); + TCHAR* result = 0; + + if (results[0] != NULL ) + result = stringDuplicate(results[0]); + + _CLDELETE_CARRAY_ALL(results); + + return result; + } + + /** + * Highlights chosen terms in a text, extracting the most relevant section. + * This is a convenience method that calls + * {@link #getBestFragment(TokenStream, const TCHAR*)} + * + * @param analyzer the analyzer that will be used to split text + * into chunks + * @param text text to highlight terms in + * @param fieldName Name of field used to influence analyzer's tokenization policy + * + * @return highlighted text fragment or NULL if no terms found + */ + TCHAR* Highlighter::getBestFragment(Analyzer* analyzer, const TCHAR* fieldName, const TCHAR* text) + { + TokenStream* tokenStream = analyzer->tokenStream(fieldName, _CLNEW StringReader(text)); + return getBestFragment(tokenStream, text); + } + + TCHAR** Highlighter::getBestFragments( + TokenStream * tokenStream, + const TCHAR* text, + int32_t maxNumFragments) + { + maxNumFragments = cl_max((int32_t)1, maxNumFragments); //sanity check + + StringBuffer buffer; + TextFragment** frags = getBestTextFragments(&buffer,tokenStream,text, true,maxNumFragments); + + //Get text + std::vector fragTexts; + for (uint32_t i=0; frags[i]!=NULL; i++) + { + TextFragment* f = frags[i]; + if ((f != NULL) && (f->getScore() > 0)) + { + fragTexts.push_back(f->toString(&buffer)); + } + _CLDELETE(f); + } + + _CLDELETE_ARRAY(frags); + + size_t l = fragTexts.size(); + TCHAR** ret = _CL_NEWARRAY(TCHAR*,l+1); + for ( size_t j=0;j 0) + { + result.append(separator); + } + result.append(sections[i]); + } + + _CLDELETE_CARRAY_ALL(sections); + return result.toString(); + } + + TextFragment** Highlighter::getBestTextFragments( + StringBuffer* writeTo, + TokenStream * tokenStream, + const TCHAR* text, + bool mergeContiguousFragments, + int32_t maxNumFragments) + { + CLArrayList docFrags(false); + TextFragment* currentFrag = _CLNEW TextFragment(writeTo->length(), docFrags.size()); + _fragmentScorer->startFragment(currentFrag); + docFrags.push_back(currentFrag); + + FragmentQueue fragQueue(maxNumFragments); + + try + { + int32_t startOffset; + int32_t endOffset; + int32_t lastEndOffset = 0; + int len; + _textFragmenter->start(text); + TCHAR substringBuffer[LUCENE_MAX_WORD_LEN+1]; + + TokenGroup* tokenGroup=_CLNEW TokenGroup(); + + TCHAR buffer[LUCENE_MAX_FIELD_LEN+1]; + Token token; + while ( tokenStream->next(&token) ) + { + if((tokenGroup->getNumTokens()>0)&&(tokenGroup->isDistinct(&token))){ + //the current token is distinct from previous tokens - + // markup the cached token group info + startOffset = tokenGroup->getStartOffset(); + endOffset = tokenGroup->getEndOffset(); + + len = cl_min(endOffset-startOffset,LUCENE_MAX_WORD_LEN); + _tcsncpy(substringBuffer,text+startOffset,len); + substringBuffer[len]=_T('\0'); + + TCHAR* encoded = _encoder->encodeText(substringBuffer); + TCHAR* markedUpText=_formatter->highlightTerm(encoded, tokenGroup); + _CLDELETE_CARRAY(encoded); + + //store any whitespace etc from between this and last group + if (startOffset > lastEndOffset){ + len = cl_min(startOffset-lastEndOffset,LUCENE_MAX_FIELD_LEN); + _tcsncpy(buffer,text+lastEndOffset,len); + buffer[len]=_T('\0'); + + TCHAR* encoded = _encoder->encodeText(buffer); + writeTo->append(encoded); + _CLDELETE_CARRAY(encoded); + } + writeTo->append(markedUpText); + lastEndOffset=endOffset; + tokenGroup->clear(); + _CLDELETE_CARRAY(markedUpText); + + //check if current token marks the start of a new fragment + if (_textFragmenter->isNewFragment(&token)) + { + currentFrag->setScore(_fragmentScorer->getFragmentScore()); + //record stats for a new fragment + currentFrag->setTextEndPos( writeTo->length() ); + currentFrag =_CLNEW TextFragment(writeTo->length(), docFrags.size()); + _fragmentScorer->startFragment(currentFrag); + docFrags.push_back(currentFrag); + } + } + + // does query contain current token? + float_t score=_fragmentScorer->getTokenScore(&token); + //TCHAR* highlightedTerm = _formatter->highlightTerm(&substringBuffer, token->termText(), score, startOffset); + //newText->append(highlightedTerm); + //_CLDELETE_CARRAY(highlightedTerm); + //_CLDELETE(token); + + tokenGroup->addToken(&token,_fragmentScorer->getTokenScore(&token)); + + if(lastEndOffset>maxDocBytesToAnalyze) + { + break; + } + } + currentFrag->setScore(_fragmentScorer->getFragmentScore()); + + if(tokenGroup->getNumTokens()>0) + { + //flush the accumulated text (same code as in above loop) + startOffset = tokenGroup->getStartOffset(); + endOffset = tokenGroup->getEndOffset(); + + len = cl_min(endOffset-startOffset,LUCENE_MAX_WORD_LEN); + _tcsncpy(substringBuffer,text+startOffset,len); + substringBuffer[len]=_T('\0'); + + TCHAR* encoded = _encoder->encodeText(substringBuffer); + TCHAR* markedUpText=_formatter->highlightTerm(encoded, tokenGroup); + _CLDELETE_CARRAY(encoded); + + //store any whitespace etc from between this and last group + if (startOffset > lastEndOffset){ + int len = startOffset-lastEndOffset; + if ( len > LUCENE_MAX_FIELD_LEN ) + len = LUCENE_MAX_FIELD_LEN; + _tcsncpy(buffer,text+lastEndOffset,len); + buffer[len]=_T('\0'); + + TCHAR* encoded = _encoder->encodeText(buffer); + writeTo->append(encoded); + _CLDELETE_CARRAY(encoded); + } + writeTo->append(markedUpText); + lastEndOffset=endOffset; + + _CLDELETE_CARRAY(markedUpText); + } + + // append text after end of last token + //if (lastEndOffset < (int32_t)_tcslen(text)) + //newText->append(text+lastEndOffset); + + currentFrag->setTextEndPos(writeTo->length()); + + //sort the most relevant sections of the text + while (docFrags.size() > 0) { + //for (TextFragmentList::iterator i = docFrags.begin(); i != docFrags.end(); i++) + //{ + currentFrag = (TextFragment*) docFrags[0]; + docFrags.remove(0); + + //If you are running with a version of Lucene before 11th Sept 03 + // you do not have PriorityQueue.insert() - so uncomment the code below + + /*if (currentFrag->getScore() >= minScore) + { + fragQueue.put(currentFrag); + if (fragQueue.size() > maxNumFragments) + { // if hit queue overfull + _CLLDELETE(fragQueue.pop()); // remove lowest in hit queue + minScore = ((TextFragment *) fragQueue.top())->getScore(); // reset minScore + } + + + } else { + _CLDELETE(currentFrag); + }*/ + + //The above code caused a problem as a result of Christoph Goller's 11th Sept 03 + //fix to PriorityQueue. The correct method to use here is the new "insert" method + // USE ABOVE CODE IF THIS DOES NOT COMPILE! + if ( !fragQueue.insert(currentFrag) ) + _CLDELETE(currentFrag); + + //todo: check this + } + + //return the most relevant fragments + int32_t fragsLen = fragQueue.size(); + TextFragment** frags = _CL_NEWARRAY(TextFragment*,fragsLen+1); + for ( int32_t i=0;i fragTexts; + for (int32_t i = 0; i < fragsLen; i++) + { + TextFragment* tf = frags[i]; + if ((tf != NULL) && (tf->getScore() > 0)) + fragTexts.push_back(tf); + else + _CLDELETE(tf); + } + _CLDELETE_ARRAY(frags); + frags = _CL_NEWARRAY(TextFragment*,fragTexts.size()+1); + fragTexts.toArray_nullTerminated(frags); + } + + _CLDELETE(tokenGroup); + //_CLDELETE(newText); + return frags; + + } + _CLFINALLY( + if (tokenStream) + { + try + { + tokenStream->close(); + } + catch (...) + { + } + } + ) + return NULL; + } + + + void Highlighter::_mergeContiguousFragments(TextFragment** frag, int32_t fragsLen) + { + bool mergingStillBeingDone; + if ( frag[0] != NULL ) + do + { + mergingStillBeingDone = false; //initialise loop control flag + //for each fragment, scan other frags looking for contiguous blocks + for (int32_t i=0; ifollows(frag[x])) + { + frag1 = frag[x]; + frag1Num = x; + frag2 = frag[i]; + frag2Num = i; + } + else if (frag[x]->follows(frag[i])) + { + frag1 = frag[i]; + frag1Num = i; + frag2 = frag[x]; + frag2Num = x; + } + //merging required.. + if (frag1 != NULL) + { + if (frag1->getScore() > frag2->getScore()) + { + bestScoringFragNum = frag1Num; + worstScoringFragNum = frag2Num; + } + else + { + bestScoringFragNum = frag2Num; + worstScoringFragNum = frag1Num; + } + frag1->merge(frag2); + frag[worstScoringFragNum]= NULL; + mergingStillBeingDone = true; + frag[bestScoringFragNum]=frag1; + _CLDELETE(frag2); + } + } + } + } + while (mergingStillBeingDone); + } + + int32_t Highlighter::getMaxDocBytesToAnalyze() + { + return maxDocBytesToAnalyze; + } + + void Highlighter::setMaxDocBytesToAnalyze(int32_t byteCount) + { + maxDocBytesToAnalyze = byteCount; + } + + Fragmenter * Highlighter::getTextFragmenter() + { + return _textFragmenter; + } + + void Highlighter::setTextFragmenter(Fragmenter * fragmenter) + { + if ( delete_textFragmenter ){ + _CLDELETE(_textFragmenter); + delete_textFragmenter = false; + } + _textFragmenter = fragmenter; + } + + HighlightScorer * Highlighter::getFragmentScorer() + { + return _fragmentScorer; + } + + + void Highlighter::setFragmentScorer(HighlightScorer * scorer) + { + if ( delete_fragmentScorer ){ + delete_fragmentScorer = false; + _CLDELETE(scorer); + } + _fragmentScorer = scorer; + } + + + Encoder* Highlighter::getEncoder() + { + return _encoder; + } + void Highlighter::setEncoder(Encoder* encoder) + { + if ( delete_encoder ){ + _CLDELETE(encoder); + delete_encoder = false; + } + this->_encoder = encoder; + } + + + +CL_NS_END2 diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/Highlighter.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/Highlighter.h new file mode 100644 index 0000000..99f3f8e --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/Highlighter.h @@ -0,0 +1,226 @@ +/** + * Copyright 2002-2004 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 _lucene_search_highlight_highlighter_ +#define _lucene_search_highlight_highlighter_ + + + +CL_CLASS_DEF(util, StringBuffer) +//#include "CLucene/util/VoidList.h" +CL_CLASS_DEF2(search,highlight,Formatter) +CL_CLASS_DEF2(search,highlight,Encoder) +CL_CLASS_DEF2(search,highlight,HighlightScorer) +CL_CLASS_DEF2(search,highlight,Fragmenter) +CL_CLASS_DEF2(search,highlight,TextFragment) +CL_CLASS_DEF(analysis, TokenStream) +CL_CLASS_DEF(analysis, Analyzer) + +//#include "HighlightScorer.h" +//#include "SimpleFragmenter.h" +//#include "TextFragment.h" + +CL_NS_DEF2(search,highlight) + +/** +* Class used to markup highlighted terms found in the best sections of a +* text, using configurable {@link Fragmenter}, {@link Scorer}, {@link Formatter}, +* and tokenizers. +* {@link Encoder} and tokenizers. +*/ +class CLUCENE_CONTRIBS_EXPORT Highlighter :LUCENE_BASE +{ +private: + int32_t maxDocBytesToAnalyze; + + Formatter * _formatter; + bool delete_formatter; + + Encoder* _encoder; + bool delete_encoder; + + Fragmenter * _textFragmenter; + bool delete_textFragmenter; + + HighlightScorer * _fragmentScorer; + bool delete_fragmentScorer; + + /** Improves readability of a score-sorted list of TextFragments by merging any fragments + * that were contiguous in the original text into one larger fragment with the correct order. + * This will leave a "null" in the array entry for the lesser scored fragment. + * + * @param frag An array of document fragments in descending score + */ + void _mergeContiguousFragments(TextFragment** frag, int32_t fragsLen); + +public: + LUCENE_STATIC_CONSTANT(int32_t, DEFAULT_MAX_DOC_BYTES_TO_ANALYZE=50*1024); + + /** + * Constructs a Highlighter object with the provided scorer. The HighlightScorer object is owned + * by the Highlighter object, and it will freed in the destructor. + */ + Highlighter(HighlightScorer * fragmentScorer); + + Highlighter(Formatter * formatter, HighlightScorer * fragmentScorer); + + Highlighter(Formatter * formatter, Encoder* encoder, HighlightScorer * fragmentScorer); + + + /** + * Destructor for Highlighter. It deletes the owned HighlightScorer, formatter and textFragmenter. + */ + ~Highlighter(); + + /** + * Highlights chosen terms in a text, extracting the most relevant section. + * The document text is analysed in chunks to record hit statistics + * across the document. After accumulating stats, the fragment with the highest score + * is returned + * + * @param tokenStream a stream of tokens identified in the text parameter, including offset information. + * This is typically produced by an analyzer re-parsing a document's + * text. Some work may be done on retrieving TokenStreams more efficently + * by adding support for storing original text position data in the Lucene + * index but this support is not currently available (as of Lucene 1.4 rc2). + * @param text text to highlight terms in + * + * @return highlighted text fragment or null if no terms found + */ + TCHAR* getBestFragment(CL_NS(analysis)::TokenStream * tokenStream, const TCHAR* text); + + /** + * Highlights chosen terms in a text, extracting the most relevant section. + * This is a convenience method that calls + * {@link #getBestFragment(TokenStream, const TCHAR*)} + * + * @param analyzer the analyzer that will be used to split text + * into chunks + * @param text text to highlight terms in + * @param fieldName Name of field used to influence analyzer's tokenization policy + * + * @return highlighted text fragment or null if no terms found + */ + TCHAR* getBestFragment(CL_NS(analysis)::Analyzer* analyzer, const TCHAR* fieldName, const TCHAR* text); + + /** + * Highlights chosen terms in a text, extracting the most relevant sections. + * This is a convenience method that calls + * {@link #getBestFragments(TokenStream, const TCHAR*, int)} + * + * @param analyzer the analyzer that will be used to split text + * into chunks + * @param text text to highlight terms in + * @param maxNumFragments the maximum number of fragments. + * + * @return highlighted text fragments (between 0 and maxNumFragments number of fragments) + */ + TCHAR** getBestFragments( + CL_NS(analysis)::Analyzer* analyzer, + const TCHAR* text, + int32_t maxNumFragments); + + /** + * Highlights chosen terms in a text, extracting the most relevant sections. + * The document text is analysed in chunks to record hit statistics + * across the document. After accumulating stats, the fragments with the highest scores + * are returned as an array of strings in order of score (contiguous fragments are merged into + * one in their original order to improve readability) + * + * @param text text to highlight terms in + * @param maxNumFragments the maximum number of fragments. + * + * @return highlighted text fragments (between 0 and maxNumFragments number of fragments) + */ + TCHAR** getBestFragments( + CL_NS(analysis)::TokenStream * tokenStream, + const TCHAR* text, + int32_t maxNumFragments); + + /** + * Low level api to get the most relevant (formatted) sections of the document. + * This method has been made public to allow visibility of score information held in TextFragment objects. + * Thanks to Jason Calabrese for help in redefining the interface. + * @param tokenStream + * @param text + * @param maxNumFragments + * @param mergeContiguousFragments + */ + TextFragment** getBestTextFragments( + CL_NS(util)::StringBuffer* writeTo, + CL_NS(analysis)::TokenStream * tokenStream, + const TCHAR* text, + bool mergeContiguousFragments, + int32_t maxNumFragments); + + /** + * Highlights terms in the text , extracting the most relevant sections + * and concatenating the chosen fragments with a separator (typically "..."). + * The document text is analysed in chunks to record hit statistics + * across the document. After accumulating stats, the fragments with the highest scores + * are returned in order as "separator" delimited strings. + * + * @param text text to highlight terms in + * @param maxNumFragments the maximum number of fragments. + * @param separator the separator used to intersperse the document fragments (typically "...") + * + * @return highlighted text + */ + TCHAR* getBestFragments( + CL_NS(analysis)::TokenStream * tokenStream, + const TCHAR* text, + int32_t maxNumFragments, + const TCHAR* separator); + + /** + * @return the maximum number of bytes to be tokenized per doc + */ + int32_t getMaxDocBytesToAnalyze(); + + /** + * @param byteCount the maximum number of bytes to be tokenized per doc + * (This can improve performance with large documents) + */ + void setMaxDocBytesToAnalyze(int32_t byteCount); + + /** + */ + Fragmenter * getTextFragmenter(); + + /** + * @param fragmenter + */ + void setTextFragmenter(Fragmenter * fragmenter); + + /** + * @return Object used to score each text fragment + */ + HighlightScorer * getFragmentScorer(); + + /** + * @param HighlightScorer + */ + void setFragmentScorer(HighlightScorer * scorer); + + Encoder* getEncoder(); + void setEncoder(Encoder* encoder); +}; + + +CL_NS_END2 + +#endif + diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/QueryScorer.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/QueryScorer.cpp new file mode 100644 index 0000000..3ae1722 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/QueryScorer.cpp @@ -0,0 +1,118 @@ +/** + * Copyright 2002-2004 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/_ApiHeader.h" +#include "QueryScorer.h" +#include "WeightedTerm.h" +#include "QueryTermExtractor.h" +#include "CLucene/analysis/AnalysisHeader.h" + +CL_NS_DEF2(search,highlight) +CL_NS_USE(index) +CL_NS_USE(analysis) + + QueryScorer::QueryScorer(const Query * query): + _termsToFind(false,true), + _uniqueTermsInFragment(true) + { + WeightedTerm** _weighted_terms = QueryTermExtractor::getTerms(query); + initialize(_weighted_terms); + _CLDELETE_ARRAY(_weighted_terms); + } + QueryScorer::~QueryScorer() + { + } + +/* QueryScorer(Query* query, CL_NS(index)::IndexReader* reader, const TCHAR* fieldName) + { + WeightedTerm** _weighted_terms = QueryTermExtractor.getIdfWeightedTerms(query, reader, fieldName); + initialize(_weighted_terms); + }*/ + + + QueryScorer::QueryScorer(WeightedTerm** weightedTerms) + { + initialize(weightedTerms); + } + + void QueryScorer::initialize(WeightedTerm** weightedTerms) + { + _currentTextFragment = NULL; + _totalScore = 0; + _maxTermWeight = 0; + + // Copy external weighted terms + int i=0; + while ( weightedTerms[i] != NULL ){ + const WeightedTerm* existingTerm=_termsToFind.get(weightedTerms[i]->getTerm()); + if( (existingTerm==NULL) ||(existingTerm->getWeight()getWeight()) ) + { + //if a term is defined more than once, always use the highest scoring weight + WeightedTerm* term = weightedTerms[i]; + _termsToFind.put(term->getTerm(), term); + + _maxTermWeight=cl_max(_maxTermWeight,weightedTerms[i]->getWeight()); + }else + _CLDELETE(weightedTerms[i]); + + i++; + } + } + + void QueryScorer::startFragment(TextFragment * newFragment) + { + _uniqueTermsInFragment.clear(); + _currentTextFragment=newFragment; + _totalScore=0; + + } + + float_t QueryScorer::getTokenScore(Token * token) + { + const TCHAR* termText=token->termBuffer(); + + const WeightedTerm* queryTerm = _termsToFind.get(termText); + if(queryTerm==NULL) + { + //not a query term - return + return 0; + } + //found a query term - is it unique in this doc? + if(_uniqueTermsInFragment.find((TCHAR*)termText)==_uniqueTermsInFragment.end()) + { + _totalScore+=queryTerm->getWeight(); + TCHAR* owned_term = stringDuplicate(termText); + _uniqueTermsInFragment.insert(owned_term); + } + return queryTerm->getWeight(); + } + + /** + * + * @return The highest weighted term (useful for passing to GradientFormatter to set + * top end of coloring scale. + */ + float_t QueryScorer::getMaxTermWeight() + { + return _maxTermWeight; + } + + + float_t QueryScorer::getFragmentScore(){ + return _totalScore; + } + +CL_NS_END2 diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/QueryScorer.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/QueryScorer.h new file mode 100644 index 0000000..c89a6cf --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/QueryScorer.h @@ -0,0 +1,114 @@ +/** + * Copyright 2002-2004 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 _lucene_search_highlight_queryscorer_ +#define _lucene_search_highlight_queryscorer_ + + +CL_CLASS_DEF(index, IndexReader) +CL_CLASS_DEF(search, Query) + +//#include "CLucene/search/SearchHeader.h" +//#include "TextFragment.h" + +#include "HighlightScorer.h" + +CL_NS_DEF2(search,highlight) + +class WeightedTerm; +class QueryTermExtractor; +class TextFragment; + +/** + * {@link Scorer} implementation which scores text fragments by the number of unique query terms found. + * This class uses the {@link QueryTermExtractor} class to process determine the query terms and + * their boosts to be used. + */ +//TODO: provide option to boost score of fragments near beginning of document +// based on fragment.getFragNum() +class CLUCENE_CONTRIBS_EXPORT QueryScorer : public HighlightScorer +{ +private: + TextFragment * _currentTextFragment; + CL_NS(util)::CLHashSet _uniqueTermsInFragment; + float_t _totalScore; + float_t _maxTermWeight; + CL_NS(util)::CLHashMap > _termsToFind; + +public: + /** + * + * @param query a Lucene query (ideally rewritten using query.rewrite + * before being passed to this class and the searcher) + */ + QueryScorer(const Query * query); + + /** + * + * @param query a Lucene query (ideally rewritten using query.rewrite + * before being passed to this class and the searcher) + * @param reader used to compute IDF which can be used to a) score selected fragments better + * b) use graded highlights eg set font color intensity + * @param fieldName the field on which Inverse Document Frequency (IDF) calculations are based + */ + QueryScorer(const Query* query, CL_NS(index)::IndexReader* reader, const TCHAR* fieldName); + + QueryScorer(WeightedTerm** weightedTerms); + + ~QueryScorer(); + + /* (non-Javadoc) + * @see org.apache.lucene.search.highlight.FragmentScorer#startFragment(org.apache.lucene.search.highlight.TextFragment) + */ + void startFragment(TextFragment* newFragment); + + /* (non-Javadoc) + * @see org.apache.lucene.search.highlight.FragmentScorer#scoreToken(org.apache.lucene.analysis.Token) + */ + float_t getTokenScore(CL_NS(analysis)::Token * token); + + /* (non-Javadoc) + * @see org.apache.lucene.search.highlight.FragmentScorer#endFragment(org.apache.lucene.search.highlight.TextFragment) + */ + float_t getFragmentScore(); + + /* (non-Javadoc) + * @see org.apache.lucene.search.highlight.FragmentScorer#allFragmentsProcessed() + */ + void allFragmentsProcessed(); + + /** + * + * @return The highest weighted term (useful for passing to GradientFormatter to set + * top end of coloring scale. + */ + float_t getMaxTermWeight(); + +private: + void initialize(WeightedTerm** weightedTerms); + +}; + +CL_NS_END2 + +#endif + diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/QueryTermExtractor.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/QueryTermExtractor.cpp new file mode 100644 index 0000000..8c0f3f2 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/QueryTermExtractor.cpp @@ -0,0 +1,136 @@ +/** + * Copyright 2002-2004 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/_ApiHeader.h" +#include "QueryTermExtractor.h" + +#include "CLucene/search/Query.h" +#include "CLucene/search/BooleanQuery.h" +#include "CLucene/search/TermQuery.h" +#include "CLucene/search/PhraseQuery.h" +#include "CLucene/index/IndexReader.h" +#include "CLucene/index/Term.h" + +CL_NS_DEF2(search,highlight) +CL_NS_USE(index) + + WeightedTerm** QueryTermExtractor::getTerms(const Query * query, bool prohibited, const TCHAR* fieldName) + { + WeightedTermList terms(false); + getTerms(query,&terms,prohibited,fieldName); + + // Return extracted terms + WeightedTerm** ret = _CL_NEWARRAY(WeightedTerm*,terms.size()+1); + terms.toArray_nullTerminated(ret); + + return ret; + } + + void QueryTermExtractor::getTerms(const Query * query, WeightedTermList * terms, bool prohibited, const TCHAR* fieldName) + { + if (query->instanceOf( BooleanQuery::getClassName() )) + { + getTermsFromBooleanQuery((BooleanQuery *) query, terms, prohibited, fieldName); + } +// FilteredQuery not implemented yet +// else if (query->instanceOf( FilteredQuery::getClassName() )) +// getTermsFromFilteredQuery((FilteredQuery *) query, terms); + else + { + TermSet nonWeightedTerms; + query->extractTerms(&nonWeightedTerms); + for (TermSet::iterator iter = nonWeightedTerms.begin(); iter != nonWeightedTerms.end(); iter++) + { + Term * term = (Term *)(*iter); + if ( fieldName == NULL || term->field() == fieldName ) + { + // adapted from mailing list 2014-05-03 ([CLucene-dev] FW: Memory leak in QueryTermExtractor::getTerms) + // optimistic insert, assume most of the case element is not in so prevent searching first + WeightedTerm* pWeigthedTerm = _CLNEW WeightedTerm(query->getBoost(), term->text()); + if ( !terms->insert(pWeigthedTerm).second ) + _CLDELETE(pWeigthedTerm); + } + _CLLDECDELETE( term ); + } + } + } + + /** + * Extracts all terms texts of a given Query into an array of WeightedTerms + * + * @param query Query to extract term texts from + * @param reader used to compute IDF which can be used to a) score selected fragments better + * b) use graded highlights eg chaning intensity of font color + * @param fieldName the field on which Inverse Document Frequency (IDF) calculations are based + * @return an array of the terms used in a query, plus their weights. + */ + WeightedTerm** QueryTermExtractor::getIdfWeightedTerms(const Query* query, IndexReader* reader, const TCHAR* fieldName) + { + WeightedTermList terms(true); + getTerms(query,&terms,false,fieldName); + + int32_t totalNumDocs=reader->numDocs(); + + WeightedTermList::iterator itr = terms.begin(); + while ( itr != terms.end() ) + { + try + { + Term* term = _CLNEW Term(fieldName,(*itr)->getTerm()); + int32_t docFreq=reader->docFreq(term); + _CLDECDELETE(term); + + //IDF algorithm taken from DefaultSimilarity class + float_t idf=(float_t)(log(totalNumDocs/(float_t)(docFreq+1)) + 1.0); + (*itr)->setWeight((*itr)->getWeight() * idf); + }catch (CLuceneError& e){ + if ( e.number()!=CL_ERR_IO ) + throw e; + } + + itr++; + } + + // Return extracted terms + WeightedTerm** ret = _CL_NEWARRAY(WeightedTerm*,terms.size()+1); + terms.toArray_nullTerminated(ret); + + return ret; + } + + void QueryTermExtractor::getTermsFromBooleanQuery(const BooleanQuery * query, WeightedTermList * terms, bool prohibited, const TCHAR* fieldName) + { + uint32_t numClauses = query->getClauseCount(); + BooleanClause** queryClauses = _CL_NEWARRAY(BooleanClause*,numClauses); + query->getClauses(queryClauses); + + for (uint32_t i = 0; i < numClauses; i++) + { + if (prohibited || !queryClauses[i]->prohibited){ + Query* qry = queryClauses[i]->getQuery(); + getTerms(qry, terms, prohibited, fieldName); + } + } + _CLDELETE_ARRAY(queryClauses); + } + +// FilteredQuery not implemented yet +// void QueryTermExtractor::getTermsFromFilteredQuery(const FilteredQuery * query, WeightedTermList * terms, bool prohibited) +// { +// getTerms(query->getQuery(), terms, prohibited); +// } + +CL_NS_END2 diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/QueryTermExtractor.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/QueryTermExtractor.h new file mode 100644 index 0000000..b66b720 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/QueryTermExtractor.h @@ -0,0 +1,82 @@ +/** + * Copyright 2002-2004 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 _lucene_search_highlight_querytermextractor_ +#define _lucene_search_highlight_querytermextractor_ + +CL_CLASS_DEF(search, Query) +CL_CLASS_DEF(search, BooleanQuery) +CL_CLASS_DEF(search, PhraseQuery) +CL_CLASS_DEF(search, TermQuery) +CL_CLASS_DEF(index, IndexReader) +CL_CLASS_DEF(index, Term) + +#include "WeightedTerm.h" + +CL_NS_DEF2(search,highlight) + +/** + * Utility class used to extract the terms used in a query, plus any weights. + * This class will not find terms for MultiTermQuery, RangeQuery and PrefixQuery classes + * so the caller must pass a rewritten query (see Query.rewrite) to obtain a list of + * expanded terms. + * + */ +class CLUCENE_CONTRIBS_EXPORT QueryTermExtractor +{ + QueryTermExtractor(){ + } +public: + + /** + * Extracts all terms texts of a given Query into an returned array of WeightedTerms + * + * @param query Query to extract term texts from + * @param prohibited true to extract "prohibited" terms, too + * @param fieldName field name used for filtering query terms, MUST be interned prior to this call + * @return an array of the terms used in a query, plus their weights.Memory owned by the caller + */ + static WeightedTerm** getTerms(const Query *query, bool prohibited = false, const TCHAR* fieldName = NULL); + + /** + * Extracts all terms texts of a given Query into an array of WeightedTerms + * + * @param query Query to extract term texts from + * @param reader used to compute IDF which can be used to a) score selected fragments better + * b) use graded highlights eg chaning intensity of font color + * @param fieldName the field on which Inverse Document Frequency (IDF) calculations are based + * @return an array of the terms used in a query, plus their weights. + */ + static WeightedTerm** getIdfWeightedTerms(const Query* query, CL_NS(index)::IndexReader* reader, const TCHAR* fieldName); + + /** + * Extracts all terms texts of a given Query into given array of WeightedTerms + * + * @param query Query to extract term texts from + * @param prohibited true to extract "prohibited" terms, too + * @param fieldName field name used for filtering query terms, MUST be interned prior to this call + * @return an array of the terms used in a query, plus their weights.Memory owned by the caller + */ + static void getTerms(const Query * query, WeightedTermList*, bool prohibited = false, const TCHAR* fieldName = NULL); + + static void getTermsFromBooleanQuery(const BooleanQuery * query, WeightedTermList* terms, bool prohibited, const TCHAR* fieldName); +// static void getTermsFromFilteredQuery(const FilteredQuery * query, WeightedTermList* terms); +}; + +CL_NS_END2 + + + +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/Scorer.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/Scorer.h new file mode 100644 index 0000000..7d558ca --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/Scorer.h @@ -0,0 +1,61 @@ +#ifndef _lucene_search_highlight_scorer_h_ +#define _lucene_search_highlight_scorer_h_ + +/** + * Copyright 2002-2004 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 + +CL_NS_USE(analysis) + +/** + * Adds to the score for a fragment based on its tokens + */ +namespace lucene { namespace search { namespace highlight { + + class TextFragment; + +class CLUCENE_CONTRIBS_EXPORT Scorer +{ +public: + virtual ~Scorer(){}; + /** + * called when a new fragment is started for consideration + * @param newFragment + */ + virtual void startFragment(TextFragment * newFragment) = 0; + + /** + * Called for each token in the current fragment + * @param token The token to be scored + * @return a score which is passed to the TermHighlighter class to influence the mark-up of the text + * (this return value is NOT used to score the fragment) + */ + virtual float_t getTokenScore(Token * token) = 0; + + + /** + * Called when the highlighter has no more tokens for the current fragment - the scorer will typically + * call setScore() on the fragment passed in startFragment to record total info + * + */ + virtual float_t getFragmentScore() = 0; + +}; + +}}} + +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/SimpleFragmenter.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/SimpleFragmenter.cpp new file mode 100644 index 0000000..e366eba --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/SimpleFragmenter.cpp @@ -0,0 +1,55 @@ +/** + * Copyright 2002-2004 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/_ApiHeader.h" +#include "SimpleFragmenter.h" +#include "CLucene/analysis/AnalysisHeader.h" + +CL_NS_DEF2(search,highlight) +CL_NS_USE(analysis) + +SimpleFragmenter::SimpleFragmenter(int32_t fragmentSize) + : _fragmentSize(fragmentSize), _currentNumFrags(0) +{ +} +SimpleFragmenter::~SimpleFragmenter(){ +} + +void SimpleFragmenter::start(const TCHAR*) +{ + _currentNumFrags=1; +} + +bool SimpleFragmenter::isNewFragment(const Token * token) +{ + bool isNewFrag= token->endOffset()>=(_fragmentSize*_currentNumFrags); + if (isNewFrag) { + _currentNumFrags++; + } + return isNewFrag; +} + +int32_t SimpleFragmenter::getFragmentSize() const +{ + return _fragmentSize; +} + +void SimpleFragmenter::setFragmentSize(int32_t size) +{ + _fragmentSize = size; +} + +CL_NS_END2 diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/SimpleFragmenter.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/SimpleFragmenter.h new file mode 100644 index 0000000..1d3170d --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/SimpleFragmenter.h @@ -0,0 +1,70 @@ +/** + * Copyright 2002-2004 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 _lucene_search_highlight_simplefragmenter_ +#define _lucene_search_highlight_simplefragmenter_ + + +#include "Fragmenter.h" + +CL_NS_DEF2(search,highlight) + +/** + * {@link Fragmenter} implementation which breaks text up into same-size + * fragments with no concerns over spotting sentence boundaries. + */ + +class CLUCENE_CONTRIBS_EXPORT SimpleFragmenter:public Fragmenter +{ +private: + LUCENE_STATIC_CONSTANT(int32_t, DEFAULT_FRAGMENT_SIZE =100 ); + int32_t _currentNumFrags; + int32_t _fragmentSize; + +public: + /** + * + * @param fragmentSize size in bytes of each fragment + */ + SimpleFragmenter(int32_t fragmentSize = DEFAULT_FRAGMENT_SIZE); + + ~SimpleFragmenter(); + + /* (non-Javadoc) + * @see org.apache.lucene.search.highlight.TextFragmenter#start(const TCHAR*) + */ + void start(const TCHAR* originalText); + + /* (non-Javadoc) + * @see org.apache.lucene.search.highlight.TextFragmenter#isNewFragment(org.apache.lucene.analysis.Token) + */ + bool isNewFragment(const CL_NS(analysis)::Token * token); + + /** + * @return size in bytes of each fragment + */ + int32_t getFragmentSize() const; + + /** + * @param size size in bytes of each fragment + */ + void setFragmentSize(int32_t size); + +}; + +CL_NS_END2 + +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/SimpleHTMLEncoder.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/SimpleHTMLEncoder.cpp new file mode 100644 index 0000000..cd684f4 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/SimpleHTMLEncoder.cpp @@ -0,0 +1,83 @@ +/** + * Copyright 2002-2004 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/_ApiHeader.h" +#include "SimpleHTMLEncoder.h" +#include "Formatter.h" +#include "CLucene/util/StringBuffer.h" + +CL_NS_DEF2(search,highlight) + +SimpleHTMLEncoder::SimpleHTMLEncoder(void) +{ +} + +SimpleHTMLEncoder::~SimpleHTMLEncoder(void) +{ +} + +TCHAR* SimpleHTMLEncoder::encodeText(TCHAR* originalText) +{ + return htmlEncode(originalText); +} + +TCHAR* SimpleHTMLEncoder::htmlEncode(TCHAR* plainText) +{ + size_t plainTextLen = _tcslen(plainText); + if (plainText == NULL || plainTextLen == 0) + { + return STRDUP_TtoT(_T("")); + } + + CL_NS(util)::StringBuffer result(plainTextLen); + + for (int32_t index=0; index': + result.append(_T(">")); + break; + + default: + if (ch < 128) + result.appendChar(ch); + else{ + result.append(_T("&#")); + result.appendInt(ch); + result.append(_T(";")); + } + } + } + + return result.toString(); +} + +CL_NS_END2 diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/SimpleHTMLEncoder.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/SimpleHTMLEncoder.h new file mode 100644 index 0000000..8a6080a --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/SimpleHTMLEncoder.h @@ -0,0 +1,45 @@ +/** + * Copyright 2002-2004 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 _lucene_search_highlight_simplehtmlencoder_ +#define _lucene_search_highlight_simplehtmlencoder_ + + +#include "Encoder.h" + +CL_NS_DEF2(search,highlight) + +/** + * Simple {@link Encoder} implementation to escape text for HTML output + * + */ +class CLUCENE_CONTRIBS_EXPORT SimpleHTMLEncoder:public Encoder +{ +public: + SimpleHTMLEncoder(void); + ~SimpleHTMLEncoder(void); + + TCHAR* encodeText(TCHAR* originalText); + + /** + * Encode string into HTML + */ + static TCHAR* htmlEncode(TCHAR* plainText) ; +}; + +CL_NS_END2 + +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/SimpleHTMLFormatter.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/SimpleHTMLFormatter.cpp new file mode 100644 index 0000000..8c7d089 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/SimpleHTMLFormatter.cpp @@ -0,0 +1,56 @@ +/** + * Copyright 2002-2004 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/_ApiHeader.h" +#include "SimpleHTMLFormatter.h" +#include "TokenGroup.h" +#include "CLucene/util/StringBuffer.h" + + +CL_NS_DEF2(search,highlight) +CL_NS_USE(util) + +SimpleHTMLFormatter::SimpleHTMLFormatter(const TCHAR* preTag, const TCHAR* postTag): + _preTag(stringDuplicate(preTag)), + _postTag(stringDuplicate(postTag)) +{ +} + +SimpleHTMLFormatter::SimpleHTMLFormatter() +{ + _preTag = stringDuplicate(_T("")); + _postTag = stringDuplicate(_T("")); +} + +SimpleHTMLFormatter::~SimpleHTMLFormatter() +{ + _CLDELETE_CARRAY(_preTag); + _CLDELETE_CARRAY(_postTag); +} + +TCHAR* SimpleHTMLFormatter::highlightTerm(const TCHAR* originalText, const TokenGroup* tokenGroup) +{ + if(tokenGroup->getTotalScore()>0){ + StringBuffer sb; + sb.append(_preTag); + sb.append(originalText); + sb.append(_postTag); + return sb.toString(); + } + return stringDuplicate(originalText); +} + +CL_NS_END2 diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/SimpleHTMLFormatter.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/SimpleHTMLFormatter.h new file mode 100644 index 0000000..69b110d --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/SimpleHTMLFormatter.h @@ -0,0 +1,59 @@ +/** + * Copyright 2002-2004 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 _lucene_search_highlight_simplehtmlformatter_ +#define _lucene_search_highlight_simplehtmlformatter_ + + +#include "Formatter.h" + +CL_NS_DEF2(search,highlight) + +/** + * Simple {@link Formatter} implementation to highlight terms with a pre and post tag + * + */ +class CLUCENE_CONTRIBS_EXPORT SimpleHTMLFormatter :public Formatter +{ +private: + TCHAR* _preTag; + TCHAR* _postTag; + +public: + ~SimpleHTMLFormatter(); + + + SimpleHTMLFormatter(const TCHAR* preTag, const TCHAR* postTag); + + /** + * Default constructor uses HTML: <B> tags to markup terms + * + **/ + SimpleHTMLFormatter(); + + + /** + * Returns the original text enclosed in _preTag and _postTag, if the score is greater + * than 0. Otherwise, it returns the original text. + * It doesn't use the stemmed text nor the startOffset. + * It allocates memory for the returned text, and it has to be freed by the caller. + */ + TCHAR* highlightTerm(const TCHAR* originalText, const TokenGroup* tokenGroup); +}; + +CL_NS_END2 + +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/TextFragment.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/TextFragment.cpp new file mode 100644 index 0000000..306ad22 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/TextFragment.cpp @@ -0,0 +1,78 @@ +/** + * Copyright 2002-2004 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/_ApiHeader.h" +#include "TextFragment.h" +#include "CLucene/util/StringBuffer.h" + +CL_NS_DEF2(search,highlight) +CL_NS_USE(util) + + TextFragment::TextFragment(int32_t textStartPos, int32_t fragNum) + { + _textStartPos = textStartPos; + _textEndPos=0; + _fragNum = fragNum; + } + TextFragment::~TextFragment(){ + } + + void TextFragment::setScore(float_t score) + { + _score=score; + } + + float_t TextFragment::getScore() const + { + return _score; + } + + /** + * @param frag2 Fragment to be merged into this one + */ + void TextFragment::merge(const TextFragment * frag2) + { + _textEndPos = frag2->_textEndPos; + _score=cl_max(_score,frag2->_score); + } + /** + * @param fragment + * @return true if this fragment follows the one passed + */ + bool TextFragment::follows(const TextFragment * fragment) const + { + return _textStartPos == fragment->_textEndPos; + } + + /** + * @return the fragment sequence number + */ + int32_t TextFragment::getFragNum() const + { + return _fragNum; + } + + /* Returns the marked-up text for this text fragment + */ + TCHAR* TextFragment::toString(StringBuffer* buffer) { + TCHAR* ret = _CL_NEWARRAY(TCHAR,_textEndPos-_textStartPos+1); + _tcsncpy(ret,buffer->getBuffer()+_textStartPos,_textEndPos-_textStartPos); + ret[_textEndPos-_textStartPos]=_T('\0'); + + return ret; + } + +CL_NS_END2 diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/TextFragment.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/TextFragment.h new file mode 100644 index 0000000..9af8634 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/TextFragment.h @@ -0,0 +1,87 @@ +/** + * Copyright 2002-2004 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 _lucene_search_highlight_textfragment_ +#define _lucene_search_highlight_textfragment_ + + +CL_CLASS_DEF(util, StringBuffer) +//#include "CLucene/util/VoidList.h" + +CL_NS_DEF2(search,highlight) + +/** + * Low-level class used to record information about a section of a document + * with a score. + */ +class CLUCENE_CONTRIBS_EXPORT TextFragment:LUCENE_BASE +{ + int32_t _fragNum; + int32_t _textStartPos; + int32_t _textEndPos; + float_t _score; + +public: + TextFragment(int32_t textStartPos, int32_t fragNum); + ~TextFragment(); + + void setScore(float_t score); + float_t getScore() const; + + int32_t textEndPos(){ return _textEndPos; } + void setTextEndPos(int32_t val){ _textEndPos = val; } + + /** + * @param frag2 Fragment to be merged into this one + */ + void merge(const TextFragment * frag2); + + /** + * @param fragment + * @return true if this fragment follows the one passed + */ + bool follows(const TextFragment * fragment) const; + + /** + * @return the fragment sequence number + */ + int32_t getFragNum() const; + + /* Returns the marked-up text for this text fragment + */ + TCHAR* toString(CL_NS(util)::StringBuffer* buffer); + + /** + * Compare weighted terms, according to the term text. + * @todo Do we have to take boost factors into account + */ + class Compare:LUCENE_BASE, public CL_NS(util)::Compare::_base // + { + public: + //todo: this should be more efficient, but will be using a hash table soon, anyway + bool operator()( TextFragment* t1, TextFragment* t2 ) const; + size_t operator()( TextFragment* t ) const; + }; +}; + +/** + * Text fragment list. + */ +//typedef CL_NS(util)::CLSetList > TextFragmentList; + +CL_NS_END2 + +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/TokenGroup.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/TokenGroup.cpp new file mode 100644 index 0000000..8fa1367 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/TokenGroup.cpp @@ -0,0 +1,123 @@ +/** + * Copyright 2002-2004 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/_ApiHeader.h" +#include "TokenGroup.h" +#include "CLucene/analysis/AnalysisHeader.h" + +CL_NS_DEF2(search,highlight) +CL_NS_USE(analysis) + +TokenGroup::TokenGroup(void) +{ + numTokens=0; + startOffset=0; + endOffset=0; + tokens = new Token[MAX_NUM_TOKENS_PER_GROUP]; +} + +TokenGroup::~TokenGroup(void) +{ + delete[] tokens; +} + +void TokenGroup::addToken(Token* token, float_t score) +{ + if(numTokens < MAX_NUM_TOKENS_PER_GROUP) + { + if(numTokens==0) + { + startOffset=token->startOffset(); + endOffset=token->endOffset(); + } + else + { + startOffset=cl_min(startOffset,token->startOffset()); + endOffset=cl_max(endOffset,token->endOffset()); + } + tokens[numTokens].set(token->termBuffer(),token->startOffset(),token->endOffset(),token->type());; + scores[numTokens]=score; + numTokens++; + } +} + +CL_NS(analysis)::Token& TokenGroup::getToken(int32_t index) +{ + return tokens[index]; +} + +float_t TokenGroup::getScore(int32_t index) const +{ + return scores[index]; +} + +int32_t TokenGroup::getEndOffset() const +{ + return endOffset; +} + +int32_t TokenGroup::getNumTokens() const +{ + return numTokens; +} + +int32_t TokenGroup::getStartOffset() const +{ + return startOffset; +} + +float_t TokenGroup::getTotalScore() const +{ + float_t total=0; + for (int32_t i = 0; i < numTokens; i++) + { + total+=scores[i]; + } + return total; +} + +/*void addToken(CL_NS(analysis)::Token* token, float_t score) +{ + if(numTokens < MAX_NUM_TOKENS_PER_GROUP) + { + if(numTokens==0) + { + startOffset=token->startOffset(); + endOffset=token->endOffset(); + } + else + { + startOffset=min(startOffset,token->startOffset()); + endOffset=max(endOffset,token->endOffset()); + } + tokens[numTokens]=token; + scores[numTokens]=score; + numTokens++; + } +}*/ + +bool TokenGroup::isDistinct(CL_NS(analysis)::Token* token) const +{ + return token->startOffset() > endOffset; +} + + +void TokenGroup::clear() +{ + numTokens=0; +} + +CL_NS_END2 diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/TokenGroup.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/TokenGroup.h new file mode 100644 index 0000000..3fa82b7 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/TokenGroup.h @@ -0,0 +1,83 @@ +/** + * Copyright 2002-2004 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 _lucene_search_highlight_tokengroup_ +#define _lucene_search_highlight_tokengroup_ + + +CL_CLASS_DEF(analysis, Token) + +CL_NS_DEF2(search,highlight) + +/** + * One, or several overlapping tokens, along with the score(s) and the + * scope of the original text + */ +class CLUCENE_CONTRIBS_EXPORT TokenGroup: LUCENE_BASE +{ + LUCENE_STATIC_CONSTANT(int32_t,MAX_NUM_TOKENS_PER_GROUP=50); + CL_NS(analysis)::Token* tokens; + float_t scores[MAX_NUM_TOKENS_PER_GROUP]; + int32_t numTokens; + int32_t startOffset; + int32_t endOffset; + +public: + TokenGroup(void); + ~TokenGroup(void); + + void addToken(CL_NS(analysis)::Token* token, float_t score); + + /** + * + * @param index a value between 0 and numTokens -1 + * @return the "n"th token + */ + CL_NS(analysis)::Token& getToken(int32_t index); + + /** + * + * @param index a value between 0 and numTokens -1 + * @return the "n"th score + */ + float_t getScore(int32_t index) const; + + /** + * @return the end position in the original text + */ + int32_t getEndOffset() const; + + /** + * @return the number of tokens in this group + */ + int32_t getNumTokens() const; + + /** + * @return the start position in the original text + */ + int32_t getStartOffset() const; + + /** + * @return all tokens' scores summed up + */ + float_t getTotalScore() const; + + bool isDistinct(CL_NS(analysis)::Token* token) const; + void clear(); +}; + +CL_NS_END2 +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/TokenSources.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/TokenSources.cpp new file mode 100644 index 0000000..18c1f0c --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/TokenSources.cpp @@ -0,0 +1,229 @@ +/** + * Copyright 2002-2004 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/_ApiHeader.h" +#include "TokenSources.h" + +#include "CLucene/util/VoidList.h" +#include "CLucene/util/CLStreams.h" +#include "CLucene/index/IndexReader.h" +#include "CLucene/index/TermVector.h" +#include "CLucene/document/Document.h" + +CL_NS_DEF2(search,highlight) +CL_NS_USE(analysis) +CL_NS_USE(index) +CL_NS_USE(util) + + +///Compares the Token for their order +class TokenOrderCompare:LUCENE_BASE, public CL_NS(util)::Compare::_base // +{ +public: + bool operator()( Token* t1, Token* t2 ) const{ + if(t1->startOffset()>t2->startOffset()) + return false; + if(t1->startOffset()startOffset()) + return true; + return true; +} +}; + +TokenSources::TokenSources(void) +{ +} + +TokenSources::~TokenSources(void) +{ +} + +TokenStream* TokenSources::getAnyTokenStream(IndexReader* reader,int32_t docId, TCHAR* field, Analyzer* analyzer) +{ + TokenStream* ts=NULL; + + TermFreqVector* tfv=reader->getTermFreqVector(docId,field); + if(tfv!=NULL) + { + TermPositionVector* tmp = tfv->__asTermPositionVector(); + if ( tmp != NULL ) + ts=getTokenStream(tmp); + } + //No token info stored so fall back to analyzing raw content + if(ts==NULL) + { + ts=getTokenStream(reader,docId,field,analyzer); + } + return ts; +} + + +TokenStream* TokenSources::getTokenStream(TermPositionVector* tpv) +{ + //assumes the worst and makes no assumptions about token position sequences. + return getTokenStream(tpv,false); +} + +TokenStream* TokenSources::getTokenStream(TermPositionVector* tpv, bool tokenPositionsGuaranteedContiguous) +{ + //an object used to iterate across an array of tokens + /*class StoredTokenStream extends TokenStream + { + Token tokens[]; + int32_t currentToken=0; + StoredTokenStream(Token tokens[]) + { + this.tokens=tokens; + } + public Token next() + { + if(currentToken>=tokens.length) + { + return NULL; + } + return tokens[currentToken++]; + } + } */ + //code to reconstruct the original sequence of Tokens + const ArrayBase* terms = tpv->getTerms(); + const ArrayBase* freq=tpv->getTermFrequencies(); + + size_t totalTokens=0; + for (int32_t i = 0; i < freq->length; i++) + totalTokens+=freq->values[i]; + + Token** tokensInOriginalOrder=NULL; + CLSetList* unsortedTokens = NULL; + for (int32_t t = 0; t < freq->length; t++) + { + const ArrayBase* offsets=tpv->getOffsets(t); + if(offsets==NULL) + return NULL; + + const ArrayBase* pos=NULL; + if(tokenPositionsGuaranteedContiguous) + { + //try get the token position info to speed up assembly of tokens into sorted sequence + pos=tpv->getTermPositions(t); + } + + if ( tokensInOriginalOrder != NULL ) + tokensInOriginalOrder = _CL_NEWARRAY(Token*, totalTokens+1); + + if(pos==NULL) + { + //tokens NOT stored with positions or not guaranteed contiguous - must add to list and sort later + if(unsortedTokens==NULL) + unsortedTokens=_CLNEW CLSetList(false); + for (int32_t tp=0; tp < offsets->length; tp++) + { + unsortedTokens->insert(_CLNEW Token(terms->values[t], + (*offsets)[tp]->getStartOffset(), + (*offsets)[tp]->getEndOffset())); + } + } + else + { + //We have positions stored and a guarantee that the token position information is contiguous + + // This may be fast BUT wont work if Tokenizers used which create >1 token in same position or + // creates jumps in position numbers - this code would fail under those circumstances + + //tokens stored with positions - can use this to index straight into sorted array + for (int32_t tp = 0; tp < pos->length; tp++) + { + tokensInOriginalOrder[(*pos)[tp]]=_CLNEW Token(terms->values[t], + (*offsets)[tp]->getStartOffset(), + (*offsets)[tp]->getEndOffset()); + } + } + } + //If the field has been stored without position data we must perform a sort + if(unsortedTokens!=NULL) + { + if ( totalTokenssize() ){ + _CLDELETE_ARRAY(tokensInOriginalOrder); + tokensInOriginalOrder = _CL_NEWARRAY(Token*,unsortedTokens->size()+1); + } + //the list has already sorted our items //todo:check that this is true... + unsortedTokens->toArray_nullTerminated(tokensInOriginalOrder); + + return _CLNEW StoredTokenStream(tokensInOriginalOrder,unsortedTokens->size()); + }else + return _CLNEW StoredTokenStream(tokensInOriginalOrder,totalTokens); +} + +TokenStream* TokenSources::getTokenStream(IndexReader* reader,int32_t docId, TCHAR* field) +{ + TermFreqVector* tfv=reader->getTermFreqVector(docId,field); + if(tfv==NULL) + { + TCHAR buf[250]; + _sntprintf(buf,250,_T("%s in doc #%d does not have any term position data stored"),field,docId); + _CLTHROWT(CL_ERR_IllegalArgument,buf); + return NULL; + } + + TermPositionVector* tmp = NULL; + tmp = tfv->__asTermPositionVector(); + + if ( tmp != NULL ){ + return getTokenStream(tmp); + }else{ + TCHAR buf[250]; + _sntprintf(buf,250,_T("%s in doc #%d does not have any term position data stored"),field,docId); + _CLTHROWT(CL_ERR_IllegalArgument,buf); + return NULL; + } +} + +//convenience method +TokenStream* TokenSources::getTokenStream(IndexReader* reader,int32_t docId, TCHAR* field,Analyzer* analyzer) +{ + CL_NS(document)::Document doc; + reader->document(docId, doc); + const TCHAR* contents=doc.get(field); + if(contents==NULL) + { + TCHAR buf[250]; + _sntprintf(buf,250,_T("Field %s in document #%d is not stored and cannot be analyzed"),field,docId); + _CLTHROWT(CL_ERR_IllegalArgument,buf); + return NULL; + } + return analyzer->tokenStream(field,_CLNEW StringReader(contents)); +} + +TokenSources::StoredTokenStream::StoredTokenStream(CL_NS(analysis)::Token** tokens, size_t len) +{ + currentToken = 0; + this->tokens=tokens; + this->length = len; +} +CL_NS(analysis)::Token* TokenSources::StoredTokenStream::next(CL_NS(analysis)::Token* token) +{ + if(currentToken>=length) + { + return NULL; + } + Token* t = tokens[currentToken++]; + + token->set(t->termBuffer(),t->startOffset(),t->endOffset(),t->type());; + return token; +} +void TokenSources::StoredTokenStream::close(){ + +} + +CL_NS_END2 diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/TokenSources.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/TokenSources.h new file mode 100644 index 0000000..d1da4d5 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/TokenSources.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_highlight_tokensources_ +#define _lucene_search_highlight_tokensources_ + +#include "CLucene/analysis/AnalysisHeader.h" +CL_CLASS_DEF(index, IndexReader) +CL_CLASS_DEF(index, TermPositionVector) +//#include "CLucene/index/IndexReader.h" +//#include "CLucene/index/TermVector.h" + +CL_NS_DEF2(search,highlight) + +class CLUCENE_CONTRIBS_EXPORT TokenSources: LUCENE_BASE +{ + //an object used to iterate across an array of tokens + class StoredTokenStream:public CL_NS(analysis)::TokenStream + { + public: + CL_NS(analysis)::Token** tokens; + size_t length; + int32_t currentToken; + StoredTokenStream(CL_NS(analysis)::Token** tokens, size_t len); + CL_NS(analysis)::Token* next(CL_NS(analysis)::Token* token); + void close(); + }; +public: + TokenSources(void); + ~TokenSources(void); + + /** + * A convenience method that tries a number of approaches to getting a token stream. + * The cost of finding there are no termVectors in the index is minimal (1000 invocations still + * registers 0 ms). So this "lazy" (flexible?) approach to coding is probably acceptable + * @param reader + * @param docId + * @param field + * @param analyzer + * @return null if field not stored correctly + * @throws IOException + */ + static CL_NS(analysis)::TokenStream* getAnyTokenStream(CL_NS(index)::IndexReader* reader,int32_t docId, TCHAR* field, CL_NS(analysis)::Analyzer* analyzer); + + static CL_NS(analysis)::TokenStream* getTokenStream(CL_NS(index)::TermPositionVector* tpv); + + /** + * Low level api. + * Returns a token stream or null if no offset info available in index. + * This can be used to feed the highlighter with a pre-parsed token stream + * + * In my tests the speeds to recreate 1000 token streams using this method are: + * - with TermVector offset only data stored - 420 milliseconds + * - with TermVector offset AND position data stored - 271 milliseconds + * (nb timings for TermVector with position data are based on a tokenizer with contiguous + * positions - no overlaps or gaps) + * The cost of not using TermPositionVector to store + * pre-parsed content and using an analyzer to re-parse the original content: + * - reanalyzing the original content - 980 milliseconds + * + * The re-analyze timings will typically vary depending on - + * 1) The complexity of the analyzer code (timings above were using a + * stemmer/lowercaser/stopword combo) + * 2) The number of other fields (Lucene reads ALL fields off the disk + * when accessing just one document field - can cost dear!) + * 3) Use of compression on field storage - could be faster cos of compression (less disk IO) + * or slower (more CPU burn) depending on the content. + * + * @param tpv + * @param tokenPositionsGuaranteedContiguous true if the token position numbers have no overlaps or gaps. If looking + * to eek out the last drops of performance, set to true. If in doubt, set to false. + */ + static CL_NS(analysis)::TokenStream* getTokenStream(CL_NS(index)::TermPositionVector* tpv, bool tokenPositionsGuaranteedContiguous); + + static CL_NS(analysis)::TokenStream* getTokenStream(CL_NS(index)::IndexReader* reader,int32_t docId, TCHAR* field); + + //convenience method + static CL_NS(analysis)::TokenStream* getTokenStream(CL_NS(index)::IndexReader* reader,int32_t docId, TCHAR* field,CL_NS(analysis)::Analyzer* analyzer); +}; + +CL_NS_END2 +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/WeightedTerm.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/WeightedTerm.cpp new file mode 100644 index 0000000..1555469 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/WeightedTerm.cpp @@ -0,0 +1,101 @@ +/** + * Copyright 2002-2004 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/_ApiHeader.h" +#include "WeightedTerm.h" +#include "CLucene/search/Similarity.h" +#include "CLucene/util/Misc.h" + +CL_NS_DEF2(search,highlight) + + WeightedTerm::WeightedTerm (float_t weight,const TCHAR* term) + { + _weight=weight; + _term = stringDuplicate(term); + cachedHashCode = 0; + } + + WeightedTerm::~WeightedTerm() + { + _CLDELETE_CARRAY(_term); + } + + WeightedTerm::WeightedTerm(const WeightedTerm& other) + { + _weight = other.getWeight(); + _term = STRDUP_TtoT(other.getTerm()); + } + + WeightedTerm* WeightedTerm::clone() const{ + return _CLNEW WeightedTerm(*this); + } + + /** + * @return the term value (stemmed) + */ + const TCHAR* WeightedTerm::getTerm() const + { + return _term; + } + + /** + * @return the weight associated with this term + */ + float_t WeightedTerm::getWeight() const + { + return _weight; + } + + /** + * @param term the term value (stemmed) + */ + void WeightedTerm::setTerm(TCHAR* term) + { + _CLDELETE_CARRAY(this->_term); + this->_term = STRDUP_TtoT(_term); + cachedHashCode = 0; + } + + /** + * @param weight the weight associated with this term + */ + void WeightedTerm::setWeight(float_t weight) { + _weight = weight; + cachedHashCode = 0; + } + + size_t WeightedTerm::hashCode(){ + if ( cachedHashCode == 0 ){ + cachedHashCode = ( CL_NS(util)::Misc::thashCode(this->_term) ^ CL_NS(search)::Similarity::floatToByte(_weight) ); + } + + return cachedHashCode; + } + + bool WeightedTerm::Compare::operator()( WeightedTerm* t1, WeightedTerm* t2 ) const{ + int r = _tcscmp(t1->getTerm(), t2->getTerm()); + if ( r < 0 ) + return true; + else if ( r == 0 ) + return t1->getWeight() < t2->getWeight(); + else + return false; + } + size_t WeightedTerm::Compare::operator()( WeightedTerm* t ) const{ + return t->hashCode(); + } + +CL_NS_END2 diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/WeightedTerm.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/WeightedTerm.h new file mode 100644 index 0000000..0428e50 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/highlighter/WeightedTerm.h @@ -0,0 +1,79 @@ +/** + * Copyright 2002-2004 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 _lucene_search_highlight_weightedterm_ +#define _lucene_search_highlight_weightedterm_ + + +//#include "CLucene/util/VoidList.h" + +CL_NS_DEF2(search,highlight) + +/** Lightweight class to hold term and a weight value used for scoring this term + */ +class CLUCENE_CONTRIBS_EXPORT WeightedTerm:LUCENE_BASE +{ +private: + float_t _weight; // multiplier + TCHAR* _term; //stemmed form + size_t cachedHashCode; + WeightedTerm(const WeightedTerm& other); +public: + WeightedTerm (float_t weight,const TCHAR* term); + ~WeightedTerm(); + + /** + * @return the term value (stemmed) + */ + const TCHAR* getTerm() const; + + /** + * @return the weight associated with this term + */ + float_t getWeight() const ; + + /** + * @param term the term value (stemmed) + */ + void setTerm(TCHAR* term); + /** + * @param weight the weight associated with this term + */ + void setWeight(float_t weight); + + size_t hashCode(); + WeightedTerm* clone() const; + + /** + * Compare weighted terms, according to the term text. + * @todo Do we have to take boost factors into account + */ + class Compare:LUCENE_BASE, public CL_NS(util)::Compare::_base // + { + public: + //todo: this should be more efficient, but will be using a hash table soon, anyway + bool operator()( WeightedTerm* t1, WeightedTerm* t2 ) const; + size_t operator()( WeightedTerm* t ) const; + }; +}; + +/** CLHashSet of WeightedTerm */ +typedef CL_NS(util)::CLHashSet > WeightedTermList; + +CL_NS_END2 + +#endif + diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/Snowball.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/Snowball.cpp new file mode 100644 index 0000000..bef5069 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/Snowball.cpp @@ -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. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "SnowballAnalyzer.h" +#include "SnowballFilter.h" +#include "CLucene/util/Misc.h" +#include "CLucene/util/CLStreams.h" +#include "CLucene/analysis/Analyzers.h" +#include "CLucene/analysis/standard/StandardTokenizer.h" +#include "CLucene/analysis/standard/StandardFilter.h" + +CL_NS_USE(analysis) +CL_NS_USE(util) +CL_NS_USE2(analysis,standard) + +CL_NS_DEF2(analysis,snowball) + + class SnowballAnalyzer::SavedStreams : public TokenStream { + public: + StandardTokenizer* tokenStream; + TokenStream* filteredTokenStream; + + SavedStreams():tokenStream(NULL), filteredTokenStream(NULL) {} + void close(){} + Token* next(Token* token) {return NULL;} + }; + + /** Builds the named analyzer with no stop words. */ + SnowballAnalyzer::SnowballAnalyzer(const TCHAR* language) { + this->language = STRDUP_TtoT(language); + stopSet = NULL; + } + + SnowballAnalyzer::~SnowballAnalyzer() { + SavedStreams* streams = reinterpret_cast(getPreviousTokenStream()); + if (streams != NULL) { + _CLDELETE(streams->filteredTokenStream); + _CLDELETE(streams); + } + _CLDELETE_CARRAY(language); + if (stopSet != NULL) + _CLDELETE(stopSet); + } + + /** Builds the named analyzer with the given stop words. + */ + SnowballAnalyzer::SnowballAnalyzer(const TCHAR* language, const TCHAR** stopWords) { + this->language = STRDUP_TtoT(language); + + stopSet = _CLNEW CLTCSetList(true); + StopFilter::fillStopTable(stopSet,stopWords); + } + + TokenStream* SnowballAnalyzer::tokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader) { + return this->tokenStream(fieldName,reader,false); + } + + /** Constructs a {@link StandardTokenizer} filtered by a {@link + StandardFilter}, a {@link LowerCaseFilter} and a {@link StopFilter}. */ + TokenStream* SnowballAnalyzer::tokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader, bool deleteReader) { + BufferedReader* bufferedReader = reader->__asBufferedReader(); + TokenStream* result; + + if ( bufferedReader == NULL ) + result = _CLNEW StandardTokenizer( _CLNEW FilteredBufferedReader(reader, deleteReader), true ); + else + result = _CLNEW StandardTokenizer(bufferedReader, deleteReader); + + result = _CLNEW StandardFilter(result, true); + result = _CLNEW CL_NS(analysis)::LowerCaseFilter(result, true); + if (stopSet != NULL) + result = _CLNEW CL_NS(analysis)::StopFilter(result, true, stopSet); + result = _CLNEW SnowballFilter(result, language, true); + return result; + } + + TokenStream* SnowballAnalyzer::reusableTokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader) { + SavedStreams* streams = reinterpret_cast(getPreviousTokenStream()); + + if (streams == NULL) { + streams = _CLNEW SavedStreams(); + BufferedReader* bufferedReader = reader->__asBufferedReader(); + + if (bufferedReader == NULL) + streams->tokenStream = _CLNEW StandardTokenizer(_CLNEW FilteredBufferedReader(reader, false), true); + else + streams->tokenStream = _CLNEW StandardTokenizer(bufferedReader); + + streams->filteredTokenStream = _CLNEW StandardFilter(streams->tokenStream, true); + streams->filteredTokenStream = _CLNEW LowerCaseFilter(streams->filteredTokenStream, true); + if (stopSet != NULL) + streams->filteredTokenStream = _CLNEW StopFilter(streams->filteredTokenStream, true, stopSet); + streams->filteredTokenStream = _CLNEW SnowballFilter(streams->filteredTokenStream, language, true); + setPreviousTokenStream(streams); + } else + streams->tokenStream->reset(reader); + return streams->filteredTokenStream; + } + + /** Construct the named stemming filter. + * + * @param in the input tokens to stem + * @param name the name of a stemmer + */ + SnowballFilter::SnowballFilter(TokenStream* in, const TCHAR* language, bool deleteTS): + TokenFilter(in,deleteTS) + { + TCHAR tlang[50]; + char lang[50]; + _tcsncpy(tlang,language,50); + _tcslwr(tlang); + + STRCPY_TtoA(lang,tlang,50); + stemmer = sb_stemmer_new(lang, NULL); //use utf8 encoding + + if ( stemmer == NULL ){ + _CLTHROWA(CL_ERR_IllegalArgument, "language not available for stemming\n"); //todo: richer error + } + } + + SnowballFilter::~SnowballFilter(){ + sb_stemmer_delete(stemmer); + } + + /** Returns the next input Token, after being stemmed */ + Token* SnowballFilter::next(Token* token){ + if (input->next(token) == NULL) + return NULL; + + unsigned char uctext[LUCENE_MAX_WORD_LEN]; + TCHAR tchartext[LUCENE_MAX_WORD_LEN]; + +#ifdef _UCS2 + char utf8text[LUCENE_MAX_WORD_LEN]; + + size_t len = lucene_wcstoutf8(utf8text,token->termBuffer(),LUCENE_MAX_WORD_LEN); + memcpy(uctext,utf8text,len); + uctext[len]='\0'; +#else + const char* tmp = token->termText(); + int len = token->termTextLength(); + for (int i=0;iset(tchartext,token->startOffset(), token->endOffset(), token->type()); + return token; + } + + +CL_NS_END2 diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/SnowballAnalyzer.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/SnowballAnalyzer.h new file mode 100644 index 0000000..5e98f92 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/SnowballAnalyzer.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_snowball_analyser_ +#define _lucene_analysis_snowball_analyser_ + +#include "CLucene/analysis/AnalysisHeader.h" + +CL_CLASS_DEF(util,BufferedReader) +CL_NS_DEF2(analysis,snowball) + +/** Filters {@link StandardTokenizer} with {@link StandardFilter}, {@link + * LowerCaseFilter}, {@link StopFilter} and {@link SnowballFilter}. + * + * Available stemmers are listed in {@link net.sf.snowball.ext}. The name of a + * stemmer is the part of the class name before "Stemmer", e.g., the stemmer in + * {@link EnglishStemmer} is named "English". + */ +class CLUCENE_CONTRIBS_EXPORT SnowballAnalyzer: public Analyzer { + TCHAR* language; + CLTCSetList* stopSet; + class SavedStreams; + +public: + /** Builds the named analyzer with no stop words. */ + SnowballAnalyzer(const TCHAR* language=_T("english")); + + /** Builds the named analyzer with the given stop words. + */ + SnowballAnalyzer(const TCHAR* language, const TCHAR** stopWords); + + ~SnowballAnalyzer(); + + /** Constructs a {@link StandardTokenizer} filtered by a {@link + StandardFilter}, a {@link LowerCaseFilter} and a {@link StopFilter}. */ + TokenStream* tokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader); + TokenStream* tokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader, bool deleteReader); + + TokenStream* reusableTokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader); +}; + +CL_NS_END2 +#endif + diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/SnowballFilter.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/SnowballFilter.h new file mode 100644 index 0000000..40550e6 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/SnowballFilter.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_analysis_snowball_filter_ +#define _lucene_analysis_snowball_filter_ + +#include "CLucene/analysis/AnalysisHeader.h" +#include "libstemmer.h" + +CL_NS_DEF2(analysis,snowball) + +/** A filter that stems words using a Snowball-generated stemmer. + * + * Available stemmers are listed in {@link net.sf.snowball.ext}. The name of a + * stemmer is the part of the class name before "Stemmer", e.g., the stemmer in + * {@link EnglishStemmer} is named "English". + * + * Note: todo: This is not thread safe... + */ +class CLUCENE_CONTRIBS_EXPORT SnowballFilter: public TokenFilter { + struct sb_stemmer * stemmer; +public: + + /** Construct the named stemming filter. + * + * @param in the input tokens to stem + * @param name the name of a stemmer + */ + SnowballFilter(TokenStream* in, const TCHAR* language, bool deleteTS); + + ~SnowballFilter(); + + /** Returns the next input Token, after being stemmed */ + Token* next(Token* token); +}; + +CL_NS_END2 +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/include/libstemmer.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/include/libstemmer.h new file mode 100644 index 0000000..9ca5e9c --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/include/libstemmer.h @@ -0,0 +1,82 @@ +#ifndef LIBSTEMMER_INCLUDE_LIBSTEMMER_H +#define LIBSTEMMER_INCLUDE_LIBSTEMMER_H + +/* Make header file work when included from C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +struct sb_stemmer; +typedef unsigned char sb_symbol; + +/* FIXME - should be able to get a version number for each stemming + * algorithm (which will be incremented each time the output changes). */ + +/** Returns an array of the names of the available stemming algorithms. + * Note that these are the canonical names - aliases (ie, other names for + * the same algorithm) will not be included in the list. + * The list is terminated with a null pointer. + * + * The list must not be modified in any way. + */ +const char ** sb_stemmer_list(void); + +/** Create a new stemmer object, using the specified algorithm, for the + * specified character encoding. + * + * All algorithms will usually be available in UTF-8, but may also be + * available in other character encodings. + * + * @param algorithm The algorithm name. This is either the english + * name of the algorithm, or the 2 or 3 letter ISO 639 codes for the + * language. Note that case is significant in this parameter - the + * value should be supplied in lower case. + * + * @param charenc The character encoding. NULL may be passed as + * this value, in which case UTF-8 encoding will be assumed. Otherwise, + * the argument may be one of "UTF_8", "ISO_8859_1" (ie, Latin 1), + * "CP850" (ie, MS-DOS Latin 1) or "KOI8_R" (Russian). Note that + * case is significant in this parameter. + * + * @return NULL if the specified algorithm is not recognised, or the + * algorithm is not available for the requested encoding. Otherwise, + * returns a pointer to a newly created stemmer for the requested algorithm. + * The returned pointer must be deleted by calling sb_stemmer_delete(). + * + * @note NULL will also be returned if an out of memory error occurs. + */ +struct sb_stemmer * sb_stemmer_new(const char * algorithm, const char * charenc); + +/** Delete a stemmer object. + * + * This frees all resources allocated for the stemmer. After calling + * this function, the supplied stemmer may no longer be used in any way. + * + * It is safe to pass a null pointer to this function - this will have + * no effect. + */ +void sb_stemmer_delete(struct sb_stemmer * stemmer); + +/** Stem a word. + * + * The return value is owned by the stemmer - it must not be freed or + * modified, and it will become invalid when the stemmer is called again, + * or if the stemmer is freed. + * + * The length of the return value can be obtained using sb_stemmer_length(). + * + * If an out-of-memory error occurs, this will return NULL. + */ +const sb_symbol * sb_stemmer_stem(struct sb_stemmer * stemmer, + const sb_symbol * word, int size); + +/** Get the length of the result of the last stemmed word. + * This should not be called before sb_stemmer_stem() has been called. + */ +int sb_stemmer_length(struct sb_stemmer * stemmer); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/libstemmer.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/libstemmer.h new file mode 100644 index 0000000..9d86b85 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/libstemmer.h @@ -0,0 +1,79 @@ + +/* Make header file work when included from C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +struct sb_stemmer; +typedef unsigned char sb_symbol; + +/* FIXME - should be able to get a version number for each stemming + * algorithm (which will be incremented each time the output changes). */ + +/** Returns an array of the names of the available stemming algorithms. + * Note that these are the canonical names - aliases (ie, other names for + * the same algorithm) will not be included in the list. + * The list is terminated with a null pointer. + * + * The list must not be modified in any way. + */ +const char ** sb_stemmer_list(void); + +/** Create a new stemmer object, using the specified algorithm, for the + * specified character encoding. + * + * All algorithms will usually be available in UTF-8, but may also be + * available in other character encodings. + * + * @param algorithm The algorithm name. This is either the english + * name of the algorithm, or the 2 or 3 letter ISO 639 codes for the + * language. Note that case is significant in this parameter - the + * value should be supplied in lower case. + * + * @param charenc The character encoding. NULL may be passed as + * this value, in which case UTF-8 encoding will be assumed. Otherwise, + * the argument may be one of "UTF_8", "ISO_8859_1" (ie, Latin 1), + * "CP850" (ie, MS-DOS Latin 1) or "KOI8_R" (Russian). Note that + * case is significant in this parameter. + * + * @return NULL if the specified algorithm is not recognised, or the + * algorithm is not available for the requested encoding. Otherwise, + * returns a pointer to a newly created stemmer for the requested algorithm. + * The returned pointer must be deleted by calling sb_stemmer_delete(). + * + * @note NULL will also be returned if an out of memory error occurs. + */ +struct sb_stemmer * sb_stemmer_new(const char * algorithm, const char * charenc); + +/** Delete a stemmer object. + * + * This frees all resources allocated for the stemmer. After calling + * this function, the supplied stemmer may no longer be used in any way. + * + * It is safe to pass a null pointer to this function - this will have + * no effect. + */ +void sb_stemmer_delete(struct sb_stemmer * stemmer); + +/** Stem a word. + * + * The return value is owned by the stemmer - it must not be freed or + * modified, and it will become invalid when the stemmer is called again, + * or if the stemmer is freed. + * + * The length of the return value can be obtained using sb_stemmer_length(). + * + * If an out-of-memory error occurs, this will return NULL. + */ +const sb_symbol * sb_stemmer_stem(struct sb_stemmer * stemmer, + const sb_symbol * word, int size); + +/** Get the length of the result of the last stemmed word. + * This should not be called before sb_stemmer_stem() has been called. + */ +int sb_stemmer_length(struct sb_stemmer * stemmer); + +#ifdef __cplusplus +} +#endif + diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/libstemmer/libstemmer.c b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/libstemmer/libstemmer.c new file mode 100644 index 0000000..e14327f --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/libstemmer/libstemmer.c @@ -0,0 +1,94 @@ + +#include +#include +#include "../include/libstemmer.h" +#include "../runtime/api.h" +#include "modules.h" + +struct sb_stemmer { + struct SN_env * (*create)(void); + void (*close)(struct SN_env *); + int (*stem)(struct SN_env *); + + struct SN_env * env; +}; + +extern const char ** +sb_stemmer_list(void) +{ + return algorithm_names; +} + +static stemmer_encoding sb_getenc(const char * charenc) +{ + struct stemmer_encoding * encoding; + if (charenc == NULL) return ENC_UTF_8; + for (encoding = encodings; encoding->name != 0; encoding++) { + if (strcmp(encoding->name, charenc) == 0) break; + } + if (encoding->name == NULL) return ENC_UNKNOWN; + return encoding->enc; +} + +extern struct sb_stemmer * +sb_stemmer_new(const char * algorithm, const char * charenc) +{ + stemmer_encoding enc; + struct stemmer_modules * module; + struct sb_stemmer * stemmer; + + enc = sb_getenc(charenc); + if (enc == ENC_UNKNOWN) return NULL; + + for (module = modules; module->name != 0; module++) { + if (strcmp(module->name, algorithm) == 0 && module->enc == enc) break; + } + if (module->name == NULL) return NULL; + + stemmer = (struct sb_stemmer *) malloc(sizeof(struct sb_stemmer)); + if (stemmer == NULL) return NULL; + + stemmer->create = module->create; + stemmer->close = module->close; + stemmer->stem = module->stem; + + stemmer->env = stemmer->create(); + if (stemmer->env == NULL) + { + sb_stemmer_delete(stemmer); + return NULL; + } + + return stemmer; +} + +void +sb_stemmer_delete(struct sb_stemmer * stemmer) +{ + if (stemmer == 0) return; + if (stemmer->close == 0) return; + stemmer->close(stemmer->env); + stemmer->close = 0; + free(stemmer); +} + +const sb_symbol * +sb_stemmer_stem(struct sb_stemmer * stemmer, const sb_symbol * word, int size) +{ + int ret; + if (SN_set_current(stemmer->env, size, word)) + { + stemmer->env->l = 0; + return NULL; + } + ret = stemmer->stem(stemmer->env); + if (ret < 0) return NULL; + stemmer->env->p[stemmer->env->l] = 0; + return stemmer->env->p; +} + +int +sb_stemmer_length(struct sb_stemmer * stemmer) +{ + return stemmer->env->l; +} diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/libstemmer/modules.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/libstemmer/modules.h new file mode 100644 index 0000000..57df305 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/libstemmer/modules.h @@ -0,0 +1,166 @@ +#ifndef LIBSTEMMER_MODULES_H +#define LIBSTEMMER_MODULES_H + +/* libstemmer/modules.h: List of stemming modules. + * + * This file is generated by mkmodules.pl from a list of module names. + * Do not edit manually. + * + * Modules included by this file are: danish, dutch, english, finnish, french, + * german, italian, norwegian, porter, portuguese, russian, spanish, swedish + */ + +#include "../src_c/stem_ISO_8859_1_danish.h" +#include "../src_c/stem_UTF_8_danish.h" +#include "../src_c/stem_ISO_8859_1_dutch.h" +#include "../src_c/stem_UTF_8_dutch.h" +#include "../src_c/stem_ISO_8859_1_english.h" +#include "../src_c/stem_UTF_8_english.h" +#include "../src_c/stem_ISO_8859_1_finnish.h" +#include "../src_c/stem_UTF_8_finnish.h" +#include "../src_c/stem_ISO_8859_1_french.h" +#include "../src_c/stem_UTF_8_french.h" +#include "../src_c/stem_ISO_8859_1_german.h" +#include "../src_c/stem_UTF_8_german.h" +#include "../src_c/stem_ISO_8859_1_italian.h" +#include "../src_c/stem_UTF_8_italian.h" +#include "../src_c/stem_ISO_8859_1_norwegian.h" +#include "../src_c/stem_UTF_8_norwegian.h" +#include "../src_c/stem_ISO_8859_1_porter.h" +#include "../src_c/stem_UTF_8_porter.h" +#include "../src_c/stem_ISO_8859_1_portuguese.h" +#include "../src_c/stem_UTF_8_portuguese.h" +#include "../src_c/stem_KOI8_R_russian.h" +#include "../src_c/stem_UTF_8_russian.h" +#include "../src_c/stem_ISO_8859_1_spanish.h" +#include "../src_c/stem_UTF_8_spanish.h" +#include "../src_c/stem_ISO_8859_1_swedish.h" +#include "../src_c/stem_UTF_8_swedish.h" + +typedef enum { + ENC_UNKNOWN, + ENC_ISO_8859_1, + ENC_KOI8_R, + ENC_UTF_8, +} stemmer_encoding; + +struct stemmer_encoding { + const char * name; + stemmer_encoding enc; +}; +static struct stemmer_encoding encodings[] = { + {"ISO_8859_1", ENC_ISO_8859_1}, + {"KOI8_R", ENC_KOI8_R}, + {"UTF_8", ENC_UTF_8}, + {0,0} +}; + +struct stemmer_modules { + const char * name; + stemmer_encoding enc; + struct SN_env * (*create)(void); + void (*close)(struct SN_env *); + int (*stem)(struct SN_env *); +}; +static struct stemmer_modules modules[] = { + {"da", ENC_ISO_8859_1, danish_ISO_8859_1_create_env, danish_ISO_8859_1_close_env, danish_ISO_8859_1_stem}, + {"da", ENC_UTF_8, danish_UTF_8_create_env, danish_UTF_8_close_env, danish_UTF_8_stem}, + {"dan", ENC_ISO_8859_1, danish_ISO_8859_1_create_env, danish_ISO_8859_1_close_env, danish_ISO_8859_1_stem}, + {"dan", ENC_UTF_8, danish_UTF_8_create_env, danish_UTF_8_close_env, danish_UTF_8_stem}, + {"danish", ENC_ISO_8859_1, danish_ISO_8859_1_create_env, danish_ISO_8859_1_close_env, danish_ISO_8859_1_stem}, + {"danish", ENC_UTF_8, danish_UTF_8_create_env, danish_UTF_8_close_env, danish_UTF_8_stem}, + {"de", ENC_ISO_8859_1, german_ISO_8859_1_create_env, german_ISO_8859_1_close_env, german_ISO_8859_1_stem}, + {"de", ENC_UTF_8, german_UTF_8_create_env, german_UTF_8_close_env, german_UTF_8_stem}, + {"deu", ENC_ISO_8859_1, german_ISO_8859_1_create_env, german_ISO_8859_1_close_env, german_ISO_8859_1_stem}, + {"deu", ENC_UTF_8, german_UTF_8_create_env, german_UTF_8_close_env, german_UTF_8_stem}, + {"dut", ENC_ISO_8859_1, dutch_ISO_8859_1_create_env, dutch_ISO_8859_1_close_env, dutch_ISO_8859_1_stem}, + {"dut", ENC_UTF_8, dutch_UTF_8_create_env, dutch_UTF_8_close_env, dutch_UTF_8_stem}, + {"dutch", ENC_ISO_8859_1, dutch_ISO_8859_1_create_env, dutch_ISO_8859_1_close_env, dutch_ISO_8859_1_stem}, + {"dutch", ENC_UTF_8, dutch_UTF_8_create_env, dutch_UTF_8_close_env, dutch_UTF_8_stem}, + {"en", ENC_ISO_8859_1, english_ISO_8859_1_create_env, english_ISO_8859_1_close_env, english_ISO_8859_1_stem}, + {"en", ENC_UTF_8, english_UTF_8_create_env, english_UTF_8_close_env, english_UTF_8_stem}, + {"eng", ENC_ISO_8859_1, english_ISO_8859_1_create_env, english_ISO_8859_1_close_env, english_ISO_8859_1_stem}, + {"eng", ENC_UTF_8, english_UTF_8_create_env, english_UTF_8_close_env, english_UTF_8_stem}, + {"english", ENC_ISO_8859_1, english_ISO_8859_1_create_env, english_ISO_8859_1_close_env, english_ISO_8859_1_stem}, + {"english", ENC_UTF_8, english_UTF_8_create_env, english_UTF_8_close_env, english_UTF_8_stem}, + {"es", ENC_ISO_8859_1, spanish_ISO_8859_1_create_env, spanish_ISO_8859_1_close_env, spanish_ISO_8859_1_stem}, + {"es", ENC_UTF_8, spanish_UTF_8_create_env, spanish_UTF_8_close_env, spanish_UTF_8_stem}, + {"esl", ENC_ISO_8859_1, spanish_ISO_8859_1_create_env, spanish_ISO_8859_1_close_env, spanish_ISO_8859_1_stem}, + {"esl", ENC_UTF_8, spanish_UTF_8_create_env, spanish_UTF_8_close_env, spanish_UTF_8_stem}, + {"fi", ENC_ISO_8859_1, finnish_ISO_8859_1_create_env, finnish_ISO_8859_1_close_env, finnish_ISO_8859_1_stem}, + {"fi", ENC_UTF_8, finnish_UTF_8_create_env, finnish_UTF_8_close_env, finnish_UTF_8_stem}, + {"fin", ENC_ISO_8859_1, finnish_ISO_8859_1_create_env, finnish_ISO_8859_1_close_env, finnish_ISO_8859_1_stem}, + {"fin", ENC_UTF_8, finnish_UTF_8_create_env, finnish_UTF_8_close_env, finnish_UTF_8_stem}, + {"finnish", ENC_ISO_8859_1, finnish_ISO_8859_1_create_env, finnish_ISO_8859_1_close_env, finnish_ISO_8859_1_stem}, + {"finnish", ENC_UTF_8, finnish_UTF_8_create_env, finnish_UTF_8_close_env, finnish_UTF_8_stem}, + {"fr", ENC_ISO_8859_1, french_ISO_8859_1_create_env, french_ISO_8859_1_close_env, french_ISO_8859_1_stem}, + {"fr", ENC_UTF_8, french_UTF_8_create_env, french_UTF_8_close_env, french_UTF_8_stem}, + {"fra", ENC_ISO_8859_1, french_ISO_8859_1_create_env, french_ISO_8859_1_close_env, french_ISO_8859_1_stem}, + {"fra", ENC_UTF_8, french_UTF_8_create_env, french_UTF_8_close_env, french_UTF_8_stem}, + {"fre", ENC_ISO_8859_1, french_ISO_8859_1_create_env, french_ISO_8859_1_close_env, french_ISO_8859_1_stem}, + {"fre", ENC_UTF_8, french_UTF_8_create_env, french_UTF_8_close_env, french_UTF_8_stem}, + {"french", ENC_ISO_8859_1, french_ISO_8859_1_create_env, french_ISO_8859_1_close_env, french_ISO_8859_1_stem}, + {"french", ENC_UTF_8, french_UTF_8_create_env, french_UTF_8_close_env, french_UTF_8_stem}, + {"ger", ENC_ISO_8859_1, german_ISO_8859_1_create_env, german_ISO_8859_1_close_env, german_ISO_8859_1_stem}, + {"ger", ENC_UTF_8, german_UTF_8_create_env, german_UTF_8_close_env, german_UTF_8_stem}, + {"german", ENC_ISO_8859_1, german_ISO_8859_1_create_env, german_ISO_8859_1_close_env, german_ISO_8859_1_stem}, + {"german", ENC_UTF_8, german_UTF_8_create_env, german_UTF_8_close_env, german_UTF_8_stem}, + {"it", ENC_ISO_8859_1, italian_ISO_8859_1_create_env, italian_ISO_8859_1_close_env, italian_ISO_8859_1_stem}, + {"it", ENC_UTF_8, italian_UTF_8_create_env, italian_UTF_8_close_env, italian_UTF_8_stem}, + {"ita", ENC_ISO_8859_1, italian_ISO_8859_1_create_env, italian_ISO_8859_1_close_env, italian_ISO_8859_1_stem}, + {"ita", ENC_UTF_8, italian_UTF_8_create_env, italian_UTF_8_close_env, italian_UTF_8_stem}, + {"italian", ENC_ISO_8859_1, italian_ISO_8859_1_create_env, italian_ISO_8859_1_close_env, italian_ISO_8859_1_stem}, + {"italian", ENC_UTF_8, italian_UTF_8_create_env, italian_UTF_8_close_env, italian_UTF_8_stem}, + {"nl", ENC_ISO_8859_1, dutch_ISO_8859_1_create_env, dutch_ISO_8859_1_close_env, dutch_ISO_8859_1_stem}, + {"nl", ENC_UTF_8, dutch_UTF_8_create_env, dutch_UTF_8_close_env, dutch_UTF_8_stem}, + {"nld", ENC_ISO_8859_1, dutch_ISO_8859_1_create_env, dutch_ISO_8859_1_close_env, dutch_ISO_8859_1_stem}, + {"nld", ENC_UTF_8, dutch_UTF_8_create_env, dutch_UTF_8_close_env, dutch_UTF_8_stem}, + {"no", ENC_ISO_8859_1, norwegian_ISO_8859_1_create_env, norwegian_ISO_8859_1_close_env, norwegian_ISO_8859_1_stem}, + {"no", ENC_UTF_8, norwegian_UTF_8_create_env, norwegian_UTF_8_close_env, norwegian_UTF_8_stem}, + {"nor", ENC_ISO_8859_1, norwegian_ISO_8859_1_create_env, norwegian_ISO_8859_1_close_env, norwegian_ISO_8859_1_stem}, + {"nor", ENC_UTF_8, norwegian_UTF_8_create_env, norwegian_UTF_8_close_env, norwegian_UTF_8_stem}, + {"norwegian", ENC_ISO_8859_1, norwegian_ISO_8859_1_create_env, norwegian_ISO_8859_1_close_env, norwegian_ISO_8859_1_stem}, + {"norwegian", ENC_UTF_8, norwegian_UTF_8_create_env, norwegian_UTF_8_close_env, norwegian_UTF_8_stem}, + {"por", ENC_ISO_8859_1, portuguese_ISO_8859_1_create_env, portuguese_ISO_8859_1_close_env, portuguese_ISO_8859_1_stem}, + {"por", ENC_UTF_8, portuguese_UTF_8_create_env, portuguese_UTF_8_close_env, portuguese_UTF_8_stem}, + {"porter", ENC_ISO_8859_1, porter_ISO_8859_1_create_env, porter_ISO_8859_1_close_env, porter_ISO_8859_1_stem}, + {"porter", ENC_UTF_8, porter_UTF_8_create_env, porter_UTF_8_close_env, porter_UTF_8_stem}, + {"portuguese", ENC_ISO_8859_1, portuguese_ISO_8859_1_create_env, portuguese_ISO_8859_1_close_env, portuguese_ISO_8859_1_stem}, + {"portuguese", ENC_UTF_8, portuguese_UTF_8_create_env, portuguese_UTF_8_close_env, portuguese_UTF_8_stem}, + {"pt", ENC_ISO_8859_1, portuguese_ISO_8859_1_create_env, portuguese_ISO_8859_1_close_env, portuguese_ISO_8859_1_stem}, + {"pt", ENC_UTF_8, portuguese_UTF_8_create_env, portuguese_UTF_8_close_env, portuguese_UTF_8_stem}, + {"ru", ENC_KOI8_R, russian_KOI8_R_create_env, russian_KOI8_R_close_env, russian_KOI8_R_stem}, + {"ru", ENC_UTF_8, russian_UTF_8_create_env, russian_UTF_8_close_env, russian_UTF_8_stem}, + {"rus", ENC_KOI8_R, russian_KOI8_R_create_env, russian_KOI8_R_close_env, russian_KOI8_R_stem}, + {"rus", ENC_UTF_8, russian_UTF_8_create_env, russian_UTF_8_close_env, russian_UTF_8_stem}, + {"russian", ENC_KOI8_R, russian_KOI8_R_create_env, russian_KOI8_R_close_env, russian_KOI8_R_stem}, + {"russian", ENC_UTF_8, russian_UTF_8_create_env, russian_UTF_8_close_env, russian_UTF_8_stem}, + {"spa", ENC_ISO_8859_1, spanish_ISO_8859_1_create_env, spanish_ISO_8859_1_close_env, spanish_ISO_8859_1_stem}, + {"spa", ENC_UTF_8, spanish_UTF_8_create_env, spanish_UTF_8_close_env, spanish_UTF_8_stem}, + {"spanish", ENC_ISO_8859_1, spanish_ISO_8859_1_create_env, spanish_ISO_8859_1_close_env, spanish_ISO_8859_1_stem}, + {"spanish", ENC_UTF_8, spanish_UTF_8_create_env, spanish_UTF_8_close_env, spanish_UTF_8_stem}, + {"sv", ENC_ISO_8859_1, swedish_ISO_8859_1_create_env, swedish_ISO_8859_1_close_env, swedish_ISO_8859_1_stem}, + {"sv", ENC_UTF_8, swedish_UTF_8_create_env, swedish_UTF_8_close_env, swedish_UTF_8_stem}, + {"swe", ENC_ISO_8859_1, swedish_ISO_8859_1_create_env, swedish_ISO_8859_1_close_env, swedish_ISO_8859_1_stem}, + {"swe", ENC_UTF_8, swedish_UTF_8_create_env, swedish_UTF_8_close_env, swedish_UTF_8_stem}, + {"swedish", ENC_ISO_8859_1, swedish_ISO_8859_1_create_env, swedish_ISO_8859_1_close_env, swedish_ISO_8859_1_stem}, + {"swedish", ENC_UTF_8, swedish_UTF_8_create_env, swedish_UTF_8_close_env, swedish_UTF_8_stem}, + {0,0,0,0,0} +}; +static const char * algorithm_names[] = { + "danish", + "dutch", + "english", + "finnish", + "french", + "german", + "italian", + "norwegian", + "porter", + "portuguese", + "russian", + "spanish", + "swedish", + 0 +}; +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/runtime/api.c b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/runtime/api.c new file mode 100644 index 0000000..9dd5a3b --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/runtime/api.c @@ -0,0 +1,69 @@ + +#include /* for calloc, free */ +#include "header.h" + +extern struct SN_env * SN_create_env(int S_size, int I_size, int B_size) +{ + struct SN_env * z = (struct SN_env *) calloc(1, sizeof(struct SN_env)); + if (z == NULL) return NULL; + z->p = create_s(); + if (z->p == NULL) goto error; + if (S_size) + { + int i; + z->S = (symbol * *) calloc(S_size, sizeof(symbol *)); + if (z->S == NULL) goto error; + + for (i = 0; i < S_size; i++) + { + z->S[i] = create_s(); + if (z->S[i] == NULL) goto error; + } + z->S_size = S_size; + } + + if (I_size) + { + z->I = (int *) calloc(I_size, sizeof(int)); + if (z->I == NULL) goto error; + z->I_size = I_size; + } + + if (B_size) + { + z->B = (symbol *) calloc(B_size, sizeof(symbol)); + if (z->B == NULL) goto error; + z->B_size = B_size; + } + + return z; +error: + SN_close_env(z); + return NULL; +} + +extern void SN_close_env(struct SN_env * z) +{ + if (z == NULL) return; + if (z->S_size) + { + int i; + for (i = 0; i < z->S_size; i++) + { + lose_s(z->S[i]); + } + free(z->S); + } + if (z->I_size) free(z->I); + if (z->B_size) free(z->B); + if (z->p) lose_s(z->p); + free(z); +} + +extern int SN_set_current(struct SN_env * z, int size, const symbol * s) +{ + int err = replace_s(z, 0, z->l, size, s, NULL); + z->c = 0; + return err; +} + diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/runtime/api.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/runtime/api.h new file mode 100644 index 0000000..7338dee --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/runtime/api.h @@ -0,0 +1,30 @@ +#ifndef LIBSTEMMER_RUNTIME_API_H +#define LIBSTEMMER_RUNTIME_API_H + +typedef unsigned char symbol; + +/* Or replace 'char' above with 'short' for 16 bit characters. + + More precisely, replace 'char' with whatever type guarantees the + character width you need. Note however that sizeof(symbol) should divide + HEAD, defined in header.h as 2*sizeof(int), without remainder, otherwise + there is an alignment problem. In the unlikely event of a problem here, + consult Martin Porter. + +*/ + +struct SN_env { + symbol * p; + int c; int a; int l; int lb; int bra; int ket; + int S_size; int I_size; int B_size; + symbol * * S; + int * I; + symbol * B; +}; + +extern struct SN_env * SN_create_env(int S_size, int I_size, int B_size); +extern void SN_close_env(struct SN_env * z); + +extern int SN_set_current(struct SN_env * z, int size, const symbol * s); + +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/runtime/header.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/runtime/header.h new file mode 100644 index 0000000..af02b5e --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/runtime/header.h @@ -0,0 +1,61 @@ +#ifndef LIBSTEMMER_RUNTIME_HEADER_H +#define LIBSTEMMER_RUNTIME_HEADER_H + +#include + +#include "api.h" + +#define MAXINT INT_MAX +#define MININT INT_MIN + +#define HEAD 2*sizeof(int) + +#define SIZE(p) ((int *)(p))[-1] +#define SET_SIZE(p, n) ((int *)(p))[-1] = n +#define CAPACITY(p) ((int *)(p))[-2] + +struct among +{ int s_size; /* number of chars in string */ + symbol * s; /* search string */ + int substring_i;/* index to longest matching substring */ + int result; /* result of the lookup */ + int (* function)(struct SN_env *); +}; + +extern symbol * create_s(void); +extern void lose_s(symbol * p); + +extern int skip_utf8(const symbol * p, int c, int lb, int l, int n); + +extern int in_grouping_U(struct SN_env * z, unsigned char * s, int min, int max); +extern int in_grouping_b_U(struct SN_env * z, unsigned char * s, int min, int max); +extern int out_grouping_U(struct SN_env * z, unsigned char * s, int min, int max); +extern int out_grouping_b_U(struct SN_env * z, unsigned char * s, int min, int max); + +extern int in_grouping(struct SN_env * z, unsigned char * s, int min, int max); +extern int in_grouping_b(struct SN_env * z, unsigned char * s, int min, int max); +extern int out_grouping(struct SN_env * z, unsigned char * s, int min, int max); +extern int out_grouping_b(struct SN_env * z, unsigned char * s, int min, int max); + +extern int eq_s(struct SN_env * z, int s_size, symbol * s); +extern int eq_s_b(struct SN_env * z, int s_size, symbol * s); +extern int eq_v(struct SN_env * z, symbol * p); +extern int eq_v_b(struct SN_env * z, symbol * p); + +extern int find_among(struct SN_env * z, struct among * v, int v_size); +extern int find_among_b(struct SN_env * z, struct among * v, int v_size); + +extern int replace_s(struct SN_env * z, int c_bra, int c_ket, int s_size, const symbol * s, int * adjustment); +extern int slice_from_s(struct SN_env * z, int s_size, symbol * s); +extern int slice_from_v(struct SN_env * z, symbol * p); +extern int slice_del(struct SN_env * z); + +extern int insert_s(struct SN_env * z, int bra, int ket, int s_size, symbol * s); +extern int insert_v(struct SN_env * z, int bra, int ket, symbol * p); + +extern symbol * slice_to(struct SN_env * z, symbol * p); +extern symbol * assign_to(struct SN_env * z, symbol * p); + +extern void debug(struct SN_env * z, int number, int line_count); + +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/runtime/utilities.c b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/runtime/utilities.c new file mode 100644 index 0000000..a6bfa5c --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/runtime/utilities.c @@ -0,0 +1,446 @@ + +#include +#include +#include + +#include "header.h" + +#define unless(C) if(!(C)) + +#define CREATE_SIZE 1 + +extern symbol * create_s(void) { + symbol * p; + void * mem = malloc(HEAD + (CREATE_SIZE + 1) * sizeof(symbol)); + if (mem == NULL) return NULL; + p = (symbol *) (HEAD + (char *) mem); + CAPACITY(p) = CREATE_SIZE; + SET_SIZE(p, CREATE_SIZE); + return p; +} + +extern void lose_s(symbol * p) { + if (p == NULL) return; + free((char *) p - HEAD); +} + +/* + new_p = X_skip_utf8(p, c, lb, l, n); skips n characters forwards from p + c + if n +ve, or n characters backwards from p +c - 1 if n -ve. new_p is the new + position, or 0 on failure. + + -- used to implement hop and next in the utf8 case. +*/ + +extern int skip_utf8(const symbol * p, int c, int lb, int l, int n) { + int b; + if (n >= 0) { + for (; n > 0; n--) { + if (c >= l) return -1; + b = p[c++]; + if (b >= 0xC0) { /* 1100 0000 */ + while (c < l) { + b = p[c]; + if (b >= 0xC0 || b < 0x80) break; + /* break unless b is 10------ */ + c++; + } + } + } + } else { + for (; n < 0; n++) { + if (c <= lb) return -1; + b = p[--c]; + if (b >= 0x80) { /* 1000 0000 */ + while (c > lb) { + b = p[c]; + if (b >= 0xC0) break; /* 1100 0000 */ + c--; + } + } + } + } + return c; +} + +/* Code for character groupings: utf8 cases */ + +static int get_utf8(const symbol * p, int c, int l, int * slot) { + int b0, b1; + if (c >= l) return 0; + b0 = p[c++]; + if (b0 < 0xC0 || c == l) { /* 1100 0000 */ + * slot = b0; return 1; + } + b1 = p[c++]; + if (b0 < 0xE0 || c == l) { /* 1110 0000 */ + * slot = (b0 & 0x1F) << 6 | (b1 & 0x3F); return 2; + } + * slot = (b0 & 0xF) << 12 | (b1 & 0x3F) << 6 | (*p & 0x3F); return 3; +} + +static int get_b_utf8(const symbol * p, int c, int lb, int * slot) { + int b0, b1; + if (c <= lb) return 0; + b0 = p[--c]; + if (b0 < 0x80 || c == lb) { /* 1000 0000 */ + * slot = b0; return 1; + } + b1 = p[--c]; + if (b1 >= 0xC0 || c == lb) { /* 1100 0000 */ + * slot = (b1 & 0x1F) << 6 | (b0 & 0x3F); return 2; + } + * slot = (*p & 0xF) << 12 | (b1 & 0x3F) << 6 | (b0 & 0x3F); return 3; +} + +extern int in_grouping_U(struct SN_env * z, unsigned char * s, int min, int max) { + int ch; + int w = get_utf8(z->p, z->c, z->l, & ch); + unless (w) return 0; + if (ch > max || (ch -= min) < 0 || (s[ch >> 3] & (0X1 << (ch & 0X7))) == 0) return 0; + z->c += w; return 1; +} + +extern int in_grouping_b_U(struct SN_env * z, unsigned char * s, int min, int max) { + int ch; + int w = get_b_utf8(z->p, z->c, z->lb, & ch); + unless (w) return 0; + if (ch > max || (ch -= min) < 0 || (s[ch >> 3] & (0X1 << (ch & 0X7))) == 0) return 0; + z->c -= w; return 1; +} + +extern int out_grouping_U(struct SN_env * z, unsigned char * s, int min, int max) { + int ch; + int w = get_utf8(z->p, z->c, z->l, & ch); + unless (w) return 0; + unless (ch > max || (ch -= min) < 0 || (s[ch >> 3] & (0X1 << (ch & 0X7))) == 0) return 0; + z->c += w; return 1; +} + +extern int out_grouping_b_U(struct SN_env * z, unsigned char * s, int min, int max) { + int ch; + int w = get_b_utf8(z->p, z->c, z->lb, & ch); + unless (w) return 0; + unless (ch > max || (ch -= min) < 0 || (s[ch >> 3] & (0X1 << (ch & 0X7))) == 0) return 0; + z->c -= w; return 1; +} + +/* Code for character groupings: non-utf8 cases */ + +extern int in_grouping(struct SN_env * z, unsigned char * s, int min, int max) { + int ch; + if (z->c >= z->l) return 0; + ch = z->p[z->c]; + if (ch > max || (ch -= min) < 0 || (s[ch >> 3] & (0X1 << (ch & 0X7))) == 0) return 0; + z->c++; return 1; +} + +extern int in_grouping_b(struct SN_env * z, unsigned char * s, int min, int max) { + int ch; + if (z->c <= z->lb) return 0; + ch = z->p[z->c - 1]; + if (ch > max || (ch -= min) < 0 || (s[ch >> 3] & (0X1 << (ch & 0X7))) == 0) return 0; + z->c--; return 1; +} + +extern int out_grouping(struct SN_env * z, unsigned char * s, int min, int max) { + int ch; + if (z->c >= z->l) return 0; + ch = z->p[z->c]; + unless (ch > max || (ch -= min) < 0 || (s[ch >> 3] & (0X1 << (ch & 0X7))) == 0) return 0; + z->c++; return 1; +} + +extern int out_grouping_b(struct SN_env * z, unsigned char * s, int min, int max) { + int ch; + if (z->c <= z->lb) return 0; + ch = z->p[z->c - 1]; + unless (ch > max || (ch -= min) < 0 || (s[ch >> 3] & (0X1 << (ch & 0X7))) == 0) return 0; + z->c--; return 1; +} + +extern int eq_s(struct SN_env * z, int s_size, symbol * s) { + if (z->l - z->c < s_size || memcmp(z->p + z->c, s, s_size * sizeof(symbol)) != 0) return 0; + z->c += s_size; return 1; +} + +extern int eq_s_b(struct SN_env * z, int s_size, symbol * s) { + if (z->c - z->lb < s_size || memcmp(z->p + z->c - s_size, s, s_size * sizeof(symbol)) != 0) return 0; + z->c -= s_size; return 1; +} + +extern int eq_v(struct SN_env * z, symbol * p) { + return eq_s(z, SIZE(p), p); +} + +extern int eq_v_b(struct SN_env * z, symbol * p) { + return eq_s_b(z, SIZE(p), p); +} + +extern int find_among(struct SN_env * z, struct among * v, int v_size) { + + int i = 0; + int j = v_size; + + int c = z->c; int l = z->l; + symbol * q = z->p + c; + + struct among * w; + + int common_i = 0; + int common_j = 0; + + int first_key_inspected = 0; + + while(1) { + int k = i + ((j - i) >> 1); + int diff = 0; + int common = common_i < common_j ? common_i : common_j; /* smaller */ + w = v + k; + { + int i; for (i = common; i < w->s_size; i++) { + if (c + common == l) { diff = -1; break; } + diff = q[common] - w->s[i]; + if (diff != 0) break; + common++; + } + } + if (diff < 0) { j = k; common_j = common; } + else { i = k; common_i = common; } + if (j - i <= 1) { + if (i > 0) break; /* v->s has been inspected */ + if (j == i) break; /* only one item in v */ + + /* - but now we need to go round once more to get + v->s inspected. This looks messy, but is actually + the optimal approach. */ + + if (first_key_inspected) break; + first_key_inspected = 1; + } + } + while(1) { + w = v + i; + if (common_i >= w->s_size) { + z->c = c + w->s_size; + if (w->function == 0) return w->result; + { + int res = w->function(z); + z->c = c + w->s_size; + if (res) return w->result; + } + } + i = w->substring_i; + if (i < 0) return 0; + } +} + +/* find_among_b is for backwards processing. Same comments apply */ + +extern int find_among_b(struct SN_env * z, struct among * v, int v_size) { + + int i = 0; + int j = v_size; + + int c = z->c; int lb = z->lb; + symbol * q = z->p + c - 1; + + struct among * w; + + int common_i = 0; + int common_j = 0; + + int first_key_inspected = 0; + + while(1) { + int k = i + ((j - i) >> 1); + int diff = 0; + int common = common_i < common_j ? common_i : common_j; + w = v + k; + { + int i; for (i = w->s_size - 1 - common; i >= 0; i--) { + if (c - common == lb) { diff = -1; break; } + diff = q[- common] - w->s[i]; + if (diff != 0) break; + common++; + } + } + if (diff < 0) { j = k; common_j = common; } + else { i = k; common_i = common; } + if (j - i <= 1) { + if (i > 0) break; + if (j == i) break; + if (first_key_inspected) break; + first_key_inspected = 1; + } + } + while(1) { + w = v + i; + if (common_i >= w->s_size) { + z->c = c - w->s_size; + if (w->function == 0) return w->result; + { + int res = w->function(z); + z->c = c - w->s_size; + if (res) return w->result; + } + } + i = w->substring_i; + if (i < 0) return 0; + } +} + + +/* Increase the size of the buffer pointed to by p to at least n symbols. + * If insufficient memory, returns NULL and frees the old buffer. + */ +static symbol * increase_size(symbol * p, int n) { + symbol * q; + int new_size = n + 20; + void * mem = realloc((char *) p - HEAD, + HEAD + (new_size + 1) * sizeof(symbol)); + if (mem == NULL) { + lose_s(p); + return NULL; + } + q = (symbol *) (HEAD + (char *)mem); + CAPACITY(q) = new_size; + return q; +} + +/* to replace symbols between c_bra and c_ket in z->p by the + s_size symbols at s. + Returns 0 on success, -1 on error. + Also, frees z->p (and sets it to NULL) on error. +*/ +extern int replace_s(struct SN_env * z, int c_bra, int c_ket, int s_size, const symbol * s, int * adjptr) +{ + int adjustment; + int len; + if (z->p == NULL) { + z->p = create_s(); + if (z->p == NULL) return -1; + } + adjustment = s_size - (c_ket - c_bra); + len = SIZE(z->p); + if (adjustment != 0) { + if (adjustment + len > CAPACITY(z->p)) { + z->p = increase_size(z->p, adjustment + len); + if (z->p == NULL) return -1; + } + memmove(z->p + c_ket + adjustment, + z->p + c_ket, + (len - c_ket) * sizeof(symbol)); + SET_SIZE(z->p, adjustment + len); + z->l += adjustment; + if (z->c >= c_ket) + z->c += adjustment; + else + if (z->c > c_bra) + z->c = c_bra; + } + unless (s_size == 0) memmove(z->p + c_bra, s, s_size * sizeof(symbol)); + if (adjptr != NULL) + *adjptr = adjustment; + return 0; +} + +static int slice_check(struct SN_env * z) { + + if (z->bra < 0 || + z->bra > z->ket || + z->ket > z->l || + z->p == NULL || + z->l > SIZE(z->p)) /* this line could be removed */ + { +#if 0 + fprintf(stderr, "faulty slice operation:\n"); + debug(z, -1, 0); +#endif + return -1; + } + return 0; +} + +extern int slice_from_s(struct SN_env * z, int s_size, symbol * s) { + if (slice_check(z)) return -1; + return replace_s(z, z->bra, z->ket, s_size, s, NULL); +} + +extern int slice_from_v(struct SN_env * z, symbol * p) { + return slice_from_s(z, SIZE(p), p); +} + +extern int slice_del(struct SN_env * z) { + return slice_from_s(z, 0, 0); +} + +extern int insert_s(struct SN_env * z, int bra, int ket, int s_size, symbol * s) { + int adjustment; + if (replace_s(z, bra, ket, s_size, s, &adjustment)) + return -1; + if (bra <= z->bra) z->bra += adjustment; + if (bra <= z->ket) z->ket += adjustment; + return 0; +} + +extern int insert_v(struct SN_env * z, int bra, int ket, symbol * p) { + int adjustment; + if (replace_s(z, bra, ket, SIZE(p), p, &adjustment)) + return -1; + if (bra <= z->bra) z->bra += adjustment; + if (bra <= z->ket) z->ket += adjustment; + return 0; +} + +extern symbol * slice_to(struct SN_env * z, symbol * p) { + if (slice_check(z)) { + lose_s(p); + return NULL; + } + { + int len = z->ket - z->bra; + if (CAPACITY(p) < len) { + p = increase_size(p, len); + if (p == NULL) + return NULL; + } + memmove(p, z->p + z->bra, len * sizeof(symbol)); + SET_SIZE(p, len); + } + return p; +} + +extern symbol * assign_to(struct SN_env * z, symbol * p) { + int len = z->l; + if (CAPACITY(p) < len) { + p = increase_size(p, len); + if (p == NULL) + return NULL; + } + memmove(p, z->p, len * sizeof(symbol)); + SET_SIZE(p, len); + return p; +} + +#if 0 +extern void debug(struct SN_env * z, int number, int line_count) { + int i; + int limit = SIZE(z->p); + /*if (number >= 0) printf("%3d (line %4d): '", number, line_count);*/ + if (number >= 0) printf("%3d (line %4d): [%d]'", number, line_count,limit); + for (i = 0; i <= limit; i++) { + if (z->lb == i) printf("{"); + if (z->bra == i) printf("["); + if (z->c == i) printf("|"); + if (z->ket == i) printf("]"); + if (z->l == i) printf("}"); + if (i < limit) + { int ch = z->p[i]; + if (ch == 0) ch = '#'; + printf("%c", ch); + } + } + printf("'\n"); +} +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_danish.c b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_danish.c new file mode 100644 index 0000000..fe0fa76 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_danish.c @@ -0,0 +1,338 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#include "../runtime/header.h" + +extern int danish_ISO_8859_1_stem(struct SN_env * z); +static int r_undouble(struct SN_env * z); +static int r_other_suffix(struct SN_env * z); +static int r_consonant_pair(struct SN_env * z); +static int r_main_suffix(struct SN_env * z); +static int r_mark_regions(struct SN_env * z); + +extern struct SN_env * danish_ISO_8859_1_create_env(void); +extern void danish_ISO_8859_1_close_env(struct SN_env * z); + +static symbol s_0_0[3] = { 'h', 'e', 'd' }; +static symbol s_0_1[5] = { 'e', 't', 'h', 'e', 'd' }; +static symbol s_0_2[4] = { 'e', 'r', 'e', 'd' }; +static symbol s_0_3[1] = { 'e' }; +static symbol s_0_4[5] = { 'e', 'r', 'e', 'd', 'e' }; +static symbol s_0_5[4] = { 'e', 'n', 'd', 'e' }; +static symbol s_0_6[6] = { 'e', 'r', 'e', 'n', 'd', 'e' }; +static symbol s_0_7[3] = { 'e', 'n', 'e' }; +static symbol s_0_8[4] = { 'e', 'r', 'n', 'e' }; +static symbol s_0_9[3] = { 'e', 'r', 'e' }; +static symbol s_0_10[2] = { 'e', 'n' }; +static symbol s_0_11[5] = { 'h', 'e', 'd', 'e', 'n' }; +static symbol s_0_12[4] = { 'e', 'r', 'e', 'n' }; +static symbol s_0_13[2] = { 'e', 'r' }; +static symbol s_0_14[5] = { 'h', 'e', 'd', 'e', 'r' }; +static symbol s_0_15[4] = { 'e', 'r', 'e', 'r' }; +static symbol s_0_16[1] = { 's' }; +static symbol s_0_17[4] = { 'h', 'e', 'd', 's' }; +static symbol s_0_18[2] = { 'e', 's' }; +static symbol s_0_19[5] = { 'e', 'n', 'd', 'e', 's' }; +static symbol s_0_20[7] = { 'e', 'r', 'e', 'n', 'd', 'e', 's' }; +static symbol s_0_21[4] = { 'e', 'n', 'e', 's' }; +static symbol s_0_22[5] = { 'e', 'r', 'n', 'e', 's' }; +static symbol s_0_23[4] = { 'e', 'r', 'e', 's' }; +static symbol s_0_24[3] = { 'e', 'n', 's' }; +static symbol s_0_25[6] = { 'h', 'e', 'd', 'e', 'n', 's' }; +static symbol s_0_26[5] = { 'e', 'r', 'e', 'n', 's' }; +static symbol s_0_27[3] = { 'e', 'r', 's' }; +static symbol s_0_28[3] = { 'e', 't', 's' }; +static symbol s_0_29[5] = { 'e', 'r', 'e', 't', 's' }; +static symbol s_0_30[2] = { 'e', 't' }; +static symbol s_0_31[4] = { 'e', 'r', 'e', 't' }; + +static struct among a_0[32] = +{ +/* 0 */ { 3, s_0_0, -1, 1, 0}, +/* 1 */ { 5, s_0_1, 0, 1, 0}, +/* 2 */ { 4, s_0_2, -1, 1, 0}, +/* 3 */ { 1, s_0_3, -1, 1, 0}, +/* 4 */ { 5, s_0_4, 3, 1, 0}, +/* 5 */ { 4, s_0_5, 3, 1, 0}, +/* 6 */ { 6, s_0_6, 5, 1, 0}, +/* 7 */ { 3, s_0_7, 3, 1, 0}, +/* 8 */ { 4, s_0_8, 3, 1, 0}, +/* 9 */ { 3, s_0_9, 3, 1, 0}, +/* 10 */ { 2, s_0_10, -1, 1, 0}, +/* 11 */ { 5, s_0_11, 10, 1, 0}, +/* 12 */ { 4, s_0_12, 10, 1, 0}, +/* 13 */ { 2, s_0_13, -1, 1, 0}, +/* 14 */ { 5, s_0_14, 13, 1, 0}, +/* 15 */ { 4, s_0_15, 13, 1, 0}, +/* 16 */ { 1, s_0_16, -1, 2, 0}, +/* 17 */ { 4, s_0_17, 16, 1, 0}, +/* 18 */ { 2, s_0_18, 16, 1, 0}, +/* 19 */ { 5, s_0_19, 18, 1, 0}, +/* 20 */ { 7, s_0_20, 19, 1, 0}, +/* 21 */ { 4, s_0_21, 18, 1, 0}, +/* 22 */ { 5, s_0_22, 18, 1, 0}, +/* 23 */ { 4, s_0_23, 18, 1, 0}, +/* 24 */ { 3, s_0_24, 16, 1, 0}, +/* 25 */ { 6, s_0_25, 24, 1, 0}, +/* 26 */ { 5, s_0_26, 24, 1, 0}, +/* 27 */ { 3, s_0_27, 16, 1, 0}, +/* 28 */ { 3, s_0_28, 16, 1, 0}, +/* 29 */ { 5, s_0_29, 28, 1, 0}, +/* 30 */ { 2, s_0_30, -1, 1, 0}, +/* 31 */ { 4, s_0_31, 30, 1, 0} +}; + +static symbol s_1_0[2] = { 'g', 'd' }; +static symbol s_1_1[2] = { 'd', 't' }; +static symbol s_1_2[2] = { 'g', 't' }; +static symbol s_1_3[2] = { 'k', 't' }; + +static struct among a_1[4] = +{ +/* 0 */ { 2, s_1_0, -1, -1, 0}, +/* 1 */ { 2, s_1_1, -1, -1, 0}, +/* 2 */ { 2, s_1_2, -1, -1, 0}, +/* 3 */ { 2, s_1_3, -1, -1, 0} +}; + +static symbol s_2_0[2] = { 'i', 'g' }; +static symbol s_2_1[3] = { 'l', 'i', 'g' }; +static symbol s_2_2[4] = { 'e', 'l', 'i', 'g' }; +static symbol s_2_3[3] = { 'e', 'l', 's' }; +static symbol s_2_4[4] = { 'l', 0xF8, 's', 't' }; + +static struct among a_2[5] = +{ +/* 0 */ { 2, s_2_0, -1, 1, 0}, +/* 1 */ { 3, s_2_1, 0, 1, 0}, +/* 2 */ { 4, s_2_2, 1, 1, 0}, +/* 3 */ { 3, s_2_3, -1, 1, 0}, +/* 4 */ { 4, s_2_4, -1, 2, 0} +}; + +static unsigned char g_v[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 128 }; + +static unsigned char g_s_ending[] = { 239, 254, 42, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16 }; + +static symbol s_0[] = { 's', 't' }; +static symbol s_1[] = { 'i', 'g' }; +static symbol s_2[] = { 'l', 0xF8, 's' }; + +static int r_mark_regions(struct SN_env * z) { + z->I[0] = z->l; + { int c_test = z->c; /* test, line 33 */ + { int c = z->c + 3; + if (0 > c || c > z->l) return 0; + z->c = c; /* hop, line 33 */ + } + z->I[1] = z->c; /* setmark x, line 33 */ + z->c = c_test; + } + while(1) { /* goto, line 34 */ + int c = z->c; + if (!(in_grouping(z, g_v, 97, 248))) goto lab0; + z->c = c; + break; + lab0: + z->c = c; + if (z->c >= z->l) return 0; + z->c++; /* goto, line 34 */ + } + while(1) { /* gopast, line 34 */ + if (!(out_grouping(z, g_v, 97, 248))) goto lab1; + break; + lab1: + if (z->c >= z->l) return 0; + z->c++; /* gopast, line 34 */ + } + z->I[0] = z->c; /* setmark p1, line 34 */ + /* try, line 35 */ + if (!(z->I[0] < z->I[1])) goto lab2; + z->I[0] = z->I[1]; +lab2: + return 1; +} + +static int r_main_suffix(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 41 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 41 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 41 */ + among_var = find_among_b(z, a_0, 32); /* substring, line 41 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 41 */ + z->lb = m3; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 48 */ + if (ret < 0) return ret; + } + break; + case 2: + if (!(in_grouping_b(z, g_s_ending, 97, 229))) return 0; + { int ret; + ret = slice_del(z); /* delete, line 50 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_consonant_pair(struct SN_env * z) { + { int m_test = z->l - z->c; /* test, line 55 */ + { int m3; /* setlimit, line 56 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 56 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 56 */ + if (!(find_among_b(z, a_1, 4))) { z->lb = m3; return 0; } /* substring, line 56 */ + z->bra = z->c; /* ], line 56 */ + z->lb = m3; + } + z->c = z->l - m_test; + } + if (z->c <= z->lb) return 0; + z->c--; /* next, line 62 */ + z->bra = z->c; /* ], line 62 */ + { int ret; + ret = slice_del(z); /* delete, line 62 */ + if (ret < 0) return ret; + } + return 1; +} + +static int r_other_suffix(struct SN_env * z) { + int among_var; + { int m = z->l - z->c; (void) m; /* do, line 66 */ + z->ket = z->c; /* [, line 66 */ + if (!(eq_s_b(z, 2, s_0))) goto lab0; + z->bra = z->c; /* ], line 66 */ + if (!(eq_s_b(z, 2, s_1))) goto lab0; + { int ret; + ret = slice_del(z); /* delete, line 66 */ + if (ret < 0) return ret; + } + lab0: + z->c = z->l - m; + } + { int m3; /* setlimit, line 67 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 67 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 67 */ + among_var = find_among_b(z, a_2, 5); /* substring, line 67 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 67 */ + z->lb = m3; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 70 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* do, line 70 */ + { int ret = r_consonant_pair(z); + if (ret == 0) goto lab1; /* call consonant_pair, line 70 */ + if (ret < 0) return ret; + } + lab1: + z->c = z->l - m; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 3, s_2); /* <-, line 72 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_undouble(struct SN_env * z) { + { int m3; /* setlimit, line 76 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 76 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 76 */ + if (!(out_grouping_b(z, g_v, 97, 248))) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 76 */ + z->S[0] = slice_to(z, z->S[0]); /* -> ch, line 76 */ + if (z->S[0] == 0) return -1; /* -> ch, line 76 */ + z->lb = m3; + } + if (!(eq_v_b(z, z->S[0]))) return 0; /* name ch, line 77 */ + { int ret; + ret = slice_del(z); /* delete, line 78 */ + if (ret < 0) return ret; + } + return 1; +} + +extern int danish_ISO_8859_1_stem(struct SN_env * z) { + { int c = z->c; /* do, line 84 */ + { int ret = r_mark_regions(z); + if (ret == 0) goto lab0; /* call mark_regions, line 84 */ + if (ret < 0) return ret; + } + lab0: + z->c = c; + } + z->lb = z->c; z->c = z->l; /* backwards, line 85 */ + + { int m = z->l - z->c; (void) m; /* do, line 86 */ + { int ret = r_main_suffix(z); + if (ret == 0) goto lab1; /* call main_suffix, line 86 */ + if (ret < 0) return ret; + } + lab1: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 87 */ + { int ret = r_consonant_pair(z); + if (ret == 0) goto lab2; /* call consonant_pair, line 87 */ + if (ret < 0) return ret; + } + lab2: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 88 */ + { int ret = r_other_suffix(z); + if (ret == 0) goto lab3; /* call other_suffix, line 88 */ + if (ret < 0) return ret; + } + lab3: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 89 */ + { int ret = r_undouble(z); + if (ret == 0) goto lab4; /* call undouble, line 89 */ + if (ret < 0) return ret; + } + lab4: + z->c = z->l - m; + } + z->c = z->lb; + return 1; +} + +extern struct SN_env * danish_ISO_8859_1_create_env(void) { return SN_create_env(1, 2, 0); } + +extern void danish_ISO_8859_1_close_env(struct SN_env * z) { SN_close_env(z); } + diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_danish.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_danish.h new file mode 100644 index 0000000..49c5559 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_danish.h @@ -0,0 +1,16 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern struct SN_env * danish_ISO_8859_1_create_env(void); +extern void danish_ISO_8859_1_close_env(struct SN_env * z); + +extern int danish_ISO_8859_1_stem(struct SN_env * z); + +#ifdef __cplusplus +} +#endif + diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_dutch.c b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_dutch.c new file mode 100644 index 0000000..36de3b5 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_dutch.c @@ -0,0 +1,635 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#include "../runtime/header.h" + +extern int dutch_ISO_8859_1_stem(struct SN_env * z); +static int r_standard_suffix(struct SN_env * z); +static int r_undouble(struct SN_env * z); +static int r_R2(struct SN_env * z); +static int r_R1(struct SN_env * z); +static int r_mark_regions(struct SN_env * z); +static int r_en_ending(struct SN_env * z); +static int r_e_ending(struct SN_env * z); +static int r_postlude(struct SN_env * z); +static int r_prelude(struct SN_env * z); + +extern struct SN_env * dutch_ISO_8859_1_create_env(void); +extern void dutch_ISO_8859_1_close_env(struct SN_env * z); + +static symbol s_0_1[1] = { 0xE1 }; +static symbol s_0_2[1] = { 0xE4 }; +static symbol s_0_3[1] = { 0xE9 }; +static symbol s_0_4[1] = { 0xEB }; +static symbol s_0_5[1] = { 0xED }; +static symbol s_0_6[1] = { 0xEF }; +static symbol s_0_7[1] = { 0xF3 }; +static symbol s_0_8[1] = { 0xF6 }; +static symbol s_0_9[1] = { 0xFA }; +static symbol s_0_10[1] = { 0xFC }; + +static struct among a_0[11] = +{ +/* 0 */ { 0, 0, -1, 6, 0}, +/* 1 */ { 1, s_0_1, 0, 1, 0}, +/* 2 */ { 1, s_0_2, 0, 1, 0}, +/* 3 */ { 1, s_0_3, 0, 2, 0}, +/* 4 */ { 1, s_0_4, 0, 2, 0}, +/* 5 */ { 1, s_0_5, 0, 3, 0}, +/* 6 */ { 1, s_0_6, 0, 3, 0}, +/* 7 */ { 1, s_0_7, 0, 4, 0}, +/* 8 */ { 1, s_0_8, 0, 4, 0}, +/* 9 */ { 1, s_0_9, 0, 5, 0}, +/* 10 */ { 1, s_0_10, 0, 5, 0} +}; + +static symbol s_1_1[1] = { 'I' }; +static symbol s_1_2[1] = { 'Y' }; + +static struct among a_1[3] = +{ +/* 0 */ { 0, 0, -1, 3, 0}, +/* 1 */ { 1, s_1_1, 0, 2, 0}, +/* 2 */ { 1, s_1_2, 0, 1, 0} +}; + +static symbol s_2_0[2] = { 'd', 'd' }; +static symbol s_2_1[2] = { 'k', 'k' }; +static symbol s_2_2[2] = { 't', 't' }; + +static struct among a_2[3] = +{ +/* 0 */ { 2, s_2_0, -1, -1, 0}, +/* 1 */ { 2, s_2_1, -1, -1, 0}, +/* 2 */ { 2, s_2_2, -1, -1, 0} +}; + +static symbol s_3_0[3] = { 'e', 'n', 'e' }; +static symbol s_3_1[2] = { 's', 'e' }; +static symbol s_3_2[2] = { 'e', 'n' }; +static symbol s_3_3[5] = { 'h', 'e', 'd', 'e', 'n' }; +static symbol s_3_4[1] = { 's' }; + +static struct among a_3[5] = +{ +/* 0 */ { 3, s_3_0, -1, 2, 0}, +/* 1 */ { 2, s_3_1, -1, 3, 0}, +/* 2 */ { 2, s_3_2, -1, 2, 0}, +/* 3 */ { 5, s_3_3, 2, 1, 0}, +/* 4 */ { 1, s_3_4, -1, 3, 0} +}; + +static symbol s_4_0[3] = { 'e', 'n', 'd' }; +static symbol s_4_1[2] = { 'i', 'g' }; +static symbol s_4_2[3] = { 'i', 'n', 'g' }; +static symbol s_4_3[4] = { 'l', 'i', 'j', 'k' }; +static symbol s_4_4[4] = { 'b', 'a', 'a', 'r' }; +static symbol s_4_5[3] = { 'b', 'a', 'r' }; + +static struct among a_4[6] = +{ +/* 0 */ { 3, s_4_0, -1, 1, 0}, +/* 1 */ { 2, s_4_1, -1, 2, 0}, +/* 2 */ { 3, s_4_2, -1, 1, 0}, +/* 3 */ { 4, s_4_3, -1, 3, 0}, +/* 4 */ { 4, s_4_4, -1, 4, 0}, +/* 5 */ { 3, s_4_5, -1, 5, 0} +}; + +static symbol s_5_0[2] = { 'a', 'a' }; +static symbol s_5_1[2] = { 'e', 'e' }; +static symbol s_5_2[2] = { 'o', 'o' }; +static symbol s_5_3[2] = { 'u', 'u' }; + +static struct among a_5[4] = +{ +/* 0 */ { 2, s_5_0, -1, -1, 0}, +/* 1 */ { 2, s_5_1, -1, -1, 0}, +/* 2 */ { 2, s_5_2, -1, -1, 0}, +/* 3 */ { 2, s_5_3, -1, -1, 0} +}; + +static unsigned char g_v[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128 }; + +static unsigned char g_v_I[] = { 1, 0, 0, 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128 }; + +static unsigned char g_v_j[] = { 17, 67, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128 }; + +static symbol s_0[] = { 'a' }; +static symbol s_1[] = { 'e' }; +static symbol s_2[] = { 'i' }; +static symbol s_3[] = { 'o' }; +static symbol s_4[] = { 'u' }; +static symbol s_5[] = { 'y' }; +static symbol s_6[] = { 'Y' }; +static symbol s_7[] = { 'i' }; +static symbol s_8[] = { 'I' }; +static symbol s_9[] = { 'y' }; +static symbol s_10[] = { 'Y' }; +static symbol s_11[] = { 'y' }; +static symbol s_12[] = { 'i' }; +static symbol s_13[] = { 'e' }; +static symbol s_14[] = { 'g', 'e', 'm' }; +static symbol s_15[] = { 'h', 'e', 'i', 'd' }; +static symbol s_16[] = { 'h', 'e', 'i', 'd' }; +static symbol s_17[] = { 'c' }; +static symbol s_18[] = { 'e', 'n' }; +static symbol s_19[] = { 'i', 'g' }; +static symbol s_20[] = { 'e' }; +static symbol s_21[] = { 'e' }; + +static int r_prelude(struct SN_env * z) { + int among_var; + { int c_test = z->c; /* test, line 42 */ + while(1) { /* repeat, line 42 */ + int c = z->c; + z->bra = z->c; /* [, line 43 */ + among_var = find_among(z, a_0, 11); /* substring, line 43 */ + if (!(among_var)) goto lab0; + z->ket = z->c; /* ], line 43 */ + switch(among_var) { + case 0: goto lab0; + case 1: + { int ret; + ret = slice_from_s(z, 1, s_0); /* <-, line 45 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 1, s_1); /* <-, line 47 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_from_s(z, 1, s_2); /* <-, line 49 */ + if (ret < 0) return ret; + } + break; + case 4: + { int ret; + ret = slice_from_s(z, 1, s_3); /* <-, line 51 */ + if (ret < 0) return ret; + } + break; + case 5: + { int ret; + ret = slice_from_s(z, 1, s_4); /* <-, line 53 */ + if (ret < 0) return ret; + } + break; + case 6: + if (z->c >= z->l) goto lab0; + z->c++; /* next, line 54 */ + break; + } + continue; + lab0: + z->c = c; + break; + } + z->c = c_test; + } + { int c = z->c; /* try, line 57 */ + z->bra = z->c; /* [, line 57 */ + if (!(eq_s(z, 1, s_5))) { z->c = c; goto lab1; } + z->ket = z->c; /* ], line 57 */ + { int ret; + ret = slice_from_s(z, 1, s_6); /* <-, line 57 */ + if (ret < 0) return ret; + } + lab1: + ; + } + while(1) { /* repeat, line 58 */ + int c = z->c; + while(1) { /* goto, line 58 */ + int c = z->c; + if (!(in_grouping(z, g_v, 97, 232))) goto lab3; + z->bra = z->c; /* [, line 59 */ + { int c = z->c; /* or, line 59 */ + if (!(eq_s(z, 1, s_7))) goto lab5; + z->ket = z->c; /* ], line 59 */ + if (!(in_grouping(z, g_v, 97, 232))) goto lab5; + { int ret; + ret = slice_from_s(z, 1, s_8); /* <-, line 59 */ + if (ret < 0) return ret; + } + goto lab4; + lab5: + z->c = c; + if (!(eq_s(z, 1, s_9))) goto lab3; + z->ket = z->c; /* ], line 60 */ + { int ret; + ret = slice_from_s(z, 1, s_10); /* <-, line 60 */ + if (ret < 0) return ret; + } + } + lab4: + z->c = c; + break; + lab3: + z->c = c; + if (z->c >= z->l) goto lab2; + z->c++; /* goto, line 58 */ + } + continue; + lab2: + z->c = c; + break; + } + return 1; +} + +static int r_mark_regions(struct SN_env * z) { + z->I[0] = z->l; + z->I[1] = z->l; + while(1) { /* gopast, line 69 */ + if (!(in_grouping(z, g_v, 97, 232))) goto lab0; + break; + lab0: + if (z->c >= z->l) return 0; + z->c++; /* gopast, line 69 */ + } + while(1) { /* gopast, line 69 */ + if (!(out_grouping(z, g_v, 97, 232))) goto lab1; + break; + lab1: + if (z->c >= z->l) return 0; + z->c++; /* gopast, line 69 */ + } + z->I[0] = z->c; /* setmark p1, line 69 */ + /* try, line 70 */ + if (!(z->I[0] < 3)) goto lab2; + z->I[0] = 3; +lab2: + while(1) { /* gopast, line 71 */ + if (!(in_grouping(z, g_v, 97, 232))) goto lab3; + break; + lab3: + if (z->c >= z->l) return 0; + z->c++; /* gopast, line 71 */ + } + while(1) { /* gopast, line 71 */ + if (!(out_grouping(z, g_v, 97, 232))) goto lab4; + break; + lab4: + if (z->c >= z->l) return 0; + z->c++; /* gopast, line 71 */ + } + z->I[1] = z->c; /* setmark p2, line 71 */ + return 1; +} + +static int r_postlude(struct SN_env * z) { + int among_var; + while(1) { /* repeat, line 75 */ + int c = z->c; + z->bra = z->c; /* [, line 77 */ + among_var = find_among(z, a_1, 3); /* substring, line 77 */ + if (!(among_var)) goto lab0; + z->ket = z->c; /* ], line 77 */ + switch(among_var) { + case 0: goto lab0; + case 1: + { int ret; + ret = slice_from_s(z, 1, s_11); /* <-, line 78 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 1, s_12); /* <-, line 79 */ + if (ret < 0) return ret; + } + break; + case 3: + if (z->c >= z->l) goto lab0; + z->c++; /* next, line 80 */ + break; + } + continue; + lab0: + z->c = c; + break; + } + return 1; +} + +static int r_R1(struct SN_env * z) { + if (!(z->I[0] <= z->c)) return 0; + return 1; +} + +static int r_R2(struct SN_env * z) { + if (!(z->I[1] <= z->c)) return 0; + return 1; +} + +static int r_undouble(struct SN_env * z) { + { int m_test = z->l - z->c; /* test, line 91 */ + if (!(find_among_b(z, a_2, 3))) return 0; /* among, line 91 */ + z->c = z->l - m_test; + } + z->ket = z->c; /* [, line 91 */ + if (z->c <= z->lb) return 0; + z->c--; /* next, line 91 */ + z->bra = z->c; /* ], line 91 */ + { int ret; + ret = slice_del(z); /* delete, line 91 */ + if (ret < 0) return ret; + } + return 1; +} + +static int r_e_ending(struct SN_env * z) { + z->B[0] = 0; /* unset e_found, line 95 */ + z->ket = z->c; /* [, line 96 */ + if (!(eq_s_b(z, 1, s_13))) return 0; + z->bra = z->c; /* ], line 96 */ + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 96 */ + if (ret < 0) return ret; + } + { int m_test = z->l - z->c; /* test, line 96 */ + if (!(out_grouping_b(z, g_v, 97, 232))) return 0; + z->c = z->l - m_test; + } + { int ret; + ret = slice_del(z); /* delete, line 96 */ + if (ret < 0) return ret; + } + z->B[0] = 1; /* set e_found, line 97 */ + { int ret = r_undouble(z); + if (ret == 0) return 0; /* call undouble, line 98 */ + if (ret < 0) return ret; + } + return 1; +} + +static int r_en_ending(struct SN_env * z) { + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 102 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* and, line 102 */ + if (!(out_grouping_b(z, g_v, 97, 232))) return 0; + z->c = z->l - m; + { int m = z->l - z->c; (void) m; /* not, line 102 */ + if (!(eq_s_b(z, 3, s_14))) goto lab0; + return 0; + lab0: + z->c = z->l - m; + } + } + { int ret; + ret = slice_del(z); /* delete, line 102 */ + if (ret < 0) return ret; + } + { int ret = r_undouble(z); + if (ret == 0) return 0; /* call undouble, line 103 */ + if (ret < 0) return ret; + } + return 1; +} + +static int r_standard_suffix(struct SN_env * z) { + int among_var; + { int m = z->l - z->c; (void) m; /* do, line 107 */ + z->ket = z->c; /* [, line 108 */ + among_var = find_among_b(z, a_3, 5); /* substring, line 108 */ + if (!(among_var)) goto lab0; + z->bra = z->c; /* ], line 108 */ + switch(among_var) { + case 0: goto lab0; + case 1: + { int ret = r_R1(z); + if (ret == 0) goto lab0; /* call R1, line 110 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 4, s_15); /* <-, line 110 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret = r_en_ending(z); + if (ret == 0) goto lab0; /* call en_ending, line 113 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret = r_R1(z); + if (ret == 0) goto lab0; /* call R1, line 116 */ + if (ret < 0) return ret; + } + if (!(out_grouping_b(z, g_v_j, 97, 232))) goto lab0; + { int ret; + ret = slice_del(z); /* delete, line 116 */ + if (ret < 0) return ret; + } + break; + } + lab0: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 120 */ + { int ret = r_e_ending(z); + if (ret == 0) goto lab1; /* call e_ending, line 120 */ + if (ret < 0) return ret; + } + lab1: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 122 */ + z->ket = z->c; /* [, line 122 */ + if (!(eq_s_b(z, 4, s_16))) goto lab2; + z->bra = z->c; /* ], line 122 */ + { int ret = r_R2(z); + if (ret == 0) goto lab2; /* call R2, line 122 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* not, line 122 */ + if (!(eq_s_b(z, 1, s_17))) goto lab3; + goto lab2; + lab3: + z->c = z->l - m; + } + { int ret; + ret = slice_del(z); /* delete, line 122 */ + if (ret < 0) return ret; + } + z->ket = z->c; /* [, line 123 */ + if (!(eq_s_b(z, 2, s_18))) goto lab2; + z->bra = z->c; /* ], line 123 */ + { int ret = r_en_ending(z); + if (ret == 0) goto lab2; /* call en_ending, line 123 */ + if (ret < 0) return ret; + } + lab2: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 126 */ + z->ket = z->c; /* [, line 127 */ + among_var = find_among_b(z, a_4, 6); /* substring, line 127 */ + if (!(among_var)) goto lab4; + z->bra = z->c; /* ], line 127 */ + switch(among_var) { + case 0: goto lab4; + case 1: + { int ret = r_R2(z); + if (ret == 0) goto lab4; /* call R2, line 129 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 129 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* or, line 130 */ + z->ket = z->c; /* [, line 130 */ + if (!(eq_s_b(z, 2, s_19))) goto lab6; + z->bra = z->c; /* ], line 130 */ + { int ret = r_R2(z); + if (ret == 0) goto lab6; /* call R2, line 130 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* not, line 130 */ + if (!(eq_s_b(z, 1, s_20))) goto lab7; + goto lab6; + lab7: + z->c = z->l - m; + } + { int ret; + ret = slice_del(z); /* delete, line 130 */ + if (ret < 0) return ret; + } + goto lab5; + lab6: + z->c = z->l - m; + { int ret = r_undouble(z); + if (ret == 0) goto lab4; /* call undouble, line 130 */ + if (ret < 0) return ret; + } + } + lab5: + break; + case 2: + { int ret = r_R2(z); + if (ret == 0) goto lab4; /* call R2, line 133 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* not, line 133 */ + if (!(eq_s_b(z, 1, s_21))) goto lab8; + goto lab4; + lab8: + z->c = z->l - m; + } + { int ret; + ret = slice_del(z); /* delete, line 133 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret = r_R2(z); + if (ret == 0) goto lab4; /* call R2, line 136 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 136 */ + if (ret < 0) return ret; + } + { int ret = r_e_ending(z); + if (ret == 0) goto lab4; /* call e_ending, line 136 */ + if (ret < 0) return ret; + } + break; + case 4: + { int ret = r_R2(z); + if (ret == 0) goto lab4; /* call R2, line 139 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 139 */ + if (ret < 0) return ret; + } + break; + case 5: + { int ret = r_R2(z); + if (ret == 0) goto lab4; /* call R2, line 142 */ + if (ret < 0) return ret; + } + if (!(z->B[0])) goto lab4; /* Boolean test e_found, line 142 */ + { int ret; + ret = slice_del(z); /* delete, line 142 */ + if (ret < 0) return ret; + } + break; + } + lab4: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 146 */ + if (!(out_grouping_b(z, g_v_I, 73, 232))) goto lab9; + { int m_test = z->l - z->c; /* test, line 148 */ + if (!(find_among_b(z, a_5, 4))) goto lab9; /* among, line 149 */ + if (!(out_grouping_b(z, g_v, 97, 232))) goto lab9; + z->c = z->l - m_test; + } + z->ket = z->c; /* [, line 152 */ + if (z->c <= z->lb) goto lab9; + z->c--; /* next, line 152 */ + z->bra = z->c; /* ], line 152 */ + { int ret; + ret = slice_del(z); /* delete, line 152 */ + if (ret < 0) return ret; + } + lab9: + z->c = z->l - m; + } + return 1; +} + +extern int dutch_ISO_8859_1_stem(struct SN_env * z) { + { int c = z->c; /* do, line 159 */ + { int ret = r_prelude(z); + if (ret == 0) goto lab0; /* call prelude, line 159 */ + if (ret < 0) return ret; + } + lab0: + z->c = c; + } + { int c = z->c; /* do, line 160 */ + { int ret = r_mark_regions(z); + if (ret == 0) goto lab1; /* call mark_regions, line 160 */ + if (ret < 0) return ret; + } + lab1: + z->c = c; + } + z->lb = z->c; z->c = z->l; /* backwards, line 161 */ + + { int m = z->l - z->c; (void) m; /* do, line 162 */ + { int ret = r_standard_suffix(z); + if (ret == 0) goto lab2; /* call standard_suffix, line 162 */ + if (ret < 0) return ret; + } + lab2: + z->c = z->l - m; + } + z->c = z->lb; + { int c = z->c; /* do, line 163 */ + { int ret = r_postlude(z); + if (ret == 0) goto lab3; /* call postlude, line 163 */ + if (ret < 0) return ret; + } + lab3: + z->c = c; + } + return 1; +} + +extern struct SN_env * dutch_ISO_8859_1_create_env(void) { return SN_create_env(0, 2, 1); } + +extern void dutch_ISO_8859_1_close_env(struct SN_env * z) { SN_close_env(z); } + diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_dutch.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_dutch.h new file mode 100644 index 0000000..e67d111 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_dutch.h @@ -0,0 +1,16 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern struct SN_env * dutch_ISO_8859_1_create_env(void); +extern void dutch_ISO_8859_1_close_env(struct SN_env * z); + +extern int dutch_ISO_8859_1_stem(struct SN_env * z); + +#ifdef __cplusplus +} +#endif + diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_english.c b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_english.c new file mode 100644 index 0000000..d862512 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_english.c @@ -0,0 +1,1156 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#include "../runtime/header.h" + +extern int english_ISO_8859_1_stem(struct SN_env * z); +static int r_exception2(struct SN_env * z); +static int r_exception1(struct SN_env * z); +static int r_Step_5(struct SN_env * z); +static int r_Step_4(struct SN_env * z); +static int r_Step_3(struct SN_env * z); +static int r_Step_2(struct SN_env * z); +static int r_Step_1c(struct SN_env * z); +static int r_Step_1b(struct SN_env * z); +static int r_Step_1a(struct SN_env * z); +static int r_R2(struct SN_env * z); +static int r_R1(struct SN_env * z); +static int r_shortv(struct SN_env * z); +static int r_mark_regions(struct SN_env * z); +static int r_postlude(struct SN_env * z); +static int r_prelude(struct SN_env * z); + +extern struct SN_env * english_ISO_8859_1_create_env(void); +extern void english_ISO_8859_1_close_env(struct SN_env * z); + +static symbol s_0_0[6] = { 'c', 'o', 'm', 'm', 'u', 'n' }; +static symbol s_0_1[5] = { 'g', 'e', 'n', 'e', 'r' }; + +static struct among a_0[2] = +{ +/* 0 */ { 6, s_0_0, -1, -1, 0}, +/* 1 */ { 5, s_0_1, -1, -1, 0} +}; + +static symbol s_1_0[1] = { '\'' }; +static symbol s_1_1[3] = { '\'', 's', '\'' }; +static symbol s_1_2[2] = { '\'', 's' }; + +static struct among a_1[3] = +{ +/* 0 */ { 1, s_1_0, -1, 1, 0}, +/* 1 */ { 3, s_1_1, 0, 1, 0}, +/* 2 */ { 2, s_1_2, -1, 1, 0} +}; + +static symbol s_2_0[3] = { 'i', 'e', 'd' }; +static symbol s_2_1[1] = { 's' }; +static symbol s_2_2[3] = { 'i', 'e', 's' }; +static symbol s_2_3[4] = { 's', 's', 'e', 's' }; +static symbol s_2_4[2] = { 's', 's' }; +static symbol s_2_5[2] = { 'u', 's' }; + +static struct among a_2[6] = +{ +/* 0 */ { 3, s_2_0, -1, 2, 0}, +/* 1 */ { 1, s_2_1, -1, 3, 0}, +/* 2 */ { 3, s_2_2, 1, 2, 0}, +/* 3 */ { 4, s_2_3, 1, 1, 0}, +/* 4 */ { 2, s_2_4, 1, -1, 0}, +/* 5 */ { 2, s_2_5, 1, -1, 0} +}; + +static symbol s_3_1[2] = { 'b', 'b' }; +static symbol s_3_2[2] = { 'd', 'd' }; +static symbol s_3_3[2] = { 'f', 'f' }; +static symbol s_3_4[2] = { 'g', 'g' }; +static symbol s_3_5[2] = { 'b', 'l' }; +static symbol s_3_6[2] = { 'm', 'm' }; +static symbol s_3_7[2] = { 'n', 'n' }; +static symbol s_3_8[2] = { 'p', 'p' }; +static symbol s_3_9[2] = { 'r', 'r' }; +static symbol s_3_10[2] = { 'a', 't' }; +static symbol s_3_11[2] = { 't', 't' }; +static symbol s_3_12[2] = { 'i', 'z' }; + +static struct among a_3[13] = +{ +/* 0 */ { 0, 0, -1, 3, 0}, +/* 1 */ { 2, s_3_1, 0, 2, 0}, +/* 2 */ { 2, s_3_2, 0, 2, 0}, +/* 3 */ { 2, s_3_3, 0, 2, 0}, +/* 4 */ { 2, s_3_4, 0, 2, 0}, +/* 5 */ { 2, s_3_5, 0, 1, 0}, +/* 6 */ { 2, s_3_6, 0, 2, 0}, +/* 7 */ { 2, s_3_7, 0, 2, 0}, +/* 8 */ { 2, s_3_8, 0, 2, 0}, +/* 9 */ { 2, s_3_9, 0, 2, 0}, +/* 10 */ { 2, s_3_10, 0, 1, 0}, +/* 11 */ { 2, s_3_11, 0, 2, 0}, +/* 12 */ { 2, s_3_12, 0, 1, 0} +}; + +static symbol s_4_0[2] = { 'e', 'd' }; +static symbol s_4_1[3] = { 'e', 'e', 'd' }; +static symbol s_4_2[3] = { 'i', 'n', 'g' }; +static symbol s_4_3[4] = { 'e', 'd', 'l', 'y' }; +static symbol s_4_4[5] = { 'e', 'e', 'd', 'l', 'y' }; +static symbol s_4_5[5] = { 'i', 'n', 'g', 'l', 'y' }; + +static struct among a_4[6] = +{ +/* 0 */ { 2, s_4_0, -1, 2, 0}, +/* 1 */ { 3, s_4_1, 0, 1, 0}, +/* 2 */ { 3, s_4_2, -1, 2, 0}, +/* 3 */ { 4, s_4_3, -1, 2, 0}, +/* 4 */ { 5, s_4_4, 3, 1, 0}, +/* 5 */ { 5, s_4_5, -1, 2, 0} +}; + +static symbol s_5_0[4] = { 'a', 'n', 'c', 'i' }; +static symbol s_5_1[4] = { 'e', 'n', 'c', 'i' }; +static symbol s_5_2[3] = { 'o', 'g', 'i' }; +static symbol s_5_3[2] = { 'l', 'i' }; +static symbol s_5_4[3] = { 'b', 'l', 'i' }; +static symbol s_5_5[4] = { 'a', 'b', 'l', 'i' }; +static symbol s_5_6[4] = { 'a', 'l', 'l', 'i' }; +static symbol s_5_7[5] = { 'f', 'u', 'l', 'l', 'i' }; +static symbol s_5_8[6] = { 'l', 'e', 's', 's', 'l', 'i' }; +static symbol s_5_9[5] = { 'o', 'u', 's', 'l', 'i' }; +static symbol s_5_10[5] = { 'e', 'n', 't', 'l', 'i' }; +static symbol s_5_11[5] = { 'a', 'l', 'i', 't', 'i' }; +static symbol s_5_12[6] = { 'b', 'i', 'l', 'i', 't', 'i' }; +static symbol s_5_13[5] = { 'i', 'v', 'i', 't', 'i' }; +static symbol s_5_14[6] = { 't', 'i', 'o', 'n', 'a', 'l' }; +static symbol s_5_15[7] = { 'a', 't', 'i', 'o', 'n', 'a', 'l' }; +static symbol s_5_16[5] = { 'a', 'l', 'i', 's', 'm' }; +static symbol s_5_17[5] = { 'a', 't', 'i', 'o', 'n' }; +static symbol s_5_18[7] = { 'i', 'z', 'a', 't', 'i', 'o', 'n' }; +static symbol s_5_19[4] = { 'i', 'z', 'e', 'r' }; +static symbol s_5_20[4] = { 'a', 't', 'o', 'r' }; +static symbol s_5_21[7] = { 'i', 'v', 'e', 'n', 'e', 's', 's' }; +static symbol s_5_22[7] = { 'f', 'u', 'l', 'n', 'e', 's', 's' }; +static symbol s_5_23[7] = { 'o', 'u', 's', 'n', 'e', 's', 's' }; + +static struct among a_5[24] = +{ +/* 0 */ { 4, s_5_0, -1, 3, 0}, +/* 1 */ { 4, s_5_1, -1, 2, 0}, +/* 2 */ { 3, s_5_2, -1, 13, 0}, +/* 3 */ { 2, s_5_3, -1, 16, 0}, +/* 4 */ { 3, s_5_4, 3, 12, 0}, +/* 5 */ { 4, s_5_5, 4, 4, 0}, +/* 6 */ { 4, s_5_6, 3, 8, 0}, +/* 7 */ { 5, s_5_7, 3, 14, 0}, +/* 8 */ { 6, s_5_8, 3, 15, 0}, +/* 9 */ { 5, s_5_9, 3, 10, 0}, +/* 10 */ { 5, s_5_10, 3, 5, 0}, +/* 11 */ { 5, s_5_11, -1, 8, 0}, +/* 12 */ { 6, s_5_12, -1, 12, 0}, +/* 13 */ { 5, s_5_13, -1, 11, 0}, +/* 14 */ { 6, s_5_14, -1, 1, 0}, +/* 15 */ { 7, s_5_15, 14, 7, 0}, +/* 16 */ { 5, s_5_16, -1, 8, 0}, +/* 17 */ { 5, s_5_17, -1, 7, 0}, +/* 18 */ { 7, s_5_18, 17, 6, 0}, +/* 19 */ { 4, s_5_19, -1, 6, 0}, +/* 20 */ { 4, s_5_20, -1, 7, 0}, +/* 21 */ { 7, s_5_21, -1, 11, 0}, +/* 22 */ { 7, s_5_22, -1, 9, 0}, +/* 23 */ { 7, s_5_23, -1, 10, 0} +}; + +static symbol s_6_0[5] = { 'i', 'c', 'a', 't', 'e' }; +static symbol s_6_1[5] = { 'a', 't', 'i', 'v', 'e' }; +static symbol s_6_2[5] = { 'a', 'l', 'i', 'z', 'e' }; +static symbol s_6_3[5] = { 'i', 'c', 'i', 't', 'i' }; +static symbol s_6_4[4] = { 'i', 'c', 'a', 'l' }; +static symbol s_6_5[6] = { 't', 'i', 'o', 'n', 'a', 'l' }; +static symbol s_6_6[7] = { 'a', 't', 'i', 'o', 'n', 'a', 'l' }; +static symbol s_6_7[3] = { 'f', 'u', 'l' }; +static symbol s_6_8[4] = { 'n', 'e', 's', 's' }; + +static struct among a_6[9] = +{ +/* 0 */ { 5, s_6_0, -1, 4, 0}, +/* 1 */ { 5, s_6_1, -1, 6, 0}, +/* 2 */ { 5, s_6_2, -1, 3, 0}, +/* 3 */ { 5, s_6_3, -1, 4, 0}, +/* 4 */ { 4, s_6_4, -1, 4, 0}, +/* 5 */ { 6, s_6_5, -1, 1, 0}, +/* 6 */ { 7, s_6_6, 5, 2, 0}, +/* 7 */ { 3, s_6_7, -1, 5, 0}, +/* 8 */ { 4, s_6_8, -1, 5, 0} +}; + +static symbol s_7_0[2] = { 'i', 'c' }; +static symbol s_7_1[4] = { 'a', 'n', 'c', 'e' }; +static symbol s_7_2[4] = { 'e', 'n', 'c', 'e' }; +static symbol s_7_3[4] = { 'a', 'b', 'l', 'e' }; +static symbol s_7_4[4] = { 'i', 'b', 'l', 'e' }; +static symbol s_7_5[3] = { 'a', 't', 'e' }; +static symbol s_7_6[3] = { 'i', 'v', 'e' }; +static symbol s_7_7[3] = { 'i', 'z', 'e' }; +static symbol s_7_8[3] = { 'i', 't', 'i' }; +static symbol s_7_9[2] = { 'a', 'l' }; +static symbol s_7_10[3] = { 'i', 's', 'm' }; +static symbol s_7_11[3] = { 'i', 'o', 'n' }; +static symbol s_7_12[2] = { 'e', 'r' }; +static symbol s_7_13[3] = { 'o', 'u', 's' }; +static symbol s_7_14[3] = { 'a', 'n', 't' }; +static symbol s_7_15[3] = { 'e', 'n', 't' }; +static symbol s_7_16[4] = { 'm', 'e', 'n', 't' }; +static symbol s_7_17[5] = { 'e', 'm', 'e', 'n', 't' }; + +static struct among a_7[18] = +{ +/* 0 */ { 2, s_7_0, -1, 1, 0}, +/* 1 */ { 4, s_7_1, -1, 1, 0}, +/* 2 */ { 4, s_7_2, -1, 1, 0}, +/* 3 */ { 4, s_7_3, -1, 1, 0}, +/* 4 */ { 4, s_7_4, -1, 1, 0}, +/* 5 */ { 3, s_7_5, -1, 1, 0}, +/* 6 */ { 3, s_7_6, -1, 1, 0}, +/* 7 */ { 3, s_7_7, -1, 1, 0}, +/* 8 */ { 3, s_7_8, -1, 1, 0}, +/* 9 */ { 2, s_7_9, -1, 1, 0}, +/* 10 */ { 3, s_7_10, -1, 1, 0}, +/* 11 */ { 3, s_7_11, -1, 2, 0}, +/* 12 */ { 2, s_7_12, -1, 1, 0}, +/* 13 */ { 3, s_7_13, -1, 1, 0}, +/* 14 */ { 3, s_7_14, -1, 1, 0}, +/* 15 */ { 3, s_7_15, -1, 1, 0}, +/* 16 */ { 4, s_7_16, 15, 1, 0}, +/* 17 */ { 5, s_7_17, 16, 1, 0} +}; + +static symbol s_8_0[1] = { 'e' }; +static symbol s_8_1[1] = { 'l' }; + +static struct among a_8[2] = +{ +/* 0 */ { 1, s_8_0, -1, 1, 0}, +/* 1 */ { 1, s_8_1, -1, 2, 0} +}; + +static symbol s_9_0[7] = { 's', 'u', 'c', 'c', 'e', 'e', 'd' }; +static symbol s_9_1[7] = { 'p', 'r', 'o', 'c', 'e', 'e', 'd' }; +static symbol s_9_2[6] = { 'e', 'x', 'c', 'e', 'e', 'd' }; +static symbol s_9_3[7] = { 'c', 'a', 'n', 'n', 'i', 'n', 'g' }; +static symbol s_9_4[6] = { 'i', 'n', 'n', 'i', 'n', 'g' }; +static symbol s_9_5[7] = { 'e', 'a', 'r', 'r', 'i', 'n', 'g' }; +static symbol s_9_6[7] = { 'h', 'e', 'r', 'r', 'i', 'n', 'g' }; +static symbol s_9_7[6] = { 'o', 'u', 't', 'i', 'n', 'g' }; + +static struct among a_9[8] = +{ +/* 0 */ { 7, s_9_0, -1, -1, 0}, +/* 1 */ { 7, s_9_1, -1, -1, 0}, +/* 2 */ { 6, s_9_2, -1, -1, 0}, +/* 3 */ { 7, s_9_3, -1, -1, 0}, +/* 4 */ { 6, s_9_4, -1, -1, 0}, +/* 5 */ { 7, s_9_5, -1, -1, 0}, +/* 6 */ { 7, s_9_6, -1, -1, 0}, +/* 7 */ { 6, s_9_7, -1, -1, 0} +}; + +static symbol s_10_0[5] = { 'a', 'n', 'd', 'e', 's' }; +static symbol s_10_1[5] = { 'a', 't', 'l', 'a', 's' }; +static symbol s_10_2[4] = { 'b', 'i', 'a', 's' }; +static symbol s_10_3[6] = { 'c', 'o', 's', 'm', 'o', 's' }; +static symbol s_10_4[5] = { 'd', 'y', 'i', 'n', 'g' }; +static symbol s_10_5[5] = { 'e', 'a', 'r', 'l', 'y' }; +static symbol s_10_6[6] = { 'g', 'e', 'n', 't', 'l', 'y' }; +static symbol s_10_7[4] = { 'h', 'o', 'w', 'e' }; +static symbol s_10_8[4] = { 'i', 'd', 'l', 'y' }; +static symbol s_10_9[5] = { 'l', 'y', 'i', 'n', 'g' }; +static symbol s_10_10[4] = { 'n', 'e', 'w', 's' }; +static symbol s_10_11[4] = { 'o', 'n', 'l', 'y' }; +static symbol s_10_12[6] = { 's', 'i', 'n', 'g', 'l', 'y' }; +static symbol s_10_13[5] = { 's', 'k', 'i', 'e', 's' }; +static symbol s_10_14[4] = { 's', 'k', 'i', 's' }; +static symbol s_10_15[3] = { 's', 'k', 'y' }; +static symbol s_10_16[5] = { 't', 'y', 'i', 'n', 'g' }; +static symbol s_10_17[4] = { 'u', 'g', 'l', 'y' }; + +static struct among a_10[18] = +{ +/* 0 */ { 5, s_10_0, -1, -1, 0}, +/* 1 */ { 5, s_10_1, -1, -1, 0}, +/* 2 */ { 4, s_10_2, -1, -1, 0}, +/* 3 */ { 6, s_10_3, -1, -1, 0}, +/* 4 */ { 5, s_10_4, -1, 3, 0}, +/* 5 */ { 5, s_10_5, -1, 9, 0}, +/* 6 */ { 6, s_10_6, -1, 7, 0}, +/* 7 */ { 4, s_10_7, -1, -1, 0}, +/* 8 */ { 4, s_10_8, -1, 6, 0}, +/* 9 */ { 5, s_10_9, -1, 4, 0}, +/* 10 */ { 4, s_10_10, -1, -1, 0}, +/* 11 */ { 4, s_10_11, -1, 10, 0}, +/* 12 */ { 6, s_10_12, -1, 11, 0}, +/* 13 */ { 5, s_10_13, -1, 2, 0}, +/* 14 */ { 4, s_10_14, -1, 1, 0}, +/* 15 */ { 3, s_10_15, -1, -1, 0}, +/* 16 */ { 5, s_10_16, -1, 5, 0}, +/* 17 */ { 4, s_10_17, -1, 8, 0} +}; + +static unsigned char g_v[] = { 17, 65, 16, 1 }; + +static unsigned char g_v_WXY[] = { 1, 17, 65, 208, 1 }; + +static unsigned char g_valid_LI[] = { 55, 141, 2 }; + +static symbol s_0[] = { '\'' }; +static symbol s_1[] = { 'y' }; +static symbol s_2[] = { 'Y' }; +static symbol s_3[] = { 'y' }; +static symbol s_4[] = { 'Y' }; +static symbol s_5[] = { 's', 's' }; +static symbol s_6[] = { 'i', 'e' }; +static symbol s_7[] = { 'i' }; +static symbol s_8[] = { 'e', 'e' }; +static symbol s_9[] = { 'e' }; +static symbol s_10[] = { 'e' }; +static symbol s_11[] = { 'y' }; +static symbol s_12[] = { 'Y' }; +static symbol s_13[] = { 'i' }; +static symbol s_14[] = { 't', 'i', 'o', 'n' }; +static symbol s_15[] = { 'e', 'n', 'c', 'e' }; +static symbol s_16[] = { 'a', 'n', 'c', 'e' }; +static symbol s_17[] = { 'a', 'b', 'l', 'e' }; +static symbol s_18[] = { 'e', 'n', 't' }; +static symbol s_19[] = { 'i', 'z', 'e' }; +static symbol s_20[] = { 'a', 't', 'e' }; +static symbol s_21[] = { 'a', 'l' }; +static symbol s_22[] = { 'f', 'u', 'l' }; +static symbol s_23[] = { 'o', 'u', 's' }; +static symbol s_24[] = { 'i', 'v', 'e' }; +static symbol s_25[] = { 'b', 'l', 'e' }; +static symbol s_26[] = { 'l' }; +static symbol s_27[] = { 'o', 'g' }; +static symbol s_28[] = { 'f', 'u', 'l' }; +static symbol s_29[] = { 'l', 'e', 's', 's' }; +static symbol s_30[] = { 't', 'i', 'o', 'n' }; +static symbol s_31[] = { 'a', 't', 'e' }; +static symbol s_32[] = { 'a', 'l' }; +static symbol s_33[] = { 'i', 'c' }; +static symbol s_34[] = { 's' }; +static symbol s_35[] = { 't' }; +static symbol s_36[] = { 'l' }; +static symbol s_37[] = { 's', 'k', 'i' }; +static symbol s_38[] = { 's', 'k', 'y' }; +static symbol s_39[] = { 'd', 'i', 'e' }; +static symbol s_40[] = { 'l', 'i', 'e' }; +static symbol s_41[] = { 't', 'i', 'e' }; +static symbol s_42[] = { 'i', 'd', 'l' }; +static symbol s_43[] = { 'g', 'e', 'n', 't', 'l' }; +static symbol s_44[] = { 'u', 'g', 'l', 'i' }; +static symbol s_45[] = { 'e', 'a', 'r', 'l', 'i' }; +static symbol s_46[] = { 'o', 'n', 'l', 'i' }; +static symbol s_47[] = { 's', 'i', 'n', 'g', 'l' }; +static symbol s_48[] = { 'Y' }; +static symbol s_49[] = { 'y' }; + +static int r_prelude(struct SN_env * z) { + z->B[0] = 0; /* unset Y_found, line 26 */ + { int c = z->c; /* do, line 27 */ + z->bra = z->c; /* [, line 27 */ + if (!(eq_s(z, 1, s_0))) goto lab0; + z->ket = z->c; /* ], line 27 */ + { int ret; + ret = slice_del(z); /* delete, line 27 */ + if (ret < 0) return ret; + } + lab0: + z->c = c; + } + { int c = z->c; /* do, line 28 */ + z->bra = z->c; /* [, line 28 */ + if (!(eq_s(z, 1, s_1))) goto lab1; + z->ket = z->c; /* ], line 28 */ + if (!(in_grouping(z, g_v, 97, 121))) goto lab1; + { int ret; + ret = slice_from_s(z, 1, s_2); /* <-, line 28 */ + if (ret < 0) return ret; + } + z->B[0] = 1; /* set Y_found, line 28 */ + lab1: + z->c = c; + } + { int c = z->c; /* do, line 29 */ + while(1) { /* repeat, line 29 */ + int c = z->c; + while(1) { /* goto, line 29 */ + int c = z->c; + if (!(in_grouping(z, g_v, 97, 121))) goto lab4; + z->bra = z->c; /* [, line 29 */ + if (!(eq_s(z, 1, s_3))) goto lab4; + z->ket = z->c; /* ], line 29 */ + z->c = c; + break; + lab4: + z->c = c; + if (z->c >= z->l) goto lab3; + z->c++; /* goto, line 29 */ + } + { int ret; + ret = slice_from_s(z, 1, s_4); /* <-, line 29 */ + if (ret < 0) return ret; + } + z->B[0] = 1; /* set Y_found, line 29 */ + continue; + lab3: + z->c = c; + break; + } + z->c = c; + } + return 1; +} + +static int r_mark_regions(struct SN_env * z) { + z->I[0] = z->l; + z->I[1] = z->l; + { int c = z->c; /* do, line 35 */ + { int c = z->c; /* or, line 40 */ + if (!(find_among(z, a_0, 2))) goto lab2; /* among, line 36 */ + goto lab1; + lab2: + z->c = c; + while(1) { /* gopast, line 40 */ + if (!(in_grouping(z, g_v, 97, 121))) goto lab3; + break; + lab3: + if (z->c >= z->l) goto lab0; + z->c++; /* gopast, line 40 */ + } + while(1) { /* gopast, line 40 */ + if (!(out_grouping(z, g_v, 97, 121))) goto lab4; + break; + lab4: + if (z->c >= z->l) goto lab0; + z->c++; /* gopast, line 40 */ + } + } + lab1: + z->I[0] = z->c; /* setmark p1, line 41 */ + while(1) { /* gopast, line 42 */ + if (!(in_grouping(z, g_v, 97, 121))) goto lab5; + break; + lab5: + if (z->c >= z->l) goto lab0; + z->c++; /* gopast, line 42 */ + } + while(1) { /* gopast, line 42 */ + if (!(out_grouping(z, g_v, 97, 121))) goto lab6; + break; + lab6: + if (z->c >= z->l) goto lab0; + z->c++; /* gopast, line 42 */ + } + z->I[1] = z->c; /* setmark p2, line 42 */ + lab0: + z->c = c; + } + return 1; +} + +static int r_shortv(struct SN_env * z) { + { int m = z->l - z->c; (void) m; /* or, line 50 */ + if (!(out_grouping_b(z, g_v_WXY, 89, 121))) goto lab1; + if (!(in_grouping_b(z, g_v, 97, 121))) goto lab1; + if (!(out_grouping_b(z, g_v, 97, 121))) goto lab1; + goto lab0; + lab1: + z->c = z->l - m; + if (!(out_grouping_b(z, g_v, 97, 121))) return 0; + if (!(in_grouping_b(z, g_v, 97, 121))) return 0; + if (z->c > z->lb) return 0; /* atlimit, line 51 */ + } +lab0: + return 1; +} + +static int r_R1(struct SN_env * z) { + if (!(z->I[0] <= z->c)) return 0; + return 1; +} + +static int r_R2(struct SN_env * z) { + if (!(z->I[1] <= z->c)) return 0; + return 1; +} + +static int r_Step_1a(struct SN_env * z) { + int among_var; + { int m = z->l - z->c; (void) m; /* try, line 58 */ + z->ket = z->c; /* [, line 59 */ + among_var = find_among_b(z, a_1, 3); /* substring, line 59 */ + if (!(among_var)) { z->c = z->l - m; goto lab0; } + z->bra = z->c; /* ], line 59 */ + switch(among_var) { + case 0: { z->c = z->l - m; goto lab0; } + case 1: + { int ret; + ret = slice_del(z); /* delete, line 61 */ + if (ret < 0) return ret; + } + break; + } + lab0: + ; + } + z->ket = z->c; /* [, line 64 */ + among_var = find_among_b(z, a_2, 6); /* substring, line 64 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 64 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_from_s(z, 2, s_5); /* <-, line 65 */ + if (ret < 0) return ret; + } + break; + case 2: + { int m = z->l - z->c; (void) m; /* or, line 67 */ + if (z->c <= z->lb) goto lab2; + z->c--; /* next, line 67 */ + if (z->c > z->lb) goto lab2; /* atlimit, line 67 */ + { int ret; + ret = slice_from_s(z, 2, s_6); /* <-, line 67 */ + if (ret < 0) return ret; + } + goto lab1; + lab2: + z->c = z->l - m; + { int ret; + ret = slice_from_s(z, 1, s_7); /* <-, line 67 */ + if (ret < 0) return ret; + } + } + lab1: + break; + case 3: + if (z->c <= z->lb) return 0; + z->c--; /* next, line 68 */ + while(1) { /* gopast, line 68 */ + if (!(in_grouping_b(z, g_v, 97, 121))) goto lab3; + break; + lab3: + if (z->c <= z->lb) return 0; + z->c--; /* gopast, line 68 */ + } + { int ret; + ret = slice_del(z); /* delete, line 68 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_Step_1b(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 74 */ + among_var = find_among_b(z, a_4, 6); /* substring, line 74 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 74 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 76 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 2, s_8); /* <-, line 76 */ + if (ret < 0) return ret; + } + break; + case 2: + { int m_test = z->l - z->c; /* test, line 79 */ + while(1) { /* gopast, line 79 */ + if (!(in_grouping_b(z, g_v, 97, 121))) goto lab0; + break; + lab0: + if (z->c <= z->lb) return 0; + z->c--; /* gopast, line 79 */ + } + z->c = z->l - m_test; + } + { int ret; + ret = slice_del(z); /* delete, line 79 */ + if (ret < 0) return ret; + } + { int m_test = z->l - z->c; /* test, line 80 */ + among_var = find_among_b(z, a_3, 13); /* substring, line 80 */ + if (!(among_var)) return 0; + z->c = z->l - m_test; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + { int c = z->c; + ret = insert_s(z, z->c, z->c, 1, s_9); /* <+, line 82 */ + z->c = c; + } + if (ret < 0) return ret; + } + break; + case 2: + z->ket = z->c; /* [, line 85 */ + if (z->c <= z->lb) return 0; + z->c--; /* next, line 85 */ + z->bra = z->c; /* ], line 85 */ + { int ret; + ret = slice_del(z); /* delete, line 85 */ + if (ret < 0) return ret; + } + break; + case 3: + if (z->c != z->I[0]) return 0; /* atmark, line 86 */ + { int m_test = z->l - z->c; /* test, line 86 */ + { int ret = r_shortv(z); + if (ret == 0) return 0; /* call shortv, line 86 */ + if (ret < 0) return ret; + } + z->c = z->l - m_test; + } + { int ret; + { int c = z->c; + ret = insert_s(z, z->c, z->c, 1, s_10); /* <+, line 86 */ + z->c = c; + } + if (ret < 0) return ret; + } + break; + } + break; + } + return 1; +} + +static int r_Step_1c(struct SN_env * z) { + z->ket = z->c; /* [, line 93 */ + { int m = z->l - z->c; (void) m; /* or, line 93 */ + if (!(eq_s_b(z, 1, s_11))) goto lab1; + goto lab0; + lab1: + z->c = z->l - m; + if (!(eq_s_b(z, 1, s_12))) return 0; + } +lab0: + z->bra = z->c; /* ], line 93 */ + if (!(out_grouping_b(z, g_v, 97, 121))) return 0; + { int m = z->l - z->c; (void) m; /* not, line 94 */ + if (z->c > z->lb) goto lab2; /* atlimit, line 94 */ + return 0; + lab2: + z->c = z->l - m; + } + { int ret; + ret = slice_from_s(z, 1, s_13); /* <-, line 95 */ + if (ret < 0) return ret; + } + return 1; +} + +static int r_Step_2(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 99 */ + among_var = find_among_b(z, a_5, 24); /* substring, line 99 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 99 */ + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 99 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_from_s(z, 4, s_14); /* <-, line 100 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 4, s_15); /* <-, line 101 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_from_s(z, 4, s_16); /* <-, line 102 */ + if (ret < 0) return ret; + } + break; + case 4: + { int ret; + ret = slice_from_s(z, 4, s_17); /* <-, line 103 */ + if (ret < 0) return ret; + } + break; + case 5: + { int ret; + ret = slice_from_s(z, 3, s_18); /* <-, line 104 */ + if (ret < 0) return ret; + } + break; + case 6: + { int ret; + ret = slice_from_s(z, 3, s_19); /* <-, line 106 */ + if (ret < 0) return ret; + } + break; + case 7: + { int ret; + ret = slice_from_s(z, 3, s_20); /* <-, line 108 */ + if (ret < 0) return ret; + } + break; + case 8: + { int ret; + ret = slice_from_s(z, 2, s_21); /* <-, line 110 */ + if (ret < 0) return ret; + } + break; + case 9: + { int ret; + ret = slice_from_s(z, 3, s_22); /* <-, line 111 */ + if (ret < 0) return ret; + } + break; + case 10: + { int ret; + ret = slice_from_s(z, 3, s_23); /* <-, line 113 */ + if (ret < 0) return ret; + } + break; + case 11: + { int ret; + ret = slice_from_s(z, 3, s_24); /* <-, line 115 */ + if (ret < 0) return ret; + } + break; + case 12: + { int ret; + ret = slice_from_s(z, 3, s_25); /* <-, line 117 */ + if (ret < 0) return ret; + } + break; + case 13: + if (!(eq_s_b(z, 1, s_26))) return 0; + { int ret; + ret = slice_from_s(z, 2, s_27); /* <-, line 118 */ + if (ret < 0) return ret; + } + break; + case 14: + { int ret; + ret = slice_from_s(z, 3, s_28); /* <-, line 119 */ + if (ret < 0) return ret; + } + break; + case 15: + { int ret; + ret = slice_from_s(z, 4, s_29); /* <-, line 120 */ + if (ret < 0) return ret; + } + break; + case 16: + if (!(in_grouping_b(z, g_valid_LI, 99, 116))) return 0; + { int ret; + ret = slice_del(z); /* delete, line 121 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_Step_3(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 126 */ + among_var = find_among_b(z, a_6, 9); /* substring, line 126 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 126 */ + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 126 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_from_s(z, 4, s_30); /* <-, line 127 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 3, s_31); /* <-, line 128 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_from_s(z, 2, s_32); /* <-, line 129 */ + if (ret < 0) return ret; + } + break; + case 4: + { int ret; + ret = slice_from_s(z, 2, s_33); /* <-, line 131 */ + if (ret < 0) return ret; + } + break; + case 5: + { int ret; + ret = slice_del(z); /* delete, line 133 */ + if (ret < 0) return ret; + } + break; + case 6: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 135 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 135 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_Step_4(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 140 */ + among_var = find_among_b(z, a_7, 18); /* substring, line 140 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 140 */ + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 140 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 143 */ + if (ret < 0) return ret; + } + break; + case 2: + { int m = z->l - z->c; (void) m; /* or, line 144 */ + if (!(eq_s_b(z, 1, s_34))) goto lab1; + goto lab0; + lab1: + z->c = z->l - m; + if (!(eq_s_b(z, 1, s_35))) return 0; + } + lab0: + { int ret; + ret = slice_del(z); /* delete, line 144 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_Step_5(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 149 */ + among_var = find_among_b(z, a_8, 2); /* substring, line 149 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 149 */ + switch(among_var) { + case 0: return 0; + case 1: + { int m = z->l - z->c; (void) m; /* or, line 150 */ + { int ret = r_R2(z); + if (ret == 0) goto lab1; /* call R2, line 150 */ + if (ret < 0) return ret; + } + goto lab0; + lab1: + z->c = z->l - m; + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 150 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* not, line 150 */ + { int ret = r_shortv(z); + if (ret == 0) goto lab2; /* call shortv, line 150 */ + if (ret < 0) return ret; + } + return 0; + lab2: + z->c = z->l - m; + } + } + lab0: + { int ret; + ret = slice_del(z); /* delete, line 150 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 151 */ + if (ret < 0) return ret; + } + if (!(eq_s_b(z, 1, s_36))) return 0; + { int ret; + ret = slice_del(z); /* delete, line 151 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_exception2(struct SN_env * z) { + z->ket = z->c; /* [, line 157 */ + if (!(find_among_b(z, a_9, 8))) return 0; /* substring, line 157 */ + z->bra = z->c; /* ], line 157 */ + if (z->c > z->lb) return 0; /* atlimit, line 157 */ + return 1; +} + +static int r_exception1(struct SN_env * z) { + int among_var; + z->bra = z->c; /* [, line 169 */ + among_var = find_among(z, a_10, 18); /* substring, line 169 */ + if (!(among_var)) return 0; + z->ket = z->c; /* ], line 169 */ + if (z->c < z->l) return 0; /* atlimit, line 169 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_from_s(z, 3, s_37); /* <-, line 173 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 3, s_38); /* <-, line 174 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_from_s(z, 3, s_39); /* <-, line 175 */ + if (ret < 0) return ret; + } + break; + case 4: + { int ret; + ret = slice_from_s(z, 3, s_40); /* <-, line 176 */ + if (ret < 0) return ret; + } + break; + case 5: + { int ret; + ret = slice_from_s(z, 3, s_41); /* <-, line 177 */ + if (ret < 0) return ret; + } + break; + case 6: + { int ret; + ret = slice_from_s(z, 3, s_42); /* <-, line 181 */ + if (ret < 0) return ret; + } + break; + case 7: + { int ret; + ret = slice_from_s(z, 5, s_43); /* <-, line 182 */ + if (ret < 0) return ret; + } + break; + case 8: + { int ret; + ret = slice_from_s(z, 4, s_44); /* <-, line 183 */ + if (ret < 0) return ret; + } + break; + case 9: + { int ret; + ret = slice_from_s(z, 5, s_45); /* <-, line 184 */ + if (ret < 0) return ret; + } + break; + case 10: + { int ret; + ret = slice_from_s(z, 4, s_46); /* <-, line 185 */ + if (ret < 0) return ret; + } + break; + case 11: + { int ret; + ret = slice_from_s(z, 5, s_47); /* <-, line 186 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_postlude(struct SN_env * z) { + if (!(z->B[0])) return 0; /* Boolean test Y_found, line 202 */ + while(1) { /* repeat, line 202 */ + int c = z->c; + while(1) { /* goto, line 202 */ + int c = z->c; + z->bra = z->c; /* [, line 202 */ + if (!(eq_s(z, 1, s_48))) goto lab1; + z->ket = z->c; /* ], line 202 */ + z->c = c; + break; + lab1: + z->c = c; + if (z->c >= z->l) goto lab0; + z->c++; /* goto, line 202 */ + } + { int ret; + ret = slice_from_s(z, 1, s_49); /* <-, line 202 */ + if (ret < 0) return ret; + } + continue; + lab0: + z->c = c; + break; + } + return 1; +} + +extern int english_ISO_8859_1_stem(struct SN_env * z) { + { int c = z->c; /* or, line 206 */ + { int ret = r_exception1(z); + if (ret == 0) goto lab1; /* call exception1, line 206 */ + if (ret < 0) return ret; + } + goto lab0; + lab1: + z->c = c; + { int c = z->c; /* not, line 207 */ + { int c = z->c + 3; + if (0 > c || c > z->l) goto lab3; + z->c = c; /* hop, line 207 */ + } + goto lab2; + lab3: + z->c = c; + } + goto lab0; + lab2: + z->c = c; + { int c = z->c; /* do, line 208 */ + { int ret = r_prelude(z); + if (ret == 0) goto lab4; /* call prelude, line 208 */ + if (ret < 0) return ret; + } + lab4: + z->c = c; + } + { int c = z->c; /* do, line 209 */ + { int ret = r_mark_regions(z); + if (ret == 0) goto lab5; /* call mark_regions, line 209 */ + if (ret < 0) return ret; + } + lab5: + z->c = c; + } + z->lb = z->c; z->c = z->l; /* backwards, line 210 */ + + { int m = z->l - z->c; (void) m; /* do, line 212 */ + { int ret = r_Step_1a(z); + if (ret == 0) goto lab6; /* call Step_1a, line 212 */ + if (ret < 0) return ret; + } + lab6: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* or, line 214 */ + { int ret = r_exception2(z); + if (ret == 0) goto lab8; /* call exception2, line 214 */ + if (ret < 0) return ret; + } + goto lab7; + lab8: + z->c = z->l - m; + { int m = z->l - z->c; (void) m; /* do, line 216 */ + { int ret = r_Step_1b(z); + if (ret == 0) goto lab9; /* call Step_1b, line 216 */ + if (ret < 0) return ret; + } + lab9: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 217 */ + { int ret = r_Step_1c(z); + if (ret == 0) goto lab10; /* call Step_1c, line 217 */ + if (ret < 0) return ret; + } + lab10: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 219 */ + { int ret = r_Step_2(z); + if (ret == 0) goto lab11; /* call Step_2, line 219 */ + if (ret < 0) return ret; + } + lab11: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 220 */ + { int ret = r_Step_3(z); + if (ret == 0) goto lab12; /* call Step_3, line 220 */ + if (ret < 0) return ret; + } + lab12: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 221 */ + { int ret = r_Step_4(z); + if (ret == 0) goto lab13; /* call Step_4, line 221 */ + if (ret < 0) return ret; + } + lab13: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 223 */ + { int ret = r_Step_5(z); + if (ret == 0) goto lab14; /* call Step_5, line 223 */ + if (ret < 0) return ret; + } + lab14: + z->c = z->l - m; + } + } + lab7: + z->c = z->lb; + { int c = z->c; /* do, line 226 */ + { int ret = r_postlude(z); + if (ret == 0) goto lab15; /* call postlude, line 226 */ + if (ret < 0) return ret; + } + lab15: + z->c = c; + } + } +lab0: + return 1; +} + +extern struct SN_env * english_ISO_8859_1_create_env(void) { return SN_create_env(0, 2, 1); } + +extern void english_ISO_8859_1_close_env(struct SN_env * z) { SN_close_env(z); } + diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_english.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_english.h new file mode 100644 index 0000000..e685dcf --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_english.h @@ -0,0 +1,16 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern struct SN_env * english_ISO_8859_1_create_env(void); +extern void english_ISO_8859_1_close_env(struct SN_env * z); + +extern int english_ISO_8859_1_stem(struct SN_env * z); + +#ifdef __cplusplus +} +#endif + diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_finnish.c b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_finnish.c new file mode 100644 index 0000000..0d851cd --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_finnish.c @@ -0,0 +1,792 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#include "../runtime/header.h" + +extern int finnish_ISO_8859_1_stem(struct SN_env * z); +static int r_tidy(struct SN_env * z); +static int r_other_endings(struct SN_env * z); +static int r_t_plural(struct SN_env * z); +static int r_i_plural(struct SN_env * z); +static int r_case_ending(struct SN_env * z); +static int r_VI(struct SN_env * z); +static int r_LONG(struct SN_env * z); +static int r_possessive(struct SN_env * z); +static int r_particle_etc(struct SN_env * z); +static int r_R2(struct SN_env * z); +static int r_mark_regions(struct SN_env * z); + +extern struct SN_env * finnish_ISO_8859_1_create_env(void); +extern void finnish_ISO_8859_1_close_env(struct SN_env * z); + +static symbol s_0_0[2] = { 'p', 'a' }; +static symbol s_0_1[3] = { 's', 't', 'i' }; +static symbol s_0_2[4] = { 'k', 'a', 'a', 'n' }; +static symbol s_0_3[3] = { 'h', 'a', 'n' }; +static symbol s_0_4[3] = { 'k', 'i', 'n' }; +static symbol s_0_5[3] = { 'h', 0xE4, 'n' }; +static symbol s_0_6[4] = { 'k', 0xE4, 0xE4, 'n' }; +static symbol s_0_7[2] = { 'k', 'o' }; +static symbol s_0_8[2] = { 'p', 0xE4 }; +static symbol s_0_9[2] = { 'k', 0xF6 }; + +static struct among a_0[10] = +{ +/* 0 */ { 2, s_0_0, -1, 1, 0}, +/* 1 */ { 3, s_0_1, -1, 2, 0}, +/* 2 */ { 4, s_0_2, -1, 1, 0}, +/* 3 */ { 3, s_0_3, -1, 1, 0}, +/* 4 */ { 3, s_0_4, -1, 1, 0}, +/* 5 */ { 3, s_0_5, -1, 1, 0}, +/* 6 */ { 4, s_0_6, -1, 1, 0}, +/* 7 */ { 2, s_0_7, -1, 1, 0}, +/* 8 */ { 2, s_0_8, -1, 1, 0}, +/* 9 */ { 2, s_0_9, -1, 1, 0} +}; + +static symbol s_1_0[3] = { 'l', 'l', 'a' }; +static symbol s_1_1[2] = { 'n', 'a' }; +static symbol s_1_2[3] = { 's', 's', 'a' }; +static symbol s_1_3[2] = { 't', 'a' }; +static symbol s_1_4[3] = { 'l', 't', 'a' }; +static symbol s_1_5[3] = { 's', 't', 'a' }; + +static struct among a_1[6] = +{ +/* 0 */ { 3, s_1_0, -1, -1, 0}, +/* 1 */ { 2, s_1_1, -1, -1, 0}, +/* 2 */ { 3, s_1_2, -1, -1, 0}, +/* 3 */ { 2, s_1_3, -1, -1, 0}, +/* 4 */ { 3, s_1_4, 3, -1, 0}, +/* 5 */ { 3, s_1_5, 3, -1, 0} +}; + +static symbol s_2_0[3] = { 'l', 'l', 0xE4 }; +static symbol s_2_1[2] = { 'n', 0xE4 }; +static symbol s_2_2[3] = { 's', 's', 0xE4 }; +static symbol s_2_3[2] = { 't', 0xE4 }; +static symbol s_2_4[3] = { 'l', 't', 0xE4 }; +static symbol s_2_5[3] = { 's', 't', 0xE4 }; + +static struct among a_2[6] = +{ +/* 0 */ { 3, s_2_0, -1, -1, 0}, +/* 1 */ { 2, s_2_1, -1, -1, 0}, +/* 2 */ { 3, s_2_2, -1, -1, 0}, +/* 3 */ { 2, s_2_3, -1, -1, 0}, +/* 4 */ { 3, s_2_4, 3, -1, 0}, +/* 5 */ { 3, s_2_5, 3, -1, 0} +}; + +static symbol s_3_0[3] = { 'l', 'l', 'e' }; +static symbol s_3_1[3] = { 'i', 'n', 'e' }; + +static struct among a_3[2] = +{ +/* 0 */ { 3, s_3_0, -1, -1, 0}, +/* 1 */ { 3, s_3_1, -1, -1, 0} +}; + +static symbol s_4_0[3] = { 'n', 's', 'a' }; +static symbol s_4_1[3] = { 'm', 'm', 'e' }; +static symbol s_4_2[3] = { 'n', 'n', 'e' }; +static symbol s_4_3[2] = { 'n', 'i' }; +static symbol s_4_4[2] = { 's', 'i' }; +static symbol s_4_5[2] = { 'a', 'n' }; +static symbol s_4_6[2] = { 'e', 'n' }; +static symbol s_4_7[2] = { 0xE4, 'n' }; +static symbol s_4_8[3] = { 'n', 's', 0xE4 }; + +static struct among a_4[9] = +{ +/* 0 */ { 3, s_4_0, -1, 3, 0}, +/* 1 */ { 3, s_4_1, -1, 3, 0}, +/* 2 */ { 3, s_4_2, -1, 3, 0}, +/* 3 */ { 2, s_4_3, -1, 2, 0}, +/* 4 */ { 2, s_4_4, -1, 1, 0}, +/* 5 */ { 2, s_4_5, -1, 4, 0}, +/* 6 */ { 2, s_4_6, -1, 6, 0}, +/* 7 */ { 2, s_4_7, -1, 5, 0}, +/* 8 */ { 3, s_4_8, -1, 3, 0} +}; + +static symbol s_5_0[2] = { 'a', 'a' }; +static symbol s_5_1[2] = { 'e', 'e' }; +static symbol s_5_2[2] = { 'i', 'i' }; +static symbol s_5_3[2] = { 'o', 'o' }; +static symbol s_5_4[2] = { 'u', 'u' }; +static symbol s_5_5[2] = { 0xE4, 0xE4 }; +static symbol s_5_6[2] = { 0xF6, 0xF6 }; + +static struct among a_5[7] = +{ +/* 0 */ { 2, s_5_0, -1, -1, 0}, +/* 1 */ { 2, s_5_1, -1, -1, 0}, +/* 2 */ { 2, s_5_2, -1, -1, 0}, +/* 3 */ { 2, s_5_3, -1, -1, 0}, +/* 4 */ { 2, s_5_4, -1, -1, 0}, +/* 5 */ { 2, s_5_5, -1, -1, 0}, +/* 6 */ { 2, s_5_6, -1, -1, 0} +}; + +static symbol s_6_0[1] = { 'a' }; +static symbol s_6_1[3] = { 'l', 'l', 'a' }; +static symbol s_6_2[2] = { 'n', 'a' }; +static symbol s_6_3[3] = { 's', 's', 'a' }; +static symbol s_6_4[2] = { 't', 'a' }; +static symbol s_6_5[3] = { 'l', 't', 'a' }; +static symbol s_6_6[3] = { 's', 't', 'a' }; +static symbol s_6_7[3] = { 't', 't', 'a' }; +static symbol s_6_8[3] = { 'l', 'l', 'e' }; +static symbol s_6_9[3] = { 'i', 'n', 'e' }; +static symbol s_6_10[3] = { 'k', 's', 'i' }; +static symbol s_6_11[1] = { 'n' }; +static symbol s_6_12[3] = { 'h', 'a', 'n' }; +static symbol s_6_13[3] = { 'd', 'e', 'n' }; +static symbol s_6_14[4] = { 's', 'e', 'e', 'n' }; +static symbol s_6_15[3] = { 'h', 'e', 'n' }; +static symbol s_6_16[4] = { 't', 't', 'e', 'n' }; +static symbol s_6_17[3] = { 'h', 'i', 'n' }; +static symbol s_6_18[4] = { 's', 'i', 'i', 'n' }; +static symbol s_6_19[3] = { 'h', 'o', 'n' }; +static symbol s_6_20[3] = { 'h', 0xE4, 'n' }; +static symbol s_6_21[3] = { 'h', 0xF6, 'n' }; +static symbol s_6_22[1] = { 0xE4 }; +static symbol s_6_23[3] = { 'l', 'l', 0xE4 }; +static symbol s_6_24[2] = { 'n', 0xE4 }; +static symbol s_6_25[3] = { 's', 's', 0xE4 }; +static symbol s_6_26[2] = { 't', 0xE4 }; +static symbol s_6_27[3] = { 'l', 't', 0xE4 }; +static symbol s_6_28[3] = { 's', 't', 0xE4 }; +static symbol s_6_29[3] = { 't', 't', 0xE4 }; + +static struct among a_6[30] = +{ +/* 0 */ { 1, s_6_0, -1, 8, 0}, +/* 1 */ { 3, s_6_1, 0, -1, 0}, +/* 2 */ { 2, s_6_2, 0, -1, 0}, +/* 3 */ { 3, s_6_3, 0, -1, 0}, +/* 4 */ { 2, s_6_4, 0, -1, 0}, +/* 5 */ { 3, s_6_5, 4, -1, 0}, +/* 6 */ { 3, s_6_6, 4, -1, 0}, +/* 7 */ { 3, s_6_7, 4, 9, 0}, +/* 8 */ { 3, s_6_8, -1, -1, 0}, +/* 9 */ { 3, s_6_9, -1, -1, 0}, +/* 10 */ { 3, s_6_10, -1, -1, 0}, +/* 11 */ { 1, s_6_11, -1, 7, 0}, +/* 12 */ { 3, s_6_12, 11, 1, 0}, +/* 13 */ { 3, s_6_13, 11, -1, r_VI}, +/* 14 */ { 4, s_6_14, 11, -1, r_LONG}, +/* 15 */ { 3, s_6_15, 11, 2, 0}, +/* 16 */ { 4, s_6_16, 11, -1, r_VI}, +/* 17 */ { 3, s_6_17, 11, 3, 0}, +/* 18 */ { 4, s_6_18, 11, -1, r_VI}, +/* 19 */ { 3, s_6_19, 11, 4, 0}, +/* 20 */ { 3, s_6_20, 11, 5, 0}, +/* 21 */ { 3, s_6_21, 11, 6, 0}, +/* 22 */ { 1, s_6_22, -1, 8, 0}, +/* 23 */ { 3, s_6_23, 22, -1, 0}, +/* 24 */ { 2, s_6_24, 22, -1, 0}, +/* 25 */ { 3, s_6_25, 22, -1, 0}, +/* 26 */ { 2, s_6_26, 22, -1, 0}, +/* 27 */ { 3, s_6_27, 26, -1, 0}, +/* 28 */ { 3, s_6_28, 26, -1, 0}, +/* 29 */ { 3, s_6_29, 26, 9, 0} +}; + +static symbol s_7_0[3] = { 'e', 'j', 'a' }; +static symbol s_7_1[3] = { 'm', 'm', 'a' }; +static symbol s_7_2[4] = { 'i', 'm', 'm', 'a' }; +static symbol s_7_3[3] = { 'm', 'p', 'a' }; +static symbol s_7_4[4] = { 'i', 'm', 'p', 'a' }; +static symbol s_7_5[3] = { 'm', 'm', 'i' }; +static symbol s_7_6[4] = { 'i', 'm', 'm', 'i' }; +static symbol s_7_7[3] = { 'm', 'p', 'i' }; +static symbol s_7_8[4] = { 'i', 'm', 'p', 'i' }; +static symbol s_7_9[3] = { 'e', 'j', 0xE4 }; +static symbol s_7_10[3] = { 'm', 'm', 0xE4 }; +static symbol s_7_11[4] = { 'i', 'm', 'm', 0xE4 }; +static symbol s_7_12[3] = { 'm', 'p', 0xE4 }; +static symbol s_7_13[4] = { 'i', 'm', 'p', 0xE4 }; + +static struct among a_7[14] = +{ +/* 0 */ { 3, s_7_0, -1, -1, 0}, +/* 1 */ { 3, s_7_1, -1, 1, 0}, +/* 2 */ { 4, s_7_2, 1, -1, 0}, +/* 3 */ { 3, s_7_3, -1, 1, 0}, +/* 4 */ { 4, s_7_4, 3, -1, 0}, +/* 5 */ { 3, s_7_5, -1, 1, 0}, +/* 6 */ { 4, s_7_6, 5, -1, 0}, +/* 7 */ { 3, s_7_7, -1, 1, 0}, +/* 8 */ { 4, s_7_8, 7, -1, 0}, +/* 9 */ { 3, s_7_9, -1, -1, 0}, +/* 10 */ { 3, s_7_10, -1, 1, 0}, +/* 11 */ { 4, s_7_11, 10, -1, 0}, +/* 12 */ { 3, s_7_12, -1, 1, 0}, +/* 13 */ { 4, s_7_13, 12, -1, 0} +}; + +static symbol s_8_0[1] = { 'i' }; +static symbol s_8_1[1] = { 'j' }; + +static struct among a_8[2] = +{ +/* 0 */ { 1, s_8_0, -1, -1, 0}, +/* 1 */ { 1, s_8_1, -1, -1, 0} +}; + +static symbol s_9_0[3] = { 'm', 'm', 'a' }; +static symbol s_9_1[4] = { 'i', 'm', 'm', 'a' }; + +static struct among a_9[2] = +{ +/* 0 */ { 3, s_9_0, -1, 1, 0}, +/* 1 */ { 4, s_9_1, 0, -1, 0} +}; + +static unsigned char g_AEI[] = { 17, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8 }; + +static unsigned char g_V1[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 32 }; + +static unsigned char g_V2[] = { 17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 32 }; + +static unsigned char g_particle_end[] = { 17, 97, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 32 }; + +static symbol s_0[] = { 'k' }; +static symbol s_1[] = { 'k', 's', 'e' }; +static symbol s_2[] = { 'k', 's', 'i' }; +static symbol s_3[] = { 'i' }; +static symbol s_4[] = { 'a' }; +static symbol s_5[] = { 'e' }; +static symbol s_6[] = { 'i' }; +static symbol s_7[] = { 'o' }; +static symbol s_8[] = { 0xE4 }; +static symbol s_9[] = { 0xF6 }; +static symbol s_10[] = { 'i', 'e' }; +static symbol s_11[] = { 'e' }; +static symbol s_12[] = { 'p', 'o' }; +static symbol s_13[] = { 't' }; +static symbol s_14[] = { 'p', 'o' }; +static symbol s_15[] = { 'j' }; +static symbol s_16[] = { 'o' }; +static symbol s_17[] = { 'u' }; +static symbol s_18[] = { 'o' }; +static symbol s_19[] = { 'j' }; + +static int r_mark_regions(struct SN_env * z) { + z->I[0] = z->l; + z->I[1] = z->l; + while(1) { /* goto, line 46 */ + int c = z->c; + if (!(in_grouping(z, g_V1, 97, 246))) goto lab0; + z->c = c; + break; + lab0: + z->c = c; + if (z->c >= z->l) return 0; + z->c++; /* goto, line 46 */ + } + while(1) { /* gopast, line 46 */ + if (!(out_grouping(z, g_V1, 97, 246))) goto lab1; + break; + lab1: + if (z->c >= z->l) return 0; + z->c++; /* gopast, line 46 */ + } + z->I[0] = z->c; /* setmark p1, line 46 */ + while(1) { /* goto, line 47 */ + int c = z->c; + if (!(in_grouping(z, g_V1, 97, 246))) goto lab2; + z->c = c; + break; + lab2: + z->c = c; + if (z->c >= z->l) return 0; + z->c++; /* goto, line 47 */ + } + while(1) { /* gopast, line 47 */ + if (!(out_grouping(z, g_V1, 97, 246))) goto lab3; + break; + lab3: + if (z->c >= z->l) return 0; + z->c++; /* gopast, line 47 */ + } + z->I[1] = z->c; /* setmark p2, line 47 */ + return 1; +} + +static int r_R2(struct SN_env * z) { + if (!(z->I[1] <= z->c)) return 0; + return 1; +} + +static int r_particle_etc(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 55 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 55 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 55 */ + among_var = find_among_b(z, a_0, 10); /* substring, line 55 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 55 */ + z->lb = m3; + } + switch(among_var) { + case 0: return 0; + case 1: + if (!(in_grouping_b(z, g_particle_end, 97, 246))) return 0; + break; + case 2: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 64 */ + if (ret < 0) return ret; + } + break; + } + { int ret; + ret = slice_del(z); /* delete, line 66 */ + if (ret < 0) return ret; + } + return 1; +} + +static int r_possessive(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 69 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 69 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 69 */ + among_var = find_among_b(z, a_4, 9); /* substring, line 69 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 69 */ + z->lb = m3; + } + switch(among_var) { + case 0: return 0; + case 1: + { int m = z->l - z->c; (void) m; /* not, line 72 */ + if (!(eq_s_b(z, 1, s_0))) goto lab0; + return 0; + lab0: + z->c = z->l - m; + } + { int ret; + ret = slice_del(z); /* delete, line 72 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_del(z); /* delete, line 74 */ + if (ret < 0) return ret; + } + z->ket = z->c; /* [, line 74 */ + if (!(eq_s_b(z, 3, s_1))) return 0; + z->bra = z->c; /* ], line 74 */ + { int ret; + ret = slice_from_s(z, 3, s_2); /* <-, line 74 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_del(z); /* delete, line 78 */ + if (ret < 0) return ret; + } + break; + case 4: + if (!(find_among_b(z, a_1, 6))) return 0; /* among, line 81 */ + { int ret; + ret = slice_del(z); /* delete, line 81 */ + if (ret < 0) return ret; + } + break; + case 5: + if (!(find_among_b(z, a_2, 6))) return 0; /* among, line 83 */ + { int ret; + ret = slice_del(z); /* delete, line 84 */ + if (ret < 0) return ret; + } + break; + case 6: + if (!(find_among_b(z, a_3, 2))) return 0; /* among, line 86 */ + { int ret; + ret = slice_del(z); /* delete, line 86 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_LONG(struct SN_env * z) { + if (!(find_among_b(z, a_5, 7))) return 0; /* among, line 91 */ + return 1; +} + +static int r_VI(struct SN_env * z) { + if (!(eq_s_b(z, 1, s_3))) return 0; + if (!(in_grouping_b(z, g_V2, 97, 246))) return 0; + return 1; +} + +static int r_case_ending(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 96 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 96 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 96 */ + among_var = find_among_b(z, a_6, 30); /* substring, line 96 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 96 */ + z->lb = m3; + } + switch(among_var) { + case 0: return 0; + case 1: + if (!(eq_s_b(z, 1, s_4))) return 0; + break; + case 2: + if (!(eq_s_b(z, 1, s_5))) return 0; + break; + case 3: + if (!(eq_s_b(z, 1, s_6))) return 0; + break; + case 4: + if (!(eq_s_b(z, 1, s_7))) return 0; + break; + case 5: + if (!(eq_s_b(z, 1, s_8))) return 0; + break; + case 6: + if (!(eq_s_b(z, 1, s_9))) return 0; + break; + case 7: + { int m = z->l - z->c; (void) m; /* try, line 111 */ + { int m = z->l - z->c; (void) m; /* and, line 113 */ + { int m = z->l - z->c; (void) m; /* or, line 112 */ + { int ret = r_LONG(z); + if (ret == 0) goto lab2; /* call LONG, line 111 */ + if (ret < 0) return ret; + } + goto lab1; + lab2: + z->c = z->l - m; + if (!(eq_s_b(z, 2, s_10))) { z->c = z->l - m; goto lab0; } + } + lab1: + z->c = z->l - m; + if (z->c <= z->lb) { z->c = z->l - m; goto lab0; } + z->c--; /* next, line 113 */ + } + z->bra = z->c; /* ], line 113 */ + lab0: + ; + } + break; + case 8: + if (!(in_grouping_b(z, g_V1, 97, 246))) return 0; + if (!(out_grouping_b(z, g_V1, 97, 246))) return 0; + break; + case 9: + if (!(eq_s_b(z, 1, s_11))) return 0; + break; + } + { int ret; + ret = slice_del(z); /* delete, line 138 */ + if (ret < 0) return ret; + } + z->B[0] = 1; /* set ending_removed, line 139 */ + return 1; +} + +static int r_other_endings(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 142 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[1]) return 0; + z->c = z->I[1]; /* tomark, line 142 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 142 */ + among_var = find_among_b(z, a_7, 14); /* substring, line 142 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 142 */ + z->lb = m3; + } + switch(among_var) { + case 0: return 0; + case 1: + { int m = z->l - z->c; (void) m; /* not, line 146 */ + if (!(eq_s_b(z, 2, s_12))) goto lab0; + return 0; + lab0: + z->c = z->l - m; + } + break; + } + { int ret; + ret = slice_del(z); /* delete, line 151 */ + if (ret < 0) return ret; + } + return 1; +} + +static int r_i_plural(struct SN_env * z) { + { int m3; /* setlimit, line 154 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 154 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 154 */ + if (!(find_among_b(z, a_8, 2))) { z->lb = m3; return 0; } /* substring, line 154 */ + z->bra = z->c; /* ], line 154 */ + z->lb = m3; + } + { int ret; + ret = slice_del(z); /* delete, line 158 */ + if (ret < 0) return ret; + } + return 1; +} + +static int r_t_plural(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 161 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 161 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 162 */ + if (!(eq_s_b(z, 1, s_13))) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 162 */ + { int m_test = z->l - z->c; /* test, line 162 */ + if (!(in_grouping_b(z, g_V1, 97, 246))) { z->lb = m3; return 0; } + z->c = z->l - m_test; + } + { int ret; + ret = slice_del(z); /* delete, line 163 */ + if (ret < 0) return ret; + } + z->lb = m3; + } + { int m3; /* setlimit, line 165 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[1]) return 0; + z->c = z->I[1]; /* tomark, line 165 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 165 */ + among_var = find_among_b(z, a_9, 2); /* substring, line 165 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 165 */ + z->lb = m3; + } + switch(among_var) { + case 0: return 0; + case 1: + { int m = z->l - z->c; (void) m; /* not, line 167 */ + if (!(eq_s_b(z, 2, s_14))) goto lab0; + return 0; + lab0: + z->c = z->l - m; + } + break; + } + { int ret; + ret = slice_del(z); /* delete, line 170 */ + if (ret < 0) return ret; + } + return 1; +} + +static int r_tidy(struct SN_env * z) { + { int m3; /* setlimit, line 173 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 173 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + { int m = z->l - z->c; (void) m; /* do, line 174 */ + { int m = z->l - z->c; (void) m; /* and, line 174 */ + { int ret = r_LONG(z); + if (ret == 0) goto lab0; /* call LONG, line 174 */ + if (ret < 0) return ret; + } + z->c = z->l - m; + z->ket = z->c; /* [, line 174 */ + if (z->c <= z->lb) goto lab0; + z->c--; /* next, line 174 */ + z->bra = z->c; /* ], line 174 */ + { int ret; + ret = slice_del(z); /* delete, line 174 */ + if (ret < 0) return ret; + } + } + lab0: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 175 */ + z->ket = z->c; /* [, line 175 */ + if (!(in_grouping_b(z, g_AEI, 97, 228))) goto lab1; + z->bra = z->c; /* ], line 175 */ + if (!(out_grouping_b(z, g_V1, 97, 246))) goto lab1; + { int ret; + ret = slice_del(z); /* delete, line 175 */ + if (ret < 0) return ret; + } + lab1: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 176 */ + z->ket = z->c; /* [, line 176 */ + if (!(eq_s_b(z, 1, s_15))) goto lab2; + z->bra = z->c; /* ], line 176 */ + { int m = z->l - z->c; (void) m; /* or, line 176 */ + if (!(eq_s_b(z, 1, s_16))) goto lab4; + goto lab3; + lab4: + z->c = z->l - m; + if (!(eq_s_b(z, 1, s_17))) goto lab2; + } + lab3: + { int ret; + ret = slice_del(z); /* delete, line 176 */ + if (ret < 0) return ret; + } + lab2: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 177 */ + z->ket = z->c; /* [, line 177 */ + if (!(eq_s_b(z, 1, s_18))) goto lab5; + z->bra = z->c; /* ], line 177 */ + if (!(eq_s_b(z, 1, s_19))) goto lab5; + { int ret; + ret = slice_del(z); /* delete, line 177 */ + if (ret < 0) return ret; + } + lab5: + z->c = z->l - m; + } + z->lb = m3; + } + while(1) { /* goto, line 179 */ + int m = z->l - z->c; (void) m; + if (!(out_grouping_b(z, g_V1, 97, 246))) goto lab6; + z->c = z->l - m; + break; + lab6: + z->c = z->l - m; + if (z->c <= z->lb) return 0; + z->c--; /* goto, line 179 */ + } + z->ket = z->c; /* [, line 179 */ + if (z->c <= z->lb) return 0; + z->c--; /* next, line 179 */ + z->bra = z->c; /* ], line 179 */ + z->S[0] = slice_to(z, z->S[0]); /* -> x, line 179 */ + if (z->S[0] == 0) return -1; /* -> x, line 179 */ + if (!(eq_v_b(z, z->S[0]))) return 0; /* name x, line 179 */ + { int ret; + ret = slice_del(z); /* delete, line 179 */ + if (ret < 0) return ret; + } + return 1; +} + +extern int finnish_ISO_8859_1_stem(struct SN_env * z) { + { int c = z->c; /* do, line 185 */ + { int ret = r_mark_regions(z); + if (ret == 0) goto lab0; /* call mark_regions, line 185 */ + if (ret < 0) return ret; + } + lab0: + z->c = c; + } + z->B[0] = 0; /* unset ending_removed, line 186 */ + z->lb = z->c; z->c = z->l; /* backwards, line 187 */ + + { int m = z->l - z->c; (void) m; /* do, line 188 */ + { int ret = r_particle_etc(z); + if (ret == 0) goto lab1; /* call particle_etc, line 188 */ + if (ret < 0) return ret; + } + lab1: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 189 */ + { int ret = r_possessive(z); + if (ret == 0) goto lab2; /* call possessive, line 189 */ + if (ret < 0) return ret; + } + lab2: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 190 */ + { int ret = r_case_ending(z); + if (ret == 0) goto lab3; /* call case_ending, line 190 */ + if (ret < 0) return ret; + } + lab3: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 191 */ + { int ret = r_other_endings(z); + if (ret == 0) goto lab4; /* call other_endings, line 191 */ + if (ret < 0) return ret; + } + lab4: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* or, line 192 */ + if (!(z->B[0])) goto lab6; /* Boolean test ending_removed, line 192 */ + { int m = z->l - z->c; (void) m; /* do, line 192 */ + { int ret = r_i_plural(z); + if (ret == 0) goto lab7; /* call i_plural, line 192 */ + if (ret < 0) return ret; + } + lab7: + z->c = z->l - m; + } + goto lab5; + lab6: + z->c = z->l - m; + { int m = z->l - z->c; (void) m; /* do, line 192 */ + { int ret = r_t_plural(z); + if (ret == 0) goto lab8; /* call t_plural, line 192 */ + if (ret < 0) return ret; + } + lab8: + z->c = z->l - m; + } + } +lab5: + { int m = z->l - z->c; (void) m; /* do, line 193 */ + { int ret = r_tidy(z); + if (ret == 0) goto lab9; /* call tidy, line 193 */ + if (ret < 0) return ret; + } + lab9: + z->c = z->l - m; + } + z->c = z->lb; + return 1; +} + +extern struct SN_env * finnish_ISO_8859_1_create_env(void) { return SN_create_env(1, 2, 1); } + +extern void finnish_ISO_8859_1_close_env(struct SN_env * z) { SN_close_env(z); } + diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_finnish.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_finnish.h new file mode 100644 index 0000000..c67b67b --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_finnish.h @@ -0,0 +1,16 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern struct SN_env * finnish_ISO_8859_1_create_env(void); +extern void finnish_ISO_8859_1_close_env(struct SN_env * z); + +extern int finnish_ISO_8859_1_stem(struct SN_env * z); + +#ifdef __cplusplus +} +#endif + diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_french.c b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_french.c new file mode 100644 index 0000000..e4eb80d --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_french.c @@ -0,0 +1,1276 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#include "../runtime/header.h" + +extern int french_ISO_8859_1_stem(struct SN_env * z); +static int r_un_accent(struct SN_env * z); +static int r_un_double(struct SN_env * z); +static int r_residual_suffix(struct SN_env * z); +static int r_verb_suffix(struct SN_env * z); +static int r_i_verb_suffix(struct SN_env * z); +static int r_standard_suffix(struct SN_env * z); +static int r_R2(struct SN_env * z); +static int r_R1(struct SN_env * z); +static int r_RV(struct SN_env * z); +static int r_mark_regions(struct SN_env * z); +static int r_postlude(struct SN_env * z); +static int r_prelude(struct SN_env * z); + +extern struct SN_env * french_ISO_8859_1_create_env(void); +extern void french_ISO_8859_1_close_env(struct SN_env * z); + +static symbol s_0_1[1] = { 'I' }; +static symbol s_0_2[1] = { 'U' }; +static symbol s_0_3[1] = { 'Y' }; + +static struct among a_0[4] = +{ +/* 0 */ { 0, 0, -1, 4, 0}, +/* 1 */ { 1, s_0_1, 0, 1, 0}, +/* 2 */ { 1, s_0_2, 0, 2, 0}, +/* 3 */ { 1, s_0_3, 0, 3, 0} +}; + +static symbol s_1_0[3] = { 'i', 'q', 'U' }; +static symbol s_1_1[3] = { 'a', 'b', 'l' }; +static symbol s_1_2[3] = { 'I', 0xE8, 'r' }; +static symbol s_1_3[3] = { 'i', 0xE8, 'r' }; +static symbol s_1_4[3] = { 'e', 'u', 's' }; +static symbol s_1_5[2] = { 'i', 'v' }; + +static struct among a_1[6] = +{ +/* 0 */ { 3, s_1_0, -1, 3, 0}, +/* 1 */ { 3, s_1_1, -1, 3, 0}, +/* 2 */ { 3, s_1_2, -1, 4, 0}, +/* 3 */ { 3, s_1_3, -1, 4, 0}, +/* 4 */ { 3, s_1_4, -1, 2, 0}, +/* 5 */ { 2, s_1_5, -1, 1, 0} +}; + +static symbol s_2_0[2] = { 'i', 'c' }; +static symbol s_2_1[4] = { 'a', 'b', 'i', 'l' }; +static symbol s_2_2[2] = { 'i', 'v' }; + +static struct among a_2[3] = +{ +/* 0 */ { 2, s_2_0, -1, 2, 0}, +/* 1 */ { 4, s_2_1, -1, 1, 0}, +/* 2 */ { 2, s_2_2, -1, 3, 0} +}; + +static symbol s_3_0[4] = { 'i', 'q', 'U', 'e' }; +static symbol s_3_1[6] = { 'a', 't', 'r', 'i', 'c', 'e' }; +static symbol s_3_2[4] = { 'a', 'n', 'c', 'e' }; +static symbol s_3_3[4] = { 'e', 'n', 'c', 'e' }; +static symbol s_3_4[5] = { 'l', 'o', 'g', 'i', 'e' }; +static symbol s_3_5[4] = { 'a', 'b', 'l', 'e' }; +static symbol s_3_6[4] = { 'i', 's', 'm', 'e' }; +static symbol s_3_7[4] = { 'e', 'u', 's', 'e' }; +static symbol s_3_8[4] = { 'i', 's', 't', 'e' }; +static symbol s_3_9[3] = { 'i', 'v', 'e' }; +static symbol s_3_10[2] = { 'i', 'f' }; +static symbol s_3_11[5] = { 'u', 's', 'i', 'o', 'n' }; +static symbol s_3_12[5] = { 'a', 't', 'i', 'o', 'n' }; +static symbol s_3_13[5] = { 'u', 't', 'i', 'o', 'n' }; +static symbol s_3_14[5] = { 'a', 't', 'e', 'u', 'r' }; +static symbol s_3_15[5] = { 'i', 'q', 'U', 'e', 's' }; +static symbol s_3_16[7] = { 'a', 't', 'r', 'i', 'c', 'e', 's' }; +static symbol s_3_17[5] = { 'a', 'n', 'c', 'e', 's' }; +static symbol s_3_18[5] = { 'e', 'n', 'c', 'e', 's' }; +static symbol s_3_19[6] = { 'l', 'o', 'g', 'i', 'e', 's' }; +static symbol s_3_20[5] = { 'a', 'b', 'l', 'e', 's' }; +static symbol s_3_21[5] = { 'i', 's', 'm', 'e', 's' }; +static symbol s_3_22[5] = { 'e', 'u', 's', 'e', 's' }; +static symbol s_3_23[5] = { 'i', 's', 't', 'e', 's' }; +static symbol s_3_24[4] = { 'i', 'v', 'e', 's' }; +static symbol s_3_25[3] = { 'i', 'f', 's' }; +static symbol s_3_26[6] = { 'u', 's', 'i', 'o', 'n', 's' }; +static symbol s_3_27[6] = { 'a', 't', 'i', 'o', 'n', 's' }; +static symbol s_3_28[6] = { 'u', 't', 'i', 'o', 'n', 's' }; +static symbol s_3_29[6] = { 'a', 't', 'e', 'u', 'r', 's' }; +static symbol s_3_30[5] = { 'm', 'e', 'n', 't', 's' }; +static symbol s_3_31[6] = { 'e', 'm', 'e', 'n', 't', 's' }; +static symbol s_3_32[9] = { 'i', 's', 's', 'e', 'm', 'e', 'n', 't', 's' }; +static symbol s_3_33[4] = { 'i', 't', 0xE9, 's' }; +static symbol s_3_34[4] = { 'm', 'e', 'n', 't' }; +static symbol s_3_35[5] = { 'e', 'm', 'e', 'n', 't' }; +static symbol s_3_36[8] = { 'i', 's', 's', 'e', 'm', 'e', 'n', 't' }; +static symbol s_3_37[6] = { 'a', 'm', 'm', 'e', 'n', 't' }; +static symbol s_3_38[6] = { 'e', 'm', 'm', 'e', 'n', 't' }; +static symbol s_3_39[3] = { 'a', 'u', 'x' }; +static symbol s_3_40[4] = { 'e', 'a', 'u', 'x' }; +static symbol s_3_41[3] = { 'e', 'u', 'x' }; +static symbol s_3_42[3] = { 'i', 't', 0xE9 }; + +static struct among a_3[43] = +{ +/* 0 */ { 4, s_3_0, -1, 1, 0}, +/* 1 */ { 6, s_3_1, -1, 2, 0}, +/* 2 */ { 4, s_3_2, -1, 1, 0}, +/* 3 */ { 4, s_3_3, -1, 5, 0}, +/* 4 */ { 5, s_3_4, -1, 3, 0}, +/* 5 */ { 4, s_3_5, -1, 1, 0}, +/* 6 */ { 4, s_3_6, -1, 1, 0}, +/* 7 */ { 4, s_3_7, -1, 11, 0}, +/* 8 */ { 4, s_3_8, -1, 1, 0}, +/* 9 */ { 3, s_3_9, -1, 8, 0}, +/* 10 */ { 2, s_3_10, -1, 8, 0}, +/* 11 */ { 5, s_3_11, -1, 4, 0}, +/* 12 */ { 5, s_3_12, -1, 2, 0}, +/* 13 */ { 5, s_3_13, -1, 4, 0}, +/* 14 */ { 5, s_3_14, -1, 2, 0}, +/* 15 */ { 5, s_3_15, -1, 1, 0}, +/* 16 */ { 7, s_3_16, -1, 2, 0}, +/* 17 */ { 5, s_3_17, -1, 1, 0}, +/* 18 */ { 5, s_3_18, -1, 5, 0}, +/* 19 */ { 6, s_3_19, -1, 3, 0}, +/* 20 */ { 5, s_3_20, -1, 1, 0}, +/* 21 */ { 5, s_3_21, -1, 1, 0}, +/* 22 */ { 5, s_3_22, -1, 11, 0}, +/* 23 */ { 5, s_3_23, -1, 1, 0}, +/* 24 */ { 4, s_3_24, -1, 8, 0}, +/* 25 */ { 3, s_3_25, -1, 8, 0}, +/* 26 */ { 6, s_3_26, -1, 4, 0}, +/* 27 */ { 6, s_3_27, -1, 2, 0}, +/* 28 */ { 6, s_3_28, -1, 4, 0}, +/* 29 */ { 6, s_3_29, -1, 2, 0}, +/* 30 */ { 5, s_3_30, -1, 15, 0}, +/* 31 */ { 6, s_3_31, 30, 6, 0}, +/* 32 */ { 9, s_3_32, 31, 12, 0}, +/* 33 */ { 4, s_3_33, -1, 7, 0}, +/* 34 */ { 4, s_3_34, -1, 15, 0}, +/* 35 */ { 5, s_3_35, 34, 6, 0}, +/* 36 */ { 8, s_3_36, 35, 12, 0}, +/* 37 */ { 6, s_3_37, 34, 13, 0}, +/* 38 */ { 6, s_3_38, 34, 14, 0}, +/* 39 */ { 3, s_3_39, -1, 10, 0}, +/* 40 */ { 4, s_3_40, 39, 9, 0}, +/* 41 */ { 3, s_3_41, -1, 1, 0}, +/* 42 */ { 3, s_3_42, -1, 7, 0} +}; + +static symbol s_4_0[3] = { 'i', 'r', 'a' }; +static symbol s_4_1[2] = { 'i', 'e' }; +static symbol s_4_2[4] = { 'i', 's', 's', 'e' }; +static symbol s_4_3[7] = { 'i', 's', 's', 'a', 'n', 't', 'e' }; +static symbol s_4_4[1] = { 'i' }; +static symbol s_4_5[4] = { 'i', 'r', 'a', 'i' }; +static symbol s_4_6[2] = { 'i', 'r' }; +static symbol s_4_7[4] = { 'i', 'r', 'a', 's' }; +static symbol s_4_8[3] = { 'i', 'e', 's' }; +static symbol s_4_9[4] = { 0xEE, 'm', 'e', 's' }; +static symbol s_4_10[5] = { 'i', 's', 's', 'e', 's' }; +static symbol s_4_11[8] = { 'i', 's', 's', 'a', 'n', 't', 'e', 's' }; +static symbol s_4_12[4] = { 0xEE, 't', 'e', 's' }; +static symbol s_4_13[2] = { 'i', 's' }; +static symbol s_4_14[5] = { 'i', 'r', 'a', 'i', 's' }; +static symbol s_4_15[6] = { 'i', 's', 's', 'a', 'i', 's' }; +static symbol s_4_16[6] = { 'i', 'r', 'i', 'o', 'n', 's' }; +static symbol s_4_17[7] = { 'i', 's', 's', 'i', 'o', 'n', 's' }; +static symbol s_4_18[5] = { 'i', 'r', 'o', 'n', 's' }; +static symbol s_4_19[6] = { 'i', 's', 's', 'o', 'n', 's' }; +static symbol s_4_20[7] = { 'i', 's', 's', 'a', 'n', 't', 's' }; +static symbol s_4_21[2] = { 'i', 't' }; +static symbol s_4_22[5] = { 'i', 'r', 'a', 'i', 't' }; +static symbol s_4_23[6] = { 'i', 's', 's', 'a', 'i', 't' }; +static symbol s_4_24[6] = { 'i', 's', 's', 'a', 'n', 't' }; +static symbol s_4_25[7] = { 'i', 'r', 'a', 'I', 'e', 'n', 't' }; +static symbol s_4_26[8] = { 'i', 's', 's', 'a', 'I', 'e', 'n', 't' }; +static symbol s_4_27[5] = { 'i', 'r', 'e', 'n', 't' }; +static symbol s_4_28[6] = { 'i', 's', 's', 'e', 'n', 't' }; +static symbol s_4_29[5] = { 'i', 'r', 'o', 'n', 't' }; +static symbol s_4_30[2] = { 0xEE, 't' }; +static symbol s_4_31[5] = { 'i', 'r', 'i', 'e', 'z' }; +static symbol s_4_32[6] = { 'i', 's', 's', 'i', 'e', 'z' }; +static symbol s_4_33[4] = { 'i', 'r', 'e', 'z' }; +static symbol s_4_34[5] = { 'i', 's', 's', 'e', 'z' }; + +static struct among a_4[35] = +{ +/* 0 */ { 3, s_4_0, -1, 1, 0}, +/* 1 */ { 2, s_4_1, -1, 1, 0}, +/* 2 */ { 4, s_4_2, -1, 1, 0}, +/* 3 */ { 7, s_4_3, -1, 1, 0}, +/* 4 */ { 1, s_4_4, -1, 1, 0}, +/* 5 */ { 4, s_4_5, 4, 1, 0}, +/* 6 */ { 2, s_4_6, -1, 1, 0}, +/* 7 */ { 4, s_4_7, -1, 1, 0}, +/* 8 */ { 3, s_4_8, -1, 1, 0}, +/* 9 */ { 4, s_4_9, -1, 1, 0}, +/* 10 */ { 5, s_4_10, -1, 1, 0}, +/* 11 */ { 8, s_4_11, -1, 1, 0}, +/* 12 */ { 4, s_4_12, -1, 1, 0}, +/* 13 */ { 2, s_4_13, -1, 1, 0}, +/* 14 */ { 5, s_4_14, 13, 1, 0}, +/* 15 */ { 6, s_4_15, 13, 1, 0}, +/* 16 */ { 6, s_4_16, -1, 1, 0}, +/* 17 */ { 7, s_4_17, -1, 1, 0}, +/* 18 */ { 5, s_4_18, -1, 1, 0}, +/* 19 */ { 6, s_4_19, -1, 1, 0}, +/* 20 */ { 7, s_4_20, -1, 1, 0}, +/* 21 */ { 2, s_4_21, -1, 1, 0}, +/* 22 */ { 5, s_4_22, 21, 1, 0}, +/* 23 */ { 6, s_4_23, 21, 1, 0}, +/* 24 */ { 6, s_4_24, -1, 1, 0}, +/* 25 */ { 7, s_4_25, -1, 1, 0}, +/* 26 */ { 8, s_4_26, -1, 1, 0}, +/* 27 */ { 5, s_4_27, -1, 1, 0}, +/* 28 */ { 6, s_4_28, -1, 1, 0}, +/* 29 */ { 5, s_4_29, -1, 1, 0}, +/* 30 */ { 2, s_4_30, -1, 1, 0}, +/* 31 */ { 5, s_4_31, -1, 1, 0}, +/* 32 */ { 6, s_4_32, -1, 1, 0}, +/* 33 */ { 4, s_4_33, -1, 1, 0}, +/* 34 */ { 5, s_4_34, -1, 1, 0} +}; + +static symbol s_5_0[1] = { 'a' }; +static symbol s_5_1[3] = { 'e', 'r', 'a' }; +static symbol s_5_2[4] = { 'a', 's', 's', 'e' }; +static symbol s_5_3[4] = { 'a', 'n', 't', 'e' }; +static symbol s_5_4[2] = { 0xE9, 'e' }; +static symbol s_5_5[2] = { 'a', 'i' }; +static symbol s_5_6[4] = { 'e', 'r', 'a', 'i' }; +static symbol s_5_7[2] = { 'e', 'r' }; +static symbol s_5_8[2] = { 'a', 's' }; +static symbol s_5_9[4] = { 'e', 'r', 'a', 's' }; +static symbol s_5_10[4] = { 0xE2, 'm', 'e', 's' }; +static symbol s_5_11[5] = { 'a', 's', 's', 'e', 's' }; +static symbol s_5_12[5] = { 'a', 'n', 't', 'e', 's' }; +static symbol s_5_13[4] = { 0xE2, 't', 'e', 's' }; +static symbol s_5_14[3] = { 0xE9, 'e', 's' }; +static symbol s_5_15[3] = { 'a', 'i', 's' }; +static symbol s_5_16[5] = { 'e', 'r', 'a', 'i', 's' }; +static symbol s_5_17[4] = { 'i', 'o', 'n', 's' }; +static symbol s_5_18[6] = { 'e', 'r', 'i', 'o', 'n', 's' }; +static symbol s_5_19[7] = { 'a', 's', 's', 'i', 'o', 'n', 's' }; +static symbol s_5_20[5] = { 'e', 'r', 'o', 'n', 's' }; +static symbol s_5_21[4] = { 'a', 'n', 't', 's' }; +static symbol s_5_22[2] = { 0xE9, 's' }; +static symbol s_5_23[3] = { 'a', 'i', 't' }; +static symbol s_5_24[5] = { 'e', 'r', 'a', 'i', 't' }; +static symbol s_5_25[3] = { 'a', 'n', 't' }; +static symbol s_5_26[5] = { 'a', 'I', 'e', 'n', 't' }; +static symbol s_5_27[7] = { 'e', 'r', 'a', 'I', 'e', 'n', 't' }; +static symbol s_5_28[5] = { 0xE8, 'r', 'e', 'n', 't' }; +static symbol s_5_29[6] = { 'a', 's', 's', 'e', 'n', 't' }; +static symbol s_5_30[5] = { 'e', 'r', 'o', 'n', 't' }; +static symbol s_5_31[2] = { 0xE2, 't' }; +static symbol s_5_32[2] = { 'e', 'z' }; +static symbol s_5_33[3] = { 'i', 'e', 'z' }; +static symbol s_5_34[5] = { 'e', 'r', 'i', 'e', 'z' }; +static symbol s_5_35[6] = { 'a', 's', 's', 'i', 'e', 'z' }; +static symbol s_5_36[4] = { 'e', 'r', 'e', 'z' }; +static symbol s_5_37[1] = { 0xE9 }; + +static struct among a_5[38] = +{ +/* 0 */ { 1, s_5_0, -1, 3, 0}, +/* 1 */ { 3, s_5_1, 0, 2, 0}, +/* 2 */ { 4, s_5_2, -1, 3, 0}, +/* 3 */ { 4, s_5_3, -1, 3, 0}, +/* 4 */ { 2, s_5_4, -1, 2, 0}, +/* 5 */ { 2, s_5_5, -1, 3, 0}, +/* 6 */ { 4, s_5_6, 5, 2, 0}, +/* 7 */ { 2, s_5_7, -1, 2, 0}, +/* 8 */ { 2, s_5_8, -1, 3, 0}, +/* 9 */ { 4, s_5_9, 8, 2, 0}, +/* 10 */ { 4, s_5_10, -1, 3, 0}, +/* 11 */ { 5, s_5_11, -1, 3, 0}, +/* 12 */ { 5, s_5_12, -1, 3, 0}, +/* 13 */ { 4, s_5_13, -1, 3, 0}, +/* 14 */ { 3, s_5_14, -1, 2, 0}, +/* 15 */ { 3, s_5_15, -1, 3, 0}, +/* 16 */ { 5, s_5_16, 15, 2, 0}, +/* 17 */ { 4, s_5_17, -1, 1, 0}, +/* 18 */ { 6, s_5_18, 17, 2, 0}, +/* 19 */ { 7, s_5_19, 17, 3, 0}, +/* 20 */ { 5, s_5_20, -1, 2, 0}, +/* 21 */ { 4, s_5_21, -1, 3, 0}, +/* 22 */ { 2, s_5_22, -1, 2, 0}, +/* 23 */ { 3, s_5_23, -1, 3, 0}, +/* 24 */ { 5, s_5_24, 23, 2, 0}, +/* 25 */ { 3, s_5_25, -1, 3, 0}, +/* 26 */ { 5, s_5_26, -1, 3, 0}, +/* 27 */ { 7, s_5_27, 26, 2, 0}, +/* 28 */ { 5, s_5_28, -1, 2, 0}, +/* 29 */ { 6, s_5_29, -1, 3, 0}, +/* 30 */ { 5, s_5_30, -1, 2, 0}, +/* 31 */ { 2, s_5_31, -1, 3, 0}, +/* 32 */ { 2, s_5_32, -1, 2, 0}, +/* 33 */ { 3, s_5_33, 32, 2, 0}, +/* 34 */ { 5, s_5_34, 33, 2, 0}, +/* 35 */ { 6, s_5_35, 33, 3, 0}, +/* 36 */ { 4, s_5_36, 32, 2, 0}, +/* 37 */ { 1, s_5_37, -1, 2, 0} +}; + +static symbol s_6_0[1] = { 'e' }; +static symbol s_6_1[4] = { 'I', 0xE8, 'r', 'e' }; +static symbol s_6_2[4] = { 'i', 0xE8, 'r', 'e' }; +static symbol s_6_3[3] = { 'i', 'o', 'n' }; +static symbol s_6_4[3] = { 'I', 'e', 'r' }; +static symbol s_6_5[3] = { 'i', 'e', 'r' }; +static symbol s_6_6[1] = { 0xEB }; + +static struct among a_6[7] = +{ +/* 0 */ { 1, s_6_0, -1, 3, 0}, +/* 1 */ { 4, s_6_1, 0, 2, 0}, +/* 2 */ { 4, s_6_2, 0, 2, 0}, +/* 3 */ { 3, s_6_3, -1, 1, 0}, +/* 4 */ { 3, s_6_4, -1, 2, 0}, +/* 5 */ { 3, s_6_5, -1, 2, 0}, +/* 6 */ { 1, s_6_6, -1, 4, 0} +}; + +static symbol s_7_0[3] = { 'e', 'l', 'l' }; +static symbol s_7_1[4] = { 'e', 'i', 'l', 'l' }; +static symbol s_7_2[3] = { 'e', 'n', 'n' }; +static symbol s_7_3[3] = { 'o', 'n', 'n' }; +static symbol s_7_4[3] = { 'e', 't', 't' }; + +static struct among a_7[5] = +{ +/* 0 */ { 3, s_7_0, -1, -1, 0}, +/* 1 */ { 4, s_7_1, -1, -1, 0}, +/* 2 */ { 3, s_7_2, -1, -1, 0}, +/* 3 */ { 3, s_7_3, -1, -1, 0}, +/* 4 */ { 3, s_7_4, -1, -1, 0} +}; + +static unsigned char g_v[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 130, 103, 8, 5 }; + +static unsigned char g_keep_with_s[] = { 1, 65, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128 }; + +static symbol s_0[] = { 'u' }; +static symbol s_1[] = { 'U' }; +static symbol s_2[] = { 'i' }; +static symbol s_3[] = { 'I' }; +static symbol s_4[] = { 'y' }; +static symbol s_5[] = { 'Y' }; +static symbol s_6[] = { 'y' }; +static symbol s_7[] = { 'Y' }; +static symbol s_8[] = { 'q' }; +static symbol s_9[] = { 'u' }; +static symbol s_10[] = { 'U' }; +static symbol s_11[] = { 'i' }; +static symbol s_12[] = { 'u' }; +static symbol s_13[] = { 'y' }; +static symbol s_14[] = { 'i', 'c' }; +static symbol s_15[] = { 'i', 'q', 'U' }; +static symbol s_16[] = { 'l', 'o', 'g' }; +static symbol s_17[] = { 'u' }; +static symbol s_18[] = { 'e', 'n', 't' }; +static symbol s_19[] = { 'a', 't' }; +static symbol s_20[] = { 'e', 'u', 'x' }; +static symbol s_21[] = { 'i' }; +static symbol s_22[] = { 'a', 'b', 'l' }; +static symbol s_23[] = { 'i', 'q', 'U' }; +static symbol s_24[] = { 'a', 't' }; +static symbol s_25[] = { 'i', 'c' }; +static symbol s_26[] = { 'i', 'q', 'U' }; +static symbol s_27[] = { 'e', 'a', 'u' }; +static symbol s_28[] = { 'a', 'l' }; +static symbol s_29[] = { 'e', 'u', 'x' }; +static symbol s_30[] = { 'a', 'n', 't' }; +static symbol s_31[] = { 'e', 'n', 't' }; +static symbol s_32[] = { 'e' }; +static symbol s_33[] = { 's' }; +static symbol s_34[] = { 's' }; +static symbol s_35[] = { 't' }; +static symbol s_36[] = { 'i' }; +static symbol s_37[] = { 'g', 'u' }; +static symbol s_38[] = { 0xE9 }; +static symbol s_39[] = { 0xE8 }; +static symbol s_40[] = { 'e' }; +static symbol s_41[] = { 'Y' }; +static symbol s_42[] = { 'i' }; +static symbol s_43[] = { 0xE7 }; +static symbol s_44[] = { 'c' }; + +static int r_prelude(struct SN_env * z) { + while(1) { /* repeat, line 38 */ + int c = z->c; + while(1) { /* goto, line 38 */ + int c = z->c; + { int c = z->c; /* or, line 44 */ + if (!(in_grouping(z, g_v, 97, 251))) goto lab3; + z->bra = z->c; /* [, line 40 */ + { int c = z->c; /* or, line 40 */ + if (!(eq_s(z, 1, s_0))) goto lab5; + z->ket = z->c; /* ], line 40 */ + if (!(in_grouping(z, g_v, 97, 251))) goto lab5; + { int ret; + ret = slice_from_s(z, 1, s_1); /* <-, line 40 */ + if (ret < 0) return ret; + } + goto lab4; + lab5: + z->c = c; + if (!(eq_s(z, 1, s_2))) goto lab6; + z->ket = z->c; /* ], line 41 */ + if (!(in_grouping(z, g_v, 97, 251))) goto lab6; + { int ret; + ret = slice_from_s(z, 1, s_3); /* <-, line 41 */ + if (ret < 0) return ret; + } + goto lab4; + lab6: + z->c = c; + if (!(eq_s(z, 1, s_4))) goto lab3; + z->ket = z->c; /* ], line 42 */ + { int ret; + ret = slice_from_s(z, 1, s_5); /* <-, line 42 */ + if (ret < 0) return ret; + } + } + lab4: + goto lab2; + lab3: + z->c = c; + z->bra = z->c; /* [, line 45 */ + if (!(eq_s(z, 1, s_6))) goto lab7; + z->ket = z->c; /* ], line 45 */ + if (!(in_grouping(z, g_v, 97, 251))) goto lab7; + { int ret; + ret = slice_from_s(z, 1, s_7); /* <-, line 45 */ + if (ret < 0) return ret; + } + goto lab2; + lab7: + z->c = c; + if (!(eq_s(z, 1, s_8))) goto lab1; + z->bra = z->c; /* [, line 47 */ + if (!(eq_s(z, 1, s_9))) goto lab1; + z->ket = z->c; /* ], line 47 */ + { int ret; + ret = slice_from_s(z, 1, s_10); /* <-, line 47 */ + if (ret < 0) return ret; + } + } + lab2: + z->c = c; + break; + lab1: + z->c = c; + if (z->c >= z->l) goto lab0; + z->c++; /* goto, line 38 */ + } + continue; + lab0: + z->c = c; + break; + } + return 1; +} + +static int r_mark_regions(struct SN_env * z) { + z->I[0] = z->l; + z->I[1] = z->l; + z->I[2] = z->l; + { int c = z->c; /* do, line 56 */ + { int c = z->c; /* or, line 57 */ + if (!(in_grouping(z, g_v, 97, 251))) goto lab2; + if (!(in_grouping(z, g_v, 97, 251))) goto lab2; + if (z->c >= z->l) goto lab2; + z->c++; /* next, line 57 */ + goto lab1; + lab2: + z->c = c; + if (z->c >= z->l) goto lab0; + z->c++; /* next, line 57 */ + while(1) { /* gopast, line 57 */ + if (!(in_grouping(z, g_v, 97, 251))) goto lab3; + break; + lab3: + if (z->c >= z->l) goto lab0; + z->c++; /* gopast, line 57 */ + } + } + lab1: + z->I[0] = z->c; /* setmark pV, line 58 */ + lab0: + z->c = c; + } + { int c = z->c; /* do, line 60 */ + while(1) { /* gopast, line 61 */ + if (!(in_grouping(z, g_v, 97, 251))) goto lab5; + break; + lab5: + if (z->c >= z->l) goto lab4; + z->c++; /* gopast, line 61 */ + } + while(1) { /* gopast, line 61 */ + if (!(out_grouping(z, g_v, 97, 251))) goto lab6; + break; + lab6: + if (z->c >= z->l) goto lab4; + z->c++; /* gopast, line 61 */ + } + z->I[1] = z->c; /* setmark p1, line 61 */ + while(1) { /* gopast, line 62 */ + if (!(in_grouping(z, g_v, 97, 251))) goto lab7; + break; + lab7: + if (z->c >= z->l) goto lab4; + z->c++; /* gopast, line 62 */ + } + while(1) { /* gopast, line 62 */ + if (!(out_grouping(z, g_v, 97, 251))) goto lab8; + break; + lab8: + if (z->c >= z->l) goto lab4; + z->c++; /* gopast, line 62 */ + } + z->I[2] = z->c; /* setmark p2, line 62 */ + lab4: + z->c = c; + } + return 1; +} + +static int r_postlude(struct SN_env * z) { + int among_var; + while(1) { /* repeat, line 66 */ + int c = z->c; + z->bra = z->c; /* [, line 68 */ + among_var = find_among(z, a_0, 4); /* substring, line 68 */ + if (!(among_var)) goto lab0; + z->ket = z->c; /* ], line 68 */ + switch(among_var) { + case 0: goto lab0; + case 1: + { int ret; + ret = slice_from_s(z, 1, s_11); /* <-, line 69 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 1, s_12); /* <-, line 70 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_from_s(z, 1, s_13); /* <-, line 71 */ + if (ret < 0) return ret; + } + break; + case 4: + if (z->c >= z->l) goto lab0; + z->c++; /* next, line 72 */ + break; + } + continue; + lab0: + z->c = c; + break; + } + return 1; +} + +static int r_RV(struct SN_env * z) { + if (!(z->I[0] <= z->c)) return 0; + return 1; +} + +static int r_R1(struct SN_env * z) { + if (!(z->I[1] <= z->c)) return 0; + return 1; +} + +static int r_R2(struct SN_env * z) { + if (!(z->I[2] <= z->c)) return 0; + return 1; +} + +static int r_standard_suffix(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 83 */ + among_var = find_among_b(z, a_3, 43); /* substring, line 83 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 83 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 87 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 87 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 90 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 90 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 91 */ + z->ket = z->c; /* [, line 91 */ + if (!(eq_s_b(z, 2, s_14))) { z->c = z->l - m; goto lab0; } + z->bra = z->c; /* ], line 91 */ + { int m = z->l - z->c; (void) m; /* or, line 91 */ + { int ret = r_R2(z); + if (ret == 0) goto lab2; /* call R2, line 91 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 91 */ + if (ret < 0) return ret; + } + goto lab1; + lab2: + z->c = z->l - m; + { int ret; + ret = slice_from_s(z, 3, s_15); /* <-, line 91 */ + if (ret < 0) return ret; + } + } + lab1: + lab0: + ; + } + break; + case 3: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 95 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 3, s_16); /* <-, line 95 */ + if (ret < 0) return ret; + } + break; + case 4: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 98 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 1, s_17); /* <-, line 98 */ + if (ret < 0) return ret; + } + break; + case 5: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 101 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 3, s_18); /* <-, line 101 */ + if (ret < 0) return ret; + } + break; + case 6: + { int ret = r_RV(z); + if (ret == 0) return 0; /* call RV, line 105 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 105 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 106 */ + z->ket = z->c; /* [, line 107 */ + among_var = find_among_b(z, a_1, 6); /* substring, line 107 */ + if (!(among_var)) { z->c = z->l - m; goto lab3; } + z->bra = z->c; /* ], line 107 */ + switch(among_var) { + case 0: { z->c = z->l - m; goto lab3; } + case 1: + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab3; } /* call R2, line 108 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 108 */ + if (ret < 0) return ret; + } + z->ket = z->c; /* [, line 108 */ + if (!(eq_s_b(z, 2, s_19))) { z->c = z->l - m; goto lab3; } + z->bra = z->c; /* ], line 108 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab3; } /* call R2, line 108 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 108 */ + if (ret < 0) return ret; + } + break; + case 2: + { int m = z->l - z->c; (void) m; /* or, line 109 */ + { int ret = r_R2(z); + if (ret == 0) goto lab5; /* call R2, line 109 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 109 */ + if (ret < 0) return ret; + } + goto lab4; + lab5: + z->c = z->l - m; + { int ret = r_R1(z); + if (ret == 0) { z->c = z->l - m; goto lab3; } /* call R1, line 109 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 3, s_20); /* <-, line 109 */ + if (ret < 0) return ret; + } + } + lab4: + break; + case 3: + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab3; } /* call R2, line 111 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 111 */ + if (ret < 0) return ret; + } + break; + case 4: + { int ret = r_RV(z); + if (ret == 0) { z->c = z->l - m; goto lab3; } /* call RV, line 113 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 1, s_21); /* <-, line 113 */ + if (ret < 0) return ret; + } + break; + } + lab3: + ; + } + break; + case 7: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 120 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 120 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 121 */ + z->ket = z->c; /* [, line 122 */ + among_var = find_among_b(z, a_2, 3); /* substring, line 122 */ + if (!(among_var)) { z->c = z->l - m; goto lab6; } + z->bra = z->c; /* ], line 122 */ + switch(among_var) { + case 0: { z->c = z->l - m; goto lab6; } + case 1: + { int m = z->l - z->c; (void) m; /* or, line 123 */ + { int ret = r_R2(z); + if (ret == 0) goto lab8; /* call R2, line 123 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 123 */ + if (ret < 0) return ret; + } + goto lab7; + lab8: + z->c = z->l - m; + { int ret; + ret = slice_from_s(z, 3, s_22); /* <-, line 123 */ + if (ret < 0) return ret; + } + } + lab7: + break; + case 2: + { int m = z->l - z->c; (void) m; /* or, line 124 */ + { int ret = r_R2(z); + if (ret == 0) goto lab10; /* call R2, line 124 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 124 */ + if (ret < 0) return ret; + } + goto lab9; + lab10: + z->c = z->l - m; + { int ret; + ret = slice_from_s(z, 3, s_23); /* <-, line 124 */ + if (ret < 0) return ret; + } + } + lab9: + break; + case 3: + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab6; } /* call R2, line 125 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 125 */ + if (ret < 0) return ret; + } + break; + } + lab6: + ; + } + break; + case 8: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 132 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 132 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 133 */ + z->ket = z->c; /* [, line 133 */ + if (!(eq_s_b(z, 2, s_24))) { z->c = z->l - m; goto lab11; } + z->bra = z->c; /* ], line 133 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab11; } /* call R2, line 133 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 133 */ + if (ret < 0) return ret; + } + z->ket = z->c; /* [, line 133 */ + if (!(eq_s_b(z, 2, s_25))) { z->c = z->l - m; goto lab11; } + z->bra = z->c; /* ], line 133 */ + { int m = z->l - z->c; (void) m; /* or, line 133 */ + { int ret = r_R2(z); + if (ret == 0) goto lab13; /* call R2, line 133 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 133 */ + if (ret < 0) return ret; + } + goto lab12; + lab13: + z->c = z->l - m; + { int ret; + ret = slice_from_s(z, 3, s_26); /* <-, line 133 */ + if (ret < 0) return ret; + } + } + lab12: + lab11: + ; + } + break; + case 9: + { int ret; + ret = slice_from_s(z, 3, s_27); /* <-, line 135 */ + if (ret < 0) return ret; + } + break; + case 10: + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 136 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 2, s_28); /* <-, line 136 */ + if (ret < 0) return ret; + } + break; + case 11: + { int m = z->l - z->c; (void) m; /* or, line 138 */ + { int ret = r_R2(z); + if (ret == 0) goto lab15; /* call R2, line 138 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 138 */ + if (ret < 0) return ret; + } + goto lab14; + lab15: + z->c = z->l - m; + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 138 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 3, s_29); /* <-, line 138 */ + if (ret < 0) return ret; + } + } + lab14: + break; + case 12: + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 141 */ + if (ret < 0) return ret; + } + if (!(out_grouping_b(z, g_v, 97, 251))) return 0; + { int ret; + ret = slice_del(z); /* delete, line 141 */ + if (ret < 0) return ret; + } + break; + case 13: + { int ret = r_RV(z); + if (ret == 0) return 0; /* call RV, line 146 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 3, s_30); /* <-, line 146 */ + if (ret < 0) return ret; + } + return 0; /* fail, line 146 */ + break; + case 14: + { int ret = r_RV(z); + if (ret == 0) return 0; /* call RV, line 147 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 3, s_31); /* <-, line 147 */ + if (ret < 0) return ret; + } + return 0; /* fail, line 147 */ + break; + case 15: + { int m_test = z->l - z->c; /* test, line 149 */ + if (!(in_grouping_b(z, g_v, 97, 251))) return 0; + { int ret = r_RV(z); + if (ret == 0) return 0; /* call RV, line 149 */ + if (ret < 0) return ret; + } + z->c = z->l - m_test; + } + { int ret; + ret = slice_del(z); /* delete, line 149 */ + if (ret < 0) return ret; + } + return 0; /* fail, line 149 */ + break; + } + return 1; +} + +static int r_i_verb_suffix(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 154 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 154 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 155 */ + among_var = find_among_b(z, a_4, 35); /* substring, line 155 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 155 */ + switch(among_var) { + case 0: { z->lb = m3; return 0; } + case 1: + if (!(out_grouping_b(z, g_v, 97, 251))) { z->lb = m3; return 0; } + { int ret; + ret = slice_del(z); /* delete, line 161 */ + if (ret < 0) return ret; + } + break; + } + z->lb = m3; + } + return 1; +} + +static int r_verb_suffix(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 165 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 165 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 166 */ + among_var = find_among_b(z, a_5, 38); /* substring, line 166 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 166 */ + switch(among_var) { + case 0: { z->lb = m3; return 0; } + case 1: + { int ret = r_R2(z); + if (ret == 0) { z->lb = m3; return 0; } /* call R2, line 168 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 168 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_del(z); /* delete, line 176 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_del(z); /* delete, line 181 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 182 */ + z->ket = z->c; /* [, line 182 */ + if (!(eq_s_b(z, 1, s_32))) { z->c = z->l - m; goto lab0; } + z->bra = z->c; /* ], line 182 */ + { int ret; + ret = slice_del(z); /* delete, line 182 */ + if (ret < 0) return ret; + } + lab0: + ; + } + break; + } + z->lb = m3; + } + return 1; +} + +static int r_residual_suffix(struct SN_env * z) { + int among_var; + { int m = z->l - z->c; (void) m; /* try, line 190 */ + z->ket = z->c; /* [, line 190 */ + if (!(eq_s_b(z, 1, s_33))) { z->c = z->l - m; goto lab0; } + z->bra = z->c; /* ], line 190 */ + { int m_test = z->l - z->c; /* test, line 190 */ + if (!(out_grouping_b(z, g_keep_with_s, 97, 232))) { z->c = z->l - m; goto lab0; } + z->c = z->l - m_test; + } + { int ret; + ret = slice_del(z); /* delete, line 190 */ + if (ret < 0) return ret; + } + lab0: + ; + } + { int m3; /* setlimit, line 191 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 191 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 192 */ + among_var = find_among_b(z, a_6, 7); /* substring, line 192 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 192 */ + switch(among_var) { + case 0: { z->lb = m3; return 0; } + case 1: + { int ret = r_R2(z); + if (ret == 0) { z->lb = m3; return 0; } /* call R2, line 193 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* or, line 193 */ + if (!(eq_s_b(z, 1, s_34))) goto lab2; + goto lab1; + lab2: + z->c = z->l - m; + if (!(eq_s_b(z, 1, s_35))) { z->lb = m3; return 0; } + } + lab1: + { int ret; + ret = slice_del(z); /* delete, line 193 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 1, s_36); /* <-, line 195 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_del(z); /* delete, line 196 */ + if (ret < 0) return ret; + } + break; + case 4: + if (!(eq_s_b(z, 2, s_37))) { z->lb = m3; return 0; } + { int ret; + ret = slice_del(z); /* delete, line 197 */ + if (ret < 0) return ret; + } + break; + } + z->lb = m3; + } + return 1; +} + +static int r_un_double(struct SN_env * z) { + { int m_test = z->l - z->c; /* test, line 203 */ + if (!(find_among_b(z, a_7, 5))) return 0; /* among, line 203 */ + z->c = z->l - m_test; + } + z->ket = z->c; /* [, line 203 */ + if (z->c <= z->lb) return 0; + z->c--; /* next, line 203 */ + z->bra = z->c; /* ], line 203 */ + { int ret; + ret = slice_del(z); /* delete, line 203 */ + if (ret < 0) return ret; + } + return 1; +} + +static int r_un_accent(struct SN_env * z) { + { int i = 1; + while(1) { /* atleast, line 207 */ + if (!(out_grouping_b(z, g_v, 97, 251))) goto lab0; + i--; + continue; + lab0: + break; + } + if (i > 0) return 0; + } + z->ket = z->c; /* [, line 208 */ + { int m = z->l - z->c; (void) m; /* or, line 208 */ + if (!(eq_s_b(z, 1, s_38))) goto lab2; + goto lab1; + lab2: + z->c = z->l - m; + if (!(eq_s_b(z, 1, s_39))) return 0; + } +lab1: + z->bra = z->c; /* ], line 208 */ + { int ret; + ret = slice_from_s(z, 1, s_40); /* <-, line 208 */ + if (ret < 0) return ret; + } + return 1; +} + +extern int french_ISO_8859_1_stem(struct SN_env * z) { + { int c = z->c; /* do, line 214 */ + { int ret = r_prelude(z); + if (ret == 0) goto lab0; /* call prelude, line 214 */ + if (ret < 0) return ret; + } + lab0: + z->c = c; + } + { int c = z->c; /* do, line 215 */ + { int ret = r_mark_regions(z); + if (ret == 0) goto lab1; /* call mark_regions, line 215 */ + if (ret < 0) return ret; + } + lab1: + z->c = c; + } + z->lb = z->c; z->c = z->l; /* backwards, line 216 */ + + { int m = z->l - z->c; (void) m; /* do, line 218 */ + { int m = z->l - z->c; (void) m; /* or, line 228 */ + { int m = z->l - z->c; (void) m; /* and, line 224 */ + { int m = z->l - z->c; (void) m; /* or, line 220 */ + { int ret = r_standard_suffix(z); + if (ret == 0) goto lab6; /* call standard_suffix, line 220 */ + if (ret < 0) return ret; + } + goto lab5; + lab6: + z->c = z->l - m; + { int ret = r_i_verb_suffix(z); + if (ret == 0) goto lab7; /* call i_verb_suffix, line 221 */ + if (ret < 0) return ret; + } + goto lab5; + lab7: + z->c = z->l - m; + { int ret = r_verb_suffix(z); + if (ret == 0) goto lab4; /* call verb_suffix, line 222 */ + if (ret < 0) return ret; + } + } + lab5: + z->c = z->l - m; + { int m = z->l - z->c; (void) m; /* try, line 225 */ + z->ket = z->c; /* [, line 225 */ + { int m = z->l - z->c; (void) m; /* or, line 225 */ + if (!(eq_s_b(z, 1, s_41))) goto lab10; + z->bra = z->c; /* ], line 225 */ + { int ret; + ret = slice_from_s(z, 1, s_42); /* <-, line 225 */ + if (ret < 0) return ret; + } + goto lab9; + lab10: + z->c = z->l - m; + if (!(eq_s_b(z, 1, s_43))) { z->c = z->l - m; goto lab8; } + z->bra = z->c; /* ], line 226 */ + { int ret; + ret = slice_from_s(z, 1, s_44); /* <-, line 226 */ + if (ret < 0) return ret; + } + } + lab9: + lab8: + ; + } + } + goto lab3; + lab4: + z->c = z->l - m; + { int ret = r_residual_suffix(z); + if (ret == 0) goto lab2; /* call residual_suffix, line 229 */ + if (ret < 0) return ret; + } + } + lab3: + lab2: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 234 */ + { int ret = r_un_double(z); + if (ret == 0) goto lab11; /* call un_double, line 234 */ + if (ret < 0) return ret; + } + lab11: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 235 */ + { int ret = r_un_accent(z); + if (ret == 0) goto lab12; /* call un_accent, line 235 */ + if (ret < 0) return ret; + } + lab12: + z->c = z->l - m; + } + z->c = z->lb; + { int c = z->c; /* do, line 237 */ + { int ret = r_postlude(z); + if (ret == 0) goto lab13; /* call postlude, line 237 */ + if (ret < 0) return ret; + } + lab13: + z->c = c; + } + return 1; +} + +extern struct SN_env * french_ISO_8859_1_create_env(void) { return SN_create_env(0, 3, 0); } + +extern void french_ISO_8859_1_close_env(struct SN_env * z) { SN_close_env(z); } + diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_french.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_french.h new file mode 100644 index 0000000..21244d6 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_french.h @@ -0,0 +1,16 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern struct SN_env * french_ISO_8859_1_create_env(void); +extern void french_ISO_8859_1_close_env(struct SN_env * z); + +extern int french_ISO_8859_1_stem(struct SN_env * z); + +#ifdef __cplusplus +} +#endif + diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_german.c b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_german.c new file mode 100644 index 0000000..633bf03 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_german.c @@ -0,0 +1,512 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#include "../runtime/header.h" + +extern int german_ISO_8859_1_stem(struct SN_env * z); +static int r_standard_suffix(struct SN_env * z); +static int r_R2(struct SN_env * z); +static int r_R1(struct SN_env * z); +static int r_mark_regions(struct SN_env * z); +static int r_postlude(struct SN_env * z); +static int r_prelude(struct SN_env * z); + +extern struct SN_env * german_ISO_8859_1_create_env(void); +extern void german_ISO_8859_1_close_env(struct SN_env * z); + +static symbol s_0_1[1] = { 'U' }; +static symbol s_0_2[1] = { 'Y' }; +static symbol s_0_3[1] = { 0xE4 }; +static symbol s_0_4[1] = { 0xF6 }; +static symbol s_0_5[1] = { 0xFC }; + +static struct among a_0[6] = +{ +/* 0 */ { 0, 0, -1, 6, 0}, +/* 1 */ { 1, s_0_1, 0, 2, 0}, +/* 2 */ { 1, s_0_2, 0, 1, 0}, +/* 3 */ { 1, s_0_3, 0, 3, 0}, +/* 4 */ { 1, s_0_4, 0, 4, 0}, +/* 5 */ { 1, s_0_5, 0, 5, 0} +}; + +static symbol s_1_0[1] = { 'e' }; +static symbol s_1_1[2] = { 'e', 'm' }; +static symbol s_1_2[2] = { 'e', 'n' }; +static symbol s_1_3[3] = { 'e', 'r', 'n' }; +static symbol s_1_4[2] = { 'e', 'r' }; +static symbol s_1_5[1] = { 's' }; +static symbol s_1_6[2] = { 'e', 's' }; + +static struct among a_1[7] = +{ +/* 0 */ { 1, s_1_0, -1, 1, 0}, +/* 1 */ { 2, s_1_1, -1, 1, 0}, +/* 2 */ { 2, s_1_2, -1, 1, 0}, +/* 3 */ { 3, s_1_3, -1, 1, 0}, +/* 4 */ { 2, s_1_4, -1, 1, 0}, +/* 5 */ { 1, s_1_5, -1, 2, 0}, +/* 6 */ { 2, s_1_6, 5, 1, 0} +}; + +static symbol s_2_0[2] = { 'e', 'n' }; +static symbol s_2_1[2] = { 'e', 'r' }; +static symbol s_2_2[2] = { 's', 't' }; +static symbol s_2_3[3] = { 'e', 's', 't' }; + +static struct among a_2[4] = +{ +/* 0 */ { 2, s_2_0, -1, 1, 0}, +/* 1 */ { 2, s_2_1, -1, 1, 0}, +/* 2 */ { 2, s_2_2, -1, 2, 0}, +/* 3 */ { 3, s_2_3, 2, 1, 0} +}; + +static symbol s_3_0[2] = { 'i', 'g' }; +static symbol s_3_1[4] = { 'l', 'i', 'c', 'h' }; + +static struct among a_3[2] = +{ +/* 0 */ { 2, s_3_0, -1, 1, 0}, +/* 1 */ { 4, s_3_1, -1, 1, 0} +}; + +static symbol s_4_0[3] = { 'e', 'n', 'd' }; +static symbol s_4_1[2] = { 'i', 'g' }; +static symbol s_4_2[3] = { 'u', 'n', 'g' }; +static symbol s_4_3[4] = { 'l', 'i', 'c', 'h' }; +static symbol s_4_4[4] = { 'i', 's', 'c', 'h' }; +static symbol s_4_5[2] = { 'i', 'k' }; +static symbol s_4_6[4] = { 'h', 'e', 'i', 't' }; +static symbol s_4_7[4] = { 'k', 'e', 'i', 't' }; + +static struct among a_4[8] = +{ +/* 0 */ { 3, s_4_0, -1, 1, 0}, +/* 1 */ { 2, s_4_1, -1, 2, 0}, +/* 2 */ { 3, s_4_2, -1, 1, 0}, +/* 3 */ { 4, s_4_3, -1, 3, 0}, +/* 4 */ { 4, s_4_4, -1, 2, 0}, +/* 5 */ { 2, s_4_5, -1, 2, 0}, +/* 6 */ { 4, s_4_6, -1, 3, 0}, +/* 7 */ { 4, s_4_7, -1, 4, 0} +}; + +static unsigned char g_v[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 32, 8 }; + +static unsigned char g_s_ending[] = { 117, 30, 5 }; + +static unsigned char g_st_ending[] = { 117, 30, 4 }; + +static symbol s_0[] = { 0xDF }; +static symbol s_1[] = { 's', 's' }; +static symbol s_2[] = { 'u' }; +static symbol s_3[] = { 'U' }; +static symbol s_4[] = { 'y' }; +static symbol s_5[] = { 'Y' }; +static symbol s_6[] = { 'y' }; +static symbol s_7[] = { 'u' }; +static symbol s_8[] = { 'a' }; +static symbol s_9[] = { 'o' }; +static symbol s_10[] = { 'u' }; +static symbol s_11[] = { 'i', 'g' }; +static symbol s_12[] = { 'e' }; +static symbol s_13[] = { 'e' }; +static symbol s_14[] = { 'e', 'r' }; +static symbol s_15[] = { 'e', 'n' }; + +static int r_prelude(struct SN_env * z) { + { int c_test = z->c; /* test, line 30 */ + while(1) { /* repeat, line 30 */ + int c = z->c; + { int c = z->c; /* or, line 33 */ + z->bra = z->c; /* [, line 32 */ + if (!(eq_s(z, 1, s_0))) goto lab2; + z->ket = z->c; /* ], line 32 */ + { int ret; + ret = slice_from_s(z, 2, s_1); /* <-, line 32 */ + if (ret < 0) return ret; + } + goto lab1; + lab2: + z->c = c; + if (z->c >= z->l) goto lab0; + z->c++; /* next, line 33 */ + } + lab1: + continue; + lab0: + z->c = c; + break; + } + z->c = c_test; + } + while(1) { /* repeat, line 36 */ + int c = z->c; + while(1) { /* goto, line 36 */ + int c = z->c; + if (!(in_grouping(z, g_v, 97, 252))) goto lab4; + z->bra = z->c; /* [, line 37 */ + { int c = z->c; /* or, line 37 */ + if (!(eq_s(z, 1, s_2))) goto lab6; + z->ket = z->c; /* ], line 37 */ + if (!(in_grouping(z, g_v, 97, 252))) goto lab6; + { int ret; + ret = slice_from_s(z, 1, s_3); /* <-, line 37 */ + if (ret < 0) return ret; + } + goto lab5; + lab6: + z->c = c; + if (!(eq_s(z, 1, s_4))) goto lab4; + z->ket = z->c; /* ], line 38 */ + if (!(in_grouping(z, g_v, 97, 252))) goto lab4; + { int ret; + ret = slice_from_s(z, 1, s_5); /* <-, line 38 */ + if (ret < 0) return ret; + } + } + lab5: + z->c = c; + break; + lab4: + z->c = c; + if (z->c >= z->l) goto lab3; + z->c++; /* goto, line 36 */ + } + continue; + lab3: + z->c = c; + break; + } + return 1; +} + +static int r_mark_regions(struct SN_env * z) { + z->I[0] = z->l; + z->I[1] = z->l; + { int c_test = z->c; /* test, line 47 */ + { int c = z->c + 3; + if (0 > c || c > z->l) return 0; + z->c = c; /* hop, line 47 */ + } + z->I[2] = z->c; /* setmark x, line 47 */ + z->c = c_test; + } + while(1) { /* gopast, line 49 */ + if (!(in_grouping(z, g_v, 97, 252))) goto lab0; + break; + lab0: + if (z->c >= z->l) return 0; + z->c++; /* gopast, line 49 */ + } + while(1) { /* gopast, line 49 */ + if (!(out_grouping(z, g_v, 97, 252))) goto lab1; + break; + lab1: + if (z->c >= z->l) return 0; + z->c++; /* gopast, line 49 */ + } + z->I[0] = z->c; /* setmark p1, line 49 */ + /* try, line 50 */ + if (!(z->I[0] < z->I[2])) goto lab2; + z->I[0] = z->I[2]; +lab2: + while(1) { /* gopast, line 51 */ + if (!(in_grouping(z, g_v, 97, 252))) goto lab3; + break; + lab3: + if (z->c >= z->l) return 0; + z->c++; /* gopast, line 51 */ + } + while(1) { /* gopast, line 51 */ + if (!(out_grouping(z, g_v, 97, 252))) goto lab4; + break; + lab4: + if (z->c >= z->l) return 0; + z->c++; /* gopast, line 51 */ + } + z->I[1] = z->c; /* setmark p2, line 51 */ + return 1; +} + +static int r_postlude(struct SN_env * z) { + int among_var; + while(1) { /* repeat, line 55 */ + int c = z->c; + z->bra = z->c; /* [, line 57 */ + among_var = find_among(z, a_0, 6); /* substring, line 57 */ + if (!(among_var)) goto lab0; + z->ket = z->c; /* ], line 57 */ + switch(among_var) { + case 0: goto lab0; + case 1: + { int ret; + ret = slice_from_s(z, 1, s_6); /* <-, line 58 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 1, s_7); /* <-, line 59 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_from_s(z, 1, s_8); /* <-, line 60 */ + if (ret < 0) return ret; + } + break; + case 4: + { int ret; + ret = slice_from_s(z, 1, s_9); /* <-, line 61 */ + if (ret < 0) return ret; + } + break; + case 5: + { int ret; + ret = slice_from_s(z, 1, s_10); /* <-, line 62 */ + if (ret < 0) return ret; + } + break; + case 6: + if (z->c >= z->l) goto lab0; + z->c++; /* next, line 63 */ + break; + } + continue; + lab0: + z->c = c; + break; + } + return 1; +} + +static int r_R1(struct SN_env * z) { + if (!(z->I[0] <= z->c)) return 0; + return 1; +} + +static int r_R2(struct SN_env * z) { + if (!(z->I[1] <= z->c)) return 0; + return 1; +} + +static int r_standard_suffix(struct SN_env * z) { + int among_var; + { int m = z->l - z->c; (void) m; /* do, line 74 */ + z->ket = z->c; /* [, line 75 */ + among_var = find_among_b(z, a_1, 7); /* substring, line 75 */ + if (!(among_var)) goto lab0; + z->bra = z->c; /* ], line 75 */ + { int ret = r_R1(z); + if (ret == 0) goto lab0; /* call R1, line 75 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: goto lab0; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 77 */ + if (ret < 0) return ret; + } + break; + case 2: + if (!(in_grouping_b(z, g_s_ending, 98, 116))) goto lab0; + { int ret; + ret = slice_del(z); /* delete, line 80 */ + if (ret < 0) return ret; + } + break; + } + lab0: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 84 */ + z->ket = z->c; /* [, line 85 */ + among_var = find_among_b(z, a_2, 4); /* substring, line 85 */ + if (!(among_var)) goto lab1; + z->bra = z->c; /* ], line 85 */ + { int ret = r_R1(z); + if (ret == 0) goto lab1; /* call R1, line 85 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: goto lab1; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 87 */ + if (ret < 0) return ret; + } + break; + case 2: + if (!(in_grouping_b(z, g_st_ending, 98, 116))) goto lab1; + { int c = z->c - 3; + if (z->lb > c || c > z->l) goto lab1; + z->c = c; /* hop, line 90 */ + } + { int ret; + ret = slice_del(z); /* delete, line 90 */ + if (ret < 0) return ret; + } + break; + } + lab1: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 94 */ + z->ket = z->c; /* [, line 95 */ + among_var = find_among_b(z, a_4, 8); /* substring, line 95 */ + if (!(among_var)) goto lab2; + z->bra = z->c; /* ], line 95 */ + { int ret = r_R2(z); + if (ret == 0) goto lab2; /* call R2, line 95 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: goto lab2; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 97 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 98 */ + z->ket = z->c; /* [, line 98 */ + if (!(eq_s_b(z, 2, s_11))) { z->c = z->l - m; goto lab3; } + z->bra = z->c; /* ], line 98 */ + { int m = z->l - z->c; (void) m; /* not, line 98 */ + if (!(eq_s_b(z, 1, s_12))) goto lab4; + { z->c = z->l - m; goto lab3; } + lab4: + z->c = z->l - m; + } + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab3; } /* call R2, line 98 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 98 */ + if (ret < 0) return ret; + } + lab3: + ; + } + break; + case 2: + { int m = z->l - z->c; (void) m; /* not, line 101 */ + if (!(eq_s_b(z, 1, s_13))) goto lab5; + goto lab2; + lab5: + z->c = z->l - m; + } + { int ret; + ret = slice_del(z); /* delete, line 101 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_del(z); /* delete, line 104 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 105 */ + z->ket = z->c; /* [, line 106 */ + { int m = z->l - z->c; (void) m; /* or, line 106 */ + if (!(eq_s_b(z, 2, s_14))) goto lab8; + goto lab7; + lab8: + z->c = z->l - m; + if (!(eq_s_b(z, 2, s_15))) { z->c = z->l - m; goto lab6; } + } + lab7: + z->bra = z->c; /* ], line 106 */ + { int ret = r_R1(z); + if (ret == 0) { z->c = z->l - m; goto lab6; } /* call R1, line 106 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 106 */ + if (ret < 0) return ret; + } + lab6: + ; + } + break; + case 4: + { int ret; + ret = slice_del(z); /* delete, line 110 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 111 */ + z->ket = z->c; /* [, line 112 */ + among_var = find_among_b(z, a_3, 2); /* substring, line 112 */ + if (!(among_var)) { z->c = z->l - m; goto lab9; } + z->bra = z->c; /* ], line 112 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab9; } /* call R2, line 112 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: { z->c = z->l - m; goto lab9; } + case 1: + { int ret; + ret = slice_del(z); /* delete, line 114 */ + if (ret < 0) return ret; + } + break; + } + lab9: + ; + } + break; + } + lab2: + z->c = z->l - m; + } + return 1; +} + +extern int german_ISO_8859_1_stem(struct SN_env * z) { + { int c = z->c; /* do, line 125 */ + { int ret = r_prelude(z); + if (ret == 0) goto lab0; /* call prelude, line 125 */ + if (ret < 0) return ret; + } + lab0: + z->c = c; + } + { int c = z->c; /* do, line 126 */ + { int ret = r_mark_regions(z); + if (ret == 0) goto lab1; /* call mark_regions, line 126 */ + if (ret < 0) return ret; + } + lab1: + z->c = c; + } + z->lb = z->c; z->c = z->l; /* backwards, line 127 */ + + { int m = z->l - z->c; (void) m; /* do, line 128 */ + { int ret = r_standard_suffix(z); + if (ret == 0) goto lab2; /* call standard_suffix, line 128 */ + if (ret < 0) return ret; + } + lab2: + z->c = z->l - m; + } + z->c = z->lb; + { int c = z->c; /* do, line 129 */ + { int ret = r_postlude(z); + if (ret == 0) goto lab3; /* call postlude, line 129 */ + if (ret < 0) return ret; + } + lab3: + z->c = c; + } + return 1; +} + +extern struct SN_env * german_ISO_8859_1_create_env(void) { return SN_create_env(0, 3, 0); } + +extern void german_ISO_8859_1_close_env(struct SN_env * z) { SN_close_env(z); } + diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_german.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_german.h new file mode 100644 index 0000000..8525389 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_german.h @@ -0,0 +1,16 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern struct SN_env * german_ISO_8859_1_create_env(void); +extern void german_ISO_8859_1_close_env(struct SN_env * z); + +extern int german_ISO_8859_1_stem(struct SN_env * z); + +#ifdef __cplusplus +} +#endif + diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_italian.c b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_italian.c new file mode 100644 index 0000000..9fe9776 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_italian.c @@ -0,0 +1,1091 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#include "../runtime/header.h" + +extern int italian_ISO_8859_1_stem(struct SN_env * z); +static int r_vowel_suffix(struct SN_env * z); +static int r_verb_suffix(struct SN_env * z); +static int r_standard_suffix(struct SN_env * z); +static int r_attached_pronoun(struct SN_env * z); +static int r_R2(struct SN_env * z); +static int r_R1(struct SN_env * z); +static int r_RV(struct SN_env * z); +static int r_mark_regions(struct SN_env * z); +static int r_postlude(struct SN_env * z); +static int r_prelude(struct SN_env * z); + +extern struct SN_env * italian_ISO_8859_1_create_env(void); +extern void italian_ISO_8859_1_close_env(struct SN_env * z); + +static symbol s_0_1[2] = { 'q', 'u' }; +static symbol s_0_2[1] = { 0xE1 }; +static symbol s_0_3[1] = { 0xE9 }; +static symbol s_0_4[1] = { 0xED }; +static symbol s_0_5[1] = { 0xF3 }; +static symbol s_0_6[1] = { 0xFA }; + +static struct among a_0[7] = +{ +/* 0 */ { 0, 0, -1, 7, 0}, +/* 1 */ { 2, s_0_1, 0, 6, 0}, +/* 2 */ { 1, s_0_2, 0, 1, 0}, +/* 3 */ { 1, s_0_3, 0, 2, 0}, +/* 4 */ { 1, s_0_4, 0, 3, 0}, +/* 5 */ { 1, s_0_5, 0, 4, 0}, +/* 6 */ { 1, s_0_6, 0, 5, 0} +}; + +static symbol s_1_1[1] = { 'I' }; +static symbol s_1_2[1] = { 'U' }; + +static struct among a_1[3] = +{ +/* 0 */ { 0, 0, -1, 3, 0}, +/* 1 */ { 1, s_1_1, 0, 1, 0}, +/* 2 */ { 1, s_1_2, 0, 2, 0} +}; + +static symbol s_2_0[2] = { 'l', 'a' }; +static symbol s_2_1[4] = { 'c', 'e', 'l', 'a' }; +static symbol s_2_2[6] = { 'g', 'l', 'i', 'e', 'l', 'a' }; +static symbol s_2_3[4] = { 'm', 'e', 'l', 'a' }; +static symbol s_2_4[4] = { 't', 'e', 'l', 'a' }; +static symbol s_2_5[4] = { 'v', 'e', 'l', 'a' }; +static symbol s_2_6[2] = { 'l', 'e' }; +static symbol s_2_7[4] = { 'c', 'e', 'l', 'e' }; +static symbol s_2_8[6] = { 'g', 'l', 'i', 'e', 'l', 'e' }; +static symbol s_2_9[4] = { 'm', 'e', 'l', 'e' }; +static symbol s_2_10[4] = { 't', 'e', 'l', 'e' }; +static symbol s_2_11[4] = { 'v', 'e', 'l', 'e' }; +static symbol s_2_12[2] = { 'n', 'e' }; +static symbol s_2_13[4] = { 'c', 'e', 'n', 'e' }; +static symbol s_2_14[6] = { 'g', 'l', 'i', 'e', 'n', 'e' }; +static symbol s_2_15[4] = { 'm', 'e', 'n', 'e' }; +static symbol s_2_16[4] = { 's', 'e', 'n', 'e' }; +static symbol s_2_17[4] = { 't', 'e', 'n', 'e' }; +static symbol s_2_18[4] = { 'v', 'e', 'n', 'e' }; +static symbol s_2_19[2] = { 'c', 'i' }; +static symbol s_2_20[2] = { 'l', 'i' }; +static symbol s_2_21[4] = { 'c', 'e', 'l', 'i' }; +static symbol s_2_22[6] = { 'g', 'l', 'i', 'e', 'l', 'i' }; +static symbol s_2_23[4] = { 'm', 'e', 'l', 'i' }; +static symbol s_2_24[4] = { 't', 'e', 'l', 'i' }; +static symbol s_2_25[4] = { 'v', 'e', 'l', 'i' }; +static symbol s_2_26[3] = { 'g', 'l', 'i' }; +static symbol s_2_27[2] = { 'm', 'i' }; +static symbol s_2_28[2] = { 's', 'i' }; +static symbol s_2_29[2] = { 't', 'i' }; +static symbol s_2_30[2] = { 'v', 'i' }; +static symbol s_2_31[2] = { 'l', 'o' }; +static symbol s_2_32[4] = { 'c', 'e', 'l', 'o' }; +static symbol s_2_33[6] = { 'g', 'l', 'i', 'e', 'l', 'o' }; +static symbol s_2_34[4] = { 'm', 'e', 'l', 'o' }; +static symbol s_2_35[4] = { 't', 'e', 'l', 'o' }; +static symbol s_2_36[4] = { 'v', 'e', 'l', 'o' }; + +static struct among a_2[37] = +{ +/* 0 */ { 2, s_2_0, -1, -1, 0}, +/* 1 */ { 4, s_2_1, 0, -1, 0}, +/* 2 */ { 6, s_2_2, 0, -1, 0}, +/* 3 */ { 4, s_2_3, 0, -1, 0}, +/* 4 */ { 4, s_2_4, 0, -1, 0}, +/* 5 */ { 4, s_2_5, 0, -1, 0}, +/* 6 */ { 2, s_2_6, -1, -1, 0}, +/* 7 */ { 4, s_2_7, 6, -1, 0}, +/* 8 */ { 6, s_2_8, 6, -1, 0}, +/* 9 */ { 4, s_2_9, 6, -1, 0}, +/* 10 */ { 4, s_2_10, 6, -1, 0}, +/* 11 */ { 4, s_2_11, 6, -1, 0}, +/* 12 */ { 2, s_2_12, -1, -1, 0}, +/* 13 */ { 4, s_2_13, 12, -1, 0}, +/* 14 */ { 6, s_2_14, 12, -1, 0}, +/* 15 */ { 4, s_2_15, 12, -1, 0}, +/* 16 */ { 4, s_2_16, 12, -1, 0}, +/* 17 */ { 4, s_2_17, 12, -1, 0}, +/* 18 */ { 4, s_2_18, 12, -1, 0}, +/* 19 */ { 2, s_2_19, -1, -1, 0}, +/* 20 */ { 2, s_2_20, -1, -1, 0}, +/* 21 */ { 4, s_2_21, 20, -1, 0}, +/* 22 */ { 6, s_2_22, 20, -1, 0}, +/* 23 */ { 4, s_2_23, 20, -1, 0}, +/* 24 */ { 4, s_2_24, 20, -1, 0}, +/* 25 */ { 4, s_2_25, 20, -1, 0}, +/* 26 */ { 3, s_2_26, 20, -1, 0}, +/* 27 */ { 2, s_2_27, -1, -1, 0}, +/* 28 */ { 2, s_2_28, -1, -1, 0}, +/* 29 */ { 2, s_2_29, -1, -1, 0}, +/* 30 */ { 2, s_2_30, -1, -1, 0}, +/* 31 */ { 2, s_2_31, -1, -1, 0}, +/* 32 */ { 4, s_2_32, 31, -1, 0}, +/* 33 */ { 6, s_2_33, 31, -1, 0}, +/* 34 */ { 4, s_2_34, 31, -1, 0}, +/* 35 */ { 4, s_2_35, 31, -1, 0}, +/* 36 */ { 4, s_2_36, 31, -1, 0} +}; + +static symbol s_3_0[4] = { 'a', 'n', 'd', 'o' }; +static symbol s_3_1[4] = { 'e', 'n', 'd', 'o' }; +static symbol s_3_2[2] = { 'a', 'r' }; +static symbol s_3_3[2] = { 'e', 'r' }; +static symbol s_3_4[2] = { 'i', 'r' }; + +static struct among a_3[5] = +{ +/* 0 */ { 4, s_3_0, -1, 1, 0}, +/* 1 */ { 4, s_3_1, -1, 1, 0}, +/* 2 */ { 2, s_3_2, -1, 2, 0}, +/* 3 */ { 2, s_3_3, -1, 2, 0}, +/* 4 */ { 2, s_3_4, -1, 2, 0} +}; + +static symbol s_4_0[2] = { 'i', 'c' }; +static symbol s_4_1[4] = { 'a', 'b', 'i', 'l' }; +static symbol s_4_2[2] = { 'o', 's' }; +static symbol s_4_3[2] = { 'i', 'v' }; + +static struct among a_4[4] = +{ +/* 0 */ { 2, s_4_0, -1, -1, 0}, +/* 1 */ { 4, s_4_1, -1, -1, 0}, +/* 2 */ { 2, s_4_2, -1, -1, 0}, +/* 3 */ { 2, s_4_3, -1, 1, 0} +}; + +static symbol s_5_0[2] = { 'i', 'c' }; +static symbol s_5_1[4] = { 'a', 'b', 'i', 'l' }; +static symbol s_5_2[2] = { 'i', 'v' }; + +static struct among a_5[3] = +{ +/* 0 */ { 2, s_5_0, -1, 1, 0}, +/* 1 */ { 4, s_5_1, -1, 1, 0}, +/* 2 */ { 2, s_5_2, -1, 1, 0} +}; + +static symbol s_6_0[3] = { 'i', 'c', 'a' }; +static symbol s_6_1[5] = { 'l', 'o', 'g', 'i', 'a' }; +static symbol s_6_2[3] = { 'o', 's', 'a' }; +static symbol s_6_3[4] = { 'i', 's', 't', 'a' }; +static symbol s_6_4[3] = { 'i', 'v', 'a' }; +static symbol s_6_5[4] = { 'a', 'n', 'z', 'a' }; +static symbol s_6_6[4] = { 'e', 'n', 'z', 'a' }; +static symbol s_6_7[3] = { 'i', 'c', 'e' }; +static symbol s_6_8[6] = { 'a', 't', 'r', 'i', 'c', 'e' }; +static symbol s_6_9[4] = { 'i', 'c', 'h', 'e' }; +static symbol s_6_10[5] = { 'l', 'o', 'g', 'i', 'e' }; +static symbol s_6_11[5] = { 'a', 'b', 'i', 'l', 'e' }; +static symbol s_6_12[5] = { 'i', 'b', 'i', 'l', 'e' }; +static symbol s_6_13[6] = { 'u', 's', 'i', 'o', 'n', 'e' }; +static symbol s_6_14[6] = { 'a', 'z', 'i', 'o', 'n', 'e' }; +static symbol s_6_15[6] = { 'u', 'z', 'i', 'o', 'n', 'e' }; +static symbol s_6_16[5] = { 'a', 't', 'o', 'r', 'e' }; +static symbol s_6_17[3] = { 'o', 's', 'e' }; +static symbol s_6_18[4] = { 'a', 'n', 't', 'e' }; +static symbol s_6_19[5] = { 'm', 'e', 'n', 't', 'e' }; +static symbol s_6_20[6] = { 'a', 'm', 'e', 'n', 't', 'e' }; +static symbol s_6_21[4] = { 'i', 's', 't', 'e' }; +static symbol s_6_22[3] = { 'i', 'v', 'e' }; +static symbol s_6_23[4] = { 'a', 'n', 'z', 'e' }; +static symbol s_6_24[4] = { 'e', 'n', 'z', 'e' }; +static symbol s_6_25[3] = { 'i', 'c', 'i' }; +static symbol s_6_26[6] = { 'a', 't', 'r', 'i', 'c', 'i' }; +static symbol s_6_27[4] = { 'i', 'c', 'h', 'i' }; +static symbol s_6_28[5] = { 'a', 'b', 'i', 'l', 'i' }; +static symbol s_6_29[5] = { 'i', 'b', 'i', 'l', 'i' }; +static symbol s_6_30[4] = { 'i', 's', 'm', 'i' }; +static symbol s_6_31[6] = { 'u', 's', 'i', 'o', 'n', 'i' }; +static symbol s_6_32[6] = { 'a', 'z', 'i', 'o', 'n', 'i' }; +static symbol s_6_33[6] = { 'u', 'z', 'i', 'o', 'n', 'i' }; +static symbol s_6_34[5] = { 'a', 't', 'o', 'r', 'i' }; +static symbol s_6_35[3] = { 'o', 's', 'i' }; +static symbol s_6_36[4] = { 'a', 'n', 't', 'i' }; +static symbol s_6_37[6] = { 'a', 'm', 'e', 'n', 't', 'i' }; +static symbol s_6_38[6] = { 'i', 'm', 'e', 'n', 't', 'i' }; +static symbol s_6_39[4] = { 'i', 's', 't', 'i' }; +static symbol s_6_40[3] = { 'i', 'v', 'i' }; +static symbol s_6_41[3] = { 'i', 'c', 'o' }; +static symbol s_6_42[4] = { 'i', 's', 'm', 'o' }; +static symbol s_6_43[3] = { 'o', 's', 'o' }; +static symbol s_6_44[6] = { 'a', 'm', 'e', 'n', 't', 'o' }; +static symbol s_6_45[6] = { 'i', 'm', 'e', 'n', 't', 'o' }; +static symbol s_6_46[3] = { 'i', 'v', 'o' }; +static symbol s_6_47[3] = { 'i', 't', 0xE0 }; +static symbol s_6_48[4] = { 'i', 's', 't', 0xE0 }; +static symbol s_6_49[4] = { 'i', 's', 't', 0xE8 }; +static symbol s_6_50[4] = { 'i', 's', 't', 0xEC }; + +static struct among a_6[51] = +{ +/* 0 */ { 3, s_6_0, -1, 1, 0}, +/* 1 */ { 5, s_6_1, -1, 3, 0}, +/* 2 */ { 3, s_6_2, -1, 1, 0}, +/* 3 */ { 4, s_6_3, -1, 1, 0}, +/* 4 */ { 3, s_6_4, -1, 9, 0}, +/* 5 */ { 4, s_6_5, -1, 1, 0}, +/* 6 */ { 4, s_6_6, -1, 5, 0}, +/* 7 */ { 3, s_6_7, -1, 1, 0}, +/* 8 */ { 6, s_6_8, 7, 1, 0}, +/* 9 */ { 4, s_6_9, -1, 1, 0}, +/* 10 */ { 5, s_6_10, -1, 3, 0}, +/* 11 */ { 5, s_6_11, -1, 1, 0}, +/* 12 */ { 5, s_6_12, -1, 1, 0}, +/* 13 */ { 6, s_6_13, -1, 4, 0}, +/* 14 */ { 6, s_6_14, -1, 2, 0}, +/* 15 */ { 6, s_6_15, -1, 4, 0}, +/* 16 */ { 5, s_6_16, -1, 2, 0}, +/* 17 */ { 3, s_6_17, -1, 1, 0}, +/* 18 */ { 4, s_6_18, -1, 1, 0}, +/* 19 */ { 5, s_6_19, -1, 1, 0}, +/* 20 */ { 6, s_6_20, 19, 7, 0}, +/* 21 */ { 4, s_6_21, -1, 1, 0}, +/* 22 */ { 3, s_6_22, -1, 9, 0}, +/* 23 */ { 4, s_6_23, -1, 1, 0}, +/* 24 */ { 4, s_6_24, -1, 5, 0}, +/* 25 */ { 3, s_6_25, -1, 1, 0}, +/* 26 */ { 6, s_6_26, 25, 1, 0}, +/* 27 */ { 4, s_6_27, -1, 1, 0}, +/* 28 */ { 5, s_6_28, -1, 1, 0}, +/* 29 */ { 5, s_6_29, -1, 1, 0}, +/* 30 */ { 4, s_6_30, -1, 1, 0}, +/* 31 */ { 6, s_6_31, -1, 4, 0}, +/* 32 */ { 6, s_6_32, -1, 2, 0}, +/* 33 */ { 6, s_6_33, -1, 4, 0}, +/* 34 */ { 5, s_6_34, -1, 2, 0}, +/* 35 */ { 3, s_6_35, -1, 1, 0}, +/* 36 */ { 4, s_6_36, -1, 1, 0}, +/* 37 */ { 6, s_6_37, -1, 6, 0}, +/* 38 */ { 6, s_6_38, -1, 6, 0}, +/* 39 */ { 4, s_6_39, -1, 1, 0}, +/* 40 */ { 3, s_6_40, -1, 9, 0}, +/* 41 */ { 3, s_6_41, -1, 1, 0}, +/* 42 */ { 4, s_6_42, -1, 1, 0}, +/* 43 */ { 3, s_6_43, -1, 1, 0}, +/* 44 */ { 6, s_6_44, -1, 6, 0}, +/* 45 */ { 6, s_6_45, -1, 6, 0}, +/* 46 */ { 3, s_6_46, -1, 9, 0}, +/* 47 */ { 3, s_6_47, -1, 8, 0}, +/* 48 */ { 4, s_6_48, -1, 1, 0}, +/* 49 */ { 4, s_6_49, -1, 1, 0}, +/* 50 */ { 4, s_6_50, -1, 1, 0} +}; + +static symbol s_7_0[4] = { 'i', 's', 'c', 'a' }; +static symbol s_7_1[4] = { 'e', 'n', 'd', 'a' }; +static symbol s_7_2[3] = { 'a', 't', 'a' }; +static symbol s_7_3[3] = { 'i', 't', 'a' }; +static symbol s_7_4[3] = { 'u', 't', 'a' }; +static symbol s_7_5[3] = { 'a', 'v', 'a' }; +static symbol s_7_6[3] = { 'e', 'v', 'a' }; +static symbol s_7_7[3] = { 'i', 'v', 'a' }; +static symbol s_7_8[6] = { 'e', 'r', 'e', 'b', 'b', 'e' }; +static symbol s_7_9[6] = { 'i', 'r', 'e', 'b', 'b', 'e' }; +static symbol s_7_10[4] = { 'i', 's', 'c', 'e' }; +static symbol s_7_11[4] = { 'e', 'n', 'd', 'e' }; +static symbol s_7_12[3] = { 'a', 'r', 'e' }; +static symbol s_7_13[3] = { 'e', 'r', 'e' }; +static symbol s_7_14[3] = { 'i', 'r', 'e' }; +static symbol s_7_15[4] = { 'a', 's', 's', 'e' }; +static symbol s_7_16[3] = { 'a', 't', 'e' }; +static symbol s_7_17[5] = { 'a', 'v', 'a', 't', 'e' }; +static symbol s_7_18[5] = { 'e', 'v', 'a', 't', 'e' }; +static symbol s_7_19[5] = { 'i', 'v', 'a', 't', 'e' }; +static symbol s_7_20[3] = { 'e', 't', 'e' }; +static symbol s_7_21[5] = { 'e', 'r', 'e', 't', 'e' }; +static symbol s_7_22[5] = { 'i', 'r', 'e', 't', 'e' }; +static symbol s_7_23[3] = { 'i', 't', 'e' }; +static symbol s_7_24[6] = { 'e', 'r', 'e', 's', 't', 'e' }; +static symbol s_7_25[6] = { 'i', 'r', 'e', 's', 't', 'e' }; +static symbol s_7_26[3] = { 'u', 't', 'e' }; +static symbol s_7_27[4] = { 'e', 'r', 'a', 'i' }; +static symbol s_7_28[4] = { 'i', 'r', 'a', 'i' }; +static symbol s_7_29[4] = { 'i', 's', 'c', 'i' }; +static symbol s_7_30[4] = { 'e', 'n', 'd', 'i' }; +static symbol s_7_31[4] = { 'e', 'r', 'e', 'i' }; +static symbol s_7_32[4] = { 'i', 'r', 'e', 'i' }; +static symbol s_7_33[4] = { 'a', 's', 's', 'i' }; +static symbol s_7_34[3] = { 'a', 't', 'i' }; +static symbol s_7_35[3] = { 'i', 't', 'i' }; +static symbol s_7_36[6] = { 'e', 'r', 'e', 's', 't', 'i' }; +static symbol s_7_37[6] = { 'i', 'r', 'e', 's', 't', 'i' }; +static symbol s_7_38[3] = { 'u', 't', 'i' }; +static symbol s_7_39[3] = { 'a', 'v', 'i' }; +static symbol s_7_40[3] = { 'e', 'v', 'i' }; +static symbol s_7_41[3] = { 'i', 'v', 'i' }; +static symbol s_7_42[4] = { 'i', 's', 'c', 'o' }; +static symbol s_7_43[4] = { 'a', 'n', 'd', 'o' }; +static symbol s_7_44[4] = { 'e', 'n', 'd', 'o' }; +static symbol s_7_45[4] = { 'Y', 'a', 'm', 'o' }; +static symbol s_7_46[4] = { 'i', 'a', 'm', 'o' }; +static symbol s_7_47[5] = { 'a', 'v', 'a', 'm', 'o' }; +static symbol s_7_48[5] = { 'e', 'v', 'a', 'm', 'o' }; +static symbol s_7_49[5] = { 'i', 'v', 'a', 'm', 'o' }; +static symbol s_7_50[5] = { 'e', 'r', 'e', 'm', 'o' }; +static symbol s_7_51[5] = { 'i', 'r', 'e', 'm', 'o' }; +static symbol s_7_52[6] = { 'a', 's', 's', 'i', 'm', 'o' }; +static symbol s_7_53[4] = { 'a', 'm', 'm', 'o' }; +static symbol s_7_54[4] = { 'e', 'm', 'm', 'o' }; +static symbol s_7_55[6] = { 'e', 'r', 'e', 'm', 'm', 'o' }; +static symbol s_7_56[6] = { 'i', 'r', 'e', 'm', 'm', 'o' }; +static symbol s_7_57[4] = { 'i', 'm', 'm', 'o' }; +static symbol s_7_58[3] = { 'a', 'n', 'o' }; +static symbol s_7_59[6] = { 'i', 's', 'c', 'a', 'n', 'o' }; +static symbol s_7_60[5] = { 'a', 'v', 'a', 'n', 'o' }; +static symbol s_7_61[5] = { 'e', 'v', 'a', 'n', 'o' }; +static symbol s_7_62[5] = { 'i', 'v', 'a', 'n', 'o' }; +static symbol s_7_63[6] = { 'e', 'r', 'a', 'n', 'n', 'o' }; +static symbol s_7_64[6] = { 'i', 'r', 'a', 'n', 'n', 'o' }; +static symbol s_7_65[3] = { 'o', 'n', 'o' }; +static symbol s_7_66[6] = { 'i', 's', 'c', 'o', 'n', 'o' }; +static symbol s_7_67[5] = { 'a', 'r', 'o', 'n', 'o' }; +static symbol s_7_68[5] = { 'e', 'r', 'o', 'n', 'o' }; +static symbol s_7_69[5] = { 'i', 'r', 'o', 'n', 'o' }; +static symbol s_7_70[8] = { 'e', 'r', 'e', 'b', 'b', 'e', 'r', 'o' }; +static symbol s_7_71[8] = { 'i', 'r', 'e', 'b', 'b', 'e', 'r', 'o' }; +static symbol s_7_72[6] = { 'a', 's', 's', 'e', 'r', 'o' }; +static symbol s_7_73[6] = { 'e', 's', 's', 'e', 'r', 'o' }; +static symbol s_7_74[6] = { 'i', 's', 's', 'e', 'r', 'o' }; +static symbol s_7_75[3] = { 'a', 't', 'o' }; +static symbol s_7_76[3] = { 'i', 't', 'o' }; +static symbol s_7_77[3] = { 'u', 't', 'o' }; +static symbol s_7_78[3] = { 'a', 'v', 'o' }; +static symbol s_7_79[3] = { 'e', 'v', 'o' }; +static symbol s_7_80[3] = { 'i', 'v', 'o' }; +static symbol s_7_81[2] = { 'a', 'r' }; +static symbol s_7_82[2] = { 'i', 'r' }; +static symbol s_7_83[3] = { 'e', 'r', 0xE0 }; +static symbol s_7_84[3] = { 'i', 'r', 0xE0 }; +static symbol s_7_85[3] = { 'e', 'r', 0xF2 }; +static symbol s_7_86[3] = { 'i', 'r', 0xF2 }; + +static struct among a_7[87] = +{ +/* 0 */ { 4, s_7_0, -1, 1, 0}, +/* 1 */ { 4, s_7_1, -1, 1, 0}, +/* 2 */ { 3, s_7_2, -1, 1, 0}, +/* 3 */ { 3, s_7_3, -1, 1, 0}, +/* 4 */ { 3, s_7_4, -1, 1, 0}, +/* 5 */ { 3, s_7_5, -1, 1, 0}, +/* 6 */ { 3, s_7_6, -1, 1, 0}, +/* 7 */ { 3, s_7_7, -1, 1, 0}, +/* 8 */ { 6, s_7_8, -1, 1, 0}, +/* 9 */ { 6, s_7_9, -1, 1, 0}, +/* 10 */ { 4, s_7_10, -1, 1, 0}, +/* 11 */ { 4, s_7_11, -1, 1, 0}, +/* 12 */ { 3, s_7_12, -1, 1, 0}, +/* 13 */ { 3, s_7_13, -1, 1, 0}, +/* 14 */ { 3, s_7_14, -1, 1, 0}, +/* 15 */ { 4, s_7_15, -1, 1, 0}, +/* 16 */ { 3, s_7_16, -1, 1, 0}, +/* 17 */ { 5, s_7_17, 16, 1, 0}, +/* 18 */ { 5, s_7_18, 16, 1, 0}, +/* 19 */ { 5, s_7_19, 16, 1, 0}, +/* 20 */ { 3, s_7_20, -1, 1, 0}, +/* 21 */ { 5, s_7_21, 20, 1, 0}, +/* 22 */ { 5, s_7_22, 20, 1, 0}, +/* 23 */ { 3, s_7_23, -1, 1, 0}, +/* 24 */ { 6, s_7_24, -1, 1, 0}, +/* 25 */ { 6, s_7_25, -1, 1, 0}, +/* 26 */ { 3, s_7_26, -1, 1, 0}, +/* 27 */ { 4, s_7_27, -1, 1, 0}, +/* 28 */ { 4, s_7_28, -1, 1, 0}, +/* 29 */ { 4, s_7_29, -1, 1, 0}, +/* 30 */ { 4, s_7_30, -1, 1, 0}, +/* 31 */ { 4, s_7_31, -1, 1, 0}, +/* 32 */ { 4, s_7_32, -1, 1, 0}, +/* 33 */ { 4, s_7_33, -1, 1, 0}, +/* 34 */ { 3, s_7_34, -1, 1, 0}, +/* 35 */ { 3, s_7_35, -1, 1, 0}, +/* 36 */ { 6, s_7_36, -1, 1, 0}, +/* 37 */ { 6, s_7_37, -1, 1, 0}, +/* 38 */ { 3, s_7_38, -1, 1, 0}, +/* 39 */ { 3, s_7_39, -1, 1, 0}, +/* 40 */ { 3, s_7_40, -1, 1, 0}, +/* 41 */ { 3, s_7_41, -1, 1, 0}, +/* 42 */ { 4, s_7_42, -1, 1, 0}, +/* 43 */ { 4, s_7_43, -1, 1, 0}, +/* 44 */ { 4, s_7_44, -1, 1, 0}, +/* 45 */ { 4, s_7_45, -1, 1, 0}, +/* 46 */ { 4, s_7_46, -1, 1, 0}, +/* 47 */ { 5, s_7_47, -1, 1, 0}, +/* 48 */ { 5, s_7_48, -1, 1, 0}, +/* 49 */ { 5, s_7_49, -1, 1, 0}, +/* 50 */ { 5, s_7_50, -1, 1, 0}, +/* 51 */ { 5, s_7_51, -1, 1, 0}, +/* 52 */ { 6, s_7_52, -1, 1, 0}, +/* 53 */ { 4, s_7_53, -1, 1, 0}, +/* 54 */ { 4, s_7_54, -1, 1, 0}, +/* 55 */ { 6, s_7_55, 54, 1, 0}, +/* 56 */ { 6, s_7_56, 54, 1, 0}, +/* 57 */ { 4, s_7_57, -1, 1, 0}, +/* 58 */ { 3, s_7_58, -1, 1, 0}, +/* 59 */ { 6, s_7_59, 58, 1, 0}, +/* 60 */ { 5, s_7_60, 58, 1, 0}, +/* 61 */ { 5, s_7_61, 58, 1, 0}, +/* 62 */ { 5, s_7_62, 58, 1, 0}, +/* 63 */ { 6, s_7_63, -1, 1, 0}, +/* 64 */ { 6, s_7_64, -1, 1, 0}, +/* 65 */ { 3, s_7_65, -1, 1, 0}, +/* 66 */ { 6, s_7_66, 65, 1, 0}, +/* 67 */ { 5, s_7_67, 65, 1, 0}, +/* 68 */ { 5, s_7_68, 65, 1, 0}, +/* 69 */ { 5, s_7_69, 65, 1, 0}, +/* 70 */ { 8, s_7_70, -1, 1, 0}, +/* 71 */ { 8, s_7_71, -1, 1, 0}, +/* 72 */ { 6, s_7_72, -1, 1, 0}, +/* 73 */ { 6, s_7_73, -1, 1, 0}, +/* 74 */ { 6, s_7_74, -1, 1, 0}, +/* 75 */ { 3, s_7_75, -1, 1, 0}, +/* 76 */ { 3, s_7_76, -1, 1, 0}, +/* 77 */ { 3, s_7_77, -1, 1, 0}, +/* 78 */ { 3, s_7_78, -1, 1, 0}, +/* 79 */ { 3, s_7_79, -1, 1, 0}, +/* 80 */ { 3, s_7_80, -1, 1, 0}, +/* 81 */ { 2, s_7_81, -1, 1, 0}, +/* 82 */ { 2, s_7_82, -1, 1, 0}, +/* 83 */ { 3, s_7_83, -1, 1, 0}, +/* 84 */ { 3, s_7_84, -1, 1, 0}, +/* 85 */ { 3, s_7_85, -1, 1, 0}, +/* 86 */ { 3, s_7_86, -1, 1, 0} +}; + +static unsigned char g_v[] = { 17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 8, 2, 1 }; + +static unsigned char g_AEIO[] = { 17, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 8, 2 }; + +static unsigned char g_CG[] = { 17 }; + +static symbol s_0[] = { 0xE0 }; +static symbol s_1[] = { 0xE8 }; +static symbol s_2[] = { 0xEC }; +static symbol s_3[] = { 0xF2 }; +static symbol s_4[] = { 0xF9 }; +static symbol s_5[] = { 'q', 'U' }; +static symbol s_6[] = { 'u' }; +static symbol s_7[] = { 'U' }; +static symbol s_8[] = { 'i' }; +static symbol s_9[] = { 'I' }; +static symbol s_10[] = { 'i' }; +static symbol s_11[] = { 'u' }; +static symbol s_12[] = { 'e' }; +static symbol s_13[] = { 'i', 'c' }; +static symbol s_14[] = { 'l', 'o', 'g' }; +static symbol s_15[] = { 'u' }; +static symbol s_16[] = { 'e', 'n', 't', 'e' }; +static symbol s_17[] = { 'a', 't' }; +static symbol s_18[] = { 'a', 't' }; +static symbol s_19[] = { 'i', 'c' }; +static symbol s_20[] = { 'i' }; +static symbol s_21[] = { 'h' }; + +static int r_prelude(struct SN_env * z) { + int among_var; + { int c_test = z->c; /* test, line 35 */ + while(1) { /* repeat, line 35 */ + int c = z->c; + z->bra = z->c; /* [, line 36 */ + among_var = find_among(z, a_0, 7); /* substring, line 36 */ + if (!(among_var)) goto lab0; + z->ket = z->c; /* ], line 36 */ + switch(among_var) { + case 0: goto lab0; + case 1: + { int ret; + ret = slice_from_s(z, 1, s_0); /* <-, line 37 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 1, s_1); /* <-, line 38 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_from_s(z, 1, s_2); /* <-, line 39 */ + if (ret < 0) return ret; + } + break; + case 4: + { int ret; + ret = slice_from_s(z, 1, s_3); /* <-, line 40 */ + if (ret < 0) return ret; + } + break; + case 5: + { int ret; + ret = slice_from_s(z, 1, s_4); /* <-, line 41 */ + if (ret < 0) return ret; + } + break; + case 6: + { int ret; + ret = slice_from_s(z, 2, s_5); /* <-, line 42 */ + if (ret < 0) return ret; + } + break; + case 7: + if (z->c >= z->l) goto lab0; + z->c++; /* next, line 43 */ + break; + } + continue; + lab0: + z->c = c; + break; + } + z->c = c_test; + } + while(1) { /* repeat, line 46 */ + int c = z->c; + while(1) { /* goto, line 46 */ + int c = z->c; + if (!(in_grouping(z, g_v, 97, 249))) goto lab2; + z->bra = z->c; /* [, line 47 */ + { int c = z->c; /* or, line 47 */ + if (!(eq_s(z, 1, s_6))) goto lab4; + z->ket = z->c; /* ], line 47 */ + if (!(in_grouping(z, g_v, 97, 249))) goto lab4; + { int ret; + ret = slice_from_s(z, 1, s_7); /* <-, line 47 */ + if (ret < 0) return ret; + } + goto lab3; + lab4: + z->c = c; + if (!(eq_s(z, 1, s_8))) goto lab2; + z->ket = z->c; /* ], line 48 */ + if (!(in_grouping(z, g_v, 97, 249))) goto lab2; + { int ret; + ret = slice_from_s(z, 1, s_9); /* <-, line 48 */ + if (ret < 0) return ret; + } + } + lab3: + z->c = c; + break; + lab2: + z->c = c; + if (z->c >= z->l) goto lab1; + z->c++; /* goto, line 46 */ + } + continue; + lab1: + z->c = c; + break; + } + return 1; +} + +static int r_mark_regions(struct SN_env * z) { + z->I[0] = z->l; + z->I[1] = z->l; + z->I[2] = z->l; + { int c = z->c; /* do, line 58 */ + { int c = z->c; /* or, line 60 */ + if (!(in_grouping(z, g_v, 97, 249))) goto lab2; + { int c = z->c; /* or, line 59 */ + if (!(out_grouping(z, g_v, 97, 249))) goto lab4; + while(1) { /* gopast, line 59 */ + if (!(in_grouping(z, g_v, 97, 249))) goto lab5; + break; + lab5: + if (z->c >= z->l) goto lab4; + z->c++; /* gopast, line 59 */ + } + goto lab3; + lab4: + z->c = c; + if (!(in_grouping(z, g_v, 97, 249))) goto lab2; + while(1) { /* gopast, line 59 */ + if (!(out_grouping(z, g_v, 97, 249))) goto lab6; + break; + lab6: + if (z->c >= z->l) goto lab2; + z->c++; /* gopast, line 59 */ + } + } + lab3: + goto lab1; + lab2: + z->c = c; + if (!(out_grouping(z, g_v, 97, 249))) goto lab0; + { int c = z->c; /* or, line 61 */ + if (!(out_grouping(z, g_v, 97, 249))) goto lab8; + while(1) { /* gopast, line 61 */ + if (!(in_grouping(z, g_v, 97, 249))) goto lab9; + break; + lab9: + if (z->c >= z->l) goto lab8; + z->c++; /* gopast, line 61 */ + } + goto lab7; + lab8: + z->c = c; + if (!(in_grouping(z, g_v, 97, 249))) goto lab0; + if (z->c >= z->l) goto lab0; + z->c++; /* next, line 61 */ + } + lab7: + ; + } + lab1: + z->I[0] = z->c; /* setmark pV, line 62 */ + lab0: + z->c = c; + } + { int c = z->c; /* do, line 64 */ + while(1) { /* gopast, line 65 */ + if (!(in_grouping(z, g_v, 97, 249))) goto lab11; + break; + lab11: + if (z->c >= z->l) goto lab10; + z->c++; /* gopast, line 65 */ + } + while(1) { /* gopast, line 65 */ + if (!(out_grouping(z, g_v, 97, 249))) goto lab12; + break; + lab12: + if (z->c >= z->l) goto lab10; + z->c++; /* gopast, line 65 */ + } + z->I[1] = z->c; /* setmark p1, line 65 */ + while(1) { /* gopast, line 66 */ + if (!(in_grouping(z, g_v, 97, 249))) goto lab13; + break; + lab13: + if (z->c >= z->l) goto lab10; + z->c++; /* gopast, line 66 */ + } + while(1) { /* gopast, line 66 */ + if (!(out_grouping(z, g_v, 97, 249))) goto lab14; + break; + lab14: + if (z->c >= z->l) goto lab10; + z->c++; /* gopast, line 66 */ + } + z->I[2] = z->c; /* setmark p2, line 66 */ + lab10: + z->c = c; + } + return 1; +} + +static int r_postlude(struct SN_env * z) { + int among_var; + while(1) { /* repeat, line 70 */ + int c = z->c; + z->bra = z->c; /* [, line 72 */ + among_var = find_among(z, a_1, 3); /* substring, line 72 */ + if (!(among_var)) goto lab0; + z->ket = z->c; /* ], line 72 */ + switch(among_var) { + case 0: goto lab0; + case 1: + { int ret; + ret = slice_from_s(z, 1, s_10); /* <-, line 73 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 1, s_11); /* <-, line 74 */ + if (ret < 0) return ret; + } + break; + case 3: + if (z->c >= z->l) goto lab0; + z->c++; /* next, line 75 */ + break; + } + continue; + lab0: + z->c = c; + break; + } + return 1; +} + +static int r_RV(struct SN_env * z) { + if (!(z->I[0] <= z->c)) return 0; + return 1; +} + +static int r_R1(struct SN_env * z) { + if (!(z->I[1] <= z->c)) return 0; + return 1; +} + +static int r_R2(struct SN_env * z) { + if (!(z->I[2] <= z->c)) return 0; + return 1; +} + +static int r_attached_pronoun(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 87 */ + if (!(find_among_b(z, a_2, 37))) return 0; /* substring, line 87 */ + z->bra = z->c; /* ], line 87 */ + among_var = find_among_b(z, a_3, 5); /* among, line 97 */ + if (!(among_var)) return 0; + { int ret = r_RV(z); + if (ret == 0) return 0; /* call RV, line 97 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 98 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 1, s_12); /* <-, line 99 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_standard_suffix(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 104 */ + among_var = find_among_b(z, a_6, 51); /* substring, line 104 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 104 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 111 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 111 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 113 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 113 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 114 */ + z->ket = z->c; /* [, line 114 */ + if (!(eq_s_b(z, 2, s_13))) { z->c = z->l - m; goto lab0; } + z->bra = z->c; /* ], line 114 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab0; } /* call R2, line 114 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 114 */ + if (ret < 0) return ret; + } + lab0: + ; + } + break; + case 3: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 117 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 3, s_14); /* <-, line 117 */ + if (ret < 0) return ret; + } + break; + case 4: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 119 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 1, s_15); /* <-, line 119 */ + if (ret < 0) return ret; + } + break; + case 5: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 121 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 4, s_16); /* <-, line 121 */ + if (ret < 0) return ret; + } + break; + case 6: + { int ret = r_RV(z); + if (ret == 0) return 0; /* call RV, line 123 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 123 */ + if (ret < 0) return ret; + } + break; + case 7: + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 125 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 125 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 126 */ + z->ket = z->c; /* [, line 127 */ + among_var = find_among_b(z, a_4, 4); /* substring, line 127 */ + if (!(among_var)) { z->c = z->l - m; goto lab1; } + z->bra = z->c; /* ], line 127 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab1; } /* call R2, line 127 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 127 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: { z->c = z->l - m; goto lab1; } + case 1: + z->ket = z->c; /* [, line 128 */ + if (!(eq_s_b(z, 2, s_17))) { z->c = z->l - m; goto lab1; } + z->bra = z->c; /* ], line 128 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab1; } /* call R2, line 128 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 128 */ + if (ret < 0) return ret; + } + break; + } + lab1: + ; + } + break; + case 8: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 134 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 134 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 135 */ + z->ket = z->c; /* [, line 136 */ + among_var = find_among_b(z, a_5, 3); /* substring, line 136 */ + if (!(among_var)) { z->c = z->l - m; goto lab2; } + z->bra = z->c; /* ], line 136 */ + switch(among_var) { + case 0: { z->c = z->l - m; goto lab2; } + case 1: + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab2; } /* call R2, line 137 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 137 */ + if (ret < 0) return ret; + } + break; + } + lab2: + ; + } + break; + case 9: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 142 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 142 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 143 */ + z->ket = z->c; /* [, line 143 */ + if (!(eq_s_b(z, 2, s_18))) { z->c = z->l - m; goto lab3; } + z->bra = z->c; /* ], line 143 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab3; } /* call R2, line 143 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 143 */ + if (ret < 0) return ret; + } + z->ket = z->c; /* [, line 143 */ + if (!(eq_s_b(z, 2, s_19))) { z->c = z->l - m; goto lab3; } + z->bra = z->c; /* ], line 143 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab3; } /* call R2, line 143 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 143 */ + if (ret < 0) return ret; + } + lab3: + ; + } + break; + } + return 1; +} + +static int r_verb_suffix(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 148 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 148 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 149 */ + among_var = find_among_b(z, a_7, 87); /* substring, line 149 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 149 */ + switch(among_var) { + case 0: { z->lb = m3; return 0; } + case 1: + { int ret; + ret = slice_del(z); /* delete, line 163 */ + if (ret < 0) return ret; + } + break; + } + z->lb = m3; + } + return 1; +} + +static int r_vowel_suffix(struct SN_env * z) { + { int m = z->l - z->c; (void) m; /* try, line 171 */ + z->ket = z->c; /* [, line 172 */ + if (!(in_grouping_b(z, g_AEIO, 97, 242))) { z->c = z->l - m; goto lab0; } + z->bra = z->c; /* ], line 172 */ + { int ret = r_RV(z); + if (ret == 0) { z->c = z->l - m; goto lab0; } /* call RV, line 172 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 172 */ + if (ret < 0) return ret; + } + z->ket = z->c; /* [, line 173 */ + if (!(eq_s_b(z, 1, s_20))) { z->c = z->l - m; goto lab0; } + z->bra = z->c; /* ], line 173 */ + { int ret = r_RV(z); + if (ret == 0) { z->c = z->l - m; goto lab0; } /* call RV, line 173 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 173 */ + if (ret < 0) return ret; + } + lab0: + ; + } + { int m = z->l - z->c; (void) m; /* try, line 175 */ + z->ket = z->c; /* [, line 176 */ + if (!(eq_s_b(z, 1, s_21))) { z->c = z->l - m; goto lab1; } + z->bra = z->c; /* ], line 176 */ + if (!(in_grouping_b(z, g_CG, 99, 103))) { z->c = z->l - m; goto lab1; } + { int ret = r_RV(z); + if (ret == 0) { z->c = z->l - m; goto lab1; } /* call RV, line 176 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 176 */ + if (ret < 0) return ret; + } + lab1: + ; + } + return 1; +} + +extern int italian_ISO_8859_1_stem(struct SN_env * z) { + { int c = z->c; /* do, line 182 */ + { int ret = r_prelude(z); + if (ret == 0) goto lab0; /* call prelude, line 182 */ + if (ret < 0) return ret; + } + lab0: + z->c = c; + } + { int c = z->c; /* do, line 183 */ + { int ret = r_mark_regions(z); + if (ret == 0) goto lab1; /* call mark_regions, line 183 */ + if (ret < 0) return ret; + } + lab1: + z->c = c; + } + z->lb = z->c; z->c = z->l; /* backwards, line 184 */ + + { int m = z->l - z->c; (void) m; /* do, line 185 */ + { int ret = r_attached_pronoun(z); + if (ret == 0) goto lab2; /* call attached_pronoun, line 185 */ + if (ret < 0) return ret; + } + lab2: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 186 */ + { int m = z->l - z->c; (void) m; /* or, line 186 */ + { int ret = r_standard_suffix(z); + if (ret == 0) goto lab5; /* call standard_suffix, line 186 */ + if (ret < 0) return ret; + } + goto lab4; + lab5: + z->c = z->l - m; + { int ret = r_verb_suffix(z); + if (ret == 0) goto lab3; /* call verb_suffix, line 186 */ + if (ret < 0) return ret; + } + } + lab4: + lab3: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 187 */ + { int ret = r_vowel_suffix(z); + if (ret == 0) goto lab6; /* call vowel_suffix, line 187 */ + if (ret < 0) return ret; + } + lab6: + z->c = z->l - m; + } + z->c = z->lb; + { int c = z->c; /* do, line 189 */ + { int ret = r_postlude(z); + if (ret == 0) goto lab7; /* call postlude, line 189 */ + if (ret < 0) return ret; + } + lab7: + z->c = c; + } + return 1; +} + +extern struct SN_env * italian_ISO_8859_1_create_env(void) { return SN_create_env(0, 3, 0); } + +extern void italian_ISO_8859_1_close_env(struct SN_env * z) { SN_close_env(z); } + diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_italian.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_italian.h new file mode 100644 index 0000000..dccbfd5 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_italian.h @@ -0,0 +1,16 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern struct SN_env * italian_ISO_8859_1_create_env(void); +extern void italian_ISO_8859_1_close_env(struct SN_env * z); + +extern int italian_ISO_8859_1_stem(struct SN_env * z); + +#ifdef __cplusplus +} +#endif + diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_norwegian.c b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_norwegian.c new file mode 100644 index 0000000..c28e2f0 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_norwegian.c @@ -0,0 +1,296 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#include "../runtime/header.h" + +extern int norwegian_ISO_8859_1_stem(struct SN_env * z); +static int r_other_suffix(struct SN_env * z); +static int r_consonant_pair(struct SN_env * z); +static int r_main_suffix(struct SN_env * z); +static int r_mark_regions(struct SN_env * z); + +extern struct SN_env * norwegian_ISO_8859_1_create_env(void); +extern void norwegian_ISO_8859_1_close_env(struct SN_env * z); + +static symbol s_0_0[1] = { 'a' }; +static symbol s_0_1[1] = { 'e' }; +static symbol s_0_2[3] = { 'e', 'd', 'e' }; +static symbol s_0_3[4] = { 'a', 'n', 'd', 'e' }; +static symbol s_0_4[4] = { 'e', 'n', 'd', 'e' }; +static symbol s_0_5[3] = { 'a', 'n', 'e' }; +static symbol s_0_6[3] = { 'e', 'n', 'e' }; +static symbol s_0_7[6] = { 'h', 'e', 't', 'e', 'n', 'e' }; +static symbol s_0_8[4] = { 'e', 'r', 't', 'e' }; +static symbol s_0_9[2] = { 'e', 'n' }; +static symbol s_0_10[5] = { 'h', 'e', 't', 'e', 'n' }; +static symbol s_0_11[2] = { 'a', 'r' }; +static symbol s_0_12[2] = { 'e', 'r' }; +static symbol s_0_13[5] = { 'h', 'e', 't', 'e', 'r' }; +static symbol s_0_14[1] = { 's' }; +static symbol s_0_15[2] = { 'a', 's' }; +static symbol s_0_16[2] = { 'e', 's' }; +static symbol s_0_17[4] = { 'e', 'd', 'e', 's' }; +static symbol s_0_18[5] = { 'e', 'n', 'd', 'e', 's' }; +static symbol s_0_19[4] = { 'e', 'n', 'e', 's' }; +static symbol s_0_20[7] = { 'h', 'e', 't', 'e', 'n', 'e', 's' }; +static symbol s_0_21[3] = { 'e', 'n', 's' }; +static symbol s_0_22[6] = { 'h', 'e', 't', 'e', 'n', 's' }; +static symbol s_0_23[3] = { 'e', 'r', 's' }; +static symbol s_0_24[3] = { 'e', 't', 's' }; +static symbol s_0_25[2] = { 'e', 't' }; +static symbol s_0_26[3] = { 'h', 'e', 't' }; +static symbol s_0_27[3] = { 'e', 'r', 't' }; +static symbol s_0_28[3] = { 'a', 's', 't' }; + +static struct among a_0[29] = +{ +/* 0 */ { 1, s_0_0, -1, 1, 0}, +/* 1 */ { 1, s_0_1, -1, 1, 0}, +/* 2 */ { 3, s_0_2, 1, 1, 0}, +/* 3 */ { 4, s_0_3, 1, 1, 0}, +/* 4 */ { 4, s_0_4, 1, 1, 0}, +/* 5 */ { 3, s_0_5, 1, 1, 0}, +/* 6 */ { 3, s_0_6, 1, 1, 0}, +/* 7 */ { 6, s_0_7, 6, 1, 0}, +/* 8 */ { 4, s_0_8, 1, 3, 0}, +/* 9 */ { 2, s_0_9, -1, 1, 0}, +/* 10 */ { 5, s_0_10, 9, 1, 0}, +/* 11 */ { 2, s_0_11, -1, 1, 0}, +/* 12 */ { 2, s_0_12, -1, 1, 0}, +/* 13 */ { 5, s_0_13, 12, 1, 0}, +/* 14 */ { 1, s_0_14, -1, 2, 0}, +/* 15 */ { 2, s_0_15, 14, 1, 0}, +/* 16 */ { 2, s_0_16, 14, 1, 0}, +/* 17 */ { 4, s_0_17, 16, 1, 0}, +/* 18 */ { 5, s_0_18, 16, 1, 0}, +/* 19 */ { 4, s_0_19, 16, 1, 0}, +/* 20 */ { 7, s_0_20, 19, 1, 0}, +/* 21 */ { 3, s_0_21, 14, 1, 0}, +/* 22 */ { 6, s_0_22, 21, 1, 0}, +/* 23 */ { 3, s_0_23, 14, 1, 0}, +/* 24 */ { 3, s_0_24, 14, 1, 0}, +/* 25 */ { 2, s_0_25, -1, 1, 0}, +/* 26 */ { 3, s_0_26, 25, 1, 0}, +/* 27 */ { 3, s_0_27, -1, 3, 0}, +/* 28 */ { 3, s_0_28, -1, 1, 0} +}; + +static symbol s_1_0[2] = { 'd', 't' }; +static symbol s_1_1[2] = { 'v', 't' }; + +static struct among a_1[2] = +{ +/* 0 */ { 2, s_1_0, -1, -1, 0}, +/* 1 */ { 2, s_1_1, -1, -1, 0} +}; + +static symbol s_2_0[3] = { 'l', 'e', 'g' }; +static symbol s_2_1[4] = { 'e', 'l', 'e', 'g' }; +static symbol s_2_2[2] = { 'i', 'g' }; +static symbol s_2_3[3] = { 'e', 'i', 'g' }; +static symbol s_2_4[3] = { 'l', 'i', 'g' }; +static symbol s_2_5[4] = { 'e', 'l', 'i', 'g' }; +static symbol s_2_6[3] = { 'e', 'l', 's' }; +static symbol s_2_7[3] = { 'l', 'o', 'v' }; +static symbol s_2_8[4] = { 'e', 'l', 'o', 'v' }; +static symbol s_2_9[4] = { 's', 'l', 'o', 'v' }; +static symbol s_2_10[7] = { 'h', 'e', 't', 's', 'l', 'o', 'v' }; + +static struct among a_2[11] = +{ +/* 0 */ { 3, s_2_0, -1, 1, 0}, +/* 1 */ { 4, s_2_1, 0, 1, 0}, +/* 2 */ { 2, s_2_2, -1, 1, 0}, +/* 3 */ { 3, s_2_3, 2, 1, 0}, +/* 4 */ { 3, s_2_4, 2, 1, 0}, +/* 5 */ { 4, s_2_5, 4, 1, 0}, +/* 6 */ { 3, s_2_6, -1, 1, 0}, +/* 7 */ { 3, s_2_7, -1, 1, 0}, +/* 8 */ { 4, s_2_8, 7, 1, 0}, +/* 9 */ { 4, s_2_9, 7, 1, 0}, +/* 10 */ { 7, s_2_10, 9, 1, 0} +}; + +static unsigned char g_v[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 128 }; + +static unsigned char g_s_ending[] = { 119, 125, 149, 1 }; + +static symbol s_0[] = { 'k' }; +static symbol s_1[] = { 'e', 'r' }; + +static int r_mark_regions(struct SN_env * z) { + z->I[0] = z->l; + { int c_test = z->c; /* test, line 30 */ + { int c = z->c + 3; + if (0 > c || c > z->l) return 0; + z->c = c; /* hop, line 30 */ + } + z->I[1] = z->c; /* setmark x, line 30 */ + z->c = c_test; + } + while(1) { /* goto, line 31 */ + int c = z->c; + if (!(in_grouping(z, g_v, 97, 248))) goto lab0; + z->c = c; + break; + lab0: + z->c = c; + if (z->c >= z->l) return 0; + z->c++; /* goto, line 31 */ + } + while(1) { /* gopast, line 31 */ + if (!(out_grouping(z, g_v, 97, 248))) goto lab1; + break; + lab1: + if (z->c >= z->l) return 0; + z->c++; /* gopast, line 31 */ + } + z->I[0] = z->c; /* setmark p1, line 31 */ + /* try, line 32 */ + if (!(z->I[0] < z->I[1])) goto lab2; + z->I[0] = z->I[1]; +lab2: + return 1; +} + +static int r_main_suffix(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 38 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 38 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 38 */ + among_var = find_among_b(z, a_0, 29); /* substring, line 38 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 38 */ + z->lb = m3; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 44 */ + if (ret < 0) return ret; + } + break; + case 2: + { int m = z->l - z->c; (void) m; /* or, line 46 */ + if (!(in_grouping_b(z, g_s_ending, 98, 122))) goto lab1; + goto lab0; + lab1: + z->c = z->l - m; + if (!(eq_s_b(z, 1, s_0))) return 0; + if (!(out_grouping_b(z, g_v, 97, 248))) return 0; + } + lab0: + { int ret; + ret = slice_del(z); /* delete, line 46 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_from_s(z, 2, s_1); /* <-, line 48 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_consonant_pair(struct SN_env * z) { + { int m_test = z->l - z->c; /* test, line 53 */ + { int m3; /* setlimit, line 54 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 54 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 54 */ + if (!(find_among_b(z, a_1, 2))) { z->lb = m3; return 0; } /* substring, line 54 */ + z->bra = z->c; /* ], line 54 */ + z->lb = m3; + } + z->c = z->l - m_test; + } + if (z->c <= z->lb) return 0; + z->c--; /* next, line 59 */ + z->bra = z->c; /* ], line 59 */ + { int ret; + ret = slice_del(z); /* delete, line 59 */ + if (ret < 0) return ret; + } + return 1; +} + +static int r_other_suffix(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 63 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 63 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 63 */ + among_var = find_among_b(z, a_2, 11); /* substring, line 63 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 63 */ + z->lb = m3; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 67 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +extern int norwegian_ISO_8859_1_stem(struct SN_env * z) { + { int c = z->c; /* do, line 74 */ + { int ret = r_mark_regions(z); + if (ret == 0) goto lab0; /* call mark_regions, line 74 */ + if (ret < 0) return ret; + } + lab0: + z->c = c; + } + z->lb = z->c; z->c = z->l; /* backwards, line 75 */ + + { int m = z->l - z->c; (void) m; /* do, line 76 */ + { int ret = r_main_suffix(z); + if (ret == 0) goto lab1; /* call main_suffix, line 76 */ + if (ret < 0) return ret; + } + lab1: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 77 */ + { int ret = r_consonant_pair(z); + if (ret == 0) goto lab2; /* call consonant_pair, line 77 */ + if (ret < 0) return ret; + } + lab2: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 78 */ + { int ret = r_other_suffix(z); + if (ret == 0) goto lab3; /* call other_suffix, line 78 */ + if (ret < 0) return ret; + } + lab3: + z->c = z->l - m; + } + z->c = z->lb; + return 1; +} + +extern struct SN_env * norwegian_ISO_8859_1_create_env(void) { return SN_create_env(0, 2, 0); } + +extern void norwegian_ISO_8859_1_close_env(struct SN_env * z) { SN_close_env(z); } + diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_norwegian.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_norwegian.h new file mode 100644 index 0000000..e09e34e --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_norwegian.h @@ -0,0 +1,16 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern struct SN_env * norwegian_ISO_8859_1_create_env(void); +extern void norwegian_ISO_8859_1_close_env(struct SN_env * z); + +extern int norwegian_ISO_8859_1_stem(struct SN_env * z); + +#ifdef __cplusplus +} +#endif + diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_porter.c b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_porter.c new file mode 100644 index 0000000..b2c6ad0 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_porter.c @@ -0,0 +1,776 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#include "../runtime/header.h" + +extern int porter_ISO_8859_1_stem(struct SN_env * z); +static int r_Step_5b(struct SN_env * z); +static int r_Step_5a(struct SN_env * z); +static int r_Step_4(struct SN_env * z); +static int r_Step_3(struct SN_env * z); +static int r_Step_2(struct SN_env * z); +static int r_Step_1c(struct SN_env * z); +static int r_Step_1b(struct SN_env * z); +static int r_Step_1a(struct SN_env * z); +static int r_R2(struct SN_env * z); +static int r_R1(struct SN_env * z); +static int r_shortv(struct SN_env * z); + +extern struct SN_env * porter_ISO_8859_1_create_env(void); +extern void porter_ISO_8859_1_close_env(struct SN_env * z); + +static symbol s_0_0[1] = { 's' }; +static symbol s_0_1[3] = { 'i', 'e', 's' }; +static symbol s_0_2[4] = { 's', 's', 'e', 's' }; +static symbol s_0_3[2] = { 's', 's' }; + +static struct among a_0[4] = +{ +/* 0 */ { 1, s_0_0, -1, 3, 0}, +/* 1 */ { 3, s_0_1, 0, 2, 0}, +/* 2 */ { 4, s_0_2, 0, 1, 0}, +/* 3 */ { 2, s_0_3, 0, -1, 0} +}; + +static symbol s_1_1[2] = { 'b', 'b' }; +static symbol s_1_2[2] = { 'd', 'd' }; +static symbol s_1_3[2] = { 'f', 'f' }; +static symbol s_1_4[2] = { 'g', 'g' }; +static symbol s_1_5[2] = { 'b', 'l' }; +static symbol s_1_6[2] = { 'm', 'm' }; +static symbol s_1_7[2] = { 'n', 'n' }; +static symbol s_1_8[2] = { 'p', 'p' }; +static symbol s_1_9[2] = { 'r', 'r' }; +static symbol s_1_10[2] = { 'a', 't' }; +static symbol s_1_11[2] = { 't', 't' }; +static symbol s_1_12[2] = { 'i', 'z' }; + +static struct among a_1[13] = +{ +/* 0 */ { 0, 0, -1, 3, 0}, +/* 1 */ { 2, s_1_1, 0, 2, 0}, +/* 2 */ { 2, s_1_2, 0, 2, 0}, +/* 3 */ { 2, s_1_3, 0, 2, 0}, +/* 4 */ { 2, s_1_4, 0, 2, 0}, +/* 5 */ { 2, s_1_5, 0, 1, 0}, +/* 6 */ { 2, s_1_6, 0, 2, 0}, +/* 7 */ { 2, s_1_7, 0, 2, 0}, +/* 8 */ { 2, s_1_8, 0, 2, 0}, +/* 9 */ { 2, s_1_9, 0, 2, 0}, +/* 10 */ { 2, s_1_10, 0, 1, 0}, +/* 11 */ { 2, s_1_11, 0, 2, 0}, +/* 12 */ { 2, s_1_12, 0, 1, 0} +}; + +static symbol s_2_0[2] = { 'e', 'd' }; +static symbol s_2_1[3] = { 'e', 'e', 'd' }; +static symbol s_2_2[3] = { 'i', 'n', 'g' }; + +static struct among a_2[3] = +{ +/* 0 */ { 2, s_2_0, -1, 2, 0}, +/* 1 */ { 3, s_2_1, 0, 1, 0}, +/* 2 */ { 3, s_2_2, -1, 2, 0} +}; + +static symbol s_3_0[4] = { 'a', 'n', 'c', 'i' }; +static symbol s_3_1[4] = { 'e', 'n', 'c', 'i' }; +static symbol s_3_2[4] = { 'a', 'b', 'l', 'i' }; +static symbol s_3_3[3] = { 'e', 'l', 'i' }; +static symbol s_3_4[4] = { 'a', 'l', 'l', 'i' }; +static symbol s_3_5[5] = { 'o', 'u', 's', 'l', 'i' }; +static symbol s_3_6[5] = { 'e', 'n', 't', 'l', 'i' }; +static symbol s_3_7[5] = { 'a', 'l', 'i', 't', 'i' }; +static symbol s_3_8[6] = { 'b', 'i', 'l', 'i', 't', 'i' }; +static symbol s_3_9[5] = { 'i', 'v', 'i', 't', 'i' }; +static symbol s_3_10[6] = { 't', 'i', 'o', 'n', 'a', 'l' }; +static symbol s_3_11[7] = { 'a', 't', 'i', 'o', 'n', 'a', 'l' }; +static symbol s_3_12[5] = { 'a', 'l', 'i', 's', 'm' }; +static symbol s_3_13[5] = { 'a', 't', 'i', 'o', 'n' }; +static symbol s_3_14[7] = { 'i', 'z', 'a', 't', 'i', 'o', 'n' }; +static symbol s_3_15[4] = { 'i', 'z', 'e', 'r' }; +static symbol s_3_16[4] = { 'a', 't', 'o', 'r' }; +static symbol s_3_17[7] = { 'i', 'v', 'e', 'n', 'e', 's', 's' }; +static symbol s_3_18[7] = { 'f', 'u', 'l', 'n', 'e', 's', 's' }; +static symbol s_3_19[7] = { 'o', 'u', 's', 'n', 'e', 's', 's' }; + +static struct among a_3[20] = +{ +/* 0 */ { 4, s_3_0, -1, 3, 0}, +/* 1 */ { 4, s_3_1, -1, 2, 0}, +/* 2 */ { 4, s_3_2, -1, 4, 0}, +/* 3 */ { 3, s_3_3, -1, 6, 0}, +/* 4 */ { 4, s_3_4, -1, 9, 0}, +/* 5 */ { 5, s_3_5, -1, 12, 0}, +/* 6 */ { 5, s_3_6, -1, 5, 0}, +/* 7 */ { 5, s_3_7, -1, 10, 0}, +/* 8 */ { 6, s_3_8, -1, 14, 0}, +/* 9 */ { 5, s_3_9, -1, 13, 0}, +/* 10 */ { 6, s_3_10, -1, 1, 0}, +/* 11 */ { 7, s_3_11, 10, 8, 0}, +/* 12 */ { 5, s_3_12, -1, 10, 0}, +/* 13 */ { 5, s_3_13, -1, 8, 0}, +/* 14 */ { 7, s_3_14, 13, 7, 0}, +/* 15 */ { 4, s_3_15, -1, 7, 0}, +/* 16 */ { 4, s_3_16, -1, 8, 0}, +/* 17 */ { 7, s_3_17, -1, 13, 0}, +/* 18 */ { 7, s_3_18, -1, 11, 0}, +/* 19 */ { 7, s_3_19, -1, 12, 0} +}; + +static symbol s_4_0[5] = { 'i', 'c', 'a', 't', 'e' }; +static symbol s_4_1[5] = { 'a', 't', 'i', 'v', 'e' }; +static symbol s_4_2[5] = { 'a', 'l', 'i', 'z', 'e' }; +static symbol s_4_3[5] = { 'i', 'c', 'i', 't', 'i' }; +static symbol s_4_4[4] = { 'i', 'c', 'a', 'l' }; +static symbol s_4_5[3] = { 'f', 'u', 'l' }; +static symbol s_4_6[4] = { 'n', 'e', 's', 's' }; + +static struct among a_4[7] = +{ +/* 0 */ { 5, s_4_0, -1, 2, 0}, +/* 1 */ { 5, s_4_1, -1, 3, 0}, +/* 2 */ { 5, s_4_2, -1, 1, 0}, +/* 3 */ { 5, s_4_3, -1, 2, 0}, +/* 4 */ { 4, s_4_4, -1, 2, 0}, +/* 5 */ { 3, s_4_5, -1, 3, 0}, +/* 6 */ { 4, s_4_6, -1, 3, 0} +}; + +static symbol s_5_0[2] = { 'i', 'c' }; +static symbol s_5_1[4] = { 'a', 'n', 'c', 'e' }; +static symbol s_5_2[4] = { 'e', 'n', 'c', 'e' }; +static symbol s_5_3[4] = { 'a', 'b', 'l', 'e' }; +static symbol s_5_4[4] = { 'i', 'b', 'l', 'e' }; +static symbol s_5_5[3] = { 'a', 't', 'e' }; +static symbol s_5_6[3] = { 'i', 'v', 'e' }; +static symbol s_5_7[3] = { 'i', 'z', 'e' }; +static symbol s_5_8[3] = { 'i', 't', 'i' }; +static symbol s_5_9[2] = { 'a', 'l' }; +static symbol s_5_10[3] = { 'i', 's', 'm' }; +static symbol s_5_11[3] = { 'i', 'o', 'n' }; +static symbol s_5_12[2] = { 'e', 'r' }; +static symbol s_5_13[3] = { 'o', 'u', 's' }; +static symbol s_5_14[3] = { 'a', 'n', 't' }; +static symbol s_5_15[3] = { 'e', 'n', 't' }; +static symbol s_5_16[4] = { 'm', 'e', 'n', 't' }; +static symbol s_5_17[5] = { 'e', 'm', 'e', 'n', 't' }; +static symbol s_5_18[2] = { 'o', 'u' }; + +static struct among a_5[19] = +{ +/* 0 */ { 2, s_5_0, -1, 1, 0}, +/* 1 */ { 4, s_5_1, -1, 1, 0}, +/* 2 */ { 4, s_5_2, -1, 1, 0}, +/* 3 */ { 4, s_5_3, -1, 1, 0}, +/* 4 */ { 4, s_5_4, -1, 1, 0}, +/* 5 */ { 3, s_5_5, -1, 1, 0}, +/* 6 */ { 3, s_5_6, -1, 1, 0}, +/* 7 */ { 3, s_5_7, -1, 1, 0}, +/* 8 */ { 3, s_5_8, -1, 1, 0}, +/* 9 */ { 2, s_5_9, -1, 1, 0}, +/* 10 */ { 3, s_5_10, -1, 1, 0}, +/* 11 */ { 3, s_5_11, -1, 2, 0}, +/* 12 */ { 2, s_5_12, -1, 1, 0}, +/* 13 */ { 3, s_5_13, -1, 1, 0}, +/* 14 */ { 3, s_5_14, -1, 1, 0}, +/* 15 */ { 3, s_5_15, -1, 1, 0}, +/* 16 */ { 4, s_5_16, 15, 1, 0}, +/* 17 */ { 5, s_5_17, 16, 1, 0}, +/* 18 */ { 2, s_5_18, -1, 1, 0} +}; + +static unsigned char g_v[] = { 17, 65, 16, 1 }; + +static unsigned char g_v_WXY[] = { 1, 17, 65, 208, 1 }; + +static symbol s_0[] = { 's', 's' }; +static symbol s_1[] = { 'i' }; +static symbol s_2[] = { 'e', 'e' }; +static symbol s_3[] = { 'e' }; +static symbol s_4[] = { 'e' }; +static symbol s_5[] = { 'y' }; +static symbol s_6[] = { 'Y' }; +static symbol s_7[] = { 'i' }; +static symbol s_8[] = { 't', 'i', 'o', 'n' }; +static symbol s_9[] = { 'e', 'n', 'c', 'e' }; +static symbol s_10[] = { 'a', 'n', 'c', 'e' }; +static symbol s_11[] = { 'a', 'b', 'l', 'e' }; +static symbol s_12[] = { 'e', 'n', 't' }; +static symbol s_13[] = { 'e' }; +static symbol s_14[] = { 'i', 'z', 'e' }; +static symbol s_15[] = { 'a', 't', 'e' }; +static symbol s_16[] = { 'a', 'l' }; +static symbol s_17[] = { 'a', 'l' }; +static symbol s_18[] = { 'f', 'u', 'l' }; +static symbol s_19[] = { 'o', 'u', 's' }; +static symbol s_20[] = { 'i', 'v', 'e' }; +static symbol s_21[] = { 'b', 'l', 'e' }; +static symbol s_22[] = { 'a', 'l' }; +static symbol s_23[] = { 'i', 'c' }; +static symbol s_24[] = { 's' }; +static symbol s_25[] = { 't' }; +static symbol s_26[] = { 'e' }; +static symbol s_27[] = { 'l' }; +static symbol s_28[] = { 'l' }; +static symbol s_29[] = { 'y' }; +static symbol s_30[] = { 'Y' }; +static symbol s_31[] = { 'y' }; +static symbol s_32[] = { 'Y' }; +static symbol s_33[] = { 'Y' }; +static symbol s_34[] = { 'y' }; + +static int r_shortv(struct SN_env * z) { + if (!(out_grouping_b(z, g_v_WXY, 89, 121))) return 0; + if (!(in_grouping_b(z, g_v, 97, 121))) return 0; + if (!(out_grouping_b(z, g_v, 97, 121))) return 0; + return 1; +} + +static int r_R1(struct SN_env * z) { + if (!(z->I[0] <= z->c)) return 0; + return 1; +} + +static int r_R2(struct SN_env * z) { + if (!(z->I[1] <= z->c)) return 0; + return 1; +} + +static int r_Step_1a(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 25 */ + among_var = find_among_b(z, a_0, 4); /* substring, line 25 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 25 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_from_s(z, 2, s_0); /* <-, line 26 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 1, s_1); /* <-, line 27 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_del(z); /* delete, line 29 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_Step_1b(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 34 */ + among_var = find_among_b(z, a_2, 3); /* substring, line 34 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 34 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 35 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 2, s_2); /* <-, line 35 */ + if (ret < 0) return ret; + } + break; + case 2: + { int m_test = z->l - z->c; /* test, line 38 */ + while(1) { /* gopast, line 38 */ + if (!(in_grouping_b(z, g_v, 97, 121))) goto lab0; + break; + lab0: + if (z->c <= z->lb) return 0; + z->c--; /* gopast, line 38 */ + } + z->c = z->l - m_test; + } + { int ret; + ret = slice_del(z); /* delete, line 38 */ + if (ret < 0) return ret; + } + { int m_test = z->l - z->c; /* test, line 39 */ + among_var = find_among_b(z, a_1, 13); /* substring, line 39 */ + if (!(among_var)) return 0; + z->c = z->l - m_test; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + { int c = z->c; + ret = insert_s(z, z->c, z->c, 1, s_3); /* <+, line 41 */ + z->c = c; + } + if (ret < 0) return ret; + } + break; + case 2: + z->ket = z->c; /* [, line 44 */ + if (z->c <= z->lb) return 0; + z->c--; /* next, line 44 */ + z->bra = z->c; /* ], line 44 */ + { int ret; + ret = slice_del(z); /* delete, line 44 */ + if (ret < 0) return ret; + } + break; + case 3: + if (z->c != z->I[0]) return 0; /* atmark, line 45 */ + { int m_test = z->l - z->c; /* test, line 45 */ + { int ret = r_shortv(z); + if (ret == 0) return 0; /* call shortv, line 45 */ + if (ret < 0) return ret; + } + z->c = z->l - m_test; + } + { int ret; + { int c = z->c; + ret = insert_s(z, z->c, z->c, 1, s_4); /* <+, line 45 */ + z->c = c; + } + if (ret < 0) return ret; + } + break; + } + break; + } + return 1; +} + +static int r_Step_1c(struct SN_env * z) { + z->ket = z->c; /* [, line 52 */ + { int m = z->l - z->c; (void) m; /* or, line 52 */ + if (!(eq_s_b(z, 1, s_5))) goto lab1; + goto lab0; + lab1: + z->c = z->l - m; + if (!(eq_s_b(z, 1, s_6))) return 0; + } +lab0: + z->bra = z->c; /* ], line 52 */ + while(1) { /* gopast, line 53 */ + if (!(in_grouping_b(z, g_v, 97, 121))) goto lab2; + break; + lab2: + if (z->c <= z->lb) return 0; + z->c--; /* gopast, line 53 */ + } + { int ret; + ret = slice_from_s(z, 1, s_7); /* <-, line 54 */ + if (ret < 0) return ret; + } + return 1; +} + +static int r_Step_2(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 58 */ + among_var = find_among_b(z, a_3, 20); /* substring, line 58 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 58 */ + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 58 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_from_s(z, 4, s_8); /* <-, line 59 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 4, s_9); /* <-, line 60 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_from_s(z, 4, s_10); /* <-, line 61 */ + if (ret < 0) return ret; + } + break; + case 4: + { int ret; + ret = slice_from_s(z, 4, s_11); /* <-, line 62 */ + if (ret < 0) return ret; + } + break; + case 5: + { int ret; + ret = slice_from_s(z, 3, s_12); /* <-, line 63 */ + if (ret < 0) return ret; + } + break; + case 6: + { int ret; + ret = slice_from_s(z, 1, s_13); /* <-, line 64 */ + if (ret < 0) return ret; + } + break; + case 7: + { int ret; + ret = slice_from_s(z, 3, s_14); /* <-, line 66 */ + if (ret < 0) return ret; + } + break; + case 8: + { int ret; + ret = slice_from_s(z, 3, s_15); /* <-, line 68 */ + if (ret < 0) return ret; + } + break; + case 9: + { int ret; + ret = slice_from_s(z, 2, s_16); /* <-, line 69 */ + if (ret < 0) return ret; + } + break; + case 10: + { int ret; + ret = slice_from_s(z, 2, s_17); /* <-, line 71 */ + if (ret < 0) return ret; + } + break; + case 11: + { int ret; + ret = slice_from_s(z, 3, s_18); /* <-, line 72 */ + if (ret < 0) return ret; + } + break; + case 12: + { int ret; + ret = slice_from_s(z, 3, s_19); /* <-, line 74 */ + if (ret < 0) return ret; + } + break; + case 13: + { int ret; + ret = slice_from_s(z, 3, s_20); /* <-, line 76 */ + if (ret < 0) return ret; + } + break; + case 14: + { int ret; + ret = slice_from_s(z, 3, s_21); /* <-, line 77 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_Step_3(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 82 */ + among_var = find_among_b(z, a_4, 7); /* substring, line 82 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 82 */ + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 82 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_from_s(z, 2, s_22); /* <-, line 83 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 2, s_23); /* <-, line 85 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_del(z); /* delete, line 87 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_Step_4(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 92 */ + among_var = find_among_b(z, a_5, 19); /* substring, line 92 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 92 */ + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 92 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 95 */ + if (ret < 0) return ret; + } + break; + case 2: + { int m = z->l - z->c; (void) m; /* or, line 96 */ + if (!(eq_s_b(z, 1, s_24))) goto lab1; + goto lab0; + lab1: + z->c = z->l - m; + if (!(eq_s_b(z, 1, s_25))) return 0; + } + lab0: + { int ret; + ret = slice_del(z); /* delete, line 96 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_Step_5a(struct SN_env * z) { + z->ket = z->c; /* [, line 101 */ + if (!(eq_s_b(z, 1, s_26))) return 0; + z->bra = z->c; /* ], line 101 */ + { int m = z->l - z->c; (void) m; /* or, line 102 */ + { int ret = r_R2(z); + if (ret == 0) goto lab1; /* call R2, line 102 */ + if (ret < 0) return ret; + } + goto lab0; + lab1: + z->c = z->l - m; + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 102 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* not, line 102 */ + { int ret = r_shortv(z); + if (ret == 0) goto lab2; /* call shortv, line 102 */ + if (ret < 0) return ret; + } + return 0; + lab2: + z->c = z->l - m; + } + } +lab0: + { int ret; + ret = slice_del(z); /* delete, line 103 */ + if (ret < 0) return ret; + } + return 1; +} + +static int r_Step_5b(struct SN_env * z) { + z->ket = z->c; /* [, line 107 */ + if (!(eq_s_b(z, 1, s_27))) return 0; + z->bra = z->c; /* ], line 107 */ + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 108 */ + if (ret < 0) return ret; + } + if (!(eq_s_b(z, 1, s_28))) return 0; + { int ret; + ret = slice_del(z); /* delete, line 109 */ + if (ret < 0) return ret; + } + return 1; +} + +extern int porter_ISO_8859_1_stem(struct SN_env * z) { + z->B[0] = 0; /* unset Y_found, line 115 */ + { int c = z->c; /* do, line 116 */ + z->bra = z->c; /* [, line 116 */ + if (!(eq_s(z, 1, s_29))) goto lab0; + z->ket = z->c; /* ], line 116 */ + { int ret; + ret = slice_from_s(z, 1, s_30); /* <-, line 116 */ + if (ret < 0) return ret; + } + z->B[0] = 1; /* set Y_found, line 116 */ + lab0: + z->c = c; + } + { int c = z->c; /* do, line 117 */ + while(1) { /* repeat, line 117 */ + int c = z->c; + while(1) { /* goto, line 117 */ + int c = z->c; + if (!(in_grouping(z, g_v, 97, 121))) goto lab3; + z->bra = z->c; /* [, line 117 */ + if (!(eq_s(z, 1, s_31))) goto lab3; + z->ket = z->c; /* ], line 117 */ + z->c = c; + break; + lab3: + z->c = c; + if (z->c >= z->l) goto lab2; + z->c++; /* goto, line 117 */ + } + { int ret; + ret = slice_from_s(z, 1, s_32); /* <-, line 117 */ + if (ret < 0) return ret; + } + z->B[0] = 1; /* set Y_found, line 117 */ + continue; + lab2: + z->c = c; + break; + } + z->c = c; + } + z->I[0] = z->l; + z->I[1] = z->l; + { int c = z->c; /* do, line 121 */ + while(1) { /* gopast, line 122 */ + if (!(in_grouping(z, g_v, 97, 121))) goto lab5; + break; + lab5: + if (z->c >= z->l) goto lab4; + z->c++; /* gopast, line 122 */ + } + while(1) { /* gopast, line 122 */ + if (!(out_grouping(z, g_v, 97, 121))) goto lab6; + break; + lab6: + if (z->c >= z->l) goto lab4; + z->c++; /* gopast, line 122 */ + } + z->I[0] = z->c; /* setmark p1, line 122 */ + while(1) { /* gopast, line 123 */ + if (!(in_grouping(z, g_v, 97, 121))) goto lab7; + break; + lab7: + if (z->c >= z->l) goto lab4; + z->c++; /* gopast, line 123 */ + } + while(1) { /* gopast, line 123 */ + if (!(out_grouping(z, g_v, 97, 121))) goto lab8; + break; + lab8: + if (z->c >= z->l) goto lab4; + z->c++; /* gopast, line 123 */ + } + z->I[1] = z->c; /* setmark p2, line 123 */ + lab4: + z->c = c; + } + z->lb = z->c; z->c = z->l; /* backwards, line 126 */ + + { int m = z->l - z->c; (void) m; /* do, line 127 */ + { int ret = r_Step_1a(z); + if (ret == 0) goto lab9; /* call Step_1a, line 127 */ + if (ret < 0) return ret; + } + lab9: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 128 */ + { int ret = r_Step_1b(z); + if (ret == 0) goto lab10; /* call Step_1b, line 128 */ + if (ret < 0) return ret; + } + lab10: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 129 */ + { int ret = r_Step_1c(z); + if (ret == 0) goto lab11; /* call Step_1c, line 129 */ + if (ret < 0) return ret; + } + lab11: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 130 */ + { int ret = r_Step_2(z); + if (ret == 0) goto lab12; /* call Step_2, line 130 */ + if (ret < 0) return ret; + } + lab12: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 131 */ + { int ret = r_Step_3(z); + if (ret == 0) goto lab13; /* call Step_3, line 131 */ + if (ret < 0) return ret; + } + lab13: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 132 */ + { int ret = r_Step_4(z); + if (ret == 0) goto lab14; /* call Step_4, line 132 */ + if (ret < 0) return ret; + } + lab14: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 133 */ + { int ret = r_Step_5a(z); + if (ret == 0) goto lab15; /* call Step_5a, line 133 */ + if (ret < 0) return ret; + } + lab15: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 134 */ + { int ret = r_Step_5b(z); + if (ret == 0) goto lab16; /* call Step_5b, line 134 */ + if (ret < 0) return ret; + } + lab16: + z->c = z->l - m; + } + z->c = z->lb; + { int c = z->c; /* do, line 137 */ + if (!(z->B[0])) goto lab17; /* Boolean test Y_found, line 137 */ + while(1) { /* repeat, line 137 */ + int c = z->c; + while(1) { /* goto, line 137 */ + int c = z->c; + z->bra = z->c; /* [, line 137 */ + if (!(eq_s(z, 1, s_33))) goto lab19; + z->ket = z->c; /* ], line 137 */ + z->c = c; + break; + lab19: + z->c = c; + if (z->c >= z->l) goto lab18; + z->c++; /* goto, line 137 */ + } + { int ret; + ret = slice_from_s(z, 1, s_34); /* <-, line 137 */ + if (ret < 0) return ret; + } + continue; + lab18: + z->c = c; + break; + } + lab17: + z->c = c; + } + return 1; +} + +extern struct SN_env * porter_ISO_8859_1_create_env(void) { return SN_create_env(0, 2, 1); } + +extern void porter_ISO_8859_1_close_env(struct SN_env * z) { SN_close_env(z); } + diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_porter.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_porter.h new file mode 100644 index 0000000..5c8fd01 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_porter.h @@ -0,0 +1,16 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern struct SN_env * porter_ISO_8859_1_create_env(void); +extern void porter_ISO_8859_1_close_env(struct SN_env * z); + +extern int porter_ISO_8859_1_stem(struct SN_env * z); + +#ifdef __cplusplus +} +#endif + diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_portuguese.c b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_portuguese.c new file mode 100644 index 0000000..d586909 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_portuguese.c @@ -0,0 +1,1035 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#include "../runtime/header.h" + +extern int portuguese_ISO_8859_1_stem(struct SN_env * z); +static int r_residual_form(struct SN_env * z); +static int r_residual_suffix(struct SN_env * z); +static int r_verb_suffix(struct SN_env * z); +static int r_standard_suffix(struct SN_env * z); +static int r_R2(struct SN_env * z); +static int r_R1(struct SN_env * z); +static int r_RV(struct SN_env * z); +static int r_mark_regions(struct SN_env * z); +static int r_postlude(struct SN_env * z); +static int r_prelude(struct SN_env * z); + +extern struct SN_env * portuguese_ISO_8859_1_create_env(void); +extern void portuguese_ISO_8859_1_close_env(struct SN_env * z); + +static symbol s_0_1[1] = { 0xE3 }; +static symbol s_0_2[1] = { 0xF5 }; + +static struct among a_0[3] = +{ +/* 0 */ { 0, 0, -1, 3, 0}, +/* 1 */ { 1, s_0_1, 0, 1, 0}, +/* 2 */ { 1, s_0_2, 0, 2, 0} +}; + +static symbol s_1_1[2] = { 'a', '~' }; +static symbol s_1_2[2] = { 'o', '~' }; + +static struct among a_1[3] = +{ +/* 0 */ { 0, 0, -1, 3, 0}, +/* 1 */ { 2, s_1_1, 0, 1, 0}, +/* 2 */ { 2, s_1_2, 0, 2, 0} +}; + +static symbol s_2_0[2] = { 'i', 'c' }; +static symbol s_2_1[2] = { 'a', 'd' }; +static symbol s_2_2[2] = { 'o', 's' }; +static symbol s_2_3[2] = { 'i', 'v' }; + +static struct among a_2[4] = +{ +/* 0 */ { 2, s_2_0, -1, -1, 0}, +/* 1 */ { 2, s_2_1, -1, -1, 0}, +/* 2 */ { 2, s_2_2, -1, -1, 0}, +/* 3 */ { 2, s_2_3, -1, 1, 0} +}; + +static symbol s_3_0[4] = { 'a', 'n', 't', 'e' }; +static symbol s_3_1[4] = { 'a', 'v', 'e', 'l' }; +static symbol s_3_2[4] = { 0xED, 'v', 'e', 'l' }; + +static struct among a_3[3] = +{ +/* 0 */ { 4, s_3_0, -1, 1, 0}, +/* 1 */ { 4, s_3_1, -1, 1, 0}, +/* 2 */ { 4, s_3_2, -1, 1, 0} +}; + +static symbol s_4_0[2] = { 'i', 'c' }; +static symbol s_4_1[4] = { 'a', 'b', 'i', 'l' }; +static symbol s_4_2[2] = { 'i', 'v' }; + +static struct among a_4[3] = +{ +/* 0 */ { 2, s_4_0, -1, 1, 0}, +/* 1 */ { 4, s_4_1, -1, 1, 0}, +/* 2 */ { 2, s_4_2, -1, 1, 0} +}; + +static symbol s_5_0[3] = { 'i', 'c', 'a' }; +static symbol s_5_1[5] = { 0xE2, 'n', 'c', 'i', 'a' }; +static symbol s_5_2[5] = { 0xEA, 'n', 'c', 'i', 'a' }; +static symbol s_5_3[3] = { 'i', 'r', 'a' }; +static symbol s_5_4[5] = { 'a', 'd', 'o', 'r', 'a' }; +static symbol s_5_5[3] = { 'o', 's', 'a' }; +static symbol s_5_6[4] = { 'i', 's', 't', 'a' }; +static symbol s_5_7[3] = { 'i', 'v', 'a' }; +static symbol s_5_8[3] = { 'e', 'z', 'a' }; +static symbol s_5_9[5] = { 'l', 'o', 'g', 0xED, 'a' }; +static symbol s_5_10[5] = { 'i', 'd', 'a', 'd', 'e' }; +static symbol s_5_11[4] = { 'a', 'n', 't', 'e' }; +static symbol s_5_12[5] = { 'm', 'e', 'n', 't', 'e' }; +static symbol s_5_13[6] = { 'a', 'm', 'e', 'n', 't', 'e' }; +static symbol s_5_14[4] = { 0xE1, 'v', 'e', 'l' }; +static symbol s_5_15[4] = { 0xED, 'v', 'e', 'l' }; +static symbol s_5_16[5] = { 'u', 'c', 'i', 0xF3, 'n' }; +static symbol s_5_17[3] = { 'i', 'c', 'o' }; +static symbol s_5_18[4] = { 'i', 's', 'm', 'o' }; +static symbol s_5_19[3] = { 'o', 's', 'o' }; +static symbol s_5_20[6] = { 'a', 'm', 'e', 'n', 't', 'o' }; +static symbol s_5_21[6] = { 'i', 'm', 'e', 'n', 't', 'o' }; +static symbol s_5_22[3] = { 'i', 'v', 'o' }; +static symbol s_5_23[5] = { 'a', 0xE7, 'a', '~', 'o' }; +static symbol s_5_24[4] = { 'a', 'd', 'o', 'r' }; +static symbol s_5_25[4] = { 'i', 'c', 'a', 's' }; +static symbol s_5_26[6] = { 0xEA, 'n', 'c', 'i', 'a', 's' }; +static symbol s_5_27[4] = { 'i', 'r', 'a', 's' }; +static symbol s_5_28[6] = { 'a', 'd', 'o', 'r', 'a', 's' }; +static symbol s_5_29[4] = { 'o', 's', 'a', 's' }; +static symbol s_5_30[5] = { 'i', 's', 't', 'a', 's' }; +static symbol s_5_31[4] = { 'i', 'v', 'a', 's' }; +static symbol s_5_32[4] = { 'e', 'z', 'a', 's' }; +static symbol s_5_33[6] = { 'l', 'o', 'g', 0xED, 'a', 's' }; +static symbol s_5_34[6] = { 'i', 'd', 'a', 'd', 'e', 's' }; +static symbol s_5_35[7] = { 'u', 'c', 'i', 'o', 'n', 'e', 's' }; +static symbol s_5_36[6] = { 'a', 'd', 'o', 'r', 'e', 's' }; +static symbol s_5_37[5] = { 'a', 'n', 't', 'e', 's' }; +static symbol s_5_38[6] = { 'a', 0xE7, 'o', '~', 'e', 's' }; +static symbol s_5_39[4] = { 'i', 'c', 'o', 's' }; +static symbol s_5_40[5] = { 'i', 's', 'm', 'o', 's' }; +static symbol s_5_41[4] = { 'o', 's', 'o', 's' }; +static symbol s_5_42[7] = { 'a', 'm', 'e', 'n', 't', 'o', 's' }; +static symbol s_5_43[7] = { 'i', 'm', 'e', 'n', 't', 'o', 's' }; +static symbol s_5_44[4] = { 'i', 'v', 'o', 's' }; + +static struct among a_5[45] = +{ +/* 0 */ { 3, s_5_0, -1, 1, 0}, +/* 1 */ { 5, s_5_1, -1, 1, 0}, +/* 2 */ { 5, s_5_2, -1, 4, 0}, +/* 3 */ { 3, s_5_3, -1, 9, 0}, +/* 4 */ { 5, s_5_4, -1, 1, 0}, +/* 5 */ { 3, s_5_5, -1, 1, 0}, +/* 6 */ { 4, s_5_6, -1, 1, 0}, +/* 7 */ { 3, s_5_7, -1, 8, 0}, +/* 8 */ { 3, s_5_8, -1, 1, 0}, +/* 9 */ { 5, s_5_9, -1, 2, 0}, +/* 10 */ { 5, s_5_10, -1, 7, 0}, +/* 11 */ { 4, s_5_11, -1, 1, 0}, +/* 12 */ { 5, s_5_12, -1, 6, 0}, +/* 13 */ { 6, s_5_13, 12, 5, 0}, +/* 14 */ { 4, s_5_14, -1, 1, 0}, +/* 15 */ { 4, s_5_15, -1, 1, 0}, +/* 16 */ { 5, s_5_16, -1, 3, 0}, +/* 17 */ { 3, s_5_17, -1, 1, 0}, +/* 18 */ { 4, s_5_18, -1, 1, 0}, +/* 19 */ { 3, s_5_19, -1, 1, 0}, +/* 20 */ { 6, s_5_20, -1, 1, 0}, +/* 21 */ { 6, s_5_21, -1, 1, 0}, +/* 22 */ { 3, s_5_22, -1, 8, 0}, +/* 23 */ { 5, s_5_23, -1, 1, 0}, +/* 24 */ { 4, s_5_24, -1, 1, 0}, +/* 25 */ { 4, s_5_25, -1, 1, 0}, +/* 26 */ { 6, s_5_26, -1, 4, 0}, +/* 27 */ { 4, s_5_27, -1, 9, 0}, +/* 28 */ { 6, s_5_28, -1, 1, 0}, +/* 29 */ { 4, s_5_29, -1, 1, 0}, +/* 30 */ { 5, s_5_30, -1, 1, 0}, +/* 31 */ { 4, s_5_31, -1, 8, 0}, +/* 32 */ { 4, s_5_32, -1, 1, 0}, +/* 33 */ { 6, s_5_33, -1, 2, 0}, +/* 34 */ { 6, s_5_34, -1, 7, 0}, +/* 35 */ { 7, s_5_35, -1, 3, 0}, +/* 36 */ { 6, s_5_36, -1, 1, 0}, +/* 37 */ { 5, s_5_37, -1, 1, 0}, +/* 38 */ { 6, s_5_38, -1, 1, 0}, +/* 39 */ { 4, s_5_39, -1, 1, 0}, +/* 40 */ { 5, s_5_40, -1, 1, 0}, +/* 41 */ { 4, s_5_41, -1, 1, 0}, +/* 42 */ { 7, s_5_42, -1, 1, 0}, +/* 43 */ { 7, s_5_43, -1, 1, 0}, +/* 44 */ { 4, s_5_44, -1, 8, 0} +}; + +static symbol s_6_0[3] = { 'a', 'd', 'a' }; +static symbol s_6_1[3] = { 'i', 'd', 'a' }; +static symbol s_6_2[2] = { 'i', 'a' }; +static symbol s_6_3[4] = { 'a', 'r', 'i', 'a' }; +static symbol s_6_4[4] = { 'e', 'r', 'i', 'a' }; +static symbol s_6_5[4] = { 'i', 'r', 'i', 'a' }; +static symbol s_6_6[3] = { 'a', 'r', 'a' }; +static symbol s_6_7[3] = { 'e', 'r', 'a' }; +static symbol s_6_8[3] = { 'i', 'r', 'a' }; +static symbol s_6_9[3] = { 'a', 'v', 'a' }; +static symbol s_6_10[4] = { 'a', 's', 's', 'e' }; +static symbol s_6_11[4] = { 'e', 's', 's', 'e' }; +static symbol s_6_12[4] = { 'i', 's', 's', 'e' }; +static symbol s_6_13[4] = { 'a', 's', 't', 'e' }; +static symbol s_6_14[4] = { 'e', 's', 't', 'e' }; +static symbol s_6_15[4] = { 'i', 's', 't', 'e' }; +static symbol s_6_16[2] = { 'e', 'i' }; +static symbol s_6_17[4] = { 'a', 'r', 'e', 'i' }; +static symbol s_6_18[4] = { 'e', 'r', 'e', 'i' }; +static symbol s_6_19[4] = { 'i', 'r', 'e', 'i' }; +static symbol s_6_20[2] = { 'a', 'm' }; +static symbol s_6_21[3] = { 'i', 'a', 'm' }; +static symbol s_6_22[5] = { 'a', 'r', 'i', 'a', 'm' }; +static symbol s_6_23[5] = { 'e', 'r', 'i', 'a', 'm' }; +static symbol s_6_24[5] = { 'i', 'r', 'i', 'a', 'm' }; +static symbol s_6_25[4] = { 'a', 'r', 'a', 'm' }; +static symbol s_6_26[4] = { 'e', 'r', 'a', 'm' }; +static symbol s_6_27[4] = { 'i', 'r', 'a', 'm' }; +static symbol s_6_28[4] = { 'a', 'v', 'a', 'm' }; +static symbol s_6_29[2] = { 'e', 'm' }; +static symbol s_6_30[4] = { 'a', 'r', 'e', 'm' }; +static symbol s_6_31[4] = { 'e', 'r', 'e', 'm' }; +static symbol s_6_32[4] = { 'i', 'r', 'e', 'm' }; +static symbol s_6_33[5] = { 'a', 's', 's', 'e', 'm' }; +static symbol s_6_34[5] = { 'e', 's', 's', 'e', 'm' }; +static symbol s_6_35[5] = { 'i', 's', 's', 'e', 'm' }; +static symbol s_6_36[3] = { 'a', 'd', 'o' }; +static symbol s_6_37[3] = { 'i', 'd', 'o' }; +static symbol s_6_38[4] = { 'a', 'n', 'd', 'o' }; +static symbol s_6_39[4] = { 'e', 'n', 'd', 'o' }; +static symbol s_6_40[4] = { 'i', 'n', 'd', 'o' }; +static symbol s_6_41[5] = { 'a', 'r', 'a', '~', 'o' }; +static symbol s_6_42[5] = { 'e', 'r', 'a', '~', 'o' }; +static symbol s_6_43[5] = { 'i', 'r', 'a', '~', 'o' }; +static symbol s_6_44[2] = { 'a', 'r' }; +static symbol s_6_45[2] = { 'e', 'r' }; +static symbol s_6_46[2] = { 'i', 'r' }; +static symbol s_6_47[2] = { 'a', 's' }; +static symbol s_6_48[4] = { 'a', 'd', 'a', 's' }; +static symbol s_6_49[4] = { 'i', 'd', 'a', 's' }; +static symbol s_6_50[3] = { 'i', 'a', 's' }; +static symbol s_6_51[5] = { 'a', 'r', 'i', 'a', 's' }; +static symbol s_6_52[5] = { 'e', 'r', 'i', 'a', 's' }; +static symbol s_6_53[5] = { 'i', 'r', 'i', 'a', 's' }; +static symbol s_6_54[4] = { 'a', 'r', 'a', 's' }; +static symbol s_6_55[4] = { 'e', 'r', 'a', 's' }; +static symbol s_6_56[4] = { 'i', 'r', 'a', 's' }; +static symbol s_6_57[4] = { 'a', 'v', 'a', 's' }; +static symbol s_6_58[2] = { 'e', 's' }; +static symbol s_6_59[5] = { 'a', 'r', 'd', 'e', 's' }; +static symbol s_6_60[5] = { 'e', 'r', 'd', 'e', 's' }; +static symbol s_6_61[5] = { 'i', 'r', 'd', 'e', 's' }; +static symbol s_6_62[4] = { 'a', 'r', 'e', 's' }; +static symbol s_6_63[4] = { 'e', 'r', 'e', 's' }; +static symbol s_6_64[4] = { 'i', 'r', 'e', 's' }; +static symbol s_6_65[5] = { 'a', 's', 's', 'e', 's' }; +static symbol s_6_66[5] = { 'e', 's', 's', 'e', 's' }; +static symbol s_6_67[5] = { 'i', 's', 's', 'e', 's' }; +static symbol s_6_68[5] = { 'a', 's', 't', 'e', 's' }; +static symbol s_6_69[5] = { 'e', 's', 't', 'e', 's' }; +static symbol s_6_70[5] = { 'i', 's', 't', 'e', 's' }; +static symbol s_6_71[2] = { 'i', 's' }; +static symbol s_6_72[3] = { 'a', 'i', 's' }; +static symbol s_6_73[3] = { 'e', 'i', 's' }; +static symbol s_6_74[5] = { 'a', 'r', 'e', 'i', 's' }; +static symbol s_6_75[5] = { 'e', 'r', 'e', 'i', 's' }; +static symbol s_6_76[5] = { 'i', 'r', 'e', 'i', 's' }; +static symbol s_6_77[5] = { 0xE1, 'r', 'e', 'i', 's' }; +static symbol s_6_78[5] = { 0xE9, 'r', 'e', 'i', 's' }; +static symbol s_6_79[5] = { 0xED, 'r', 'e', 'i', 's' }; +static symbol s_6_80[6] = { 0xE1, 's', 's', 'e', 'i', 's' }; +static symbol s_6_81[6] = { 0xE9, 's', 's', 'e', 'i', 's' }; +static symbol s_6_82[6] = { 0xED, 's', 's', 'e', 'i', 's' }; +static symbol s_6_83[5] = { 0xE1, 'v', 'e', 'i', 's' }; +static symbol s_6_84[4] = { 0xED, 'e', 'i', 's' }; +static symbol s_6_85[6] = { 'a', 'r', 0xED, 'e', 'i', 's' }; +static symbol s_6_86[6] = { 'e', 'r', 0xED, 'e', 'i', 's' }; +static symbol s_6_87[6] = { 'i', 'r', 0xED, 'e', 'i', 's' }; +static symbol s_6_88[4] = { 'a', 'd', 'o', 's' }; +static symbol s_6_89[4] = { 'i', 'd', 'o', 's' }; +static symbol s_6_90[4] = { 'a', 'm', 'o', 's' }; +static symbol s_6_91[6] = { 0xE1, 'r', 'a', 'm', 'o', 's' }; +static symbol s_6_92[6] = { 0xE9, 'r', 'a', 'm', 'o', 's' }; +static symbol s_6_93[6] = { 0xED, 'r', 'a', 'm', 'o', 's' }; +static symbol s_6_94[6] = { 0xE1, 'v', 'a', 'm', 'o', 's' }; +static symbol s_6_95[5] = { 0xED, 'a', 'm', 'o', 's' }; +static symbol s_6_96[7] = { 'a', 'r', 0xED, 'a', 'm', 'o', 's' }; +static symbol s_6_97[7] = { 'e', 'r', 0xED, 'a', 'm', 'o', 's' }; +static symbol s_6_98[7] = { 'i', 'r', 0xED, 'a', 'm', 'o', 's' }; +static symbol s_6_99[4] = { 'e', 'm', 'o', 's' }; +static symbol s_6_100[6] = { 'a', 'r', 'e', 'm', 'o', 's' }; +static symbol s_6_101[6] = { 'e', 'r', 'e', 'm', 'o', 's' }; +static symbol s_6_102[6] = { 'i', 'r', 'e', 'm', 'o', 's' }; +static symbol s_6_103[7] = { 0xE1, 's', 's', 'e', 'm', 'o', 's' }; +static symbol s_6_104[7] = { 0xEA, 's', 's', 'e', 'm', 'o', 's' }; +static symbol s_6_105[7] = { 0xED, 's', 's', 'e', 'm', 'o', 's' }; +static symbol s_6_106[4] = { 'i', 'm', 'o', 's' }; +static symbol s_6_107[5] = { 'a', 'r', 'm', 'o', 's' }; +static symbol s_6_108[5] = { 'e', 'r', 'm', 'o', 's' }; +static symbol s_6_109[5] = { 'i', 'r', 'm', 'o', 's' }; +static symbol s_6_110[4] = { 0xE1, 'm', 'o', 's' }; +static symbol s_6_111[4] = { 'a', 'r', 0xE1, 's' }; +static symbol s_6_112[4] = { 'e', 'r', 0xE1, 's' }; +static symbol s_6_113[4] = { 'i', 'r', 0xE1, 's' }; +static symbol s_6_114[2] = { 'e', 'u' }; +static symbol s_6_115[2] = { 'i', 'u' }; +static symbol s_6_116[2] = { 'o', 'u' }; +static symbol s_6_117[3] = { 'a', 'r', 0xE1 }; +static symbol s_6_118[3] = { 'e', 'r', 0xE1 }; +static symbol s_6_119[3] = { 'i', 'r', 0xE1 }; + +static struct among a_6[120] = +{ +/* 0 */ { 3, s_6_0, -1, 1, 0}, +/* 1 */ { 3, s_6_1, -1, 1, 0}, +/* 2 */ { 2, s_6_2, -1, 1, 0}, +/* 3 */ { 4, s_6_3, 2, 1, 0}, +/* 4 */ { 4, s_6_4, 2, 1, 0}, +/* 5 */ { 4, s_6_5, 2, 1, 0}, +/* 6 */ { 3, s_6_6, -1, 1, 0}, +/* 7 */ { 3, s_6_7, -1, 1, 0}, +/* 8 */ { 3, s_6_8, -1, 1, 0}, +/* 9 */ { 3, s_6_9, -1, 1, 0}, +/* 10 */ { 4, s_6_10, -1, 1, 0}, +/* 11 */ { 4, s_6_11, -1, 1, 0}, +/* 12 */ { 4, s_6_12, -1, 1, 0}, +/* 13 */ { 4, s_6_13, -1, 1, 0}, +/* 14 */ { 4, s_6_14, -1, 1, 0}, +/* 15 */ { 4, s_6_15, -1, 1, 0}, +/* 16 */ { 2, s_6_16, -1, 1, 0}, +/* 17 */ { 4, s_6_17, 16, 1, 0}, +/* 18 */ { 4, s_6_18, 16, 1, 0}, +/* 19 */ { 4, s_6_19, 16, 1, 0}, +/* 20 */ { 2, s_6_20, -1, 1, 0}, +/* 21 */ { 3, s_6_21, 20, 1, 0}, +/* 22 */ { 5, s_6_22, 21, 1, 0}, +/* 23 */ { 5, s_6_23, 21, 1, 0}, +/* 24 */ { 5, s_6_24, 21, 1, 0}, +/* 25 */ { 4, s_6_25, 20, 1, 0}, +/* 26 */ { 4, s_6_26, 20, 1, 0}, +/* 27 */ { 4, s_6_27, 20, 1, 0}, +/* 28 */ { 4, s_6_28, 20, 1, 0}, +/* 29 */ { 2, s_6_29, -1, 1, 0}, +/* 30 */ { 4, s_6_30, 29, 1, 0}, +/* 31 */ { 4, s_6_31, 29, 1, 0}, +/* 32 */ { 4, s_6_32, 29, 1, 0}, +/* 33 */ { 5, s_6_33, 29, 1, 0}, +/* 34 */ { 5, s_6_34, 29, 1, 0}, +/* 35 */ { 5, s_6_35, 29, 1, 0}, +/* 36 */ { 3, s_6_36, -1, 1, 0}, +/* 37 */ { 3, s_6_37, -1, 1, 0}, +/* 38 */ { 4, s_6_38, -1, 1, 0}, +/* 39 */ { 4, s_6_39, -1, 1, 0}, +/* 40 */ { 4, s_6_40, -1, 1, 0}, +/* 41 */ { 5, s_6_41, -1, 1, 0}, +/* 42 */ { 5, s_6_42, -1, 1, 0}, +/* 43 */ { 5, s_6_43, -1, 1, 0}, +/* 44 */ { 2, s_6_44, -1, 1, 0}, +/* 45 */ { 2, s_6_45, -1, 1, 0}, +/* 46 */ { 2, s_6_46, -1, 1, 0}, +/* 47 */ { 2, s_6_47, -1, 1, 0}, +/* 48 */ { 4, s_6_48, 47, 1, 0}, +/* 49 */ { 4, s_6_49, 47, 1, 0}, +/* 50 */ { 3, s_6_50, 47, 1, 0}, +/* 51 */ { 5, s_6_51, 50, 1, 0}, +/* 52 */ { 5, s_6_52, 50, 1, 0}, +/* 53 */ { 5, s_6_53, 50, 1, 0}, +/* 54 */ { 4, s_6_54, 47, 1, 0}, +/* 55 */ { 4, s_6_55, 47, 1, 0}, +/* 56 */ { 4, s_6_56, 47, 1, 0}, +/* 57 */ { 4, s_6_57, 47, 1, 0}, +/* 58 */ { 2, s_6_58, -1, 1, 0}, +/* 59 */ { 5, s_6_59, 58, 1, 0}, +/* 60 */ { 5, s_6_60, 58, 1, 0}, +/* 61 */ { 5, s_6_61, 58, 1, 0}, +/* 62 */ { 4, s_6_62, 58, 1, 0}, +/* 63 */ { 4, s_6_63, 58, 1, 0}, +/* 64 */ { 4, s_6_64, 58, 1, 0}, +/* 65 */ { 5, s_6_65, 58, 1, 0}, +/* 66 */ { 5, s_6_66, 58, 1, 0}, +/* 67 */ { 5, s_6_67, 58, 1, 0}, +/* 68 */ { 5, s_6_68, 58, 1, 0}, +/* 69 */ { 5, s_6_69, 58, 1, 0}, +/* 70 */ { 5, s_6_70, 58, 1, 0}, +/* 71 */ { 2, s_6_71, -1, 1, 0}, +/* 72 */ { 3, s_6_72, 71, 1, 0}, +/* 73 */ { 3, s_6_73, 71, 1, 0}, +/* 74 */ { 5, s_6_74, 73, 1, 0}, +/* 75 */ { 5, s_6_75, 73, 1, 0}, +/* 76 */ { 5, s_6_76, 73, 1, 0}, +/* 77 */ { 5, s_6_77, 73, 1, 0}, +/* 78 */ { 5, s_6_78, 73, 1, 0}, +/* 79 */ { 5, s_6_79, 73, 1, 0}, +/* 80 */ { 6, s_6_80, 73, 1, 0}, +/* 81 */ { 6, s_6_81, 73, 1, 0}, +/* 82 */ { 6, s_6_82, 73, 1, 0}, +/* 83 */ { 5, s_6_83, 73, 1, 0}, +/* 84 */ { 4, s_6_84, 73, 1, 0}, +/* 85 */ { 6, s_6_85, 84, 1, 0}, +/* 86 */ { 6, s_6_86, 84, 1, 0}, +/* 87 */ { 6, s_6_87, 84, 1, 0}, +/* 88 */ { 4, s_6_88, -1, 1, 0}, +/* 89 */ { 4, s_6_89, -1, 1, 0}, +/* 90 */ { 4, s_6_90, -1, 1, 0}, +/* 91 */ { 6, s_6_91, 90, 1, 0}, +/* 92 */ { 6, s_6_92, 90, 1, 0}, +/* 93 */ { 6, s_6_93, 90, 1, 0}, +/* 94 */ { 6, s_6_94, 90, 1, 0}, +/* 95 */ { 5, s_6_95, 90, 1, 0}, +/* 96 */ { 7, s_6_96, 95, 1, 0}, +/* 97 */ { 7, s_6_97, 95, 1, 0}, +/* 98 */ { 7, s_6_98, 95, 1, 0}, +/* 99 */ { 4, s_6_99, -1, 1, 0}, +/*100 */ { 6, s_6_100, 99, 1, 0}, +/*101 */ { 6, s_6_101, 99, 1, 0}, +/*102 */ { 6, s_6_102, 99, 1, 0}, +/*103 */ { 7, s_6_103, 99, 1, 0}, +/*104 */ { 7, s_6_104, 99, 1, 0}, +/*105 */ { 7, s_6_105, 99, 1, 0}, +/*106 */ { 4, s_6_106, -1, 1, 0}, +/*107 */ { 5, s_6_107, -1, 1, 0}, +/*108 */ { 5, s_6_108, -1, 1, 0}, +/*109 */ { 5, s_6_109, -1, 1, 0}, +/*110 */ { 4, s_6_110, -1, 1, 0}, +/*111 */ { 4, s_6_111, -1, 1, 0}, +/*112 */ { 4, s_6_112, -1, 1, 0}, +/*113 */ { 4, s_6_113, -1, 1, 0}, +/*114 */ { 2, s_6_114, -1, 1, 0}, +/*115 */ { 2, s_6_115, -1, 1, 0}, +/*116 */ { 2, s_6_116, -1, 1, 0}, +/*117 */ { 3, s_6_117, -1, 1, 0}, +/*118 */ { 3, s_6_118, -1, 1, 0}, +/*119 */ { 3, s_6_119, -1, 1, 0} +}; + +static symbol s_7_0[1] = { 'a' }; +static symbol s_7_1[1] = { 'i' }; +static symbol s_7_2[1] = { 'o' }; +static symbol s_7_3[2] = { 'o', 's' }; +static symbol s_7_4[1] = { 0xE1 }; +static symbol s_7_5[1] = { 0xED }; +static symbol s_7_6[1] = { 0xF3 }; + +static struct among a_7[7] = +{ +/* 0 */ { 1, s_7_0, -1, 1, 0}, +/* 1 */ { 1, s_7_1, -1, 1, 0}, +/* 2 */ { 1, s_7_2, -1, 1, 0}, +/* 3 */ { 2, s_7_3, -1, 1, 0}, +/* 4 */ { 1, s_7_4, -1, 1, 0}, +/* 5 */ { 1, s_7_5, -1, 1, 0}, +/* 6 */ { 1, s_7_6, -1, 1, 0} +}; + +static symbol s_8_0[1] = { 'e' }; +static symbol s_8_1[1] = { 0xE7 }; +static symbol s_8_2[1] = { 0xE9 }; +static symbol s_8_3[1] = { 0xEA }; + +static struct among a_8[4] = +{ +/* 0 */ { 1, s_8_0, -1, 1, 0}, +/* 1 */ { 1, s_8_1, -1, 2, 0}, +/* 2 */ { 1, s_8_2, -1, 1, 0}, +/* 3 */ { 1, s_8_3, -1, 1, 0} +}; + +static unsigned char g_v[] = { 17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 19, 12, 2 }; + +static symbol s_0[] = { 'a', '~' }; +static symbol s_1[] = { 'o', '~' }; +static symbol s_2[] = { 0xE3 }; +static symbol s_3[] = { 0xF5 }; +static symbol s_4[] = { 'l', 'o', 'g' }; +static symbol s_5[] = { 'u' }; +static symbol s_6[] = { 'e', 'n', 't', 'e' }; +static symbol s_7[] = { 'a', 't' }; +static symbol s_8[] = { 'a', 't' }; +static symbol s_9[] = { 'e' }; +static symbol s_10[] = { 'i', 'r' }; +static symbol s_11[] = { 'u' }; +static symbol s_12[] = { 'g' }; +static symbol s_13[] = { 'i' }; +static symbol s_14[] = { 'c' }; +static symbol s_15[] = { 'c' }; +static symbol s_16[] = { 'i' }; +static symbol s_17[] = { 'c' }; + +static int r_prelude(struct SN_env * z) { + int among_var; + while(1) { /* repeat, line 36 */ + int c = z->c; + z->bra = z->c; /* [, line 37 */ + among_var = find_among(z, a_0, 3); /* substring, line 37 */ + if (!(among_var)) goto lab0; + z->ket = z->c; /* ], line 37 */ + switch(among_var) { + case 0: goto lab0; + case 1: + { int ret; + ret = slice_from_s(z, 2, s_0); /* <-, line 38 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 2, s_1); /* <-, line 39 */ + if (ret < 0) return ret; + } + break; + case 3: + if (z->c >= z->l) goto lab0; + z->c++; /* next, line 40 */ + break; + } + continue; + lab0: + z->c = c; + break; + } + return 1; +} + +static int r_mark_regions(struct SN_env * z) { + z->I[0] = z->l; + z->I[1] = z->l; + z->I[2] = z->l; + { int c = z->c; /* do, line 50 */ + { int c = z->c; /* or, line 52 */ + if (!(in_grouping(z, g_v, 97, 250))) goto lab2; + { int c = z->c; /* or, line 51 */ + if (!(out_grouping(z, g_v, 97, 250))) goto lab4; + while(1) { /* gopast, line 51 */ + if (!(in_grouping(z, g_v, 97, 250))) goto lab5; + break; + lab5: + if (z->c >= z->l) goto lab4; + z->c++; /* gopast, line 51 */ + } + goto lab3; + lab4: + z->c = c; + if (!(in_grouping(z, g_v, 97, 250))) goto lab2; + while(1) { /* gopast, line 51 */ + if (!(out_grouping(z, g_v, 97, 250))) goto lab6; + break; + lab6: + if (z->c >= z->l) goto lab2; + z->c++; /* gopast, line 51 */ + } + } + lab3: + goto lab1; + lab2: + z->c = c; + if (!(out_grouping(z, g_v, 97, 250))) goto lab0; + { int c = z->c; /* or, line 53 */ + if (!(out_grouping(z, g_v, 97, 250))) goto lab8; + while(1) { /* gopast, line 53 */ + if (!(in_grouping(z, g_v, 97, 250))) goto lab9; + break; + lab9: + if (z->c >= z->l) goto lab8; + z->c++; /* gopast, line 53 */ + } + goto lab7; + lab8: + z->c = c; + if (!(in_grouping(z, g_v, 97, 250))) goto lab0; + if (z->c >= z->l) goto lab0; + z->c++; /* next, line 53 */ + } + lab7: + ; + } + lab1: + z->I[0] = z->c; /* setmark pV, line 54 */ + lab0: + z->c = c; + } + { int c = z->c; /* do, line 56 */ + while(1) { /* gopast, line 57 */ + if (!(in_grouping(z, g_v, 97, 250))) goto lab11; + break; + lab11: + if (z->c >= z->l) goto lab10; + z->c++; /* gopast, line 57 */ + } + while(1) { /* gopast, line 57 */ + if (!(out_grouping(z, g_v, 97, 250))) goto lab12; + break; + lab12: + if (z->c >= z->l) goto lab10; + z->c++; /* gopast, line 57 */ + } + z->I[1] = z->c; /* setmark p1, line 57 */ + while(1) { /* gopast, line 58 */ + if (!(in_grouping(z, g_v, 97, 250))) goto lab13; + break; + lab13: + if (z->c >= z->l) goto lab10; + z->c++; /* gopast, line 58 */ + } + while(1) { /* gopast, line 58 */ + if (!(out_grouping(z, g_v, 97, 250))) goto lab14; + break; + lab14: + if (z->c >= z->l) goto lab10; + z->c++; /* gopast, line 58 */ + } + z->I[2] = z->c; /* setmark p2, line 58 */ + lab10: + z->c = c; + } + return 1; +} + +static int r_postlude(struct SN_env * z) { + int among_var; + while(1) { /* repeat, line 62 */ + int c = z->c; + z->bra = z->c; /* [, line 63 */ + among_var = find_among(z, a_1, 3); /* substring, line 63 */ + if (!(among_var)) goto lab0; + z->ket = z->c; /* ], line 63 */ + switch(among_var) { + case 0: goto lab0; + case 1: + { int ret; + ret = slice_from_s(z, 1, s_2); /* <-, line 64 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 1, s_3); /* <-, line 65 */ + if (ret < 0) return ret; + } + break; + case 3: + if (z->c >= z->l) goto lab0; + z->c++; /* next, line 66 */ + break; + } + continue; + lab0: + z->c = c; + break; + } + return 1; +} + +static int r_RV(struct SN_env * z) { + if (!(z->I[0] <= z->c)) return 0; + return 1; +} + +static int r_R1(struct SN_env * z) { + if (!(z->I[1] <= z->c)) return 0; + return 1; +} + +static int r_R2(struct SN_env * z) { + if (!(z->I[2] <= z->c)) return 0; + return 1; +} + +static int r_standard_suffix(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 77 */ + among_var = find_among_b(z, a_5, 45); /* substring, line 77 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 77 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 93 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 93 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 98 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 3, s_4); /* <-, line 98 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 102 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 1, s_5); /* <-, line 102 */ + if (ret < 0) return ret; + } + break; + case 4: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 106 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 4, s_6); /* <-, line 106 */ + if (ret < 0) return ret; + } + break; + case 5: + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 110 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 110 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 111 */ + z->ket = z->c; /* [, line 112 */ + among_var = find_among_b(z, a_2, 4); /* substring, line 112 */ + if (!(among_var)) { z->c = z->l - m; goto lab0; } + z->bra = z->c; /* ], line 112 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab0; } /* call R2, line 112 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 112 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: { z->c = z->l - m; goto lab0; } + case 1: + z->ket = z->c; /* [, line 113 */ + if (!(eq_s_b(z, 2, s_7))) { z->c = z->l - m; goto lab0; } + z->bra = z->c; /* ], line 113 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab0; } /* call R2, line 113 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 113 */ + if (ret < 0) return ret; + } + break; + } + lab0: + ; + } + break; + case 6: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 122 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 122 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 123 */ + z->ket = z->c; /* [, line 124 */ + among_var = find_among_b(z, a_3, 3); /* substring, line 124 */ + if (!(among_var)) { z->c = z->l - m; goto lab1; } + z->bra = z->c; /* ], line 124 */ + switch(among_var) { + case 0: { z->c = z->l - m; goto lab1; } + case 1: + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab1; } /* call R2, line 127 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 127 */ + if (ret < 0) return ret; + } + break; + } + lab1: + ; + } + break; + case 7: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 134 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 134 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 135 */ + z->ket = z->c; /* [, line 136 */ + among_var = find_among_b(z, a_4, 3); /* substring, line 136 */ + if (!(among_var)) { z->c = z->l - m; goto lab2; } + z->bra = z->c; /* ], line 136 */ + switch(among_var) { + case 0: { z->c = z->l - m; goto lab2; } + case 1: + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab2; } /* call R2, line 139 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 139 */ + if (ret < 0) return ret; + } + break; + } + lab2: + ; + } + break; + case 8: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 146 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 146 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 147 */ + z->ket = z->c; /* [, line 148 */ + if (!(eq_s_b(z, 2, s_8))) { z->c = z->l - m; goto lab3; } + z->bra = z->c; /* ], line 148 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab3; } /* call R2, line 148 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 148 */ + if (ret < 0) return ret; + } + lab3: + ; + } + break; + case 9: + { int ret = r_RV(z); + if (ret == 0) return 0; /* call RV, line 153 */ + if (ret < 0) return ret; + } + if (!(eq_s_b(z, 1, s_9))) return 0; + { int ret; + ret = slice_from_s(z, 2, s_10); /* <-, line 154 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_verb_suffix(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 159 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 159 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 160 */ + among_var = find_among_b(z, a_6, 120); /* substring, line 160 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 160 */ + switch(among_var) { + case 0: { z->lb = m3; return 0; } + case 1: + { int ret; + ret = slice_del(z); /* delete, line 179 */ + if (ret < 0) return ret; + } + break; + } + z->lb = m3; + } + return 1; +} + +static int r_residual_suffix(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 184 */ + among_var = find_among_b(z, a_7, 7); /* substring, line 184 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 184 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret = r_RV(z); + if (ret == 0) return 0; /* call RV, line 187 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 187 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_residual_form(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 192 */ + among_var = find_among_b(z, a_8, 4); /* substring, line 192 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 192 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret = r_RV(z); + if (ret == 0) return 0; /* call RV, line 194 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 194 */ + if (ret < 0) return ret; + } + z->ket = z->c; /* [, line 194 */ + { int m = z->l - z->c; (void) m; /* or, line 194 */ + if (!(eq_s_b(z, 1, s_11))) goto lab1; + z->bra = z->c; /* ], line 194 */ + { int m_test = z->l - z->c; /* test, line 194 */ + if (!(eq_s_b(z, 1, s_12))) goto lab1; + z->c = z->l - m_test; + } + goto lab0; + lab1: + z->c = z->l - m; + if (!(eq_s_b(z, 1, s_13))) return 0; + z->bra = z->c; /* ], line 195 */ + { int m_test = z->l - z->c; /* test, line 195 */ + if (!(eq_s_b(z, 1, s_14))) return 0; + z->c = z->l - m_test; + } + } + lab0: + { int ret = r_RV(z); + if (ret == 0) return 0; /* call RV, line 195 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 195 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 1, s_15); /* <-, line 196 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +extern int portuguese_ISO_8859_1_stem(struct SN_env * z) { + { int c = z->c; /* do, line 202 */ + { int ret = r_prelude(z); + if (ret == 0) goto lab0; /* call prelude, line 202 */ + if (ret < 0) return ret; + } + lab0: + z->c = c; + } + { int c = z->c; /* do, line 203 */ + { int ret = r_mark_regions(z); + if (ret == 0) goto lab1; /* call mark_regions, line 203 */ + if (ret < 0) return ret; + } + lab1: + z->c = c; + } + z->lb = z->c; z->c = z->l; /* backwards, line 204 */ + + { int m = z->l - z->c; (void) m; /* do, line 205 */ + { int m = z->l - z->c; (void) m; /* or, line 209 */ + { int m = z->l - z->c; (void) m; /* and, line 207 */ + { int m = z->l - z->c; (void) m; /* or, line 206 */ + { int ret = r_standard_suffix(z); + if (ret == 0) goto lab6; /* call standard_suffix, line 206 */ + if (ret < 0) return ret; + } + goto lab5; + lab6: + z->c = z->l - m; + { int ret = r_verb_suffix(z); + if (ret == 0) goto lab4; /* call verb_suffix, line 206 */ + if (ret < 0) return ret; + } + } + lab5: + z->c = z->l - m; + { int m = z->l - z->c; (void) m; /* do, line 207 */ + z->ket = z->c; /* [, line 207 */ + if (!(eq_s_b(z, 1, s_16))) goto lab7; + z->bra = z->c; /* ], line 207 */ + { int m_test = z->l - z->c; /* test, line 207 */ + if (!(eq_s_b(z, 1, s_17))) goto lab7; + z->c = z->l - m_test; + } + { int ret = r_RV(z); + if (ret == 0) goto lab7; /* call RV, line 207 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 207 */ + if (ret < 0) return ret; + } + lab7: + z->c = z->l - m; + } + } + goto lab3; + lab4: + z->c = z->l - m; + { int ret = r_residual_suffix(z); + if (ret == 0) goto lab2; /* call residual_suffix, line 209 */ + if (ret < 0) return ret; + } + } + lab3: + lab2: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 211 */ + { int ret = r_residual_form(z); + if (ret == 0) goto lab8; /* call residual_form, line 211 */ + if (ret < 0) return ret; + } + lab8: + z->c = z->l - m; + } + z->c = z->lb; + { int c = z->c; /* do, line 213 */ + { int ret = r_postlude(z); + if (ret == 0) goto lab9; /* call postlude, line 213 */ + if (ret < 0) return ret; + } + lab9: + z->c = c; + } + return 1; +} + +extern struct SN_env * portuguese_ISO_8859_1_create_env(void) { return SN_create_env(0, 3, 0); } + +extern void portuguese_ISO_8859_1_close_env(struct SN_env * z) { SN_close_env(z); } + diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_portuguese.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_portuguese.h new file mode 100644 index 0000000..0279bc9 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_portuguese.h @@ -0,0 +1,16 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern struct SN_env * portuguese_ISO_8859_1_create_env(void); +extern void portuguese_ISO_8859_1_close_env(struct SN_env * z); + +extern int portuguese_ISO_8859_1_stem(struct SN_env * z); + +#ifdef __cplusplus +} +#endif + diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_spanish.c b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_spanish.c new file mode 100644 index 0000000..acc4fa9 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_spanish.c @@ -0,0 +1,1119 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#include "../runtime/header.h" + +extern int spanish_ISO_8859_1_stem(struct SN_env * z); +static int r_residual_suffix(struct SN_env * z); +static int r_verb_suffix(struct SN_env * z); +static int r_y_verb_suffix(struct SN_env * z); +static int r_standard_suffix(struct SN_env * z); +static int r_attached_pronoun(struct SN_env * z); +static int r_R2(struct SN_env * z); +static int r_R1(struct SN_env * z); +static int r_RV(struct SN_env * z); +static int r_mark_regions(struct SN_env * z); +static int r_postlude(struct SN_env * z); + +extern struct SN_env * spanish_ISO_8859_1_create_env(void); +extern void spanish_ISO_8859_1_close_env(struct SN_env * z); + +static symbol s_0_1[1] = { 0xE1 }; +static symbol s_0_2[1] = { 0xE9 }; +static symbol s_0_3[1] = { 0xED }; +static symbol s_0_4[1] = { 0xF3 }; +static symbol s_0_5[1] = { 0xFA }; + +static struct among a_0[6] = +{ +/* 0 */ { 0, 0, -1, 6, 0}, +/* 1 */ { 1, s_0_1, 0, 1, 0}, +/* 2 */ { 1, s_0_2, 0, 2, 0}, +/* 3 */ { 1, s_0_3, 0, 3, 0}, +/* 4 */ { 1, s_0_4, 0, 4, 0}, +/* 5 */ { 1, s_0_5, 0, 5, 0} +}; + +static symbol s_1_0[2] = { 'l', 'a' }; +static symbol s_1_1[4] = { 's', 'e', 'l', 'a' }; +static symbol s_1_2[2] = { 'l', 'e' }; +static symbol s_1_3[2] = { 'm', 'e' }; +static symbol s_1_4[2] = { 's', 'e' }; +static symbol s_1_5[2] = { 'l', 'o' }; +static symbol s_1_6[4] = { 's', 'e', 'l', 'o' }; +static symbol s_1_7[3] = { 'l', 'a', 's' }; +static symbol s_1_8[5] = { 's', 'e', 'l', 'a', 's' }; +static symbol s_1_9[3] = { 'l', 'e', 's' }; +static symbol s_1_10[3] = { 'l', 'o', 's' }; +static symbol s_1_11[5] = { 's', 'e', 'l', 'o', 's' }; +static symbol s_1_12[3] = { 'n', 'o', 's' }; + +static struct among a_1[13] = +{ +/* 0 */ { 2, s_1_0, -1, -1, 0}, +/* 1 */ { 4, s_1_1, 0, -1, 0}, +/* 2 */ { 2, s_1_2, -1, -1, 0}, +/* 3 */ { 2, s_1_3, -1, -1, 0}, +/* 4 */ { 2, s_1_4, -1, -1, 0}, +/* 5 */ { 2, s_1_5, -1, -1, 0}, +/* 6 */ { 4, s_1_6, 5, -1, 0}, +/* 7 */ { 3, s_1_7, -1, -1, 0}, +/* 8 */ { 5, s_1_8, 7, -1, 0}, +/* 9 */ { 3, s_1_9, -1, -1, 0}, +/* 10 */ { 3, s_1_10, -1, -1, 0}, +/* 11 */ { 5, s_1_11, 10, -1, 0}, +/* 12 */ { 3, s_1_12, -1, -1, 0} +}; + +static symbol s_2_0[4] = { 'a', 'n', 'd', 'o' }; +static symbol s_2_1[5] = { 'i', 'e', 'n', 'd', 'o' }; +static symbol s_2_2[5] = { 'y', 'e', 'n', 'd', 'o' }; +static symbol s_2_3[4] = { 0xE1, 'n', 'd', 'o' }; +static symbol s_2_4[5] = { 'i', 0xE9, 'n', 'd', 'o' }; +static symbol s_2_5[2] = { 'a', 'r' }; +static symbol s_2_6[2] = { 'e', 'r' }; +static symbol s_2_7[2] = { 'i', 'r' }; +static symbol s_2_8[2] = { 0xE1, 'r' }; +static symbol s_2_9[2] = { 0xE9, 'r' }; +static symbol s_2_10[2] = { 0xED, 'r' }; + +static struct among a_2[11] = +{ +/* 0 */ { 4, s_2_0, -1, 6, 0}, +/* 1 */ { 5, s_2_1, -1, 6, 0}, +/* 2 */ { 5, s_2_2, -1, 7, 0}, +/* 3 */ { 4, s_2_3, -1, 2, 0}, +/* 4 */ { 5, s_2_4, -1, 1, 0}, +/* 5 */ { 2, s_2_5, -1, 6, 0}, +/* 6 */ { 2, s_2_6, -1, 6, 0}, +/* 7 */ { 2, s_2_7, -1, 6, 0}, +/* 8 */ { 2, s_2_8, -1, 3, 0}, +/* 9 */ { 2, s_2_9, -1, 4, 0}, +/* 10 */ { 2, s_2_10, -1, 5, 0} +}; + +static symbol s_3_0[2] = { 'i', 'c' }; +static symbol s_3_1[2] = { 'a', 'd' }; +static symbol s_3_2[2] = { 'o', 's' }; +static symbol s_3_3[2] = { 'i', 'v' }; + +static struct among a_3[4] = +{ +/* 0 */ { 2, s_3_0, -1, -1, 0}, +/* 1 */ { 2, s_3_1, -1, -1, 0}, +/* 2 */ { 2, s_3_2, -1, -1, 0}, +/* 3 */ { 2, s_3_3, -1, 1, 0} +}; + +static symbol s_4_0[4] = { 'a', 'b', 'l', 'e' }; +static symbol s_4_1[4] = { 'i', 'b', 'l', 'e' }; +static symbol s_4_2[4] = { 'a', 'n', 't', 'e' }; + +static struct among a_4[3] = +{ +/* 0 */ { 4, s_4_0, -1, 1, 0}, +/* 1 */ { 4, s_4_1, -1, 1, 0}, +/* 2 */ { 4, s_4_2, -1, 1, 0} +}; + +static symbol s_5_0[2] = { 'i', 'c' }; +static symbol s_5_1[4] = { 'a', 'b', 'i', 'l' }; +static symbol s_5_2[2] = { 'i', 'v' }; + +static struct among a_5[3] = +{ +/* 0 */ { 2, s_5_0, -1, 1, 0}, +/* 1 */ { 4, s_5_1, -1, 1, 0}, +/* 2 */ { 2, s_5_2, -1, 1, 0} +}; + +static symbol s_6_0[3] = { 'i', 'c', 'a' }; +static symbol s_6_1[5] = { 'a', 'n', 'c', 'i', 'a' }; +static symbol s_6_2[5] = { 'e', 'n', 'c', 'i', 'a' }; +static symbol s_6_3[5] = { 'a', 'd', 'o', 'r', 'a' }; +static symbol s_6_4[3] = { 'o', 's', 'a' }; +static symbol s_6_5[4] = { 'i', 's', 't', 'a' }; +static symbol s_6_6[3] = { 'i', 'v', 'a' }; +static symbol s_6_7[4] = { 'a', 'n', 'z', 'a' }; +static symbol s_6_8[5] = { 'l', 'o', 'g', 0xED, 'a' }; +static symbol s_6_9[4] = { 'i', 'd', 'a', 'd' }; +static symbol s_6_10[4] = { 'a', 'b', 'l', 'e' }; +static symbol s_6_11[4] = { 'i', 'b', 'l', 'e' }; +static symbol s_6_12[4] = { 'a', 'n', 't', 'e' }; +static symbol s_6_13[5] = { 'm', 'e', 'n', 't', 'e' }; +static symbol s_6_14[6] = { 'a', 'm', 'e', 'n', 't', 'e' }; +static symbol s_6_15[5] = { 'a', 'c', 'i', 0xF3, 'n' }; +static symbol s_6_16[5] = { 'u', 'c', 'i', 0xF3, 'n' }; +static symbol s_6_17[3] = { 'i', 'c', 'o' }; +static symbol s_6_18[4] = { 'i', 's', 'm', 'o' }; +static symbol s_6_19[3] = { 'o', 's', 'o' }; +static symbol s_6_20[7] = { 'a', 'm', 'i', 'e', 'n', 't', 'o' }; +static symbol s_6_21[7] = { 'i', 'm', 'i', 'e', 'n', 't', 'o' }; +static symbol s_6_22[3] = { 'i', 'v', 'o' }; +static symbol s_6_23[4] = { 'a', 'd', 'o', 'r' }; +static symbol s_6_24[4] = { 'i', 'c', 'a', 's' }; +static symbol s_6_25[6] = { 'a', 'n', 'c', 'i', 'a', 's' }; +static symbol s_6_26[6] = { 'e', 'n', 'c', 'i', 'a', 's' }; +static symbol s_6_27[6] = { 'a', 'd', 'o', 'r', 'a', 's' }; +static symbol s_6_28[4] = { 'o', 's', 'a', 's' }; +static symbol s_6_29[5] = { 'i', 's', 't', 'a', 's' }; +static symbol s_6_30[4] = { 'i', 'v', 'a', 's' }; +static symbol s_6_31[5] = { 'a', 'n', 'z', 'a', 's' }; +static symbol s_6_32[6] = { 'l', 'o', 'g', 0xED, 'a', 's' }; +static symbol s_6_33[6] = { 'i', 'd', 'a', 'd', 'e', 's' }; +static symbol s_6_34[5] = { 'a', 'b', 'l', 'e', 's' }; +static symbol s_6_35[5] = { 'i', 'b', 'l', 'e', 's' }; +static symbol s_6_36[7] = { 'a', 'c', 'i', 'o', 'n', 'e', 's' }; +static symbol s_6_37[7] = { 'u', 'c', 'i', 'o', 'n', 'e', 's' }; +static symbol s_6_38[6] = { 'a', 'd', 'o', 'r', 'e', 's' }; +static symbol s_6_39[5] = { 'a', 'n', 't', 'e', 's' }; +static symbol s_6_40[4] = { 'i', 'c', 'o', 's' }; +static symbol s_6_41[5] = { 'i', 's', 'm', 'o', 's' }; +static symbol s_6_42[4] = { 'o', 's', 'o', 's' }; +static symbol s_6_43[8] = { 'a', 'm', 'i', 'e', 'n', 't', 'o', 's' }; +static symbol s_6_44[8] = { 'i', 'm', 'i', 'e', 'n', 't', 'o', 's' }; +static symbol s_6_45[4] = { 'i', 'v', 'o', 's' }; + +static struct among a_6[46] = +{ +/* 0 */ { 3, s_6_0, -1, 1, 0}, +/* 1 */ { 5, s_6_1, -1, 2, 0}, +/* 2 */ { 5, s_6_2, -1, 5, 0}, +/* 3 */ { 5, s_6_3, -1, 2, 0}, +/* 4 */ { 3, s_6_4, -1, 1, 0}, +/* 5 */ { 4, s_6_5, -1, 1, 0}, +/* 6 */ { 3, s_6_6, -1, 9, 0}, +/* 7 */ { 4, s_6_7, -1, 1, 0}, +/* 8 */ { 5, s_6_8, -1, 3, 0}, +/* 9 */ { 4, s_6_9, -1, 8, 0}, +/* 10 */ { 4, s_6_10, -1, 1, 0}, +/* 11 */ { 4, s_6_11, -1, 1, 0}, +/* 12 */ { 4, s_6_12, -1, 2, 0}, +/* 13 */ { 5, s_6_13, -1, 7, 0}, +/* 14 */ { 6, s_6_14, 13, 6, 0}, +/* 15 */ { 5, s_6_15, -1, 2, 0}, +/* 16 */ { 5, s_6_16, -1, 4, 0}, +/* 17 */ { 3, s_6_17, -1, 1, 0}, +/* 18 */ { 4, s_6_18, -1, 1, 0}, +/* 19 */ { 3, s_6_19, -1, 1, 0}, +/* 20 */ { 7, s_6_20, -1, 1, 0}, +/* 21 */ { 7, s_6_21, -1, 1, 0}, +/* 22 */ { 3, s_6_22, -1, 9, 0}, +/* 23 */ { 4, s_6_23, -1, 2, 0}, +/* 24 */ { 4, s_6_24, -1, 1, 0}, +/* 25 */ { 6, s_6_25, -1, 2, 0}, +/* 26 */ { 6, s_6_26, -1, 5, 0}, +/* 27 */ { 6, s_6_27, -1, 2, 0}, +/* 28 */ { 4, s_6_28, -1, 1, 0}, +/* 29 */ { 5, s_6_29, -1, 1, 0}, +/* 30 */ { 4, s_6_30, -1, 9, 0}, +/* 31 */ { 5, s_6_31, -1, 1, 0}, +/* 32 */ { 6, s_6_32, -1, 3, 0}, +/* 33 */ { 6, s_6_33, -1, 8, 0}, +/* 34 */ { 5, s_6_34, -1, 1, 0}, +/* 35 */ { 5, s_6_35, -1, 1, 0}, +/* 36 */ { 7, s_6_36, -1, 2, 0}, +/* 37 */ { 7, s_6_37, -1, 4, 0}, +/* 38 */ { 6, s_6_38, -1, 2, 0}, +/* 39 */ { 5, s_6_39, -1, 2, 0}, +/* 40 */ { 4, s_6_40, -1, 1, 0}, +/* 41 */ { 5, s_6_41, -1, 1, 0}, +/* 42 */ { 4, s_6_42, -1, 1, 0}, +/* 43 */ { 8, s_6_43, -1, 1, 0}, +/* 44 */ { 8, s_6_44, -1, 1, 0}, +/* 45 */ { 4, s_6_45, -1, 9, 0} +}; + +static symbol s_7_0[2] = { 'y', 'a' }; +static symbol s_7_1[2] = { 'y', 'e' }; +static symbol s_7_2[3] = { 'y', 'a', 'n' }; +static symbol s_7_3[3] = { 'y', 'e', 'n' }; +static symbol s_7_4[5] = { 'y', 'e', 'r', 'o', 'n' }; +static symbol s_7_5[5] = { 'y', 'e', 'n', 'd', 'o' }; +static symbol s_7_6[2] = { 'y', 'o' }; +static symbol s_7_7[3] = { 'y', 'a', 's' }; +static symbol s_7_8[3] = { 'y', 'e', 's' }; +static symbol s_7_9[4] = { 'y', 'a', 'i', 's' }; +static symbol s_7_10[5] = { 'y', 'a', 'm', 'o', 's' }; +static symbol s_7_11[2] = { 'y', 0xF3 }; + +static struct among a_7[12] = +{ +/* 0 */ { 2, s_7_0, -1, 1, 0}, +/* 1 */ { 2, s_7_1, -1, 1, 0}, +/* 2 */ { 3, s_7_2, -1, 1, 0}, +/* 3 */ { 3, s_7_3, -1, 1, 0}, +/* 4 */ { 5, s_7_4, -1, 1, 0}, +/* 5 */ { 5, s_7_5, -1, 1, 0}, +/* 6 */ { 2, s_7_6, -1, 1, 0}, +/* 7 */ { 3, s_7_7, -1, 1, 0}, +/* 8 */ { 3, s_7_8, -1, 1, 0}, +/* 9 */ { 4, s_7_9, -1, 1, 0}, +/* 10 */ { 5, s_7_10, -1, 1, 0}, +/* 11 */ { 2, s_7_11, -1, 1, 0} +}; + +static symbol s_8_0[3] = { 'a', 'b', 'a' }; +static symbol s_8_1[3] = { 'a', 'd', 'a' }; +static symbol s_8_2[3] = { 'i', 'd', 'a' }; +static symbol s_8_3[3] = { 'a', 'r', 'a' }; +static symbol s_8_4[4] = { 'i', 'e', 'r', 'a' }; +static symbol s_8_5[2] = { 0xED, 'a' }; +static symbol s_8_6[4] = { 'a', 'r', 0xED, 'a' }; +static symbol s_8_7[4] = { 'e', 'r', 0xED, 'a' }; +static symbol s_8_8[4] = { 'i', 'r', 0xED, 'a' }; +static symbol s_8_9[2] = { 'a', 'd' }; +static symbol s_8_10[2] = { 'e', 'd' }; +static symbol s_8_11[2] = { 'i', 'd' }; +static symbol s_8_12[3] = { 'a', 's', 'e' }; +static symbol s_8_13[4] = { 'i', 'e', 's', 'e' }; +static symbol s_8_14[4] = { 'a', 's', 't', 'e' }; +static symbol s_8_15[4] = { 'i', 's', 't', 'e' }; +static symbol s_8_16[2] = { 'a', 'n' }; +static symbol s_8_17[4] = { 'a', 'b', 'a', 'n' }; +static symbol s_8_18[4] = { 'a', 'r', 'a', 'n' }; +static symbol s_8_19[5] = { 'i', 'e', 'r', 'a', 'n' }; +static symbol s_8_20[3] = { 0xED, 'a', 'n' }; +static symbol s_8_21[5] = { 'a', 'r', 0xED, 'a', 'n' }; +static symbol s_8_22[5] = { 'e', 'r', 0xED, 'a', 'n' }; +static symbol s_8_23[5] = { 'i', 'r', 0xED, 'a', 'n' }; +static symbol s_8_24[2] = { 'e', 'n' }; +static symbol s_8_25[4] = { 'a', 's', 'e', 'n' }; +static symbol s_8_26[5] = { 'i', 'e', 's', 'e', 'n' }; +static symbol s_8_27[4] = { 'a', 'r', 'o', 'n' }; +static symbol s_8_28[5] = { 'i', 'e', 'r', 'o', 'n' }; +static symbol s_8_29[4] = { 'a', 'r', 0xE1, 'n' }; +static symbol s_8_30[4] = { 'e', 'r', 0xE1, 'n' }; +static symbol s_8_31[4] = { 'i', 'r', 0xE1, 'n' }; +static symbol s_8_32[3] = { 'a', 'd', 'o' }; +static symbol s_8_33[3] = { 'i', 'd', 'o' }; +static symbol s_8_34[4] = { 'a', 'n', 'd', 'o' }; +static symbol s_8_35[5] = { 'i', 'e', 'n', 'd', 'o' }; +static symbol s_8_36[2] = { 'a', 'r' }; +static symbol s_8_37[2] = { 'e', 'r' }; +static symbol s_8_38[2] = { 'i', 'r' }; +static symbol s_8_39[2] = { 'a', 's' }; +static symbol s_8_40[4] = { 'a', 'b', 'a', 's' }; +static symbol s_8_41[4] = { 'a', 'd', 'a', 's' }; +static symbol s_8_42[4] = { 'i', 'd', 'a', 's' }; +static symbol s_8_43[4] = { 'a', 'r', 'a', 's' }; +static symbol s_8_44[5] = { 'i', 'e', 'r', 'a', 's' }; +static symbol s_8_45[3] = { 0xED, 'a', 's' }; +static symbol s_8_46[5] = { 'a', 'r', 0xED, 'a', 's' }; +static symbol s_8_47[5] = { 'e', 'r', 0xED, 'a', 's' }; +static symbol s_8_48[5] = { 'i', 'r', 0xED, 'a', 's' }; +static symbol s_8_49[2] = { 'e', 's' }; +static symbol s_8_50[4] = { 'a', 's', 'e', 's' }; +static symbol s_8_51[5] = { 'i', 'e', 's', 'e', 's' }; +static symbol s_8_52[5] = { 'a', 'b', 'a', 'i', 's' }; +static symbol s_8_53[5] = { 'a', 'r', 'a', 'i', 's' }; +static symbol s_8_54[6] = { 'i', 'e', 'r', 'a', 'i', 's' }; +static symbol s_8_55[4] = { 0xED, 'a', 'i', 's' }; +static symbol s_8_56[6] = { 'a', 'r', 0xED, 'a', 'i', 's' }; +static symbol s_8_57[6] = { 'e', 'r', 0xED, 'a', 'i', 's' }; +static symbol s_8_58[6] = { 'i', 'r', 0xED, 'a', 'i', 's' }; +static symbol s_8_59[5] = { 'a', 's', 'e', 'i', 's' }; +static symbol s_8_60[6] = { 'i', 'e', 's', 'e', 'i', 's' }; +static symbol s_8_61[6] = { 'a', 's', 't', 'e', 'i', 's' }; +static symbol s_8_62[6] = { 'i', 's', 't', 'e', 'i', 's' }; +static symbol s_8_63[3] = { 0xE1, 'i', 's' }; +static symbol s_8_64[3] = { 0xE9, 'i', 's' }; +static symbol s_8_65[5] = { 'a', 'r', 0xE9, 'i', 's' }; +static symbol s_8_66[5] = { 'e', 'r', 0xE9, 'i', 's' }; +static symbol s_8_67[5] = { 'i', 'r', 0xE9, 'i', 's' }; +static symbol s_8_68[4] = { 'a', 'd', 'o', 's' }; +static symbol s_8_69[4] = { 'i', 'd', 'o', 's' }; +static symbol s_8_70[4] = { 'a', 'm', 'o', 's' }; +static symbol s_8_71[6] = { 0xE1, 'b', 'a', 'm', 'o', 's' }; +static symbol s_8_72[6] = { 0xE1, 'r', 'a', 'm', 'o', 's' }; +static symbol s_8_73[7] = { 'i', 0xE9, 'r', 'a', 'm', 'o', 's' }; +static symbol s_8_74[5] = { 0xED, 'a', 'm', 'o', 's' }; +static symbol s_8_75[7] = { 'a', 'r', 0xED, 'a', 'm', 'o', 's' }; +static symbol s_8_76[7] = { 'e', 'r', 0xED, 'a', 'm', 'o', 's' }; +static symbol s_8_77[7] = { 'i', 'r', 0xED, 'a', 'm', 'o', 's' }; +static symbol s_8_78[4] = { 'e', 'm', 'o', 's' }; +static symbol s_8_79[6] = { 'a', 'r', 'e', 'm', 'o', 's' }; +static symbol s_8_80[6] = { 'e', 'r', 'e', 'm', 'o', 's' }; +static symbol s_8_81[6] = { 'i', 'r', 'e', 'm', 'o', 's' }; +static symbol s_8_82[6] = { 0xE1, 's', 'e', 'm', 'o', 's' }; +static symbol s_8_83[7] = { 'i', 0xE9, 's', 'e', 'm', 'o', 's' }; +static symbol s_8_84[4] = { 'i', 'm', 'o', 's' }; +static symbol s_8_85[4] = { 'a', 'r', 0xE1, 's' }; +static symbol s_8_86[4] = { 'e', 'r', 0xE1, 's' }; +static symbol s_8_87[4] = { 'i', 'r', 0xE1, 's' }; +static symbol s_8_88[2] = { 0xED, 's' }; +static symbol s_8_89[3] = { 'a', 'r', 0xE1 }; +static symbol s_8_90[3] = { 'e', 'r', 0xE1 }; +static symbol s_8_91[3] = { 'i', 'r', 0xE1 }; +static symbol s_8_92[3] = { 'a', 'r', 0xE9 }; +static symbol s_8_93[3] = { 'e', 'r', 0xE9 }; +static symbol s_8_94[3] = { 'i', 'r', 0xE9 }; +static symbol s_8_95[2] = { 'i', 0xF3 }; + +static struct among a_8[96] = +{ +/* 0 */ { 3, s_8_0, -1, 2, 0}, +/* 1 */ { 3, s_8_1, -1, 2, 0}, +/* 2 */ { 3, s_8_2, -1, 2, 0}, +/* 3 */ { 3, s_8_3, -1, 2, 0}, +/* 4 */ { 4, s_8_4, -1, 2, 0}, +/* 5 */ { 2, s_8_5, -1, 2, 0}, +/* 6 */ { 4, s_8_6, 5, 2, 0}, +/* 7 */ { 4, s_8_7, 5, 2, 0}, +/* 8 */ { 4, s_8_8, 5, 2, 0}, +/* 9 */ { 2, s_8_9, -1, 2, 0}, +/* 10 */ { 2, s_8_10, -1, 2, 0}, +/* 11 */ { 2, s_8_11, -1, 2, 0}, +/* 12 */ { 3, s_8_12, -1, 2, 0}, +/* 13 */ { 4, s_8_13, -1, 2, 0}, +/* 14 */ { 4, s_8_14, -1, 2, 0}, +/* 15 */ { 4, s_8_15, -1, 2, 0}, +/* 16 */ { 2, s_8_16, -1, 2, 0}, +/* 17 */ { 4, s_8_17, 16, 2, 0}, +/* 18 */ { 4, s_8_18, 16, 2, 0}, +/* 19 */ { 5, s_8_19, 16, 2, 0}, +/* 20 */ { 3, s_8_20, 16, 2, 0}, +/* 21 */ { 5, s_8_21, 20, 2, 0}, +/* 22 */ { 5, s_8_22, 20, 2, 0}, +/* 23 */ { 5, s_8_23, 20, 2, 0}, +/* 24 */ { 2, s_8_24, -1, 1, 0}, +/* 25 */ { 4, s_8_25, 24, 2, 0}, +/* 26 */ { 5, s_8_26, 24, 2, 0}, +/* 27 */ { 4, s_8_27, -1, 2, 0}, +/* 28 */ { 5, s_8_28, -1, 2, 0}, +/* 29 */ { 4, s_8_29, -1, 2, 0}, +/* 30 */ { 4, s_8_30, -1, 2, 0}, +/* 31 */ { 4, s_8_31, -1, 2, 0}, +/* 32 */ { 3, s_8_32, -1, 2, 0}, +/* 33 */ { 3, s_8_33, -1, 2, 0}, +/* 34 */ { 4, s_8_34, -1, 2, 0}, +/* 35 */ { 5, s_8_35, -1, 2, 0}, +/* 36 */ { 2, s_8_36, -1, 2, 0}, +/* 37 */ { 2, s_8_37, -1, 2, 0}, +/* 38 */ { 2, s_8_38, -1, 2, 0}, +/* 39 */ { 2, s_8_39, -1, 2, 0}, +/* 40 */ { 4, s_8_40, 39, 2, 0}, +/* 41 */ { 4, s_8_41, 39, 2, 0}, +/* 42 */ { 4, s_8_42, 39, 2, 0}, +/* 43 */ { 4, s_8_43, 39, 2, 0}, +/* 44 */ { 5, s_8_44, 39, 2, 0}, +/* 45 */ { 3, s_8_45, 39, 2, 0}, +/* 46 */ { 5, s_8_46, 45, 2, 0}, +/* 47 */ { 5, s_8_47, 45, 2, 0}, +/* 48 */ { 5, s_8_48, 45, 2, 0}, +/* 49 */ { 2, s_8_49, -1, 1, 0}, +/* 50 */ { 4, s_8_50, 49, 2, 0}, +/* 51 */ { 5, s_8_51, 49, 2, 0}, +/* 52 */ { 5, s_8_52, -1, 2, 0}, +/* 53 */ { 5, s_8_53, -1, 2, 0}, +/* 54 */ { 6, s_8_54, -1, 2, 0}, +/* 55 */ { 4, s_8_55, -1, 2, 0}, +/* 56 */ { 6, s_8_56, 55, 2, 0}, +/* 57 */ { 6, s_8_57, 55, 2, 0}, +/* 58 */ { 6, s_8_58, 55, 2, 0}, +/* 59 */ { 5, s_8_59, -1, 2, 0}, +/* 60 */ { 6, s_8_60, -1, 2, 0}, +/* 61 */ { 6, s_8_61, -1, 2, 0}, +/* 62 */ { 6, s_8_62, -1, 2, 0}, +/* 63 */ { 3, s_8_63, -1, 2, 0}, +/* 64 */ { 3, s_8_64, -1, 1, 0}, +/* 65 */ { 5, s_8_65, 64, 2, 0}, +/* 66 */ { 5, s_8_66, 64, 2, 0}, +/* 67 */ { 5, s_8_67, 64, 2, 0}, +/* 68 */ { 4, s_8_68, -1, 2, 0}, +/* 69 */ { 4, s_8_69, -1, 2, 0}, +/* 70 */ { 4, s_8_70, -1, 2, 0}, +/* 71 */ { 6, s_8_71, 70, 2, 0}, +/* 72 */ { 6, s_8_72, 70, 2, 0}, +/* 73 */ { 7, s_8_73, 70, 2, 0}, +/* 74 */ { 5, s_8_74, 70, 2, 0}, +/* 75 */ { 7, s_8_75, 74, 2, 0}, +/* 76 */ { 7, s_8_76, 74, 2, 0}, +/* 77 */ { 7, s_8_77, 74, 2, 0}, +/* 78 */ { 4, s_8_78, -1, 1, 0}, +/* 79 */ { 6, s_8_79, 78, 2, 0}, +/* 80 */ { 6, s_8_80, 78, 2, 0}, +/* 81 */ { 6, s_8_81, 78, 2, 0}, +/* 82 */ { 6, s_8_82, 78, 2, 0}, +/* 83 */ { 7, s_8_83, 78, 2, 0}, +/* 84 */ { 4, s_8_84, -1, 2, 0}, +/* 85 */ { 4, s_8_85, -1, 2, 0}, +/* 86 */ { 4, s_8_86, -1, 2, 0}, +/* 87 */ { 4, s_8_87, -1, 2, 0}, +/* 88 */ { 2, s_8_88, -1, 2, 0}, +/* 89 */ { 3, s_8_89, -1, 2, 0}, +/* 90 */ { 3, s_8_90, -1, 2, 0}, +/* 91 */ { 3, s_8_91, -1, 2, 0}, +/* 92 */ { 3, s_8_92, -1, 2, 0}, +/* 93 */ { 3, s_8_93, -1, 2, 0}, +/* 94 */ { 3, s_8_94, -1, 2, 0}, +/* 95 */ { 2, s_8_95, -1, 2, 0} +}; + +static symbol s_9_0[1] = { 'a' }; +static symbol s_9_1[1] = { 'e' }; +static symbol s_9_2[1] = { 'o' }; +static symbol s_9_3[2] = { 'o', 's' }; +static symbol s_9_4[1] = { 0xE1 }; +static symbol s_9_5[1] = { 0xE9 }; +static symbol s_9_6[1] = { 0xED }; +static symbol s_9_7[1] = { 0xF3 }; + +static struct among a_9[8] = +{ +/* 0 */ { 1, s_9_0, -1, 1, 0}, +/* 1 */ { 1, s_9_1, -1, 2, 0}, +/* 2 */ { 1, s_9_2, -1, 1, 0}, +/* 3 */ { 2, s_9_3, -1, 1, 0}, +/* 4 */ { 1, s_9_4, -1, 1, 0}, +/* 5 */ { 1, s_9_5, -1, 2, 0}, +/* 6 */ { 1, s_9_6, -1, 1, 0}, +/* 7 */ { 1, s_9_7, -1, 1, 0} +}; + +static unsigned char g_v[] = { 17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 4, 10 }; + +static symbol s_0[] = { 'a' }; +static symbol s_1[] = { 'e' }; +static symbol s_2[] = { 'i' }; +static symbol s_3[] = { 'o' }; +static symbol s_4[] = { 'u' }; +static symbol s_5[] = { 'i', 'e', 'n', 'd', 'o' }; +static symbol s_6[] = { 'a', 'n', 'd', 'o' }; +static symbol s_7[] = { 'a', 'r' }; +static symbol s_8[] = { 'e', 'r' }; +static symbol s_9[] = { 'i', 'r' }; +static symbol s_10[] = { 'u' }; +static symbol s_11[] = { 'i', 'c' }; +static symbol s_12[] = { 'l', 'o', 'g' }; +static symbol s_13[] = { 'u' }; +static symbol s_14[] = { 'e', 'n', 't', 'e' }; +static symbol s_15[] = { 'a', 't' }; +static symbol s_16[] = { 'a', 't' }; +static symbol s_17[] = { 'u' }; +static symbol s_18[] = { 'u' }; +static symbol s_19[] = { 'g' }; +static symbol s_20[] = { 'u' }; +static symbol s_21[] = { 'g' }; + +static int r_mark_regions(struct SN_env * z) { + z->I[0] = z->l; + z->I[1] = z->l; + z->I[2] = z->l; + { int c = z->c; /* do, line 37 */ + { int c = z->c; /* or, line 39 */ + if (!(in_grouping(z, g_v, 97, 252))) goto lab2; + { int c = z->c; /* or, line 38 */ + if (!(out_grouping(z, g_v, 97, 252))) goto lab4; + while(1) { /* gopast, line 38 */ + if (!(in_grouping(z, g_v, 97, 252))) goto lab5; + break; + lab5: + if (z->c >= z->l) goto lab4; + z->c++; /* gopast, line 38 */ + } + goto lab3; + lab4: + z->c = c; + if (!(in_grouping(z, g_v, 97, 252))) goto lab2; + while(1) { /* gopast, line 38 */ + if (!(out_grouping(z, g_v, 97, 252))) goto lab6; + break; + lab6: + if (z->c >= z->l) goto lab2; + z->c++; /* gopast, line 38 */ + } + } + lab3: + goto lab1; + lab2: + z->c = c; + if (!(out_grouping(z, g_v, 97, 252))) goto lab0; + { int c = z->c; /* or, line 40 */ + if (!(out_grouping(z, g_v, 97, 252))) goto lab8; + while(1) { /* gopast, line 40 */ + if (!(in_grouping(z, g_v, 97, 252))) goto lab9; + break; + lab9: + if (z->c >= z->l) goto lab8; + z->c++; /* gopast, line 40 */ + } + goto lab7; + lab8: + z->c = c; + if (!(in_grouping(z, g_v, 97, 252))) goto lab0; + if (z->c >= z->l) goto lab0; + z->c++; /* next, line 40 */ + } + lab7: + ; + } + lab1: + z->I[0] = z->c; /* setmark pV, line 41 */ + lab0: + z->c = c; + } + { int c = z->c; /* do, line 43 */ + while(1) { /* gopast, line 44 */ + if (!(in_grouping(z, g_v, 97, 252))) goto lab11; + break; + lab11: + if (z->c >= z->l) goto lab10; + z->c++; /* gopast, line 44 */ + } + while(1) { /* gopast, line 44 */ + if (!(out_grouping(z, g_v, 97, 252))) goto lab12; + break; + lab12: + if (z->c >= z->l) goto lab10; + z->c++; /* gopast, line 44 */ + } + z->I[1] = z->c; /* setmark p1, line 44 */ + while(1) { /* gopast, line 45 */ + if (!(in_grouping(z, g_v, 97, 252))) goto lab13; + break; + lab13: + if (z->c >= z->l) goto lab10; + z->c++; /* gopast, line 45 */ + } + while(1) { /* gopast, line 45 */ + if (!(out_grouping(z, g_v, 97, 252))) goto lab14; + break; + lab14: + if (z->c >= z->l) goto lab10; + z->c++; /* gopast, line 45 */ + } + z->I[2] = z->c; /* setmark p2, line 45 */ + lab10: + z->c = c; + } + return 1; +} + +static int r_postlude(struct SN_env * z) { + int among_var; + while(1) { /* repeat, line 49 */ + int c = z->c; + z->bra = z->c; /* [, line 50 */ + among_var = find_among(z, a_0, 6); /* substring, line 50 */ + if (!(among_var)) goto lab0; + z->ket = z->c; /* ], line 50 */ + switch(among_var) { + case 0: goto lab0; + case 1: + { int ret; + ret = slice_from_s(z, 1, s_0); /* <-, line 51 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 1, s_1); /* <-, line 52 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_from_s(z, 1, s_2); /* <-, line 53 */ + if (ret < 0) return ret; + } + break; + case 4: + { int ret; + ret = slice_from_s(z, 1, s_3); /* <-, line 54 */ + if (ret < 0) return ret; + } + break; + case 5: + { int ret; + ret = slice_from_s(z, 1, s_4); /* <-, line 55 */ + if (ret < 0) return ret; + } + break; + case 6: + if (z->c >= z->l) goto lab0; + z->c++; /* next, line 57 */ + break; + } + continue; + lab0: + z->c = c; + break; + } + return 1; +} + +static int r_RV(struct SN_env * z) { + if (!(z->I[0] <= z->c)) return 0; + return 1; +} + +static int r_R1(struct SN_env * z) { + if (!(z->I[1] <= z->c)) return 0; + return 1; +} + +static int r_R2(struct SN_env * z) { + if (!(z->I[2] <= z->c)) return 0; + return 1; +} + +static int r_attached_pronoun(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 68 */ + if (!(find_among_b(z, a_1, 13))) return 0; /* substring, line 68 */ + z->bra = z->c; /* ], line 68 */ + among_var = find_among_b(z, a_2, 11); /* substring, line 72 */ + if (!(among_var)) return 0; + { int ret = r_RV(z); + if (ret == 0) return 0; /* call RV, line 72 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: return 0; + case 1: + z->bra = z->c; /* ], line 73 */ + { int ret; + ret = slice_from_s(z, 5, s_5); /* <-, line 73 */ + if (ret < 0) return ret; + } + break; + case 2: + z->bra = z->c; /* ], line 74 */ + { int ret; + ret = slice_from_s(z, 4, s_6); /* <-, line 74 */ + if (ret < 0) return ret; + } + break; + case 3: + z->bra = z->c; /* ], line 75 */ + { int ret; + ret = slice_from_s(z, 2, s_7); /* <-, line 75 */ + if (ret < 0) return ret; + } + break; + case 4: + z->bra = z->c; /* ], line 76 */ + { int ret; + ret = slice_from_s(z, 2, s_8); /* <-, line 76 */ + if (ret < 0) return ret; + } + break; + case 5: + z->bra = z->c; /* ], line 77 */ + { int ret; + ret = slice_from_s(z, 2, s_9); /* <-, line 77 */ + if (ret < 0) return ret; + } + break; + case 6: + { int ret; + ret = slice_del(z); /* delete, line 81 */ + if (ret < 0) return ret; + } + break; + case 7: + if (!(eq_s_b(z, 1, s_10))) return 0; + { int ret; + ret = slice_del(z); /* delete, line 82 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_standard_suffix(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 87 */ + among_var = find_among_b(z, a_6, 46); /* substring, line 87 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 87 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 99 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 99 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 105 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 105 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 106 */ + z->ket = z->c; /* [, line 106 */ + if (!(eq_s_b(z, 2, s_11))) { z->c = z->l - m; goto lab0; } + z->bra = z->c; /* ], line 106 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab0; } /* call R2, line 106 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 106 */ + if (ret < 0) return ret; + } + lab0: + ; + } + break; + case 3: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 111 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 3, s_12); /* <-, line 111 */ + if (ret < 0) return ret; + } + break; + case 4: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 115 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 1, s_13); /* <-, line 115 */ + if (ret < 0) return ret; + } + break; + case 5: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 119 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 4, s_14); /* <-, line 119 */ + if (ret < 0) return ret; + } + break; + case 6: + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 123 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 123 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 124 */ + z->ket = z->c; /* [, line 125 */ + among_var = find_among_b(z, a_3, 4); /* substring, line 125 */ + if (!(among_var)) { z->c = z->l - m; goto lab1; } + z->bra = z->c; /* ], line 125 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab1; } /* call R2, line 125 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 125 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: { z->c = z->l - m; goto lab1; } + case 1: + z->ket = z->c; /* [, line 126 */ + if (!(eq_s_b(z, 2, s_15))) { z->c = z->l - m; goto lab1; } + z->bra = z->c; /* ], line 126 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab1; } /* call R2, line 126 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 126 */ + if (ret < 0) return ret; + } + break; + } + lab1: + ; + } + break; + case 7: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 135 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 135 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 136 */ + z->ket = z->c; /* [, line 137 */ + among_var = find_among_b(z, a_4, 3); /* substring, line 137 */ + if (!(among_var)) { z->c = z->l - m; goto lab2; } + z->bra = z->c; /* ], line 137 */ + switch(among_var) { + case 0: { z->c = z->l - m; goto lab2; } + case 1: + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab2; } /* call R2, line 140 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 140 */ + if (ret < 0) return ret; + } + break; + } + lab2: + ; + } + break; + case 8: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 147 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 147 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 148 */ + z->ket = z->c; /* [, line 149 */ + among_var = find_among_b(z, a_5, 3); /* substring, line 149 */ + if (!(among_var)) { z->c = z->l - m; goto lab3; } + z->bra = z->c; /* ], line 149 */ + switch(among_var) { + case 0: { z->c = z->l - m; goto lab3; } + case 1: + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab3; } /* call R2, line 152 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 152 */ + if (ret < 0) return ret; + } + break; + } + lab3: + ; + } + break; + case 9: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 159 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 159 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 160 */ + z->ket = z->c; /* [, line 161 */ + if (!(eq_s_b(z, 2, s_16))) { z->c = z->l - m; goto lab4; } + z->bra = z->c; /* ], line 161 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab4; } /* call R2, line 161 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 161 */ + if (ret < 0) return ret; + } + lab4: + ; + } + break; + } + return 1; +} + +static int r_y_verb_suffix(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 168 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 168 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 168 */ + among_var = find_among_b(z, a_7, 12); /* substring, line 168 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 168 */ + z->lb = m3; + } + switch(among_var) { + case 0: return 0; + case 1: + if (!(eq_s_b(z, 1, s_17))) return 0; + { int ret; + ret = slice_del(z); /* delete, line 171 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_verb_suffix(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 176 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 176 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 176 */ + among_var = find_among_b(z, a_8, 96); /* substring, line 176 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 176 */ + z->lb = m3; + } + switch(among_var) { + case 0: return 0; + case 1: + { int m = z->l - z->c; (void) m; /* try, line 179 */ + if (!(eq_s_b(z, 1, s_18))) { z->c = z->l - m; goto lab0; } + { int m_test = z->l - z->c; /* test, line 179 */ + if (!(eq_s_b(z, 1, s_19))) { z->c = z->l - m; goto lab0; } + z->c = z->l - m_test; + } + lab0: + ; + } + z->bra = z->c; /* ], line 179 */ + { int ret; + ret = slice_del(z); /* delete, line 179 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_del(z); /* delete, line 200 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_residual_suffix(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 205 */ + among_var = find_among_b(z, a_9, 8); /* substring, line 205 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 205 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret = r_RV(z); + if (ret == 0) return 0; /* call RV, line 208 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 208 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret = r_RV(z); + if (ret == 0) return 0; /* call RV, line 210 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 210 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 210 */ + z->ket = z->c; /* [, line 210 */ + if (!(eq_s_b(z, 1, s_20))) { z->c = z->l - m; goto lab0; } + z->bra = z->c; /* ], line 210 */ + { int m_test = z->l - z->c; /* test, line 210 */ + if (!(eq_s_b(z, 1, s_21))) { z->c = z->l - m; goto lab0; } + z->c = z->l - m_test; + } + { int ret = r_RV(z); + if (ret == 0) { z->c = z->l - m; goto lab0; } /* call RV, line 210 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 210 */ + if (ret < 0) return ret; + } + lab0: + ; + } + break; + } + return 1; +} + +extern int spanish_ISO_8859_1_stem(struct SN_env * z) { + { int c = z->c; /* do, line 216 */ + { int ret = r_mark_regions(z); + if (ret == 0) goto lab0; /* call mark_regions, line 216 */ + if (ret < 0) return ret; + } + lab0: + z->c = c; + } + z->lb = z->c; z->c = z->l; /* backwards, line 217 */ + + { int m = z->l - z->c; (void) m; /* do, line 218 */ + { int ret = r_attached_pronoun(z); + if (ret == 0) goto lab1; /* call attached_pronoun, line 218 */ + if (ret < 0) return ret; + } + lab1: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 219 */ + { int m = z->l - z->c; (void) m; /* or, line 219 */ + { int ret = r_standard_suffix(z); + if (ret == 0) goto lab4; /* call standard_suffix, line 219 */ + if (ret < 0) return ret; + } + goto lab3; + lab4: + z->c = z->l - m; + { int ret = r_y_verb_suffix(z); + if (ret == 0) goto lab5; /* call y_verb_suffix, line 220 */ + if (ret < 0) return ret; + } + goto lab3; + lab5: + z->c = z->l - m; + { int ret = r_verb_suffix(z); + if (ret == 0) goto lab2; /* call verb_suffix, line 221 */ + if (ret < 0) return ret; + } + } + lab3: + lab2: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 223 */ + { int ret = r_residual_suffix(z); + if (ret == 0) goto lab6; /* call residual_suffix, line 223 */ + if (ret < 0) return ret; + } + lab6: + z->c = z->l - m; + } + z->c = z->lb; + { int c = z->c; /* do, line 225 */ + { int ret = r_postlude(z); + if (ret == 0) goto lab7; /* call postlude, line 225 */ + if (ret < 0) return ret; + } + lab7: + z->c = c; + } + return 1; +} + +extern struct SN_env * spanish_ISO_8859_1_create_env(void) { return SN_create_env(0, 3, 0); } + +extern void spanish_ISO_8859_1_close_env(struct SN_env * z) { SN_close_env(z); } + diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_spanish.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_spanish.h new file mode 100644 index 0000000..83f1498 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_spanish.h @@ -0,0 +1,16 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern struct SN_env * spanish_ISO_8859_1_create_env(void); +extern void spanish_ISO_8859_1_close_env(struct SN_env * z); + +extern int spanish_ISO_8859_1_stem(struct SN_env * z); + +#ifdef __cplusplus +} +#endif + diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_swedish.c b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_swedish.c new file mode 100644 index 0000000..c571fd9 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_swedish.c @@ -0,0 +1,307 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#include "../runtime/header.h" + +extern int swedish_ISO_8859_1_stem(struct SN_env * z); +static int r_other_suffix(struct SN_env * z); +static int r_consonant_pair(struct SN_env * z); +static int r_main_suffix(struct SN_env * z); +static int r_mark_regions(struct SN_env * z); + +extern struct SN_env * swedish_ISO_8859_1_create_env(void); +extern void swedish_ISO_8859_1_close_env(struct SN_env * z); + +static symbol s_0_0[1] = { 'a' }; +static symbol s_0_1[4] = { 'a', 'r', 'n', 'a' }; +static symbol s_0_2[4] = { 'e', 'r', 'n', 'a' }; +static symbol s_0_3[7] = { 'h', 'e', 't', 'e', 'r', 'n', 'a' }; +static symbol s_0_4[4] = { 'o', 'r', 'n', 'a' }; +static symbol s_0_5[2] = { 'a', 'd' }; +static symbol s_0_6[1] = { 'e' }; +static symbol s_0_7[3] = { 'a', 'd', 'e' }; +static symbol s_0_8[4] = { 'a', 'n', 'd', 'e' }; +static symbol s_0_9[4] = { 'a', 'r', 'n', 'e' }; +static symbol s_0_10[3] = { 'a', 'r', 'e' }; +static symbol s_0_11[4] = { 'a', 's', 't', 'e' }; +static symbol s_0_12[2] = { 'e', 'n' }; +static symbol s_0_13[5] = { 'a', 'n', 'd', 'e', 'n' }; +static symbol s_0_14[4] = { 'a', 'r', 'e', 'n' }; +static symbol s_0_15[5] = { 'h', 'e', 't', 'e', 'n' }; +static symbol s_0_16[3] = { 'e', 'r', 'n' }; +static symbol s_0_17[2] = { 'a', 'r' }; +static symbol s_0_18[2] = { 'e', 'r' }; +static symbol s_0_19[5] = { 'h', 'e', 't', 'e', 'r' }; +static symbol s_0_20[2] = { 'o', 'r' }; +static symbol s_0_21[1] = { 's' }; +static symbol s_0_22[2] = { 'a', 's' }; +static symbol s_0_23[5] = { 'a', 'r', 'n', 'a', 's' }; +static symbol s_0_24[5] = { 'e', 'r', 'n', 'a', 's' }; +static symbol s_0_25[5] = { 'o', 'r', 'n', 'a', 's' }; +static symbol s_0_26[2] = { 'e', 's' }; +static symbol s_0_27[4] = { 'a', 'd', 'e', 's' }; +static symbol s_0_28[5] = { 'a', 'n', 'd', 'e', 's' }; +static symbol s_0_29[3] = { 'e', 'n', 's' }; +static symbol s_0_30[5] = { 'a', 'r', 'e', 'n', 's' }; +static symbol s_0_31[6] = { 'h', 'e', 't', 'e', 'n', 's' }; +static symbol s_0_32[4] = { 'e', 'r', 'n', 's' }; +static symbol s_0_33[2] = { 'a', 't' }; +static symbol s_0_34[5] = { 'a', 'n', 'd', 'e', 't' }; +static symbol s_0_35[3] = { 'h', 'e', 't' }; +static symbol s_0_36[3] = { 'a', 's', 't' }; + +static struct among a_0[37] = +{ +/* 0 */ { 1, s_0_0, -1, 1, 0}, +/* 1 */ { 4, s_0_1, 0, 1, 0}, +/* 2 */ { 4, s_0_2, 0, 1, 0}, +/* 3 */ { 7, s_0_3, 2, 1, 0}, +/* 4 */ { 4, s_0_4, 0, 1, 0}, +/* 5 */ { 2, s_0_5, -1, 1, 0}, +/* 6 */ { 1, s_0_6, -1, 1, 0}, +/* 7 */ { 3, s_0_7, 6, 1, 0}, +/* 8 */ { 4, s_0_8, 6, 1, 0}, +/* 9 */ { 4, s_0_9, 6, 1, 0}, +/* 10 */ { 3, s_0_10, 6, 1, 0}, +/* 11 */ { 4, s_0_11, 6, 1, 0}, +/* 12 */ { 2, s_0_12, -1, 1, 0}, +/* 13 */ { 5, s_0_13, 12, 1, 0}, +/* 14 */ { 4, s_0_14, 12, 1, 0}, +/* 15 */ { 5, s_0_15, 12, 1, 0}, +/* 16 */ { 3, s_0_16, -1, 1, 0}, +/* 17 */ { 2, s_0_17, -1, 1, 0}, +/* 18 */ { 2, s_0_18, -1, 1, 0}, +/* 19 */ { 5, s_0_19, 18, 1, 0}, +/* 20 */ { 2, s_0_20, -1, 1, 0}, +/* 21 */ { 1, s_0_21, -1, 2, 0}, +/* 22 */ { 2, s_0_22, 21, 1, 0}, +/* 23 */ { 5, s_0_23, 22, 1, 0}, +/* 24 */ { 5, s_0_24, 22, 1, 0}, +/* 25 */ { 5, s_0_25, 22, 1, 0}, +/* 26 */ { 2, s_0_26, 21, 1, 0}, +/* 27 */ { 4, s_0_27, 26, 1, 0}, +/* 28 */ { 5, s_0_28, 26, 1, 0}, +/* 29 */ { 3, s_0_29, 21, 1, 0}, +/* 30 */ { 5, s_0_30, 29, 1, 0}, +/* 31 */ { 6, s_0_31, 29, 1, 0}, +/* 32 */ { 4, s_0_32, 21, 1, 0}, +/* 33 */ { 2, s_0_33, -1, 1, 0}, +/* 34 */ { 5, s_0_34, -1, 1, 0}, +/* 35 */ { 3, s_0_35, -1, 1, 0}, +/* 36 */ { 3, s_0_36, -1, 1, 0} +}; + +static symbol s_1_0[2] = { 'd', 'd' }; +static symbol s_1_1[2] = { 'g', 'd' }; +static symbol s_1_2[2] = { 'n', 'n' }; +static symbol s_1_3[2] = { 'd', 't' }; +static symbol s_1_4[2] = { 'g', 't' }; +static symbol s_1_5[2] = { 'k', 't' }; +static symbol s_1_6[2] = { 't', 't' }; + +static struct among a_1[7] = +{ +/* 0 */ { 2, s_1_0, -1, -1, 0}, +/* 1 */ { 2, s_1_1, -1, -1, 0}, +/* 2 */ { 2, s_1_2, -1, -1, 0}, +/* 3 */ { 2, s_1_3, -1, -1, 0}, +/* 4 */ { 2, s_1_4, -1, -1, 0}, +/* 5 */ { 2, s_1_5, -1, -1, 0}, +/* 6 */ { 2, s_1_6, -1, -1, 0} +}; + +static symbol s_2_0[2] = { 'i', 'g' }; +static symbol s_2_1[3] = { 'l', 'i', 'g' }; +static symbol s_2_2[3] = { 'e', 'l', 's' }; +static symbol s_2_3[5] = { 'f', 'u', 'l', 'l', 't' }; +static symbol s_2_4[4] = { 'l', 0xF6, 's', 't' }; + +static struct among a_2[5] = +{ +/* 0 */ { 2, s_2_0, -1, 1, 0}, +/* 1 */ { 3, s_2_1, 0, 1, 0}, +/* 2 */ { 3, s_2_2, -1, 1, 0}, +/* 3 */ { 5, s_2_3, -1, 3, 0}, +/* 4 */ { 4, s_2_4, -1, 2, 0} +}; + +static unsigned char g_v[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 32 }; + +static unsigned char g_s_ending[] = { 119, 127, 149 }; + +static symbol s_0[] = { 'l', 0xF6, 's' }; +static symbol s_1[] = { 'f', 'u', 'l', 'l' }; + +static int r_mark_regions(struct SN_env * z) { + z->I[0] = z->l; + { int c_test = z->c; /* test, line 29 */ + { int c = z->c + 3; + if (0 > c || c > z->l) return 0; + z->c = c; /* hop, line 29 */ + } + z->I[1] = z->c; /* setmark x, line 29 */ + z->c = c_test; + } + while(1) { /* goto, line 30 */ + int c = z->c; + if (!(in_grouping(z, g_v, 97, 246))) goto lab0; + z->c = c; + break; + lab0: + z->c = c; + if (z->c >= z->l) return 0; + z->c++; /* goto, line 30 */ + } + while(1) { /* gopast, line 30 */ + if (!(out_grouping(z, g_v, 97, 246))) goto lab1; + break; + lab1: + if (z->c >= z->l) return 0; + z->c++; /* gopast, line 30 */ + } + z->I[0] = z->c; /* setmark p1, line 30 */ + /* try, line 31 */ + if (!(z->I[0] < z->I[1])) goto lab2; + z->I[0] = z->I[1]; +lab2: + return 1; +} + +static int r_main_suffix(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 37 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 37 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 37 */ + among_var = find_among_b(z, a_0, 37); /* substring, line 37 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 37 */ + z->lb = m3; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 44 */ + if (ret < 0) return ret; + } + break; + case 2: + if (!(in_grouping_b(z, g_s_ending, 98, 121))) return 0; + { int ret; + ret = slice_del(z); /* delete, line 46 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_consonant_pair(struct SN_env * z) { + { int m3; /* setlimit, line 50 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 50 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + { int m = z->l - z->c; (void) m; /* and, line 52 */ + if (!(find_among_b(z, a_1, 7))) { z->lb = m3; return 0; } /* among, line 51 */ + z->c = z->l - m; + z->ket = z->c; /* [, line 52 */ + if (z->c <= z->lb) { z->lb = m3; return 0; } + z->c--; /* next, line 52 */ + z->bra = z->c; /* ], line 52 */ + { int ret; + ret = slice_del(z); /* delete, line 52 */ + if (ret < 0) return ret; + } + } + z->lb = m3; + } + return 1; +} + +static int r_other_suffix(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 55 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 55 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 56 */ + among_var = find_among_b(z, a_2, 5); /* substring, line 56 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 56 */ + switch(among_var) { + case 0: { z->lb = m3; return 0; } + case 1: + { int ret; + ret = slice_del(z); /* delete, line 57 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 3, s_0); /* <-, line 58 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_from_s(z, 4, s_1); /* <-, line 59 */ + if (ret < 0) return ret; + } + break; + } + z->lb = m3; + } + return 1; +} + +extern int swedish_ISO_8859_1_stem(struct SN_env * z) { + { int c = z->c; /* do, line 66 */ + { int ret = r_mark_regions(z); + if (ret == 0) goto lab0; /* call mark_regions, line 66 */ + if (ret < 0) return ret; + } + lab0: + z->c = c; + } + z->lb = z->c; z->c = z->l; /* backwards, line 67 */ + + { int m = z->l - z->c; (void) m; /* do, line 68 */ + { int ret = r_main_suffix(z); + if (ret == 0) goto lab1; /* call main_suffix, line 68 */ + if (ret < 0) return ret; + } + lab1: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 69 */ + { int ret = r_consonant_pair(z); + if (ret == 0) goto lab2; /* call consonant_pair, line 69 */ + if (ret < 0) return ret; + } + lab2: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 70 */ + { int ret = r_other_suffix(z); + if (ret == 0) goto lab3; /* call other_suffix, line 70 */ + if (ret < 0) return ret; + } + lab3: + z->c = z->l - m; + } + z->c = z->lb; + return 1; +} + +extern struct SN_env * swedish_ISO_8859_1_create_env(void) { return SN_create_env(0, 2, 0); } + +extern void swedish_ISO_8859_1_close_env(struct SN_env * z) { SN_close_env(z); } + diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_swedish.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_swedish.h new file mode 100644 index 0000000..4184e5c --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_swedish.h @@ -0,0 +1,16 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern struct SN_env * swedish_ISO_8859_1_create_env(void); +extern void swedish_ISO_8859_1_close_env(struct SN_env * z); + +extern int swedish_ISO_8859_1_stem(struct SN_env * z); + +#ifdef __cplusplus +} +#endif + diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_KOI8_R_russian.c b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_KOI8_R_russian.c new file mode 100644 index 0000000..0a68a3b --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_KOI8_R_russian.c @@ -0,0 +1,701 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#include "../runtime/header.h" + +extern int russian_KOI8_R_stem(struct SN_env * z); +static int r_tidy_up(struct SN_env * z); +static int r_derivational(struct SN_env * z); +static int r_noun(struct SN_env * z); +static int r_verb(struct SN_env * z); +static int r_reflexive(struct SN_env * z); +static int r_adjectival(struct SN_env * z); +static int r_adjective(struct SN_env * z); +static int r_perfective_gerund(struct SN_env * z); +static int r_R2(struct SN_env * z); +static int r_mark_regions(struct SN_env * z); + +extern struct SN_env * russian_KOI8_R_create_env(void); +extern void russian_KOI8_R_close_env(struct SN_env * z); + +static symbol s_0_0[3] = { 0xD7, 0xDB, 0xC9 }; +static symbol s_0_1[4] = { 0xC9, 0xD7, 0xDB, 0xC9 }; +static symbol s_0_2[4] = { 0xD9, 0xD7, 0xDB, 0xC9 }; +static symbol s_0_3[1] = { 0xD7 }; +static symbol s_0_4[2] = { 0xC9, 0xD7 }; +static symbol s_0_5[2] = { 0xD9, 0xD7 }; +static symbol s_0_6[5] = { 0xD7, 0xDB, 0xC9, 0xD3, 0xD8 }; +static symbol s_0_7[6] = { 0xC9, 0xD7, 0xDB, 0xC9, 0xD3, 0xD8 }; +static symbol s_0_8[6] = { 0xD9, 0xD7, 0xDB, 0xC9, 0xD3, 0xD8 }; + +static struct among a_0[9] = +{ +/* 0 */ { 3, s_0_0, -1, 1, 0}, +/* 1 */ { 4, s_0_1, 0, 2, 0}, +/* 2 */ { 4, s_0_2, 0, 2, 0}, +/* 3 */ { 1, s_0_3, -1, 1, 0}, +/* 4 */ { 2, s_0_4, 3, 2, 0}, +/* 5 */ { 2, s_0_5, 3, 2, 0}, +/* 6 */ { 5, s_0_6, -1, 1, 0}, +/* 7 */ { 6, s_0_7, 6, 2, 0}, +/* 8 */ { 6, s_0_8, 6, 2, 0} +}; + +static symbol s_1_0[2] = { 0xC0, 0xC0 }; +static symbol s_1_1[2] = { 0xC5, 0xC0 }; +static symbol s_1_2[2] = { 0xCF, 0xC0 }; +static symbol s_1_3[2] = { 0xD5, 0xC0 }; +static symbol s_1_4[2] = { 0xC5, 0xC5 }; +static symbol s_1_5[2] = { 0xC9, 0xC5 }; +static symbol s_1_6[2] = { 0xCF, 0xC5 }; +static symbol s_1_7[2] = { 0xD9, 0xC5 }; +static symbol s_1_8[2] = { 0xC9, 0xC8 }; +static symbol s_1_9[2] = { 0xD9, 0xC8 }; +static symbol s_1_10[3] = { 0xC9, 0xCD, 0xC9 }; +static symbol s_1_11[3] = { 0xD9, 0xCD, 0xC9 }; +static symbol s_1_12[2] = { 0xC5, 0xCA }; +static symbol s_1_13[2] = { 0xC9, 0xCA }; +static symbol s_1_14[2] = { 0xCF, 0xCA }; +static symbol s_1_15[2] = { 0xD9, 0xCA }; +static symbol s_1_16[2] = { 0xC5, 0xCD }; +static symbol s_1_17[2] = { 0xC9, 0xCD }; +static symbol s_1_18[2] = { 0xCF, 0xCD }; +static symbol s_1_19[2] = { 0xD9, 0xCD }; +static symbol s_1_20[3] = { 0xC5, 0xC7, 0xCF }; +static symbol s_1_21[3] = { 0xCF, 0xC7, 0xCF }; +static symbol s_1_22[2] = { 0xC1, 0xD1 }; +static symbol s_1_23[2] = { 0xD1, 0xD1 }; +static symbol s_1_24[3] = { 0xC5, 0xCD, 0xD5 }; +static symbol s_1_25[3] = { 0xCF, 0xCD, 0xD5 }; + +static struct among a_1[26] = +{ +/* 0 */ { 2, s_1_0, -1, 1, 0}, +/* 1 */ { 2, s_1_1, -1, 1, 0}, +/* 2 */ { 2, s_1_2, -1, 1, 0}, +/* 3 */ { 2, s_1_3, -1, 1, 0}, +/* 4 */ { 2, s_1_4, -1, 1, 0}, +/* 5 */ { 2, s_1_5, -1, 1, 0}, +/* 6 */ { 2, s_1_6, -1, 1, 0}, +/* 7 */ { 2, s_1_7, -1, 1, 0}, +/* 8 */ { 2, s_1_8, -1, 1, 0}, +/* 9 */ { 2, s_1_9, -1, 1, 0}, +/* 10 */ { 3, s_1_10, -1, 1, 0}, +/* 11 */ { 3, s_1_11, -1, 1, 0}, +/* 12 */ { 2, s_1_12, -1, 1, 0}, +/* 13 */ { 2, s_1_13, -1, 1, 0}, +/* 14 */ { 2, s_1_14, -1, 1, 0}, +/* 15 */ { 2, s_1_15, -1, 1, 0}, +/* 16 */ { 2, s_1_16, -1, 1, 0}, +/* 17 */ { 2, s_1_17, -1, 1, 0}, +/* 18 */ { 2, s_1_18, -1, 1, 0}, +/* 19 */ { 2, s_1_19, -1, 1, 0}, +/* 20 */ { 3, s_1_20, -1, 1, 0}, +/* 21 */ { 3, s_1_21, -1, 1, 0}, +/* 22 */ { 2, s_1_22, -1, 1, 0}, +/* 23 */ { 2, s_1_23, -1, 1, 0}, +/* 24 */ { 3, s_1_24, -1, 1, 0}, +/* 25 */ { 3, s_1_25, -1, 1, 0} +}; + +static symbol s_2_0[2] = { 0xC5, 0xCD }; +static symbol s_2_1[2] = { 0xCE, 0xCE }; +static symbol s_2_2[2] = { 0xD7, 0xDB }; +static symbol s_2_3[3] = { 0xC9, 0xD7, 0xDB }; +static symbol s_2_4[3] = { 0xD9, 0xD7, 0xDB }; +static symbol s_2_5[1] = { 0xDD }; +static symbol s_2_6[2] = { 0xC0, 0xDD }; +static symbol s_2_7[3] = { 0xD5, 0xC0, 0xDD }; + +static struct among a_2[8] = +{ +/* 0 */ { 2, s_2_0, -1, 1, 0}, +/* 1 */ { 2, s_2_1, -1, 1, 0}, +/* 2 */ { 2, s_2_2, -1, 1, 0}, +/* 3 */ { 3, s_2_3, 2, 2, 0}, +/* 4 */ { 3, s_2_4, 2, 2, 0}, +/* 5 */ { 1, s_2_5, -1, 1, 0}, +/* 6 */ { 2, s_2_6, 5, 1, 0}, +/* 7 */ { 3, s_2_7, 6, 2, 0} +}; + +static symbol s_3_0[2] = { 0xD3, 0xD1 }; +static symbol s_3_1[2] = { 0xD3, 0xD8 }; + +static struct among a_3[2] = +{ +/* 0 */ { 2, s_3_0, -1, 1, 0}, +/* 1 */ { 2, s_3_1, -1, 1, 0} +}; + +static symbol s_4_0[1] = { 0xC0 }; +static symbol s_4_1[2] = { 0xD5, 0xC0 }; +static symbol s_4_2[2] = { 0xCC, 0xC1 }; +static symbol s_4_3[3] = { 0xC9, 0xCC, 0xC1 }; +static symbol s_4_4[3] = { 0xD9, 0xCC, 0xC1 }; +static symbol s_4_5[2] = { 0xCE, 0xC1 }; +static symbol s_4_6[3] = { 0xC5, 0xCE, 0xC1 }; +static symbol s_4_7[3] = { 0xC5, 0xD4, 0xC5 }; +static symbol s_4_8[3] = { 0xC9, 0xD4, 0xC5 }; +static symbol s_4_9[3] = { 0xCA, 0xD4, 0xC5 }; +static symbol s_4_10[4] = { 0xC5, 0xCA, 0xD4, 0xC5 }; +static symbol s_4_11[4] = { 0xD5, 0xCA, 0xD4, 0xC5 }; +static symbol s_4_12[2] = { 0xCC, 0xC9 }; +static symbol s_4_13[3] = { 0xC9, 0xCC, 0xC9 }; +static symbol s_4_14[3] = { 0xD9, 0xCC, 0xC9 }; +static symbol s_4_15[1] = { 0xCA }; +static symbol s_4_16[2] = { 0xC5, 0xCA }; +static symbol s_4_17[2] = { 0xD5, 0xCA }; +static symbol s_4_18[1] = { 0xCC }; +static symbol s_4_19[2] = { 0xC9, 0xCC }; +static symbol s_4_20[2] = { 0xD9, 0xCC }; +static symbol s_4_21[2] = { 0xC5, 0xCD }; +static symbol s_4_22[2] = { 0xC9, 0xCD }; +static symbol s_4_23[2] = { 0xD9, 0xCD }; +static symbol s_4_24[1] = { 0xCE }; +static symbol s_4_25[2] = { 0xC5, 0xCE }; +static symbol s_4_26[2] = { 0xCC, 0xCF }; +static symbol s_4_27[3] = { 0xC9, 0xCC, 0xCF }; +static symbol s_4_28[3] = { 0xD9, 0xCC, 0xCF }; +static symbol s_4_29[2] = { 0xCE, 0xCF }; +static symbol s_4_30[3] = { 0xC5, 0xCE, 0xCF }; +static symbol s_4_31[3] = { 0xCE, 0xCE, 0xCF }; +static symbol s_4_32[2] = { 0xC0, 0xD4 }; +static symbol s_4_33[3] = { 0xD5, 0xC0, 0xD4 }; +static symbol s_4_34[2] = { 0xC5, 0xD4 }; +static symbol s_4_35[3] = { 0xD5, 0xC5, 0xD4 }; +static symbol s_4_36[2] = { 0xC9, 0xD4 }; +static symbol s_4_37[2] = { 0xD1, 0xD4 }; +static symbol s_4_38[2] = { 0xD9, 0xD4 }; +static symbol s_4_39[2] = { 0xD4, 0xD8 }; +static symbol s_4_40[3] = { 0xC9, 0xD4, 0xD8 }; +static symbol s_4_41[3] = { 0xD9, 0xD4, 0xD8 }; +static symbol s_4_42[3] = { 0xC5, 0xDB, 0xD8 }; +static symbol s_4_43[3] = { 0xC9, 0xDB, 0xD8 }; +static symbol s_4_44[2] = { 0xCE, 0xD9 }; +static symbol s_4_45[3] = { 0xC5, 0xCE, 0xD9 }; + +static struct among a_4[46] = +{ +/* 0 */ { 1, s_4_0, -1, 2, 0}, +/* 1 */ { 2, s_4_1, 0, 2, 0}, +/* 2 */ { 2, s_4_2, -1, 1, 0}, +/* 3 */ { 3, s_4_3, 2, 2, 0}, +/* 4 */ { 3, s_4_4, 2, 2, 0}, +/* 5 */ { 2, s_4_5, -1, 1, 0}, +/* 6 */ { 3, s_4_6, 5, 2, 0}, +/* 7 */ { 3, s_4_7, -1, 1, 0}, +/* 8 */ { 3, s_4_8, -1, 2, 0}, +/* 9 */ { 3, s_4_9, -1, 1, 0}, +/* 10 */ { 4, s_4_10, 9, 2, 0}, +/* 11 */ { 4, s_4_11, 9, 2, 0}, +/* 12 */ { 2, s_4_12, -1, 1, 0}, +/* 13 */ { 3, s_4_13, 12, 2, 0}, +/* 14 */ { 3, s_4_14, 12, 2, 0}, +/* 15 */ { 1, s_4_15, -1, 1, 0}, +/* 16 */ { 2, s_4_16, 15, 2, 0}, +/* 17 */ { 2, s_4_17, 15, 2, 0}, +/* 18 */ { 1, s_4_18, -1, 1, 0}, +/* 19 */ { 2, s_4_19, 18, 2, 0}, +/* 20 */ { 2, s_4_20, 18, 2, 0}, +/* 21 */ { 2, s_4_21, -1, 1, 0}, +/* 22 */ { 2, s_4_22, -1, 2, 0}, +/* 23 */ { 2, s_4_23, -1, 2, 0}, +/* 24 */ { 1, s_4_24, -1, 1, 0}, +/* 25 */ { 2, s_4_25, 24, 2, 0}, +/* 26 */ { 2, s_4_26, -1, 1, 0}, +/* 27 */ { 3, s_4_27, 26, 2, 0}, +/* 28 */ { 3, s_4_28, 26, 2, 0}, +/* 29 */ { 2, s_4_29, -1, 1, 0}, +/* 30 */ { 3, s_4_30, 29, 2, 0}, +/* 31 */ { 3, s_4_31, 29, 1, 0}, +/* 32 */ { 2, s_4_32, -1, 1, 0}, +/* 33 */ { 3, s_4_33, 32, 2, 0}, +/* 34 */ { 2, s_4_34, -1, 1, 0}, +/* 35 */ { 3, s_4_35, 34, 2, 0}, +/* 36 */ { 2, s_4_36, -1, 2, 0}, +/* 37 */ { 2, s_4_37, -1, 2, 0}, +/* 38 */ { 2, s_4_38, -1, 2, 0}, +/* 39 */ { 2, s_4_39, -1, 1, 0}, +/* 40 */ { 3, s_4_40, 39, 2, 0}, +/* 41 */ { 3, s_4_41, 39, 2, 0}, +/* 42 */ { 3, s_4_42, -1, 1, 0}, +/* 43 */ { 3, s_4_43, -1, 2, 0}, +/* 44 */ { 2, s_4_44, -1, 1, 0}, +/* 45 */ { 3, s_4_45, 44, 2, 0} +}; + +static symbol s_5_0[1] = { 0xC0 }; +static symbol s_5_1[2] = { 0xC9, 0xC0 }; +static symbol s_5_2[2] = { 0xD8, 0xC0 }; +static symbol s_5_3[1] = { 0xC1 }; +static symbol s_5_4[1] = { 0xC5 }; +static symbol s_5_5[2] = { 0xC9, 0xC5 }; +static symbol s_5_6[2] = { 0xD8, 0xC5 }; +static symbol s_5_7[2] = { 0xC1, 0xC8 }; +static symbol s_5_8[2] = { 0xD1, 0xC8 }; +static symbol s_5_9[3] = { 0xC9, 0xD1, 0xC8 }; +static symbol s_5_10[1] = { 0xC9 }; +static symbol s_5_11[2] = { 0xC5, 0xC9 }; +static symbol s_5_12[2] = { 0xC9, 0xC9 }; +static symbol s_5_13[3] = { 0xC1, 0xCD, 0xC9 }; +static symbol s_5_14[3] = { 0xD1, 0xCD, 0xC9 }; +static symbol s_5_15[4] = { 0xC9, 0xD1, 0xCD, 0xC9 }; +static symbol s_5_16[1] = { 0xCA }; +static symbol s_5_17[2] = { 0xC5, 0xCA }; +static symbol s_5_18[3] = { 0xC9, 0xC5, 0xCA }; +static symbol s_5_19[2] = { 0xC9, 0xCA }; +static symbol s_5_20[2] = { 0xCF, 0xCA }; +static symbol s_5_21[2] = { 0xC1, 0xCD }; +static symbol s_5_22[2] = { 0xC5, 0xCD }; +static symbol s_5_23[3] = { 0xC9, 0xC5, 0xCD }; +static symbol s_5_24[2] = { 0xCF, 0xCD }; +static symbol s_5_25[2] = { 0xD1, 0xCD }; +static symbol s_5_26[3] = { 0xC9, 0xD1, 0xCD }; +static symbol s_5_27[1] = { 0xCF }; +static symbol s_5_28[1] = { 0xD1 }; +static symbol s_5_29[2] = { 0xC9, 0xD1 }; +static symbol s_5_30[2] = { 0xD8, 0xD1 }; +static symbol s_5_31[1] = { 0xD5 }; +static symbol s_5_32[2] = { 0xC5, 0xD7 }; +static symbol s_5_33[2] = { 0xCF, 0xD7 }; +static symbol s_5_34[1] = { 0xD8 }; +static symbol s_5_35[1] = { 0xD9 }; + +static struct among a_5[36] = +{ +/* 0 */ { 1, s_5_0, -1, 1, 0}, +/* 1 */ { 2, s_5_1, 0, 1, 0}, +/* 2 */ { 2, s_5_2, 0, 1, 0}, +/* 3 */ { 1, s_5_3, -1, 1, 0}, +/* 4 */ { 1, s_5_4, -1, 1, 0}, +/* 5 */ { 2, s_5_5, 4, 1, 0}, +/* 6 */ { 2, s_5_6, 4, 1, 0}, +/* 7 */ { 2, s_5_7, -1, 1, 0}, +/* 8 */ { 2, s_5_8, -1, 1, 0}, +/* 9 */ { 3, s_5_9, 8, 1, 0}, +/* 10 */ { 1, s_5_10, -1, 1, 0}, +/* 11 */ { 2, s_5_11, 10, 1, 0}, +/* 12 */ { 2, s_5_12, 10, 1, 0}, +/* 13 */ { 3, s_5_13, 10, 1, 0}, +/* 14 */ { 3, s_5_14, 10, 1, 0}, +/* 15 */ { 4, s_5_15, 14, 1, 0}, +/* 16 */ { 1, s_5_16, -1, 1, 0}, +/* 17 */ { 2, s_5_17, 16, 1, 0}, +/* 18 */ { 3, s_5_18, 17, 1, 0}, +/* 19 */ { 2, s_5_19, 16, 1, 0}, +/* 20 */ { 2, s_5_20, 16, 1, 0}, +/* 21 */ { 2, s_5_21, -1, 1, 0}, +/* 22 */ { 2, s_5_22, -1, 1, 0}, +/* 23 */ { 3, s_5_23, 22, 1, 0}, +/* 24 */ { 2, s_5_24, -1, 1, 0}, +/* 25 */ { 2, s_5_25, -1, 1, 0}, +/* 26 */ { 3, s_5_26, 25, 1, 0}, +/* 27 */ { 1, s_5_27, -1, 1, 0}, +/* 28 */ { 1, s_5_28, -1, 1, 0}, +/* 29 */ { 2, s_5_29, 28, 1, 0}, +/* 30 */ { 2, s_5_30, 28, 1, 0}, +/* 31 */ { 1, s_5_31, -1, 1, 0}, +/* 32 */ { 2, s_5_32, -1, 1, 0}, +/* 33 */ { 2, s_5_33, -1, 1, 0}, +/* 34 */ { 1, s_5_34, -1, 1, 0}, +/* 35 */ { 1, s_5_35, -1, 1, 0} +}; + +static symbol s_6_0[3] = { 0xCF, 0xD3, 0xD4 }; +static symbol s_6_1[4] = { 0xCF, 0xD3, 0xD4, 0xD8 }; + +static struct among a_6[2] = +{ +/* 0 */ { 3, s_6_0, -1, 1, 0}, +/* 1 */ { 4, s_6_1, -1, 1, 0} +}; + +static symbol s_7_0[4] = { 0xC5, 0xCA, 0xDB, 0xC5 }; +static symbol s_7_1[1] = { 0xCE }; +static symbol s_7_2[1] = { 0xD8 }; +static symbol s_7_3[3] = { 0xC5, 0xCA, 0xDB }; + +static struct among a_7[4] = +{ +/* 0 */ { 4, s_7_0, -1, 1, 0}, +/* 1 */ { 1, s_7_1, -1, 2, 0}, +/* 2 */ { 1, s_7_2, -1, 3, 0}, +/* 3 */ { 3, s_7_3, -1, 1, 0} +}; + +static unsigned char g_v[] = { 35, 130, 34, 18 }; + +static symbol s_0[] = { 0xC1 }; +static symbol s_1[] = { 0xD1 }; +static symbol s_2[] = { 0xC1 }; +static symbol s_3[] = { 0xD1 }; +static symbol s_4[] = { 0xC1 }; +static symbol s_5[] = { 0xD1 }; +static symbol s_6[] = { 0xCE }; +static symbol s_7[] = { 0xCE }; +static symbol s_8[] = { 0xCE }; +static symbol s_9[] = { 0xC9 }; + +static int r_mark_regions(struct SN_env * z) { + z->I[0] = z->l; + z->I[1] = z->l; + { int c = z->c; /* do, line 63 */ + while(1) { /* gopast, line 64 */ + if (!(in_grouping(z, g_v, 192, 220))) goto lab1; + break; + lab1: + if (z->c >= z->l) goto lab0; + z->c++; /* gopast, line 64 */ + } + z->I[0] = z->c; /* setmark pV, line 64 */ + while(1) { /* gopast, line 64 */ + if (!(out_grouping(z, g_v, 192, 220))) goto lab2; + break; + lab2: + if (z->c >= z->l) goto lab0; + z->c++; /* gopast, line 64 */ + } + while(1) { /* gopast, line 65 */ + if (!(in_grouping(z, g_v, 192, 220))) goto lab3; + break; + lab3: + if (z->c >= z->l) goto lab0; + z->c++; /* gopast, line 65 */ + } + while(1) { /* gopast, line 65 */ + if (!(out_grouping(z, g_v, 192, 220))) goto lab4; + break; + lab4: + if (z->c >= z->l) goto lab0; + z->c++; /* gopast, line 65 */ + } + z->I[1] = z->c; /* setmark p2, line 65 */ + lab0: + z->c = c; + } + return 1; +} + +static int r_R2(struct SN_env * z) { + if (!(z->I[1] <= z->c)) return 0; + return 1; +} + +static int r_perfective_gerund(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 74 */ + among_var = find_among_b(z, a_0, 9); /* substring, line 74 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 74 */ + switch(among_var) { + case 0: return 0; + case 1: + { int m = z->l - z->c; (void) m; /* or, line 78 */ + if (!(eq_s_b(z, 1, s_0))) goto lab1; + goto lab0; + lab1: + z->c = z->l - m; + if (!(eq_s_b(z, 1, s_1))) return 0; + } + lab0: + { int ret; + ret = slice_del(z); /* delete, line 78 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_del(z); /* delete, line 85 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_adjective(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 90 */ + among_var = find_among_b(z, a_1, 26); /* substring, line 90 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 90 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 99 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_adjectival(struct SN_env * z) { + int among_var; + { int ret = r_adjective(z); + if (ret == 0) return 0; /* call adjective, line 104 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 111 */ + z->ket = z->c; /* [, line 112 */ + among_var = find_among_b(z, a_2, 8); /* substring, line 112 */ + if (!(among_var)) { z->c = z->l - m; goto lab0; } + z->bra = z->c; /* ], line 112 */ + switch(among_var) { + case 0: { z->c = z->l - m; goto lab0; } + case 1: + { int m = z->l - z->c; (void) m; /* or, line 117 */ + if (!(eq_s_b(z, 1, s_2))) goto lab2; + goto lab1; + lab2: + z->c = z->l - m; + if (!(eq_s_b(z, 1, s_3))) { z->c = z->l - m; goto lab0; } + } + lab1: + { int ret; + ret = slice_del(z); /* delete, line 117 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_del(z); /* delete, line 124 */ + if (ret < 0) return ret; + } + break; + } + lab0: + ; + } + return 1; +} + +static int r_reflexive(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 131 */ + among_var = find_among_b(z, a_3, 2); /* substring, line 131 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 131 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 134 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_verb(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 139 */ + among_var = find_among_b(z, a_4, 46); /* substring, line 139 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 139 */ + switch(among_var) { + case 0: return 0; + case 1: + { int m = z->l - z->c; (void) m; /* or, line 145 */ + if (!(eq_s_b(z, 1, s_4))) goto lab1; + goto lab0; + lab1: + z->c = z->l - m; + if (!(eq_s_b(z, 1, s_5))) return 0; + } + lab0: + { int ret; + ret = slice_del(z); /* delete, line 145 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_del(z); /* delete, line 153 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_noun(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 162 */ + among_var = find_among_b(z, a_5, 36); /* substring, line 162 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 162 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 169 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_derivational(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 178 */ + among_var = find_among_b(z, a_6, 2); /* substring, line 178 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 178 */ + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 178 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 181 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_tidy_up(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 186 */ + among_var = find_among_b(z, a_7, 4); /* substring, line 186 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 186 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 190 */ + if (ret < 0) return ret; + } + z->ket = z->c; /* [, line 191 */ + if (!(eq_s_b(z, 1, s_6))) return 0; + z->bra = z->c; /* ], line 191 */ + if (!(eq_s_b(z, 1, s_7))) return 0; + { int ret; + ret = slice_del(z); /* delete, line 191 */ + if (ret < 0) return ret; + } + break; + case 2: + if (!(eq_s_b(z, 1, s_8))) return 0; + { int ret; + ret = slice_del(z); /* delete, line 194 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_del(z); /* delete, line 196 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +extern int russian_KOI8_R_stem(struct SN_env * z) { + { int c = z->c; /* do, line 203 */ + { int ret = r_mark_regions(z); + if (ret == 0) goto lab0; /* call mark_regions, line 203 */ + if (ret < 0) return ret; + } + lab0: + z->c = c; + } + z->lb = z->c; z->c = z->l; /* backwards, line 204 */ + + { int m3; /* setlimit, line 204 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 204 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + { int m = z->l - z->c; (void) m; /* do, line 205 */ + { int m = z->l - z->c; (void) m; /* or, line 206 */ + { int ret = r_perfective_gerund(z); + if (ret == 0) goto lab3; /* call perfective_gerund, line 206 */ + if (ret < 0) return ret; + } + goto lab2; + lab3: + z->c = z->l - m; + { int m = z->l - z->c; (void) m; /* try, line 207 */ + { int ret = r_reflexive(z); + if (ret == 0) { z->c = z->l - m; goto lab4; } /* call reflexive, line 207 */ + if (ret < 0) return ret; + } + lab4: + ; + } + { int m = z->l - z->c; (void) m; /* or, line 208 */ + { int ret = r_adjectival(z); + if (ret == 0) goto lab6; /* call adjectival, line 208 */ + if (ret < 0) return ret; + } + goto lab5; + lab6: + z->c = z->l - m; + { int ret = r_verb(z); + if (ret == 0) goto lab7; /* call verb, line 208 */ + if (ret < 0) return ret; + } + goto lab5; + lab7: + z->c = z->l - m; + { int ret = r_noun(z); + if (ret == 0) goto lab1; /* call noun, line 208 */ + if (ret < 0) return ret; + } + } + lab5: + ; + } + lab2: + lab1: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* try, line 211 */ + z->ket = z->c; /* [, line 211 */ + if (!(eq_s_b(z, 1, s_9))) { z->c = z->l - m; goto lab8; } + z->bra = z->c; /* ], line 211 */ + { int ret; + ret = slice_del(z); /* delete, line 211 */ + if (ret < 0) return ret; + } + lab8: + ; + } + { int m = z->l - z->c; (void) m; /* do, line 214 */ + { int ret = r_derivational(z); + if (ret == 0) goto lab9; /* call derivational, line 214 */ + if (ret < 0) return ret; + } + lab9: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 215 */ + { int ret = r_tidy_up(z); + if (ret == 0) goto lab10; /* call tidy_up, line 215 */ + if (ret < 0) return ret; + } + lab10: + z->c = z->l - m; + } + z->lb = m3; + } + z->c = z->lb; + return 1; +} + +extern struct SN_env * russian_KOI8_R_create_env(void) { return SN_create_env(0, 2, 0); } + +extern void russian_KOI8_R_close_env(struct SN_env * z) { SN_close_env(z); } + diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_KOI8_R_russian.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_KOI8_R_russian.h new file mode 100644 index 0000000..de2179d --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_KOI8_R_russian.h @@ -0,0 +1,16 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern struct SN_env * russian_KOI8_R_create_env(void); +extern void russian_KOI8_R_close_env(struct SN_env * z); + +extern int russian_KOI8_R_stem(struct SN_env * z); + +#ifdef __cplusplus +} +#endif + diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_danish.c b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_danish.c new file mode 100644 index 0000000..bb98298 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_danish.c @@ -0,0 +1,344 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#include "../runtime/header.h" + +extern int danish_UTF_8_stem(struct SN_env * z); +static int r_undouble(struct SN_env * z); +static int r_other_suffix(struct SN_env * z); +static int r_consonant_pair(struct SN_env * z); +static int r_main_suffix(struct SN_env * z); +static int r_mark_regions(struct SN_env * z); + +extern struct SN_env * danish_UTF_8_create_env(void); +extern void danish_UTF_8_close_env(struct SN_env * z); + +static symbol s_0_0[3] = { 'h', 'e', 'd' }; +static symbol s_0_1[5] = { 'e', 't', 'h', 'e', 'd' }; +static symbol s_0_2[4] = { 'e', 'r', 'e', 'd' }; +static symbol s_0_3[1] = { 'e' }; +static symbol s_0_4[5] = { 'e', 'r', 'e', 'd', 'e' }; +static symbol s_0_5[4] = { 'e', 'n', 'd', 'e' }; +static symbol s_0_6[6] = { 'e', 'r', 'e', 'n', 'd', 'e' }; +static symbol s_0_7[3] = { 'e', 'n', 'e' }; +static symbol s_0_8[4] = { 'e', 'r', 'n', 'e' }; +static symbol s_0_9[3] = { 'e', 'r', 'e' }; +static symbol s_0_10[2] = { 'e', 'n' }; +static symbol s_0_11[5] = { 'h', 'e', 'd', 'e', 'n' }; +static symbol s_0_12[4] = { 'e', 'r', 'e', 'n' }; +static symbol s_0_13[2] = { 'e', 'r' }; +static symbol s_0_14[5] = { 'h', 'e', 'd', 'e', 'r' }; +static symbol s_0_15[4] = { 'e', 'r', 'e', 'r' }; +static symbol s_0_16[1] = { 's' }; +static symbol s_0_17[4] = { 'h', 'e', 'd', 's' }; +static symbol s_0_18[2] = { 'e', 's' }; +static symbol s_0_19[5] = { 'e', 'n', 'd', 'e', 's' }; +static symbol s_0_20[7] = { 'e', 'r', 'e', 'n', 'd', 'e', 's' }; +static symbol s_0_21[4] = { 'e', 'n', 'e', 's' }; +static symbol s_0_22[5] = { 'e', 'r', 'n', 'e', 's' }; +static symbol s_0_23[4] = { 'e', 'r', 'e', 's' }; +static symbol s_0_24[3] = { 'e', 'n', 's' }; +static symbol s_0_25[6] = { 'h', 'e', 'd', 'e', 'n', 's' }; +static symbol s_0_26[5] = { 'e', 'r', 'e', 'n', 's' }; +static symbol s_0_27[3] = { 'e', 'r', 's' }; +static symbol s_0_28[3] = { 'e', 't', 's' }; +static symbol s_0_29[5] = { 'e', 'r', 'e', 't', 's' }; +static symbol s_0_30[2] = { 'e', 't' }; +static symbol s_0_31[4] = { 'e', 'r', 'e', 't' }; + +static struct among a_0[32] = +{ +/* 0 */ { 3, s_0_0, -1, 1, 0}, +/* 1 */ { 5, s_0_1, 0, 1, 0}, +/* 2 */ { 4, s_0_2, -1, 1, 0}, +/* 3 */ { 1, s_0_3, -1, 1, 0}, +/* 4 */ { 5, s_0_4, 3, 1, 0}, +/* 5 */ { 4, s_0_5, 3, 1, 0}, +/* 6 */ { 6, s_0_6, 5, 1, 0}, +/* 7 */ { 3, s_0_7, 3, 1, 0}, +/* 8 */ { 4, s_0_8, 3, 1, 0}, +/* 9 */ { 3, s_0_9, 3, 1, 0}, +/* 10 */ { 2, s_0_10, -1, 1, 0}, +/* 11 */ { 5, s_0_11, 10, 1, 0}, +/* 12 */ { 4, s_0_12, 10, 1, 0}, +/* 13 */ { 2, s_0_13, -1, 1, 0}, +/* 14 */ { 5, s_0_14, 13, 1, 0}, +/* 15 */ { 4, s_0_15, 13, 1, 0}, +/* 16 */ { 1, s_0_16, -1, 2, 0}, +/* 17 */ { 4, s_0_17, 16, 1, 0}, +/* 18 */ { 2, s_0_18, 16, 1, 0}, +/* 19 */ { 5, s_0_19, 18, 1, 0}, +/* 20 */ { 7, s_0_20, 19, 1, 0}, +/* 21 */ { 4, s_0_21, 18, 1, 0}, +/* 22 */ { 5, s_0_22, 18, 1, 0}, +/* 23 */ { 4, s_0_23, 18, 1, 0}, +/* 24 */ { 3, s_0_24, 16, 1, 0}, +/* 25 */ { 6, s_0_25, 24, 1, 0}, +/* 26 */ { 5, s_0_26, 24, 1, 0}, +/* 27 */ { 3, s_0_27, 16, 1, 0}, +/* 28 */ { 3, s_0_28, 16, 1, 0}, +/* 29 */ { 5, s_0_29, 28, 1, 0}, +/* 30 */ { 2, s_0_30, -1, 1, 0}, +/* 31 */ { 4, s_0_31, 30, 1, 0} +}; + +static symbol s_1_0[2] = { 'g', 'd' }; +static symbol s_1_1[2] = { 'd', 't' }; +static symbol s_1_2[2] = { 'g', 't' }; +static symbol s_1_3[2] = { 'k', 't' }; + +static struct among a_1[4] = +{ +/* 0 */ { 2, s_1_0, -1, -1, 0}, +/* 1 */ { 2, s_1_1, -1, -1, 0}, +/* 2 */ { 2, s_1_2, -1, -1, 0}, +/* 3 */ { 2, s_1_3, -1, -1, 0} +}; + +static symbol s_2_0[2] = { 'i', 'g' }; +static symbol s_2_1[3] = { 'l', 'i', 'g' }; +static symbol s_2_2[4] = { 'e', 'l', 'i', 'g' }; +static symbol s_2_3[3] = { 'e', 'l', 's' }; +static symbol s_2_4[5] = { 'l', 0xC3, 0xB8, 's', 't' }; + +static struct among a_2[5] = +{ +/* 0 */ { 2, s_2_0, -1, 1, 0}, +/* 1 */ { 3, s_2_1, 0, 1, 0}, +/* 2 */ { 4, s_2_2, 1, 1, 0}, +/* 3 */ { 3, s_2_3, -1, 1, 0}, +/* 4 */ { 5, s_2_4, -1, 2, 0} +}; + +static unsigned char g_v[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 128 }; + +static unsigned char g_s_ending[] = { 239, 254, 42, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16 }; + +static symbol s_0[] = { 's', 't' }; +static symbol s_1[] = { 'i', 'g' }; +static symbol s_2[] = { 'l', 0xC3, 0xB8, 's' }; + +static int r_mark_regions(struct SN_env * z) { + z->I[0] = z->l; + { int c_test = z->c; /* test, line 33 */ + { int c = skip_utf8(z->p, z->c, 0, z->l, + 3); + if (c < 0) return 0; + z->c = c; /* hop, line 33 */ + } + z->I[1] = z->c; /* setmark x, line 33 */ + z->c = c_test; + } + while(1) { /* goto, line 34 */ + int c = z->c; + if (!(in_grouping_U(z, g_v, 97, 248))) goto lab0; + z->c = c; + break; + lab0: + z->c = c; + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) return 0; + z->c = c; /* goto, line 34 */ + } + } + while(1) { /* gopast, line 34 */ + if (!(out_grouping_U(z, g_v, 97, 248))) goto lab1; + break; + lab1: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) return 0; + z->c = c; /* gopast, line 34 */ + } + } + z->I[0] = z->c; /* setmark p1, line 34 */ + /* try, line 35 */ + if (!(z->I[0] < z->I[1])) goto lab2; + z->I[0] = z->I[1]; +lab2: + return 1; +} + +static int r_main_suffix(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 41 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 41 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 41 */ + among_var = find_among_b(z, a_0, 32); /* substring, line 41 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 41 */ + z->lb = m3; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 48 */ + if (ret < 0) return ret; + } + break; + case 2: + if (!(in_grouping_b_U(z, g_s_ending, 97, 229))) return 0; + { int ret; + ret = slice_del(z); /* delete, line 50 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_consonant_pair(struct SN_env * z) { + { int m_test = z->l - z->c; /* test, line 55 */ + { int m3; /* setlimit, line 56 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 56 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 56 */ + if (!(find_among_b(z, a_1, 4))) { z->lb = m3; return 0; } /* substring, line 56 */ + z->bra = z->c; /* ], line 56 */ + z->lb = m3; + } + z->c = z->l - m_test; + } + { int c = skip_utf8(z->p, z->c, z->lb, 0, -1); + if (c < 0) return 0; + z->c = c; /* next, line 62 */ + } + z->bra = z->c; /* ], line 62 */ + { int ret; + ret = slice_del(z); /* delete, line 62 */ + if (ret < 0) return ret; + } + return 1; +} + +static int r_other_suffix(struct SN_env * z) { + int among_var; + { int m = z->l - z->c; (void) m; /* do, line 66 */ + z->ket = z->c; /* [, line 66 */ + if (!(eq_s_b(z, 2, s_0))) goto lab0; + z->bra = z->c; /* ], line 66 */ + if (!(eq_s_b(z, 2, s_1))) goto lab0; + { int ret; + ret = slice_del(z); /* delete, line 66 */ + if (ret < 0) return ret; + } + lab0: + z->c = z->l - m; + } + { int m3; /* setlimit, line 67 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 67 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 67 */ + among_var = find_among_b(z, a_2, 5); /* substring, line 67 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 67 */ + z->lb = m3; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 70 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* do, line 70 */ + { int ret = r_consonant_pair(z); + if (ret == 0) goto lab1; /* call consonant_pair, line 70 */ + if (ret < 0) return ret; + } + lab1: + z->c = z->l - m; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 4, s_2); /* <-, line 72 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_undouble(struct SN_env * z) { + { int m3; /* setlimit, line 76 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 76 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 76 */ + if (!(out_grouping_b_U(z, g_v, 97, 248))) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 76 */ + z->S[0] = slice_to(z, z->S[0]); /* -> ch, line 76 */ + if (z->S[0] == 0) return -1; /* -> ch, line 76 */ + z->lb = m3; + } + if (!(eq_v_b(z, z->S[0]))) return 0; /* name ch, line 77 */ + { int ret; + ret = slice_del(z); /* delete, line 78 */ + if (ret < 0) return ret; + } + return 1; +} + +extern int danish_UTF_8_stem(struct SN_env * z) { + { int c = z->c; /* do, line 84 */ + { int ret = r_mark_regions(z); + if (ret == 0) goto lab0; /* call mark_regions, line 84 */ + if (ret < 0) return ret; + } + lab0: + z->c = c; + } + z->lb = z->c; z->c = z->l; /* backwards, line 85 */ + + { int m = z->l - z->c; (void) m; /* do, line 86 */ + { int ret = r_main_suffix(z); + if (ret == 0) goto lab1; /* call main_suffix, line 86 */ + if (ret < 0) return ret; + } + lab1: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 87 */ + { int ret = r_consonant_pair(z); + if (ret == 0) goto lab2; /* call consonant_pair, line 87 */ + if (ret < 0) return ret; + } + lab2: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 88 */ + { int ret = r_other_suffix(z); + if (ret == 0) goto lab3; /* call other_suffix, line 88 */ + if (ret < 0) return ret; + } + lab3: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 89 */ + { int ret = r_undouble(z); + if (ret == 0) goto lab4; /* call undouble, line 89 */ + if (ret < 0) return ret; + } + lab4: + z->c = z->l - m; + } + z->c = z->lb; + return 1; +} + +extern struct SN_env * danish_UTF_8_create_env(void) { return SN_create_env(1, 2, 0); } + +extern void danish_UTF_8_close_env(struct SN_env * z) { SN_close_env(z); } + diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_danish.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_danish.h new file mode 100644 index 0000000..ed744d4 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_danish.h @@ -0,0 +1,16 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern struct SN_env * danish_UTF_8_create_env(void); +extern void danish_UTF_8_close_env(struct SN_env * z); + +extern int danish_UTF_8_stem(struct SN_env * z); + +#ifdef __cplusplus +} +#endif + diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_dutch.c b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_dutch.c new file mode 100644 index 0000000..3de469b --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_dutch.c @@ -0,0 +1,653 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#include "../runtime/header.h" + +extern int dutch_UTF_8_stem(struct SN_env * z); +static int r_standard_suffix(struct SN_env * z); +static int r_undouble(struct SN_env * z); +static int r_R2(struct SN_env * z); +static int r_R1(struct SN_env * z); +static int r_mark_regions(struct SN_env * z); +static int r_en_ending(struct SN_env * z); +static int r_e_ending(struct SN_env * z); +static int r_postlude(struct SN_env * z); +static int r_prelude(struct SN_env * z); + +extern struct SN_env * dutch_UTF_8_create_env(void); +extern void dutch_UTF_8_close_env(struct SN_env * z); + +static symbol s_0_1[2] = { 0xC3, 0xA1 }; +static symbol s_0_2[2] = { 0xC3, 0xA4 }; +static symbol s_0_3[2] = { 0xC3, 0xA9 }; +static symbol s_0_4[2] = { 0xC3, 0xAB }; +static symbol s_0_5[2] = { 0xC3, 0xAD }; +static symbol s_0_6[2] = { 0xC3, 0xAF }; +static symbol s_0_7[2] = { 0xC3, 0xB3 }; +static symbol s_0_8[2] = { 0xC3, 0xB6 }; +static symbol s_0_9[2] = { 0xC3, 0xBA }; +static symbol s_0_10[2] = { 0xC3, 0xBC }; + +static struct among a_0[11] = +{ +/* 0 */ { 0, 0, -1, 6, 0}, +/* 1 */ { 2, s_0_1, 0, 1, 0}, +/* 2 */ { 2, s_0_2, 0, 1, 0}, +/* 3 */ { 2, s_0_3, 0, 2, 0}, +/* 4 */ { 2, s_0_4, 0, 2, 0}, +/* 5 */ { 2, s_0_5, 0, 3, 0}, +/* 6 */ { 2, s_0_6, 0, 3, 0}, +/* 7 */ { 2, s_0_7, 0, 4, 0}, +/* 8 */ { 2, s_0_8, 0, 4, 0}, +/* 9 */ { 2, s_0_9, 0, 5, 0}, +/* 10 */ { 2, s_0_10, 0, 5, 0} +}; + +static symbol s_1_1[1] = { 'I' }; +static symbol s_1_2[1] = { 'Y' }; + +static struct among a_1[3] = +{ +/* 0 */ { 0, 0, -1, 3, 0}, +/* 1 */ { 1, s_1_1, 0, 2, 0}, +/* 2 */ { 1, s_1_2, 0, 1, 0} +}; + +static symbol s_2_0[2] = { 'd', 'd' }; +static symbol s_2_1[2] = { 'k', 'k' }; +static symbol s_2_2[2] = { 't', 't' }; + +static struct among a_2[3] = +{ +/* 0 */ { 2, s_2_0, -1, -1, 0}, +/* 1 */ { 2, s_2_1, -1, -1, 0}, +/* 2 */ { 2, s_2_2, -1, -1, 0} +}; + +static symbol s_3_0[3] = { 'e', 'n', 'e' }; +static symbol s_3_1[2] = { 's', 'e' }; +static symbol s_3_2[2] = { 'e', 'n' }; +static symbol s_3_3[5] = { 'h', 'e', 'd', 'e', 'n' }; +static symbol s_3_4[1] = { 's' }; + +static struct among a_3[5] = +{ +/* 0 */ { 3, s_3_0, -1, 2, 0}, +/* 1 */ { 2, s_3_1, -1, 3, 0}, +/* 2 */ { 2, s_3_2, -1, 2, 0}, +/* 3 */ { 5, s_3_3, 2, 1, 0}, +/* 4 */ { 1, s_3_4, -1, 3, 0} +}; + +static symbol s_4_0[3] = { 'e', 'n', 'd' }; +static symbol s_4_1[2] = { 'i', 'g' }; +static symbol s_4_2[3] = { 'i', 'n', 'g' }; +static symbol s_4_3[4] = { 'l', 'i', 'j', 'k' }; +static symbol s_4_4[4] = { 'b', 'a', 'a', 'r' }; +static symbol s_4_5[3] = { 'b', 'a', 'r' }; + +static struct among a_4[6] = +{ +/* 0 */ { 3, s_4_0, -1, 1, 0}, +/* 1 */ { 2, s_4_1, -1, 2, 0}, +/* 2 */ { 3, s_4_2, -1, 1, 0}, +/* 3 */ { 4, s_4_3, -1, 3, 0}, +/* 4 */ { 4, s_4_4, -1, 4, 0}, +/* 5 */ { 3, s_4_5, -1, 5, 0} +}; + +static symbol s_5_0[2] = { 'a', 'a' }; +static symbol s_5_1[2] = { 'e', 'e' }; +static symbol s_5_2[2] = { 'o', 'o' }; +static symbol s_5_3[2] = { 'u', 'u' }; + +static struct among a_5[4] = +{ +/* 0 */ { 2, s_5_0, -1, -1, 0}, +/* 1 */ { 2, s_5_1, -1, -1, 0}, +/* 2 */ { 2, s_5_2, -1, -1, 0}, +/* 3 */ { 2, s_5_3, -1, -1, 0} +}; + +static unsigned char g_v[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128 }; + +static unsigned char g_v_I[] = { 1, 0, 0, 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128 }; + +static unsigned char g_v_j[] = { 17, 67, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128 }; + +static symbol s_0[] = { 'a' }; +static symbol s_1[] = { 'e' }; +static symbol s_2[] = { 'i' }; +static symbol s_3[] = { 'o' }; +static symbol s_4[] = { 'u' }; +static symbol s_5[] = { 'y' }; +static symbol s_6[] = { 'Y' }; +static symbol s_7[] = { 'i' }; +static symbol s_8[] = { 'I' }; +static symbol s_9[] = { 'y' }; +static symbol s_10[] = { 'Y' }; +static symbol s_11[] = { 'y' }; +static symbol s_12[] = { 'i' }; +static symbol s_13[] = { 'e' }; +static symbol s_14[] = { 'g', 'e', 'm' }; +static symbol s_15[] = { 'h', 'e', 'i', 'd' }; +static symbol s_16[] = { 'h', 'e', 'i', 'd' }; +static symbol s_17[] = { 'c' }; +static symbol s_18[] = { 'e', 'n' }; +static symbol s_19[] = { 'i', 'g' }; +static symbol s_20[] = { 'e' }; +static symbol s_21[] = { 'e' }; + +static int r_prelude(struct SN_env * z) { + int among_var; + { int c_test = z->c; /* test, line 42 */ + while(1) { /* repeat, line 42 */ + int c = z->c; + z->bra = z->c; /* [, line 43 */ + among_var = find_among(z, a_0, 11); /* substring, line 43 */ + if (!(among_var)) goto lab0; + z->ket = z->c; /* ], line 43 */ + switch(among_var) { + case 0: goto lab0; + case 1: + { int ret; + ret = slice_from_s(z, 1, s_0); /* <-, line 45 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 1, s_1); /* <-, line 47 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_from_s(z, 1, s_2); /* <-, line 49 */ + if (ret < 0) return ret; + } + break; + case 4: + { int ret; + ret = slice_from_s(z, 1, s_3); /* <-, line 51 */ + if (ret < 0) return ret; + } + break; + case 5: + { int ret; + ret = slice_from_s(z, 1, s_4); /* <-, line 53 */ + if (ret < 0) return ret; + } + break; + case 6: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab0; + z->c = c; /* next, line 54 */ + } + break; + } + continue; + lab0: + z->c = c; + break; + } + z->c = c_test; + } + { int c = z->c; /* try, line 57 */ + z->bra = z->c; /* [, line 57 */ + if (!(eq_s(z, 1, s_5))) { z->c = c; goto lab1; } + z->ket = z->c; /* ], line 57 */ + { int ret; + ret = slice_from_s(z, 1, s_6); /* <-, line 57 */ + if (ret < 0) return ret; + } + lab1: + ; + } + while(1) { /* repeat, line 58 */ + int c = z->c; + while(1) { /* goto, line 58 */ + int c = z->c; + if (!(in_grouping_U(z, g_v, 97, 232))) goto lab3; + z->bra = z->c; /* [, line 59 */ + { int c = z->c; /* or, line 59 */ + if (!(eq_s(z, 1, s_7))) goto lab5; + z->ket = z->c; /* ], line 59 */ + if (!(in_grouping_U(z, g_v, 97, 232))) goto lab5; + { int ret; + ret = slice_from_s(z, 1, s_8); /* <-, line 59 */ + if (ret < 0) return ret; + } + goto lab4; + lab5: + z->c = c; + if (!(eq_s(z, 1, s_9))) goto lab3; + z->ket = z->c; /* ], line 60 */ + { int ret; + ret = slice_from_s(z, 1, s_10); /* <-, line 60 */ + if (ret < 0) return ret; + } + } + lab4: + z->c = c; + break; + lab3: + z->c = c; + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab2; + z->c = c; /* goto, line 58 */ + } + } + continue; + lab2: + z->c = c; + break; + } + return 1; +} + +static int r_mark_regions(struct SN_env * z) { + z->I[0] = z->l; + z->I[1] = z->l; + while(1) { /* gopast, line 69 */ + if (!(in_grouping_U(z, g_v, 97, 232))) goto lab0; + break; + lab0: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) return 0; + z->c = c; /* gopast, line 69 */ + } + } + while(1) { /* gopast, line 69 */ + if (!(out_grouping_U(z, g_v, 97, 232))) goto lab1; + break; + lab1: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) return 0; + z->c = c; /* gopast, line 69 */ + } + } + z->I[0] = z->c; /* setmark p1, line 69 */ + /* try, line 70 */ + if (!(z->I[0] < 3)) goto lab2; + z->I[0] = 3; +lab2: + while(1) { /* gopast, line 71 */ + if (!(in_grouping_U(z, g_v, 97, 232))) goto lab3; + break; + lab3: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) return 0; + z->c = c; /* gopast, line 71 */ + } + } + while(1) { /* gopast, line 71 */ + if (!(out_grouping_U(z, g_v, 97, 232))) goto lab4; + break; + lab4: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) return 0; + z->c = c; /* gopast, line 71 */ + } + } + z->I[1] = z->c; /* setmark p2, line 71 */ + return 1; +} + +static int r_postlude(struct SN_env * z) { + int among_var; + while(1) { /* repeat, line 75 */ + int c = z->c; + z->bra = z->c; /* [, line 77 */ + among_var = find_among(z, a_1, 3); /* substring, line 77 */ + if (!(among_var)) goto lab0; + z->ket = z->c; /* ], line 77 */ + switch(among_var) { + case 0: goto lab0; + case 1: + { int ret; + ret = slice_from_s(z, 1, s_11); /* <-, line 78 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 1, s_12); /* <-, line 79 */ + if (ret < 0) return ret; + } + break; + case 3: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab0; + z->c = c; /* next, line 80 */ + } + break; + } + continue; + lab0: + z->c = c; + break; + } + return 1; +} + +static int r_R1(struct SN_env * z) { + if (!(z->I[0] <= z->c)) return 0; + return 1; +} + +static int r_R2(struct SN_env * z) { + if (!(z->I[1] <= z->c)) return 0; + return 1; +} + +static int r_undouble(struct SN_env * z) { + { int m_test = z->l - z->c; /* test, line 91 */ + if (!(find_among_b(z, a_2, 3))) return 0; /* among, line 91 */ + z->c = z->l - m_test; + } + z->ket = z->c; /* [, line 91 */ + { int c = skip_utf8(z->p, z->c, z->lb, 0, -1); + if (c < 0) return 0; + z->c = c; /* next, line 91 */ + } + z->bra = z->c; /* ], line 91 */ + { int ret; + ret = slice_del(z); /* delete, line 91 */ + if (ret < 0) return ret; + } + return 1; +} + +static int r_e_ending(struct SN_env * z) { + z->B[0] = 0; /* unset e_found, line 95 */ + z->ket = z->c; /* [, line 96 */ + if (!(eq_s_b(z, 1, s_13))) return 0; + z->bra = z->c; /* ], line 96 */ + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 96 */ + if (ret < 0) return ret; + } + { int m_test = z->l - z->c; /* test, line 96 */ + if (!(out_grouping_b_U(z, g_v, 97, 232))) return 0; + z->c = z->l - m_test; + } + { int ret; + ret = slice_del(z); /* delete, line 96 */ + if (ret < 0) return ret; + } + z->B[0] = 1; /* set e_found, line 97 */ + { int ret = r_undouble(z); + if (ret == 0) return 0; /* call undouble, line 98 */ + if (ret < 0) return ret; + } + return 1; +} + +static int r_en_ending(struct SN_env * z) { + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 102 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* and, line 102 */ + if (!(out_grouping_b_U(z, g_v, 97, 232))) return 0; + z->c = z->l - m; + { int m = z->l - z->c; (void) m; /* not, line 102 */ + if (!(eq_s_b(z, 3, s_14))) goto lab0; + return 0; + lab0: + z->c = z->l - m; + } + } + { int ret; + ret = slice_del(z); /* delete, line 102 */ + if (ret < 0) return ret; + } + { int ret = r_undouble(z); + if (ret == 0) return 0; /* call undouble, line 103 */ + if (ret < 0) return ret; + } + return 1; +} + +static int r_standard_suffix(struct SN_env * z) { + int among_var; + { int m = z->l - z->c; (void) m; /* do, line 107 */ + z->ket = z->c; /* [, line 108 */ + among_var = find_among_b(z, a_3, 5); /* substring, line 108 */ + if (!(among_var)) goto lab0; + z->bra = z->c; /* ], line 108 */ + switch(among_var) { + case 0: goto lab0; + case 1: + { int ret = r_R1(z); + if (ret == 0) goto lab0; /* call R1, line 110 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 4, s_15); /* <-, line 110 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret = r_en_ending(z); + if (ret == 0) goto lab0; /* call en_ending, line 113 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret = r_R1(z); + if (ret == 0) goto lab0; /* call R1, line 116 */ + if (ret < 0) return ret; + } + if (!(out_grouping_b_U(z, g_v_j, 97, 232))) goto lab0; + { int ret; + ret = slice_del(z); /* delete, line 116 */ + if (ret < 0) return ret; + } + break; + } + lab0: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 120 */ + { int ret = r_e_ending(z); + if (ret == 0) goto lab1; /* call e_ending, line 120 */ + if (ret < 0) return ret; + } + lab1: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 122 */ + z->ket = z->c; /* [, line 122 */ + if (!(eq_s_b(z, 4, s_16))) goto lab2; + z->bra = z->c; /* ], line 122 */ + { int ret = r_R2(z); + if (ret == 0) goto lab2; /* call R2, line 122 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* not, line 122 */ + if (!(eq_s_b(z, 1, s_17))) goto lab3; + goto lab2; + lab3: + z->c = z->l - m; + } + { int ret; + ret = slice_del(z); /* delete, line 122 */ + if (ret < 0) return ret; + } + z->ket = z->c; /* [, line 123 */ + if (!(eq_s_b(z, 2, s_18))) goto lab2; + z->bra = z->c; /* ], line 123 */ + { int ret = r_en_ending(z); + if (ret == 0) goto lab2; /* call en_ending, line 123 */ + if (ret < 0) return ret; + } + lab2: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 126 */ + z->ket = z->c; /* [, line 127 */ + among_var = find_among_b(z, a_4, 6); /* substring, line 127 */ + if (!(among_var)) goto lab4; + z->bra = z->c; /* ], line 127 */ + switch(among_var) { + case 0: goto lab4; + case 1: + { int ret = r_R2(z); + if (ret == 0) goto lab4; /* call R2, line 129 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 129 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* or, line 130 */ + z->ket = z->c; /* [, line 130 */ + if (!(eq_s_b(z, 2, s_19))) goto lab6; + z->bra = z->c; /* ], line 130 */ + { int ret = r_R2(z); + if (ret == 0) goto lab6; /* call R2, line 130 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* not, line 130 */ + if (!(eq_s_b(z, 1, s_20))) goto lab7; + goto lab6; + lab7: + z->c = z->l - m; + } + { int ret; + ret = slice_del(z); /* delete, line 130 */ + if (ret < 0) return ret; + } + goto lab5; + lab6: + z->c = z->l - m; + { int ret = r_undouble(z); + if (ret == 0) goto lab4; /* call undouble, line 130 */ + if (ret < 0) return ret; + } + } + lab5: + break; + case 2: + { int ret = r_R2(z); + if (ret == 0) goto lab4; /* call R2, line 133 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* not, line 133 */ + if (!(eq_s_b(z, 1, s_21))) goto lab8; + goto lab4; + lab8: + z->c = z->l - m; + } + { int ret; + ret = slice_del(z); /* delete, line 133 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret = r_R2(z); + if (ret == 0) goto lab4; /* call R2, line 136 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 136 */ + if (ret < 0) return ret; + } + { int ret = r_e_ending(z); + if (ret == 0) goto lab4; /* call e_ending, line 136 */ + if (ret < 0) return ret; + } + break; + case 4: + { int ret = r_R2(z); + if (ret == 0) goto lab4; /* call R2, line 139 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 139 */ + if (ret < 0) return ret; + } + break; + case 5: + { int ret = r_R2(z); + if (ret == 0) goto lab4; /* call R2, line 142 */ + if (ret < 0) return ret; + } + if (!(z->B[0])) goto lab4; /* Boolean test e_found, line 142 */ + { int ret; + ret = slice_del(z); /* delete, line 142 */ + if (ret < 0) return ret; + } + break; + } + lab4: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 146 */ + if (!(out_grouping_b_U(z, g_v_I, 73, 232))) goto lab9; + { int m_test = z->l - z->c; /* test, line 148 */ + if (!(find_among_b(z, a_5, 4))) goto lab9; /* among, line 149 */ + if (!(out_grouping_b_U(z, g_v, 97, 232))) goto lab9; + z->c = z->l - m_test; + } + z->ket = z->c; /* [, line 152 */ + { int c = skip_utf8(z->p, z->c, z->lb, 0, -1); + if (c < 0) goto lab9; + z->c = c; /* next, line 152 */ + } + z->bra = z->c; /* ], line 152 */ + { int ret; + ret = slice_del(z); /* delete, line 152 */ + if (ret < 0) return ret; + } + lab9: + z->c = z->l - m; + } + return 1; +} + +extern int dutch_UTF_8_stem(struct SN_env * z) { + { int c = z->c; /* do, line 159 */ + { int ret = r_prelude(z); + if (ret == 0) goto lab0; /* call prelude, line 159 */ + if (ret < 0) return ret; + } + lab0: + z->c = c; + } + { int c = z->c; /* do, line 160 */ + { int ret = r_mark_regions(z); + if (ret == 0) goto lab1; /* call mark_regions, line 160 */ + if (ret < 0) return ret; + } + lab1: + z->c = c; + } + z->lb = z->c; z->c = z->l; /* backwards, line 161 */ + + { int m = z->l - z->c; (void) m; /* do, line 162 */ + { int ret = r_standard_suffix(z); + if (ret == 0) goto lab2; /* call standard_suffix, line 162 */ + if (ret < 0) return ret; + } + lab2: + z->c = z->l - m; + } + z->c = z->lb; + { int c = z->c; /* do, line 163 */ + { int ret = r_postlude(z); + if (ret == 0) goto lab3; /* call postlude, line 163 */ + if (ret < 0) return ret; + } + lab3: + z->c = c; + } + return 1; +} + +extern struct SN_env * dutch_UTF_8_create_env(void) { return SN_create_env(0, 2, 1); } + +extern void dutch_UTF_8_close_env(struct SN_env * z) { SN_close_env(z); } + diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_dutch.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_dutch.h new file mode 100644 index 0000000..a996464 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_dutch.h @@ -0,0 +1,16 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern struct SN_env * dutch_UTF_8_create_env(void); +extern void dutch_UTF_8_close_env(struct SN_env * z); + +extern int dutch_UTF_8_stem(struct SN_env * z); + +#ifdef __cplusplus +} +#endif + diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_english.c b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_english.c new file mode 100644 index 0000000..e825cb7 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_english.c @@ -0,0 +1,1178 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#include "../runtime/header.h" + +extern int english_UTF_8_stem(struct SN_env * z); +static int r_exception2(struct SN_env * z); +static int r_exception1(struct SN_env * z); +static int r_Step_5(struct SN_env * z); +static int r_Step_4(struct SN_env * z); +static int r_Step_3(struct SN_env * z); +static int r_Step_2(struct SN_env * z); +static int r_Step_1c(struct SN_env * z); +static int r_Step_1b(struct SN_env * z); +static int r_Step_1a(struct SN_env * z); +static int r_R2(struct SN_env * z); +static int r_R1(struct SN_env * z); +static int r_shortv(struct SN_env * z); +static int r_mark_regions(struct SN_env * z); +static int r_postlude(struct SN_env * z); +static int r_prelude(struct SN_env * z); + +extern struct SN_env * english_UTF_8_create_env(void); +extern void english_UTF_8_close_env(struct SN_env * z); + +static symbol s_0_0[6] = { 'c', 'o', 'm', 'm', 'u', 'n' }; +static symbol s_0_1[5] = { 'g', 'e', 'n', 'e', 'r' }; + +static struct among a_0[2] = +{ +/* 0 */ { 6, s_0_0, -1, -1, 0}, +/* 1 */ { 5, s_0_1, -1, -1, 0} +}; + +static symbol s_1_0[1] = { '\'' }; +static symbol s_1_1[3] = { '\'', 's', '\'' }; +static symbol s_1_2[2] = { '\'', 's' }; + +static struct among a_1[3] = +{ +/* 0 */ { 1, s_1_0, -1, 1, 0}, +/* 1 */ { 3, s_1_1, 0, 1, 0}, +/* 2 */ { 2, s_1_2, -1, 1, 0} +}; + +static symbol s_2_0[3] = { 'i', 'e', 'd' }; +static symbol s_2_1[1] = { 's' }; +static symbol s_2_2[3] = { 'i', 'e', 's' }; +static symbol s_2_3[4] = { 's', 's', 'e', 's' }; +static symbol s_2_4[2] = { 's', 's' }; +static symbol s_2_5[2] = { 'u', 's' }; + +static struct among a_2[6] = +{ +/* 0 */ { 3, s_2_0, -1, 2, 0}, +/* 1 */ { 1, s_2_1, -1, 3, 0}, +/* 2 */ { 3, s_2_2, 1, 2, 0}, +/* 3 */ { 4, s_2_3, 1, 1, 0}, +/* 4 */ { 2, s_2_4, 1, -1, 0}, +/* 5 */ { 2, s_2_5, 1, -1, 0} +}; + +static symbol s_3_1[2] = { 'b', 'b' }; +static symbol s_3_2[2] = { 'd', 'd' }; +static symbol s_3_3[2] = { 'f', 'f' }; +static symbol s_3_4[2] = { 'g', 'g' }; +static symbol s_3_5[2] = { 'b', 'l' }; +static symbol s_3_6[2] = { 'm', 'm' }; +static symbol s_3_7[2] = { 'n', 'n' }; +static symbol s_3_8[2] = { 'p', 'p' }; +static symbol s_3_9[2] = { 'r', 'r' }; +static symbol s_3_10[2] = { 'a', 't' }; +static symbol s_3_11[2] = { 't', 't' }; +static symbol s_3_12[2] = { 'i', 'z' }; + +static struct among a_3[13] = +{ +/* 0 */ { 0, 0, -1, 3, 0}, +/* 1 */ { 2, s_3_1, 0, 2, 0}, +/* 2 */ { 2, s_3_2, 0, 2, 0}, +/* 3 */ { 2, s_3_3, 0, 2, 0}, +/* 4 */ { 2, s_3_4, 0, 2, 0}, +/* 5 */ { 2, s_3_5, 0, 1, 0}, +/* 6 */ { 2, s_3_6, 0, 2, 0}, +/* 7 */ { 2, s_3_7, 0, 2, 0}, +/* 8 */ { 2, s_3_8, 0, 2, 0}, +/* 9 */ { 2, s_3_9, 0, 2, 0}, +/* 10 */ { 2, s_3_10, 0, 1, 0}, +/* 11 */ { 2, s_3_11, 0, 2, 0}, +/* 12 */ { 2, s_3_12, 0, 1, 0} +}; + +static symbol s_4_0[2] = { 'e', 'd' }; +static symbol s_4_1[3] = { 'e', 'e', 'd' }; +static symbol s_4_2[3] = { 'i', 'n', 'g' }; +static symbol s_4_3[4] = { 'e', 'd', 'l', 'y' }; +static symbol s_4_4[5] = { 'e', 'e', 'd', 'l', 'y' }; +static symbol s_4_5[5] = { 'i', 'n', 'g', 'l', 'y' }; + +static struct among a_4[6] = +{ +/* 0 */ { 2, s_4_0, -1, 2, 0}, +/* 1 */ { 3, s_4_1, 0, 1, 0}, +/* 2 */ { 3, s_4_2, -1, 2, 0}, +/* 3 */ { 4, s_4_3, -1, 2, 0}, +/* 4 */ { 5, s_4_4, 3, 1, 0}, +/* 5 */ { 5, s_4_5, -1, 2, 0} +}; + +static symbol s_5_0[4] = { 'a', 'n', 'c', 'i' }; +static symbol s_5_1[4] = { 'e', 'n', 'c', 'i' }; +static symbol s_5_2[3] = { 'o', 'g', 'i' }; +static symbol s_5_3[2] = { 'l', 'i' }; +static symbol s_5_4[3] = { 'b', 'l', 'i' }; +static symbol s_5_5[4] = { 'a', 'b', 'l', 'i' }; +static symbol s_5_6[4] = { 'a', 'l', 'l', 'i' }; +static symbol s_5_7[5] = { 'f', 'u', 'l', 'l', 'i' }; +static symbol s_5_8[6] = { 'l', 'e', 's', 's', 'l', 'i' }; +static symbol s_5_9[5] = { 'o', 'u', 's', 'l', 'i' }; +static symbol s_5_10[5] = { 'e', 'n', 't', 'l', 'i' }; +static symbol s_5_11[5] = { 'a', 'l', 'i', 't', 'i' }; +static symbol s_5_12[6] = { 'b', 'i', 'l', 'i', 't', 'i' }; +static symbol s_5_13[5] = { 'i', 'v', 'i', 't', 'i' }; +static symbol s_5_14[6] = { 't', 'i', 'o', 'n', 'a', 'l' }; +static symbol s_5_15[7] = { 'a', 't', 'i', 'o', 'n', 'a', 'l' }; +static symbol s_5_16[5] = { 'a', 'l', 'i', 's', 'm' }; +static symbol s_5_17[5] = { 'a', 't', 'i', 'o', 'n' }; +static symbol s_5_18[7] = { 'i', 'z', 'a', 't', 'i', 'o', 'n' }; +static symbol s_5_19[4] = { 'i', 'z', 'e', 'r' }; +static symbol s_5_20[4] = { 'a', 't', 'o', 'r' }; +static symbol s_5_21[7] = { 'i', 'v', 'e', 'n', 'e', 's', 's' }; +static symbol s_5_22[7] = { 'f', 'u', 'l', 'n', 'e', 's', 's' }; +static symbol s_5_23[7] = { 'o', 'u', 's', 'n', 'e', 's', 's' }; + +static struct among a_5[24] = +{ +/* 0 */ { 4, s_5_0, -1, 3, 0}, +/* 1 */ { 4, s_5_1, -1, 2, 0}, +/* 2 */ { 3, s_5_2, -1, 13, 0}, +/* 3 */ { 2, s_5_3, -1, 16, 0}, +/* 4 */ { 3, s_5_4, 3, 12, 0}, +/* 5 */ { 4, s_5_5, 4, 4, 0}, +/* 6 */ { 4, s_5_6, 3, 8, 0}, +/* 7 */ { 5, s_5_7, 3, 14, 0}, +/* 8 */ { 6, s_5_8, 3, 15, 0}, +/* 9 */ { 5, s_5_9, 3, 10, 0}, +/* 10 */ { 5, s_5_10, 3, 5, 0}, +/* 11 */ { 5, s_5_11, -1, 8, 0}, +/* 12 */ { 6, s_5_12, -1, 12, 0}, +/* 13 */ { 5, s_5_13, -1, 11, 0}, +/* 14 */ { 6, s_5_14, -1, 1, 0}, +/* 15 */ { 7, s_5_15, 14, 7, 0}, +/* 16 */ { 5, s_5_16, -1, 8, 0}, +/* 17 */ { 5, s_5_17, -1, 7, 0}, +/* 18 */ { 7, s_5_18, 17, 6, 0}, +/* 19 */ { 4, s_5_19, -1, 6, 0}, +/* 20 */ { 4, s_5_20, -1, 7, 0}, +/* 21 */ { 7, s_5_21, -1, 11, 0}, +/* 22 */ { 7, s_5_22, -1, 9, 0}, +/* 23 */ { 7, s_5_23, -1, 10, 0} +}; + +static symbol s_6_0[5] = { 'i', 'c', 'a', 't', 'e' }; +static symbol s_6_1[5] = { 'a', 't', 'i', 'v', 'e' }; +static symbol s_6_2[5] = { 'a', 'l', 'i', 'z', 'e' }; +static symbol s_6_3[5] = { 'i', 'c', 'i', 't', 'i' }; +static symbol s_6_4[4] = { 'i', 'c', 'a', 'l' }; +static symbol s_6_5[6] = { 't', 'i', 'o', 'n', 'a', 'l' }; +static symbol s_6_6[7] = { 'a', 't', 'i', 'o', 'n', 'a', 'l' }; +static symbol s_6_7[3] = { 'f', 'u', 'l' }; +static symbol s_6_8[4] = { 'n', 'e', 's', 's' }; + +static struct among a_6[9] = +{ +/* 0 */ { 5, s_6_0, -1, 4, 0}, +/* 1 */ { 5, s_6_1, -1, 6, 0}, +/* 2 */ { 5, s_6_2, -1, 3, 0}, +/* 3 */ { 5, s_6_3, -1, 4, 0}, +/* 4 */ { 4, s_6_4, -1, 4, 0}, +/* 5 */ { 6, s_6_5, -1, 1, 0}, +/* 6 */ { 7, s_6_6, 5, 2, 0}, +/* 7 */ { 3, s_6_7, -1, 5, 0}, +/* 8 */ { 4, s_6_8, -1, 5, 0} +}; + +static symbol s_7_0[2] = { 'i', 'c' }; +static symbol s_7_1[4] = { 'a', 'n', 'c', 'e' }; +static symbol s_7_2[4] = { 'e', 'n', 'c', 'e' }; +static symbol s_7_3[4] = { 'a', 'b', 'l', 'e' }; +static symbol s_7_4[4] = { 'i', 'b', 'l', 'e' }; +static symbol s_7_5[3] = { 'a', 't', 'e' }; +static symbol s_7_6[3] = { 'i', 'v', 'e' }; +static symbol s_7_7[3] = { 'i', 'z', 'e' }; +static symbol s_7_8[3] = { 'i', 't', 'i' }; +static symbol s_7_9[2] = { 'a', 'l' }; +static symbol s_7_10[3] = { 'i', 's', 'm' }; +static symbol s_7_11[3] = { 'i', 'o', 'n' }; +static symbol s_7_12[2] = { 'e', 'r' }; +static symbol s_7_13[3] = { 'o', 'u', 's' }; +static symbol s_7_14[3] = { 'a', 'n', 't' }; +static symbol s_7_15[3] = { 'e', 'n', 't' }; +static symbol s_7_16[4] = { 'm', 'e', 'n', 't' }; +static symbol s_7_17[5] = { 'e', 'm', 'e', 'n', 't' }; + +static struct among a_7[18] = +{ +/* 0 */ { 2, s_7_0, -1, 1, 0}, +/* 1 */ { 4, s_7_1, -1, 1, 0}, +/* 2 */ { 4, s_7_2, -1, 1, 0}, +/* 3 */ { 4, s_7_3, -1, 1, 0}, +/* 4 */ { 4, s_7_4, -1, 1, 0}, +/* 5 */ { 3, s_7_5, -1, 1, 0}, +/* 6 */ { 3, s_7_6, -1, 1, 0}, +/* 7 */ { 3, s_7_7, -1, 1, 0}, +/* 8 */ { 3, s_7_8, -1, 1, 0}, +/* 9 */ { 2, s_7_9, -1, 1, 0}, +/* 10 */ { 3, s_7_10, -1, 1, 0}, +/* 11 */ { 3, s_7_11, -1, 2, 0}, +/* 12 */ { 2, s_7_12, -1, 1, 0}, +/* 13 */ { 3, s_7_13, -1, 1, 0}, +/* 14 */ { 3, s_7_14, -1, 1, 0}, +/* 15 */ { 3, s_7_15, -1, 1, 0}, +/* 16 */ { 4, s_7_16, 15, 1, 0}, +/* 17 */ { 5, s_7_17, 16, 1, 0} +}; + +static symbol s_8_0[1] = { 'e' }; +static symbol s_8_1[1] = { 'l' }; + +static struct among a_8[2] = +{ +/* 0 */ { 1, s_8_0, -1, 1, 0}, +/* 1 */ { 1, s_8_1, -1, 2, 0} +}; + +static symbol s_9_0[7] = { 's', 'u', 'c', 'c', 'e', 'e', 'd' }; +static symbol s_9_1[7] = { 'p', 'r', 'o', 'c', 'e', 'e', 'd' }; +static symbol s_9_2[6] = { 'e', 'x', 'c', 'e', 'e', 'd' }; +static symbol s_9_3[7] = { 'c', 'a', 'n', 'n', 'i', 'n', 'g' }; +static symbol s_9_4[6] = { 'i', 'n', 'n', 'i', 'n', 'g' }; +static symbol s_9_5[7] = { 'e', 'a', 'r', 'r', 'i', 'n', 'g' }; +static symbol s_9_6[7] = { 'h', 'e', 'r', 'r', 'i', 'n', 'g' }; +static symbol s_9_7[6] = { 'o', 'u', 't', 'i', 'n', 'g' }; + +static struct among a_9[8] = +{ +/* 0 */ { 7, s_9_0, -1, -1, 0}, +/* 1 */ { 7, s_9_1, -1, -1, 0}, +/* 2 */ { 6, s_9_2, -1, -1, 0}, +/* 3 */ { 7, s_9_3, -1, -1, 0}, +/* 4 */ { 6, s_9_4, -1, -1, 0}, +/* 5 */ { 7, s_9_5, -1, -1, 0}, +/* 6 */ { 7, s_9_6, -1, -1, 0}, +/* 7 */ { 6, s_9_7, -1, -1, 0} +}; + +static symbol s_10_0[5] = { 'a', 'n', 'd', 'e', 's' }; +static symbol s_10_1[5] = { 'a', 't', 'l', 'a', 's' }; +static symbol s_10_2[4] = { 'b', 'i', 'a', 's' }; +static symbol s_10_3[6] = { 'c', 'o', 's', 'm', 'o', 's' }; +static symbol s_10_4[5] = { 'd', 'y', 'i', 'n', 'g' }; +static symbol s_10_5[5] = { 'e', 'a', 'r', 'l', 'y' }; +static symbol s_10_6[6] = { 'g', 'e', 'n', 't', 'l', 'y' }; +static symbol s_10_7[4] = { 'h', 'o', 'w', 'e' }; +static symbol s_10_8[4] = { 'i', 'd', 'l', 'y' }; +static symbol s_10_9[5] = { 'l', 'y', 'i', 'n', 'g' }; +static symbol s_10_10[4] = { 'n', 'e', 'w', 's' }; +static symbol s_10_11[4] = { 'o', 'n', 'l', 'y' }; +static symbol s_10_12[6] = { 's', 'i', 'n', 'g', 'l', 'y' }; +static symbol s_10_13[5] = { 's', 'k', 'i', 'e', 's' }; +static symbol s_10_14[4] = { 's', 'k', 'i', 's' }; +static symbol s_10_15[3] = { 's', 'k', 'y' }; +static symbol s_10_16[5] = { 't', 'y', 'i', 'n', 'g' }; +static symbol s_10_17[4] = { 'u', 'g', 'l', 'y' }; + +static struct among a_10[18] = +{ +/* 0 */ { 5, s_10_0, -1, -1, 0}, +/* 1 */ { 5, s_10_1, -1, -1, 0}, +/* 2 */ { 4, s_10_2, -1, -1, 0}, +/* 3 */ { 6, s_10_3, -1, -1, 0}, +/* 4 */ { 5, s_10_4, -1, 3, 0}, +/* 5 */ { 5, s_10_5, -1, 9, 0}, +/* 6 */ { 6, s_10_6, -1, 7, 0}, +/* 7 */ { 4, s_10_7, -1, -1, 0}, +/* 8 */ { 4, s_10_8, -1, 6, 0}, +/* 9 */ { 5, s_10_9, -1, 4, 0}, +/* 10 */ { 4, s_10_10, -1, -1, 0}, +/* 11 */ { 4, s_10_11, -1, 10, 0}, +/* 12 */ { 6, s_10_12, -1, 11, 0}, +/* 13 */ { 5, s_10_13, -1, 2, 0}, +/* 14 */ { 4, s_10_14, -1, 1, 0}, +/* 15 */ { 3, s_10_15, -1, -1, 0}, +/* 16 */ { 5, s_10_16, -1, 5, 0}, +/* 17 */ { 4, s_10_17, -1, 8, 0} +}; + +static unsigned char g_v[] = { 17, 65, 16, 1 }; + +static unsigned char g_v_WXY[] = { 1, 17, 65, 208, 1 }; + +static unsigned char g_valid_LI[] = { 55, 141, 2 }; + +static symbol s_0[] = { '\'' }; +static symbol s_1[] = { 'y' }; +static symbol s_2[] = { 'Y' }; +static symbol s_3[] = { 'y' }; +static symbol s_4[] = { 'Y' }; +static symbol s_5[] = { 's', 's' }; +static symbol s_6[] = { 'i', 'e' }; +static symbol s_7[] = { 'i' }; +static symbol s_8[] = { 'e', 'e' }; +static symbol s_9[] = { 'e' }; +static symbol s_10[] = { 'e' }; +static symbol s_11[] = { 'y' }; +static symbol s_12[] = { 'Y' }; +static symbol s_13[] = { 'i' }; +static symbol s_14[] = { 't', 'i', 'o', 'n' }; +static symbol s_15[] = { 'e', 'n', 'c', 'e' }; +static symbol s_16[] = { 'a', 'n', 'c', 'e' }; +static symbol s_17[] = { 'a', 'b', 'l', 'e' }; +static symbol s_18[] = { 'e', 'n', 't' }; +static symbol s_19[] = { 'i', 'z', 'e' }; +static symbol s_20[] = { 'a', 't', 'e' }; +static symbol s_21[] = { 'a', 'l' }; +static symbol s_22[] = { 'f', 'u', 'l' }; +static symbol s_23[] = { 'o', 'u', 's' }; +static symbol s_24[] = { 'i', 'v', 'e' }; +static symbol s_25[] = { 'b', 'l', 'e' }; +static symbol s_26[] = { 'l' }; +static symbol s_27[] = { 'o', 'g' }; +static symbol s_28[] = { 'f', 'u', 'l' }; +static symbol s_29[] = { 'l', 'e', 's', 's' }; +static symbol s_30[] = { 't', 'i', 'o', 'n' }; +static symbol s_31[] = { 'a', 't', 'e' }; +static symbol s_32[] = { 'a', 'l' }; +static symbol s_33[] = { 'i', 'c' }; +static symbol s_34[] = { 's' }; +static symbol s_35[] = { 't' }; +static symbol s_36[] = { 'l' }; +static symbol s_37[] = { 's', 'k', 'i' }; +static symbol s_38[] = { 's', 'k', 'y' }; +static symbol s_39[] = { 'd', 'i', 'e' }; +static symbol s_40[] = { 'l', 'i', 'e' }; +static symbol s_41[] = { 't', 'i', 'e' }; +static symbol s_42[] = { 'i', 'd', 'l' }; +static symbol s_43[] = { 'g', 'e', 'n', 't', 'l' }; +static symbol s_44[] = { 'u', 'g', 'l', 'i' }; +static symbol s_45[] = { 'e', 'a', 'r', 'l', 'i' }; +static symbol s_46[] = { 'o', 'n', 'l', 'i' }; +static symbol s_47[] = { 's', 'i', 'n', 'g', 'l' }; +static symbol s_48[] = { 'Y' }; +static symbol s_49[] = { 'y' }; + +static int r_prelude(struct SN_env * z) { + z->B[0] = 0; /* unset Y_found, line 26 */ + { int c = z->c; /* do, line 27 */ + z->bra = z->c; /* [, line 27 */ + if (!(eq_s(z, 1, s_0))) goto lab0; + z->ket = z->c; /* ], line 27 */ + { int ret; + ret = slice_del(z); /* delete, line 27 */ + if (ret < 0) return ret; + } + lab0: + z->c = c; + } + { int c = z->c; /* do, line 28 */ + z->bra = z->c; /* [, line 28 */ + if (!(eq_s(z, 1, s_1))) goto lab1; + z->ket = z->c; /* ], line 28 */ + if (!(in_grouping_U(z, g_v, 97, 121))) goto lab1; + { int ret; + ret = slice_from_s(z, 1, s_2); /* <-, line 28 */ + if (ret < 0) return ret; + } + z->B[0] = 1; /* set Y_found, line 28 */ + lab1: + z->c = c; + } + { int c = z->c; /* do, line 29 */ + while(1) { /* repeat, line 29 */ + int c = z->c; + while(1) { /* goto, line 29 */ + int c = z->c; + if (!(in_grouping_U(z, g_v, 97, 121))) goto lab4; + z->bra = z->c; /* [, line 29 */ + if (!(eq_s(z, 1, s_3))) goto lab4; + z->ket = z->c; /* ], line 29 */ + z->c = c; + break; + lab4: + z->c = c; + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab3; + z->c = c; /* goto, line 29 */ + } + } + { int ret; + ret = slice_from_s(z, 1, s_4); /* <-, line 29 */ + if (ret < 0) return ret; + } + z->B[0] = 1; /* set Y_found, line 29 */ + continue; + lab3: + z->c = c; + break; + } + z->c = c; + } + return 1; +} + +static int r_mark_regions(struct SN_env * z) { + z->I[0] = z->l; + z->I[1] = z->l; + { int c = z->c; /* do, line 35 */ + { int c = z->c; /* or, line 40 */ + if (!(find_among(z, a_0, 2))) goto lab2; /* among, line 36 */ + goto lab1; + lab2: + z->c = c; + while(1) { /* gopast, line 40 */ + if (!(in_grouping_U(z, g_v, 97, 121))) goto lab3; + break; + lab3: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab0; + z->c = c; /* gopast, line 40 */ + } + } + while(1) { /* gopast, line 40 */ + if (!(out_grouping_U(z, g_v, 97, 121))) goto lab4; + break; + lab4: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab0; + z->c = c; /* gopast, line 40 */ + } + } + } + lab1: + z->I[0] = z->c; /* setmark p1, line 41 */ + while(1) { /* gopast, line 42 */ + if (!(in_grouping_U(z, g_v, 97, 121))) goto lab5; + break; + lab5: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab0; + z->c = c; /* gopast, line 42 */ + } + } + while(1) { /* gopast, line 42 */ + if (!(out_grouping_U(z, g_v, 97, 121))) goto lab6; + break; + lab6: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab0; + z->c = c; /* gopast, line 42 */ + } + } + z->I[1] = z->c; /* setmark p2, line 42 */ + lab0: + z->c = c; + } + return 1; +} + +static int r_shortv(struct SN_env * z) { + { int m = z->l - z->c; (void) m; /* or, line 50 */ + if (!(out_grouping_b_U(z, g_v_WXY, 89, 121))) goto lab1; + if (!(in_grouping_b_U(z, g_v, 97, 121))) goto lab1; + if (!(out_grouping_b_U(z, g_v, 97, 121))) goto lab1; + goto lab0; + lab1: + z->c = z->l - m; + if (!(out_grouping_b_U(z, g_v, 97, 121))) return 0; + if (!(in_grouping_b_U(z, g_v, 97, 121))) return 0; + if (z->c > z->lb) return 0; /* atlimit, line 51 */ + } +lab0: + return 1; +} + +static int r_R1(struct SN_env * z) { + if (!(z->I[0] <= z->c)) return 0; + return 1; +} + +static int r_R2(struct SN_env * z) { + if (!(z->I[1] <= z->c)) return 0; + return 1; +} + +static int r_Step_1a(struct SN_env * z) { + int among_var; + { int m = z->l - z->c; (void) m; /* try, line 58 */ + z->ket = z->c; /* [, line 59 */ + among_var = find_among_b(z, a_1, 3); /* substring, line 59 */ + if (!(among_var)) { z->c = z->l - m; goto lab0; } + z->bra = z->c; /* ], line 59 */ + switch(among_var) { + case 0: { z->c = z->l - m; goto lab0; } + case 1: + { int ret; + ret = slice_del(z); /* delete, line 61 */ + if (ret < 0) return ret; + } + break; + } + lab0: + ; + } + z->ket = z->c; /* [, line 64 */ + among_var = find_among_b(z, a_2, 6); /* substring, line 64 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 64 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_from_s(z, 2, s_5); /* <-, line 65 */ + if (ret < 0) return ret; + } + break; + case 2: + { int m = z->l - z->c; (void) m; /* or, line 67 */ + { int c = skip_utf8(z->p, z->c, z->lb, 0, -1); + if (c < 0) goto lab2; + z->c = c; /* next, line 67 */ + } + if (z->c > z->lb) goto lab2; /* atlimit, line 67 */ + { int ret; + ret = slice_from_s(z, 2, s_6); /* <-, line 67 */ + if (ret < 0) return ret; + } + goto lab1; + lab2: + z->c = z->l - m; + { int ret; + ret = slice_from_s(z, 1, s_7); /* <-, line 67 */ + if (ret < 0) return ret; + } + } + lab1: + break; + case 3: + { int c = skip_utf8(z->p, z->c, z->lb, 0, -1); + if (c < 0) return 0; + z->c = c; /* next, line 68 */ + } + while(1) { /* gopast, line 68 */ + if (!(in_grouping_b_U(z, g_v, 97, 121))) goto lab3; + break; + lab3: + { int c = skip_utf8(z->p, z->c, z->lb, 0, -1); + if (c < 0) return 0; + z->c = c; /* gopast, line 68 */ + } + } + { int ret; + ret = slice_del(z); /* delete, line 68 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_Step_1b(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 74 */ + among_var = find_among_b(z, a_4, 6); /* substring, line 74 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 74 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 76 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 2, s_8); /* <-, line 76 */ + if (ret < 0) return ret; + } + break; + case 2: + { int m_test = z->l - z->c; /* test, line 79 */ + while(1) { /* gopast, line 79 */ + if (!(in_grouping_b_U(z, g_v, 97, 121))) goto lab0; + break; + lab0: + { int c = skip_utf8(z->p, z->c, z->lb, 0, -1); + if (c < 0) return 0; + z->c = c; /* gopast, line 79 */ + } + } + z->c = z->l - m_test; + } + { int ret; + ret = slice_del(z); /* delete, line 79 */ + if (ret < 0) return ret; + } + { int m_test = z->l - z->c; /* test, line 80 */ + among_var = find_among_b(z, a_3, 13); /* substring, line 80 */ + if (!(among_var)) return 0; + z->c = z->l - m_test; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + { int c = z->c; + ret = insert_s(z, z->c, z->c, 1, s_9); /* <+, line 82 */ + z->c = c; + } + if (ret < 0) return ret; + } + break; + case 2: + z->ket = z->c; /* [, line 85 */ + { int c = skip_utf8(z->p, z->c, z->lb, 0, -1); + if (c < 0) return 0; + z->c = c; /* next, line 85 */ + } + z->bra = z->c; /* ], line 85 */ + { int ret; + ret = slice_del(z); /* delete, line 85 */ + if (ret < 0) return ret; + } + break; + case 3: + if (z->c != z->I[0]) return 0; /* atmark, line 86 */ + { int m_test = z->l - z->c; /* test, line 86 */ + { int ret = r_shortv(z); + if (ret == 0) return 0; /* call shortv, line 86 */ + if (ret < 0) return ret; + } + z->c = z->l - m_test; + } + { int ret; + { int c = z->c; + ret = insert_s(z, z->c, z->c, 1, s_10); /* <+, line 86 */ + z->c = c; + } + if (ret < 0) return ret; + } + break; + } + break; + } + return 1; +} + +static int r_Step_1c(struct SN_env * z) { + z->ket = z->c; /* [, line 93 */ + { int m = z->l - z->c; (void) m; /* or, line 93 */ + if (!(eq_s_b(z, 1, s_11))) goto lab1; + goto lab0; + lab1: + z->c = z->l - m; + if (!(eq_s_b(z, 1, s_12))) return 0; + } +lab0: + z->bra = z->c; /* ], line 93 */ + if (!(out_grouping_b_U(z, g_v, 97, 121))) return 0; + { int m = z->l - z->c; (void) m; /* not, line 94 */ + if (z->c > z->lb) goto lab2; /* atlimit, line 94 */ + return 0; + lab2: + z->c = z->l - m; + } + { int ret; + ret = slice_from_s(z, 1, s_13); /* <-, line 95 */ + if (ret < 0) return ret; + } + return 1; +} + +static int r_Step_2(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 99 */ + among_var = find_among_b(z, a_5, 24); /* substring, line 99 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 99 */ + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 99 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_from_s(z, 4, s_14); /* <-, line 100 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 4, s_15); /* <-, line 101 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_from_s(z, 4, s_16); /* <-, line 102 */ + if (ret < 0) return ret; + } + break; + case 4: + { int ret; + ret = slice_from_s(z, 4, s_17); /* <-, line 103 */ + if (ret < 0) return ret; + } + break; + case 5: + { int ret; + ret = slice_from_s(z, 3, s_18); /* <-, line 104 */ + if (ret < 0) return ret; + } + break; + case 6: + { int ret; + ret = slice_from_s(z, 3, s_19); /* <-, line 106 */ + if (ret < 0) return ret; + } + break; + case 7: + { int ret; + ret = slice_from_s(z, 3, s_20); /* <-, line 108 */ + if (ret < 0) return ret; + } + break; + case 8: + { int ret; + ret = slice_from_s(z, 2, s_21); /* <-, line 110 */ + if (ret < 0) return ret; + } + break; + case 9: + { int ret; + ret = slice_from_s(z, 3, s_22); /* <-, line 111 */ + if (ret < 0) return ret; + } + break; + case 10: + { int ret; + ret = slice_from_s(z, 3, s_23); /* <-, line 113 */ + if (ret < 0) return ret; + } + break; + case 11: + { int ret; + ret = slice_from_s(z, 3, s_24); /* <-, line 115 */ + if (ret < 0) return ret; + } + break; + case 12: + { int ret; + ret = slice_from_s(z, 3, s_25); /* <-, line 117 */ + if (ret < 0) return ret; + } + break; + case 13: + if (!(eq_s_b(z, 1, s_26))) return 0; + { int ret; + ret = slice_from_s(z, 2, s_27); /* <-, line 118 */ + if (ret < 0) return ret; + } + break; + case 14: + { int ret; + ret = slice_from_s(z, 3, s_28); /* <-, line 119 */ + if (ret < 0) return ret; + } + break; + case 15: + { int ret; + ret = slice_from_s(z, 4, s_29); /* <-, line 120 */ + if (ret < 0) return ret; + } + break; + case 16: + if (!(in_grouping_b_U(z, g_valid_LI, 99, 116))) return 0; + { int ret; + ret = slice_del(z); /* delete, line 121 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_Step_3(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 126 */ + among_var = find_among_b(z, a_6, 9); /* substring, line 126 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 126 */ + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 126 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_from_s(z, 4, s_30); /* <-, line 127 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 3, s_31); /* <-, line 128 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_from_s(z, 2, s_32); /* <-, line 129 */ + if (ret < 0) return ret; + } + break; + case 4: + { int ret; + ret = slice_from_s(z, 2, s_33); /* <-, line 131 */ + if (ret < 0) return ret; + } + break; + case 5: + { int ret; + ret = slice_del(z); /* delete, line 133 */ + if (ret < 0) return ret; + } + break; + case 6: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 135 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 135 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_Step_4(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 140 */ + among_var = find_among_b(z, a_7, 18); /* substring, line 140 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 140 */ + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 140 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 143 */ + if (ret < 0) return ret; + } + break; + case 2: + { int m = z->l - z->c; (void) m; /* or, line 144 */ + if (!(eq_s_b(z, 1, s_34))) goto lab1; + goto lab0; + lab1: + z->c = z->l - m; + if (!(eq_s_b(z, 1, s_35))) return 0; + } + lab0: + { int ret; + ret = slice_del(z); /* delete, line 144 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_Step_5(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 149 */ + among_var = find_among_b(z, a_8, 2); /* substring, line 149 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 149 */ + switch(among_var) { + case 0: return 0; + case 1: + { int m = z->l - z->c; (void) m; /* or, line 150 */ + { int ret = r_R2(z); + if (ret == 0) goto lab1; /* call R2, line 150 */ + if (ret < 0) return ret; + } + goto lab0; + lab1: + z->c = z->l - m; + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 150 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* not, line 150 */ + { int ret = r_shortv(z); + if (ret == 0) goto lab2; /* call shortv, line 150 */ + if (ret < 0) return ret; + } + return 0; + lab2: + z->c = z->l - m; + } + } + lab0: + { int ret; + ret = slice_del(z); /* delete, line 150 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 151 */ + if (ret < 0) return ret; + } + if (!(eq_s_b(z, 1, s_36))) return 0; + { int ret; + ret = slice_del(z); /* delete, line 151 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_exception2(struct SN_env * z) { + z->ket = z->c; /* [, line 157 */ + if (!(find_among_b(z, a_9, 8))) return 0; /* substring, line 157 */ + z->bra = z->c; /* ], line 157 */ + if (z->c > z->lb) return 0; /* atlimit, line 157 */ + return 1; +} + +static int r_exception1(struct SN_env * z) { + int among_var; + z->bra = z->c; /* [, line 169 */ + among_var = find_among(z, a_10, 18); /* substring, line 169 */ + if (!(among_var)) return 0; + z->ket = z->c; /* ], line 169 */ + if (z->c < z->l) return 0; /* atlimit, line 169 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_from_s(z, 3, s_37); /* <-, line 173 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 3, s_38); /* <-, line 174 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_from_s(z, 3, s_39); /* <-, line 175 */ + if (ret < 0) return ret; + } + break; + case 4: + { int ret; + ret = slice_from_s(z, 3, s_40); /* <-, line 176 */ + if (ret < 0) return ret; + } + break; + case 5: + { int ret; + ret = slice_from_s(z, 3, s_41); /* <-, line 177 */ + if (ret < 0) return ret; + } + break; + case 6: + { int ret; + ret = slice_from_s(z, 3, s_42); /* <-, line 181 */ + if (ret < 0) return ret; + } + break; + case 7: + { int ret; + ret = slice_from_s(z, 5, s_43); /* <-, line 182 */ + if (ret < 0) return ret; + } + break; + case 8: + { int ret; + ret = slice_from_s(z, 4, s_44); /* <-, line 183 */ + if (ret < 0) return ret; + } + break; + case 9: + { int ret; + ret = slice_from_s(z, 5, s_45); /* <-, line 184 */ + if (ret < 0) return ret; + } + break; + case 10: + { int ret; + ret = slice_from_s(z, 4, s_46); /* <-, line 185 */ + if (ret < 0) return ret; + } + break; + case 11: + { int ret; + ret = slice_from_s(z, 5, s_47); /* <-, line 186 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_postlude(struct SN_env * z) { + if (!(z->B[0])) return 0; /* Boolean test Y_found, line 202 */ + while(1) { /* repeat, line 202 */ + int c = z->c; + while(1) { /* goto, line 202 */ + int c = z->c; + z->bra = z->c; /* [, line 202 */ + if (!(eq_s(z, 1, s_48))) goto lab1; + z->ket = z->c; /* ], line 202 */ + z->c = c; + break; + lab1: + z->c = c; + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab0; + z->c = c; /* goto, line 202 */ + } + } + { int ret; + ret = slice_from_s(z, 1, s_49); /* <-, line 202 */ + if (ret < 0) return ret; + } + continue; + lab0: + z->c = c; + break; + } + return 1; +} + +extern int english_UTF_8_stem(struct SN_env * z) { + { int c = z->c; /* or, line 206 */ + { int ret = r_exception1(z); + if (ret == 0) goto lab1; /* call exception1, line 206 */ + if (ret < 0) return ret; + } + goto lab0; + lab1: + z->c = c; + { int c = z->c; /* not, line 207 */ + { int c = skip_utf8(z->p, z->c, 0, z->l, + 3); + if (c < 0) goto lab3; + z->c = c; /* hop, line 207 */ + } + goto lab2; + lab3: + z->c = c; + } + goto lab0; + lab2: + z->c = c; + { int c = z->c; /* do, line 208 */ + { int ret = r_prelude(z); + if (ret == 0) goto lab4; /* call prelude, line 208 */ + if (ret < 0) return ret; + } + lab4: + z->c = c; + } + { int c = z->c; /* do, line 209 */ + { int ret = r_mark_regions(z); + if (ret == 0) goto lab5; /* call mark_regions, line 209 */ + if (ret < 0) return ret; + } + lab5: + z->c = c; + } + z->lb = z->c; z->c = z->l; /* backwards, line 210 */ + + { int m = z->l - z->c; (void) m; /* do, line 212 */ + { int ret = r_Step_1a(z); + if (ret == 0) goto lab6; /* call Step_1a, line 212 */ + if (ret < 0) return ret; + } + lab6: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* or, line 214 */ + { int ret = r_exception2(z); + if (ret == 0) goto lab8; /* call exception2, line 214 */ + if (ret < 0) return ret; + } + goto lab7; + lab8: + z->c = z->l - m; + { int m = z->l - z->c; (void) m; /* do, line 216 */ + { int ret = r_Step_1b(z); + if (ret == 0) goto lab9; /* call Step_1b, line 216 */ + if (ret < 0) return ret; + } + lab9: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 217 */ + { int ret = r_Step_1c(z); + if (ret == 0) goto lab10; /* call Step_1c, line 217 */ + if (ret < 0) return ret; + } + lab10: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 219 */ + { int ret = r_Step_2(z); + if (ret == 0) goto lab11; /* call Step_2, line 219 */ + if (ret < 0) return ret; + } + lab11: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 220 */ + { int ret = r_Step_3(z); + if (ret == 0) goto lab12; /* call Step_3, line 220 */ + if (ret < 0) return ret; + } + lab12: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 221 */ + { int ret = r_Step_4(z); + if (ret == 0) goto lab13; /* call Step_4, line 221 */ + if (ret < 0) return ret; + } + lab13: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 223 */ + { int ret = r_Step_5(z); + if (ret == 0) goto lab14; /* call Step_5, line 223 */ + if (ret < 0) return ret; + } + lab14: + z->c = z->l - m; + } + } + lab7: + z->c = z->lb; + { int c = z->c; /* do, line 226 */ + { int ret = r_postlude(z); + if (ret == 0) goto lab15; /* call postlude, line 226 */ + if (ret < 0) return ret; + } + lab15: + z->c = c; + } + } +lab0: + return 1; +} + +extern struct SN_env * english_UTF_8_create_env(void) { return SN_create_env(0, 2, 1); } + +extern void english_UTF_8_close_env(struct SN_env * z) { SN_close_env(z); } + diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_english.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_english.h new file mode 100644 index 0000000..619a8bc --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_english.h @@ -0,0 +1,16 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern struct SN_env * english_UTF_8_create_env(void); +extern void english_UTF_8_close_env(struct SN_env * z); + +extern int english_UTF_8_stem(struct SN_env * z); + +#ifdef __cplusplus +} +#endif + diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_finnish.c b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_finnish.c new file mode 100644 index 0000000..a221be6 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_finnish.c @@ -0,0 +1,808 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#include "../runtime/header.h" + +extern int finnish_UTF_8_stem(struct SN_env * z); +static int r_tidy(struct SN_env * z); +static int r_other_endings(struct SN_env * z); +static int r_t_plural(struct SN_env * z); +static int r_i_plural(struct SN_env * z); +static int r_case_ending(struct SN_env * z); +static int r_VI(struct SN_env * z); +static int r_LONG(struct SN_env * z); +static int r_possessive(struct SN_env * z); +static int r_particle_etc(struct SN_env * z); +static int r_R2(struct SN_env * z); +static int r_mark_regions(struct SN_env * z); + +extern struct SN_env * finnish_UTF_8_create_env(void); +extern void finnish_UTF_8_close_env(struct SN_env * z); + +static symbol s_0_0[2] = { 'p', 'a' }; +static symbol s_0_1[3] = { 's', 't', 'i' }; +static symbol s_0_2[4] = { 'k', 'a', 'a', 'n' }; +static symbol s_0_3[3] = { 'h', 'a', 'n' }; +static symbol s_0_4[3] = { 'k', 'i', 'n' }; +static symbol s_0_5[4] = { 'h', 0xC3, 0xA4, 'n' }; +static symbol s_0_6[6] = { 'k', 0xC3, 0xA4, 0xC3, 0xA4, 'n' }; +static symbol s_0_7[2] = { 'k', 'o' }; +static symbol s_0_8[3] = { 'p', 0xC3, 0xA4 }; +static symbol s_0_9[3] = { 'k', 0xC3, 0xB6 }; + +static struct among a_0[10] = +{ +/* 0 */ { 2, s_0_0, -1, 1, 0}, +/* 1 */ { 3, s_0_1, -1, 2, 0}, +/* 2 */ { 4, s_0_2, -1, 1, 0}, +/* 3 */ { 3, s_0_3, -1, 1, 0}, +/* 4 */ { 3, s_0_4, -1, 1, 0}, +/* 5 */ { 4, s_0_5, -1, 1, 0}, +/* 6 */ { 6, s_0_6, -1, 1, 0}, +/* 7 */ { 2, s_0_7, -1, 1, 0}, +/* 8 */ { 3, s_0_8, -1, 1, 0}, +/* 9 */ { 3, s_0_9, -1, 1, 0} +}; + +static symbol s_1_0[3] = { 'l', 'l', 'a' }; +static symbol s_1_1[2] = { 'n', 'a' }; +static symbol s_1_2[3] = { 's', 's', 'a' }; +static symbol s_1_3[2] = { 't', 'a' }; +static symbol s_1_4[3] = { 'l', 't', 'a' }; +static symbol s_1_5[3] = { 's', 't', 'a' }; + +static struct among a_1[6] = +{ +/* 0 */ { 3, s_1_0, -1, -1, 0}, +/* 1 */ { 2, s_1_1, -1, -1, 0}, +/* 2 */ { 3, s_1_2, -1, -1, 0}, +/* 3 */ { 2, s_1_3, -1, -1, 0}, +/* 4 */ { 3, s_1_4, 3, -1, 0}, +/* 5 */ { 3, s_1_5, 3, -1, 0} +}; + +static symbol s_2_0[4] = { 'l', 'l', 0xC3, 0xA4 }; +static symbol s_2_1[3] = { 'n', 0xC3, 0xA4 }; +static symbol s_2_2[4] = { 's', 's', 0xC3, 0xA4 }; +static symbol s_2_3[3] = { 't', 0xC3, 0xA4 }; +static symbol s_2_4[4] = { 'l', 't', 0xC3, 0xA4 }; +static symbol s_2_5[4] = { 's', 't', 0xC3, 0xA4 }; + +static struct among a_2[6] = +{ +/* 0 */ { 4, s_2_0, -1, -1, 0}, +/* 1 */ { 3, s_2_1, -1, -1, 0}, +/* 2 */ { 4, s_2_2, -1, -1, 0}, +/* 3 */ { 3, s_2_3, -1, -1, 0}, +/* 4 */ { 4, s_2_4, 3, -1, 0}, +/* 5 */ { 4, s_2_5, 3, -1, 0} +}; + +static symbol s_3_0[3] = { 'l', 'l', 'e' }; +static symbol s_3_1[3] = { 'i', 'n', 'e' }; + +static struct among a_3[2] = +{ +/* 0 */ { 3, s_3_0, -1, -1, 0}, +/* 1 */ { 3, s_3_1, -1, -1, 0} +}; + +static symbol s_4_0[3] = { 'n', 's', 'a' }; +static symbol s_4_1[3] = { 'm', 'm', 'e' }; +static symbol s_4_2[3] = { 'n', 'n', 'e' }; +static symbol s_4_3[2] = { 'n', 'i' }; +static symbol s_4_4[2] = { 's', 'i' }; +static symbol s_4_5[2] = { 'a', 'n' }; +static symbol s_4_6[2] = { 'e', 'n' }; +static symbol s_4_7[3] = { 0xC3, 0xA4, 'n' }; +static symbol s_4_8[4] = { 'n', 's', 0xC3, 0xA4 }; + +static struct among a_4[9] = +{ +/* 0 */ { 3, s_4_0, -1, 3, 0}, +/* 1 */ { 3, s_4_1, -1, 3, 0}, +/* 2 */ { 3, s_4_2, -1, 3, 0}, +/* 3 */ { 2, s_4_3, -1, 2, 0}, +/* 4 */ { 2, s_4_4, -1, 1, 0}, +/* 5 */ { 2, s_4_5, -1, 4, 0}, +/* 6 */ { 2, s_4_6, -1, 6, 0}, +/* 7 */ { 3, s_4_7, -1, 5, 0}, +/* 8 */ { 4, s_4_8, -1, 3, 0} +}; + +static symbol s_5_0[2] = { 'a', 'a' }; +static symbol s_5_1[2] = { 'e', 'e' }; +static symbol s_5_2[2] = { 'i', 'i' }; +static symbol s_5_3[2] = { 'o', 'o' }; +static symbol s_5_4[2] = { 'u', 'u' }; +static symbol s_5_5[4] = { 0xC3, 0xA4, 0xC3, 0xA4 }; +static symbol s_5_6[4] = { 0xC3, 0xB6, 0xC3, 0xB6 }; + +static struct among a_5[7] = +{ +/* 0 */ { 2, s_5_0, -1, -1, 0}, +/* 1 */ { 2, s_5_1, -1, -1, 0}, +/* 2 */ { 2, s_5_2, -1, -1, 0}, +/* 3 */ { 2, s_5_3, -1, -1, 0}, +/* 4 */ { 2, s_5_4, -1, -1, 0}, +/* 5 */ { 4, s_5_5, -1, -1, 0}, +/* 6 */ { 4, s_5_6, -1, -1, 0} +}; + +static symbol s_6_0[1] = { 'a' }; +static symbol s_6_1[3] = { 'l', 'l', 'a' }; +static symbol s_6_2[2] = { 'n', 'a' }; +static symbol s_6_3[3] = { 's', 's', 'a' }; +static symbol s_6_4[2] = { 't', 'a' }; +static symbol s_6_5[3] = { 'l', 't', 'a' }; +static symbol s_6_6[3] = { 's', 't', 'a' }; +static symbol s_6_7[3] = { 't', 't', 'a' }; +static symbol s_6_8[3] = { 'l', 'l', 'e' }; +static symbol s_6_9[3] = { 'i', 'n', 'e' }; +static symbol s_6_10[3] = { 'k', 's', 'i' }; +static symbol s_6_11[1] = { 'n' }; +static symbol s_6_12[3] = { 'h', 'a', 'n' }; +static symbol s_6_13[3] = { 'd', 'e', 'n' }; +static symbol s_6_14[4] = { 's', 'e', 'e', 'n' }; +static symbol s_6_15[3] = { 'h', 'e', 'n' }; +static symbol s_6_16[4] = { 't', 't', 'e', 'n' }; +static symbol s_6_17[3] = { 'h', 'i', 'n' }; +static symbol s_6_18[4] = { 's', 'i', 'i', 'n' }; +static symbol s_6_19[3] = { 'h', 'o', 'n' }; +static symbol s_6_20[4] = { 'h', 0xC3, 0xA4, 'n' }; +static symbol s_6_21[4] = { 'h', 0xC3, 0xB6, 'n' }; +static symbol s_6_22[2] = { 0xC3, 0xA4 }; +static symbol s_6_23[4] = { 'l', 'l', 0xC3, 0xA4 }; +static symbol s_6_24[3] = { 'n', 0xC3, 0xA4 }; +static symbol s_6_25[4] = { 's', 's', 0xC3, 0xA4 }; +static symbol s_6_26[3] = { 't', 0xC3, 0xA4 }; +static symbol s_6_27[4] = { 'l', 't', 0xC3, 0xA4 }; +static symbol s_6_28[4] = { 's', 't', 0xC3, 0xA4 }; +static symbol s_6_29[4] = { 't', 't', 0xC3, 0xA4 }; + +static struct among a_6[30] = +{ +/* 0 */ { 1, s_6_0, -1, 8, 0}, +/* 1 */ { 3, s_6_1, 0, -1, 0}, +/* 2 */ { 2, s_6_2, 0, -1, 0}, +/* 3 */ { 3, s_6_3, 0, -1, 0}, +/* 4 */ { 2, s_6_4, 0, -1, 0}, +/* 5 */ { 3, s_6_5, 4, -1, 0}, +/* 6 */ { 3, s_6_6, 4, -1, 0}, +/* 7 */ { 3, s_6_7, 4, 9, 0}, +/* 8 */ { 3, s_6_8, -1, -1, 0}, +/* 9 */ { 3, s_6_9, -1, -1, 0}, +/* 10 */ { 3, s_6_10, -1, -1, 0}, +/* 11 */ { 1, s_6_11, -1, 7, 0}, +/* 12 */ { 3, s_6_12, 11, 1, 0}, +/* 13 */ { 3, s_6_13, 11, -1, r_VI}, +/* 14 */ { 4, s_6_14, 11, -1, r_LONG}, +/* 15 */ { 3, s_6_15, 11, 2, 0}, +/* 16 */ { 4, s_6_16, 11, -1, r_VI}, +/* 17 */ { 3, s_6_17, 11, 3, 0}, +/* 18 */ { 4, s_6_18, 11, -1, r_VI}, +/* 19 */ { 3, s_6_19, 11, 4, 0}, +/* 20 */ { 4, s_6_20, 11, 5, 0}, +/* 21 */ { 4, s_6_21, 11, 6, 0}, +/* 22 */ { 2, s_6_22, -1, 8, 0}, +/* 23 */ { 4, s_6_23, 22, -1, 0}, +/* 24 */ { 3, s_6_24, 22, -1, 0}, +/* 25 */ { 4, s_6_25, 22, -1, 0}, +/* 26 */ { 3, s_6_26, 22, -1, 0}, +/* 27 */ { 4, s_6_27, 26, -1, 0}, +/* 28 */ { 4, s_6_28, 26, -1, 0}, +/* 29 */ { 4, s_6_29, 26, 9, 0} +}; + +static symbol s_7_0[3] = { 'e', 'j', 'a' }; +static symbol s_7_1[3] = { 'm', 'm', 'a' }; +static symbol s_7_2[4] = { 'i', 'm', 'm', 'a' }; +static symbol s_7_3[3] = { 'm', 'p', 'a' }; +static symbol s_7_4[4] = { 'i', 'm', 'p', 'a' }; +static symbol s_7_5[3] = { 'm', 'm', 'i' }; +static symbol s_7_6[4] = { 'i', 'm', 'm', 'i' }; +static symbol s_7_7[3] = { 'm', 'p', 'i' }; +static symbol s_7_8[4] = { 'i', 'm', 'p', 'i' }; +static symbol s_7_9[4] = { 'e', 'j', 0xC3, 0xA4 }; +static symbol s_7_10[4] = { 'm', 'm', 0xC3, 0xA4 }; +static symbol s_7_11[5] = { 'i', 'm', 'm', 0xC3, 0xA4 }; +static symbol s_7_12[4] = { 'm', 'p', 0xC3, 0xA4 }; +static symbol s_7_13[5] = { 'i', 'm', 'p', 0xC3, 0xA4 }; + +static struct among a_7[14] = +{ +/* 0 */ { 3, s_7_0, -1, -1, 0}, +/* 1 */ { 3, s_7_1, -1, 1, 0}, +/* 2 */ { 4, s_7_2, 1, -1, 0}, +/* 3 */ { 3, s_7_3, -1, 1, 0}, +/* 4 */ { 4, s_7_4, 3, -1, 0}, +/* 5 */ { 3, s_7_5, -1, 1, 0}, +/* 6 */ { 4, s_7_6, 5, -1, 0}, +/* 7 */ { 3, s_7_7, -1, 1, 0}, +/* 8 */ { 4, s_7_8, 7, -1, 0}, +/* 9 */ { 4, s_7_9, -1, -1, 0}, +/* 10 */ { 4, s_7_10, -1, 1, 0}, +/* 11 */ { 5, s_7_11, 10, -1, 0}, +/* 12 */ { 4, s_7_12, -1, 1, 0}, +/* 13 */ { 5, s_7_13, 12, -1, 0} +}; + +static symbol s_8_0[1] = { 'i' }; +static symbol s_8_1[1] = { 'j' }; + +static struct among a_8[2] = +{ +/* 0 */ { 1, s_8_0, -1, -1, 0}, +/* 1 */ { 1, s_8_1, -1, -1, 0} +}; + +static symbol s_9_0[3] = { 'm', 'm', 'a' }; +static symbol s_9_1[4] = { 'i', 'm', 'm', 'a' }; + +static struct among a_9[2] = +{ +/* 0 */ { 3, s_9_0, -1, 1, 0}, +/* 1 */ { 4, s_9_1, 0, -1, 0} +}; + +static unsigned char g_AEI[] = { 17, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8 }; + +static unsigned char g_V1[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 32 }; + +static unsigned char g_V2[] = { 17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 32 }; + +static unsigned char g_particle_end[] = { 17, 97, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 32 }; + +static symbol s_0[] = { 'k' }; +static symbol s_1[] = { 'k', 's', 'e' }; +static symbol s_2[] = { 'k', 's', 'i' }; +static symbol s_3[] = { 'i' }; +static symbol s_4[] = { 'a' }; +static symbol s_5[] = { 'e' }; +static symbol s_6[] = { 'i' }; +static symbol s_7[] = { 'o' }; +static symbol s_8[] = { 0xC3, 0xA4 }; +static symbol s_9[] = { 0xC3, 0xB6 }; +static symbol s_10[] = { 'i', 'e' }; +static symbol s_11[] = { 'e' }; +static symbol s_12[] = { 'p', 'o' }; +static symbol s_13[] = { 't' }; +static symbol s_14[] = { 'p', 'o' }; +static symbol s_15[] = { 'j' }; +static symbol s_16[] = { 'o' }; +static symbol s_17[] = { 'u' }; +static symbol s_18[] = { 'o' }; +static symbol s_19[] = { 'j' }; + +static int r_mark_regions(struct SN_env * z) { + z->I[0] = z->l; + z->I[1] = z->l; + while(1) { /* goto, line 46 */ + int c = z->c; + if (!(in_grouping_U(z, g_V1, 97, 246))) goto lab0; + z->c = c; + break; + lab0: + z->c = c; + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) return 0; + z->c = c; /* goto, line 46 */ + } + } + while(1) { /* gopast, line 46 */ + if (!(out_grouping_U(z, g_V1, 97, 246))) goto lab1; + break; + lab1: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) return 0; + z->c = c; /* gopast, line 46 */ + } + } + z->I[0] = z->c; /* setmark p1, line 46 */ + while(1) { /* goto, line 47 */ + int c = z->c; + if (!(in_grouping_U(z, g_V1, 97, 246))) goto lab2; + z->c = c; + break; + lab2: + z->c = c; + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) return 0; + z->c = c; /* goto, line 47 */ + } + } + while(1) { /* gopast, line 47 */ + if (!(out_grouping_U(z, g_V1, 97, 246))) goto lab3; + break; + lab3: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) return 0; + z->c = c; /* gopast, line 47 */ + } + } + z->I[1] = z->c; /* setmark p2, line 47 */ + return 1; +} + +static int r_R2(struct SN_env * z) { + if (!(z->I[1] <= z->c)) return 0; + return 1; +} + +static int r_particle_etc(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 55 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 55 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 55 */ + among_var = find_among_b(z, a_0, 10); /* substring, line 55 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 55 */ + z->lb = m3; + } + switch(among_var) { + case 0: return 0; + case 1: + if (!(in_grouping_b_U(z, g_particle_end, 97, 246))) return 0; + break; + case 2: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 64 */ + if (ret < 0) return ret; + } + break; + } + { int ret; + ret = slice_del(z); /* delete, line 66 */ + if (ret < 0) return ret; + } + return 1; +} + +static int r_possessive(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 69 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 69 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 69 */ + among_var = find_among_b(z, a_4, 9); /* substring, line 69 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 69 */ + z->lb = m3; + } + switch(among_var) { + case 0: return 0; + case 1: + { int m = z->l - z->c; (void) m; /* not, line 72 */ + if (!(eq_s_b(z, 1, s_0))) goto lab0; + return 0; + lab0: + z->c = z->l - m; + } + { int ret; + ret = slice_del(z); /* delete, line 72 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_del(z); /* delete, line 74 */ + if (ret < 0) return ret; + } + z->ket = z->c; /* [, line 74 */ + if (!(eq_s_b(z, 3, s_1))) return 0; + z->bra = z->c; /* ], line 74 */ + { int ret; + ret = slice_from_s(z, 3, s_2); /* <-, line 74 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_del(z); /* delete, line 78 */ + if (ret < 0) return ret; + } + break; + case 4: + if (!(find_among_b(z, a_1, 6))) return 0; /* among, line 81 */ + { int ret; + ret = slice_del(z); /* delete, line 81 */ + if (ret < 0) return ret; + } + break; + case 5: + if (!(find_among_b(z, a_2, 6))) return 0; /* among, line 83 */ + { int ret; + ret = slice_del(z); /* delete, line 84 */ + if (ret < 0) return ret; + } + break; + case 6: + if (!(find_among_b(z, a_3, 2))) return 0; /* among, line 86 */ + { int ret; + ret = slice_del(z); /* delete, line 86 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_LONG(struct SN_env * z) { + if (!(find_among_b(z, a_5, 7))) return 0; /* among, line 91 */ + return 1; +} + +static int r_VI(struct SN_env * z) { + if (!(eq_s_b(z, 1, s_3))) return 0; + if (!(in_grouping_b_U(z, g_V2, 97, 246))) return 0; + return 1; +} + +static int r_case_ending(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 96 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 96 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 96 */ + among_var = find_among_b(z, a_6, 30); /* substring, line 96 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 96 */ + z->lb = m3; + } + switch(among_var) { + case 0: return 0; + case 1: + if (!(eq_s_b(z, 1, s_4))) return 0; + break; + case 2: + if (!(eq_s_b(z, 1, s_5))) return 0; + break; + case 3: + if (!(eq_s_b(z, 1, s_6))) return 0; + break; + case 4: + if (!(eq_s_b(z, 1, s_7))) return 0; + break; + case 5: + if (!(eq_s_b(z, 2, s_8))) return 0; + break; + case 6: + if (!(eq_s_b(z, 2, s_9))) return 0; + break; + case 7: + { int m = z->l - z->c; (void) m; /* try, line 111 */ + { int m = z->l - z->c; (void) m; /* and, line 113 */ + { int m = z->l - z->c; (void) m; /* or, line 112 */ + { int ret = r_LONG(z); + if (ret == 0) goto lab2; /* call LONG, line 111 */ + if (ret < 0) return ret; + } + goto lab1; + lab2: + z->c = z->l - m; + if (!(eq_s_b(z, 2, s_10))) { z->c = z->l - m; goto lab0; } + } + lab1: + z->c = z->l - m; + { int c = skip_utf8(z->p, z->c, z->lb, 0, -1); + if (c < 0) { z->c = z->l - m; goto lab0; } + z->c = c; /* next, line 113 */ + } + } + z->bra = z->c; /* ], line 113 */ + lab0: + ; + } + break; + case 8: + if (!(in_grouping_b_U(z, g_V1, 97, 246))) return 0; + if (!(out_grouping_b_U(z, g_V1, 97, 246))) return 0; + break; + case 9: + if (!(eq_s_b(z, 1, s_11))) return 0; + break; + } + { int ret; + ret = slice_del(z); /* delete, line 138 */ + if (ret < 0) return ret; + } + z->B[0] = 1; /* set ending_removed, line 139 */ + return 1; +} + +static int r_other_endings(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 142 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[1]) return 0; + z->c = z->I[1]; /* tomark, line 142 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 142 */ + among_var = find_among_b(z, a_7, 14); /* substring, line 142 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 142 */ + z->lb = m3; + } + switch(among_var) { + case 0: return 0; + case 1: + { int m = z->l - z->c; (void) m; /* not, line 146 */ + if (!(eq_s_b(z, 2, s_12))) goto lab0; + return 0; + lab0: + z->c = z->l - m; + } + break; + } + { int ret; + ret = slice_del(z); /* delete, line 151 */ + if (ret < 0) return ret; + } + return 1; +} + +static int r_i_plural(struct SN_env * z) { + { int m3; /* setlimit, line 154 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 154 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 154 */ + if (!(find_among_b(z, a_8, 2))) { z->lb = m3; return 0; } /* substring, line 154 */ + z->bra = z->c; /* ], line 154 */ + z->lb = m3; + } + { int ret; + ret = slice_del(z); /* delete, line 158 */ + if (ret < 0) return ret; + } + return 1; +} + +static int r_t_plural(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 161 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 161 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 162 */ + if (!(eq_s_b(z, 1, s_13))) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 162 */ + { int m_test = z->l - z->c; /* test, line 162 */ + if (!(in_grouping_b_U(z, g_V1, 97, 246))) { z->lb = m3; return 0; } + z->c = z->l - m_test; + } + { int ret; + ret = slice_del(z); /* delete, line 163 */ + if (ret < 0) return ret; + } + z->lb = m3; + } + { int m3; /* setlimit, line 165 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[1]) return 0; + z->c = z->I[1]; /* tomark, line 165 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 165 */ + among_var = find_among_b(z, a_9, 2); /* substring, line 165 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 165 */ + z->lb = m3; + } + switch(among_var) { + case 0: return 0; + case 1: + { int m = z->l - z->c; (void) m; /* not, line 167 */ + if (!(eq_s_b(z, 2, s_14))) goto lab0; + return 0; + lab0: + z->c = z->l - m; + } + break; + } + { int ret; + ret = slice_del(z); /* delete, line 170 */ + if (ret < 0) return ret; + } + return 1; +} + +static int r_tidy(struct SN_env * z) { + { int m3; /* setlimit, line 173 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 173 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + { int m = z->l - z->c; (void) m; /* do, line 174 */ + { int m = z->l - z->c; (void) m; /* and, line 174 */ + { int ret = r_LONG(z); + if (ret == 0) goto lab0; /* call LONG, line 174 */ + if (ret < 0) return ret; + } + z->c = z->l - m; + z->ket = z->c; /* [, line 174 */ + { int c = skip_utf8(z->p, z->c, z->lb, 0, -1); + if (c < 0) goto lab0; + z->c = c; /* next, line 174 */ + } + z->bra = z->c; /* ], line 174 */ + { int ret; + ret = slice_del(z); /* delete, line 174 */ + if (ret < 0) return ret; + } + } + lab0: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 175 */ + z->ket = z->c; /* [, line 175 */ + if (!(in_grouping_b_U(z, g_AEI, 97, 228))) goto lab1; + z->bra = z->c; /* ], line 175 */ + if (!(out_grouping_b_U(z, g_V1, 97, 246))) goto lab1; + { int ret; + ret = slice_del(z); /* delete, line 175 */ + if (ret < 0) return ret; + } + lab1: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 176 */ + z->ket = z->c; /* [, line 176 */ + if (!(eq_s_b(z, 1, s_15))) goto lab2; + z->bra = z->c; /* ], line 176 */ + { int m = z->l - z->c; (void) m; /* or, line 176 */ + if (!(eq_s_b(z, 1, s_16))) goto lab4; + goto lab3; + lab4: + z->c = z->l - m; + if (!(eq_s_b(z, 1, s_17))) goto lab2; + } + lab3: + { int ret; + ret = slice_del(z); /* delete, line 176 */ + if (ret < 0) return ret; + } + lab2: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 177 */ + z->ket = z->c; /* [, line 177 */ + if (!(eq_s_b(z, 1, s_18))) goto lab5; + z->bra = z->c; /* ], line 177 */ + if (!(eq_s_b(z, 1, s_19))) goto lab5; + { int ret; + ret = slice_del(z); /* delete, line 177 */ + if (ret < 0) return ret; + } + lab5: + z->c = z->l - m; + } + z->lb = m3; + } + while(1) { /* goto, line 179 */ + int m = z->l - z->c; (void) m; + if (!(out_grouping_b_U(z, g_V1, 97, 246))) goto lab6; + z->c = z->l - m; + break; + lab6: + z->c = z->l - m; + { int c = skip_utf8(z->p, z->c, z->lb, 0, -1); + if (c < 0) return 0; + z->c = c; /* goto, line 179 */ + } + } + z->ket = z->c; /* [, line 179 */ + { int c = skip_utf8(z->p, z->c, z->lb, 0, -1); + if (c < 0) return 0; + z->c = c; /* next, line 179 */ + } + z->bra = z->c; /* ], line 179 */ + z->S[0] = slice_to(z, z->S[0]); /* -> x, line 179 */ + if (z->S[0] == 0) return -1; /* -> x, line 179 */ + if (!(eq_v_b(z, z->S[0]))) return 0; /* name x, line 179 */ + { int ret; + ret = slice_del(z); /* delete, line 179 */ + if (ret < 0) return ret; + } + return 1; +} + +extern int finnish_UTF_8_stem(struct SN_env * z) { + { int c = z->c; /* do, line 185 */ + { int ret = r_mark_regions(z); + if (ret == 0) goto lab0; /* call mark_regions, line 185 */ + if (ret < 0) return ret; + } + lab0: + z->c = c; + } + z->B[0] = 0; /* unset ending_removed, line 186 */ + z->lb = z->c; z->c = z->l; /* backwards, line 187 */ + + { int m = z->l - z->c; (void) m; /* do, line 188 */ + { int ret = r_particle_etc(z); + if (ret == 0) goto lab1; /* call particle_etc, line 188 */ + if (ret < 0) return ret; + } + lab1: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 189 */ + { int ret = r_possessive(z); + if (ret == 0) goto lab2; /* call possessive, line 189 */ + if (ret < 0) return ret; + } + lab2: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 190 */ + { int ret = r_case_ending(z); + if (ret == 0) goto lab3; /* call case_ending, line 190 */ + if (ret < 0) return ret; + } + lab3: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 191 */ + { int ret = r_other_endings(z); + if (ret == 0) goto lab4; /* call other_endings, line 191 */ + if (ret < 0) return ret; + } + lab4: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* or, line 192 */ + if (!(z->B[0])) goto lab6; /* Boolean test ending_removed, line 192 */ + { int m = z->l - z->c; (void) m; /* do, line 192 */ + { int ret = r_i_plural(z); + if (ret == 0) goto lab7; /* call i_plural, line 192 */ + if (ret < 0) return ret; + } + lab7: + z->c = z->l - m; + } + goto lab5; + lab6: + z->c = z->l - m; + { int m = z->l - z->c; (void) m; /* do, line 192 */ + { int ret = r_t_plural(z); + if (ret == 0) goto lab8; /* call t_plural, line 192 */ + if (ret < 0) return ret; + } + lab8: + z->c = z->l - m; + } + } +lab5: + { int m = z->l - z->c; (void) m; /* do, line 193 */ + { int ret = r_tidy(z); + if (ret == 0) goto lab9; /* call tidy, line 193 */ + if (ret < 0) return ret; + } + lab9: + z->c = z->l - m; + } + z->c = z->lb; + return 1; +} + +extern struct SN_env * finnish_UTF_8_create_env(void) { return SN_create_env(1, 2, 1); } + +extern void finnish_UTF_8_close_env(struct SN_env * z) { SN_close_env(z); } + diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_finnish.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_finnish.h new file mode 100644 index 0000000..d2f2fd9 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_finnish.h @@ -0,0 +1,16 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern struct SN_env * finnish_UTF_8_create_env(void); +extern void finnish_UTF_8_close_env(struct SN_env * z); + +extern int finnish_UTF_8_stem(struct SN_env * z); + +#ifdef __cplusplus +} +#endif + diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_french.c b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_french.c new file mode 100644 index 0000000..1f95c7c --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_french.c @@ -0,0 +1,1296 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#include "../runtime/header.h" + +extern int french_UTF_8_stem(struct SN_env * z); +static int r_un_accent(struct SN_env * z); +static int r_un_double(struct SN_env * z); +static int r_residual_suffix(struct SN_env * z); +static int r_verb_suffix(struct SN_env * z); +static int r_i_verb_suffix(struct SN_env * z); +static int r_standard_suffix(struct SN_env * z); +static int r_R2(struct SN_env * z); +static int r_R1(struct SN_env * z); +static int r_RV(struct SN_env * z); +static int r_mark_regions(struct SN_env * z); +static int r_postlude(struct SN_env * z); +static int r_prelude(struct SN_env * z); + +extern struct SN_env * french_UTF_8_create_env(void); +extern void french_UTF_8_close_env(struct SN_env * z); + +static symbol s_0_1[1] = { 'I' }; +static symbol s_0_2[1] = { 'U' }; +static symbol s_0_3[1] = { 'Y' }; + +static struct among a_0[4] = +{ +/* 0 */ { 0, 0, -1, 4, 0}, +/* 1 */ { 1, s_0_1, 0, 1, 0}, +/* 2 */ { 1, s_0_2, 0, 2, 0}, +/* 3 */ { 1, s_0_3, 0, 3, 0} +}; + +static symbol s_1_0[3] = { 'i', 'q', 'U' }; +static symbol s_1_1[3] = { 'a', 'b', 'l' }; +static symbol s_1_2[4] = { 'I', 0xC3, 0xA8, 'r' }; +static symbol s_1_3[4] = { 'i', 0xC3, 0xA8, 'r' }; +static symbol s_1_4[3] = { 'e', 'u', 's' }; +static symbol s_1_5[2] = { 'i', 'v' }; + +static struct among a_1[6] = +{ +/* 0 */ { 3, s_1_0, -1, 3, 0}, +/* 1 */ { 3, s_1_1, -1, 3, 0}, +/* 2 */ { 4, s_1_2, -1, 4, 0}, +/* 3 */ { 4, s_1_3, -1, 4, 0}, +/* 4 */ { 3, s_1_4, -1, 2, 0}, +/* 5 */ { 2, s_1_5, -1, 1, 0} +}; + +static symbol s_2_0[2] = { 'i', 'c' }; +static symbol s_2_1[4] = { 'a', 'b', 'i', 'l' }; +static symbol s_2_2[2] = { 'i', 'v' }; + +static struct among a_2[3] = +{ +/* 0 */ { 2, s_2_0, -1, 2, 0}, +/* 1 */ { 4, s_2_1, -1, 1, 0}, +/* 2 */ { 2, s_2_2, -1, 3, 0} +}; + +static symbol s_3_0[4] = { 'i', 'q', 'U', 'e' }; +static symbol s_3_1[6] = { 'a', 't', 'r', 'i', 'c', 'e' }; +static symbol s_3_2[4] = { 'a', 'n', 'c', 'e' }; +static symbol s_3_3[4] = { 'e', 'n', 'c', 'e' }; +static symbol s_3_4[5] = { 'l', 'o', 'g', 'i', 'e' }; +static symbol s_3_5[4] = { 'a', 'b', 'l', 'e' }; +static symbol s_3_6[4] = { 'i', 's', 'm', 'e' }; +static symbol s_3_7[4] = { 'e', 'u', 's', 'e' }; +static symbol s_3_8[4] = { 'i', 's', 't', 'e' }; +static symbol s_3_9[3] = { 'i', 'v', 'e' }; +static symbol s_3_10[2] = { 'i', 'f' }; +static symbol s_3_11[5] = { 'u', 's', 'i', 'o', 'n' }; +static symbol s_3_12[5] = { 'a', 't', 'i', 'o', 'n' }; +static symbol s_3_13[5] = { 'u', 't', 'i', 'o', 'n' }; +static symbol s_3_14[5] = { 'a', 't', 'e', 'u', 'r' }; +static symbol s_3_15[5] = { 'i', 'q', 'U', 'e', 's' }; +static symbol s_3_16[7] = { 'a', 't', 'r', 'i', 'c', 'e', 's' }; +static symbol s_3_17[5] = { 'a', 'n', 'c', 'e', 's' }; +static symbol s_3_18[5] = { 'e', 'n', 'c', 'e', 's' }; +static symbol s_3_19[6] = { 'l', 'o', 'g', 'i', 'e', 's' }; +static symbol s_3_20[5] = { 'a', 'b', 'l', 'e', 's' }; +static symbol s_3_21[5] = { 'i', 's', 'm', 'e', 's' }; +static symbol s_3_22[5] = { 'e', 'u', 's', 'e', 's' }; +static symbol s_3_23[5] = { 'i', 's', 't', 'e', 's' }; +static symbol s_3_24[4] = { 'i', 'v', 'e', 's' }; +static symbol s_3_25[3] = { 'i', 'f', 's' }; +static symbol s_3_26[6] = { 'u', 's', 'i', 'o', 'n', 's' }; +static symbol s_3_27[6] = { 'a', 't', 'i', 'o', 'n', 's' }; +static symbol s_3_28[6] = { 'u', 't', 'i', 'o', 'n', 's' }; +static symbol s_3_29[6] = { 'a', 't', 'e', 'u', 'r', 's' }; +static symbol s_3_30[5] = { 'm', 'e', 'n', 't', 's' }; +static symbol s_3_31[6] = { 'e', 'm', 'e', 'n', 't', 's' }; +static symbol s_3_32[9] = { 'i', 's', 's', 'e', 'm', 'e', 'n', 't', 's' }; +static symbol s_3_33[5] = { 'i', 't', 0xC3, 0xA9, 's' }; +static symbol s_3_34[4] = { 'm', 'e', 'n', 't' }; +static symbol s_3_35[5] = { 'e', 'm', 'e', 'n', 't' }; +static symbol s_3_36[8] = { 'i', 's', 's', 'e', 'm', 'e', 'n', 't' }; +static symbol s_3_37[6] = { 'a', 'm', 'm', 'e', 'n', 't' }; +static symbol s_3_38[6] = { 'e', 'm', 'm', 'e', 'n', 't' }; +static symbol s_3_39[3] = { 'a', 'u', 'x' }; +static symbol s_3_40[4] = { 'e', 'a', 'u', 'x' }; +static symbol s_3_41[3] = { 'e', 'u', 'x' }; +static symbol s_3_42[4] = { 'i', 't', 0xC3, 0xA9 }; + +static struct among a_3[43] = +{ +/* 0 */ { 4, s_3_0, -1, 1, 0}, +/* 1 */ { 6, s_3_1, -1, 2, 0}, +/* 2 */ { 4, s_3_2, -1, 1, 0}, +/* 3 */ { 4, s_3_3, -1, 5, 0}, +/* 4 */ { 5, s_3_4, -1, 3, 0}, +/* 5 */ { 4, s_3_5, -1, 1, 0}, +/* 6 */ { 4, s_3_6, -1, 1, 0}, +/* 7 */ { 4, s_3_7, -1, 11, 0}, +/* 8 */ { 4, s_3_8, -1, 1, 0}, +/* 9 */ { 3, s_3_9, -1, 8, 0}, +/* 10 */ { 2, s_3_10, -1, 8, 0}, +/* 11 */ { 5, s_3_11, -1, 4, 0}, +/* 12 */ { 5, s_3_12, -1, 2, 0}, +/* 13 */ { 5, s_3_13, -1, 4, 0}, +/* 14 */ { 5, s_3_14, -1, 2, 0}, +/* 15 */ { 5, s_3_15, -1, 1, 0}, +/* 16 */ { 7, s_3_16, -1, 2, 0}, +/* 17 */ { 5, s_3_17, -1, 1, 0}, +/* 18 */ { 5, s_3_18, -1, 5, 0}, +/* 19 */ { 6, s_3_19, -1, 3, 0}, +/* 20 */ { 5, s_3_20, -1, 1, 0}, +/* 21 */ { 5, s_3_21, -1, 1, 0}, +/* 22 */ { 5, s_3_22, -1, 11, 0}, +/* 23 */ { 5, s_3_23, -1, 1, 0}, +/* 24 */ { 4, s_3_24, -1, 8, 0}, +/* 25 */ { 3, s_3_25, -1, 8, 0}, +/* 26 */ { 6, s_3_26, -1, 4, 0}, +/* 27 */ { 6, s_3_27, -1, 2, 0}, +/* 28 */ { 6, s_3_28, -1, 4, 0}, +/* 29 */ { 6, s_3_29, -1, 2, 0}, +/* 30 */ { 5, s_3_30, -1, 15, 0}, +/* 31 */ { 6, s_3_31, 30, 6, 0}, +/* 32 */ { 9, s_3_32, 31, 12, 0}, +/* 33 */ { 5, s_3_33, -1, 7, 0}, +/* 34 */ { 4, s_3_34, -1, 15, 0}, +/* 35 */ { 5, s_3_35, 34, 6, 0}, +/* 36 */ { 8, s_3_36, 35, 12, 0}, +/* 37 */ { 6, s_3_37, 34, 13, 0}, +/* 38 */ { 6, s_3_38, 34, 14, 0}, +/* 39 */ { 3, s_3_39, -1, 10, 0}, +/* 40 */ { 4, s_3_40, 39, 9, 0}, +/* 41 */ { 3, s_3_41, -1, 1, 0}, +/* 42 */ { 4, s_3_42, -1, 7, 0} +}; + +static symbol s_4_0[3] = { 'i', 'r', 'a' }; +static symbol s_4_1[2] = { 'i', 'e' }; +static symbol s_4_2[4] = { 'i', 's', 's', 'e' }; +static symbol s_4_3[7] = { 'i', 's', 's', 'a', 'n', 't', 'e' }; +static symbol s_4_4[1] = { 'i' }; +static symbol s_4_5[4] = { 'i', 'r', 'a', 'i' }; +static symbol s_4_6[2] = { 'i', 'r' }; +static symbol s_4_7[4] = { 'i', 'r', 'a', 's' }; +static symbol s_4_8[3] = { 'i', 'e', 's' }; +static symbol s_4_9[5] = { 0xC3, 0xAE, 'm', 'e', 's' }; +static symbol s_4_10[5] = { 'i', 's', 's', 'e', 's' }; +static symbol s_4_11[8] = { 'i', 's', 's', 'a', 'n', 't', 'e', 's' }; +static symbol s_4_12[5] = { 0xC3, 0xAE, 't', 'e', 's' }; +static symbol s_4_13[2] = { 'i', 's' }; +static symbol s_4_14[5] = { 'i', 'r', 'a', 'i', 's' }; +static symbol s_4_15[6] = { 'i', 's', 's', 'a', 'i', 's' }; +static symbol s_4_16[6] = { 'i', 'r', 'i', 'o', 'n', 's' }; +static symbol s_4_17[7] = { 'i', 's', 's', 'i', 'o', 'n', 's' }; +static symbol s_4_18[5] = { 'i', 'r', 'o', 'n', 's' }; +static symbol s_4_19[6] = { 'i', 's', 's', 'o', 'n', 's' }; +static symbol s_4_20[7] = { 'i', 's', 's', 'a', 'n', 't', 's' }; +static symbol s_4_21[2] = { 'i', 't' }; +static symbol s_4_22[5] = { 'i', 'r', 'a', 'i', 't' }; +static symbol s_4_23[6] = { 'i', 's', 's', 'a', 'i', 't' }; +static symbol s_4_24[6] = { 'i', 's', 's', 'a', 'n', 't' }; +static symbol s_4_25[7] = { 'i', 'r', 'a', 'I', 'e', 'n', 't' }; +static symbol s_4_26[8] = { 'i', 's', 's', 'a', 'I', 'e', 'n', 't' }; +static symbol s_4_27[5] = { 'i', 'r', 'e', 'n', 't' }; +static symbol s_4_28[6] = { 'i', 's', 's', 'e', 'n', 't' }; +static symbol s_4_29[5] = { 'i', 'r', 'o', 'n', 't' }; +static symbol s_4_30[3] = { 0xC3, 0xAE, 't' }; +static symbol s_4_31[5] = { 'i', 'r', 'i', 'e', 'z' }; +static symbol s_4_32[6] = { 'i', 's', 's', 'i', 'e', 'z' }; +static symbol s_4_33[4] = { 'i', 'r', 'e', 'z' }; +static symbol s_4_34[5] = { 'i', 's', 's', 'e', 'z' }; + +static struct among a_4[35] = +{ +/* 0 */ { 3, s_4_0, -1, 1, 0}, +/* 1 */ { 2, s_4_1, -1, 1, 0}, +/* 2 */ { 4, s_4_2, -1, 1, 0}, +/* 3 */ { 7, s_4_3, -1, 1, 0}, +/* 4 */ { 1, s_4_4, -1, 1, 0}, +/* 5 */ { 4, s_4_5, 4, 1, 0}, +/* 6 */ { 2, s_4_6, -1, 1, 0}, +/* 7 */ { 4, s_4_7, -1, 1, 0}, +/* 8 */ { 3, s_4_8, -1, 1, 0}, +/* 9 */ { 5, s_4_9, -1, 1, 0}, +/* 10 */ { 5, s_4_10, -1, 1, 0}, +/* 11 */ { 8, s_4_11, -1, 1, 0}, +/* 12 */ { 5, s_4_12, -1, 1, 0}, +/* 13 */ { 2, s_4_13, -1, 1, 0}, +/* 14 */ { 5, s_4_14, 13, 1, 0}, +/* 15 */ { 6, s_4_15, 13, 1, 0}, +/* 16 */ { 6, s_4_16, -1, 1, 0}, +/* 17 */ { 7, s_4_17, -1, 1, 0}, +/* 18 */ { 5, s_4_18, -1, 1, 0}, +/* 19 */ { 6, s_4_19, -1, 1, 0}, +/* 20 */ { 7, s_4_20, -1, 1, 0}, +/* 21 */ { 2, s_4_21, -1, 1, 0}, +/* 22 */ { 5, s_4_22, 21, 1, 0}, +/* 23 */ { 6, s_4_23, 21, 1, 0}, +/* 24 */ { 6, s_4_24, -1, 1, 0}, +/* 25 */ { 7, s_4_25, -1, 1, 0}, +/* 26 */ { 8, s_4_26, -1, 1, 0}, +/* 27 */ { 5, s_4_27, -1, 1, 0}, +/* 28 */ { 6, s_4_28, -1, 1, 0}, +/* 29 */ { 5, s_4_29, -1, 1, 0}, +/* 30 */ { 3, s_4_30, -1, 1, 0}, +/* 31 */ { 5, s_4_31, -1, 1, 0}, +/* 32 */ { 6, s_4_32, -1, 1, 0}, +/* 33 */ { 4, s_4_33, -1, 1, 0}, +/* 34 */ { 5, s_4_34, -1, 1, 0} +}; + +static symbol s_5_0[1] = { 'a' }; +static symbol s_5_1[3] = { 'e', 'r', 'a' }; +static symbol s_5_2[4] = { 'a', 's', 's', 'e' }; +static symbol s_5_3[4] = { 'a', 'n', 't', 'e' }; +static symbol s_5_4[3] = { 0xC3, 0xA9, 'e' }; +static symbol s_5_5[2] = { 'a', 'i' }; +static symbol s_5_6[4] = { 'e', 'r', 'a', 'i' }; +static symbol s_5_7[2] = { 'e', 'r' }; +static symbol s_5_8[2] = { 'a', 's' }; +static symbol s_5_9[4] = { 'e', 'r', 'a', 's' }; +static symbol s_5_10[5] = { 0xC3, 0xA2, 'm', 'e', 's' }; +static symbol s_5_11[5] = { 'a', 's', 's', 'e', 's' }; +static symbol s_5_12[5] = { 'a', 'n', 't', 'e', 's' }; +static symbol s_5_13[5] = { 0xC3, 0xA2, 't', 'e', 's' }; +static symbol s_5_14[4] = { 0xC3, 0xA9, 'e', 's' }; +static symbol s_5_15[3] = { 'a', 'i', 's' }; +static symbol s_5_16[5] = { 'e', 'r', 'a', 'i', 's' }; +static symbol s_5_17[4] = { 'i', 'o', 'n', 's' }; +static symbol s_5_18[6] = { 'e', 'r', 'i', 'o', 'n', 's' }; +static symbol s_5_19[7] = { 'a', 's', 's', 'i', 'o', 'n', 's' }; +static symbol s_5_20[5] = { 'e', 'r', 'o', 'n', 's' }; +static symbol s_5_21[4] = { 'a', 'n', 't', 's' }; +static symbol s_5_22[3] = { 0xC3, 0xA9, 's' }; +static symbol s_5_23[3] = { 'a', 'i', 't' }; +static symbol s_5_24[5] = { 'e', 'r', 'a', 'i', 't' }; +static symbol s_5_25[3] = { 'a', 'n', 't' }; +static symbol s_5_26[5] = { 'a', 'I', 'e', 'n', 't' }; +static symbol s_5_27[7] = { 'e', 'r', 'a', 'I', 'e', 'n', 't' }; +static symbol s_5_28[6] = { 0xC3, 0xA8, 'r', 'e', 'n', 't' }; +static symbol s_5_29[6] = { 'a', 's', 's', 'e', 'n', 't' }; +static symbol s_5_30[5] = { 'e', 'r', 'o', 'n', 't' }; +static symbol s_5_31[3] = { 0xC3, 0xA2, 't' }; +static symbol s_5_32[2] = { 'e', 'z' }; +static symbol s_5_33[3] = { 'i', 'e', 'z' }; +static symbol s_5_34[5] = { 'e', 'r', 'i', 'e', 'z' }; +static symbol s_5_35[6] = { 'a', 's', 's', 'i', 'e', 'z' }; +static symbol s_5_36[4] = { 'e', 'r', 'e', 'z' }; +static symbol s_5_37[2] = { 0xC3, 0xA9 }; + +static struct among a_5[38] = +{ +/* 0 */ { 1, s_5_0, -1, 3, 0}, +/* 1 */ { 3, s_5_1, 0, 2, 0}, +/* 2 */ { 4, s_5_2, -1, 3, 0}, +/* 3 */ { 4, s_5_3, -1, 3, 0}, +/* 4 */ { 3, s_5_4, -1, 2, 0}, +/* 5 */ { 2, s_5_5, -1, 3, 0}, +/* 6 */ { 4, s_5_6, 5, 2, 0}, +/* 7 */ { 2, s_5_7, -1, 2, 0}, +/* 8 */ { 2, s_5_8, -1, 3, 0}, +/* 9 */ { 4, s_5_9, 8, 2, 0}, +/* 10 */ { 5, s_5_10, -1, 3, 0}, +/* 11 */ { 5, s_5_11, -1, 3, 0}, +/* 12 */ { 5, s_5_12, -1, 3, 0}, +/* 13 */ { 5, s_5_13, -1, 3, 0}, +/* 14 */ { 4, s_5_14, -1, 2, 0}, +/* 15 */ { 3, s_5_15, -1, 3, 0}, +/* 16 */ { 5, s_5_16, 15, 2, 0}, +/* 17 */ { 4, s_5_17, -1, 1, 0}, +/* 18 */ { 6, s_5_18, 17, 2, 0}, +/* 19 */ { 7, s_5_19, 17, 3, 0}, +/* 20 */ { 5, s_5_20, -1, 2, 0}, +/* 21 */ { 4, s_5_21, -1, 3, 0}, +/* 22 */ { 3, s_5_22, -1, 2, 0}, +/* 23 */ { 3, s_5_23, -1, 3, 0}, +/* 24 */ { 5, s_5_24, 23, 2, 0}, +/* 25 */ { 3, s_5_25, -1, 3, 0}, +/* 26 */ { 5, s_5_26, -1, 3, 0}, +/* 27 */ { 7, s_5_27, 26, 2, 0}, +/* 28 */ { 6, s_5_28, -1, 2, 0}, +/* 29 */ { 6, s_5_29, -1, 3, 0}, +/* 30 */ { 5, s_5_30, -1, 2, 0}, +/* 31 */ { 3, s_5_31, -1, 3, 0}, +/* 32 */ { 2, s_5_32, -1, 2, 0}, +/* 33 */ { 3, s_5_33, 32, 2, 0}, +/* 34 */ { 5, s_5_34, 33, 2, 0}, +/* 35 */ { 6, s_5_35, 33, 3, 0}, +/* 36 */ { 4, s_5_36, 32, 2, 0}, +/* 37 */ { 2, s_5_37, -1, 2, 0} +}; + +static symbol s_6_0[1] = { 'e' }; +static symbol s_6_1[5] = { 'I', 0xC3, 0xA8, 'r', 'e' }; +static symbol s_6_2[5] = { 'i', 0xC3, 0xA8, 'r', 'e' }; +static symbol s_6_3[3] = { 'i', 'o', 'n' }; +static symbol s_6_4[3] = { 'I', 'e', 'r' }; +static symbol s_6_5[3] = { 'i', 'e', 'r' }; +static symbol s_6_6[2] = { 0xC3, 0xAB }; + +static struct among a_6[7] = +{ +/* 0 */ { 1, s_6_0, -1, 3, 0}, +/* 1 */ { 5, s_6_1, 0, 2, 0}, +/* 2 */ { 5, s_6_2, 0, 2, 0}, +/* 3 */ { 3, s_6_3, -1, 1, 0}, +/* 4 */ { 3, s_6_4, -1, 2, 0}, +/* 5 */ { 3, s_6_5, -1, 2, 0}, +/* 6 */ { 2, s_6_6, -1, 4, 0} +}; + +static symbol s_7_0[3] = { 'e', 'l', 'l' }; +static symbol s_7_1[4] = { 'e', 'i', 'l', 'l' }; +static symbol s_7_2[3] = { 'e', 'n', 'n' }; +static symbol s_7_3[3] = { 'o', 'n', 'n' }; +static symbol s_7_4[3] = { 'e', 't', 't' }; + +static struct among a_7[5] = +{ +/* 0 */ { 3, s_7_0, -1, -1, 0}, +/* 1 */ { 4, s_7_1, -1, -1, 0}, +/* 2 */ { 3, s_7_2, -1, -1, 0}, +/* 3 */ { 3, s_7_3, -1, -1, 0}, +/* 4 */ { 3, s_7_4, -1, -1, 0} +}; + +static unsigned char g_v[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 130, 103, 8, 5 }; + +static unsigned char g_keep_with_s[] = { 1, 65, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128 }; + +static symbol s_0[] = { 'u' }; +static symbol s_1[] = { 'U' }; +static symbol s_2[] = { 'i' }; +static symbol s_3[] = { 'I' }; +static symbol s_4[] = { 'y' }; +static symbol s_5[] = { 'Y' }; +static symbol s_6[] = { 'y' }; +static symbol s_7[] = { 'Y' }; +static symbol s_8[] = { 'q' }; +static symbol s_9[] = { 'u' }; +static symbol s_10[] = { 'U' }; +static symbol s_11[] = { 'i' }; +static symbol s_12[] = { 'u' }; +static symbol s_13[] = { 'y' }; +static symbol s_14[] = { 'i', 'c' }; +static symbol s_15[] = { 'i', 'q', 'U' }; +static symbol s_16[] = { 'l', 'o', 'g' }; +static symbol s_17[] = { 'u' }; +static symbol s_18[] = { 'e', 'n', 't' }; +static symbol s_19[] = { 'a', 't' }; +static symbol s_20[] = { 'e', 'u', 'x' }; +static symbol s_21[] = { 'i' }; +static symbol s_22[] = { 'a', 'b', 'l' }; +static symbol s_23[] = { 'i', 'q', 'U' }; +static symbol s_24[] = { 'a', 't' }; +static symbol s_25[] = { 'i', 'c' }; +static symbol s_26[] = { 'i', 'q', 'U' }; +static symbol s_27[] = { 'e', 'a', 'u' }; +static symbol s_28[] = { 'a', 'l' }; +static symbol s_29[] = { 'e', 'u', 'x' }; +static symbol s_30[] = { 'a', 'n', 't' }; +static symbol s_31[] = { 'e', 'n', 't' }; +static symbol s_32[] = { 'e' }; +static symbol s_33[] = { 's' }; +static symbol s_34[] = { 's' }; +static symbol s_35[] = { 't' }; +static symbol s_36[] = { 'i' }; +static symbol s_37[] = { 'g', 'u' }; +static symbol s_38[] = { 0xC3, 0xA9 }; +static symbol s_39[] = { 0xC3, 0xA8 }; +static symbol s_40[] = { 'e' }; +static symbol s_41[] = { 'Y' }; +static symbol s_42[] = { 'i' }; +static symbol s_43[] = { 0xC3, 0xA7 }; +static symbol s_44[] = { 'c' }; + +static int r_prelude(struct SN_env * z) { + while(1) { /* repeat, line 38 */ + int c = z->c; + while(1) { /* goto, line 38 */ + int c = z->c; + { int c = z->c; /* or, line 44 */ + if (!(in_grouping_U(z, g_v, 97, 251))) goto lab3; + z->bra = z->c; /* [, line 40 */ + { int c = z->c; /* or, line 40 */ + if (!(eq_s(z, 1, s_0))) goto lab5; + z->ket = z->c; /* ], line 40 */ + if (!(in_grouping_U(z, g_v, 97, 251))) goto lab5; + { int ret; + ret = slice_from_s(z, 1, s_1); /* <-, line 40 */ + if (ret < 0) return ret; + } + goto lab4; + lab5: + z->c = c; + if (!(eq_s(z, 1, s_2))) goto lab6; + z->ket = z->c; /* ], line 41 */ + if (!(in_grouping_U(z, g_v, 97, 251))) goto lab6; + { int ret; + ret = slice_from_s(z, 1, s_3); /* <-, line 41 */ + if (ret < 0) return ret; + } + goto lab4; + lab6: + z->c = c; + if (!(eq_s(z, 1, s_4))) goto lab3; + z->ket = z->c; /* ], line 42 */ + { int ret; + ret = slice_from_s(z, 1, s_5); /* <-, line 42 */ + if (ret < 0) return ret; + } + } + lab4: + goto lab2; + lab3: + z->c = c; + z->bra = z->c; /* [, line 45 */ + if (!(eq_s(z, 1, s_6))) goto lab7; + z->ket = z->c; /* ], line 45 */ + if (!(in_grouping_U(z, g_v, 97, 251))) goto lab7; + { int ret; + ret = slice_from_s(z, 1, s_7); /* <-, line 45 */ + if (ret < 0) return ret; + } + goto lab2; + lab7: + z->c = c; + if (!(eq_s(z, 1, s_8))) goto lab1; + z->bra = z->c; /* [, line 47 */ + if (!(eq_s(z, 1, s_9))) goto lab1; + z->ket = z->c; /* ], line 47 */ + { int ret; + ret = slice_from_s(z, 1, s_10); /* <-, line 47 */ + if (ret < 0) return ret; + } + } + lab2: + z->c = c; + break; + lab1: + z->c = c; + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab0; + z->c = c; /* goto, line 38 */ + } + } + continue; + lab0: + z->c = c; + break; + } + return 1; +} + +static int r_mark_regions(struct SN_env * z) { + z->I[0] = z->l; + z->I[1] = z->l; + z->I[2] = z->l; + { int c = z->c; /* do, line 56 */ + { int c = z->c; /* or, line 57 */ + if (!(in_grouping_U(z, g_v, 97, 251))) goto lab2; + if (!(in_grouping_U(z, g_v, 97, 251))) goto lab2; + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab2; + z->c = c; /* next, line 57 */ + } + goto lab1; + lab2: + z->c = c; + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab0; + z->c = c; /* next, line 57 */ + } + while(1) { /* gopast, line 57 */ + if (!(in_grouping_U(z, g_v, 97, 251))) goto lab3; + break; + lab3: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab0; + z->c = c; /* gopast, line 57 */ + } + } + } + lab1: + z->I[0] = z->c; /* setmark pV, line 58 */ + lab0: + z->c = c; + } + { int c = z->c; /* do, line 60 */ + while(1) { /* gopast, line 61 */ + if (!(in_grouping_U(z, g_v, 97, 251))) goto lab5; + break; + lab5: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab4; + z->c = c; /* gopast, line 61 */ + } + } + while(1) { /* gopast, line 61 */ + if (!(out_grouping_U(z, g_v, 97, 251))) goto lab6; + break; + lab6: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab4; + z->c = c; /* gopast, line 61 */ + } + } + z->I[1] = z->c; /* setmark p1, line 61 */ + while(1) { /* gopast, line 62 */ + if (!(in_grouping_U(z, g_v, 97, 251))) goto lab7; + break; + lab7: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab4; + z->c = c; /* gopast, line 62 */ + } + } + while(1) { /* gopast, line 62 */ + if (!(out_grouping_U(z, g_v, 97, 251))) goto lab8; + break; + lab8: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab4; + z->c = c; /* gopast, line 62 */ + } + } + z->I[2] = z->c; /* setmark p2, line 62 */ + lab4: + z->c = c; + } + return 1; +} + +static int r_postlude(struct SN_env * z) { + int among_var; + while(1) { /* repeat, line 66 */ + int c = z->c; + z->bra = z->c; /* [, line 68 */ + among_var = find_among(z, a_0, 4); /* substring, line 68 */ + if (!(among_var)) goto lab0; + z->ket = z->c; /* ], line 68 */ + switch(among_var) { + case 0: goto lab0; + case 1: + { int ret; + ret = slice_from_s(z, 1, s_11); /* <-, line 69 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 1, s_12); /* <-, line 70 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_from_s(z, 1, s_13); /* <-, line 71 */ + if (ret < 0) return ret; + } + break; + case 4: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab0; + z->c = c; /* next, line 72 */ + } + break; + } + continue; + lab0: + z->c = c; + break; + } + return 1; +} + +static int r_RV(struct SN_env * z) { + if (!(z->I[0] <= z->c)) return 0; + return 1; +} + +static int r_R1(struct SN_env * z) { + if (!(z->I[1] <= z->c)) return 0; + return 1; +} + +static int r_R2(struct SN_env * z) { + if (!(z->I[2] <= z->c)) return 0; + return 1; +} + +static int r_standard_suffix(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 83 */ + among_var = find_among_b(z, a_3, 43); /* substring, line 83 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 83 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 87 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 87 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 90 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 90 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 91 */ + z->ket = z->c; /* [, line 91 */ + if (!(eq_s_b(z, 2, s_14))) { z->c = z->l - m; goto lab0; } + z->bra = z->c; /* ], line 91 */ + { int m = z->l - z->c; (void) m; /* or, line 91 */ + { int ret = r_R2(z); + if (ret == 0) goto lab2; /* call R2, line 91 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 91 */ + if (ret < 0) return ret; + } + goto lab1; + lab2: + z->c = z->l - m; + { int ret; + ret = slice_from_s(z, 3, s_15); /* <-, line 91 */ + if (ret < 0) return ret; + } + } + lab1: + lab0: + ; + } + break; + case 3: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 95 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 3, s_16); /* <-, line 95 */ + if (ret < 0) return ret; + } + break; + case 4: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 98 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 1, s_17); /* <-, line 98 */ + if (ret < 0) return ret; + } + break; + case 5: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 101 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 3, s_18); /* <-, line 101 */ + if (ret < 0) return ret; + } + break; + case 6: + { int ret = r_RV(z); + if (ret == 0) return 0; /* call RV, line 105 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 105 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 106 */ + z->ket = z->c; /* [, line 107 */ + among_var = find_among_b(z, a_1, 6); /* substring, line 107 */ + if (!(among_var)) { z->c = z->l - m; goto lab3; } + z->bra = z->c; /* ], line 107 */ + switch(among_var) { + case 0: { z->c = z->l - m; goto lab3; } + case 1: + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab3; } /* call R2, line 108 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 108 */ + if (ret < 0) return ret; + } + z->ket = z->c; /* [, line 108 */ + if (!(eq_s_b(z, 2, s_19))) { z->c = z->l - m; goto lab3; } + z->bra = z->c; /* ], line 108 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab3; } /* call R2, line 108 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 108 */ + if (ret < 0) return ret; + } + break; + case 2: + { int m = z->l - z->c; (void) m; /* or, line 109 */ + { int ret = r_R2(z); + if (ret == 0) goto lab5; /* call R2, line 109 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 109 */ + if (ret < 0) return ret; + } + goto lab4; + lab5: + z->c = z->l - m; + { int ret = r_R1(z); + if (ret == 0) { z->c = z->l - m; goto lab3; } /* call R1, line 109 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 3, s_20); /* <-, line 109 */ + if (ret < 0) return ret; + } + } + lab4: + break; + case 3: + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab3; } /* call R2, line 111 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 111 */ + if (ret < 0) return ret; + } + break; + case 4: + { int ret = r_RV(z); + if (ret == 0) { z->c = z->l - m; goto lab3; } /* call RV, line 113 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 1, s_21); /* <-, line 113 */ + if (ret < 0) return ret; + } + break; + } + lab3: + ; + } + break; + case 7: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 120 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 120 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 121 */ + z->ket = z->c; /* [, line 122 */ + among_var = find_among_b(z, a_2, 3); /* substring, line 122 */ + if (!(among_var)) { z->c = z->l - m; goto lab6; } + z->bra = z->c; /* ], line 122 */ + switch(among_var) { + case 0: { z->c = z->l - m; goto lab6; } + case 1: + { int m = z->l - z->c; (void) m; /* or, line 123 */ + { int ret = r_R2(z); + if (ret == 0) goto lab8; /* call R2, line 123 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 123 */ + if (ret < 0) return ret; + } + goto lab7; + lab8: + z->c = z->l - m; + { int ret; + ret = slice_from_s(z, 3, s_22); /* <-, line 123 */ + if (ret < 0) return ret; + } + } + lab7: + break; + case 2: + { int m = z->l - z->c; (void) m; /* or, line 124 */ + { int ret = r_R2(z); + if (ret == 0) goto lab10; /* call R2, line 124 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 124 */ + if (ret < 0) return ret; + } + goto lab9; + lab10: + z->c = z->l - m; + { int ret; + ret = slice_from_s(z, 3, s_23); /* <-, line 124 */ + if (ret < 0) return ret; + } + } + lab9: + break; + case 3: + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab6; } /* call R2, line 125 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 125 */ + if (ret < 0) return ret; + } + break; + } + lab6: + ; + } + break; + case 8: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 132 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 132 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 133 */ + z->ket = z->c; /* [, line 133 */ + if (!(eq_s_b(z, 2, s_24))) { z->c = z->l - m; goto lab11; } + z->bra = z->c; /* ], line 133 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab11; } /* call R2, line 133 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 133 */ + if (ret < 0) return ret; + } + z->ket = z->c; /* [, line 133 */ + if (!(eq_s_b(z, 2, s_25))) { z->c = z->l - m; goto lab11; } + z->bra = z->c; /* ], line 133 */ + { int m = z->l - z->c; (void) m; /* or, line 133 */ + { int ret = r_R2(z); + if (ret == 0) goto lab13; /* call R2, line 133 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 133 */ + if (ret < 0) return ret; + } + goto lab12; + lab13: + z->c = z->l - m; + { int ret; + ret = slice_from_s(z, 3, s_26); /* <-, line 133 */ + if (ret < 0) return ret; + } + } + lab12: + lab11: + ; + } + break; + case 9: + { int ret; + ret = slice_from_s(z, 3, s_27); /* <-, line 135 */ + if (ret < 0) return ret; + } + break; + case 10: + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 136 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 2, s_28); /* <-, line 136 */ + if (ret < 0) return ret; + } + break; + case 11: + { int m = z->l - z->c; (void) m; /* or, line 138 */ + { int ret = r_R2(z); + if (ret == 0) goto lab15; /* call R2, line 138 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 138 */ + if (ret < 0) return ret; + } + goto lab14; + lab15: + z->c = z->l - m; + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 138 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 3, s_29); /* <-, line 138 */ + if (ret < 0) return ret; + } + } + lab14: + break; + case 12: + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 141 */ + if (ret < 0) return ret; + } + if (!(out_grouping_b_U(z, g_v, 97, 251))) return 0; + { int ret; + ret = slice_del(z); /* delete, line 141 */ + if (ret < 0) return ret; + } + break; + case 13: + { int ret = r_RV(z); + if (ret == 0) return 0; /* call RV, line 146 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 3, s_30); /* <-, line 146 */ + if (ret < 0) return ret; + } + return 0; /* fail, line 146 */ + break; + case 14: + { int ret = r_RV(z); + if (ret == 0) return 0; /* call RV, line 147 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 3, s_31); /* <-, line 147 */ + if (ret < 0) return ret; + } + return 0; /* fail, line 147 */ + break; + case 15: + { int m_test = z->l - z->c; /* test, line 149 */ + if (!(in_grouping_b_U(z, g_v, 97, 251))) return 0; + { int ret = r_RV(z); + if (ret == 0) return 0; /* call RV, line 149 */ + if (ret < 0) return ret; + } + z->c = z->l - m_test; + } + { int ret; + ret = slice_del(z); /* delete, line 149 */ + if (ret < 0) return ret; + } + return 0; /* fail, line 149 */ + break; + } + return 1; +} + +static int r_i_verb_suffix(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 154 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 154 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 155 */ + among_var = find_among_b(z, a_4, 35); /* substring, line 155 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 155 */ + switch(among_var) { + case 0: { z->lb = m3; return 0; } + case 1: + if (!(out_grouping_b_U(z, g_v, 97, 251))) { z->lb = m3; return 0; } + { int ret; + ret = slice_del(z); /* delete, line 161 */ + if (ret < 0) return ret; + } + break; + } + z->lb = m3; + } + return 1; +} + +static int r_verb_suffix(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 165 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 165 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 166 */ + among_var = find_among_b(z, a_5, 38); /* substring, line 166 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 166 */ + switch(among_var) { + case 0: { z->lb = m3; return 0; } + case 1: + { int ret = r_R2(z); + if (ret == 0) { z->lb = m3; return 0; } /* call R2, line 168 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 168 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_del(z); /* delete, line 176 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_del(z); /* delete, line 181 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 182 */ + z->ket = z->c; /* [, line 182 */ + if (!(eq_s_b(z, 1, s_32))) { z->c = z->l - m; goto lab0; } + z->bra = z->c; /* ], line 182 */ + { int ret; + ret = slice_del(z); /* delete, line 182 */ + if (ret < 0) return ret; + } + lab0: + ; + } + break; + } + z->lb = m3; + } + return 1; +} + +static int r_residual_suffix(struct SN_env * z) { + int among_var; + { int m = z->l - z->c; (void) m; /* try, line 190 */ + z->ket = z->c; /* [, line 190 */ + if (!(eq_s_b(z, 1, s_33))) { z->c = z->l - m; goto lab0; } + z->bra = z->c; /* ], line 190 */ + { int m_test = z->l - z->c; /* test, line 190 */ + if (!(out_grouping_b_U(z, g_keep_with_s, 97, 232))) { z->c = z->l - m; goto lab0; } + z->c = z->l - m_test; + } + { int ret; + ret = slice_del(z); /* delete, line 190 */ + if (ret < 0) return ret; + } + lab0: + ; + } + { int m3; /* setlimit, line 191 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 191 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 192 */ + among_var = find_among_b(z, a_6, 7); /* substring, line 192 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 192 */ + switch(among_var) { + case 0: { z->lb = m3; return 0; } + case 1: + { int ret = r_R2(z); + if (ret == 0) { z->lb = m3; return 0; } /* call R2, line 193 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* or, line 193 */ + if (!(eq_s_b(z, 1, s_34))) goto lab2; + goto lab1; + lab2: + z->c = z->l - m; + if (!(eq_s_b(z, 1, s_35))) { z->lb = m3; return 0; } + } + lab1: + { int ret; + ret = slice_del(z); /* delete, line 193 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 1, s_36); /* <-, line 195 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_del(z); /* delete, line 196 */ + if (ret < 0) return ret; + } + break; + case 4: + if (!(eq_s_b(z, 2, s_37))) { z->lb = m3; return 0; } + { int ret; + ret = slice_del(z); /* delete, line 197 */ + if (ret < 0) return ret; + } + break; + } + z->lb = m3; + } + return 1; +} + +static int r_un_double(struct SN_env * z) { + { int m_test = z->l - z->c; /* test, line 203 */ + if (!(find_among_b(z, a_7, 5))) return 0; /* among, line 203 */ + z->c = z->l - m_test; + } + z->ket = z->c; /* [, line 203 */ + { int c = skip_utf8(z->p, z->c, z->lb, 0, -1); + if (c < 0) return 0; + z->c = c; /* next, line 203 */ + } + z->bra = z->c; /* ], line 203 */ + { int ret; + ret = slice_del(z); /* delete, line 203 */ + if (ret < 0) return ret; + } + return 1; +} + +static int r_un_accent(struct SN_env * z) { + { int i = 1; + while(1) { /* atleast, line 207 */ + if (!(out_grouping_b_U(z, g_v, 97, 251))) goto lab0; + i--; + continue; + lab0: + break; + } + if (i > 0) return 0; + } + z->ket = z->c; /* [, line 208 */ + { int m = z->l - z->c; (void) m; /* or, line 208 */ + if (!(eq_s_b(z, 2, s_38))) goto lab2; + goto lab1; + lab2: + z->c = z->l - m; + if (!(eq_s_b(z, 2, s_39))) return 0; + } +lab1: + z->bra = z->c; /* ], line 208 */ + { int ret; + ret = slice_from_s(z, 1, s_40); /* <-, line 208 */ + if (ret < 0) return ret; + } + return 1; +} + +extern int french_UTF_8_stem(struct SN_env * z) { + { int c = z->c; /* do, line 214 */ + { int ret = r_prelude(z); + if (ret == 0) goto lab0; /* call prelude, line 214 */ + if (ret < 0) return ret; + } + lab0: + z->c = c; + } + { int c = z->c; /* do, line 215 */ + { int ret = r_mark_regions(z); + if (ret == 0) goto lab1; /* call mark_regions, line 215 */ + if (ret < 0) return ret; + } + lab1: + z->c = c; + } + z->lb = z->c; z->c = z->l; /* backwards, line 216 */ + + { int m = z->l - z->c; (void) m; /* do, line 218 */ + { int m = z->l - z->c; (void) m; /* or, line 228 */ + { int m = z->l - z->c; (void) m; /* and, line 224 */ + { int m = z->l - z->c; (void) m; /* or, line 220 */ + { int ret = r_standard_suffix(z); + if (ret == 0) goto lab6; /* call standard_suffix, line 220 */ + if (ret < 0) return ret; + } + goto lab5; + lab6: + z->c = z->l - m; + { int ret = r_i_verb_suffix(z); + if (ret == 0) goto lab7; /* call i_verb_suffix, line 221 */ + if (ret < 0) return ret; + } + goto lab5; + lab7: + z->c = z->l - m; + { int ret = r_verb_suffix(z); + if (ret == 0) goto lab4; /* call verb_suffix, line 222 */ + if (ret < 0) return ret; + } + } + lab5: + z->c = z->l - m; + { int m = z->l - z->c; (void) m; /* try, line 225 */ + z->ket = z->c; /* [, line 225 */ + { int m = z->l - z->c; (void) m; /* or, line 225 */ + if (!(eq_s_b(z, 1, s_41))) goto lab10; + z->bra = z->c; /* ], line 225 */ + { int ret; + ret = slice_from_s(z, 1, s_42); /* <-, line 225 */ + if (ret < 0) return ret; + } + goto lab9; + lab10: + z->c = z->l - m; + if (!(eq_s_b(z, 2, s_43))) { z->c = z->l - m; goto lab8; } + z->bra = z->c; /* ], line 226 */ + { int ret; + ret = slice_from_s(z, 1, s_44); /* <-, line 226 */ + if (ret < 0) return ret; + } + } + lab9: + lab8: + ; + } + } + goto lab3; + lab4: + z->c = z->l - m; + { int ret = r_residual_suffix(z); + if (ret == 0) goto lab2; /* call residual_suffix, line 229 */ + if (ret < 0) return ret; + } + } + lab3: + lab2: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 234 */ + { int ret = r_un_double(z); + if (ret == 0) goto lab11; /* call un_double, line 234 */ + if (ret < 0) return ret; + } + lab11: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 235 */ + { int ret = r_un_accent(z); + if (ret == 0) goto lab12; /* call un_accent, line 235 */ + if (ret < 0) return ret; + } + lab12: + z->c = z->l - m; + } + z->c = z->lb; + { int c = z->c; /* do, line 237 */ + { int ret = r_postlude(z); + if (ret == 0) goto lab13; /* call postlude, line 237 */ + if (ret < 0) return ret; + } + lab13: + z->c = c; + } + return 1; +} + +extern struct SN_env * french_UTF_8_create_env(void) { return SN_create_env(0, 3, 0); } + +extern void french_UTF_8_close_env(struct SN_env * z) { SN_close_env(z); } + diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_french.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_french.h new file mode 100644 index 0000000..08e3418 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_french.h @@ -0,0 +1,16 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern struct SN_env * french_UTF_8_create_env(void); +extern void french_UTF_8_close_env(struct SN_env * z); + +extern int french_UTF_8_stem(struct SN_env * z); + +#ifdef __cplusplus +} +#endif + diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_german.c b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_german.c new file mode 100644 index 0000000..d66a137 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_german.c @@ -0,0 +1,526 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#include "../runtime/header.h" + +extern int german_UTF_8_stem(struct SN_env * z); +static int r_standard_suffix(struct SN_env * z); +static int r_R2(struct SN_env * z); +static int r_R1(struct SN_env * z); +static int r_mark_regions(struct SN_env * z); +static int r_postlude(struct SN_env * z); +static int r_prelude(struct SN_env * z); + +extern struct SN_env * german_UTF_8_create_env(void); +extern void german_UTF_8_close_env(struct SN_env * z); + +static symbol s_0_1[1] = { 'U' }; +static symbol s_0_2[1] = { 'Y' }; +static symbol s_0_3[2] = { 0xC3, 0xA4 }; +static symbol s_0_4[2] = { 0xC3, 0xB6 }; +static symbol s_0_5[2] = { 0xC3, 0xBC }; + +static struct among a_0[6] = +{ +/* 0 */ { 0, 0, -1, 6, 0}, +/* 1 */ { 1, s_0_1, 0, 2, 0}, +/* 2 */ { 1, s_0_2, 0, 1, 0}, +/* 3 */ { 2, s_0_3, 0, 3, 0}, +/* 4 */ { 2, s_0_4, 0, 4, 0}, +/* 5 */ { 2, s_0_5, 0, 5, 0} +}; + +static symbol s_1_0[1] = { 'e' }; +static symbol s_1_1[2] = { 'e', 'm' }; +static symbol s_1_2[2] = { 'e', 'n' }; +static symbol s_1_3[3] = { 'e', 'r', 'n' }; +static symbol s_1_4[2] = { 'e', 'r' }; +static symbol s_1_5[1] = { 's' }; +static symbol s_1_6[2] = { 'e', 's' }; + +static struct among a_1[7] = +{ +/* 0 */ { 1, s_1_0, -1, 1, 0}, +/* 1 */ { 2, s_1_1, -1, 1, 0}, +/* 2 */ { 2, s_1_2, -1, 1, 0}, +/* 3 */ { 3, s_1_3, -1, 1, 0}, +/* 4 */ { 2, s_1_4, -1, 1, 0}, +/* 5 */ { 1, s_1_5, -1, 2, 0}, +/* 6 */ { 2, s_1_6, 5, 1, 0} +}; + +static symbol s_2_0[2] = { 'e', 'n' }; +static symbol s_2_1[2] = { 'e', 'r' }; +static symbol s_2_2[2] = { 's', 't' }; +static symbol s_2_3[3] = { 'e', 's', 't' }; + +static struct among a_2[4] = +{ +/* 0 */ { 2, s_2_0, -1, 1, 0}, +/* 1 */ { 2, s_2_1, -1, 1, 0}, +/* 2 */ { 2, s_2_2, -1, 2, 0}, +/* 3 */ { 3, s_2_3, 2, 1, 0} +}; + +static symbol s_3_0[2] = { 'i', 'g' }; +static symbol s_3_1[4] = { 'l', 'i', 'c', 'h' }; + +static struct among a_3[2] = +{ +/* 0 */ { 2, s_3_0, -1, 1, 0}, +/* 1 */ { 4, s_3_1, -1, 1, 0} +}; + +static symbol s_4_0[3] = { 'e', 'n', 'd' }; +static symbol s_4_1[2] = { 'i', 'g' }; +static symbol s_4_2[3] = { 'u', 'n', 'g' }; +static symbol s_4_3[4] = { 'l', 'i', 'c', 'h' }; +static symbol s_4_4[4] = { 'i', 's', 'c', 'h' }; +static symbol s_4_5[2] = { 'i', 'k' }; +static symbol s_4_6[4] = { 'h', 'e', 'i', 't' }; +static symbol s_4_7[4] = { 'k', 'e', 'i', 't' }; + +static struct among a_4[8] = +{ +/* 0 */ { 3, s_4_0, -1, 1, 0}, +/* 1 */ { 2, s_4_1, -1, 2, 0}, +/* 2 */ { 3, s_4_2, -1, 1, 0}, +/* 3 */ { 4, s_4_3, -1, 3, 0}, +/* 4 */ { 4, s_4_4, -1, 2, 0}, +/* 5 */ { 2, s_4_5, -1, 2, 0}, +/* 6 */ { 4, s_4_6, -1, 3, 0}, +/* 7 */ { 4, s_4_7, -1, 4, 0} +}; + +static unsigned char g_v[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 32, 8 }; + +static unsigned char g_s_ending[] = { 117, 30, 5 }; + +static unsigned char g_st_ending[] = { 117, 30, 4 }; + +static symbol s_0[] = { 0xC3, 0x9F }; +static symbol s_1[] = { 's', 's' }; +static symbol s_2[] = { 'u' }; +static symbol s_3[] = { 'U' }; +static symbol s_4[] = { 'y' }; +static symbol s_5[] = { 'Y' }; +static symbol s_6[] = { 'y' }; +static symbol s_7[] = { 'u' }; +static symbol s_8[] = { 'a' }; +static symbol s_9[] = { 'o' }; +static symbol s_10[] = { 'u' }; +static symbol s_11[] = { 'i', 'g' }; +static symbol s_12[] = { 'e' }; +static symbol s_13[] = { 'e' }; +static symbol s_14[] = { 'e', 'r' }; +static symbol s_15[] = { 'e', 'n' }; + +static int r_prelude(struct SN_env * z) { + { int c_test = z->c; /* test, line 30 */ + while(1) { /* repeat, line 30 */ + int c = z->c; + { int c = z->c; /* or, line 33 */ + z->bra = z->c; /* [, line 32 */ + if (!(eq_s(z, 2, s_0))) goto lab2; + z->ket = z->c; /* ], line 32 */ + { int ret; + ret = slice_from_s(z, 2, s_1); /* <-, line 32 */ + if (ret < 0) return ret; + } + goto lab1; + lab2: + z->c = c; + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab0; + z->c = c; /* next, line 33 */ + } + } + lab1: + continue; + lab0: + z->c = c; + break; + } + z->c = c_test; + } + while(1) { /* repeat, line 36 */ + int c = z->c; + while(1) { /* goto, line 36 */ + int c = z->c; + if (!(in_grouping_U(z, g_v, 97, 252))) goto lab4; + z->bra = z->c; /* [, line 37 */ + { int c = z->c; /* or, line 37 */ + if (!(eq_s(z, 1, s_2))) goto lab6; + z->ket = z->c; /* ], line 37 */ + if (!(in_grouping_U(z, g_v, 97, 252))) goto lab6; + { int ret; + ret = slice_from_s(z, 1, s_3); /* <-, line 37 */ + if (ret < 0) return ret; + } + goto lab5; + lab6: + z->c = c; + if (!(eq_s(z, 1, s_4))) goto lab4; + z->ket = z->c; /* ], line 38 */ + if (!(in_grouping_U(z, g_v, 97, 252))) goto lab4; + { int ret; + ret = slice_from_s(z, 1, s_5); /* <-, line 38 */ + if (ret < 0) return ret; + } + } + lab5: + z->c = c; + break; + lab4: + z->c = c; + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab3; + z->c = c; /* goto, line 36 */ + } + } + continue; + lab3: + z->c = c; + break; + } + return 1; +} + +static int r_mark_regions(struct SN_env * z) { + z->I[0] = z->l; + z->I[1] = z->l; + { int c_test = z->c; /* test, line 47 */ + { int c = skip_utf8(z->p, z->c, 0, z->l, + 3); + if (c < 0) return 0; + z->c = c; /* hop, line 47 */ + } + z->I[2] = z->c; /* setmark x, line 47 */ + z->c = c_test; + } + while(1) { /* gopast, line 49 */ + if (!(in_grouping_U(z, g_v, 97, 252))) goto lab0; + break; + lab0: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) return 0; + z->c = c; /* gopast, line 49 */ + } + } + while(1) { /* gopast, line 49 */ + if (!(out_grouping_U(z, g_v, 97, 252))) goto lab1; + break; + lab1: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) return 0; + z->c = c; /* gopast, line 49 */ + } + } + z->I[0] = z->c; /* setmark p1, line 49 */ + /* try, line 50 */ + if (!(z->I[0] < z->I[2])) goto lab2; + z->I[0] = z->I[2]; +lab2: + while(1) { /* gopast, line 51 */ + if (!(in_grouping_U(z, g_v, 97, 252))) goto lab3; + break; + lab3: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) return 0; + z->c = c; /* gopast, line 51 */ + } + } + while(1) { /* gopast, line 51 */ + if (!(out_grouping_U(z, g_v, 97, 252))) goto lab4; + break; + lab4: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) return 0; + z->c = c; /* gopast, line 51 */ + } + } + z->I[1] = z->c; /* setmark p2, line 51 */ + return 1; +} + +static int r_postlude(struct SN_env * z) { + int among_var; + while(1) { /* repeat, line 55 */ + int c = z->c; + z->bra = z->c; /* [, line 57 */ + among_var = find_among(z, a_0, 6); /* substring, line 57 */ + if (!(among_var)) goto lab0; + z->ket = z->c; /* ], line 57 */ + switch(among_var) { + case 0: goto lab0; + case 1: + { int ret; + ret = slice_from_s(z, 1, s_6); /* <-, line 58 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 1, s_7); /* <-, line 59 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_from_s(z, 1, s_8); /* <-, line 60 */ + if (ret < 0) return ret; + } + break; + case 4: + { int ret; + ret = slice_from_s(z, 1, s_9); /* <-, line 61 */ + if (ret < 0) return ret; + } + break; + case 5: + { int ret; + ret = slice_from_s(z, 1, s_10); /* <-, line 62 */ + if (ret < 0) return ret; + } + break; + case 6: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab0; + z->c = c; /* next, line 63 */ + } + break; + } + continue; + lab0: + z->c = c; + break; + } + return 1; +} + +static int r_R1(struct SN_env * z) { + if (!(z->I[0] <= z->c)) return 0; + return 1; +} + +static int r_R2(struct SN_env * z) { + if (!(z->I[1] <= z->c)) return 0; + return 1; +} + +static int r_standard_suffix(struct SN_env * z) { + int among_var; + { int m = z->l - z->c; (void) m; /* do, line 74 */ + z->ket = z->c; /* [, line 75 */ + among_var = find_among_b(z, a_1, 7); /* substring, line 75 */ + if (!(among_var)) goto lab0; + z->bra = z->c; /* ], line 75 */ + { int ret = r_R1(z); + if (ret == 0) goto lab0; /* call R1, line 75 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: goto lab0; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 77 */ + if (ret < 0) return ret; + } + break; + case 2: + if (!(in_grouping_b_U(z, g_s_ending, 98, 116))) goto lab0; + { int ret; + ret = slice_del(z); /* delete, line 80 */ + if (ret < 0) return ret; + } + break; + } + lab0: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 84 */ + z->ket = z->c; /* [, line 85 */ + among_var = find_among_b(z, a_2, 4); /* substring, line 85 */ + if (!(among_var)) goto lab1; + z->bra = z->c; /* ], line 85 */ + { int ret = r_R1(z); + if (ret == 0) goto lab1; /* call R1, line 85 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: goto lab1; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 87 */ + if (ret < 0) return ret; + } + break; + case 2: + if (!(in_grouping_b_U(z, g_st_ending, 98, 116))) goto lab1; + { int c = skip_utf8(z->p, z->c, z->lb, z->l, - 3); + if (c < 0) goto lab1; + z->c = c; /* hop, line 90 */ + } + { int ret; + ret = slice_del(z); /* delete, line 90 */ + if (ret < 0) return ret; + } + break; + } + lab1: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 94 */ + z->ket = z->c; /* [, line 95 */ + among_var = find_among_b(z, a_4, 8); /* substring, line 95 */ + if (!(among_var)) goto lab2; + z->bra = z->c; /* ], line 95 */ + { int ret = r_R2(z); + if (ret == 0) goto lab2; /* call R2, line 95 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: goto lab2; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 97 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 98 */ + z->ket = z->c; /* [, line 98 */ + if (!(eq_s_b(z, 2, s_11))) { z->c = z->l - m; goto lab3; } + z->bra = z->c; /* ], line 98 */ + { int m = z->l - z->c; (void) m; /* not, line 98 */ + if (!(eq_s_b(z, 1, s_12))) goto lab4; + { z->c = z->l - m; goto lab3; } + lab4: + z->c = z->l - m; + } + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab3; } /* call R2, line 98 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 98 */ + if (ret < 0) return ret; + } + lab3: + ; + } + break; + case 2: + { int m = z->l - z->c; (void) m; /* not, line 101 */ + if (!(eq_s_b(z, 1, s_13))) goto lab5; + goto lab2; + lab5: + z->c = z->l - m; + } + { int ret; + ret = slice_del(z); /* delete, line 101 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_del(z); /* delete, line 104 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 105 */ + z->ket = z->c; /* [, line 106 */ + { int m = z->l - z->c; (void) m; /* or, line 106 */ + if (!(eq_s_b(z, 2, s_14))) goto lab8; + goto lab7; + lab8: + z->c = z->l - m; + if (!(eq_s_b(z, 2, s_15))) { z->c = z->l - m; goto lab6; } + } + lab7: + z->bra = z->c; /* ], line 106 */ + { int ret = r_R1(z); + if (ret == 0) { z->c = z->l - m; goto lab6; } /* call R1, line 106 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 106 */ + if (ret < 0) return ret; + } + lab6: + ; + } + break; + case 4: + { int ret; + ret = slice_del(z); /* delete, line 110 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 111 */ + z->ket = z->c; /* [, line 112 */ + among_var = find_among_b(z, a_3, 2); /* substring, line 112 */ + if (!(among_var)) { z->c = z->l - m; goto lab9; } + z->bra = z->c; /* ], line 112 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab9; } /* call R2, line 112 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: { z->c = z->l - m; goto lab9; } + case 1: + { int ret; + ret = slice_del(z); /* delete, line 114 */ + if (ret < 0) return ret; + } + break; + } + lab9: + ; + } + break; + } + lab2: + z->c = z->l - m; + } + return 1; +} + +extern int german_UTF_8_stem(struct SN_env * z) { + { int c = z->c; /* do, line 125 */ + { int ret = r_prelude(z); + if (ret == 0) goto lab0; /* call prelude, line 125 */ + if (ret < 0) return ret; + } + lab0: + z->c = c; + } + { int c = z->c; /* do, line 126 */ + { int ret = r_mark_regions(z); + if (ret == 0) goto lab1; /* call mark_regions, line 126 */ + if (ret < 0) return ret; + } + lab1: + z->c = c; + } + z->lb = z->c; z->c = z->l; /* backwards, line 127 */ + + { int m = z->l - z->c; (void) m; /* do, line 128 */ + { int ret = r_standard_suffix(z); + if (ret == 0) goto lab2; /* call standard_suffix, line 128 */ + if (ret < 0) return ret; + } + lab2: + z->c = z->l - m; + } + z->c = z->lb; + { int c = z->c; /* do, line 129 */ + { int ret = r_postlude(z); + if (ret == 0) goto lab3; /* call postlude, line 129 */ + if (ret < 0) return ret; + } + lab3: + z->c = c; + } + return 1; +} + +extern struct SN_env * german_UTF_8_create_env(void) { return SN_create_env(0, 3, 0); } + +extern void german_UTF_8_close_env(struct SN_env * z) { SN_close_env(z); } + diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_german.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_german.h new file mode 100644 index 0000000..5bd84d4 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_german.h @@ -0,0 +1,16 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern struct SN_env * german_UTF_8_create_env(void); +extern void german_UTF_8_close_env(struct SN_env * z); + +extern int german_UTF_8_stem(struct SN_env * z); + +#ifdef __cplusplus +} +#endif + diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_italian.c b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_italian.c new file mode 100644 index 0000000..5639b1c --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_italian.c @@ -0,0 +1,1113 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#include "../runtime/header.h" + +extern int italian_UTF_8_stem(struct SN_env * z); +static int r_vowel_suffix(struct SN_env * z); +static int r_verb_suffix(struct SN_env * z); +static int r_standard_suffix(struct SN_env * z); +static int r_attached_pronoun(struct SN_env * z); +static int r_R2(struct SN_env * z); +static int r_R1(struct SN_env * z); +static int r_RV(struct SN_env * z); +static int r_mark_regions(struct SN_env * z); +static int r_postlude(struct SN_env * z); +static int r_prelude(struct SN_env * z); + +extern struct SN_env * italian_UTF_8_create_env(void); +extern void italian_UTF_8_close_env(struct SN_env * z); + +static symbol s_0_1[2] = { 'q', 'u' }; +static symbol s_0_2[2] = { 0xC3, 0xA1 }; +static symbol s_0_3[2] = { 0xC3, 0xA9 }; +static symbol s_0_4[2] = { 0xC3, 0xAD }; +static symbol s_0_5[2] = { 0xC3, 0xB3 }; +static symbol s_0_6[2] = { 0xC3, 0xBA }; + +static struct among a_0[7] = +{ +/* 0 */ { 0, 0, -1, 7, 0}, +/* 1 */ { 2, s_0_1, 0, 6, 0}, +/* 2 */ { 2, s_0_2, 0, 1, 0}, +/* 3 */ { 2, s_0_3, 0, 2, 0}, +/* 4 */ { 2, s_0_4, 0, 3, 0}, +/* 5 */ { 2, s_0_5, 0, 4, 0}, +/* 6 */ { 2, s_0_6, 0, 5, 0} +}; + +static symbol s_1_1[1] = { 'I' }; +static symbol s_1_2[1] = { 'U' }; + +static struct among a_1[3] = +{ +/* 0 */ { 0, 0, -1, 3, 0}, +/* 1 */ { 1, s_1_1, 0, 1, 0}, +/* 2 */ { 1, s_1_2, 0, 2, 0} +}; + +static symbol s_2_0[2] = { 'l', 'a' }; +static symbol s_2_1[4] = { 'c', 'e', 'l', 'a' }; +static symbol s_2_2[6] = { 'g', 'l', 'i', 'e', 'l', 'a' }; +static symbol s_2_3[4] = { 'm', 'e', 'l', 'a' }; +static symbol s_2_4[4] = { 't', 'e', 'l', 'a' }; +static symbol s_2_5[4] = { 'v', 'e', 'l', 'a' }; +static symbol s_2_6[2] = { 'l', 'e' }; +static symbol s_2_7[4] = { 'c', 'e', 'l', 'e' }; +static symbol s_2_8[6] = { 'g', 'l', 'i', 'e', 'l', 'e' }; +static symbol s_2_9[4] = { 'm', 'e', 'l', 'e' }; +static symbol s_2_10[4] = { 't', 'e', 'l', 'e' }; +static symbol s_2_11[4] = { 'v', 'e', 'l', 'e' }; +static symbol s_2_12[2] = { 'n', 'e' }; +static symbol s_2_13[4] = { 'c', 'e', 'n', 'e' }; +static symbol s_2_14[6] = { 'g', 'l', 'i', 'e', 'n', 'e' }; +static symbol s_2_15[4] = { 'm', 'e', 'n', 'e' }; +static symbol s_2_16[4] = { 's', 'e', 'n', 'e' }; +static symbol s_2_17[4] = { 't', 'e', 'n', 'e' }; +static symbol s_2_18[4] = { 'v', 'e', 'n', 'e' }; +static symbol s_2_19[2] = { 'c', 'i' }; +static symbol s_2_20[2] = { 'l', 'i' }; +static symbol s_2_21[4] = { 'c', 'e', 'l', 'i' }; +static symbol s_2_22[6] = { 'g', 'l', 'i', 'e', 'l', 'i' }; +static symbol s_2_23[4] = { 'm', 'e', 'l', 'i' }; +static symbol s_2_24[4] = { 't', 'e', 'l', 'i' }; +static symbol s_2_25[4] = { 'v', 'e', 'l', 'i' }; +static symbol s_2_26[3] = { 'g', 'l', 'i' }; +static symbol s_2_27[2] = { 'm', 'i' }; +static symbol s_2_28[2] = { 's', 'i' }; +static symbol s_2_29[2] = { 't', 'i' }; +static symbol s_2_30[2] = { 'v', 'i' }; +static symbol s_2_31[2] = { 'l', 'o' }; +static symbol s_2_32[4] = { 'c', 'e', 'l', 'o' }; +static symbol s_2_33[6] = { 'g', 'l', 'i', 'e', 'l', 'o' }; +static symbol s_2_34[4] = { 'm', 'e', 'l', 'o' }; +static symbol s_2_35[4] = { 't', 'e', 'l', 'o' }; +static symbol s_2_36[4] = { 'v', 'e', 'l', 'o' }; + +static struct among a_2[37] = +{ +/* 0 */ { 2, s_2_0, -1, -1, 0}, +/* 1 */ { 4, s_2_1, 0, -1, 0}, +/* 2 */ { 6, s_2_2, 0, -1, 0}, +/* 3 */ { 4, s_2_3, 0, -1, 0}, +/* 4 */ { 4, s_2_4, 0, -1, 0}, +/* 5 */ { 4, s_2_5, 0, -1, 0}, +/* 6 */ { 2, s_2_6, -1, -1, 0}, +/* 7 */ { 4, s_2_7, 6, -1, 0}, +/* 8 */ { 6, s_2_8, 6, -1, 0}, +/* 9 */ { 4, s_2_9, 6, -1, 0}, +/* 10 */ { 4, s_2_10, 6, -1, 0}, +/* 11 */ { 4, s_2_11, 6, -1, 0}, +/* 12 */ { 2, s_2_12, -1, -1, 0}, +/* 13 */ { 4, s_2_13, 12, -1, 0}, +/* 14 */ { 6, s_2_14, 12, -1, 0}, +/* 15 */ { 4, s_2_15, 12, -1, 0}, +/* 16 */ { 4, s_2_16, 12, -1, 0}, +/* 17 */ { 4, s_2_17, 12, -1, 0}, +/* 18 */ { 4, s_2_18, 12, -1, 0}, +/* 19 */ { 2, s_2_19, -1, -1, 0}, +/* 20 */ { 2, s_2_20, -1, -1, 0}, +/* 21 */ { 4, s_2_21, 20, -1, 0}, +/* 22 */ { 6, s_2_22, 20, -1, 0}, +/* 23 */ { 4, s_2_23, 20, -1, 0}, +/* 24 */ { 4, s_2_24, 20, -1, 0}, +/* 25 */ { 4, s_2_25, 20, -1, 0}, +/* 26 */ { 3, s_2_26, 20, -1, 0}, +/* 27 */ { 2, s_2_27, -1, -1, 0}, +/* 28 */ { 2, s_2_28, -1, -1, 0}, +/* 29 */ { 2, s_2_29, -1, -1, 0}, +/* 30 */ { 2, s_2_30, -1, -1, 0}, +/* 31 */ { 2, s_2_31, -1, -1, 0}, +/* 32 */ { 4, s_2_32, 31, -1, 0}, +/* 33 */ { 6, s_2_33, 31, -1, 0}, +/* 34 */ { 4, s_2_34, 31, -1, 0}, +/* 35 */ { 4, s_2_35, 31, -1, 0}, +/* 36 */ { 4, s_2_36, 31, -1, 0} +}; + +static symbol s_3_0[4] = { 'a', 'n', 'd', 'o' }; +static symbol s_3_1[4] = { 'e', 'n', 'd', 'o' }; +static symbol s_3_2[2] = { 'a', 'r' }; +static symbol s_3_3[2] = { 'e', 'r' }; +static symbol s_3_4[2] = { 'i', 'r' }; + +static struct among a_3[5] = +{ +/* 0 */ { 4, s_3_0, -1, 1, 0}, +/* 1 */ { 4, s_3_1, -1, 1, 0}, +/* 2 */ { 2, s_3_2, -1, 2, 0}, +/* 3 */ { 2, s_3_3, -1, 2, 0}, +/* 4 */ { 2, s_3_4, -1, 2, 0} +}; + +static symbol s_4_0[2] = { 'i', 'c' }; +static symbol s_4_1[4] = { 'a', 'b', 'i', 'l' }; +static symbol s_4_2[2] = { 'o', 's' }; +static symbol s_4_3[2] = { 'i', 'v' }; + +static struct among a_4[4] = +{ +/* 0 */ { 2, s_4_0, -1, -1, 0}, +/* 1 */ { 4, s_4_1, -1, -1, 0}, +/* 2 */ { 2, s_4_2, -1, -1, 0}, +/* 3 */ { 2, s_4_3, -1, 1, 0} +}; + +static symbol s_5_0[2] = { 'i', 'c' }; +static symbol s_5_1[4] = { 'a', 'b', 'i', 'l' }; +static symbol s_5_2[2] = { 'i', 'v' }; + +static struct among a_5[3] = +{ +/* 0 */ { 2, s_5_0, -1, 1, 0}, +/* 1 */ { 4, s_5_1, -1, 1, 0}, +/* 2 */ { 2, s_5_2, -1, 1, 0} +}; + +static symbol s_6_0[3] = { 'i', 'c', 'a' }; +static symbol s_6_1[5] = { 'l', 'o', 'g', 'i', 'a' }; +static symbol s_6_2[3] = { 'o', 's', 'a' }; +static symbol s_6_3[4] = { 'i', 's', 't', 'a' }; +static symbol s_6_4[3] = { 'i', 'v', 'a' }; +static symbol s_6_5[4] = { 'a', 'n', 'z', 'a' }; +static symbol s_6_6[4] = { 'e', 'n', 'z', 'a' }; +static symbol s_6_7[3] = { 'i', 'c', 'e' }; +static symbol s_6_8[6] = { 'a', 't', 'r', 'i', 'c', 'e' }; +static symbol s_6_9[4] = { 'i', 'c', 'h', 'e' }; +static symbol s_6_10[5] = { 'l', 'o', 'g', 'i', 'e' }; +static symbol s_6_11[5] = { 'a', 'b', 'i', 'l', 'e' }; +static symbol s_6_12[5] = { 'i', 'b', 'i', 'l', 'e' }; +static symbol s_6_13[6] = { 'u', 's', 'i', 'o', 'n', 'e' }; +static symbol s_6_14[6] = { 'a', 'z', 'i', 'o', 'n', 'e' }; +static symbol s_6_15[6] = { 'u', 'z', 'i', 'o', 'n', 'e' }; +static symbol s_6_16[5] = { 'a', 't', 'o', 'r', 'e' }; +static symbol s_6_17[3] = { 'o', 's', 'e' }; +static symbol s_6_18[4] = { 'a', 'n', 't', 'e' }; +static symbol s_6_19[5] = { 'm', 'e', 'n', 't', 'e' }; +static symbol s_6_20[6] = { 'a', 'm', 'e', 'n', 't', 'e' }; +static symbol s_6_21[4] = { 'i', 's', 't', 'e' }; +static symbol s_6_22[3] = { 'i', 'v', 'e' }; +static symbol s_6_23[4] = { 'a', 'n', 'z', 'e' }; +static symbol s_6_24[4] = { 'e', 'n', 'z', 'e' }; +static symbol s_6_25[3] = { 'i', 'c', 'i' }; +static symbol s_6_26[6] = { 'a', 't', 'r', 'i', 'c', 'i' }; +static symbol s_6_27[4] = { 'i', 'c', 'h', 'i' }; +static symbol s_6_28[5] = { 'a', 'b', 'i', 'l', 'i' }; +static symbol s_6_29[5] = { 'i', 'b', 'i', 'l', 'i' }; +static symbol s_6_30[4] = { 'i', 's', 'm', 'i' }; +static symbol s_6_31[6] = { 'u', 's', 'i', 'o', 'n', 'i' }; +static symbol s_6_32[6] = { 'a', 'z', 'i', 'o', 'n', 'i' }; +static symbol s_6_33[6] = { 'u', 'z', 'i', 'o', 'n', 'i' }; +static symbol s_6_34[5] = { 'a', 't', 'o', 'r', 'i' }; +static symbol s_6_35[3] = { 'o', 's', 'i' }; +static symbol s_6_36[4] = { 'a', 'n', 't', 'i' }; +static symbol s_6_37[6] = { 'a', 'm', 'e', 'n', 't', 'i' }; +static symbol s_6_38[6] = { 'i', 'm', 'e', 'n', 't', 'i' }; +static symbol s_6_39[4] = { 'i', 's', 't', 'i' }; +static symbol s_6_40[3] = { 'i', 'v', 'i' }; +static symbol s_6_41[3] = { 'i', 'c', 'o' }; +static symbol s_6_42[4] = { 'i', 's', 'm', 'o' }; +static symbol s_6_43[3] = { 'o', 's', 'o' }; +static symbol s_6_44[6] = { 'a', 'm', 'e', 'n', 't', 'o' }; +static symbol s_6_45[6] = { 'i', 'm', 'e', 'n', 't', 'o' }; +static symbol s_6_46[3] = { 'i', 'v', 'o' }; +static symbol s_6_47[4] = { 'i', 't', 0xC3, 0xA0 }; +static symbol s_6_48[5] = { 'i', 's', 't', 0xC3, 0xA0 }; +static symbol s_6_49[5] = { 'i', 's', 't', 0xC3, 0xA8 }; +static symbol s_6_50[5] = { 'i', 's', 't', 0xC3, 0xAC }; + +static struct among a_6[51] = +{ +/* 0 */ { 3, s_6_0, -1, 1, 0}, +/* 1 */ { 5, s_6_1, -1, 3, 0}, +/* 2 */ { 3, s_6_2, -1, 1, 0}, +/* 3 */ { 4, s_6_3, -1, 1, 0}, +/* 4 */ { 3, s_6_4, -1, 9, 0}, +/* 5 */ { 4, s_6_5, -1, 1, 0}, +/* 6 */ { 4, s_6_6, -1, 5, 0}, +/* 7 */ { 3, s_6_7, -1, 1, 0}, +/* 8 */ { 6, s_6_8, 7, 1, 0}, +/* 9 */ { 4, s_6_9, -1, 1, 0}, +/* 10 */ { 5, s_6_10, -1, 3, 0}, +/* 11 */ { 5, s_6_11, -1, 1, 0}, +/* 12 */ { 5, s_6_12, -1, 1, 0}, +/* 13 */ { 6, s_6_13, -1, 4, 0}, +/* 14 */ { 6, s_6_14, -1, 2, 0}, +/* 15 */ { 6, s_6_15, -1, 4, 0}, +/* 16 */ { 5, s_6_16, -1, 2, 0}, +/* 17 */ { 3, s_6_17, -1, 1, 0}, +/* 18 */ { 4, s_6_18, -1, 1, 0}, +/* 19 */ { 5, s_6_19, -1, 1, 0}, +/* 20 */ { 6, s_6_20, 19, 7, 0}, +/* 21 */ { 4, s_6_21, -1, 1, 0}, +/* 22 */ { 3, s_6_22, -1, 9, 0}, +/* 23 */ { 4, s_6_23, -1, 1, 0}, +/* 24 */ { 4, s_6_24, -1, 5, 0}, +/* 25 */ { 3, s_6_25, -1, 1, 0}, +/* 26 */ { 6, s_6_26, 25, 1, 0}, +/* 27 */ { 4, s_6_27, -1, 1, 0}, +/* 28 */ { 5, s_6_28, -1, 1, 0}, +/* 29 */ { 5, s_6_29, -1, 1, 0}, +/* 30 */ { 4, s_6_30, -1, 1, 0}, +/* 31 */ { 6, s_6_31, -1, 4, 0}, +/* 32 */ { 6, s_6_32, -1, 2, 0}, +/* 33 */ { 6, s_6_33, -1, 4, 0}, +/* 34 */ { 5, s_6_34, -1, 2, 0}, +/* 35 */ { 3, s_6_35, -1, 1, 0}, +/* 36 */ { 4, s_6_36, -1, 1, 0}, +/* 37 */ { 6, s_6_37, -1, 6, 0}, +/* 38 */ { 6, s_6_38, -1, 6, 0}, +/* 39 */ { 4, s_6_39, -1, 1, 0}, +/* 40 */ { 3, s_6_40, -1, 9, 0}, +/* 41 */ { 3, s_6_41, -1, 1, 0}, +/* 42 */ { 4, s_6_42, -1, 1, 0}, +/* 43 */ { 3, s_6_43, -1, 1, 0}, +/* 44 */ { 6, s_6_44, -1, 6, 0}, +/* 45 */ { 6, s_6_45, -1, 6, 0}, +/* 46 */ { 3, s_6_46, -1, 9, 0}, +/* 47 */ { 4, s_6_47, -1, 8, 0}, +/* 48 */ { 5, s_6_48, -1, 1, 0}, +/* 49 */ { 5, s_6_49, -1, 1, 0}, +/* 50 */ { 5, s_6_50, -1, 1, 0} +}; + +static symbol s_7_0[4] = { 'i', 's', 'c', 'a' }; +static symbol s_7_1[4] = { 'e', 'n', 'd', 'a' }; +static symbol s_7_2[3] = { 'a', 't', 'a' }; +static symbol s_7_3[3] = { 'i', 't', 'a' }; +static symbol s_7_4[3] = { 'u', 't', 'a' }; +static symbol s_7_5[3] = { 'a', 'v', 'a' }; +static symbol s_7_6[3] = { 'e', 'v', 'a' }; +static symbol s_7_7[3] = { 'i', 'v', 'a' }; +static symbol s_7_8[6] = { 'e', 'r', 'e', 'b', 'b', 'e' }; +static symbol s_7_9[6] = { 'i', 'r', 'e', 'b', 'b', 'e' }; +static symbol s_7_10[4] = { 'i', 's', 'c', 'e' }; +static symbol s_7_11[4] = { 'e', 'n', 'd', 'e' }; +static symbol s_7_12[3] = { 'a', 'r', 'e' }; +static symbol s_7_13[3] = { 'e', 'r', 'e' }; +static symbol s_7_14[3] = { 'i', 'r', 'e' }; +static symbol s_7_15[4] = { 'a', 's', 's', 'e' }; +static symbol s_7_16[3] = { 'a', 't', 'e' }; +static symbol s_7_17[5] = { 'a', 'v', 'a', 't', 'e' }; +static symbol s_7_18[5] = { 'e', 'v', 'a', 't', 'e' }; +static symbol s_7_19[5] = { 'i', 'v', 'a', 't', 'e' }; +static symbol s_7_20[3] = { 'e', 't', 'e' }; +static symbol s_7_21[5] = { 'e', 'r', 'e', 't', 'e' }; +static symbol s_7_22[5] = { 'i', 'r', 'e', 't', 'e' }; +static symbol s_7_23[3] = { 'i', 't', 'e' }; +static symbol s_7_24[6] = { 'e', 'r', 'e', 's', 't', 'e' }; +static symbol s_7_25[6] = { 'i', 'r', 'e', 's', 't', 'e' }; +static symbol s_7_26[3] = { 'u', 't', 'e' }; +static symbol s_7_27[4] = { 'e', 'r', 'a', 'i' }; +static symbol s_7_28[4] = { 'i', 'r', 'a', 'i' }; +static symbol s_7_29[4] = { 'i', 's', 'c', 'i' }; +static symbol s_7_30[4] = { 'e', 'n', 'd', 'i' }; +static symbol s_7_31[4] = { 'e', 'r', 'e', 'i' }; +static symbol s_7_32[4] = { 'i', 'r', 'e', 'i' }; +static symbol s_7_33[4] = { 'a', 's', 's', 'i' }; +static symbol s_7_34[3] = { 'a', 't', 'i' }; +static symbol s_7_35[3] = { 'i', 't', 'i' }; +static symbol s_7_36[6] = { 'e', 'r', 'e', 's', 't', 'i' }; +static symbol s_7_37[6] = { 'i', 'r', 'e', 's', 't', 'i' }; +static symbol s_7_38[3] = { 'u', 't', 'i' }; +static symbol s_7_39[3] = { 'a', 'v', 'i' }; +static symbol s_7_40[3] = { 'e', 'v', 'i' }; +static symbol s_7_41[3] = { 'i', 'v', 'i' }; +static symbol s_7_42[4] = { 'i', 's', 'c', 'o' }; +static symbol s_7_43[4] = { 'a', 'n', 'd', 'o' }; +static symbol s_7_44[4] = { 'e', 'n', 'd', 'o' }; +static symbol s_7_45[4] = { 'Y', 'a', 'm', 'o' }; +static symbol s_7_46[4] = { 'i', 'a', 'm', 'o' }; +static symbol s_7_47[5] = { 'a', 'v', 'a', 'm', 'o' }; +static symbol s_7_48[5] = { 'e', 'v', 'a', 'm', 'o' }; +static symbol s_7_49[5] = { 'i', 'v', 'a', 'm', 'o' }; +static symbol s_7_50[5] = { 'e', 'r', 'e', 'm', 'o' }; +static symbol s_7_51[5] = { 'i', 'r', 'e', 'm', 'o' }; +static symbol s_7_52[6] = { 'a', 's', 's', 'i', 'm', 'o' }; +static symbol s_7_53[4] = { 'a', 'm', 'm', 'o' }; +static symbol s_7_54[4] = { 'e', 'm', 'm', 'o' }; +static symbol s_7_55[6] = { 'e', 'r', 'e', 'm', 'm', 'o' }; +static symbol s_7_56[6] = { 'i', 'r', 'e', 'm', 'm', 'o' }; +static symbol s_7_57[4] = { 'i', 'm', 'm', 'o' }; +static symbol s_7_58[3] = { 'a', 'n', 'o' }; +static symbol s_7_59[6] = { 'i', 's', 'c', 'a', 'n', 'o' }; +static symbol s_7_60[5] = { 'a', 'v', 'a', 'n', 'o' }; +static symbol s_7_61[5] = { 'e', 'v', 'a', 'n', 'o' }; +static symbol s_7_62[5] = { 'i', 'v', 'a', 'n', 'o' }; +static symbol s_7_63[6] = { 'e', 'r', 'a', 'n', 'n', 'o' }; +static symbol s_7_64[6] = { 'i', 'r', 'a', 'n', 'n', 'o' }; +static symbol s_7_65[3] = { 'o', 'n', 'o' }; +static symbol s_7_66[6] = { 'i', 's', 'c', 'o', 'n', 'o' }; +static symbol s_7_67[5] = { 'a', 'r', 'o', 'n', 'o' }; +static symbol s_7_68[5] = { 'e', 'r', 'o', 'n', 'o' }; +static symbol s_7_69[5] = { 'i', 'r', 'o', 'n', 'o' }; +static symbol s_7_70[8] = { 'e', 'r', 'e', 'b', 'b', 'e', 'r', 'o' }; +static symbol s_7_71[8] = { 'i', 'r', 'e', 'b', 'b', 'e', 'r', 'o' }; +static symbol s_7_72[6] = { 'a', 's', 's', 'e', 'r', 'o' }; +static symbol s_7_73[6] = { 'e', 's', 's', 'e', 'r', 'o' }; +static symbol s_7_74[6] = { 'i', 's', 's', 'e', 'r', 'o' }; +static symbol s_7_75[3] = { 'a', 't', 'o' }; +static symbol s_7_76[3] = { 'i', 't', 'o' }; +static symbol s_7_77[3] = { 'u', 't', 'o' }; +static symbol s_7_78[3] = { 'a', 'v', 'o' }; +static symbol s_7_79[3] = { 'e', 'v', 'o' }; +static symbol s_7_80[3] = { 'i', 'v', 'o' }; +static symbol s_7_81[2] = { 'a', 'r' }; +static symbol s_7_82[2] = { 'i', 'r' }; +static symbol s_7_83[4] = { 'e', 'r', 0xC3, 0xA0 }; +static symbol s_7_84[4] = { 'i', 'r', 0xC3, 0xA0 }; +static symbol s_7_85[4] = { 'e', 'r', 0xC3, 0xB2 }; +static symbol s_7_86[4] = { 'i', 'r', 0xC3, 0xB2 }; + +static struct among a_7[87] = +{ +/* 0 */ { 4, s_7_0, -1, 1, 0}, +/* 1 */ { 4, s_7_1, -1, 1, 0}, +/* 2 */ { 3, s_7_2, -1, 1, 0}, +/* 3 */ { 3, s_7_3, -1, 1, 0}, +/* 4 */ { 3, s_7_4, -1, 1, 0}, +/* 5 */ { 3, s_7_5, -1, 1, 0}, +/* 6 */ { 3, s_7_6, -1, 1, 0}, +/* 7 */ { 3, s_7_7, -1, 1, 0}, +/* 8 */ { 6, s_7_8, -1, 1, 0}, +/* 9 */ { 6, s_7_9, -1, 1, 0}, +/* 10 */ { 4, s_7_10, -1, 1, 0}, +/* 11 */ { 4, s_7_11, -1, 1, 0}, +/* 12 */ { 3, s_7_12, -1, 1, 0}, +/* 13 */ { 3, s_7_13, -1, 1, 0}, +/* 14 */ { 3, s_7_14, -1, 1, 0}, +/* 15 */ { 4, s_7_15, -1, 1, 0}, +/* 16 */ { 3, s_7_16, -1, 1, 0}, +/* 17 */ { 5, s_7_17, 16, 1, 0}, +/* 18 */ { 5, s_7_18, 16, 1, 0}, +/* 19 */ { 5, s_7_19, 16, 1, 0}, +/* 20 */ { 3, s_7_20, -1, 1, 0}, +/* 21 */ { 5, s_7_21, 20, 1, 0}, +/* 22 */ { 5, s_7_22, 20, 1, 0}, +/* 23 */ { 3, s_7_23, -1, 1, 0}, +/* 24 */ { 6, s_7_24, -1, 1, 0}, +/* 25 */ { 6, s_7_25, -1, 1, 0}, +/* 26 */ { 3, s_7_26, -1, 1, 0}, +/* 27 */ { 4, s_7_27, -1, 1, 0}, +/* 28 */ { 4, s_7_28, -1, 1, 0}, +/* 29 */ { 4, s_7_29, -1, 1, 0}, +/* 30 */ { 4, s_7_30, -1, 1, 0}, +/* 31 */ { 4, s_7_31, -1, 1, 0}, +/* 32 */ { 4, s_7_32, -1, 1, 0}, +/* 33 */ { 4, s_7_33, -1, 1, 0}, +/* 34 */ { 3, s_7_34, -1, 1, 0}, +/* 35 */ { 3, s_7_35, -1, 1, 0}, +/* 36 */ { 6, s_7_36, -1, 1, 0}, +/* 37 */ { 6, s_7_37, -1, 1, 0}, +/* 38 */ { 3, s_7_38, -1, 1, 0}, +/* 39 */ { 3, s_7_39, -1, 1, 0}, +/* 40 */ { 3, s_7_40, -1, 1, 0}, +/* 41 */ { 3, s_7_41, -1, 1, 0}, +/* 42 */ { 4, s_7_42, -1, 1, 0}, +/* 43 */ { 4, s_7_43, -1, 1, 0}, +/* 44 */ { 4, s_7_44, -1, 1, 0}, +/* 45 */ { 4, s_7_45, -1, 1, 0}, +/* 46 */ { 4, s_7_46, -1, 1, 0}, +/* 47 */ { 5, s_7_47, -1, 1, 0}, +/* 48 */ { 5, s_7_48, -1, 1, 0}, +/* 49 */ { 5, s_7_49, -1, 1, 0}, +/* 50 */ { 5, s_7_50, -1, 1, 0}, +/* 51 */ { 5, s_7_51, -1, 1, 0}, +/* 52 */ { 6, s_7_52, -1, 1, 0}, +/* 53 */ { 4, s_7_53, -1, 1, 0}, +/* 54 */ { 4, s_7_54, -1, 1, 0}, +/* 55 */ { 6, s_7_55, 54, 1, 0}, +/* 56 */ { 6, s_7_56, 54, 1, 0}, +/* 57 */ { 4, s_7_57, -1, 1, 0}, +/* 58 */ { 3, s_7_58, -1, 1, 0}, +/* 59 */ { 6, s_7_59, 58, 1, 0}, +/* 60 */ { 5, s_7_60, 58, 1, 0}, +/* 61 */ { 5, s_7_61, 58, 1, 0}, +/* 62 */ { 5, s_7_62, 58, 1, 0}, +/* 63 */ { 6, s_7_63, -1, 1, 0}, +/* 64 */ { 6, s_7_64, -1, 1, 0}, +/* 65 */ { 3, s_7_65, -1, 1, 0}, +/* 66 */ { 6, s_7_66, 65, 1, 0}, +/* 67 */ { 5, s_7_67, 65, 1, 0}, +/* 68 */ { 5, s_7_68, 65, 1, 0}, +/* 69 */ { 5, s_7_69, 65, 1, 0}, +/* 70 */ { 8, s_7_70, -1, 1, 0}, +/* 71 */ { 8, s_7_71, -1, 1, 0}, +/* 72 */ { 6, s_7_72, -1, 1, 0}, +/* 73 */ { 6, s_7_73, -1, 1, 0}, +/* 74 */ { 6, s_7_74, -1, 1, 0}, +/* 75 */ { 3, s_7_75, -1, 1, 0}, +/* 76 */ { 3, s_7_76, -1, 1, 0}, +/* 77 */ { 3, s_7_77, -1, 1, 0}, +/* 78 */ { 3, s_7_78, -1, 1, 0}, +/* 79 */ { 3, s_7_79, -1, 1, 0}, +/* 80 */ { 3, s_7_80, -1, 1, 0}, +/* 81 */ { 2, s_7_81, -1, 1, 0}, +/* 82 */ { 2, s_7_82, -1, 1, 0}, +/* 83 */ { 4, s_7_83, -1, 1, 0}, +/* 84 */ { 4, s_7_84, -1, 1, 0}, +/* 85 */ { 4, s_7_85, -1, 1, 0}, +/* 86 */ { 4, s_7_86, -1, 1, 0} +}; + +static unsigned char g_v[] = { 17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 8, 2, 1 }; + +static unsigned char g_AEIO[] = { 17, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 8, 2 }; + +static unsigned char g_CG[] = { 17 }; + +static symbol s_0[] = { 0xC3, 0xA0 }; +static symbol s_1[] = { 0xC3, 0xA8 }; +static symbol s_2[] = { 0xC3, 0xAC }; +static symbol s_3[] = { 0xC3, 0xB2 }; +static symbol s_4[] = { 0xC3, 0xB9 }; +static symbol s_5[] = { 'q', 'U' }; +static symbol s_6[] = { 'u' }; +static symbol s_7[] = { 'U' }; +static symbol s_8[] = { 'i' }; +static symbol s_9[] = { 'I' }; +static symbol s_10[] = { 'i' }; +static symbol s_11[] = { 'u' }; +static symbol s_12[] = { 'e' }; +static symbol s_13[] = { 'i', 'c' }; +static symbol s_14[] = { 'l', 'o', 'g' }; +static symbol s_15[] = { 'u' }; +static symbol s_16[] = { 'e', 'n', 't', 'e' }; +static symbol s_17[] = { 'a', 't' }; +static symbol s_18[] = { 'a', 't' }; +static symbol s_19[] = { 'i', 'c' }; +static symbol s_20[] = { 'i' }; +static symbol s_21[] = { 'h' }; + +static int r_prelude(struct SN_env * z) { + int among_var; + { int c_test = z->c; /* test, line 35 */ + while(1) { /* repeat, line 35 */ + int c = z->c; + z->bra = z->c; /* [, line 36 */ + among_var = find_among(z, a_0, 7); /* substring, line 36 */ + if (!(among_var)) goto lab0; + z->ket = z->c; /* ], line 36 */ + switch(among_var) { + case 0: goto lab0; + case 1: + { int ret; + ret = slice_from_s(z, 2, s_0); /* <-, line 37 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 2, s_1); /* <-, line 38 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_from_s(z, 2, s_2); /* <-, line 39 */ + if (ret < 0) return ret; + } + break; + case 4: + { int ret; + ret = slice_from_s(z, 2, s_3); /* <-, line 40 */ + if (ret < 0) return ret; + } + break; + case 5: + { int ret; + ret = slice_from_s(z, 2, s_4); /* <-, line 41 */ + if (ret < 0) return ret; + } + break; + case 6: + { int ret; + ret = slice_from_s(z, 2, s_5); /* <-, line 42 */ + if (ret < 0) return ret; + } + break; + case 7: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab0; + z->c = c; /* next, line 43 */ + } + break; + } + continue; + lab0: + z->c = c; + break; + } + z->c = c_test; + } + while(1) { /* repeat, line 46 */ + int c = z->c; + while(1) { /* goto, line 46 */ + int c = z->c; + if (!(in_grouping_U(z, g_v, 97, 249))) goto lab2; + z->bra = z->c; /* [, line 47 */ + { int c = z->c; /* or, line 47 */ + if (!(eq_s(z, 1, s_6))) goto lab4; + z->ket = z->c; /* ], line 47 */ + if (!(in_grouping_U(z, g_v, 97, 249))) goto lab4; + { int ret; + ret = slice_from_s(z, 1, s_7); /* <-, line 47 */ + if (ret < 0) return ret; + } + goto lab3; + lab4: + z->c = c; + if (!(eq_s(z, 1, s_8))) goto lab2; + z->ket = z->c; /* ], line 48 */ + if (!(in_grouping_U(z, g_v, 97, 249))) goto lab2; + { int ret; + ret = slice_from_s(z, 1, s_9); /* <-, line 48 */ + if (ret < 0) return ret; + } + } + lab3: + z->c = c; + break; + lab2: + z->c = c; + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab1; + z->c = c; /* goto, line 46 */ + } + } + continue; + lab1: + z->c = c; + break; + } + return 1; +} + +static int r_mark_regions(struct SN_env * z) { + z->I[0] = z->l; + z->I[1] = z->l; + z->I[2] = z->l; + { int c = z->c; /* do, line 58 */ + { int c = z->c; /* or, line 60 */ + if (!(in_grouping_U(z, g_v, 97, 249))) goto lab2; + { int c = z->c; /* or, line 59 */ + if (!(out_grouping_U(z, g_v, 97, 249))) goto lab4; + while(1) { /* gopast, line 59 */ + if (!(in_grouping_U(z, g_v, 97, 249))) goto lab5; + break; + lab5: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab4; + z->c = c; /* gopast, line 59 */ + } + } + goto lab3; + lab4: + z->c = c; + if (!(in_grouping_U(z, g_v, 97, 249))) goto lab2; + while(1) { /* gopast, line 59 */ + if (!(out_grouping_U(z, g_v, 97, 249))) goto lab6; + break; + lab6: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab2; + z->c = c; /* gopast, line 59 */ + } + } + } + lab3: + goto lab1; + lab2: + z->c = c; + if (!(out_grouping_U(z, g_v, 97, 249))) goto lab0; + { int c = z->c; /* or, line 61 */ + if (!(out_grouping_U(z, g_v, 97, 249))) goto lab8; + while(1) { /* gopast, line 61 */ + if (!(in_grouping_U(z, g_v, 97, 249))) goto lab9; + break; + lab9: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab8; + z->c = c; /* gopast, line 61 */ + } + } + goto lab7; + lab8: + z->c = c; + if (!(in_grouping_U(z, g_v, 97, 249))) goto lab0; + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab0; + z->c = c; /* next, line 61 */ + } + } + lab7: + ; + } + lab1: + z->I[0] = z->c; /* setmark pV, line 62 */ + lab0: + z->c = c; + } + { int c = z->c; /* do, line 64 */ + while(1) { /* gopast, line 65 */ + if (!(in_grouping_U(z, g_v, 97, 249))) goto lab11; + break; + lab11: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab10; + z->c = c; /* gopast, line 65 */ + } + } + while(1) { /* gopast, line 65 */ + if (!(out_grouping_U(z, g_v, 97, 249))) goto lab12; + break; + lab12: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab10; + z->c = c; /* gopast, line 65 */ + } + } + z->I[1] = z->c; /* setmark p1, line 65 */ + while(1) { /* gopast, line 66 */ + if (!(in_grouping_U(z, g_v, 97, 249))) goto lab13; + break; + lab13: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab10; + z->c = c; /* gopast, line 66 */ + } + } + while(1) { /* gopast, line 66 */ + if (!(out_grouping_U(z, g_v, 97, 249))) goto lab14; + break; + lab14: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab10; + z->c = c; /* gopast, line 66 */ + } + } + z->I[2] = z->c; /* setmark p2, line 66 */ + lab10: + z->c = c; + } + return 1; +} + +static int r_postlude(struct SN_env * z) { + int among_var; + while(1) { /* repeat, line 70 */ + int c = z->c; + z->bra = z->c; /* [, line 72 */ + among_var = find_among(z, a_1, 3); /* substring, line 72 */ + if (!(among_var)) goto lab0; + z->ket = z->c; /* ], line 72 */ + switch(among_var) { + case 0: goto lab0; + case 1: + { int ret; + ret = slice_from_s(z, 1, s_10); /* <-, line 73 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 1, s_11); /* <-, line 74 */ + if (ret < 0) return ret; + } + break; + case 3: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab0; + z->c = c; /* next, line 75 */ + } + break; + } + continue; + lab0: + z->c = c; + break; + } + return 1; +} + +static int r_RV(struct SN_env * z) { + if (!(z->I[0] <= z->c)) return 0; + return 1; +} + +static int r_R1(struct SN_env * z) { + if (!(z->I[1] <= z->c)) return 0; + return 1; +} + +static int r_R2(struct SN_env * z) { + if (!(z->I[2] <= z->c)) return 0; + return 1; +} + +static int r_attached_pronoun(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 87 */ + if (!(find_among_b(z, a_2, 37))) return 0; /* substring, line 87 */ + z->bra = z->c; /* ], line 87 */ + among_var = find_among_b(z, a_3, 5); /* among, line 97 */ + if (!(among_var)) return 0; + { int ret = r_RV(z); + if (ret == 0) return 0; /* call RV, line 97 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 98 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 1, s_12); /* <-, line 99 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_standard_suffix(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 104 */ + among_var = find_among_b(z, a_6, 51); /* substring, line 104 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 104 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 111 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 111 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 113 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 113 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 114 */ + z->ket = z->c; /* [, line 114 */ + if (!(eq_s_b(z, 2, s_13))) { z->c = z->l - m; goto lab0; } + z->bra = z->c; /* ], line 114 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab0; } /* call R2, line 114 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 114 */ + if (ret < 0) return ret; + } + lab0: + ; + } + break; + case 3: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 117 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 3, s_14); /* <-, line 117 */ + if (ret < 0) return ret; + } + break; + case 4: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 119 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 1, s_15); /* <-, line 119 */ + if (ret < 0) return ret; + } + break; + case 5: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 121 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 4, s_16); /* <-, line 121 */ + if (ret < 0) return ret; + } + break; + case 6: + { int ret = r_RV(z); + if (ret == 0) return 0; /* call RV, line 123 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 123 */ + if (ret < 0) return ret; + } + break; + case 7: + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 125 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 125 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 126 */ + z->ket = z->c; /* [, line 127 */ + among_var = find_among_b(z, a_4, 4); /* substring, line 127 */ + if (!(among_var)) { z->c = z->l - m; goto lab1; } + z->bra = z->c; /* ], line 127 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab1; } /* call R2, line 127 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 127 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: { z->c = z->l - m; goto lab1; } + case 1: + z->ket = z->c; /* [, line 128 */ + if (!(eq_s_b(z, 2, s_17))) { z->c = z->l - m; goto lab1; } + z->bra = z->c; /* ], line 128 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab1; } /* call R2, line 128 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 128 */ + if (ret < 0) return ret; + } + break; + } + lab1: + ; + } + break; + case 8: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 134 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 134 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 135 */ + z->ket = z->c; /* [, line 136 */ + among_var = find_among_b(z, a_5, 3); /* substring, line 136 */ + if (!(among_var)) { z->c = z->l - m; goto lab2; } + z->bra = z->c; /* ], line 136 */ + switch(among_var) { + case 0: { z->c = z->l - m; goto lab2; } + case 1: + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab2; } /* call R2, line 137 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 137 */ + if (ret < 0) return ret; + } + break; + } + lab2: + ; + } + break; + case 9: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 142 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 142 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 143 */ + z->ket = z->c; /* [, line 143 */ + if (!(eq_s_b(z, 2, s_18))) { z->c = z->l - m; goto lab3; } + z->bra = z->c; /* ], line 143 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab3; } /* call R2, line 143 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 143 */ + if (ret < 0) return ret; + } + z->ket = z->c; /* [, line 143 */ + if (!(eq_s_b(z, 2, s_19))) { z->c = z->l - m; goto lab3; } + z->bra = z->c; /* ], line 143 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab3; } /* call R2, line 143 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 143 */ + if (ret < 0) return ret; + } + lab3: + ; + } + break; + } + return 1; +} + +static int r_verb_suffix(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 148 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 148 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 149 */ + among_var = find_among_b(z, a_7, 87); /* substring, line 149 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 149 */ + switch(among_var) { + case 0: { z->lb = m3; return 0; } + case 1: + { int ret; + ret = slice_del(z); /* delete, line 163 */ + if (ret < 0) return ret; + } + break; + } + z->lb = m3; + } + return 1; +} + +static int r_vowel_suffix(struct SN_env * z) { + { int m = z->l - z->c; (void) m; /* try, line 171 */ + z->ket = z->c; /* [, line 172 */ + if (!(in_grouping_b_U(z, g_AEIO, 97, 242))) { z->c = z->l - m; goto lab0; } + z->bra = z->c; /* ], line 172 */ + { int ret = r_RV(z); + if (ret == 0) { z->c = z->l - m; goto lab0; } /* call RV, line 172 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 172 */ + if (ret < 0) return ret; + } + z->ket = z->c; /* [, line 173 */ + if (!(eq_s_b(z, 1, s_20))) { z->c = z->l - m; goto lab0; } + z->bra = z->c; /* ], line 173 */ + { int ret = r_RV(z); + if (ret == 0) { z->c = z->l - m; goto lab0; } /* call RV, line 173 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 173 */ + if (ret < 0) return ret; + } + lab0: + ; + } + { int m = z->l - z->c; (void) m; /* try, line 175 */ + z->ket = z->c; /* [, line 176 */ + if (!(eq_s_b(z, 1, s_21))) { z->c = z->l - m; goto lab1; } + z->bra = z->c; /* ], line 176 */ + if (!(in_grouping_b_U(z, g_CG, 99, 103))) { z->c = z->l - m; goto lab1; } + { int ret = r_RV(z); + if (ret == 0) { z->c = z->l - m; goto lab1; } /* call RV, line 176 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 176 */ + if (ret < 0) return ret; + } + lab1: + ; + } + return 1; +} + +extern int italian_UTF_8_stem(struct SN_env * z) { + { int c = z->c; /* do, line 182 */ + { int ret = r_prelude(z); + if (ret == 0) goto lab0; /* call prelude, line 182 */ + if (ret < 0) return ret; + } + lab0: + z->c = c; + } + { int c = z->c; /* do, line 183 */ + { int ret = r_mark_regions(z); + if (ret == 0) goto lab1; /* call mark_regions, line 183 */ + if (ret < 0) return ret; + } + lab1: + z->c = c; + } + z->lb = z->c; z->c = z->l; /* backwards, line 184 */ + + { int m = z->l - z->c; (void) m; /* do, line 185 */ + { int ret = r_attached_pronoun(z); + if (ret == 0) goto lab2; /* call attached_pronoun, line 185 */ + if (ret < 0) return ret; + } + lab2: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 186 */ + { int m = z->l - z->c; (void) m; /* or, line 186 */ + { int ret = r_standard_suffix(z); + if (ret == 0) goto lab5; /* call standard_suffix, line 186 */ + if (ret < 0) return ret; + } + goto lab4; + lab5: + z->c = z->l - m; + { int ret = r_verb_suffix(z); + if (ret == 0) goto lab3; /* call verb_suffix, line 186 */ + if (ret < 0) return ret; + } + } + lab4: + lab3: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 187 */ + { int ret = r_vowel_suffix(z); + if (ret == 0) goto lab6; /* call vowel_suffix, line 187 */ + if (ret < 0) return ret; + } + lab6: + z->c = z->l - m; + } + z->c = z->lb; + { int c = z->c; /* do, line 189 */ + { int ret = r_postlude(z); + if (ret == 0) goto lab7; /* call postlude, line 189 */ + if (ret < 0) return ret; + } + lab7: + z->c = c; + } + return 1; +} + +extern struct SN_env * italian_UTF_8_create_env(void) { return SN_create_env(0, 3, 0); } + +extern void italian_UTF_8_close_env(struct SN_env * z) { SN_close_env(z); } + diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_italian.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_italian.h new file mode 100644 index 0000000..3bee080 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_italian.h @@ -0,0 +1,16 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern struct SN_env * italian_UTF_8_create_env(void); +extern void italian_UTF_8_close_env(struct SN_env * z); + +extern int italian_UTF_8_stem(struct SN_env * z); + +#ifdef __cplusplus +} +#endif + diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_norwegian.c b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_norwegian.c new file mode 100644 index 0000000..6a5ea99 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_norwegian.c @@ -0,0 +1,302 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#include "../runtime/header.h" + +extern int norwegian_UTF_8_stem(struct SN_env * z); +static int r_other_suffix(struct SN_env * z); +static int r_consonant_pair(struct SN_env * z); +static int r_main_suffix(struct SN_env * z); +static int r_mark_regions(struct SN_env * z); + +extern struct SN_env * norwegian_UTF_8_create_env(void); +extern void norwegian_UTF_8_close_env(struct SN_env * z); + +static symbol s_0_0[1] = { 'a' }; +static symbol s_0_1[1] = { 'e' }; +static symbol s_0_2[3] = { 'e', 'd', 'e' }; +static symbol s_0_3[4] = { 'a', 'n', 'd', 'e' }; +static symbol s_0_4[4] = { 'e', 'n', 'd', 'e' }; +static symbol s_0_5[3] = { 'a', 'n', 'e' }; +static symbol s_0_6[3] = { 'e', 'n', 'e' }; +static symbol s_0_7[6] = { 'h', 'e', 't', 'e', 'n', 'e' }; +static symbol s_0_8[4] = { 'e', 'r', 't', 'e' }; +static symbol s_0_9[2] = { 'e', 'n' }; +static symbol s_0_10[5] = { 'h', 'e', 't', 'e', 'n' }; +static symbol s_0_11[2] = { 'a', 'r' }; +static symbol s_0_12[2] = { 'e', 'r' }; +static symbol s_0_13[5] = { 'h', 'e', 't', 'e', 'r' }; +static symbol s_0_14[1] = { 's' }; +static symbol s_0_15[2] = { 'a', 's' }; +static symbol s_0_16[2] = { 'e', 's' }; +static symbol s_0_17[4] = { 'e', 'd', 'e', 's' }; +static symbol s_0_18[5] = { 'e', 'n', 'd', 'e', 's' }; +static symbol s_0_19[4] = { 'e', 'n', 'e', 's' }; +static symbol s_0_20[7] = { 'h', 'e', 't', 'e', 'n', 'e', 's' }; +static symbol s_0_21[3] = { 'e', 'n', 's' }; +static symbol s_0_22[6] = { 'h', 'e', 't', 'e', 'n', 's' }; +static symbol s_0_23[3] = { 'e', 'r', 's' }; +static symbol s_0_24[3] = { 'e', 't', 's' }; +static symbol s_0_25[2] = { 'e', 't' }; +static symbol s_0_26[3] = { 'h', 'e', 't' }; +static symbol s_0_27[3] = { 'e', 'r', 't' }; +static symbol s_0_28[3] = { 'a', 's', 't' }; + +static struct among a_0[29] = +{ +/* 0 */ { 1, s_0_0, -1, 1, 0}, +/* 1 */ { 1, s_0_1, -1, 1, 0}, +/* 2 */ { 3, s_0_2, 1, 1, 0}, +/* 3 */ { 4, s_0_3, 1, 1, 0}, +/* 4 */ { 4, s_0_4, 1, 1, 0}, +/* 5 */ { 3, s_0_5, 1, 1, 0}, +/* 6 */ { 3, s_0_6, 1, 1, 0}, +/* 7 */ { 6, s_0_7, 6, 1, 0}, +/* 8 */ { 4, s_0_8, 1, 3, 0}, +/* 9 */ { 2, s_0_9, -1, 1, 0}, +/* 10 */ { 5, s_0_10, 9, 1, 0}, +/* 11 */ { 2, s_0_11, -1, 1, 0}, +/* 12 */ { 2, s_0_12, -1, 1, 0}, +/* 13 */ { 5, s_0_13, 12, 1, 0}, +/* 14 */ { 1, s_0_14, -1, 2, 0}, +/* 15 */ { 2, s_0_15, 14, 1, 0}, +/* 16 */ { 2, s_0_16, 14, 1, 0}, +/* 17 */ { 4, s_0_17, 16, 1, 0}, +/* 18 */ { 5, s_0_18, 16, 1, 0}, +/* 19 */ { 4, s_0_19, 16, 1, 0}, +/* 20 */ { 7, s_0_20, 19, 1, 0}, +/* 21 */ { 3, s_0_21, 14, 1, 0}, +/* 22 */ { 6, s_0_22, 21, 1, 0}, +/* 23 */ { 3, s_0_23, 14, 1, 0}, +/* 24 */ { 3, s_0_24, 14, 1, 0}, +/* 25 */ { 2, s_0_25, -1, 1, 0}, +/* 26 */ { 3, s_0_26, 25, 1, 0}, +/* 27 */ { 3, s_0_27, -1, 3, 0}, +/* 28 */ { 3, s_0_28, -1, 1, 0} +}; + +static symbol s_1_0[2] = { 'd', 't' }; +static symbol s_1_1[2] = { 'v', 't' }; + +static struct among a_1[2] = +{ +/* 0 */ { 2, s_1_0, -1, -1, 0}, +/* 1 */ { 2, s_1_1, -1, -1, 0} +}; + +static symbol s_2_0[3] = { 'l', 'e', 'g' }; +static symbol s_2_1[4] = { 'e', 'l', 'e', 'g' }; +static symbol s_2_2[2] = { 'i', 'g' }; +static symbol s_2_3[3] = { 'e', 'i', 'g' }; +static symbol s_2_4[3] = { 'l', 'i', 'g' }; +static symbol s_2_5[4] = { 'e', 'l', 'i', 'g' }; +static symbol s_2_6[3] = { 'e', 'l', 's' }; +static symbol s_2_7[3] = { 'l', 'o', 'v' }; +static symbol s_2_8[4] = { 'e', 'l', 'o', 'v' }; +static symbol s_2_9[4] = { 's', 'l', 'o', 'v' }; +static symbol s_2_10[7] = { 'h', 'e', 't', 's', 'l', 'o', 'v' }; + +static struct among a_2[11] = +{ +/* 0 */ { 3, s_2_0, -1, 1, 0}, +/* 1 */ { 4, s_2_1, 0, 1, 0}, +/* 2 */ { 2, s_2_2, -1, 1, 0}, +/* 3 */ { 3, s_2_3, 2, 1, 0}, +/* 4 */ { 3, s_2_4, 2, 1, 0}, +/* 5 */ { 4, s_2_5, 4, 1, 0}, +/* 6 */ { 3, s_2_6, -1, 1, 0}, +/* 7 */ { 3, s_2_7, -1, 1, 0}, +/* 8 */ { 4, s_2_8, 7, 1, 0}, +/* 9 */ { 4, s_2_9, 7, 1, 0}, +/* 10 */ { 7, s_2_10, 9, 1, 0} +}; + +static unsigned char g_v[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 128 }; + +static unsigned char g_s_ending[] = { 119, 125, 149, 1 }; + +static symbol s_0[] = { 'k' }; +static symbol s_1[] = { 'e', 'r' }; + +static int r_mark_regions(struct SN_env * z) { + z->I[0] = z->l; + { int c_test = z->c; /* test, line 30 */ + { int c = skip_utf8(z->p, z->c, 0, z->l, + 3); + if (c < 0) return 0; + z->c = c; /* hop, line 30 */ + } + z->I[1] = z->c; /* setmark x, line 30 */ + z->c = c_test; + } + while(1) { /* goto, line 31 */ + int c = z->c; + if (!(in_grouping_U(z, g_v, 97, 248))) goto lab0; + z->c = c; + break; + lab0: + z->c = c; + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) return 0; + z->c = c; /* goto, line 31 */ + } + } + while(1) { /* gopast, line 31 */ + if (!(out_grouping_U(z, g_v, 97, 248))) goto lab1; + break; + lab1: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) return 0; + z->c = c; /* gopast, line 31 */ + } + } + z->I[0] = z->c; /* setmark p1, line 31 */ + /* try, line 32 */ + if (!(z->I[0] < z->I[1])) goto lab2; + z->I[0] = z->I[1]; +lab2: + return 1; +} + +static int r_main_suffix(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 38 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 38 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 38 */ + among_var = find_among_b(z, a_0, 29); /* substring, line 38 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 38 */ + z->lb = m3; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 44 */ + if (ret < 0) return ret; + } + break; + case 2: + { int m = z->l - z->c; (void) m; /* or, line 46 */ + if (!(in_grouping_b_U(z, g_s_ending, 98, 122))) goto lab1; + goto lab0; + lab1: + z->c = z->l - m; + if (!(eq_s_b(z, 1, s_0))) return 0; + if (!(out_grouping_b_U(z, g_v, 97, 248))) return 0; + } + lab0: + { int ret; + ret = slice_del(z); /* delete, line 46 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_from_s(z, 2, s_1); /* <-, line 48 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_consonant_pair(struct SN_env * z) { + { int m_test = z->l - z->c; /* test, line 53 */ + { int m3; /* setlimit, line 54 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 54 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 54 */ + if (!(find_among_b(z, a_1, 2))) { z->lb = m3; return 0; } /* substring, line 54 */ + z->bra = z->c; /* ], line 54 */ + z->lb = m3; + } + z->c = z->l - m_test; + } + { int c = skip_utf8(z->p, z->c, z->lb, 0, -1); + if (c < 0) return 0; + z->c = c; /* next, line 59 */ + } + z->bra = z->c; /* ], line 59 */ + { int ret; + ret = slice_del(z); /* delete, line 59 */ + if (ret < 0) return ret; + } + return 1; +} + +static int r_other_suffix(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 63 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 63 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 63 */ + among_var = find_among_b(z, a_2, 11); /* substring, line 63 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 63 */ + z->lb = m3; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 67 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +extern int norwegian_UTF_8_stem(struct SN_env * z) { + { int c = z->c; /* do, line 74 */ + { int ret = r_mark_regions(z); + if (ret == 0) goto lab0; /* call mark_regions, line 74 */ + if (ret < 0) return ret; + } + lab0: + z->c = c; + } + z->lb = z->c; z->c = z->l; /* backwards, line 75 */ + + { int m = z->l - z->c; (void) m; /* do, line 76 */ + { int ret = r_main_suffix(z); + if (ret == 0) goto lab1; /* call main_suffix, line 76 */ + if (ret < 0) return ret; + } + lab1: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 77 */ + { int ret = r_consonant_pair(z); + if (ret == 0) goto lab2; /* call consonant_pair, line 77 */ + if (ret < 0) return ret; + } + lab2: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 78 */ + { int ret = r_other_suffix(z); + if (ret == 0) goto lab3; /* call other_suffix, line 78 */ + if (ret < 0) return ret; + } + lab3: + z->c = z->l - m; + } + z->c = z->lb; + return 1; +} + +extern struct SN_env * norwegian_UTF_8_create_env(void) { return SN_create_env(0, 2, 0); } + +extern void norwegian_UTF_8_close_env(struct SN_env * z) { SN_close_env(z); } + diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_norwegian.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_norwegian.h new file mode 100644 index 0000000..c75444b --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_norwegian.h @@ -0,0 +1,16 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern struct SN_env * norwegian_UTF_8_create_env(void); +extern void norwegian_UTF_8_close_env(struct SN_env * z); + +extern int norwegian_UTF_8_stem(struct SN_env * z); + +#ifdef __cplusplus +} +#endif + diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_porter.c b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_porter.c new file mode 100644 index 0000000..1d22e71 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_porter.c @@ -0,0 +1,794 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#include "../runtime/header.h" + +extern int porter_UTF_8_stem(struct SN_env * z); +static int r_Step_5b(struct SN_env * z); +static int r_Step_5a(struct SN_env * z); +static int r_Step_4(struct SN_env * z); +static int r_Step_3(struct SN_env * z); +static int r_Step_2(struct SN_env * z); +static int r_Step_1c(struct SN_env * z); +static int r_Step_1b(struct SN_env * z); +static int r_Step_1a(struct SN_env * z); +static int r_R2(struct SN_env * z); +static int r_R1(struct SN_env * z); +static int r_shortv(struct SN_env * z); + +extern struct SN_env * porter_UTF_8_create_env(void); +extern void porter_UTF_8_close_env(struct SN_env * z); + +static symbol s_0_0[1] = { 's' }; +static symbol s_0_1[3] = { 'i', 'e', 's' }; +static symbol s_0_2[4] = { 's', 's', 'e', 's' }; +static symbol s_0_3[2] = { 's', 's' }; + +static struct among a_0[4] = +{ +/* 0 */ { 1, s_0_0, -1, 3, 0}, +/* 1 */ { 3, s_0_1, 0, 2, 0}, +/* 2 */ { 4, s_0_2, 0, 1, 0}, +/* 3 */ { 2, s_0_3, 0, -1, 0} +}; + +static symbol s_1_1[2] = { 'b', 'b' }; +static symbol s_1_2[2] = { 'd', 'd' }; +static symbol s_1_3[2] = { 'f', 'f' }; +static symbol s_1_4[2] = { 'g', 'g' }; +static symbol s_1_5[2] = { 'b', 'l' }; +static symbol s_1_6[2] = { 'm', 'm' }; +static symbol s_1_7[2] = { 'n', 'n' }; +static symbol s_1_8[2] = { 'p', 'p' }; +static symbol s_1_9[2] = { 'r', 'r' }; +static symbol s_1_10[2] = { 'a', 't' }; +static symbol s_1_11[2] = { 't', 't' }; +static symbol s_1_12[2] = { 'i', 'z' }; + +static struct among a_1[13] = +{ +/* 0 */ { 0, 0, -1, 3, 0}, +/* 1 */ { 2, s_1_1, 0, 2, 0}, +/* 2 */ { 2, s_1_2, 0, 2, 0}, +/* 3 */ { 2, s_1_3, 0, 2, 0}, +/* 4 */ { 2, s_1_4, 0, 2, 0}, +/* 5 */ { 2, s_1_5, 0, 1, 0}, +/* 6 */ { 2, s_1_6, 0, 2, 0}, +/* 7 */ { 2, s_1_7, 0, 2, 0}, +/* 8 */ { 2, s_1_8, 0, 2, 0}, +/* 9 */ { 2, s_1_9, 0, 2, 0}, +/* 10 */ { 2, s_1_10, 0, 1, 0}, +/* 11 */ { 2, s_1_11, 0, 2, 0}, +/* 12 */ { 2, s_1_12, 0, 1, 0} +}; + +static symbol s_2_0[2] = { 'e', 'd' }; +static symbol s_2_1[3] = { 'e', 'e', 'd' }; +static symbol s_2_2[3] = { 'i', 'n', 'g' }; + +static struct among a_2[3] = +{ +/* 0 */ { 2, s_2_0, -1, 2, 0}, +/* 1 */ { 3, s_2_1, 0, 1, 0}, +/* 2 */ { 3, s_2_2, -1, 2, 0} +}; + +static symbol s_3_0[4] = { 'a', 'n', 'c', 'i' }; +static symbol s_3_1[4] = { 'e', 'n', 'c', 'i' }; +static symbol s_3_2[4] = { 'a', 'b', 'l', 'i' }; +static symbol s_3_3[3] = { 'e', 'l', 'i' }; +static symbol s_3_4[4] = { 'a', 'l', 'l', 'i' }; +static symbol s_3_5[5] = { 'o', 'u', 's', 'l', 'i' }; +static symbol s_3_6[5] = { 'e', 'n', 't', 'l', 'i' }; +static symbol s_3_7[5] = { 'a', 'l', 'i', 't', 'i' }; +static symbol s_3_8[6] = { 'b', 'i', 'l', 'i', 't', 'i' }; +static symbol s_3_9[5] = { 'i', 'v', 'i', 't', 'i' }; +static symbol s_3_10[6] = { 't', 'i', 'o', 'n', 'a', 'l' }; +static symbol s_3_11[7] = { 'a', 't', 'i', 'o', 'n', 'a', 'l' }; +static symbol s_3_12[5] = { 'a', 'l', 'i', 's', 'm' }; +static symbol s_3_13[5] = { 'a', 't', 'i', 'o', 'n' }; +static symbol s_3_14[7] = { 'i', 'z', 'a', 't', 'i', 'o', 'n' }; +static symbol s_3_15[4] = { 'i', 'z', 'e', 'r' }; +static symbol s_3_16[4] = { 'a', 't', 'o', 'r' }; +static symbol s_3_17[7] = { 'i', 'v', 'e', 'n', 'e', 's', 's' }; +static symbol s_3_18[7] = { 'f', 'u', 'l', 'n', 'e', 's', 's' }; +static symbol s_3_19[7] = { 'o', 'u', 's', 'n', 'e', 's', 's' }; + +static struct among a_3[20] = +{ +/* 0 */ { 4, s_3_0, -1, 3, 0}, +/* 1 */ { 4, s_3_1, -1, 2, 0}, +/* 2 */ { 4, s_3_2, -1, 4, 0}, +/* 3 */ { 3, s_3_3, -1, 6, 0}, +/* 4 */ { 4, s_3_4, -1, 9, 0}, +/* 5 */ { 5, s_3_5, -1, 12, 0}, +/* 6 */ { 5, s_3_6, -1, 5, 0}, +/* 7 */ { 5, s_3_7, -1, 10, 0}, +/* 8 */ { 6, s_3_8, -1, 14, 0}, +/* 9 */ { 5, s_3_9, -1, 13, 0}, +/* 10 */ { 6, s_3_10, -1, 1, 0}, +/* 11 */ { 7, s_3_11, 10, 8, 0}, +/* 12 */ { 5, s_3_12, -1, 10, 0}, +/* 13 */ { 5, s_3_13, -1, 8, 0}, +/* 14 */ { 7, s_3_14, 13, 7, 0}, +/* 15 */ { 4, s_3_15, -1, 7, 0}, +/* 16 */ { 4, s_3_16, -1, 8, 0}, +/* 17 */ { 7, s_3_17, -1, 13, 0}, +/* 18 */ { 7, s_3_18, -1, 11, 0}, +/* 19 */ { 7, s_3_19, -1, 12, 0} +}; + +static symbol s_4_0[5] = { 'i', 'c', 'a', 't', 'e' }; +static symbol s_4_1[5] = { 'a', 't', 'i', 'v', 'e' }; +static symbol s_4_2[5] = { 'a', 'l', 'i', 'z', 'e' }; +static symbol s_4_3[5] = { 'i', 'c', 'i', 't', 'i' }; +static symbol s_4_4[4] = { 'i', 'c', 'a', 'l' }; +static symbol s_4_5[3] = { 'f', 'u', 'l' }; +static symbol s_4_6[4] = { 'n', 'e', 's', 's' }; + +static struct among a_4[7] = +{ +/* 0 */ { 5, s_4_0, -1, 2, 0}, +/* 1 */ { 5, s_4_1, -1, 3, 0}, +/* 2 */ { 5, s_4_2, -1, 1, 0}, +/* 3 */ { 5, s_4_3, -1, 2, 0}, +/* 4 */ { 4, s_4_4, -1, 2, 0}, +/* 5 */ { 3, s_4_5, -1, 3, 0}, +/* 6 */ { 4, s_4_6, -1, 3, 0} +}; + +static symbol s_5_0[2] = { 'i', 'c' }; +static symbol s_5_1[4] = { 'a', 'n', 'c', 'e' }; +static symbol s_5_2[4] = { 'e', 'n', 'c', 'e' }; +static symbol s_5_3[4] = { 'a', 'b', 'l', 'e' }; +static symbol s_5_4[4] = { 'i', 'b', 'l', 'e' }; +static symbol s_5_5[3] = { 'a', 't', 'e' }; +static symbol s_5_6[3] = { 'i', 'v', 'e' }; +static symbol s_5_7[3] = { 'i', 'z', 'e' }; +static symbol s_5_8[3] = { 'i', 't', 'i' }; +static symbol s_5_9[2] = { 'a', 'l' }; +static symbol s_5_10[3] = { 'i', 's', 'm' }; +static symbol s_5_11[3] = { 'i', 'o', 'n' }; +static symbol s_5_12[2] = { 'e', 'r' }; +static symbol s_5_13[3] = { 'o', 'u', 's' }; +static symbol s_5_14[3] = { 'a', 'n', 't' }; +static symbol s_5_15[3] = { 'e', 'n', 't' }; +static symbol s_5_16[4] = { 'm', 'e', 'n', 't' }; +static symbol s_5_17[5] = { 'e', 'm', 'e', 'n', 't' }; +static symbol s_5_18[2] = { 'o', 'u' }; + +static struct among a_5[19] = +{ +/* 0 */ { 2, s_5_0, -1, 1, 0}, +/* 1 */ { 4, s_5_1, -1, 1, 0}, +/* 2 */ { 4, s_5_2, -1, 1, 0}, +/* 3 */ { 4, s_5_3, -1, 1, 0}, +/* 4 */ { 4, s_5_4, -1, 1, 0}, +/* 5 */ { 3, s_5_5, -1, 1, 0}, +/* 6 */ { 3, s_5_6, -1, 1, 0}, +/* 7 */ { 3, s_5_7, -1, 1, 0}, +/* 8 */ { 3, s_5_8, -1, 1, 0}, +/* 9 */ { 2, s_5_9, -1, 1, 0}, +/* 10 */ { 3, s_5_10, -1, 1, 0}, +/* 11 */ { 3, s_5_11, -1, 2, 0}, +/* 12 */ { 2, s_5_12, -1, 1, 0}, +/* 13 */ { 3, s_5_13, -1, 1, 0}, +/* 14 */ { 3, s_5_14, -1, 1, 0}, +/* 15 */ { 3, s_5_15, -1, 1, 0}, +/* 16 */ { 4, s_5_16, 15, 1, 0}, +/* 17 */ { 5, s_5_17, 16, 1, 0}, +/* 18 */ { 2, s_5_18, -1, 1, 0} +}; + +static unsigned char g_v[] = { 17, 65, 16, 1 }; + +static unsigned char g_v_WXY[] = { 1, 17, 65, 208, 1 }; + +static symbol s_0[] = { 's', 's' }; +static symbol s_1[] = { 'i' }; +static symbol s_2[] = { 'e', 'e' }; +static symbol s_3[] = { 'e' }; +static symbol s_4[] = { 'e' }; +static symbol s_5[] = { 'y' }; +static symbol s_6[] = { 'Y' }; +static symbol s_7[] = { 'i' }; +static symbol s_8[] = { 't', 'i', 'o', 'n' }; +static symbol s_9[] = { 'e', 'n', 'c', 'e' }; +static symbol s_10[] = { 'a', 'n', 'c', 'e' }; +static symbol s_11[] = { 'a', 'b', 'l', 'e' }; +static symbol s_12[] = { 'e', 'n', 't' }; +static symbol s_13[] = { 'e' }; +static symbol s_14[] = { 'i', 'z', 'e' }; +static symbol s_15[] = { 'a', 't', 'e' }; +static symbol s_16[] = { 'a', 'l' }; +static symbol s_17[] = { 'a', 'l' }; +static symbol s_18[] = { 'f', 'u', 'l' }; +static symbol s_19[] = { 'o', 'u', 's' }; +static symbol s_20[] = { 'i', 'v', 'e' }; +static symbol s_21[] = { 'b', 'l', 'e' }; +static symbol s_22[] = { 'a', 'l' }; +static symbol s_23[] = { 'i', 'c' }; +static symbol s_24[] = { 's' }; +static symbol s_25[] = { 't' }; +static symbol s_26[] = { 'e' }; +static symbol s_27[] = { 'l' }; +static symbol s_28[] = { 'l' }; +static symbol s_29[] = { 'y' }; +static symbol s_30[] = { 'Y' }; +static symbol s_31[] = { 'y' }; +static symbol s_32[] = { 'Y' }; +static symbol s_33[] = { 'Y' }; +static symbol s_34[] = { 'y' }; + +static int r_shortv(struct SN_env * z) { + if (!(out_grouping_b_U(z, g_v_WXY, 89, 121))) return 0; + if (!(in_grouping_b_U(z, g_v, 97, 121))) return 0; + if (!(out_grouping_b_U(z, g_v, 97, 121))) return 0; + return 1; +} + +static int r_R1(struct SN_env * z) { + if (!(z->I[0] <= z->c)) return 0; + return 1; +} + +static int r_R2(struct SN_env * z) { + if (!(z->I[1] <= z->c)) return 0; + return 1; +} + +static int r_Step_1a(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 25 */ + among_var = find_among_b(z, a_0, 4); /* substring, line 25 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 25 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_from_s(z, 2, s_0); /* <-, line 26 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 1, s_1); /* <-, line 27 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_del(z); /* delete, line 29 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_Step_1b(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 34 */ + among_var = find_among_b(z, a_2, 3); /* substring, line 34 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 34 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 35 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 2, s_2); /* <-, line 35 */ + if (ret < 0) return ret; + } + break; + case 2: + { int m_test = z->l - z->c; /* test, line 38 */ + while(1) { /* gopast, line 38 */ + if (!(in_grouping_b_U(z, g_v, 97, 121))) goto lab0; + break; + lab0: + { int c = skip_utf8(z->p, z->c, z->lb, 0, -1); + if (c < 0) return 0; + z->c = c; /* gopast, line 38 */ + } + } + z->c = z->l - m_test; + } + { int ret; + ret = slice_del(z); /* delete, line 38 */ + if (ret < 0) return ret; + } + { int m_test = z->l - z->c; /* test, line 39 */ + among_var = find_among_b(z, a_1, 13); /* substring, line 39 */ + if (!(among_var)) return 0; + z->c = z->l - m_test; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + { int c = z->c; + ret = insert_s(z, z->c, z->c, 1, s_3); /* <+, line 41 */ + z->c = c; + } + if (ret < 0) return ret; + } + break; + case 2: + z->ket = z->c; /* [, line 44 */ + { int c = skip_utf8(z->p, z->c, z->lb, 0, -1); + if (c < 0) return 0; + z->c = c; /* next, line 44 */ + } + z->bra = z->c; /* ], line 44 */ + { int ret; + ret = slice_del(z); /* delete, line 44 */ + if (ret < 0) return ret; + } + break; + case 3: + if (z->c != z->I[0]) return 0; /* atmark, line 45 */ + { int m_test = z->l - z->c; /* test, line 45 */ + { int ret = r_shortv(z); + if (ret == 0) return 0; /* call shortv, line 45 */ + if (ret < 0) return ret; + } + z->c = z->l - m_test; + } + { int ret; + { int c = z->c; + ret = insert_s(z, z->c, z->c, 1, s_4); /* <+, line 45 */ + z->c = c; + } + if (ret < 0) return ret; + } + break; + } + break; + } + return 1; +} + +static int r_Step_1c(struct SN_env * z) { + z->ket = z->c; /* [, line 52 */ + { int m = z->l - z->c; (void) m; /* or, line 52 */ + if (!(eq_s_b(z, 1, s_5))) goto lab1; + goto lab0; + lab1: + z->c = z->l - m; + if (!(eq_s_b(z, 1, s_6))) return 0; + } +lab0: + z->bra = z->c; /* ], line 52 */ + while(1) { /* gopast, line 53 */ + if (!(in_grouping_b_U(z, g_v, 97, 121))) goto lab2; + break; + lab2: + { int c = skip_utf8(z->p, z->c, z->lb, 0, -1); + if (c < 0) return 0; + z->c = c; /* gopast, line 53 */ + } + } + { int ret; + ret = slice_from_s(z, 1, s_7); /* <-, line 54 */ + if (ret < 0) return ret; + } + return 1; +} + +static int r_Step_2(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 58 */ + among_var = find_among_b(z, a_3, 20); /* substring, line 58 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 58 */ + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 58 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_from_s(z, 4, s_8); /* <-, line 59 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 4, s_9); /* <-, line 60 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_from_s(z, 4, s_10); /* <-, line 61 */ + if (ret < 0) return ret; + } + break; + case 4: + { int ret; + ret = slice_from_s(z, 4, s_11); /* <-, line 62 */ + if (ret < 0) return ret; + } + break; + case 5: + { int ret; + ret = slice_from_s(z, 3, s_12); /* <-, line 63 */ + if (ret < 0) return ret; + } + break; + case 6: + { int ret; + ret = slice_from_s(z, 1, s_13); /* <-, line 64 */ + if (ret < 0) return ret; + } + break; + case 7: + { int ret; + ret = slice_from_s(z, 3, s_14); /* <-, line 66 */ + if (ret < 0) return ret; + } + break; + case 8: + { int ret; + ret = slice_from_s(z, 3, s_15); /* <-, line 68 */ + if (ret < 0) return ret; + } + break; + case 9: + { int ret; + ret = slice_from_s(z, 2, s_16); /* <-, line 69 */ + if (ret < 0) return ret; + } + break; + case 10: + { int ret; + ret = slice_from_s(z, 2, s_17); /* <-, line 71 */ + if (ret < 0) return ret; + } + break; + case 11: + { int ret; + ret = slice_from_s(z, 3, s_18); /* <-, line 72 */ + if (ret < 0) return ret; + } + break; + case 12: + { int ret; + ret = slice_from_s(z, 3, s_19); /* <-, line 74 */ + if (ret < 0) return ret; + } + break; + case 13: + { int ret; + ret = slice_from_s(z, 3, s_20); /* <-, line 76 */ + if (ret < 0) return ret; + } + break; + case 14: + { int ret; + ret = slice_from_s(z, 3, s_21); /* <-, line 77 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_Step_3(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 82 */ + among_var = find_among_b(z, a_4, 7); /* substring, line 82 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 82 */ + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 82 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_from_s(z, 2, s_22); /* <-, line 83 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 2, s_23); /* <-, line 85 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_del(z); /* delete, line 87 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_Step_4(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 92 */ + among_var = find_among_b(z, a_5, 19); /* substring, line 92 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 92 */ + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 92 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 95 */ + if (ret < 0) return ret; + } + break; + case 2: + { int m = z->l - z->c; (void) m; /* or, line 96 */ + if (!(eq_s_b(z, 1, s_24))) goto lab1; + goto lab0; + lab1: + z->c = z->l - m; + if (!(eq_s_b(z, 1, s_25))) return 0; + } + lab0: + { int ret; + ret = slice_del(z); /* delete, line 96 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_Step_5a(struct SN_env * z) { + z->ket = z->c; /* [, line 101 */ + if (!(eq_s_b(z, 1, s_26))) return 0; + z->bra = z->c; /* ], line 101 */ + { int m = z->l - z->c; (void) m; /* or, line 102 */ + { int ret = r_R2(z); + if (ret == 0) goto lab1; /* call R2, line 102 */ + if (ret < 0) return ret; + } + goto lab0; + lab1: + z->c = z->l - m; + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 102 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* not, line 102 */ + { int ret = r_shortv(z); + if (ret == 0) goto lab2; /* call shortv, line 102 */ + if (ret < 0) return ret; + } + return 0; + lab2: + z->c = z->l - m; + } + } +lab0: + { int ret; + ret = slice_del(z); /* delete, line 103 */ + if (ret < 0) return ret; + } + return 1; +} + +static int r_Step_5b(struct SN_env * z) { + z->ket = z->c; /* [, line 107 */ + if (!(eq_s_b(z, 1, s_27))) return 0; + z->bra = z->c; /* ], line 107 */ + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 108 */ + if (ret < 0) return ret; + } + if (!(eq_s_b(z, 1, s_28))) return 0; + { int ret; + ret = slice_del(z); /* delete, line 109 */ + if (ret < 0) return ret; + } + return 1; +} + +extern int porter_UTF_8_stem(struct SN_env * z) { + z->B[0] = 0; /* unset Y_found, line 115 */ + { int c = z->c; /* do, line 116 */ + z->bra = z->c; /* [, line 116 */ + if (!(eq_s(z, 1, s_29))) goto lab0; + z->ket = z->c; /* ], line 116 */ + { int ret; + ret = slice_from_s(z, 1, s_30); /* <-, line 116 */ + if (ret < 0) return ret; + } + z->B[0] = 1; /* set Y_found, line 116 */ + lab0: + z->c = c; + } + { int c = z->c; /* do, line 117 */ + while(1) { /* repeat, line 117 */ + int c = z->c; + while(1) { /* goto, line 117 */ + int c = z->c; + if (!(in_grouping_U(z, g_v, 97, 121))) goto lab3; + z->bra = z->c; /* [, line 117 */ + if (!(eq_s(z, 1, s_31))) goto lab3; + z->ket = z->c; /* ], line 117 */ + z->c = c; + break; + lab3: + z->c = c; + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab2; + z->c = c; /* goto, line 117 */ + } + } + { int ret; + ret = slice_from_s(z, 1, s_32); /* <-, line 117 */ + if (ret < 0) return ret; + } + z->B[0] = 1; /* set Y_found, line 117 */ + continue; + lab2: + z->c = c; + break; + } + z->c = c; + } + z->I[0] = z->l; + z->I[1] = z->l; + { int c = z->c; /* do, line 121 */ + while(1) { /* gopast, line 122 */ + if (!(in_grouping_U(z, g_v, 97, 121))) goto lab5; + break; + lab5: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab4; + z->c = c; /* gopast, line 122 */ + } + } + while(1) { /* gopast, line 122 */ + if (!(out_grouping_U(z, g_v, 97, 121))) goto lab6; + break; + lab6: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab4; + z->c = c; /* gopast, line 122 */ + } + } + z->I[0] = z->c; /* setmark p1, line 122 */ + while(1) { /* gopast, line 123 */ + if (!(in_grouping_U(z, g_v, 97, 121))) goto lab7; + break; + lab7: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab4; + z->c = c; /* gopast, line 123 */ + } + } + while(1) { /* gopast, line 123 */ + if (!(out_grouping_U(z, g_v, 97, 121))) goto lab8; + break; + lab8: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab4; + z->c = c; /* gopast, line 123 */ + } + } + z->I[1] = z->c; /* setmark p2, line 123 */ + lab4: + z->c = c; + } + z->lb = z->c; z->c = z->l; /* backwards, line 126 */ + + { int m = z->l - z->c; (void) m; /* do, line 127 */ + { int ret = r_Step_1a(z); + if (ret == 0) goto lab9; /* call Step_1a, line 127 */ + if (ret < 0) return ret; + } + lab9: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 128 */ + { int ret = r_Step_1b(z); + if (ret == 0) goto lab10; /* call Step_1b, line 128 */ + if (ret < 0) return ret; + } + lab10: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 129 */ + { int ret = r_Step_1c(z); + if (ret == 0) goto lab11; /* call Step_1c, line 129 */ + if (ret < 0) return ret; + } + lab11: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 130 */ + { int ret = r_Step_2(z); + if (ret == 0) goto lab12; /* call Step_2, line 130 */ + if (ret < 0) return ret; + } + lab12: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 131 */ + { int ret = r_Step_3(z); + if (ret == 0) goto lab13; /* call Step_3, line 131 */ + if (ret < 0) return ret; + } + lab13: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 132 */ + { int ret = r_Step_4(z); + if (ret == 0) goto lab14; /* call Step_4, line 132 */ + if (ret < 0) return ret; + } + lab14: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 133 */ + { int ret = r_Step_5a(z); + if (ret == 0) goto lab15; /* call Step_5a, line 133 */ + if (ret < 0) return ret; + } + lab15: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 134 */ + { int ret = r_Step_5b(z); + if (ret == 0) goto lab16; /* call Step_5b, line 134 */ + if (ret < 0) return ret; + } + lab16: + z->c = z->l - m; + } + z->c = z->lb; + { int c = z->c; /* do, line 137 */ + if (!(z->B[0])) goto lab17; /* Boolean test Y_found, line 137 */ + while(1) { /* repeat, line 137 */ + int c = z->c; + while(1) { /* goto, line 137 */ + int c = z->c; + z->bra = z->c; /* [, line 137 */ + if (!(eq_s(z, 1, s_33))) goto lab19; + z->ket = z->c; /* ], line 137 */ + z->c = c; + break; + lab19: + z->c = c; + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab18; + z->c = c; /* goto, line 137 */ + } + } + { int ret; + ret = slice_from_s(z, 1, s_34); /* <-, line 137 */ + if (ret < 0) return ret; + } + continue; + lab18: + z->c = c; + break; + } + lab17: + z->c = c; + } + return 1; +} + +extern struct SN_env * porter_UTF_8_create_env(void) { return SN_create_env(0, 2, 1); } + +extern void porter_UTF_8_close_env(struct SN_env * z) { SN_close_env(z); } + diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_porter.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_porter.h new file mode 100644 index 0000000..82d469a --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_porter.h @@ -0,0 +1,16 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern struct SN_env * porter_UTF_8_create_env(void); +extern void porter_UTF_8_close_env(struct SN_env * z); + +extern int porter_UTF_8_stem(struct SN_env * z); + +#ifdef __cplusplus +} +#endif + diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_portuguese.c b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_portuguese.c new file mode 100644 index 0000000..e288544 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_portuguese.c @@ -0,0 +1,1055 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#include "../runtime/header.h" + +extern int portuguese_UTF_8_stem(struct SN_env * z); +static int r_residual_form(struct SN_env * z); +static int r_residual_suffix(struct SN_env * z); +static int r_verb_suffix(struct SN_env * z); +static int r_standard_suffix(struct SN_env * z); +static int r_R2(struct SN_env * z); +static int r_R1(struct SN_env * z); +static int r_RV(struct SN_env * z); +static int r_mark_regions(struct SN_env * z); +static int r_postlude(struct SN_env * z); +static int r_prelude(struct SN_env * z); + +extern struct SN_env * portuguese_UTF_8_create_env(void); +extern void portuguese_UTF_8_close_env(struct SN_env * z); + +static symbol s_0_1[2] = { 0xC3, 0xA3 }; +static symbol s_0_2[2] = { 0xC3, 0xB5 }; + +static struct among a_0[3] = +{ +/* 0 */ { 0, 0, -1, 3, 0}, +/* 1 */ { 2, s_0_1, 0, 1, 0}, +/* 2 */ { 2, s_0_2, 0, 2, 0} +}; + +static symbol s_1_1[2] = { 'a', '~' }; +static symbol s_1_2[2] = { 'o', '~' }; + +static struct among a_1[3] = +{ +/* 0 */ { 0, 0, -1, 3, 0}, +/* 1 */ { 2, s_1_1, 0, 1, 0}, +/* 2 */ { 2, s_1_2, 0, 2, 0} +}; + +static symbol s_2_0[2] = { 'i', 'c' }; +static symbol s_2_1[2] = { 'a', 'd' }; +static symbol s_2_2[2] = { 'o', 's' }; +static symbol s_2_3[2] = { 'i', 'v' }; + +static struct among a_2[4] = +{ +/* 0 */ { 2, s_2_0, -1, -1, 0}, +/* 1 */ { 2, s_2_1, -1, -1, 0}, +/* 2 */ { 2, s_2_2, -1, -1, 0}, +/* 3 */ { 2, s_2_3, -1, 1, 0} +}; + +static symbol s_3_0[4] = { 'a', 'n', 't', 'e' }; +static symbol s_3_1[4] = { 'a', 'v', 'e', 'l' }; +static symbol s_3_2[5] = { 0xC3, 0xAD, 'v', 'e', 'l' }; + +static struct among a_3[3] = +{ +/* 0 */ { 4, s_3_0, -1, 1, 0}, +/* 1 */ { 4, s_3_1, -1, 1, 0}, +/* 2 */ { 5, s_3_2, -1, 1, 0} +}; + +static symbol s_4_0[2] = { 'i', 'c' }; +static symbol s_4_1[4] = { 'a', 'b', 'i', 'l' }; +static symbol s_4_2[2] = { 'i', 'v' }; + +static struct among a_4[3] = +{ +/* 0 */ { 2, s_4_0, -1, 1, 0}, +/* 1 */ { 4, s_4_1, -1, 1, 0}, +/* 2 */ { 2, s_4_2, -1, 1, 0} +}; + +static symbol s_5_0[3] = { 'i', 'c', 'a' }; +static symbol s_5_1[6] = { 0xC3, 0xA2, 'n', 'c', 'i', 'a' }; +static symbol s_5_2[6] = { 0xC3, 0xAA, 'n', 'c', 'i', 'a' }; +static symbol s_5_3[3] = { 'i', 'r', 'a' }; +static symbol s_5_4[5] = { 'a', 'd', 'o', 'r', 'a' }; +static symbol s_5_5[3] = { 'o', 's', 'a' }; +static symbol s_5_6[4] = { 'i', 's', 't', 'a' }; +static symbol s_5_7[3] = { 'i', 'v', 'a' }; +static symbol s_5_8[3] = { 'e', 'z', 'a' }; +static symbol s_5_9[6] = { 'l', 'o', 'g', 0xC3, 0xAD, 'a' }; +static symbol s_5_10[5] = { 'i', 'd', 'a', 'd', 'e' }; +static symbol s_5_11[4] = { 'a', 'n', 't', 'e' }; +static symbol s_5_12[5] = { 'm', 'e', 'n', 't', 'e' }; +static symbol s_5_13[6] = { 'a', 'm', 'e', 'n', 't', 'e' }; +static symbol s_5_14[5] = { 0xC3, 0xA1, 'v', 'e', 'l' }; +static symbol s_5_15[5] = { 0xC3, 0xAD, 'v', 'e', 'l' }; +static symbol s_5_16[6] = { 'u', 'c', 'i', 0xC3, 0xB3, 'n' }; +static symbol s_5_17[3] = { 'i', 'c', 'o' }; +static symbol s_5_18[4] = { 'i', 's', 'm', 'o' }; +static symbol s_5_19[3] = { 'o', 's', 'o' }; +static symbol s_5_20[6] = { 'a', 'm', 'e', 'n', 't', 'o' }; +static symbol s_5_21[6] = { 'i', 'm', 'e', 'n', 't', 'o' }; +static symbol s_5_22[3] = { 'i', 'v', 'o' }; +static symbol s_5_23[6] = { 'a', 0xC3, 0xA7, 'a', '~', 'o' }; +static symbol s_5_24[4] = { 'a', 'd', 'o', 'r' }; +static symbol s_5_25[4] = { 'i', 'c', 'a', 's' }; +static symbol s_5_26[7] = { 0xC3, 0xAA, 'n', 'c', 'i', 'a', 's' }; +static symbol s_5_27[4] = { 'i', 'r', 'a', 's' }; +static symbol s_5_28[6] = { 'a', 'd', 'o', 'r', 'a', 's' }; +static symbol s_5_29[4] = { 'o', 's', 'a', 's' }; +static symbol s_5_30[5] = { 'i', 's', 't', 'a', 's' }; +static symbol s_5_31[4] = { 'i', 'v', 'a', 's' }; +static symbol s_5_32[4] = { 'e', 'z', 'a', 's' }; +static symbol s_5_33[7] = { 'l', 'o', 'g', 0xC3, 0xAD, 'a', 's' }; +static symbol s_5_34[6] = { 'i', 'd', 'a', 'd', 'e', 's' }; +static symbol s_5_35[7] = { 'u', 'c', 'i', 'o', 'n', 'e', 's' }; +static symbol s_5_36[6] = { 'a', 'd', 'o', 'r', 'e', 's' }; +static symbol s_5_37[5] = { 'a', 'n', 't', 'e', 's' }; +static symbol s_5_38[7] = { 'a', 0xC3, 0xA7, 'o', '~', 'e', 's' }; +static symbol s_5_39[4] = { 'i', 'c', 'o', 's' }; +static symbol s_5_40[5] = { 'i', 's', 'm', 'o', 's' }; +static symbol s_5_41[4] = { 'o', 's', 'o', 's' }; +static symbol s_5_42[7] = { 'a', 'm', 'e', 'n', 't', 'o', 's' }; +static symbol s_5_43[7] = { 'i', 'm', 'e', 'n', 't', 'o', 's' }; +static symbol s_5_44[4] = { 'i', 'v', 'o', 's' }; + +static struct among a_5[45] = +{ +/* 0 */ { 3, s_5_0, -1, 1, 0}, +/* 1 */ { 6, s_5_1, -1, 1, 0}, +/* 2 */ { 6, s_5_2, -1, 4, 0}, +/* 3 */ { 3, s_5_3, -1, 9, 0}, +/* 4 */ { 5, s_5_4, -1, 1, 0}, +/* 5 */ { 3, s_5_5, -1, 1, 0}, +/* 6 */ { 4, s_5_6, -1, 1, 0}, +/* 7 */ { 3, s_5_7, -1, 8, 0}, +/* 8 */ { 3, s_5_8, -1, 1, 0}, +/* 9 */ { 6, s_5_9, -1, 2, 0}, +/* 10 */ { 5, s_5_10, -1, 7, 0}, +/* 11 */ { 4, s_5_11, -1, 1, 0}, +/* 12 */ { 5, s_5_12, -1, 6, 0}, +/* 13 */ { 6, s_5_13, 12, 5, 0}, +/* 14 */ { 5, s_5_14, -1, 1, 0}, +/* 15 */ { 5, s_5_15, -1, 1, 0}, +/* 16 */ { 6, s_5_16, -1, 3, 0}, +/* 17 */ { 3, s_5_17, -1, 1, 0}, +/* 18 */ { 4, s_5_18, -1, 1, 0}, +/* 19 */ { 3, s_5_19, -1, 1, 0}, +/* 20 */ { 6, s_5_20, -1, 1, 0}, +/* 21 */ { 6, s_5_21, -1, 1, 0}, +/* 22 */ { 3, s_5_22, -1, 8, 0}, +/* 23 */ { 6, s_5_23, -1, 1, 0}, +/* 24 */ { 4, s_5_24, -1, 1, 0}, +/* 25 */ { 4, s_5_25, -1, 1, 0}, +/* 26 */ { 7, s_5_26, -1, 4, 0}, +/* 27 */ { 4, s_5_27, -1, 9, 0}, +/* 28 */ { 6, s_5_28, -1, 1, 0}, +/* 29 */ { 4, s_5_29, -1, 1, 0}, +/* 30 */ { 5, s_5_30, -1, 1, 0}, +/* 31 */ { 4, s_5_31, -1, 8, 0}, +/* 32 */ { 4, s_5_32, -1, 1, 0}, +/* 33 */ { 7, s_5_33, -1, 2, 0}, +/* 34 */ { 6, s_5_34, -1, 7, 0}, +/* 35 */ { 7, s_5_35, -1, 3, 0}, +/* 36 */ { 6, s_5_36, -1, 1, 0}, +/* 37 */ { 5, s_5_37, -1, 1, 0}, +/* 38 */ { 7, s_5_38, -1, 1, 0}, +/* 39 */ { 4, s_5_39, -1, 1, 0}, +/* 40 */ { 5, s_5_40, -1, 1, 0}, +/* 41 */ { 4, s_5_41, -1, 1, 0}, +/* 42 */ { 7, s_5_42, -1, 1, 0}, +/* 43 */ { 7, s_5_43, -1, 1, 0}, +/* 44 */ { 4, s_5_44, -1, 8, 0} +}; + +static symbol s_6_0[3] = { 'a', 'd', 'a' }; +static symbol s_6_1[3] = { 'i', 'd', 'a' }; +static symbol s_6_2[2] = { 'i', 'a' }; +static symbol s_6_3[4] = { 'a', 'r', 'i', 'a' }; +static symbol s_6_4[4] = { 'e', 'r', 'i', 'a' }; +static symbol s_6_5[4] = { 'i', 'r', 'i', 'a' }; +static symbol s_6_6[3] = { 'a', 'r', 'a' }; +static symbol s_6_7[3] = { 'e', 'r', 'a' }; +static symbol s_6_8[3] = { 'i', 'r', 'a' }; +static symbol s_6_9[3] = { 'a', 'v', 'a' }; +static symbol s_6_10[4] = { 'a', 's', 's', 'e' }; +static symbol s_6_11[4] = { 'e', 's', 's', 'e' }; +static symbol s_6_12[4] = { 'i', 's', 's', 'e' }; +static symbol s_6_13[4] = { 'a', 's', 't', 'e' }; +static symbol s_6_14[4] = { 'e', 's', 't', 'e' }; +static symbol s_6_15[4] = { 'i', 's', 't', 'e' }; +static symbol s_6_16[2] = { 'e', 'i' }; +static symbol s_6_17[4] = { 'a', 'r', 'e', 'i' }; +static symbol s_6_18[4] = { 'e', 'r', 'e', 'i' }; +static symbol s_6_19[4] = { 'i', 'r', 'e', 'i' }; +static symbol s_6_20[2] = { 'a', 'm' }; +static symbol s_6_21[3] = { 'i', 'a', 'm' }; +static symbol s_6_22[5] = { 'a', 'r', 'i', 'a', 'm' }; +static symbol s_6_23[5] = { 'e', 'r', 'i', 'a', 'm' }; +static symbol s_6_24[5] = { 'i', 'r', 'i', 'a', 'm' }; +static symbol s_6_25[4] = { 'a', 'r', 'a', 'm' }; +static symbol s_6_26[4] = { 'e', 'r', 'a', 'm' }; +static symbol s_6_27[4] = { 'i', 'r', 'a', 'm' }; +static symbol s_6_28[4] = { 'a', 'v', 'a', 'm' }; +static symbol s_6_29[2] = { 'e', 'm' }; +static symbol s_6_30[4] = { 'a', 'r', 'e', 'm' }; +static symbol s_6_31[4] = { 'e', 'r', 'e', 'm' }; +static symbol s_6_32[4] = { 'i', 'r', 'e', 'm' }; +static symbol s_6_33[5] = { 'a', 's', 's', 'e', 'm' }; +static symbol s_6_34[5] = { 'e', 's', 's', 'e', 'm' }; +static symbol s_6_35[5] = { 'i', 's', 's', 'e', 'm' }; +static symbol s_6_36[3] = { 'a', 'd', 'o' }; +static symbol s_6_37[3] = { 'i', 'd', 'o' }; +static symbol s_6_38[4] = { 'a', 'n', 'd', 'o' }; +static symbol s_6_39[4] = { 'e', 'n', 'd', 'o' }; +static symbol s_6_40[4] = { 'i', 'n', 'd', 'o' }; +static symbol s_6_41[5] = { 'a', 'r', 'a', '~', 'o' }; +static symbol s_6_42[5] = { 'e', 'r', 'a', '~', 'o' }; +static symbol s_6_43[5] = { 'i', 'r', 'a', '~', 'o' }; +static symbol s_6_44[2] = { 'a', 'r' }; +static symbol s_6_45[2] = { 'e', 'r' }; +static symbol s_6_46[2] = { 'i', 'r' }; +static symbol s_6_47[2] = { 'a', 's' }; +static symbol s_6_48[4] = { 'a', 'd', 'a', 's' }; +static symbol s_6_49[4] = { 'i', 'd', 'a', 's' }; +static symbol s_6_50[3] = { 'i', 'a', 's' }; +static symbol s_6_51[5] = { 'a', 'r', 'i', 'a', 's' }; +static symbol s_6_52[5] = { 'e', 'r', 'i', 'a', 's' }; +static symbol s_6_53[5] = { 'i', 'r', 'i', 'a', 's' }; +static symbol s_6_54[4] = { 'a', 'r', 'a', 's' }; +static symbol s_6_55[4] = { 'e', 'r', 'a', 's' }; +static symbol s_6_56[4] = { 'i', 'r', 'a', 's' }; +static symbol s_6_57[4] = { 'a', 'v', 'a', 's' }; +static symbol s_6_58[2] = { 'e', 's' }; +static symbol s_6_59[5] = { 'a', 'r', 'd', 'e', 's' }; +static symbol s_6_60[5] = { 'e', 'r', 'd', 'e', 's' }; +static symbol s_6_61[5] = { 'i', 'r', 'd', 'e', 's' }; +static symbol s_6_62[4] = { 'a', 'r', 'e', 's' }; +static symbol s_6_63[4] = { 'e', 'r', 'e', 's' }; +static symbol s_6_64[4] = { 'i', 'r', 'e', 's' }; +static symbol s_6_65[5] = { 'a', 's', 's', 'e', 's' }; +static symbol s_6_66[5] = { 'e', 's', 's', 'e', 's' }; +static symbol s_6_67[5] = { 'i', 's', 's', 'e', 's' }; +static symbol s_6_68[5] = { 'a', 's', 't', 'e', 's' }; +static symbol s_6_69[5] = { 'e', 's', 't', 'e', 's' }; +static symbol s_6_70[5] = { 'i', 's', 't', 'e', 's' }; +static symbol s_6_71[2] = { 'i', 's' }; +static symbol s_6_72[3] = { 'a', 'i', 's' }; +static symbol s_6_73[3] = { 'e', 'i', 's' }; +static symbol s_6_74[5] = { 'a', 'r', 'e', 'i', 's' }; +static symbol s_6_75[5] = { 'e', 'r', 'e', 'i', 's' }; +static symbol s_6_76[5] = { 'i', 'r', 'e', 'i', 's' }; +static symbol s_6_77[6] = { 0xC3, 0xA1, 'r', 'e', 'i', 's' }; +static symbol s_6_78[6] = { 0xC3, 0xA9, 'r', 'e', 'i', 's' }; +static symbol s_6_79[6] = { 0xC3, 0xAD, 'r', 'e', 'i', 's' }; +static symbol s_6_80[7] = { 0xC3, 0xA1, 's', 's', 'e', 'i', 's' }; +static symbol s_6_81[7] = { 0xC3, 0xA9, 's', 's', 'e', 'i', 's' }; +static symbol s_6_82[7] = { 0xC3, 0xAD, 's', 's', 'e', 'i', 's' }; +static symbol s_6_83[6] = { 0xC3, 0xA1, 'v', 'e', 'i', 's' }; +static symbol s_6_84[5] = { 0xC3, 0xAD, 'e', 'i', 's' }; +static symbol s_6_85[7] = { 'a', 'r', 0xC3, 0xAD, 'e', 'i', 's' }; +static symbol s_6_86[7] = { 'e', 'r', 0xC3, 0xAD, 'e', 'i', 's' }; +static symbol s_6_87[7] = { 'i', 'r', 0xC3, 0xAD, 'e', 'i', 's' }; +static symbol s_6_88[4] = { 'a', 'd', 'o', 's' }; +static symbol s_6_89[4] = { 'i', 'd', 'o', 's' }; +static symbol s_6_90[4] = { 'a', 'm', 'o', 's' }; +static symbol s_6_91[7] = { 0xC3, 0xA1, 'r', 'a', 'm', 'o', 's' }; +static symbol s_6_92[7] = { 0xC3, 0xA9, 'r', 'a', 'm', 'o', 's' }; +static symbol s_6_93[7] = { 0xC3, 0xAD, 'r', 'a', 'm', 'o', 's' }; +static symbol s_6_94[7] = { 0xC3, 0xA1, 'v', 'a', 'm', 'o', 's' }; +static symbol s_6_95[6] = { 0xC3, 0xAD, 'a', 'm', 'o', 's' }; +static symbol s_6_96[8] = { 'a', 'r', 0xC3, 0xAD, 'a', 'm', 'o', 's' }; +static symbol s_6_97[8] = { 'e', 'r', 0xC3, 0xAD, 'a', 'm', 'o', 's' }; +static symbol s_6_98[8] = { 'i', 'r', 0xC3, 0xAD, 'a', 'm', 'o', 's' }; +static symbol s_6_99[4] = { 'e', 'm', 'o', 's' }; +static symbol s_6_100[6] = { 'a', 'r', 'e', 'm', 'o', 's' }; +static symbol s_6_101[6] = { 'e', 'r', 'e', 'm', 'o', 's' }; +static symbol s_6_102[6] = { 'i', 'r', 'e', 'm', 'o', 's' }; +static symbol s_6_103[8] = { 0xC3, 0xA1, 's', 's', 'e', 'm', 'o', 's' }; +static symbol s_6_104[8] = { 0xC3, 0xAA, 's', 's', 'e', 'm', 'o', 's' }; +static symbol s_6_105[8] = { 0xC3, 0xAD, 's', 's', 'e', 'm', 'o', 's' }; +static symbol s_6_106[4] = { 'i', 'm', 'o', 's' }; +static symbol s_6_107[5] = { 'a', 'r', 'm', 'o', 's' }; +static symbol s_6_108[5] = { 'e', 'r', 'm', 'o', 's' }; +static symbol s_6_109[5] = { 'i', 'r', 'm', 'o', 's' }; +static symbol s_6_110[5] = { 0xC3, 0xA1, 'm', 'o', 's' }; +static symbol s_6_111[5] = { 'a', 'r', 0xC3, 0xA1, 's' }; +static symbol s_6_112[5] = { 'e', 'r', 0xC3, 0xA1, 's' }; +static symbol s_6_113[5] = { 'i', 'r', 0xC3, 0xA1, 's' }; +static symbol s_6_114[2] = { 'e', 'u' }; +static symbol s_6_115[2] = { 'i', 'u' }; +static symbol s_6_116[2] = { 'o', 'u' }; +static symbol s_6_117[4] = { 'a', 'r', 0xC3, 0xA1 }; +static symbol s_6_118[4] = { 'e', 'r', 0xC3, 0xA1 }; +static symbol s_6_119[4] = { 'i', 'r', 0xC3, 0xA1 }; + +static struct among a_6[120] = +{ +/* 0 */ { 3, s_6_0, -1, 1, 0}, +/* 1 */ { 3, s_6_1, -1, 1, 0}, +/* 2 */ { 2, s_6_2, -1, 1, 0}, +/* 3 */ { 4, s_6_3, 2, 1, 0}, +/* 4 */ { 4, s_6_4, 2, 1, 0}, +/* 5 */ { 4, s_6_5, 2, 1, 0}, +/* 6 */ { 3, s_6_6, -1, 1, 0}, +/* 7 */ { 3, s_6_7, -1, 1, 0}, +/* 8 */ { 3, s_6_8, -1, 1, 0}, +/* 9 */ { 3, s_6_9, -1, 1, 0}, +/* 10 */ { 4, s_6_10, -1, 1, 0}, +/* 11 */ { 4, s_6_11, -1, 1, 0}, +/* 12 */ { 4, s_6_12, -1, 1, 0}, +/* 13 */ { 4, s_6_13, -1, 1, 0}, +/* 14 */ { 4, s_6_14, -1, 1, 0}, +/* 15 */ { 4, s_6_15, -1, 1, 0}, +/* 16 */ { 2, s_6_16, -1, 1, 0}, +/* 17 */ { 4, s_6_17, 16, 1, 0}, +/* 18 */ { 4, s_6_18, 16, 1, 0}, +/* 19 */ { 4, s_6_19, 16, 1, 0}, +/* 20 */ { 2, s_6_20, -1, 1, 0}, +/* 21 */ { 3, s_6_21, 20, 1, 0}, +/* 22 */ { 5, s_6_22, 21, 1, 0}, +/* 23 */ { 5, s_6_23, 21, 1, 0}, +/* 24 */ { 5, s_6_24, 21, 1, 0}, +/* 25 */ { 4, s_6_25, 20, 1, 0}, +/* 26 */ { 4, s_6_26, 20, 1, 0}, +/* 27 */ { 4, s_6_27, 20, 1, 0}, +/* 28 */ { 4, s_6_28, 20, 1, 0}, +/* 29 */ { 2, s_6_29, -1, 1, 0}, +/* 30 */ { 4, s_6_30, 29, 1, 0}, +/* 31 */ { 4, s_6_31, 29, 1, 0}, +/* 32 */ { 4, s_6_32, 29, 1, 0}, +/* 33 */ { 5, s_6_33, 29, 1, 0}, +/* 34 */ { 5, s_6_34, 29, 1, 0}, +/* 35 */ { 5, s_6_35, 29, 1, 0}, +/* 36 */ { 3, s_6_36, -1, 1, 0}, +/* 37 */ { 3, s_6_37, -1, 1, 0}, +/* 38 */ { 4, s_6_38, -1, 1, 0}, +/* 39 */ { 4, s_6_39, -1, 1, 0}, +/* 40 */ { 4, s_6_40, -1, 1, 0}, +/* 41 */ { 5, s_6_41, -1, 1, 0}, +/* 42 */ { 5, s_6_42, -1, 1, 0}, +/* 43 */ { 5, s_6_43, -1, 1, 0}, +/* 44 */ { 2, s_6_44, -1, 1, 0}, +/* 45 */ { 2, s_6_45, -1, 1, 0}, +/* 46 */ { 2, s_6_46, -1, 1, 0}, +/* 47 */ { 2, s_6_47, -1, 1, 0}, +/* 48 */ { 4, s_6_48, 47, 1, 0}, +/* 49 */ { 4, s_6_49, 47, 1, 0}, +/* 50 */ { 3, s_6_50, 47, 1, 0}, +/* 51 */ { 5, s_6_51, 50, 1, 0}, +/* 52 */ { 5, s_6_52, 50, 1, 0}, +/* 53 */ { 5, s_6_53, 50, 1, 0}, +/* 54 */ { 4, s_6_54, 47, 1, 0}, +/* 55 */ { 4, s_6_55, 47, 1, 0}, +/* 56 */ { 4, s_6_56, 47, 1, 0}, +/* 57 */ { 4, s_6_57, 47, 1, 0}, +/* 58 */ { 2, s_6_58, -1, 1, 0}, +/* 59 */ { 5, s_6_59, 58, 1, 0}, +/* 60 */ { 5, s_6_60, 58, 1, 0}, +/* 61 */ { 5, s_6_61, 58, 1, 0}, +/* 62 */ { 4, s_6_62, 58, 1, 0}, +/* 63 */ { 4, s_6_63, 58, 1, 0}, +/* 64 */ { 4, s_6_64, 58, 1, 0}, +/* 65 */ { 5, s_6_65, 58, 1, 0}, +/* 66 */ { 5, s_6_66, 58, 1, 0}, +/* 67 */ { 5, s_6_67, 58, 1, 0}, +/* 68 */ { 5, s_6_68, 58, 1, 0}, +/* 69 */ { 5, s_6_69, 58, 1, 0}, +/* 70 */ { 5, s_6_70, 58, 1, 0}, +/* 71 */ { 2, s_6_71, -1, 1, 0}, +/* 72 */ { 3, s_6_72, 71, 1, 0}, +/* 73 */ { 3, s_6_73, 71, 1, 0}, +/* 74 */ { 5, s_6_74, 73, 1, 0}, +/* 75 */ { 5, s_6_75, 73, 1, 0}, +/* 76 */ { 5, s_6_76, 73, 1, 0}, +/* 77 */ { 6, s_6_77, 73, 1, 0}, +/* 78 */ { 6, s_6_78, 73, 1, 0}, +/* 79 */ { 6, s_6_79, 73, 1, 0}, +/* 80 */ { 7, s_6_80, 73, 1, 0}, +/* 81 */ { 7, s_6_81, 73, 1, 0}, +/* 82 */ { 7, s_6_82, 73, 1, 0}, +/* 83 */ { 6, s_6_83, 73, 1, 0}, +/* 84 */ { 5, s_6_84, 73, 1, 0}, +/* 85 */ { 7, s_6_85, 84, 1, 0}, +/* 86 */ { 7, s_6_86, 84, 1, 0}, +/* 87 */ { 7, s_6_87, 84, 1, 0}, +/* 88 */ { 4, s_6_88, -1, 1, 0}, +/* 89 */ { 4, s_6_89, -1, 1, 0}, +/* 90 */ { 4, s_6_90, -1, 1, 0}, +/* 91 */ { 7, s_6_91, 90, 1, 0}, +/* 92 */ { 7, s_6_92, 90, 1, 0}, +/* 93 */ { 7, s_6_93, 90, 1, 0}, +/* 94 */ { 7, s_6_94, 90, 1, 0}, +/* 95 */ { 6, s_6_95, 90, 1, 0}, +/* 96 */ { 8, s_6_96, 95, 1, 0}, +/* 97 */ { 8, s_6_97, 95, 1, 0}, +/* 98 */ { 8, s_6_98, 95, 1, 0}, +/* 99 */ { 4, s_6_99, -1, 1, 0}, +/*100 */ { 6, s_6_100, 99, 1, 0}, +/*101 */ { 6, s_6_101, 99, 1, 0}, +/*102 */ { 6, s_6_102, 99, 1, 0}, +/*103 */ { 8, s_6_103, 99, 1, 0}, +/*104 */ { 8, s_6_104, 99, 1, 0}, +/*105 */ { 8, s_6_105, 99, 1, 0}, +/*106 */ { 4, s_6_106, -1, 1, 0}, +/*107 */ { 5, s_6_107, -1, 1, 0}, +/*108 */ { 5, s_6_108, -1, 1, 0}, +/*109 */ { 5, s_6_109, -1, 1, 0}, +/*110 */ { 5, s_6_110, -1, 1, 0}, +/*111 */ { 5, s_6_111, -1, 1, 0}, +/*112 */ { 5, s_6_112, -1, 1, 0}, +/*113 */ { 5, s_6_113, -1, 1, 0}, +/*114 */ { 2, s_6_114, -1, 1, 0}, +/*115 */ { 2, s_6_115, -1, 1, 0}, +/*116 */ { 2, s_6_116, -1, 1, 0}, +/*117 */ { 4, s_6_117, -1, 1, 0}, +/*118 */ { 4, s_6_118, -1, 1, 0}, +/*119 */ { 4, s_6_119, -1, 1, 0} +}; + +static symbol s_7_0[1] = { 'a' }; +static symbol s_7_1[1] = { 'i' }; +static symbol s_7_2[1] = { 'o' }; +static symbol s_7_3[2] = { 'o', 's' }; +static symbol s_7_4[2] = { 0xC3, 0xA1 }; +static symbol s_7_5[2] = { 0xC3, 0xAD }; +static symbol s_7_6[2] = { 0xC3, 0xB3 }; + +static struct among a_7[7] = +{ +/* 0 */ { 1, s_7_0, -1, 1, 0}, +/* 1 */ { 1, s_7_1, -1, 1, 0}, +/* 2 */ { 1, s_7_2, -1, 1, 0}, +/* 3 */ { 2, s_7_3, -1, 1, 0}, +/* 4 */ { 2, s_7_4, -1, 1, 0}, +/* 5 */ { 2, s_7_5, -1, 1, 0}, +/* 6 */ { 2, s_7_6, -1, 1, 0} +}; + +static symbol s_8_0[1] = { 'e' }; +static symbol s_8_1[2] = { 0xC3, 0xA7 }; +static symbol s_8_2[2] = { 0xC3, 0xA9 }; +static symbol s_8_3[2] = { 0xC3, 0xAA }; + +static struct among a_8[4] = +{ +/* 0 */ { 1, s_8_0, -1, 1, 0}, +/* 1 */ { 2, s_8_1, -1, 2, 0}, +/* 2 */ { 2, s_8_2, -1, 1, 0}, +/* 3 */ { 2, s_8_3, -1, 1, 0} +}; + +static unsigned char g_v[] = { 17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 19, 12, 2 }; + +static symbol s_0[] = { 'a', '~' }; +static symbol s_1[] = { 'o', '~' }; +static symbol s_2[] = { 0xC3, 0xA3 }; +static symbol s_3[] = { 0xC3, 0xB5 }; +static symbol s_4[] = { 'l', 'o', 'g' }; +static symbol s_5[] = { 'u' }; +static symbol s_6[] = { 'e', 'n', 't', 'e' }; +static symbol s_7[] = { 'a', 't' }; +static symbol s_8[] = { 'a', 't' }; +static symbol s_9[] = { 'e' }; +static symbol s_10[] = { 'i', 'r' }; +static symbol s_11[] = { 'u' }; +static symbol s_12[] = { 'g' }; +static symbol s_13[] = { 'i' }; +static symbol s_14[] = { 'c' }; +static symbol s_15[] = { 'c' }; +static symbol s_16[] = { 'i' }; +static symbol s_17[] = { 'c' }; + +static int r_prelude(struct SN_env * z) { + int among_var; + while(1) { /* repeat, line 36 */ + int c = z->c; + z->bra = z->c; /* [, line 37 */ + among_var = find_among(z, a_0, 3); /* substring, line 37 */ + if (!(among_var)) goto lab0; + z->ket = z->c; /* ], line 37 */ + switch(among_var) { + case 0: goto lab0; + case 1: + { int ret; + ret = slice_from_s(z, 2, s_0); /* <-, line 38 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 2, s_1); /* <-, line 39 */ + if (ret < 0) return ret; + } + break; + case 3: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab0; + z->c = c; /* next, line 40 */ + } + break; + } + continue; + lab0: + z->c = c; + break; + } + return 1; +} + +static int r_mark_regions(struct SN_env * z) { + z->I[0] = z->l; + z->I[1] = z->l; + z->I[2] = z->l; + { int c = z->c; /* do, line 50 */ + { int c = z->c; /* or, line 52 */ + if (!(in_grouping_U(z, g_v, 97, 250))) goto lab2; + { int c = z->c; /* or, line 51 */ + if (!(out_grouping_U(z, g_v, 97, 250))) goto lab4; + while(1) { /* gopast, line 51 */ + if (!(in_grouping_U(z, g_v, 97, 250))) goto lab5; + break; + lab5: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab4; + z->c = c; /* gopast, line 51 */ + } + } + goto lab3; + lab4: + z->c = c; + if (!(in_grouping_U(z, g_v, 97, 250))) goto lab2; + while(1) { /* gopast, line 51 */ + if (!(out_grouping_U(z, g_v, 97, 250))) goto lab6; + break; + lab6: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab2; + z->c = c; /* gopast, line 51 */ + } + } + } + lab3: + goto lab1; + lab2: + z->c = c; + if (!(out_grouping_U(z, g_v, 97, 250))) goto lab0; + { int c = z->c; /* or, line 53 */ + if (!(out_grouping_U(z, g_v, 97, 250))) goto lab8; + while(1) { /* gopast, line 53 */ + if (!(in_grouping_U(z, g_v, 97, 250))) goto lab9; + break; + lab9: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab8; + z->c = c; /* gopast, line 53 */ + } + } + goto lab7; + lab8: + z->c = c; + if (!(in_grouping_U(z, g_v, 97, 250))) goto lab0; + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab0; + z->c = c; /* next, line 53 */ + } + } + lab7: + ; + } + lab1: + z->I[0] = z->c; /* setmark pV, line 54 */ + lab0: + z->c = c; + } + { int c = z->c; /* do, line 56 */ + while(1) { /* gopast, line 57 */ + if (!(in_grouping_U(z, g_v, 97, 250))) goto lab11; + break; + lab11: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab10; + z->c = c; /* gopast, line 57 */ + } + } + while(1) { /* gopast, line 57 */ + if (!(out_grouping_U(z, g_v, 97, 250))) goto lab12; + break; + lab12: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab10; + z->c = c; /* gopast, line 57 */ + } + } + z->I[1] = z->c; /* setmark p1, line 57 */ + while(1) { /* gopast, line 58 */ + if (!(in_grouping_U(z, g_v, 97, 250))) goto lab13; + break; + lab13: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab10; + z->c = c; /* gopast, line 58 */ + } + } + while(1) { /* gopast, line 58 */ + if (!(out_grouping_U(z, g_v, 97, 250))) goto lab14; + break; + lab14: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab10; + z->c = c; /* gopast, line 58 */ + } + } + z->I[2] = z->c; /* setmark p2, line 58 */ + lab10: + z->c = c; + } + return 1; +} + +static int r_postlude(struct SN_env * z) { + int among_var; + while(1) { /* repeat, line 62 */ + int c = z->c; + z->bra = z->c; /* [, line 63 */ + among_var = find_among(z, a_1, 3); /* substring, line 63 */ + if (!(among_var)) goto lab0; + z->ket = z->c; /* ], line 63 */ + switch(among_var) { + case 0: goto lab0; + case 1: + { int ret; + ret = slice_from_s(z, 2, s_2); /* <-, line 64 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 2, s_3); /* <-, line 65 */ + if (ret < 0) return ret; + } + break; + case 3: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab0; + z->c = c; /* next, line 66 */ + } + break; + } + continue; + lab0: + z->c = c; + break; + } + return 1; +} + +static int r_RV(struct SN_env * z) { + if (!(z->I[0] <= z->c)) return 0; + return 1; +} + +static int r_R1(struct SN_env * z) { + if (!(z->I[1] <= z->c)) return 0; + return 1; +} + +static int r_R2(struct SN_env * z) { + if (!(z->I[2] <= z->c)) return 0; + return 1; +} + +static int r_standard_suffix(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 77 */ + among_var = find_among_b(z, a_5, 45); /* substring, line 77 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 77 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 93 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 93 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 98 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 3, s_4); /* <-, line 98 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 102 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 1, s_5); /* <-, line 102 */ + if (ret < 0) return ret; + } + break; + case 4: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 106 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 4, s_6); /* <-, line 106 */ + if (ret < 0) return ret; + } + break; + case 5: + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 110 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 110 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 111 */ + z->ket = z->c; /* [, line 112 */ + among_var = find_among_b(z, a_2, 4); /* substring, line 112 */ + if (!(among_var)) { z->c = z->l - m; goto lab0; } + z->bra = z->c; /* ], line 112 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab0; } /* call R2, line 112 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 112 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: { z->c = z->l - m; goto lab0; } + case 1: + z->ket = z->c; /* [, line 113 */ + if (!(eq_s_b(z, 2, s_7))) { z->c = z->l - m; goto lab0; } + z->bra = z->c; /* ], line 113 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab0; } /* call R2, line 113 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 113 */ + if (ret < 0) return ret; + } + break; + } + lab0: + ; + } + break; + case 6: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 122 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 122 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 123 */ + z->ket = z->c; /* [, line 124 */ + among_var = find_among_b(z, a_3, 3); /* substring, line 124 */ + if (!(among_var)) { z->c = z->l - m; goto lab1; } + z->bra = z->c; /* ], line 124 */ + switch(among_var) { + case 0: { z->c = z->l - m; goto lab1; } + case 1: + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab1; } /* call R2, line 127 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 127 */ + if (ret < 0) return ret; + } + break; + } + lab1: + ; + } + break; + case 7: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 134 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 134 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 135 */ + z->ket = z->c; /* [, line 136 */ + among_var = find_among_b(z, a_4, 3); /* substring, line 136 */ + if (!(among_var)) { z->c = z->l - m; goto lab2; } + z->bra = z->c; /* ], line 136 */ + switch(among_var) { + case 0: { z->c = z->l - m; goto lab2; } + case 1: + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab2; } /* call R2, line 139 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 139 */ + if (ret < 0) return ret; + } + break; + } + lab2: + ; + } + break; + case 8: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 146 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 146 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 147 */ + z->ket = z->c; /* [, line 148 */ + if (!(eq_s_b(z, 2, s_8))) { z->c = z->l - m; goto lab3; } + z->bra = z->c; /* ], line 148 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab3; } /* call R2, line 148 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 148 */ + if (ret < 0) return ret; + } + lab3: + ; + } + break; + case 9: + { int ret = r_RV(z); + if (ret == 0) return 0; /* call RV, line 153 */ + if (ret < 0) return ret; + } + if (!(eq_s_b(z, 1, s_9))) return 0; + { int ret; + ret = slice_from_s(z, 2, s_10); /* <-, line 154 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_verb_suffix(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 159 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 159 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 160 */ + among_var = find_among_b(z, a_6, 120); /* substring, line 160 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 160 */ + switch(among_var) { + case 0: { z->lb = m3; return 0; } + case 1: + { int ret; + ret = slice_del(z); /* delete, line 179 */ + if (ret < 0) return ret; + } + break; + } + z->lb = m3; + } + return 1; +} + +static int r_residual_suffix(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 184 */ + among_var = find_among_b(z, a_7, 7); /* substring, line 184 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 184 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret = r_RV(z); + if (ret == 0) return 0; /* call RV, line 187 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 187 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_residual_form(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 192 */ + among_var = find_among_b(z, a_8, 4); /* substring, line 192 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 192 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret = r_RV(z); + if (ret == 0) return 0; /* call RV, line 194 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 194 */ + if (ret < 0) return ret; + } + z->ket = z->c; /* [, line 194 */ + { int m = z->l - z->c; (void) m; /* or, line 194 */ + if (!(eq_s_b(z, 1, s_11))) goto lab1; + z->bra = z->c; /* ], line 194 */ + { int m_test = z->l - z->c; /* test, line 194 */ + if (!(eq_s_b(z, 1, s_12))) goto lab1; + z->c = z->l - m_test; + } + goto lab0; + lab1: + z->c = z->l - m; + if (!(eq_s_b(z, 1, s_13))) return 0; + z->bra = z->c; /* ], line 195 */ + { int m_test = z->l - z->c; /* test, line 195 */ + if (!(eq_s_b(z, 1, s_14))) return 0; + z->c = z->l - m_test; + } + } + lab0: + { int ret = r_RV(z); + if (ret == 0) return 0; /* call RV, line 195 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 195 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 1, s_15); /* <-, line 196 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +extern int portuguese_UTF_8_stem(struct SN_env * z) { + { int c = z->c; /* do, line 202 */ + { int ret = r_prelude(z); + if (ret == 0) goto lab0; /* call prelude, line 202 */ + if (ret < 0) return ret; + } + lab0: + z->c = c; + } + { int c = z->c; /* do, line 203 */ + { int ret = r_mark_regions(z); + if (ret == 0) goto lab1; /* call mark_regions, line 203 */ + if (ret < 0) return ret; + } + lab1: + z->c = c; + } + z->lb = z->c; z->c = z->l; /* backwards, line 204 */ + + { int m = z->l - z->c; (void) m; /* do, line 205 */ + { int m = z->l - z->c; (void) m; /* or, line 209 */ + { int m = z->l - z->c; (void) m; /* and, line 207 */ + { int m = z->l - z->c; (void) m; /* or, line 206 */ + { int ret = r_standard_suffix(z); + if (ret == 0) goto lab6; /* call standard_suffix, line 206 */ + if (ret < 0) return ret; + } + goto lab5; + lab6: + z->c = z->l - m; + { int ret = r_verb_suffix(z); + if (ret == 0) goto lab4; /* call verb_suffix, line 206 */ + if (ret < 0) return ret; + } + } + lab5: + z->c = z->l - m; + { int m = z->l - z->c; (void) m; /* do, line 207 */ + z->ket = z->c; /* [, line 207 */ + if (!(eq_s_b(z, 1, s_16))) goto lab7; + z->bra = z->c; /* ], line 207 */ + { int m_test = z->l - z->c; /* test, line 207 */ + if (!(eq_s_b(z, 1, s_17))) goto lab7; + z->c = z->l - m_test; + } + { int ret = r_RV(z); + if (ret == 0) goto lab7; /* call RV, line 207 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 207 */ + if (ret < 0) return ret; + } + lab7: + z->c = z->l - m; + } + } + goto lab3; + lab4: + z->c = z->l - m; + { int ret = r_residual_suffix(z); + if (ret == 0) goto lab2; /* call residual_suffix, line 209 */ + if (ret < 0) return ret; + } + } + lab3: + lab2: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 211 */ + { int ret = r_residual_form(z); + if (ret == 0) goto lab8; /* call residual_form, line 211 */ + if (ret < 0) return ret; + } + lab8: + z->c = z->l - m; + } + z->c = z->lb; + { int c = z->c; /* do, line 213 */ + { int ret = r_postlude(z); + if (ret == 0) goto lab9; /* call postlude, line 213 */ + if (ret < 0) return ret; + } + lab9: + z->c = c; + } + return 1; +} + +extern struct SN_env * portuguese_UTF_8_create_env(void) { return SN_create_env(0, 3, 0); } + +extern void portuguese_UTF_8_close_env(struct SN_env * z) { SN_close_env(z); } + diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_portuguese.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_portuguese.h new file mode 100644 index 0000000..9fe7f9a --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_portuguese.h @@ -0,0 +1,16 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern struct SN_env * portuguese_UTF_8_create_env(void); +extern void portuguese_UTF_8_close_env(struct SN_env * z); + +extern int portuguese_UTF_8_stem(struct SN_env * z); + +#ifdef __cplusplus +} +#endif + diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_russian.c b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_russian.c new file mode 100644 index 0000000..19581dd --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_russian.c @@ -0,0 +1,709 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#include "../runtime/header.h" + +extern int russian_UTF_8_stem(struct SN_env * z); +static int r_tidy_up(struct SN_env * z); +static int r_derivational(struct SN_env * z); +static int r_noun(struct SN_env * z); +static int r_verb(struct SN_env * z); +static int r_reflexive(struct SN_env * z); +static int r_adjectival(struct SN_env * z); +static int r_adjective(struct SN_env * z); +static int r_perfective_gerund(struct SN_env * z); +static int r_R2(struct SN_env * z); +static int r_mark_regions(struct SN_env * z); + +extern struct SN_env * russian_UTF_8_create_env(void); +extern void russian_UTF_8_close_env(struct SN_env * z); + +static symbol s_0_0[10] = { 0xD0, 0xB2, 0xD1, 0x88, 0xD0, 0xB8, 0xD1, 0x81, 0xD1, 0x8C }; +static symbol s_0_1[12] = { 0xD1, 0x8B, 0xD0, 0xB2, 0xD1, 0x88, 0xD0, 0xB8, 0xD1, 0x81, 0xD1, 0x8C }; +static symbol s_0_2[12] = { 0xD0, 0xB8, 0xD0, 0xB2, 0xD1, 0x88, 0xD0, 0xB8, 0xD1, 0x81, 0xD1, 0x8C }; +static symbol s_0_3[2] = { 0xD0, 0xB2 }; +static symbol s_0_4[4] = { 0xD1, 0x8B, 0xD0, 0xB2 }; +static symbol s_0_5[4] = { 0xD0, 0xB8, 0xD0, 0xB2 }; +static symbol s_0_6[6] = { 0xD0, 0xB2, 0xD1, 0x88, 0xD0, 0xB8 }; +static symbol s_0_7[8] = { 0xD1, 0x8B, 0xD0, 0xB2, 0xD1, 0x88, 0xD0, 0xB8 }; +static symbol s_0_8[8] = { 0xD0, 0xB8, 0xD0, 0xB2, 0xD1, 0x88, 0xD0, 0xB8 }; + +static struct among a_0[9] = +{ +/* 0 */ { 10, s_0_0, -1, 1, 0}, +/* 1 */ { 12, s_0_1, 0, 2, 0}, +/* 2 */ { 12, s_0_2, 0, 2, 0}, +/* 3 */ { 2, s_0_3, -1, 1, 0}, +/* 4 */ { 4, s_0_4, 3, 2, 0}, +/* 5 */ { 4, s_0_5, 3, 2, 0}, +/* 6 */ { 6, s_0_6, -1, 1, 0}, +/* 7 */ { 8, s_0_7, 6, 2, 0}, +/* 8 */ { 8, s_0_8, 6, 2, 0} +}; + +static symbol s_1_0[6] = { 0xD0, 0xB5, 0xD0, 0xBC, 0xD1, 0x83 }; +static symbol s_1_1[6] = { 0xD0, 0xBE, 0xD0, 0xBC, 0xD1, 0x83 }; +static symbol s_1_2[4] = { 0xD1, 0x8B, 0xD1, 0x85 }; +static symbol s_1_3[4] = { 0xD0, 0xB8, 0xD1, 0x85 }; +static symbol s_1_4[4] = { 0xD1, 0x83, 0xD1, 0x8E }; +static symbol s_1_5[4] = { 0xD1, 0x8E, 0xD1, 0x8E }; +static symbol s_1_6[4] = { 0xD0, 0xB5, 0xD1, 0x8E }; +static symbol s_1_7[4] = { 0xD0, 0xBE, 0xD1, 0x8E }; +static symbol s_1_8[4] = { 0xD1, 0x8F, 0xD1, 0x8F }; +static symbol s_1_9[4] = { 0xD0, 0xB0, 0xD1, 0x8F }; +static symbol s_1_10[4] = { 0xD1, 0x8B, 0xD0, 0xB5 }; +static symbol s_1_11[4] = { 0xD0, 0xB5, 0xD0, 0xB5 }; +static symbol s_1_12[4] = { 0xD0, 0xB8, 0xD0, 0xB5 }; +static symbol s_1_13[4] = { 0xD0, 0xBE, 0xD0, 0xB5 }; +static symbol s_1_14[6] = { 0xD1, 0x8B, 0xD0, 0xBC, 0xD0, 0xB8 }; +static symbol s_1_15[6] = { 0xD0, 0xB8, 0xD0, 0xBC, 0xD0, 0xB8 }; +static symbol s_1_16[4] = { 0xD1, 0x8B, 0xD0, 0xB9 }; +static symbol s_1_17[4] = { 0xD0, 0xB5, 0xD0, 0xB9 }; +static symbol s_1_18[4] = { 0xD0, 0xB8, 0xD0, 0xB9 }; +static symbol s_1_19[4] = { 0xD0, 0xBE, 0xD0, 0xB9 }; +static symbol s_1_20[4] = { 0xD1, 0x8B, 0xD0, 0xBC }; +static symbol s_1_21[4] = { 0xD0, 0xB5, 0xD0, 0xBC }; +static symbol s_1_22[4] = { 0xD0, 0xB8, 0xD0, 0xBC }; +static symbol s_1_23[4] = { 0xD0, 0xBE, 0xD0, 0xBC }; +static symbol s_1_24[6] = { 0xD0, 0xB5, 0xD0, 0xB3, 0xD0, 0xBE }; +static symbol s_1_25[6] = { 0xD0, 0xBE, 0xD0, 0xB3, 0xD0, 0xBE }; + +static struct among a_1[26] = +{ +/* 0 */ { 6, s_1_0, -1, 1, 0}, +/* 1 */ { 6, s_1_1, -1, 1, 0}, +/* 2 */ { 4, s_1_2, -1, 1, 0}, +/* 3 */ { 4, s_1_3, -1, 1, 0}, +/* 4 */ { 4, s_1_4, -1, 1, 0}, +/* 5 */ { 4, s_1_5, -1, 1, 0}, +/* 6 */ { 4, s_1_6, -1, 1, 0}, +/* 7 */ { 4, s_1_7, -1, 1, 0}, +/* 8 */ { 4, s_1_8, -1, 1, 0}, +/* 9 */ { 4, s_1_9, -1, 1, 0}, +/* 10 */ { 4, s_1_10, -1, 1, 0}, +/* 11 */ { 4, s_1_11, -1, 1, 0}, +/* 12 */ { 4, s_1_12, -1, 1, 0}, +/* 13 */ { 4, s_1_13, -1, 1, 0}, +/* 14 */ { 6, s_1_14, -1, 1, 0}, +/* 15 */ { 6, s_1_15, -1, 1, 0}, +/* 16 */ { 4, s_1_16, -1, 1, 0}, +/* 17 */ { 4, s_1_17, -1, 1, 0}, +/* 18 */ { 4, s_1_18, -1, 1, 0}, +/* 19 */ { 4, s_1_19, -1, 1, 0}, +/* 20 */ { 4, s_1_20, -1, 1, 0}, +/* 21 */ { 4, s_1_21, -1, 1, 0}, +/* 22 */ { 4, s_1_22, -1, 1, 0}, +/* 23 */ { 4, s_1_23, -1, 1, 0}, +/* 24 */ { 6, s_1_24, -1, 1, 0}, +/* 25 */ { 6, s_1_25, -1, 1, 0} +}; + +static symbol s_2_0[4] = { 0xD0, 0xB2, 0xD1, 0x88 }; +static symbol s_2_1[6] = { 0xD1, 0x8B, 0xD0, 0xB2, 0xD1, 0x88 }; +static symbol s_2_2[6] = { 0xD0, 0xB8, 0xD0, 0xB2, 0xD1, 0x88 }; +static symbol s_2_3[2] = { 0xD1, 0x89 }; +static symbol s_2_4[4] = { 0xD1, 0x8E, 0xD1, 0x89 }; +static symbol s_2_5[6] = { 0xD1, 0x83, 0xD1, 0x8E, 0xD1, 0x89 }; +static symbol s_2_6[4] = { 0xD0, 0xB5, 0xD0, 0xBC }; +static symbol s_2_7[4] = { 0xD0, 0xBD, 0xD0, 0xBD }; + +static struct among a_2[8] = +{ +/* 0 */ { 4, s_2_0, -1, 1, 0}, +/* 1 */ { 6, s_2_1, 0, 2, 0}, +/* 2 */ { 6, s_2_2, 0, 2, 0}, +/* 3 */ { 2, s_2_3, -1, 1, 0}, +/* 4 */ { 4, s_2_4, 3, 1, 0}, +/* 5 */ { 6, s_2_5, 4, 2, 0}, +/* 6 */ { 4, s_2_6, -1, 1, 0}, +/* 7 */ { 4, s_2_7, -1, 1, 0} +}; + +static symbol s_3_0[4] = { 0xD1, 0x81, 0xD1, 0x8C }; +static symbol s_3_1[4] = { 0xD1, 0x81, 0xD1, 0x8F }; + +static struct among a_3[2] = +{ +/* 0 */ { 4, s_3_0, -1, 1, 0}, +/* 1 */ { 4, s_3_1, -1, 1, 0} +}; + +static symbol s_4_0[4] = { 0xD1, 0x8B, 0xD1, 0x82 }; +static symbol s_4_1[4] = { 0xD1, 0x8E, 0xD1, 0x82 }; +static symbol s_4_2[6] = { 0xD1, 0x83, 0xD1, 0x8E, 0xD1, 0x82 }; +static symbol s_4_3[4] = { 0xD1, 0x8F, 0xD1, 0x82 }; +static symbol s_4_4[4] = { 0xD0, 0xB5, 0xD1, 0x82 }; +static symbol s_4_5[6] = { 0xD1, 0x83, 0xD0, 0xB5, 0xD1, 0x82 }; +static symbol s_4_6[4] = { 0xD0, 0xB8, 0xD1, 0x82 }; +static symbol s_4_7[4] = { 0xD0, 0xBD, 0xD1, 0x8B }; +static symbol s_4_8[6] = { 0xD0, 0xB5, 0xD0, 0xBD, 0xD1, 0x8B }; +static symbol s_4_9[4] = { 0xD1, 0x82, 0xD1, 0x8C }; +static symbol s_4_10[6] = { 0xD1, 0x8B, 0xD1, 0x82, 0xD1, 0x8C }; +static symbol s_4_11[6] = { 0xD0, 0xB8, 0xD1, 0x82, 0xD1, 0x8C }; +static symbol s_4_12[6] = { 0xD0, 0xB5, 0xD1, 0x88, 0xD1, 0x8C }; +static symbol s_4_13[6] = { 0xD0, 0xB8, 0xD1, 0x88, 0xD1, 0x8C }; +static symbol s_4_14[2] = { 0xD1, 0x8E }; +static symbol s_4_15[4] = { 0xD1, 0x83, 0xD1, 0x8E }; +static symbol s_4_16[4] = { 0xD0, 0xBB, 0xD0, 0xB0 }; +static symbol s_4_17[6] = { 0xD1, 0x8B, 0xD0, 0xBB, 0xD0, 0xB0 }; +static symbol s_4_18[6] = { 0xD0, 0xB8, 0xD0, 0xBB, 0xD0, 0xB0 }; +static symbol s_4_19[4] = { 0xD0, 0xBD, 0xD0, 0xB0 }; +static symbol s_4_20[6] = { 0xD0, 0xB5, 0xD0, 0xBD, 0xD0, 0xB0 }; +static symbol s_4_21[6] = { 0xD0, 0xB5, 0xD1, 0x82, 0xD0, 0xB5 }; +static symbol s_4_22[6] = { 0xD0, 0xB8, 0xD1, 0x82, 0xD0, 0xB5 }; +static symbol s_4_23[6] = { 0xD0, 0xB9, 0xD1, 0x82, 0xD0, 0xB5 }; +static symbol s_4_24[8] = { 0xD1, 0x83, 0xD0, 0xB9, 0xD1, 0x82, 0xD0, 0xB5 }; +static symbol s_4_25[8] = { 0xD0, 0xB5, 0xD0, 0xB9, 0xD1, 0x82, 0xD0, 0xB5 }; +static symbol s_4_26[4] = { 0xD0, 0xBB, 0xD0, 0xB8 }; +static symbol s_4_27[6] = { 0xD1, 0x8B, 0xD0, 0xBB, 0xD0, 0xB8 }; +static symbol s_4_28[6] = { 0xD0, 0xB8, 0xD0, 0xBB, 0xD0, 0xB8 }; +static symbol s_4_29[2] = { 0xD0, 0xB9 }; +static symbol s_4_30[4] = { 0xD1, 0x83, 0xD0, 0xB9 }; +static symbol s_4_31[4] = { 0xD0, 0xB5, 0xD0, 0xB9 }; +static symbol s_4_32[2] = { 0xD0, 0xBB }; +static symbol s_4_33[4] = { 0xD1, 0x8B, 0xD0, 0xBB }; +static symbol s_4_34[4] = { 0xD0, 0xB8, 0xD0, 0xBB }; +static symbol s_4_35[4] = { 0xD1, 0x8B, 0xD0, 0xBC }; +static symbol s_4_36[4] = { 0xD0, 0xB5, 0xD0, 0xBC }; +static symbol s_4_37[4] = { 0xD0, 0xB8, 0xD0, 0xBC }; +static symbol s_4_38[2] = { 0xD0, 0xBD }; +static symbol s_4_39[4] = { 0xD0, 0xB5, 0xD0, 0xBD }; +static symbol s_4_40[4] = { 0xD0, 0xBB, 0xD0, 0xBE }; +static symbol s_4_41[6] = { 0xD1, 0x8B, 0xD0, 0xBB, 0xD0, 0xBE }; +static symbol s_4_42[6] = { 0xD0, 0xB8, 0xD0, 0xBB, 0xD0, 0xBE }; +static symbol s_4_43[4] = { 0xD0, 0xBD, 0xD0, 0xBE }; +static symbol s_4_44[6] = { 0xD0, 0xB5, 0xD0, 0xBD, 0xD0, 0xBE }; +static symbol s_4_45[6] = { 0xD0, 0xBD, 0xD0, 0xBD, 0xD0, 0xBE }; + +static struct among a_4[46] = +{ +/* 0 */ { 4, s_4_0, -1, 2, 0}, +/* 1 */ { 4, s_4_1, -1, 1, 0}, +/* 2 */ { 6, s_4_2, 1, 2, 0}, +/* 3 */ { 4, s_4_3, -1, 2, 0}, +/* 4 */ { 4, s_4_4, -1, 1, 0}, +/* 5 */ { 6, s_4_5, 4, 2, 0}, +/* 6 */ { 4, s_4_6, -1, 2, 0}, +/* 7 */ { 4, s_4_7, -1, 1, 0}, +/* 8 */ { 6, s_4_8, 7, 2, 0}, +/* 9 */ { 4, s_4_9, -1, 1, 0}, +/* 10 */ { 6, s_4_10, 9, 2, 0}, +/* 11 */ { 6, s_4_11, 9, 2, 0}, +/* 12 */ { 6, s_4_12, -1, 1, 0}, +/* 13 */ { 6, s_4_13, -1, 2, 0}, +/* 14 */ { 2, s_4_14, -1, 2, 0}, +/* 15 */ { 4, s_4_15, 14, 2, 0}, +/* 16 */ { 4, s_4_16, -1, 1, 0}, +/* 17 */ { 6, s_4_17, 16, 2, 0}, +/* 18 */ { 6, s_4_18, 16, 2, 0}, +/* 19 */ { 4, s_4_19, -1, 1, 0}, +/* 20 */ { 6, s_4_20, 19, 2, 0}, +/* 21 */ { 6, s_4_21, -1, 1, 0}, +/* 22 */ { 6, s_4_22, -1, 2, 0}, +/* 23 */ { 6, s_4_23, -1, 1, 0}, +/* 24 */ { 8, s_4_24, 23, 2, 0}, +/* 25 */ { 8, s_4_25, 23, 2, 0}, +/* 26 */ { 4, s_4_26, -1, 1, 0}, +/* 27 */ { 6, s_4_27, 26, 2, 0}, +/* 28 */ { 6, s_4_28, 26, 2, 0}, +/* 29 */ { 2, s_4_29, -1, 1, 0}, +/* 30 */ { 4, s_4_30, 29, 2, 0}, +/* 31 */ { 4, s_4_31, 29, 2, 0}, +/* 32 */ { 2, s_4_32, -1, 1, 0}, +/* 33 */ { 4, s_4_33, 32, 2, 0}, +/* 34 */ { 4, s_4_34, 32, 2, 0}, +/* 35 */ { 4, s_4_35, -1, 2, 0}, +/* 36 */ { 4, s_4_36, -1, 1, 0}, +/* 37 */ { 4, s_4_37, -1, 2, 0}, +/* 38 */ { 2, s_4_38, -1, 1, 0}, +/* 39 */ { 4, s_4_39, 38, 2, 0}, +/* 40 */ { 4, s_4_40, -1, 1, 0}, +/* 41 */ { 6, s_4_41, 40, 2, 0}, +/* 42 */ { 6, s_4_42, 40, 2, 0}, +/* 43 */ { 4, s_4_43, -1, 1, 0}, +/* 44 */ { 6, s_4_44, 43, 2, 0}, +/* 45 */ { 6, s_4_45, 43, 1, 0} +}; + +static symbol s_5_0[2] = { 0xD1, 0x83 }; +static symbol s_5_1[4] = { 0xD1, 0x8F, 0xD1, 0x85 }; +static symbol s_5_2[6] = { 0xD0, 0xB8, 0xD1, 0x8F, 0xD1, 0x85 }; +static symbol s_5_3[4] = { 0xD0, 0xB0, 0xD1, 0x85 }; +static symbol s_5_4[2] = { 0xD1, 0x8B }; +static symbol s_5_5[2] = { 0xD1, 0x8C }; +static symbol s_5_6[2] = { 0xD1, 0x8E }; +static symbol s_5_7[4] = { 0xD1, 0x8C, 0xD1, 0x8E }; +static symbol s_5_8[4] = { 0xD0, 0xB8, 0xD1, 0x8E }; +static symbol s_5_9[2] = { 0xD1, 0x8F }; +static symbol s_5_10[4] = { 0xD1, 0x8C, 0xD1, 0x8F }; +static symbol s_5_11[4] = { 0xD0, 0xB8, 0xD1, 0x8F }; +static symbol s_5_12[2] = { 0xD0, 0xB0 }; +static symbol s_5_13[4] = { 0xD0, 0xB5, 0xD0, 0xB2 }; +static symbol s_5_14[4] = { 0xD0, 0xBE, 0xD0, 0xB2 }; +static symbol s_5_15[2] = { 0xD0, 0xB5 }; +static symbol s_5_16[4] = { 0xD1, 0x8C, 0xD0, 0xB5 }; +static symbol s_5_17[4] = { 0xD0, 0xB8, 0xD0, 0xB5 }; +static symbol s_5_18[2] = { 0xD0, 0xB8 }; +static symbol s_5_19[4] = { 0xD0, 0xB5, 0xD0, 0xB8 }; +static symbol s_5_20[4] = { 0xD0, 0xB8, 0xD0, 0xB8 }; +static symbol s_5_21[6] = { 0xD1, 0x8F, 0xD0, 0xBC, 0xD0, 0xB8 }; +static symbol s_5_22[8] = { 0xD0, 0xB8, 0xD1, 0x8F, 0xD0, 0xBC, 0xD0, 0xB8 }; +static symbol s_5_23[6] = { 0xD0, 0xB0, 0xD0, 0xBC, 0xD0, 0xB8 }; +static symbol s_5_24[2] = { 0xD0, 0xB9 }; +static symbol s_5_25[4] = { 0xD0, 0xB5, 0xD0, 0xB9 }; +static symbol s_5_26[6] = { 0xD0, 0xB8, 0xD0, 0xB5, 0xD0, 0xB9 }; +static symbol s_5_27[4] = { 0xD0, 0xB8, 0xD0, 0xB9 }; +static symbol s_5_28[4] = { 0xD0, 0xBE, 0xD0, 0xB9 }; +static symbol s_5_29[4] = { 0xD1, 0x8F, 0xD0, 0xBC }; +static symbol s_5_30[6] = { 0xD0, 0xB8, 0xD1, 0x8F, 0xD0, 0xBC }; +static symbol s_5_31[4] = { 0xD0, 0xB0, 0xD0, 0xBC }; +static symbol s_5_32[4] = { 0xD0, 0xB5, 0xD0, 0xBC }; +static symbol s_5_33[6] = { 0xD0, 0xB8, 0xD0, 0xB5, 0xD0, 0xBC }; +static symbol s_5_34[4] = { 0xD0, 0xBE, 0xD0, 0xBC }; +static symbol s_5_35[2] = { 0xD0, 0xBE }; + +static struct among a_5[36] = +{ +/* 0 */ { 2, s_5_0, -1, 1, 0}, +/* 1 */ { 4, s_5_1, -1, 1, 0}, +/* 2 */ { 6, s_5_2, 1, 1, 0}, +/* 3 */ { 4, s_5_3, -1, 1, 0}, +/* 4 */ { 2, s_5_4, -1, 1, 0}, +/* 5 */ { 2, s_5_5, -1, 1, 0}, +/* 6 */ { 2, s_5_6, -1, 1, 0}, +/* 7 */ { 4, s_5_7, 6, 1, 0}, +/* 8 */ { 4, s_5_8, 6, 1, 0}, +/* 9 */ { 2, s_5_9, -1, 1, 0}, +/* 10 */ { 4, s_5_10, 9, 1, 0}, +/* 11 */ { 4, s_5_11, 9, 1, 0}, +/* 12 */ { 2, s_5_12, -1, 1, 0}, +/* 13 */ { 4, s_5_13, -1, 1, 0}, +/* 14 */ { 4, s_5_14, -1, 1, 0}, +/* 15 */ { 2, s_5_15, -1, 1, 0}, +/* 16 */ { 4, s_5_16, 15, 1, 0}, +/* 17 */ { 4, s_5_17, 15, 1, 0}, +/* 18 */ { 2, s_5_18, -1, 1, 0}, +/* 19 */ { 4, s_5_19, 18, 1, 0}, +/* 20 */ { 4, s_5_20, 18, 1, 0}, +/* 21 */ { 6, s_5_21, 18, 1, 0}, +/* 22 */ { 8, s_5_22, 21, 1, 0}, +/* 23 */ { 6, s_5_23, 18, 1, 0}, +/* 24 */ { 2, s_5_24, -1, 1, 0}, +/* 25 */ { 4, s_5_25, 24, 1, 0}, +/* 26 */ { 6, s_5_26, 25, 1, 0}, +/* 27 */ { 4, s_5_27, 24, 1, 0}, +/* 28 */ { 4, s_5_28, 24, 1, 0}, +/* 29 */ { 4, s_5_29, -1, 1, 0}, +/* 30 */ { 6, s_5_30, 29, 1, 0}, +/* 31 */ { 4, s_5_31, -1, 1, 0}, +/* 32 */ { 4, s_5_32, -1, 1, 0}, +/* 33 */ { 6, s_5_33, 32, 1, 0}, +/* 34 */ { 4, s_5_34, -1, 1, 0}, +/* 35 */ { 2, s_5_35, -1, 1, 0} +}; + +static symbol s_6_0[6] = { 0xD0, 0xBE, 0xD1, 0x81, 0xD1, 0x82 }; +static symbol s_6_1[8] = { 0xD0, 0xBE, 0xD1, 0x81, 0xD1, 0x82, 0xD1, 0x8C }; + +static struct among a_6[2] = +{ +/* 0 */ { 6, s_6_0, -1, 1, 0}, +/* 1 */ { 8, s_6_1, -1, 1, 0} +}; + +static symbol s_7_0[6] = { 0xD0, 0xB5, 0xD0, 0xB9, 0xD1, 0x88 }; +static symbol s_7_1[2] = { 0xD1, 0x8C }; +static symbol s_7_2[8] = { 0xD0, 0xB5, 0xD0, 0xB9, 0xD1, 0x88, 0xD0, 0xB5 }; +static symbol s_7_3[2] = { 0xD0, 0xBD }; + +static struct among a_7[4] = +{ +/* 0 */ { 6, s_7_0, -1, 1, 0}, +/* 1 */ { 2, s_7_1, -1, 3, 0}, +/* 2 */ { 8, s_7_2, -1, 1, 0}, +/* 3 */ { 2, s_7_3, -1, 2, 0} +}; + +static unsigned char g_v[] = { 33, 65, 8, 232 }; + +static symbol s_0[] = { 0xD0, 0xB0 }; +static symbol s_1[] = { 0xD1, 0x8F }; +static symbol s_2[] = { 0xD0, 0xB0 }; +static symbol s_3[] = { 0xD1, 0x8F }; +static symbol s_4[] = { 0xD0, 0xB0 }; +static symbol s_5[] = { 0xD1, 0x8F }; +static symbol s_6[] = { 0xD0, 0xBD }; +static symbol s_7[] = { 0xD0, 0xBD }; +static symbol s_8[] = { 0xD0, 0xBD }; +static symbol s_9[] = { 0xD0, 0xB8 }; + +static int r_mark_regions(struct SN_env * z) { + z->I[0] = z->l; + z->I[1] = z->l; + { int c = z->c; /* do, line 61 */ + while(1) { /* gopast, line 62 */ + if (!(in_grouping_U(z, g_v, 1072, 1103))) goto lab1; + break; + lab1: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab0; + z->c = c; /* gopast, line 62 */ + } + } + z->I[0] = z->c; /* setmark pV, line 62 */ + while(1) { /* gopast, line 62 */ + if (!(out_grouping_U(z, g_v, 1072, 1103))) goto lab2; + break; + lab2: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab0; + z->c = c; /* gopast, line 62 */ + } + } + while(1) { /* gopast, line 63 */ + if (!(in_grouping_U(z, g_v, 1072, 1103))) goto lab3; + break; + lab3: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab0; + z->c = c; /* gopast, line 63 */ + } + } + while(1) { /* gopast, line 63 */ + if (!(out_grouping_U(z, g_v, 1072, 1103))) goto lab4; + break; + lab4: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab0; + z->c = c; /* gopast, line 63 */ + } + } + z->I[1] = z->c; /* setmark p2, line 63 */ + lab0: + z->c = c; + } + return 1; +} + +static int r_R2(struct SN_env * z) { + if (!(z->I[1] <= z->c)) return 0; + return 1; +} + +static int r_perfective_gerund(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 72 */ + among_var = find_among_b(z, a_0, 9); /* substring, line 72 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 72 */ + switch(among_var) { + case 0: return 0; + case 1: + { int m = z->l - z->c; (void) m; /* or, line 76 */ + if (!(eq_s_b(z, 2, s_0))) goto lab1; + goto lab0; + lab1: + z->c = z->l - m; + if (!(eq_s_b(z, 2, s_1))) return 0; + } + lab0: + { int ret; + ret = slice_del(z); /* delete, line 76 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_del(z); /* delete, line 83 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_adjective(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 88 */ + among_var = find_among_b(z, a_1, 26); /* substring, line 88 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 88 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 97 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_adjectival(struct SN_env * z) { + int among_var; + { int ret = r_adjective(z); + if (ret == 0) return 0; /* call adjective, line 102 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 109 */ + z->ket = z->c; /* [, line 110 */ + among_var = find_among_b(z, a_2, 8); /* substring, line 110 */ + if (!(among_var)) { z->c = z->l - m; goto lab0; } + z->bra = z->c; /* ], line 110 */ + switch(among_var) { + case 0: { z->c = z->l - m; goto lab0; } + case 1: + { int m = z->l - z->c; (void) m; /* or, line 115 */ + if (!(eq_s_b(z, 2, s_2))) goto lab2; + goto lab1; + lab2: + z->c = z->l - m; + if (!(eq_s_b(z, 2, s_3))) { z->c = z->l - m; goto lab0; } + } + lab1: + { int ret; + ret = slice_del(z); /* delete, line 115 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_del(z); /* delete, line 122 */ + if (ret < 0) return ret; + } + break; + } + lab0: + ; + } + return 1; +} + +static int r_reflexive(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 129 */ + among_var = find_among_b(z, a_3, 2); /* substring, line 129 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 129 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 132 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_verb(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 137 */ + among_var = find_among_b(z, a_4, 46); /* substring, line 137 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 137 */ + switch(among_var) { + case 0: return 0; + case 1: + { int m = z->l - z->c; (void) m; /* or, line 143 */ + if (!(eq_s_b(z, 2, s_4))) goto lab1; + goto lab0; + lab1: + z->c = z->l - m; + if (!(eq_s_b(z, 2, s_5))) return 0; + } + lab0: + { int ret; + ret = slice_del(z); /* delete, line 143 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_del(z); /* delete, line 151 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_noun(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 160 */ + among_var = find_among_b(z, a_5, 36); /* substring, line 160 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 160 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 167 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_derivational(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 176 */ + among_var = find_among_b(z, a_6, 2); /* substring, line 176 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 176 */ + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 176 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 179 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_tidy_up(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 184 */ + among_var = find_among_b(z, a_7, 4); /* substring, line 184 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 184 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 188 */ + if (ret < 0) return ret; + } + z->ket = z->c; /* [, line 189 */ + if (!(eq_s_b(z, 2, s_6))) return 0; + z->bra = z->c; /* ], line 189 */ + if (!(eq_s_b(z, 2, s_7))) return 0; + { int ret; + ret = slice_del(z); /* delete, line 189 */ + if (ret < 0) return ret; + } + break; + case 2: + if (!(eq_s_b(z, 2, s_8))) return 0; + { int ret; + ret = slice_del(z); /* delete, line 192 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_del(z); /* delete, line 194 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +extern int russian_UTF_8_stem(struct SN_env * z) { + { int c = z->c; /* do, line 201 */ + { int ret = r_mark_regions(z); + if (ret == 0) goto lab0; /* call mark_regions, line 201 */ + if (ret < 0) return ret; + } + lab0: + z->c = c; + } + z->lb = z->c; z->c = z->l; /* backwards, line 202 */ + + { int m3; /* setlimit, line 202 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 202 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + { int m = z->l - z->c; (void) m; /* do, line 203 */ + { int m = z->l - z->c; (void) m; /* or, line 204 */ + { int ret = r_perfective_gerund(z); + if (ret == 0) goto lab3; /* call perfective_gerund, line 204 */ + if (ret < 0) return ret; + } + goto lab2; + lab3: + z->c = z->l - m; + { int m = z->l - z->c; (void) m; /* try, line 205 */ + { int ret = r_reflexive(z); + if (ret == 0) { z->c = z->l - m; goto lab4; } /* call reflexive, line 205 */ + if (ret < 0) return ret; + } + lab4: + ; + } + { int m = z->l - z->c; (void) m; /* or, line 206 */ + { int ret = r_adjectival(z); + if (ret == 0) goto lab6; /* call adjectival, line 206 */ + if (ret < 0) return ret; + } + goto lab5; + lab6: + z->c = z->l - m; + { int ret = r_verb(z); + if (ret == 0) goto lab7; /* call verb, line 206 */ + if (ret < 0) return ret; + } + goto lab5; + lab7: + z->c = z->l - m; + { int ret = r_noun(z); + if (ret == 0) goto lab1; /* call noun, line 206 */ + if (ret < 0) return ret; + } + } + lab5: + ; + } + lab2: + lab1: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* try, line 209 */ + z->ket = z->c; /* [, line 209 */ + if (!(eq_s_b(z, 2, s_9))) { z->c = z->l - m; goto lab8; } + z->bra = z->c; /* ], line 209 */ + { int ret; + ret = slice_del(z); /* delete, line 209 */ + if (ret < 0) return ret; + } + lab8: + ; + } + { int m = z->l - z->c; (void) m; /* do, line 212 */ + { int ret = r_derivational(z); + if (ret == 0) goto lab9; /* call derivational, line 212 */ + if (ret < 0) return ret; + } + lab9: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 213 */ + { int ret = r_tidy_up(z); + if (ret == 0) goto lab10; /* call tidy_up, line 213 */ + if (ret < 0) return ret; + } + lab10: + z->c = z->l - m; + } + z->lb = m3; + } + z->c = z->lb; + return 1; +} + +extern struct SN_env * russian_UTF_8_create_env(void) { return SN_create_env(0, 2, 0); } + +extern void russian_UTF_8_close_env(struct SN_env * z) { SN_close_env(z); } + diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_russian.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_russian.h new file mode 100644 index 0000000..4ef774d --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_russian.h @@ -0,0 +1,16 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern struct SN_env * russian_UTF_8_create_env(void); +extern void russian_UTF_8_close_env(struct SN_env * z); + +extern int russian_UTF_8_stem(struct SN_env * z); + +#ifdef __cplusplus +} +#endif + diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_spanish.c b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_spanish.c new file mode 100644 index 0000000..77771ba --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_spanish.c @@ -0,0 +1,1137 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#include "../runtime/header.h" + +extern int spanish_UTF_8_stem(struct SN_env * z); +static int r_residual_suffix(struct SN_env * z); +static int r_verb_suffix(struct SN_env * z); +static int r_y_verb_suffix(struct SN_env * z); +static int r_standard_suffix(struct SN_env * z); +static int r_attached_pronoun(struct SN_env * z); +static int r_R2(struct SN_env * z); +static int r_R1(struct SN_env * z); +static int r_RV(struct SN_env * z); +static int r_mark_regions(struct SN_env * z); +static int r_postlude(struct SN_env * z); + +extern struct SN_env * spanish_UTF_8_create_env(void); +extern void spanish_UTF_8_close_env(struct SN_env * z); + +static symbol s_0_1[2] = { 0xC3, 0xA1 }; +static symbol s_0_2[2] = { 0xC3, 0xA9 }; +static symbol s_0_3[2] = { 0xC3, 0xAD }; +static symbol s_0_4[2] = { 0xC3, 0xB3 }; +static symbol s_0_5[2] = { 0xC3, 0xBA }; + +static struct among a_0[6] = +{ +/* 0 */ { 0, 0, -1, 6, 0}, +/* 1 */ { 2, s_0_1, 0, 1, 0}, +/* 2 */ { 2, s_0_2, 0, 2, 0}, +/* 3 */ { 2, s_0_3, 0, 3, 0}, +/* 4 */ { 2, s_0_4, 0, 4, 0}, +/* 5 */ { 2, s_0_5, 0, 5, 0} +}; + +static symbol s_1_0[2] = { 'l', 'a' }; +static symbol s_1_1[4] = { 's', 'e', 'l', 'a' }; +static symbol s_1_2[2] = { 'l', 'e' }; +static symbol s_1_3[2] = { 'm', 'e' }; +static symbol s_1_4[2] = { 's', 'e' }; +static symbol s_1_5[2] = { 'l', 'o' }; +static symbol s_1_6[4] = { 's', 'e', 'l', 'o' }; +static symbol s_1_7[3] = { 'l', 'a', 's' }; +static symbol s_1_8[5] = { 's', 'e', 'l', 'a', 's' }; +static symbol s_1_9[3] = { 'l', 'e', 's' }; +static symbol s_1_10[3] = { 'l', 'o', 's' }; +static symbol s_1_11[5] = { 's', 'e', 'l', 'o', 's' }; +static symbol s_1_12[3] = { 'n', 'o', 's' }; + +static struct among a_1[13] = +{ +/* 0 */ { 2, s_1_0, -1, -1, 0}, +/* 1 */ { 4, s_1_1, 0, -1, 0}, +/* 2 */ { 2, s_1_2, -1, -1, 0}, +/* 3 */ { 2, s_1_3, -1, -1, 0}, +/* 4 */ { 2, s_1_4, -1, -1, 0}, +/* 5 */ { 2, s_1_5, -1, -1, 0}, +/* 6 */ { 4, s_1_6, 5, -1, 0}, +/* 7 */ { 3, s_1_7, -1, -1, 0}, +/* 8 */ { 5, s_1_8, 7, -1, 0}, +/* 9 */ { 3, s_1_9, -1, -1, 0}, +/* 10 */ { 3, s_1_10, -1, -1, 0}, +/* 11 */ { 5, s_1_11, 10, -1, 0}, +/* 12 */ { 3, s_1_12, -1, -1, 0} +}; + +static symbol s_2_0[4] = { 'a', 'n', 'd', 'o' }; +static symbol s_2_1[5] = { 'i', 'e', 'n', 'd', 'o' }; +static symbol s_2_2[5] = { 'y', 'e', 'n', 'd', 'o' }; +static symbol s_2_3[5] = { 0xC3, 0xA1, 'n', 'd', 'o' }; +static symbol s_2_4[6] = { 'i', 0xC3, 0xA9, 'n', 'd', 'o' }; +static symbol s_2_5[2] = { 'a', 'r' }; +static symbol s_2_6[2] = { 'e', 'r' }; +static symbol s_2_7[2] = { 'i', 'r' }; +static symbol s_2_8[3] = { 0xC3, 0xA1, 'r' }; +static symbol s_2_9[3] = { 0xC3, 0xA9, 'r' }; +static symbol s_2_10[3] = { 0xC3, 0xAD, 'r' }; + +static struct among a_2[11] = +{ +/* 0 */ { 4, s_2_0, -1, 6, 0}, +/* 1 */ { 5, s_2_1, -1, 6, 0}, +/* 2 */ { 5, s_2_2, -1, 7, 0}, +/* 3 */ { 5, s_2_3, -1, 2, 0}, +/* 4 */ { 6, s_2_4, -1, 1, 0}, +/* 5 */ { 2, s_2_5, -1, 6, 0}, +/* 6 */ { 2, s_2_6, -1, 6, 0}, +/* 7 */ { 2, s_2_7, -1, 6, 0}, +/* 8 */ { 3, s_2_8, -1, 3, 0}, +/* 9 */ { 3, s_2_9, -1, 4, 0}, +/* 10 */ { 3, s_2_10, -1, 5, 0} +}; + +static symbol s_3_0[2] = { 'i', 'c' }; +static symbol s_3_1[2] = { 'a', 'd' }; +static symbol s_3_2[2] = { 'o', 's' }; +static symbol s_3_3[2] = { 'i', 'v' }; + +static struct among a_3[4] = +{ +/* 0 */ { 2, s_3_0, -1, -1, 0}, +/* 1 */ { 2, s_3_1, -1, -1, 0}, +/* 2 */ { 2, s_3_2, -1, -1, 0}, +/* 3 */ { 2, s_3_3, -1, 1, 0} +}; + +static symbol s_4_0[4] = { 'a', 'b', 'l', 'e' }; +static symbol s_4_1[4] = { 'i', 'b', 'l', 'e' }; +static symbol s_4_2[4] = { 'a', 'n', 't', 'e' }; + +static struct among a_4[3] = +{ +/* 0 */ { 4, s_4_0, -1, 1, 0}, +/* 1 */ { 4, s_4_1, -1, 1, 0}, +/* 2 */ { 4, s_4_2, -1, 1, 0} +}; + +static symbol s_5_0[2] = { 'i', 'c' }; +static symbol s_5_1[4] = { 'a', 'b', 'i', 'l' }; +static symbol s_5_2[2] = { 'i', 'v' }; + +static struct among a_5[3] = +{ +/* 0 */ { 2, s_5_0, -1, 1, 0}, +/* 1 */ { 4, s_5_1, -1, 1, 0}, +/* 2 */ { 2, s_5_2, -1, 1, 0} +}; + +static symbol s_6_0[3] = { 'i', 'c', 'a' }; +static symbol s_6_1[5] = { 'a', 'n', 'c', 'i', 'a' }; +static symbol s_6_2[5] = { 'e', 'n', 'c', 'i', 'a' }; +static symbol s_6_3[5] = { 'a', 'd', 'o', 'r', 'a' }; +static symbol s_6_4[3] = { 'o', 's', 'a' }; +static symbol s_6_5[4] = { 'i', 's', 't', 'a' }; +static symbol s_6_6[3] = { 'i', 'v', 'a' }; +static symbol s_6_7[4] = { 'a', 'n', 'z', 'a' }; +static symbol s_6_8[6] = { 'l', 'o', 'g', 0xC3, 0xAD, 'a' }; +static symbol s_6_9[4] = { 'i', 'd', 'a', 'd' }; +static symbol s_6_10[4] = { 'a', 'b', 'l', 'e' }; +static symbol s_6_11[4] = { 'i', 'b', 'l', 'e' }; +static symbol s_6_12[4] = { 'a', 'n', 't', 'e' }; +static symbol s_6_13[5] = { 'm', 'e', 'n', 't', 'e' }; +static symbol s_6_14[6] = { 'a', 'm', 'e', 'n', 't', 'e' }; +static symbol s_6_15[6] = { 'a', 'c', 'i', 0xC3, 0xB3, 'n' }; +static symbol s_6_16[6] = { 'u', 'c', 'i', 0xC3, 0xB3, 'n' }; +static symbol s_6_17[3] = { 'i', 'c', 'o' }; +static symbol s_6_18[4] = { 'i', 's', 'm', 'o' }; +static symbol s_6_19[3] = { 'o', 's', 'o' }; +static symbol s_6_20[7] = { 'a', 'm', 'i', 'e', 'n', 't', 'o' }; +static symbol s_6_21[7] = { 'i', 'm', 'i', 'e', 'n', 't', 'o' }; +static symbol s_6_22[3] = { 'i', 'v', 'o' }; +static symbol s_6_23[4] = { 'a', 'd', 'o', 'r' }; +static symbol s_6_24[4] = { 'i', 'c', 'a', 's' }; +static symbol s_6_25[6] = { 'a', 'n', 'c', 'i', 'a', 's' }; +static symbol s_6_26[6] = { 'e', 'n', 'c', 'i', 'a', 's' }; +static symbol s_6_27[6] = { 'a', 'd', 'o', 'r', 'a', 's' }; +static symbol s_6_28[4] = { 'o', 's', 'a', 's' }; +static symbol s_6_29[5] = { 'i', 's', 't', 'a', 's' }; +static symbol s_6_30[4] = { 'i', 'v', 'a', 's' }; +static symbol s_6_31[5] = { 'a', 'n', 'z', 'a', 's' }; +static symbol s_6_32[7] = { 'l', 'o', 'g', 0xC3, 0xAD, 'a', 's' }; +static symbol s_6_33[6] = { 'i', 'd', 'a', 'd', 'e', 's' }; +static symbol s_6_34[5] = { 'a', 'b', 'l', 'e', 's' }; +static symbol s_6_35[5] = { 'i', 'b', 'l', 'e', 's' }; +static symbol s_6_36[7] = { 'a', 'c', 'i', 'o', 'n', 'e', 's' }; +static symbol s_6_37[7] = { 'u', 'c', 'i', 'o', 'n', 'e', 's' }; +static symbol s_6_38[6] = { 'a', 'd', 'o', 'r', 'e', 's' }; +static symbol s_6_39[5] = { 'a', 'n', 't', 'e', 's' }; +static symbol s_6_40[4] = { 'i', 'c', 'o', 's' }; +static symbol s_6_41[5] = { 'i', 's', 'm', 'o', 's' }; +static symbol s_6_42[4] = { 'o', 's', 'o', 's' }; +static symbol s_6_43[8] = { 'a', 'm', 'i', 'e', 'n', 't', 'o', 's' }; +static symbol s_6_44[8] = { 'i', 'm', 'i', 'e', 'n', 't', 'o', 's' }; +static symbol s_6_45[4] = { 'i', 'v', 'o', 's' }; + +static struct among a_6[46] = +{ +/* 0 */ { 3, s_6_0, -1, 1, 0}, +/* 1 */ { 5, s_6_1, -1, 2, 0}, +/* 2 */ { 5, s_6_2, -1, 5, 0}, +/* 3 */ { 5, s_6_3, -1, 2, 0}, +/* 4 */ { 3, s_6_4, -1, 1, 0}, +/* 5 */ { 4, s_6_5, -1, 1, 0}, +/* 6 */ { 3, s_6_6, -1, 9, 0}, +/* 7 */ { 4, s_6_7, -1, 1, 0}, +/* 8 */ { 6, s_6_8, -1, 3, 0}, +/* 9 */ { 4, s_6_9, -1, 8, 0}, +/* 10 */ { 4, s_6_10, -1, 1, 0}, +/* 11 */ { 4, s_6_11, -1, 1, 0}, +/* 12 */ { 4, s_6_12, -1, 2, 0}, +/* 13 */ { 5, s_6_13, -1, 7, 0}, +/* 14 */ { 6, s_6_14, 13, 6, 0}, +/* 15 */ { 6, s_6_15, -1, 2, 0}, +/* 16 */ { 6, s_6_16, -1, 4, 0}, +/* 17 */ { 3, s_6_17, -1, 1, 0}, +/* 18 */ { 4, s_6_18, -1, 1, 0}, +/* 19 */ { 3, s_6_19, -1, 1, 0}, +/* 20 */ { 7, s_6_20, -1, 1, 0}, +/* 21 */ { 7, s_6_21, -1, 1, 0}, +/* 22 */ { 3, s_6_22, -1, 9, 0}, +/* 23 */ { 4, s_6_23, -1, 2, 0}, +/* 24 */ { 4, s_6_24, -1, 1, 0}, +/* 25 */ { 6, s_6_25, -1, 2, 0}, +/* 26 */ { 6, s_6_26, -1, 5, 0}, +/* 27 */ { 6, s_6_27, -1, 2, 0}, +/* 28 */ { 4, s_6_28, -1, 1, 0}, +/* 29 */ { 5, s_6_29, -1, 1, 0}, +/* 30 */ { 4, s_6_30, -1, 9, 0}, +/* 31 */ { 5, s_6_31, -1, 1, 0}, +/* 32 */ { 7, s_6_32, -1, 3, 0}, +/* 33 */ { 6, s_6_33, -1, 8, 0}, +/* 34 */ { 5, s_6_34, -1, 1, 0}, +/* 35 */ { 5, s_6_35, -1, 1, 0}, +/* 36 */ { 7, s_6_36, -1, 2, 0}, +/* 37 */ { 7, s_6_37, -1, 4, 0}, +/* 38 */ { 6, s_6_38, -1, 2, 0}, +/* 39 */ { 5, s_6_39, -1, 2, 0}, +/* 40 */ { 4, s_6_40, -1, 1, 0}, +/* 41 */ { 5, s_6_41, -1, 1, 0}, +/* 42 */ { 4, s_6_42, -1, 1, 0}, +/* 43 */ { 8, s_6_43, -1, 1, 0}, +/* 44 */ { 8, s_6_44, -1, 1, 0}, +/* 45 */ { 4, s_6_45, -1, 9, 0} +}; + +static symbol s_7_0[2] = { 'y', 'a' }; +static symbol s_7_1[2] = { 'y', 'e' }; +static symbol s_7_2[3] = { 'y', 'a', 'n' }; +static symbol s_7_3[3] = { 'y', 'e', 'n' }; +static symbol s_7_4[5] = { 'y', 'e', 'r', 'o', 'n' }; +static symbol s_7_5[5] = { 'y', 'e', 'n', 'd', 'o' }; +static symbol s_7_6[2] = { 'y', 'o' }; +static symbol s_7_7[3] = { 'y', 'a', 's' }; +static symbol s_7_8[3] = { 'y', 'e', 's' }; +static symbol s_7_9[4] = { 'y', 'a', 'i', 's' }; +static symbol s_7_10[5] = { 'y', 'a', 'm', 'o', 's' }; +static symbol s_7_11[3] = { 'y', 0xC3, 0xB3 }; + +static struct among a_7[12] = +{ +/* 0 */ { 2, s_7_0, -1, 1, 0}, +/* 1 */ { 2, s_7_1, -1, 1, 0}, +/* 2 */ { 3, s_7_2, -1, 1, 0}, +/* 3 */ { 3, s_7_3, -1, 1, 0}, +/* 4 */ { 5, s_7_4, -1, 1, 0}, +/* 5 */ { 5, s_7_5, -1, 1, 0}, +/* 6 */ { 2, s_7_6, -1, 1, 0}, +/* 7 */ { 3, s_7_7, -1, 1, 0}, +/* 8 */ { 3, s_7_8, -1, 1, 0}, +/* 9 */ { 4, s_7_9, -1, 1, 0}, +/* 10 */ { 5, s_7_10, -1, 1, 0}, +/* 11 */ { 3, s_7_11, -1, 1, 0} +}; + +static symbol s_8_0[3] = { 'a', 'b', 'a' }; +static symbol s_8_1[3] = { 'a', 'd', 'a' }; +static symbol s_8_2[3] = { 'i', 'd', 'a' }; +static symbol s_8_3[3] = { 'a', 'r', 'a' }; +static symbol s_8_4[4] = { 'i', 'e', 'r', 'a' }; +static symbol s_8_5[3] = { 0xC3, 0xAD, 'a' }; +static symbol s_8_6[5] = { 'a', 'r', 0xC3, 0xAD, 'a' }; +static symbol s_8_7[5] = { 'e', 'r', 0xC3, 0xAD, 'a' }; +static symbol s_8_8[5] = { 'i', 'r', 0xC3, 0xAD, 'a' }; +static symbol s_8_9[2] = { 'a', 'd' }; +static symbol s_8_10[2] = { 'e', 'd' }; +static symbol s_8_11[2] = { 'i', 'd' }; +static symbol s_8_12[3] = { 'a', 's', 'e' }; +static symbol s_8_13[4] = { 'i', 'e', 's', 'e' }; +static symbol s_8_14[4] = { 'a', 's', 't', 'e' }; +static symbol s_8_15[4] = { 'i', 's', 't', 'e' }; +static symbol s_8_16[2] = { 'a', 'n' }; +static symbol s_8_17[4] = { 'a', 'b', 'a', 'n' }; +static symbol s_8_18[4] = { 'a', 'r', 'a', 'n' }; +static symbol s_8_19[5] = { 'i', 'e', 'r', 'a', 'n' }; +static symbol s_8_20[4] = { 0xC3, 0xAD, 'a', 'n' }; +static symbol s_8_21[6] = { 'a', 'r', 0xC3, 0xAD, 'a', 'n' }; +static symbol s_8_22[6] = { 'e', 'r', 0xC3, 0xAD, 'a', 'n' }; +static symbol s_8_23[6] = { 'i', 'r', 0xC3, 0xAD, 'a', 'n' }; +static symbol s_8_24[2] = { 'e', 'n' }; +static symbol s_8_25[4] = { 'a', 's', 'e', 'n' }; +static symbol s_8_26[5] = { 'i', 'e', 's', 'e', 'n' }; +static symbol s_8_27[4] = { 'a', 'r', 'o', 'n' }; +static symbol s_8_28[5] = { 'i', 'e', 'r', 'o', 'n' }; +static symbol s_8_29[5] = { 'a', 'r', 0xC3, 0xA1, 'n' }; +static symbol s_8_30[5] = { 'e', 'r', 0xC3, 0xA1, 'n' }; +static symbol s_8_31[5] = { 'i', 'r', 0xC3, 0xA1, 'n' }; +static symbol s_8_32[3] = { 'a', 'd', 'o' }; +static symbol s_8_33[3] = { 'i', 'd', 'o' }; +static symbol s_8_34[4] = { 'a', 'n', 'd', 'o' }; +static symbol s_8_35[5] = { 'i', 'e', 'n', 'd', 'o' }; +static symbol s_8_36[2] = { 'a', 'r' }; +static symbol s_8_37[2] = { 'e', 'r' }; +static symbol s_8_38[2] = { 'i', 'r' }; +static symbol s_8_39[2] = { 'a', 's' }; +static symbol s_8_40[4] = { 'a', 'b', 'a', 's' }; +static symbol s_8_41[4] = { 'a', 'd', 'a', 's' }; +static symbol s_8_42[4] = { 'i', 'd', 'a', 's' }; +static symbol s_8_43[4] = { 'a', 'r', 'a', 's' }; +static symbol s_8_44[5] = { 'i', 'e', 'r', 'a', 's' }; +static symbol s_8_45[4] = { 0xC3, 0xAD, 'a', 's' }; +static symbol s_8_46[6] = { 'a', 'r', 0xC3, 0xAD, 'a', 's' }; +static symbol s_8_47[6] = { 'e', 'r', 0xC3, 0xAD, 'a', 's' }; +static symbol s_8_48[6] = { 'i', 'r', 0xC3, 0xAD, 'a', 's' }; +static symbol s_8_49[2] = { 'e', 's' }; +static symbol s_8_50[4] = { 'a', 's', 'e', 's' }; +static symbol s_8_51[5] = { 'i', 'e', 's', 'e', 's' }; +static symbol s_8_52[5] = { 'a', 'b', 'a', 'i', 's' }; +static symbol s_8_53[5] = { 'a', 'r', 'a', 'i', 's' }; +static symbol s_8_54[6] = { 'i', 'e', 'r', 'a', 'i', 's' }; +static symbol s_8_55[5] = { 0xC3, 0xAD, 'a', 'i', 's' }; +static symbol s_8_56[7] = { 'a', 'r', 0xC3, 0xAD, 'a', 'i', 's' }; +static symbol s_8_57[7] = { 'e', 'r', 0xC3, 0xAD, 'a', 'i', 's' }; +static symbol s_8_58[7] = { 'i', 'r', 0xC3, 0xAD, 'a', 'i', 's' }; +static symbol s_8_59[5] = { 'a', 's', 'e', 'i', 's' }; +static symbol s_8_60[6] = { 'i', 'e', 's', 'e', 'i', 's' }; +static symbol s_8_61[6] = { 'a', 's', 't', 'e', 'i', 's' }; +static symbol s_8_62[6] = { 'i', 's', 't', 'e', 'i', 's' }; +static symbol s_8_63[4] = { 0xC3, 0xA1, 'i', 's' }; +static symbol s_8_64[4] = { 0xC3, 0xA9, 'i', 's' }; +static symbol s_8_65[6] = { 'a', 'r', 0xC3, 0xA9, 'i', 's' }; +static symbol s_8_66[6] = { 'e', 'r', 0xC3, 0xA9, 'i', 's' }; +static symbol s_8_67[6] = { 'i', 'r', 0xC3, 0xA9, 'i', 's' }; +static symbol s_8_68[4] = { 'a', 'd', 'o', 's' }; +static symbol s_8_69[4] = { 'i', 'd', 'o', 's' }; +static symbol s_8_70[4] = { 'a', 'm', 'o', 's' }; +static symbol s_8_71[7] = { 0xC3, 0xA1, 'b', 'a', 'm', 'o', 's' }; +static symbol s_8_72[7] = { 0xC3, 0xA1, 'r', 'a', 'm', 'o', 's' }; +static symbol s_8_73[8] = { 'i', 0xC3, 0xA9, 'r', 'a', 'm', 'o', 's' }; +static symbol s_8_74[6] = { 0xC3, 0xAD, 'a', 'm', 'o', 's' }; +static symbol s_8_75[8] = { 'a', 'r', 0xC3, 0xAD, 'a', 'm', 'o', 's' }; +static symbol s_8_76[8] = { 'e', 'r', 0xC3, 0xAD, 'a', 'm', 'o', 's' }; +static symbol s_8_77[8] = { 'i', 'r', 0xC3, 0xAD, 'a', 'm', 'o', 's' }; +static symbol s_8_78[4] = { 'e', 'm', 'o', 's' }; +static symbol s_8_79[6] = { 'a', 'r', 'e', 'm', 'o', 's' }; +static symbol s_8_80[6] = { 'e', 'r', 'e', 'm', 'o', 's' }; +static symbol s_8_81[6] = { 'i', 'r', 'e', 'm', 'o', 's' }; +static symbol s_8_82[7] = { 0xC3, 0xA1, 's', 'e', 'm', 'o', 's' }; +static symbol s_8_83[8] = { 'i', 0xC3, 0xA9, 's', 'e', 'm', 'o', 's' }; +static symbol s_8_84[4] = { 'i', 'm', 'o', 's' }; +static symbol s_8_85[5] = { 'a', 'r', 0xC3, 0xA1, 's' }; +static symbol s_8_86[5] = { 'e', 'r', 0xC3, 0xA1, 's' }; +static symbol s_8_87[5] = { 'i', 'r', 0xC3, 0xA1, 's' }; +static symbol s_8_88[3] = { 0xC3, 0xAD, 's' }; +static symbol s_8_89[4] = { 'a', 'r', 0xC3, 0xA1 }; +static symbol s_8_90[4] = { 'e', 'r', 0xC3, 0xA1 }; +static symbol s_8_91[4] = { 'i', 'r', 0xC3, 0xA1 }; +static symbol s_8_92[4] = { 'a', 'r', 0xC3, 0xA9 }; +static symbol s_8_93[4] = { 'e', 'r', 0xC3, 0xA9 }; +static symbol s_8_94[4] = { 'i', 'r', 0xC3, 0xA9 }; +static symbol s_8_95[3] = { 'i', 0xC3, 0xB3 }; + +static struct among a_8[96] = +{ +/* 0 */ { 3, s_8_0, -1, 2, 0}, +/* 1 */ { 3, s_8_1, -1, 2, 0}, +/* 2 */ { 3, s_8_2, -1, 2, 0}, +/* 3 */ { 3, s_8_3, -1, 2, 0}, +/* 4 */ { 4, s_8_4, -1, 2, 0}, +/* 5 */ { 3, s_8_5, -1, 2, 0}, +/* 6 */ { 5, s_8_6, 5, 2, 0}, +/* 7 */ { 5, s_8_7, 5, 2, 0}, +/* 8 */ { 5, s_8_8, 5, 2, 0}, +/* 9 */ { 2, s_8_9, -1, 2, 0}, +/* 10 */ { 2, s_8_10, -1, 2, 0}, +/* 11 */ { 2, s_8_11, -1, 2, 0}, +/* 12 */ { 3, s_8_12, -1, 2, 0}, +/* 13 */ { 4, s_8_13, -1, 2, 0}, +/* 14 */ { 4, s_8_14, -1, 2, 0}, +/* 15 */ { 4, s_8_15, -1, 2, 0}, +/* 16 */ { 2, s_8_16, -1, 2, 0}, +/* 17 */ { 4, s_8_17, 16, 2, 0}, +/* 18 */ { 4, s_8_18, 16, 2, 0}, +/* 19 */ { 5, s_8_19, 16, 2, 0}, +/* 20 */ { 4, s_8_20, 16, 2, 0}, +/* 21 */ { 6, s_8_21, 20, 2, 0}, +/* 22 */ { 6, s_8_22, 20, 2, 0}, +/* 23 */ { 6, s_8_23, 20, 2, 0}, +/* 24 */ { 2, s_8_24, -1, 1, 0}, +/* 25 */ { 4, s_8_25, 24, 2, 0}, +/* 26 */ { 5, s_8_26, 24, 2, 0}, +/* 27 */ { 4, s_8_27, -1, 2, 0}, +/* 28 */ { 5, s_8_28, -1, 2, 0}, +/* 29 */ { 5, s_8_29, -1, 2, 0}, +/* 30 */ { 5, s_8_30, -1, 2, 0}, +/* 31 */ { 5, s_8_31, -1, 2, 0}, +/* 32 */ { 3, s_8_32, -1, 2, 0}, +/* 33 */ { 3, s_8_33, -1, 2, 0}, +/* 34 */ { 4, s_8_34, -1, 2, 0}, +/* 35 */ { 5, s_8_35, -1, 2, 0}, +/* 36 */ { 2, s_8_36, -1, 2, 0}, +/* 37 */ { 2, s_8_37, -1, 2, 0}, +/* 38 */ { 2, s_8_38, -1, 2, 0}, +/* 39 */ { 2, s_8_39, -1, 2, 0}, +/* 40 */ { 4, s_8_40, 39, 2, 0}, +/* 41 */ { 4, s_8_41, 39, 2, 0}, +/* 42 */ { 4, s_8_42, 39, 2, 0}, +/* 43 */ { 4, s_8_43, 39, 2, 0}, +/* 44 */ { 5, s_8_44, 39, 2, 0}, +/* 45 */ { 4, s_8_45, 39, 2, 0}, +/* 46 */ { 6, s_8_46, 45, 2, 0}, +/* 47 */ { 6, s_8_47, 45, 2, 0}, +/* 48 */ { 6, s_8_48, 45, 2, 0}, +/* 49 */ { 2, s_8_49, -1, 1, 0}, +/* 50 */ { 4, s_8_50, 49, 2, 0}, +/* 51 */ { 5, s_8_51, 49, 2, 0}, +/* 52 */ { 5, s_8_52, -1, 2, 0}, +/* 53 */ { 5, s_8_53, -1, 2, 0}, +/* 54 */ { 6, s_8_54, -1, 2, 0}, +/* 55 */ { 5, s_8_55, -1, 2, 0}, +/* 56 */ { 7, s_8_56, 55, 2, 0}, +/* 57 */ { 7, s_8_57, 55, 2, 0}, +/* 58 */ { 7, s_8_58, 55, 2, 0}, +/* 59 */ { 5, s_8_59, -1, 2, 0}, +/* 60 */ { 6, s_8_60, -1, 2, 0}, +/* 61 */ { 6, s_8_61, -1, 2, 0}, +/* 62 */ { 6, s_8_62, -1, 2, 0}, +/* 63 */ { 4, s_8_63, -1, 2, 0}, +/* 64 */ { 4, s_8_64, -1, 1, 0}, +/* 65 */ { 6, s_8_65, 64, 2, 0}, +/* 66 */ { 6, s_8_66, 64, 2, 0}, +/* 67 */ { 6, s_8_67, 64, 2, 0}, +/* 68 */ { 4, s_8_68, -1, 2, 0}, +/* 69 */ { 4, s_8_69, -1, 2, 0}, +/* 70 */ { 4, s_8_70, -1, 2, 0}, +/* 71 */ { 7, s_8_71, 70, 2, 0}, +/* 72 */ { 7, s_8_72, 70, 2, 0}, +/* 73 */ { 8, s_8_73, 70, 2, 0}, +/* 74 */ { 6, s_8_74, 70, 2, 0}, +/* 75 */ { 8, s_8_75, 74, 2, 0}, +/* 76 */ { 8, s_8_76, 74, 2, 0}, +/* 77 */ { 8, s_8_77, 74, 2, 0}, +/* 78 */ { 4, s_8_78, -1, 1, 0}, +/* 79 */ { 6, s_8_79, 78, 2, 0}, +/* 80 */ { 6, s_8_80, 78, 2, 0}, +/* 81 */ { 6, s_8_81, 78, 2, 0}, +/* 82 */ { 7, s_8_82, 78, 2, 0}, +/* 83 */ { 8, s_8_83, 78, 2, 0}, +/* 84 */ { 4, s_8_84, -1, 2, 0}, +/* 85 */ { 5, s_8_85, -1, 2, 0}, +/* 86 */ { 5, s_8_86, -1, 2, 0}, +/* 87 */ { 5, s_8_87, -1, 2, 0}, +/* 88 */ { 3, s_8_88, -1, 2, 0}, +/* 89 */ { 4, s_8_89, -1, 2, 0}, +/* 90 */ { 4, s_8_90, -1, 2, 0}, +/* 91 */ { 4, s_8_91, -1, 2, 0}, +/* 92 */ { 4, s_8_92, -1, 2, 0}, +/* 93 */ { 4, s_8_93, -1, 2, 0}, +/* 94 */ { 4, s_8_94, -1, 2, 0}, +/* 95 */ { 3, s_8_95, -1, 2, 0} +}; + +static symbol s_9_0[1] = { 'a' }; +static symbol s_9_1[1] = { 'e' }; +static symbol s_9_2[1] = { 'o' }; +static symbol s_9_3[2] = { 'o', 's' }; +static symbol s_9_4[2] = { 0xC3, 0xA1 }; +static symbol s_9_5[2] = { 0xC3, 0xA9 }; +static symbol s_9_6[2] = { 0xC3, 0xAD }; +static symbol s_9_7[2] = { 0xC3, 0xB3 }; + +static struct among a_9[8] = +{ +/* 0 */ { 1, s_9_0, -1, 1, 0}, +/* 1 */ { 1, s_9_1, -1, 2, 0}, +/* 2 */ { 1, s_9_2, -1, 1, 0}, +/* 3 */ { 2, s_9_3, -1, 1, 0}, +/* 4 */ { 2, s_9_4, -1, 1, 0}, +/* 5 */ { 2, s_9_5, -1, 2, 0}, +/* 6 */ { 2, s_9_6, -1, 1, 0}, +/* 7 */ { 2, s_9_7, -1, 1, 0} +}; + +static unsigned char g_v[] = { 17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 4, 10 }; + +static symbol s_0[] = { 'a' }; +static symbol s_1[] = { 'e' }; +static symbol s_2[] = { 'i' }; +static symbol s_3[] = { 'o' }; +static symbol s_4[] = { 'u' }; +static symbol s_5[] = { 'i', 'e', 'n', 'd', 'o' }; +static symbol s_6[] = { 'a', 'n', 'd', 'o' }; +static symbol s_7[] = { 'a', 'r' }; +static symbol s_8[] = { 'e', 'r' }; +static symbol s_9[] = { 'i', 'r' }; +static symbol s_10[] = { 'u' }; +static symbol s_11[] = { 'i', 'c' }; +static symbol s_12[] = { 'l', 'o', 'g' }; +static symbol s_13[] = { 'u' }; +static symbol s_14[] = { 'e', 'n', 't', 'e' }; +static symbol s_15[] = { 'a', 't' }; +static symbol s_16[] = { 'a', 't' }; +static symbol s_17[] = { 'u' }; +static symbol s_18[] = { 'u' }; +static symbol s_19[] = { 'g' }; +static symbol s_20[] = { 'u' }; +static symbol s_21[] = { 'g' }; + +static int r_mark_regions(struct SN_env * z) { + z->I[0] = z->l; + z->I[1] = z->l; + z->I[2] = z->l; + { int c = z->c; /* do, line 37 */ + { int c = z->c; /* or, line 39 */ + if (!(in_grouping_U(z, g_v, 97, 252))) goto lab2; + { int c = z->c; /* or, line 38 */ + if (!(out_grouping_U(z, g_v, 97, 252))) goto lab4; + while(1) { /* gopast, line 38 */ + if (!(in_grouping_U(z, g_v, 97, 252))) goto lab5; + break; + lab5: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab4; + z->c = c; /* gopast, line 38 */ + } + } + goto lab3; + lab4: + z->c = c; + if (!(in_grouping_U(z, g_v, 97, 252))) goto lab2; + while(1) { /* gopast, line 38 */ + if (!(out_grouping_U(z, g_v, 97, 252))) goto lab6; + break; + lab6: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab2; + z->c = c; /* gopast, line 38 */ + } + } + } + lab3: + goto lab1; + lab2: + z->c = c; + if (!(out_grouping_U(z, g_v, 97, 252))) goto lab0; + { int c = z->c; /* or, line 40 */ + if (!(out_grouping_U(z, g_v, 97, 252))) goto lab8; + while(1) { /* gopast, line 40 */ + if (!(in_grouping_U(z, g_v, 97, 252))) goto lab9; + break; + lab9: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab8; + z->c = c; /* gopast, line 40 */ + } + } + goto lab7; + lab8: + z->c = c; + if (!(in_grouping_U(z, g_v, 97, 252))) goto lab0; + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab0; + z->c = c; /* next, line 40 */ + } + } + lab7: + ; + } + lab1: + z->I[0] = z->c; /* setmark pV, line 41 */ + lab0: + z->c = c; + } + { int c = z->c; /* do, line 43 */ + while(1) { /* gopast, line 44 */ + if (!(in_grouping_U(z, g_v, 97, 252))) goto lab11; + break; + lab11: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab10; + z->c = c; /* gopast, line 44 */ + } + } + while(1) { /* gopast, line 44 */ + if (!(out_grouping_U(z, g_v, 97, 252))) goto lab12; + break; + lab12: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab10; + z->c = c; /* gopast, line 44 */ + } + } + z->I[1] = z->c; /* setmark p1, line 44 */ + while(1) { /* gopast, line 45 */ + if (!(in_grouping_U(z, g_v, 97, 252))) goto lab13; + break; + lab13: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab10; + z->c = c; /* gopast, line 45 */ + } + } + while(1) { /* gopast, line 45 */ + if (!(out_grouping_U(z, g_v, 97, 252))) goto lab14; + break; + lab14: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab10; + z->c = c; /* gopast, line 45 */ + } + } + z->I[2] = z->c; /* setmark p2, line 45 */ + lab10: + z->c = c; + } + return 1; +} + +static int r_postlude(struct SN_env * z) { + int among_var; + while(1) { /* repeat, line 49 */ + int c = z->c; + z->bra = z->c; /* [, line 50 */ + among_var = find_among(z, a_0, 6); /* substring, line 50 */ + if (!(among_var)) goto lab0; + z->ket = z->c; /* ], line 50 */ + switch(among_var) { + case 0: goto lab0; + case 1: + { int ret; + ret = slice_from_s(z, 1, s_0); /* <-, line 51 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 1, s_1); /* <-, line 52 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_from_s(z, 1, s_2); /* <-, line 53 */ + if (ret < 0) return ret; + } + break; + case 4: + { int ret; + ret = slice_from_s(z, 1, s_3); /* <-, line 54 */ + if (ret < 0) return ret; + } + break; + case 5: + { int ret; + ret = slice_from_s(z, 1, s_4); /* <-, line 55 */ + if (ret < 0) return ret; + } + break; + case 6: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) goto lab0; + z->c = c; /* next, line 57 */ + } + break; + } + continue; + lab0: + z->c = c; + break; + } + return 1; +} + +static int r_RV(struct SN_env * z) { + if (!(z->I[0] <= z->c)) return 0; + return 1; +} + +static int r_R1(struct SN_env * z) { + if (!(z->I[1] <= z->c)) return 0; + return 1; +} + +static int r_R2(struct SN_env * z) { + if (!(z->I[2] <= z->c)) return 0; + return 1; +} + +static int r_attached_pronoun(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 68 */ + if (!(find_among_b(z, a_1, 13))) return 0; /* substring, line 68 */ + z->bra = z->c; /* ], line 68 */ + among_var = find_among_b(z, a_2, 11); /* substring, line 72 */ + if (!(among_var)) return 0; + { int ret = r_RV(z); + if (ret == 0) return 0; /* call RV, line 72 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: return 0; + case 1: + z->bra = z->c; /* ], line 73 */ + { int ret; + ret = slice_from_s(z, 5, s_5); /* <-, line 73 */ + if (ret < 0) return ret; + } + break; + case 2: + z->bra = z->c; /* ], line 74 */ + { int ret; + ret = slice_from_s(z, 4, s_6); /* <-, line 74 */ + if (ret < 0) return ret; + } + break; + case 3: + z->bra = z->c; /* ], line 75 */ + { int ret; + ret = slice_from_s(z, 2, s_7); /* <-, line 75 */ + if (ret < 0) return ret; + } + break; + case 4: + z->bra = z->c; /* ], line 76 */ + { int ret; + ret = slice_from_s(z, 2, s_8); /* <-, line 76 */ + if (ret < 0) return ret; + } + break; + case 5: + z->bra = z->c; /* ], line 77 */ + { int ret; + ret = slice_from_s(z, 2, s_9); /* <-, line 77 */ + if (ret < 0) return ret; + } + break; + case 6: + { int ret; + ret = slice_del(z); /* delete, line 81 */ + if (ret < 0) return ret; + } + break; + case 7: + if (!(eq_s_b(z, 1, s_10))) return 0; + { int ret; + ret = slice_del(z); /* delete, line 82 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_standard_suffix(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 87 */ + among_var = find_among_b(z, a_6, 46); /* substring, line 87 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 87 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 99 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 99 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 105 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 105 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 106 */ + z->ket = z->c; /* [, line 106 */ + if (!(eq_s_b(z, 2, s_11))) { z->c = z->l - m; goto lab0; } + z->bra = z->c; /* ], line 106 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab0; } /* call R2, line 106 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 106 */ + if (ret < 0) return ret; + } + lab0: + ; + } + break; + case 3: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 111 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 3, s_12); /* <-, line 111 */ + if (ret < 0) return ret; + } + break; + case 4: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 115 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 1, s_13); /* <-, line 115 */ + if (ret < 0) return ret; + } + break; + case 5: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 119 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_from_s(z, 4, s_14); /* <-, line 119 */ + if (ret < 0) return ret; + } + break; + case 6: + { int ret = r_R1(z); + if (ret == 0) return 0; /* call R1, line 123 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 123 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 124 */ + z->ket = z->c; /* [, line 125 */ + among_var = find_among_b(z, a_3, 4); /* substring, line 125 */ + if (!(among_var)) { z->c = z->l - m; goto lab1; } + z->bra = z->c; /* ], line 125 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab1; } /* call R2, line 125 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 125 */ + if (ret < 0) return ret; + } + switch(among_var) { + case 0: { z->c = z->l - m; goto lab1; } + case 1: + z->ket = z->c; /* [, line 126 */ + if (!(eq_s_b(z, 2, s_15))) { z->c = z->l - m; goto lab1; } + z->bra = z->c; /* ], line 126 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab1; } /* call R2, line 126 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 126 */ + if (ret < 0) return ret; + } + break; + } + lab1: + ; + } + break; + case 7: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 135 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 135 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 136 */ + z->ket = z->c; /* [, line 137 */ + among_var = find_among_b(z, a_4, 3); /* substring, line 137 */ + if (!(among_var)) { z->c = z->l - m; goto lab2; } + z->bra = z->c; /* ], line 137 */ + switch(among_var) { + case 0: { z->c = z->l - m; goto lab2; } + case 1: + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab2; } /* call R2, line 140 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 140 */ + if (ret < 0) return ret; + } + break; + } + lab2: + ; + } + break; + case 8: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 147 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 147 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 148 */ + z->ket = z->c; /* [, line 149 */ + among_var = find_among_b(z, a_5, 3); /* substring, line 149 */ + if (!(among_var)) { z->c = z->l - m; goto lab3; } + z->bra = z->c; /* ], line 149 */ + switch(among_var) { + case 0: { z->c = z->l - m; goto lab3; } + case 1: + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab3; } /* call R2, line 152 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 152 */ + if (ret < 0) return ret; + } + break; + } + lab3: + ; + } + break; + case 9: + { int ret = r_R2(z); + if (ret == 0) return 0; /* call R2, line 159 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 159 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 160 */ + z->ket = z->c; /* [, line 161 */ + if (!(eq_s_b(z, 2, s_16))) { z->c = z->l - m; goto lab4; } + z->bra = z->c; /* ], line 161 */ + { int ret = r_R2(z); + if (ret == 0) { z->c = z->l - m; goto lab4; } /* call R2, line 161 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 161 */ + if (ret < 0) return ret; + } + lab4: + ; + } + break; + } + return 1; +} + +static int r_y_verb_suffix(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 168 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 168 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 168 */ + among_var = find_among_b(z, a_7, 12); /* substring, line 168 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 168 */ + z->lb = m3; + } + switch(among_var) { + case 0: return 0; + case 1: + if (!(eq_s_b(z, 1, s_17))) return 0; + { int ret; + ret = slice_del(z); /* delete, line 171 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_verb_suffix(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 176 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 176 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 176 */ + among_var = find_among_b(z, a_8, 96); /* substring, line 176 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 176 */ + z->lb = m3; + } + switch(among_var) { + case 0: return 0; + case 1: + { int m = z->l - z->c; (void) m; /* try, line 179 */ + if (!(eq_s_b(z, 1, s_18))) { z->c = z->l - m; goto lab0; } + { int m_test = z->l - z->c; /* test, line 179 */ + if (!(eq_s_b(z, 1, s_19))) { z->c = z->l - m; goto lab0; } + z->c = z->l - m_test; + } + lab0: + ; + } + z->bra = z->c; /* ], line 179 */ + { int ret; + ret = slice_del(z); /* delete, line 179 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_del(z); /* delete, line 200 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_residual_suffix(struct SN_env * z) { + int among_var; + z->ket = z->c; /* [, line 205 */ + among_var = find_among_b(z, a_9, 8); /* substring, line 205 */ + if (!(among_var)) return 0; + z->bra = z->c; /* ], line 205 */ + switch(among_var) { + case 0: return 0; + case 1: + { int ret = r_RV(z); + if (ret == 0) return 0; /* call RV, line 208 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 208 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret = r_RV(z); + if (ret == 0) return 0; /* call RV, line 210 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 210 */ + if (ret < 0) return ret; + } + { int m = z->l - z->c; (void) m; /* try, line 210 */ + z->ket = z->c; /* [, line 210 */ + if (!(eq_s_b(z, 1, s_20))) { z->c = z->l - m; goto lab0; } + z->bra = z->c; /* ], line 210 */ + { int m_test = z->l - z->c; /* test, line 210 */ + if (!(eq_s_b(z, 1, s_21))) { z->c = z->l - m; goto lab0; } + z->c = z->l - m_test; + } + { int ret = r_RV(z); + if (ret == 0) { z->c = z->l - m; goto lab0; } /* call RV, line 210 */ + if (ret < 0) return ret; + } + { int ret; + ret = slice_del(z); /* delete, line 210 */ + if (ret < 0) return ret; + } + lab0: + ; + } + break; + } + return 1; +} + +extern int spanish_UTF_8_stem(struct SN_env * z) { + { int c = z->c; /* do, line 216 */ + { int ret = r_mark_regions(z); + if (ret == 0) goto lab0; /* call mark_regions, line 216 */ + if (ret < 0) return ret; + } + lab0: + z->c = c; + } + z->lb = z->c; z->c = z->l; /* backwards, line 217 */ + + { int m = z->l - z->c; (void) m; /* do, line 218 */ + { int ret = r_attached_pronoun(z); + if (ret == 0) goto lab1; /* call attached_pronoun, line 218 */ + if (ret < 0) return ret; + } + lab1: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 219 */ + { int m = z->l - z->c; (void) m; /* or, line 219 */ + { int ret = r_standard_suffix(z); + if (ret == 0) goto lab4; /* call standard_suffix, line 219 */ + if (ret < 0) return ret; + } + goto lab3; + lab4: + z->c = z->l - m; + { int ret = r_y_verb_suffix(z); + if (ret == 0) goto lab5; /* call y_verb_suffix, line 220 */ + if (ret < 0) return ret; + } + goto lab3; + lab5: + z->c = z->l - m; + { int ret = r_verb_suffix(z); + if (ret == 0) goto lab2; /* call verb_suffix, line 221 */ + if (ret < 0) return ret; + } + } + lab3: + lab2: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 223 */ + { int ret = r_residual_suffix(z); + if (ret == 0) goto lab6; /* call residual_suffix, line 223 */ + if (ret < 0) return ret; + } + lab6: + z->c = z->l - m; + } + z->c = z->lb; + { int c = z->c; /* do, line 225 */ + { int ret = r_postlude(z); + if (ret == 0) goto lab7; /* call postlude, line 225 */ + if (ret < 0) return ret; + } + lab7: + z->c = c; + } + return 1; +} + +extern struct SN_env * spanish_UTF_8_create_env(void) { return SN_create_env(0, 3, 0); } + +extern void spanish_UTF_8_close_env(struct SN_env * z) { SN_close_env(z); } + diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_spanish.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_spanish.h new file mode 100644 index 0000000..10572ec --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_spanish.h @@ -0,0 +1,16 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern struct SN_env * spanish_UTF_8_create_env(void); +extern void spanish_UTF_8_close_env(struct SN_env * z); + +extern int spanish_UTF_8_stem(struct SN_env * z); + +#ifdef __cplusplus +} +#endif + diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_swedish.c b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_swedish.c new file mode 100644 index 0000000..af75551 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_swedish.c @@ -0,0 +1,313 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#include "../runtime/header.h" + +extern int swedish_UTF_8_stem(struct SN_env * z); +static int r_other_suffix(struct SN_env * z); +static int r_consonant_pair(struct SN_env * z); +static int r_main_suffix(struct SN_env * z); +static int r_mark_regions(struct SN_env * z); + +extern struct SN_env * swedish_UTF_8_create_env(void); +extern void swedish_UTF_8_close_env(struct SN_env * z); + +static symbol s_0_0[1] = { 'a' }; +static symbol s_0_1[4] = { 'a', 'r', 'n', 'a' }; +static symbol s_0_2[4] = { 'e', 'r', 'n', 'a' }; +static symbol s_0_3[7] = { 'h', 'e', 't', 'e', 'r', 'n', 'a' }; +static symbol s_0_4[4] = { 'o', 'r', 'n', 'a' }; +static symbol s_0_5[2] = { 'a', 'd' }; +static symbol s_0_6[1] = { 'e' }; +static symbol s_0_7[3] = { 'a', 'd', 'e' }; +static symbol s_0_8[4] = { 'a', 'n', 'd', 'e' }; +static symbol s_0_9[4] = { 'a', 'r', 'n', 'e' }; +static symbol s_0_10[3] = { 'a', 'r', 'e' }; +static symbol s_0_11[4] = { 'a', 's', 't', 'e' }; +static symbol s_0_12[2] = { 'e', 'n' }; +static symbol s_0_13[5] = { 'a', 'n', 'd', 'e', 'n' }; +static symbol s_0_14[4] = { 'a', 'r', 'e', 'n' }; +static symbol s_0_15[5] = { 'h', 'e', 't', 'e', 'n' }; +static symbol s_0_16[3] = { 'e', 'r', 'n' }; +static symbol s_0_17[2] = { 'a', 'r' }; +static symbol s_0_18[2] = { 'e', 'r' }; +static symbol s_0_19[5] = { 'h', 'e', 't', 'e', 'r' }; +static symbol s_0_20[2] = { 'o', 'r' }; +static symbol s_0_21[1] = { 's' }; +static symbol s_0_22[2] = { 'a', 's' }; +static symbol s_0_23[5] = { 'a', 'r', 'n', 'a', 's' }; +static symbol s_0_24[5] = { 'e', 'r', 'n', 'a', 's' }; +static symbol s_0_25[5] = { 'o', 'r', 'n', 'a', 's' }; +static symbol s_0_26[2] = { 'e', 's' }; +static symbol s_0_27[4] = { 'a', 'd', 'e', 's' }; +static symbol s_0_28[5] = { 'a', 'n', 'd', 'e', 's' }; +static symbol s_0_29[3] = { 'e', 'n', 's' }; +static symbol s_0_30[5] = { 'a', 'r', 'e', 'n', 's' }; +static symbol s_0_31[6] = { 'h', 'e', 't', 'e', 'n', 's' }; +static symbol s_0_32[4] = { 'e', 'r', 'n', 's' }; +static symbol s_0_33[2] = { 'a', 't' }; +static symbol s_0_34[5] = { 'a', 'n', 'd', 'e', 't' }; +static symbol s_0_35[3] = { 'h', 'e', 't' }; +static symbol s_0_36[3] = { 'a', 's', 't' }; + +static struct among a_0[37] = +{ +/* 0 */ { 1, s_0_0, -1, 1, 0}, +/* 1 */ { 4, s_0_1, 0, 1, 0}, +/* 2 */ { 4, s_0_2, 0, 1, 0}, +/* 3 */ { 7, s_0_3, 2, 1, 0}, +/* 4 */ { 4, s_0_4, 0, 1, 0}, +/* 5 */ { 2, s_0_5, -1, 1, 0}, +/* 6 */ { 1, s_0_6, -1, 1, 0}, +/* 7 */ { 3, s_0_7, 6, 1, 0}, +/* 8 */ { 4, s_0_8, 6, 1, 0}, +/* 9 */ { 4, s_0_9, 6, 1, 0}, +/* 10 */ { 3, s_0_10, 6, 1, 0}, +/* 11 */ { 4, s_0_11, 6, 1, 0}, +/* 12 */ { 2, s_0_12, -1, 1, 0}, +/* 13 */ { 5, s_0_13, 12, 1, 0}, +/* 14 */ { 4, s_0_14, 12, 1, 0}, +/* 15 */ { 5, s_0_15, 12, 1, 0}, +/* 16 */ { 3, s_0_16, -1, 1, 0}, +/* 17 */ { 2, s_0_17, -1, 1, 0}, +/* 18 */ { 2, s_0_18, -1, 1, 0}, +/* 19 */ { 5, s_0_19, 18, 1, 0}, +/* 20 */ { 2, s_0_20, -1, 1, 0}, +/* 21 */ { 1, s_0_21, -1, 2, 0}, +/* 22 */ { 2, s_0_22, 21, 1, 0}, +/* 23 */ { 5, s_0_23, 22, 1, 0}, +/* 24 */ { 5, s_0_24, 22, 1, 0}, +/* 25 */ { 5, s_0_25, 22, 1, 0}, +/* 26 */ { 2, s_0_26, 21, 1, 0}, +/* 27 */ { 4, s_0_27, 26, 1, 0}, +/* 28 */ { 5, s_0_28, 26, 1, 0}, +/* 29 */ { 3, s_0_29, 21, 1, 0}, +/* 30 */ { 5, s_0_30, 29, 1, 0}, +/* 31 */ { 6, s_0_31, 29, 1, 0}, +/* 32 */ { 4, s_0_32, 21, 1, 0}, +/* 33 */ { 2, s_0_33, -1, 1, 0}, +/* 34 */ { 5, s_0_34, -1, 1, 0}, +/* 35 */ { 3, s_0_35, -1, 1, 0}, +/* 36 */ { 3, s_0_36, -1, 1, 0} +}; + +static symbol s_1_0[2] = { 'd', 'd' }; +static symbol s_1_1[2] = { 'g', 'd' }; +static symbol s_1_2[2] = { 'n', 'n' }; +static symbol s_1_3[2] = { 'd', 't' }; +static symbol s_1_4[2] = { 'g', 't' }; +static symbol s_1_5[2] = { 'k', 't' }; +static symbol s_1_6[2] = { 't', 't' }; + +static struct among a_1[7] = +{ +/* 0 */ { 2, s_1_0, -1, -1, 0}, +/* 1 */ { 2, s_1_1, -1, -1, 0}, +/* 2 */ { 2, s_1_2, -1, -1, 0}, +/* 3 */ { 2, s_1_3, -1, -1, 0}, +/* 4 */ { 2, s_1_4, -1, -1, 0}, +/* 5 */ { 2, s_1_5, -1, -1, 0}, +/* 6 */ { 2, s_1_6, -1, -1, 0} +}; + +static symbol s_2_0[2] = { 'i', 'g' }; +static symbol s_2_1[3] = { 'l', 'i', 'g' }; +static symbol s_2_2[3] = { 'e', 'l', 's' }; +static symbol s_2_3[5] = { 'f', 'u', 'l', 'l', 't' }; +static symbol s_2_4[5] = { 'l', 0xC3, 0xB6, 's', 't' }; + +static struct among a_2[5] = +{ +/* 0 */ { 2, s_2_0, -1, 1, 0}, +/* 1 */ { 3, s_2_1, 0, 1, 0}, +/* 2 */ { 3, s_2_2, -1, 1, 0}, +/* 3 */ { 5, s_2_3, -1, 3, 0}, +/* 4 */ { 5, s_2_4, -1, 2, 0} +}; + +static unsigned char g_v[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 32 }; + +static unsigned char g_s_ending[] = { 119, 127, 149 }; + +static symbol s_0[] = { 'l', 0xC3, 0xB6, 's' }; +static symbol s_1[] = { 'f', 'u', 'l', 'l' }; + +static int r_mark_regions(struct SN_env * z) { + z->I[0] = z->l; + { int c_test = z->c; /* test, line 29 */ + { int c = skip_utf8(z->p, z->c, 0, z->l, + 3); + if (c < 0) return 0; + z->c = c; /* hop, line 29 */ + } + z->I[1] = z->c; /* setmark x, line 29 */ + z->c = c_test; + } + while(1) { /* goto, line 30 */ + int c = z->c; + if (!(in_grouping_U(z, g_v, 97, 246))) goto lab0; + z->c = c; + break; + lab0: + z->c = c; + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) return 0; + z->c = c; /* goto, line 30 */ + } + } + while(1) { /* gopast, line 30 */ + if (!(out_grouping_U(z, g_v, 97, 246))) goto lab1; + break; + lab1: + { int c = skip_utf8(z->p, z->c, 0, z->l, 1); + if (c < 0) return 0; + z->c = c; /* gopast, line 30 */ + } + } + z->I[0] = z->c; /* setmark p1, line 30 */ + /* try, line 31 */ + if (!(z->I[0] < z->I[1])) goto lab2; + z->I[0] = z->I[1]; +lab2: + return 1; +} + +static int r_main_suffix(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 37 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 37 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 37 */ + among_var = find_among_b(z, a_0, 37); /* substring, line 37 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 37 */ + z->lb = m3; + } + switch(among_var) { + case 0: return 0; + case 1: + { int ret; + ret = slice_del(z); /* delete, line 44 */ + if (ret < 0) return ret; + } + break; + case 2: + if (!(in_grouping_b_U(z, g_s_ending, 98, 121))) return 0; + { int ret; + ret = slice_del(z); /* delete, line 46 */ + if (ret < 0) return ret; + } + break; + } + return 1; +} + +static int r_consonant_pair(struct SN_env * z) { + { int m3; /* setlimit, line 50 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 50 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + { int m = z->l - z->c; (void) m; /* and, line 52 */ + if (!(find_among_b(z, a_1, 7))) { z->lb = m3; return 0; } /* among, line 51 */ + z->c = z->l - m; + z->ket = z->c; /* [, line 52 */ + { int c = skip_utf8(z->p, z->c, z->lb, 0, -1); + if (c < 0) { z->lb = m3; return 0; } + z->c = c; /* next, line 52 */ + } + z->bra = z->c; /* ], line 52 */ + { int ret; + ret = slice_del(z); /* delete, line 52 */ + if (ret < 0) return ret; + } + } + z->lb = m3; + } + return 1; +} + +static int r_other_suffix(struct SN_env * z) { + int among_var; + { int m3; /* setlimit, line 55 */ + int m = z->l - z->c; (void) m; + if (z->c < z->I[0]) return 0; + z->c = z->I[0]; /* tomark, line 55 */ + m3 = z->lb; z->lb = z->c; + z->c = z->l - m; + z->ket = z->c; /* [, line 56 */ + among_var = find_among_b(z, a_2, 5); /* substring, line 56 */ + if (!(among_var)) { z->lb = m3; return 0; } + z->bra = z->c; /* ], line 56 */ + switch(among_var) { + case 0: { z->lb = m3; return 0; } + case 1: + { int ret; + ret = slice_del(z); /* delete, line 57 */ + if (ret < 0) return ret; + } + break; + case 2: + { int ret; + ret = slice_from_s(z, 4, s_0); /* <-, line 58 */ + if (ret < 0) return ret; + } + break; + case 3: + { int ret; + ret = slice_from_s(z, 4, s_1); /* <-, line 59 */ + if (ret < 0) return ret; + } + break; + } + z->lb = m3; + } + return 1; +} + +extern int swedish_UTF_8_stem(struct SN_env * z) { + { int c = z->c; /* do, line 66 */ + { int ret = r_mark_regions(z); + if (ret == 0) goto lab0; /* call mark_regions, line 66 */ + if (ret < 0) return ret; + } + lab0: + z->c = c; + } + z->lb = z->c; z->c = z->l; /* backwards, line 67 */ + + { int m = z->l - z->c; (void) m; /* do, line 68 */ + { int ret = r_main_suffix(z); + if (ret == 0) goto lab1; /* call main_suffix, line 68 */ + if (ret < 0) return ret; + } + lab1: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 69 */ + { int ret = r_consonant_pair(z); + if (ret == 0) goto lab2; /* call consonant_pair, line 69 */ + if (ret < 0) return ret; + } + lab2: + z->c = z->l - m; + } + { int m = z->l - z->c; (void) m; /* do, line 70 */ + { int ret = r_other_suffix(z); + if (ret == 0) goto lab3; /* call other_suffix, line 70 */ + if (ret < 0) return ret; + } + lab3: + z->c = z->l - m; + } + z->c = z->lb; + return 1; +} + +extern struct SN_env * swedish_UTF_8_create_env(void) { return SN_create_env(0, 2, 0); } + +extern void swedish_UTF_8_close_env(struct SN_env * z) { SN_close_env(z); } + diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_swedish.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_swedish.h new file mode 100644 index 0000000..1444ebb --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_swedish.h @@ -0,0 +1,16 @@ + +/* This file was generated automatically by the Snowball to ANSI C compiler */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern struct SN_env * swedish_UTF_8_create_env(void); +extern void swedish_UTF_8_close_env(struct SN_env * z); + +extern int swedish_UTF_8_stem(struct SN_env * z); + +#ifdef __cplusplus +} +#endif + diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/util/arrayinputstream.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/util/arrayinputstream.h new file mode 100644 index 0000000..8225afc --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/util/arrayinputstream.h @@ -0,0 +1,68 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2009 Isidor Zeuner +* +* 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_UTIL_ARRAYINPUTSTREAM_H +#define CLUCENE_UTIL_ARRAYINPUTSTREAM_H + +#include "CLucene/_ApiHeader.h" +#include "CLucene/util/CLStreams.h" +#include "CLucene/util/Array.h" + +CL_NS_DEF(util) + +template +class CLUCENE_CONTRIBS_EXPORT ArrayInputStream : public CL_NS(util)::CLStream { +public: + _CL_DEPRECATED(Use compressed field) ArrayInputStream(ArrayBase const* data); + int32_t read(const element*& start, int32_t min, int32_t max); + int64_t skip(int64_t ntoskip); + int64_t position(); + size_t size(); +private: + ArrayBase const* data; + int64_t current_position; +}; + +template +ArrayInputStream::ArrayInputStream(ArrayBase const* data) : +data(data), +current_position(0) { +} + +template +int32_t ArrayInputStream::read(const element*& start, int32_t min, int32_t max) { + int32_t to_read = min; + int32_t readable = data->length - current_position; + if (readable < to_read) { + to_read = readable; + } + start = data->values + current_position; + current_position += to_read; + return to_read; +} + +template +int64_t ArrayInputStream::skip(int64_t ntoskip) { + int64_t to_skip = ntoskip; + int64_t skippable = data->length - current_position; + if (skippable < to_skip) { + to_skip = skippable; + } + current_position += to_skip; + return to_skip; +} + +template +int64_t ArrayInputStream::position() { + return current_position; +} + +template +size_t ArrayInputStream::size() { + return data->length; +} +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/util/byteinputstream.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/util/byteinputstream.h new file mode 100644 index 0000000..cf749c0 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/util/byteinputstream.h @@ -0,0 +1,17 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2009 Isidor Zeuner +* +* 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_UTIL_BYTEINPUTSTREAM_H +#define CLUCENE_UTIL_BYTEINPUTSTREAM_H + +#include "arrayinputstream.h" + +CL_NS_DEF(util) + +typedef ArrayInputStream ByteInputStream; + +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/util/gzipcompressstream.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/util/gzipcompressstream.cpp new file mode 100644 index 0000000..3deaff9 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/util/gzipcompressstream.cpp @@ -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. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "gzipcompressstream.h" +#include "CLucene/util/_bufferedstream.h" +#include + +CL_NS_DEF(util) + +class GZipCompressInputStream::Internal: public CL_NS(util)::BufferedInputStreamImpl{ + z_stream_s* zstream; + InputStream* input; +protected: + int32_t fillBuffer(signed char* start, int32_t space){ + if (zstream == 0) return -1; + // make sure there is data to decompress + if (zstream->avail_in==0) { + // read data from the input stream + const signed char* inStart; + int32_t nread = input->read(inStart, 1, 0); + if (nread < 1) { + zstream->avail_in = 0; //bail... + if (deflate(zstream, Z_FINISH) != Z_STREAM_END) { + _CLTHROWA(CL_ERR_IO, "deflate should report Z_STREAM_END\n"); + } + int32_t nwritten = space - zstream->avail_out; + dealloc(); + return nwritten; + } + zstream->next_in = (Bytef*)inStart; + zstream->avail_in = nread; + } + + // make sure we can write into the buffer + zstream->avail_out = space; + zstream->next_out = (Bytef*)start; + + int r = deflate(zstream, Z_NO_FLUSH); + // inform the buffer of the number of bytes that was read + int32_t nwritten = space - zstream->avail_out; + switch (r) { + case Z_NEED_DICT: + _CLTHROWA(CL_ERR_IO, "Z_NEED_DICT while inflating stream."); + break; + case Z_DATA_ERROR: + _CLTHROWA(CL_ERR_IO, "Z_DATA_ERROR while inflating stream."); + break; + case Z_MEM_ERROR: + _CLTHROWA(CL_ERR_IO, "Z_MEM_ERROR while inflating stream."); + break; + } + return nwritten; + } +public: + void dealloc(){ + if (zstream) { + deflateEnd(zstream); + free(zstream); + zstream = 0; + } + } + void _setMinBufSize(int buf){ + this->setMinBufSize(buf); + } + Internal(InputStream* input, int level){ + if ( level < 0 || level > 9 ) + level = Z_DEFAULT_COMPRESSION; + + this->input = input; + + // initialize the z_stream + zstream = (z_stream_s*)malloc(sizeof(z_stream_s)); + zstream->zalloc = Z_NULL; + zstream->zfree = Z_NULL; + zstream->opaque = Z_NULL; + zstream->avail_in = 0; + + // initialize for writing gzip streams + int r = deflateInit(zstream, level); + if (r != Z_OK) { + dealloc(); + _CLTHROWA(CL_ERR_IO, "Error initializing GZipCompressInputStream."); + } + + // signal that we need to read into the buffer + zstream->avail_out = 1; + } + + ~Internal(){ + dealloc(); + } +}; + + +GZipCompressInputStream::GZipCompressInputStream ( InputStream* input, int level) +{ + internal = new Internal(input,level); +} +size_t GZipCompressInputStream::size(){ + return internal->size(); +} +GZipCompressInputStream::~GZipCompressInputStream () +{ + delete internal; +} +int32_t GZipCompressInputStream::read(const signed char*& start, int32_t min, int32_t max){ + return internal->read(start,min,max); +} +int64_t GZipCompressInputStream::position(){ + return internal->position(); +} +int64_t GZipCompressInputStream::reset(int64_t to){ + return internal->reset(to); +} +int64_t GZipCompressInputStream::skip(int64_t ntoskip){ + return internal->skip(ntoskip); +} +void GZipCompressInputStream::setMinBufSize(int32_t minbufsize){ + internal->_setMinBufSize(minbufsize); +} + +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/util/gzipcompressstream.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/util/gzipcompressstream.h new file mode 100644 index 0000000..b58f8cd --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/util/gzipcompressstream.h @@ -0,0 +1,34 @@ +/*------------------------------------------------------------------------------ +* 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. +------------------------------------------------------------------------------*/ +#ifndef CLUENE_UTIL_GZIPCOMPRESSSTREAM_H +#define CLUENE_UTIL_GZIPCOMPRESSSTREAM_H + +#include "CLucene/util/CLStreams.h" + +struct z_stream_s; + +CL_NS_DEF(util) + +class CLUCENE_CONTRIBS_EXPORT GZipCompressInputStream : public InputStream{ +private: + class Internal; + Internal* internal; +public: + LUCENE_STATIC_CONSTANT(int32_t, DEFAULT_BUFFER_SIZE=4096); + _CL_DEPRECATED(Use compressed field) explicit GZipCompressInputStream(InputStream* input, int level=-1); + _CL_DEPRECATED(Use compressed field) virtual ~GZipCompressInputStream(); + + int32_t read(const signed char*& start, int32_t min, int32_t max); + int64_t position(); + int64_t reset(int64_t); + int64_t skip(int64_t ntoskip); + size_t size(); + void setMinBufSize(int32_t minbufsize); +}; + +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/util/gzipinputstream.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/util/gzipinputstream.cpp new file mode 100644 index 0000000..40e32e0 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/util/gzipinputstream.cpp @@ -0,0 +1,184 @@ +/*------------------------------------------------------------------------------ +* 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. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "gzipinputstream.h" +#include "CLucene/util/_bufferedstream.h" +#include + +CL_NS_DEF(util) + + +class GZipInputStream::Internal{ +public: + class JStreamsBuffer: public BufferedInputStreamImpl{ + z_stream_s* zstream; + BufferedInputStream* input; + protected: + + int32_t fillBuffer(signed char* start, int32_t space) { + if (zstream == 0) return -1; + // make sure there is data to decompress + if (zstream->avail_out) { + // read data from the input stream + const signed char* inStart; + int32_t nread = input->read(inStart, 1, 0); + if (nread < 1) { + _CLTHROWA(CL_ERR_IO, "unexpected end of stream"); + } else { + zstream->next_in = (Bytef*)inStart; + zstream->avail_in = nread; + } + } + // make sure we can write into the buffer + zstream->avail_out = space; + zstream->next_out = (Bytef*)start; + // decompress + int r = inflate(zstream, Z_SYNC_FLUSH); + // inform the buffer of the number of bytes that was read + int32_t nwritten = space - zstream->avail_out; + switch (r) { + case Z_NEED_DICT: + _CLTHROWA(CL_ERR_IO, "Z_NEED_DICT while inflating stream."); + break; + case Z_DATA_ERROR: + _CLTHROWA(CL_ERR_IO, "Z_DATA_ERROR while inflating stream."); + break; + case Z_MEM_ERROR: + _CLTHROWA(CL_ERR_IO, "Z_MEM_ERROR while inflating stream."); + break; + case Z_STREAM_END: + if (zstream->avail_in) { + input->reset(input->position()-zstream->avail_in); + } + // we are finished decompressing, + // (but this stream is not yet finished) + dealloc(); + } + return nwritten; + } + void dealloc() { + if (zstream) { + inflateEnd(zstream); + free(zstream); + zstream = 0; + } + } + bool checkMagic() { + const unsigned char* buf; + const signed char* begin; + int32_t nread; + + int64_t pos = input->position(); + nread = input->read(begin, 2, 2); + input->reset(pos); + if (nread != 2) { + return false; + } + + buf = (const unsigned char*)begin; + return buf[0] == 0x1f && buf[1] == 0x8b; + } + + public: + int encoding; + + JStreamsBuffer(BufferedInputStream* input, GZipInputStream::ZipFormat format){ + this->input = input; + + // check first bytes of stream before allocating buffer + if (format == GZipInputStream::GZIPFORMAT && !checkMagic()) { + _CLTHROWA(CL_ERR_IO, "Magic bytes are wrong."); + } + + // initialize the z_stream + zstream = (z_stream_s*)malloc(sizeof(z_stream_s)); + zstream->zalloc = Z_NULL; + zstream->zfree = Z_NULL; + zstream->opaque = Z_NULL; + zstream->avail_in = 0; + zstream->next_in = Z_NULL; + // initialize for reading gzip streams + // for reading libz streams, you need inflateInit(zstream) + int r; + switch(format) { + case GZipInputStream::ZLIBFORMAT: + r = inflateInit(zstream); + break; + case GZipInputStream::GZIPFORMAT: + r = inflateInit2(zstream, 15+16); + break; + case GZipInputStream::ZIPFORMAT: + default: + r = inflateInit2(zstream, -MAX_WBITS); + break; + } + if (r != Z_OK) { + dealloc(); + _CLTHROWA(CL_ERR_IO, "Error initializing GZipInputStream."); + } + + // signal that we need to read into the buffer + zstream->avail_out = 1; + } + void _setMinBufSize(int32_t bufsize){ + this->setMinBufSize(bufsize); + } + + ~JStreamsBuffer(){ + dealloc(); + } + }; + + JStreamsBuffer* jsbuffer; + + Internal(BufferedInputStream* input, GZipInputStream::ZipFormat format){ + jsbuffer = new JStreamsBuffer(input, format); + } + ~Internal(){ + delete jsbuffer; + } +}; + +GZipInputStream::GZipInputStream(InputStream* input, ZipFormat format) { + internal = new Internal(_CLNEW FilteredBufferedInputStream(input, false), format); +} +GZipInputStream::GZipInputStream(BufferedInputStream* input, ZipFormat format) { + internal = new Internal(input, format); +} + +GZipInputStream::~GZipInputStream() { + delete internal; +} + + +int32_t GZipInputStream::read(const signed char*& start, int32_t min, int32_t max){ + return internal->jsbuffer->read(start,min,max); +} +int32_t GZipInputStream::read(const unsigned char*& _start, int32_t min, int32_t max){ + const signed char* start = 0; + int32_t ret = internal->jsbuffer->read(start,min,max); + _start = (const unsigned char*)start; + return ret; +} +int64_t GZipInputStream::position(){ + return internal->jsbuffer->position(); +} +int64_t GZipInputStream::reset(int64_t to){ + return internal->jsbuffer->reset(to); +} +int64_t GZipInputStream::skip(int64_t ntoskip){ + return internal->jsbuffer->skip(ntoskip); +} +void GZipInputStream::setMinBufSize(int32_t minbufsize){ + internal->jsbuffer->_setMinBufSize(minbufsize); +} +size_t GZipInputStream::size(){ + return internal->jsbuffer->size(); +} + + +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/util/gzipinputstream.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/util/gzipinputstream.h new file mode 100644 index 0000000..ae4dd49 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/util/gzipinputstream.h @@ -0,0 +1,39 @@ +/*------------------------------------------------------------------------------ +* 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. +------------------------------------------------------------------------------*/ +#ifndef CLUENE_UTIL_GZIPINPUTSTREAM_H +#define CLUENE_UTIL_GZIPINPUTSTREAM_H + +#include "CLucene/util/CLStreams.h" + +struct z_stream_s; + +CL_NS_DEF(util) + +class CLUCENE_CONTRIBS_EXPORT GZipInputStream : public CL_NS(util)::BufferedInputStream { +public: + enum ZipFormat { ZLIBFORMAT, GZIPFORMAT, ZIPFORMAT}; +private: + class Internal; + Internal* internal; +public: + _CL_DEPRECATED(Use compressed field) explicit GZipInputStream(BufferedInputStream* input, + ZipFormat format=GZIPFORMAT); + _CL_DEPRECATED(Use compressed field) explicit GZipInputStream(InputStream* input, + ZipFormat format=GZIPFORMAT); + ~GZipInputStream(); + + int32_t read(const signed char*& start, int32_t min, int32_t max); + int32_t read(const unsigned char*& start, int32_t min, int32_t max); + int64_t position(); + int64_t reset(int64_t); + int64_t skip(int64_t ntoskip); + size_t size(); + void setMinBufSize(int32_t minbufsize); +}; + +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/util/streamarray.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/util/streamarray.h new file mode 100644 index 0000000..bb1bbff --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/contribs-lib/CLucene/util/streamarray.h @@ -0,0 +1,32 @@ +/*------------------------------------------------------------------------------ +* Copyright (C) 2009 Isidor Zeuner +* +* 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_UTIL_STREAMARRAY_H +#define CLUCENE_UTIL_STREAMARRAY_H + +#include +#include "CLucene/util/CLStreams.h" +#include "CLucene/util/Array.h" + +CL_NS_DEF(util) + +template +ValueArray streamArray(CL_NS(util)::CLStream* stored) { + size_t const block_size = 4096; + element const* retrieved; + ValueArray result(0); + size_t available; + size_t offset = 0; + do { + available = stored->read(retrieved, block_size, block_size); + result.resize(result.length + sizeof(element) * available); + memcpy(result.values + offset, retrieved, sizeof(element) * available); + offset += available; + } while (block_size == available); + return result; +} +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene.h new file mode 100644 index 0000000..bea39ea --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene.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. +------------------------------------------------------------------------------*/ +//Includes some standard headers for searching and indexing. +#ifndef _lucene_CLucene_ +#define _lucene_CLucene_ + +#include "CLucene/StdHeader.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/search/TermQuery.h" +#include "CLucene/search/SearchHeader.h" +#include "CLucene/search/Similarity.h" +#include "CLucene/search/Sort.h" +#include "CLucene/search/Hits.h" +#include "CLucene/search/Explanation.h" +#include "CLucene/document/Document.h" +#include "CLucene/document/Field.h" +#include "CLucene/document/DateField.h" +#include "CLucene/document/DateTools.h" +#include "CLucene/document/NumberTools.h" +#include "CLucene/store/Directory.h" +#include "CLucene/store/FSDirectory.h" +#include "CLucene/store/RAMDirectory.h" +#include "CLucene/queryParser/QueryParser.h" +#include "CLucene/analysis/standard/StandardAnalyzer.h" +#include "CLucene/analysis/Analyzers.h" +#include "CLucene/util/BitSet.h" +#include "CLucene/util/CLStreams.h" +#include "CLucene/util/PriorityQueue.h" + +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/CLConfig.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/CLConfig.h new file mode 100644 index 0000000..228b97d --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/CLConfig.h @@ -0,0 +1,235 @@ +/*------------------------------------------------------------------------------ +* 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 +// +//disable hashmap/set usage. Just use map and set. +//this has been shown to be quicker than the hash equivalents in some impementations +#ifndef LUCENE_DISABLE_HASHING + #define LUCENE_DISABLE_HASHING +#endif +// +//////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////// +// These options can be set depending on the particular needs of +// Your application +//////////////////////////////////////////////////////////////////// +// +//define this to enable mmap support in the fsdirectory IndexInput +//EXPERIMENTAL +//#define LUCENE_FS_MMAP +// +//define to true to actually use it (not just enable it) +#ifdef LUCENE_FS_MMAP + #define LUCENE_USE_MMAP true //yes, use if it's turned on. +#else + #define LUCENE_USE_MMAP false +#endif +// +//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" +// +//////////////////////////////////////////////////////////////////// + + +//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 + +// +//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 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 +// +//////////////////////////////////////////////////////////////////// + + +//////////////////////////////////////////////////////////////////// +// 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 +// +//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 +// +//////////////////////////////////////////////////////////////////// + + +//////////////////////////////////////////////////////////////////// +// Date conversion settings for DateTools and DateField +//////////////////////////////////////////////////////////////////// +// +// DateField, which is now deprecated, had it's buffer size +// defined for 9 chars. DateTools currently is configured +// for 30 chars, but this needs to be revised after tests +// are written for those. +// +#define DATETOOLS_BUFFER_SIZE 30 +#define DATEFIELD_DATE_LEN DATETOOLS_BUFFER_SIZE +// +//////////////////////////////////////////////////////////////////// + + +//////////////////////////////////////////////////////////////////// +// FuzzyQuery settings +//////////////////////////////////////////////////////////////////// +// +// This should be somewhere around the average long word. +// If it is longer, we waste time and space. If it is shorter, we waste a +// little bit of time growing the array as we encounter longer words. +// +#define LUCENE_TYPICAL_LONGEST_WORD_IN_INDEX 19 +// +//////////////////////////////////////////////////////////////////// + + +#endif + diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/StdHeader.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/StdHeader.cpp new file mode 100644 index 0000000..90a5e32 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/StdHeader.cpp @@ -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. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "CLucene/util/Misc.h" + +#include "CLucene/search/Sort.h" +#include "CLucene/search/Similarity.h" +#include "CLucene/search/FieldCache.h" +#include "CLucene/index/TermVector.h" +#include "CLucene/index/_IndexFileNameFilter.h" +#include "CLucene/search/FieldSortedHitQueue.h" +#include "CLucene/store/LockFactory.h" +#include "CLucene/util/_StringIntern.h" +#include "CLucene/util/_ThreadLocal.h" + +#if defined(_MSC_VER) && defined(_DEBUG) + #define CRTDBG_MAP_ALLOC + #include +#endif + +CL_NS_USE(util) +CL_NS_USE(search) +CL_NS_USE(index) +CL_NS_USE(store) + +//clears all static memory. do not attempt to do anything else +//in clucene after calling this function +void _lucene_shutdown(){ + FieldSortedHitQueue::_shutdown(); + Sort::_shutdown(); + ScoreDocComparator::_shutdown(); + SortField::_shutdown(); + FieldCache::_shutdown(); + Similarity::_shutdown(); + CLStringIntern::_shutdown(); + NoLockFactory::_shutdown(); + _ThreadLocal::_shutdown(); + IndexFileNameFilter::_shutdown(); + _CLDELETE (TermVectorOffsetInfo_EMPTY_OFFSET_INFO); +} diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/StdHeader.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/StdHeader.h new file mode 100644 index 0000000..242d977 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/StdHeader.h @@ -0,0 +1,40 @@ +/*------------------------------------------------------------------------------ +* 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_stdheader_h +#define lucene_stdheader_h + +/** +* This header contains public distributed code that needs to be included *before* +* any clucene-core code is included. It also uses the clucene-shared header +* which contains platform specific code configured by cmake. +*/ + +//configurations for library +#include "CLucene/CLConfig.h" + +//shared header +#include "CLucene/SharedHeader.h" + +//error handling macros/functions +#include "CLucene/debug/error.h" + +//todo: would be good to deprecate this... it's ugly +#define StringArrayWithDeletor CL_NS(util)::CLVector +#define StringArray std::vector +#define StringArrayWithDeletor CL_NS(util)::CLVector +#define StringArrayConst std::vector +//#define StringArrayConstWithDeletor CL_NS(util)::CLVector + +#define AStringArray std::vector +#define AStringArrayWithDeletor CL_NS(util)::CLVector +#define AStringArrayConst std::vector +//#define AStringArrayConstWithDeletor CL_NS(util)::CLVector + +//call this at the end of running to clean up memory. +extern CLUCENE_EXPORT void _lucene_shutdown(); + +#endif // lucene_apiheader_h diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/_ApiHeader.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/_ApiHeader.h new file mode 100644 index 0000000..5eac7cb --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/_ApiHeader.h @@ -0,0 +1,24 @@ +/*------------------------------------------------------------------------------ +* 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_internal_apiheader_h +#define lucene_internal_apiheader_h + +/** +* This is the header that all clucene-core source code includes. +* We include the shared code header and the public StdHeader.h header. +*/ + +#include "CLucene/StdHeader.h" +#include "CLucene/_SharedHeader.h" + +//todo: this code needs to go to shared +#include "CLucene/util/_VoidMap.h" +#include "CLucene/util/_VoidList.h" + +using namespace std; + +#endif // lucene_apiheader_h diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/analysis/AnalysisHeader.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/analysis/AnalysisHeader.cpp new file mode 100644 index 0000000..927fba5 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/analysis/AnalysisHeader.cpp @@ -0,0 +1,306 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "AnalysisHeader.h" +#include "CLucene/util/StringBuffer.h" +#include "CLucene/util/_ThreadLocal.h" +#include + +CL_NS_USE(util) +CL_NS_DEF(analysis) + +struct Analyzer::Internal{ + CL_NS(util)::ThreadLocal >* tokenStreams; +}; +Analyzer::Analyzer(){ + _internal = new Internal; + _internal->tokenStreams = _CLNEW CL_NS(util)::ThreadLocal >; +} +Analyzer::~Analyzer(){ + _CLLDELETE(_internal->tokenStreams); + delete _internal; +} +TokenStream* Analyzer::getPreviousTokenStream() { + return _internal->tokenStreams->get(); +} +void Analyzer::setPreviousTokenStream(TokenStream* obj) { + _internal->tokenStreams->set(obj); +} +TokenStream* Analyzer::reusableTokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader) { + return tokenStream(fieldName, reader); +} + +///Compares the Token for their order +class OrderCompare:LUCENE_BASE, public CL_NS(util)::Compare::_base // +{ +public: + bool operator()( Token* t1, Token* t2 ) const{ + if(t1->startOffset()>t2->startOffset()) + return false; + if(t1->startOffset()startOffset()) + return true; + return true; +} +}; + +Token::Token(): + _startOffset (0), + _endOffset (0), + _type ( getDefaultType() ), + positionIncrement (1), + payload(NULL) +{ + _termTextLen = 0; +#ifndef LUCENE_TOKEN_WORD_LENGTH + _buffer = NULL; + bufferTextLen = 0; +#else + _buffer[0] = 0; //make sure null terminated + bufferTextLen = LUCENE_TOKEN_WORD_LENGTH+1; +#endif +} + +Token::~Token(){ +#ifndef LUCENE_TOKEN_WORD_LENGTH + free(_buffer); +#endif + _CLLDELETE(payload); +} + +Token::Token(const TCHAR* text, const int32_t start, const int32_t end, const TCHAR* typ): + _startOffset (start), + _endOffset (end), + _type ( (typ==NULL?getDefaultType():typ) ), + positionIncrement (1), + payload(NULL) +{ + _termTextLen = 0; +#ifndef LUCENE_TOKEN_WORD_LENGTH + _buffer = NULL; + bufferTextLen = 0; +#else + _buffer[0] = 0; //make sure null terminated + bufferTextLen = LUCENE_TOKEN_WORD_LENGTH+1; +#endif + setText(text, -1); +} + +size_t Token::bufferLength(){ + return bufferTextLen; +} + + +int32_t Token::startOffset() const { + return _startOffset; +} + +void Token::setStartOffset(const int32_t val){ + _startOffset = val; +} +int32_t Token::endOffset() const { + return _endOffset; +} +const TCHAR* Token::getDefaultType(){ + return _T("word"); +} + +void Token::setEndOffset(const int32_t val){ + _endOffset = val; +} +const TCHAR* Token::type() const { return _type; } + +void Token::setType(const TCHAR* val) { + _type = val; +} + +void Token::set(const TCHAR* text, const int32_t start, const int32_t end, const TCHAR* typ){ + _startOffset = start; + _endOffset = end; + _type = (typ==NULL?getDefaultType():typ); + positionIncrement = 1; + setText(text); +} + +void Token::setText(const TCHAR* text, int32_t l){ + if ( l < 0 ) l = _tcslen(text); +#ifndef LUCENE_TOKEN_WORD_LENGTH + if(bufferTextLen < l+1) + growBuffer(l+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. + l=LUCENE_TOKEN_WORD_LENGTH; + } +#endif + _tcsncpy(_buffer,text,l); + _termTextLen = l; + _buffer[_termTextLen] = 0; //make sure null terminated +} + +void Token::setTermLength(int32_t len){ + if(bufferTextLengrowBuffer(len); + this->_termTextLen = len; +} +TCHAR* Token::resizeTermBuffer(size_t size){ + if(bufferTextLen_buffer; +} +void Token::growBuffer(size_t size){ + if(bufferTextLen>=size) + return; +#ifndef LUCENE_TOKEN_WORD_LENGTH + if ( _buffer == NULL ){ + _buffer = (TCHAR*)malloc( size * sizeof(TCHAR) ); + *_buffer = 0; + }else{ + //use realloc. growBuffer is public, therefore could be called + //without a subsequent call to overwriting the memory + _buffer = (TCHAR*)realloc( _buffer, 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; } + +const TCHAR* Token::termText() const{ + return (const TCHAR*) _buffer; +} +TCHAR* Token::termBuffer() const{ + return _buffer; +} +size_t Token::termTextLength() { + if ( _termTextLen == -1 ) //it was invalidated by growBuffer + _termTextLen = _tcslen(_buffer); + return _termTextLen; +} +size_t Token::termLength() { + if ( _termTextLen == -1 ) //it was invalidated by growBuffer + _termTextLen = _tcslen(_buffer); + return _termTextLen; +} +void Token::resetTermTextLen(){ + _termTextLen=-1; +} +TCHAR* Token::toString() const{ + StringBuffer sb; + sb.append(_T("(")); + if (_buffer) + sb.append( _buffer ); + else + sb.append( _T("null") ); + 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(); +} + +CL_NS(index)::Payload* Token::getPayload() { return this->payload; } +void Token::setPayload(CL_NS(index)::Payload* payload) { + _CLLDELETE(this->payload); + this->payload = payload; +} +void Token::clear() { + _CLDELETE(payload); + // Leave _buffer to allow re-use + _termTextLen = 0; + positionIncrement = 1; + // startOffset = endOffset = 0; + // type = DEFAULT_TYPE; +} + +void TokenStream::reset(){ +} + +Token* TokenStream::next(){ + Token* t = _CLNEW Token; //deprecated + if ( !next(t) ) + _CLDELETE(t); + return t; +} +TokenStream::~TokenStream(){ +} + +TokenFilter::TokenFilter(TokenStream* in, bool deleteTS): + input(in), + deleteTokenStream(deleteTS) +{ +} +TokenFilter::~TokenFilter(){ + if ( deleteTokenStream && input!=NULL ) {input->close();_CLLDELETE( input );} + //close(); -- ISH 04/11/09 +} + +// Close the input TokenStream. +void TokenFilter::close() { + if ( input != NULL ){ + input->close(); + //if ( deleteTokenStream ) _CLDELETE( input ); -- ISH 04/11/09 + } + //input = NULL; -- ISH 04/11/09 +} + + + +Tokenizer::Tokenizer() : input(NULL) +{ +} + +Tokenizer::Tokenizer(CL_NS(util)::Reader* _input): + input(_input) +{ +} + +void Tokenizer::close(){ + if (input != NULL) { + // ? delete input; + input = NULL; + } +} + +void Tokenizer::reset(CL_NS(util)::Reader* _input) { + // ? delete input; + this->input = _input; +} + +Tokenizer::~Tokenizer(){ + close(); +} + + +int32_t Analyzer::getPositionIncrementGap(const TCHAR* /*fieldName*/) +{ + return 0; +} + +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/analysis/AnalysisHeader.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/analysis/AnalysisHeader.h new file mode 100644 index 0000000..f79d8bf --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/analysis/AnalysisHeader.h @@ -0,0 +1,361 @@ +/*------------------------------------------------------------------------------ +* 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_ + +#include "CLucene/index/Payload.h" +#include "CLucene/util/VoidList.h" +#include "CLucene/LuceneThreads.h" + +CL_CLASS_DEF(util,Reader) +CL_NS_DEF(analysis) + +typedef CL_NS(util)::CLSetList CLTCSetList; + +/** 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". +

+ A Token can optionally have metadata (a.k.a. Payload) in the form of a variable + length byte array. Use {@link lucene::index::TermPositions#getPayloadLength()} and + {@link lucene::index::TermPositions#getPayload(byte[], int)} to retrieve the payloads from the index. + +

+

+ WARNING: The status of the Payloads feature is experimental. + The APIs introduced here might change in the future and will not be + supported anymore in such a case. + +

+ +

Tokenizers and filters should try to re-use a Token + instance when possible for best performance, by + implementing the {@link lucene::index::TokenStream#next(Token)} API. + Failing that, to create a new Token you should first use + one of the constructors that starts with null text. Then + you should call either {@link #termBuffer()} or {@link + #resizeTermBuffer(int)} to retrieve the Token's + termBuffer. Fill in the characters of your term into this + buffer, and finally call {@link #setTermLength(int)} to + set the length of the term text. See LUCENE-969 + for details.

+ + @see Payload +*/ +class CLUCENE_EXPORT 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; + + #ifndef LUCENE_TOKEN_WORD_LENGTH + TCHAR* _buffer; ///< the text of the term + #else + TCHAR _buffer[LUCENE_TOKEN_WORD_LENGTH+1]; ///< the text of the term + #endif + int32_t _termTextLen; ///< the length of termText. Internal use only + + CL_NS(index)::Payload* payload; + +public: + static const TCHAR* getDefaultType(); + + Token(); + virtual ~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=NULL); + void set(const TCHAR* text, const int32_t start, const int32_t end, const TCHAR* typ=NULL); + + size_t bufferLength(); + void growBuffer(size_t size); + TCHAR* resizeTermBuffer(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; + + /** Returns the internal termBuffer character array which + * you can then directly alter. If the array is too + * small for your token, use {@link + * #resizeTermBuffer(int)} to increase it. After + * altering the buffer be sure to call {@link + * #setTermLength} to record the number of valid + * characters that were placed into the termBuffer. */ + TCHAR* termBuffer() const; + size_t termLength(); //< Length of the the termBuffer. See #termBuffer + + _CL_DEPRECATED( termBuffer ) const TCHAR* termText() const; //< See #termBuffer() + _CL_DEPRECATED( termLength ) size_t termTextLength(); //< See #termLength + + void resetTermTextLen(); //< Empties the termBuffer. See #termBuffer + void setText(const TCHAR* txt, int32_t len=-1); //< Sets the termBuffer. See #termBuffer + + /** + * 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; + + /** Set the starting offset. + @see #startOffset() */ + void setStartOffset(const int32_t val); + + void setTermLength(int32_t); + + /** + * 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; + + /** Set the ending offset. + @see #endOffset() */ + void setEndOffset(const int32_t val); + + /// Returns this Token's lexical type. Defaults to "word". + const TCHAR* type() const; /// +This is an abstract class. Concrete subclasses are: +
    +
  • {@link Tokenizer}, a TokenStream +whose input is a Reader; and +
  • {@link TokenFilter}, a TokenStream +whose input is another TokenStream. +
+NOTE: subclasses must override at least one of {@link +#next()} or {@link #next(Token)}. +*/ +class CLUCENE_EXPORT TokenStream { +public: + /** Returns the next token in the stream, or null at EOS. + * When possible, the input Token should be used as the + * returned Token (this gives fastest tokenization + * performance), but this is not required and a new Token + * may be returned (pass NULL for this). + * Callers may re-use a single Token instance for successive + * calls to this method. + *

+ * This implicitly defines a "contract" between + * consumers (callers of this method) and + * producers (implementations of this method + * that are the source for tokens): + *

    + *
  • A consumer must fully consume the previously + * returned Token before calling this method again.
  • + *
  • A producer must call {@link Token#clear()} + * before setting the fields in it & returning it
  • + *
+ * Note that a {@link TokenFilter} is considered a consumer. + * @param result a Token that may or may not be used to return + * @return next token in the stream or null if end-of-stream was hit + */ + virtual Token* next(Token* token) = 0; + + /** 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(); + + /** Releases resources associated with this stream. */ + virtual void close() = 0; + + /** Resets this stream to the beginning. This is an + * optional operation, so subclasses may or may not + * implement this method. Reset() is not needed for + * the standard indexing process. However, if the Tokens + * of a TokenStream are intended to be consumed more than + * once, it is necessary to implement reset(). + */ + virtual void reset(); + + virtual ~TokenStream(); +}; + + +/** An Analyzer builds TokenStreams, which analyze text. It thus represents a + * policy for extracting index terms from text. + *

+ * 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. + *

+ * WARNING: You must override one of the methods defined by this class in your + * subclass or the Analyzer will enter an infinite loop. + */ +class CLUCENE_EXPORT Analyzer{ +public: + Analyzer(); + + /** 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; + + /** Creates a TokenStream that is allowed to be re-used + * from the previous time that the same thread called + * this method. Callers that do not need to use more + * than one TokenStream at the same time from this + * analyzer should use this method for better + * performance. + */ + virtual TokenStream* reusableTokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader); +private: + + DEFINE_MUTEX(THIS_LOCK) + struct Internal; + Internal* _internal; +protected: + + /** Used by Analyzers that implement reusableTokenStream + * to retrieve previously saved TokenStreams for re-use + * by the same thread. */ + TokenStream* getPreviousTokenStream(); + + /** Used by Analyzers that implement reusableTokenStream + * to save a TokenStream for later re-use by the same + * thread. */ + void setPreviousTokenStream(TokenStream* obj); +public: + /** + * 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); + + virtual ~Analyzer(); +}; + + +/** A Tokenizer is a TokenStream whose input is a Reader. +

+This is an abstract class. +

+NOTE: subclasses must override at least one of {@link +#next()} or {@link #next(Token)}. +

+NOTE: subclasses overriding {@link #next(Token)} must +call {@link Token#clear()}. +*/ +class CLUCENE_EXPORT 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(); + + /** Expert: Reset the tokenizer to a new reader. Typically, an + * analyzer (in its reusableTokenStream method) will use + * this to re-use a previously created tokenizer. */ + virtual void reset(CL_NS(util)::Reader* _input); + + virtual ~Tokenizer(); +}; + +/** A TokenFilter is a TokenStream whose input is another token stream. +

+This is an abstract class. +*/ +class CLUCENE_EXPORT 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/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/analysis/Analyzers.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/analysis/Analyzers.cpp new file mode 100644 index 0000000..fd41a3f --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/analysis/Analyzers.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. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "Analyzers.h" +#include "CLucene/util/StringBuffer.h" +#include "CLucene/util/Misc.h" +#include + +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; +} +CharTokenizer::~CharTokenizer(){ +} + +TCHAR CharTokenizer::normalize(const TCHAR c) const +{ + return c; +} +Token* CharTokenizer::next(Token* token){ + int32_t length = 0; + int32_t start = offset; + while (true) { + TCHAR c; + offset++; + if (bufferIndex >= dataLen) { + dataLen = input->read(ioBuffer, 1, LUCENE_IO_BUFFER_SIZE ); + if (dataLen == -1) + dataLen = 0; + bufferIndex = 0; + } + if (dataLen <= 0 ) { + if (length > 0) + break; + else + return NULL; + }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 token; +} +void CharTokenizer::reset(CL_NS(util)::Reader* input) +{ + Tokenizer::reset(input); + bufferIndex = 0; + offset = 0; + dataLen = 0; +} + + +LetterTokenizer::LetterTokenizer(CL_NS(util)::Reader* in): + CharTokenizer(in) { +} + +LetterTokenizer::~LetterTokenizer(){} + +bool LetterTokenizer::isTokenChar(const TCHAR c) const { + return _istalpha(c)!=0; +} + +LowerCaseTokenizer::LowerCaseTokenizer(CL_NS(util)::Reader* in): + LetterTokenizer(in) { +} + +LowerCaseTokenizer::~LowerCaseTokenizer(){ +} + +TCHAR LowerCaseTokenizer::normalize(const TCHAR chr) const { + return _totlower(chr); +} + +WhitespaceTokenizer::WhitespaceTokenizer(CL_NS(util)::Reader* in):CharTokenizer(in) { +} +WhitespaceTokenizer::~WhitespaceTokenizer(){ +} + +bool WhitespaceTokenizer::isTokenChar(const TCHAR c) const{ + return _istspace(c)==0; //(return true if NOT a space) +} + +WhitespaceAnalyzer::WhitespaceAnalyzer(){ +} +WhitespaceAnalyzer::~WhitespaceAnalyzer(){ +} + +TokenStream* WhitespaceAnalyzer::tokenStream(const TCHAR* /*fieldName*/, Reader* reader) { + return _CLNEW WhitespaceTokenizer(reader); +} +TokenStream* WhitespaceAnalyzer::reusableTokenStream(const TCHAR* /*fieldName*/, CL_NS(util)::Reader* reader) +{ + Tokenizer* tokenizer = static_cast(getPreviousTokenStream()); + if (tokenizer == NULL) { + tokenizer = _CLNEW WhitespaceTokenizer(reader); + setPreviousTokenStream(tokenizer); + } else + tokenizer->reset(reader); + return tokenizer; +} + +SimpleAnalyzer::SimpleAnalyzer(){ +} +SimpleAnalyzer::~SimpleAnalyzer(){ +} +TokenStream* SimpleAnalyzer::tokenStream(const TCHAR* /*fieldName*/, Reader* reader) { + return _CLNEW LowerCaseTokenizer(reader); +} +TokenStream* SimpleAnalyzer::reusableTokenStream(const TCHAR* /*fieldName*/, CL_NS(util)::Reader* reader) { + Tokenizer* tokenizer = static_cast(getPreviousTokenStream()); + if (tokenizer == NULL) { + tokenizer = _CLNEW LowerCaseTokenizer(reader); + setPreviousTokenStream(tokenizer); + } else + tokenizer->reset(reader); + return tokenizer; +} + + +LowerCaseFilter::LowerCaseFilter(TokenStream* in, bool deleteTokenStream): + TokenFilter(in,deleteTokenStream) { +} +LowerCaseFilter::~LowerCaseFilter(){ +} + +Token* LowerCaseFilter::next(Token* t){ + if (input->next(t) == NULL) + return NULL; + stringCaseFold( t->termBuffer() ); + return t; +} + +bool StopFilter::ENABLE_POSITION_INCREMENTS_DEFAULT = false; + + +/** Constructs a filter which removes words from the input +* TokenStream that are named in the CLSetList. +*/ +StopFilter::StopFilter(TokenStream* in, bool deleteTokenStream, CLTCSetList* stopTable, bool _deleteStopTable): + TokenFilter(in, deleteTokenStream), + stopWords (stopTable), + deleteStopTable(_deleteStopTable), + enablePositionIncrements(ENABLE_POSITION_INCREMENTS_DEFAULT), + ignoreCase(false) +{ +} + +StopFilter::StopFilter(TokenStream* in, bool deleteTokenStream, const TCHAR** _stopWords, const bool _ignoreCase): + TokenFilter(in, deleteTokenStream), + enablePositionIncrements(ENABLE_POSITION_INCREMENTS_DEFAULT), + ignoreCase(_ignoreCase) +{ + deleteStopTable = true; + stopWords = _CLNEW CLTCSetList(true); + fillStopTable( stopWords,_stopWords, _ignoreCase ); +} + +StopFilter::~StopFilter(){ + if (deleteStopTable) + _CLLDELETE(stopWords); +} +//static +bool StopFilter::getEnablePositionIncrementsDefault() { + return ENABLE_POSITION_INCREMENTS_DEFAULT; +} +//static +void StopFilter::setEnablePositionIncrementsDefault(const bool defaultValue) { + ENABLE_POSITION_INCREMENTS_DEFAULT = defaultValue; +} + +bool StopFilter::getEnablePositionIncrements() const { return enablePositionIncrements; } +void StopFilter::setEnablePositionIncrements(const bool enable) { this->enablePositionIncrements = enable; } + +void StopFilter::fillStopTable(CLTCSetList* stopTable, const TCHAR** stopWords, const bool _ignoreCase) +{ + TCHAR* tmp; + if ( _ignoreCase ){ + for (int32_t i = 0; stopWords[i]!=NULL; i++){ + tmp = STRDUP_TtoT(stopWords[i]); + stringCaseFold(tmp); + stopTable->insert( tmp ); + } + }else{ + for (int32_t i = 0; stopWords[i]!=NULL; i++){ + tmp = STRDUP_TtoT(stopWords[i]); + stopTable->insert( tmp ); + } + } +} + +Token* StopFilter::next(Token* token) { + // return the first non-stop word found + int32_t skippedPositions = 0; + while (input->next(token)){ + TCHAR* termText = token->termBuffer(); + if ( ignoreCase ){ + stringCaseFold(termText); + } + if (stopWords->find(termText)==stopWords->end()){ + if (enablePositionIncrements) { + token->setPositionIncrement(token->getPositionIncrement() + skippedPositions); + } + return token; + } + skippedPositions += token->getPositionIncrement(); + } + + // reached EOS -- return nothing + return NULL; +} + +StopAnalyzer::StopAnalyzer(const char* stopwordsFile, const char* enc): + stopTable(_CLNEW CLTCSetList(true)) +{ + if ( enc == NULL ) + enc = "ASCII"; + WordlistLoader::getWordSet(stopwordsFile, enc, stopTable); +} + +StopAnalyzer::StopAnalyzer(CL_NS(util)::Reader* stopwordsReader, const bool _bDeleteReader): + stopTable(_CLNEW CLTCSetList(true)) +{ + WordlistLoader::getWordSet(stopwordsReader, stopTable, _bDeleteReader); +} + +StopAnalyzer::StopAnalyzer(): + stopTable(_CLNEW CLTCSetList(true)) +{ + StopFilter::fillStopTable(stopTable,ENGLISH_STOP_WORDS); +} +class StopAnalyzer::SavedStreams : public TokenStream { +public: + Tokenizer* source; + TokenStream* result; + + SavedStreams():source(NULL), result(NULL) {} + + void close(){} + Token* next(Token* token) {return NULL;} +}; +StopAnalyzer::~StopAnalyzer() +{ + SavedStreams* t = reinterpret_cast(this->getPreviousTokenStream()); + if (t) _CLDELETE(t->result); + _CLDELETE(stopTable); +} +StopAnalyzer::StopAnalyzer( const TCHAR** stopWords): + stopTable(_CLNEW CLTCSetList(true)) +{ + StopFilter::fillStopTable(stopTable,stopWords); +} +TokenStream* StopAnalyzer::tokenStream(const TCHAR* /*fieldName*/, Reader* reader) { + return _CLNEW StopFilter(_CLNEW LowerCaseTokenizer(reader),true, stopTable); +} + +/** Filters LowerCaseTokenizer with StopFilter. */ +TokenStream* StopAnalyzer::reusableTokenStream(const TCHAR* fieldName, Reader* reader) { + SavedStreams* streams = reinterpret_cast(getPreviousTokenStream()); + if (streams == NULL) { + streams = _CLNEW SavedStreams(); + streams->source = _CLNEW LowerCaseTokenizer(reader); + streams->result = _CLNEW StopFilter(streams->source, true, stopTable); + setPreviousTokenStream(streams); + } else + streams->source->reset(reader); + return streams->result; +} + +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("such"), + _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(_CLNEW AnalyzerMapType(true,true)) +{ + this->defaultAnalyzer = defaultAnalyzer; +} +PerFieldAnalyzerWrapper::~PerFieldAnalyzerWrapper(){ + analyzerMap->clear(); + _CLLDELETE(analyzerMap); + _CLLDELETE(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 = analyzerMap->get(const_cast(fieldName)); + if (analyzer == NULL) { + analyzer = defaultAnalyzer; + } + + return analyzer->tokenStream(fieldName, reader); +} + +TokenStream* PerFieldAnalyzerWrapper::reusableTokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader) { + Analyzer* analyzer = analyzerMap->get(const_cast(fieldName)); + if (analyzer == NULL){ + analyzer = defaultAnalyzer; + } + + return analyzer->reusableTokenStream(fieldName, reader); +} + +int32_t PerFieldAnalyzerWrapper::getPositionIncrementGap(const TCHAR* fieldName) { + Analyzer* analyzer = analyzerMap->get(const_cast(fieldName)); + if (analyzer == NULL) + analyzer = defaultAnalyzer; + return analyzer->getPositionIncrementGap(fieldName); +} + + + +ISOLatin1AccentFilter::ISOLatin1AccentFilter(TokenStream* input, bool deleteTs): + TokenFilter(input,deleteTs) +{ +} +ISOLatin1AccentFilter::~ISOLatin1AccentFilter(){ +} +Token* ISOLatin1AccentFilter::next(Token* token){ + if ( input->next(token) != NULL ){ + int32_t l = token->termLength(); + const TCHAR* chars = token->termBuffer(); + 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 token; + } + + 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 token; + } + return NULL; +} + + +KeywordAnalyzer::KeywordAnalyzer(){} +KeywordAnalyzer::~KeywordAnalyzer(){} +TokenStream* KeywordAnalyzer::tokenStream(const TCHAR* /*fieldName*/, CL_NS(util)::Reader* reader){ + return _CLNEW KeywordTokenizer(reader); +} +TokenStream* KeywordAnalyzer::reusableTokenStream(const TCHAR* /*fieldName*/, CL_NS(util)::Reader* reader) +{ + Tokenizer* tokenizer = static_cast(getPreviousTokenStream()); + if (tokenizer == NULL) { + tokenizer = _CLNEW KeywordTokenizer(reader); + setPreviousTokenStream(tokenizer); + } else + tokenizer->reset(reader); + return tokenizer; +} + +KeywordTokenizer::KeywordTokenizer(CL_NS(util)::Reader* input, int bufferSize): + Tokenizer(input) +{ + this->done = false; + this->bufferSize = bufferSize; + if ( bufferSize < 1 ) + this->bufferSize = DEFAULT_BUFFER_SIZE; +} +KeywordTokenizer::~KeywordTokenizer(){ +} + +Token* KeywordTokenizer::next(Token* token){ + if (!done) { + done = true; + int32_t upto = 0; + int32_t rd; + + token->clear(); + TCHAR* termBuffer=token->termBuffer(); + const TCHAR* readBuffer=NULL; + + while (true) { + rd = input->read(readBuffer, 1, cl_min(bufferSize, token->bufferLength()-upto) ); + if (rd == -1) + break; + if ( upto == token->bufferLength() ){ + termBuffer = token->resizeTermBuffer(token->bufferLength() + 8); + } + _tcsncpy(termBuffer + upto, readBuffer, rd); + upto += rd; + } + if ( token->bufferLength() < upto + 1 ){ + termBuffer=token->resizeTermBuffer(token->bufferLength() + 8); + } + termBuffer[upto]=0; + token->setTermLength(upto); + return token; + } + return NULL; +} +void KeywordTokenizer::reset(CL_NS(util)::Reader* input) +{ + Tokenizer::reset(input); + this->done = false; +} + + +LengthFilter::LengthFilter(TokenStream* in, const size_t _min, const size_t _max): + TokenFilter(in) +{ + this->_min = _min; + this->_max = _max; +} + +Token* LengthFilter::next(Token* token) +{ + // return the first non-stop word found + while ( input->next(token) ) + { + size_t len = token->termLength(); + if (len >= _min && len <= _max) + return token; + // note: else we ignore it but should we index each part of it? + } + // reached EOS -- return null + return NULL; +} + + +CLTCSetList* WordlistLoader::getWordSet(const char* wordfilePath, const char* enc, CLTCSetList* stopTable) +{ + if ( enc == NULL ) + enc = "ASCII"; + CL_NS(util)::FileReader* reader = NULL; + try { + reader = _CLNEW CL_NS(util)::FileReader(wordfilePath, enc, LUCENE_DEFAULT_TOKEN_BUFFER_SIZE); + stopTable = getWordSet(reader, stopTable); + } + _CLFINALLY ( + if (reader != NULL) { + //reader->close(); + _CLLDELETE(reader); + } + ); + return stopTable; +} + +//static +CLTCSetList* WordlistLoader::getWordSet(CL_NS(util)::Reader* reader, CLTCSetList* stopTable, const bool bDeleteReader) +{ + if (!stopTable) + stopTable = _CLNEW CLTCSetList(true); + + TCHAR* word = NULL; + try { + word = _CL_NEWARRAY(TCHAR, LUCENE_DEFAULT_TOKEN_BUFFER_SIZE); + while (reader->readLine(word, LUCENE_DEFAULT_TOKEN_BUFFER_SIZE) > 0) { + stopTable->insert( STRDUP_TtoT(CL_NS(util)::Misc::wordTrim(word))); + } + } + _CLFINALLY ( + if (bDeleteReader && reader != NULL) { + //reader->close(); + _CLDELETE(reader); + } + _CLDELETE_ARRAY(word); + ); + return stopTable; +} + + +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/analysis/Analyzers.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/analysis/Analyzers.h new file mode 100644 index 0000000..195324c --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/analysis/Analyzers.h @@ -0,0 +1,394 @@ +/*------------------------------------------------------------------------------ +* 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_ + +#include "CLucene/util/VoidList.h" +#include "CLucene/util/VoidMap.h" +#include "CLucene/util/CLStreams.h" +#include "AnalysisHeader.h" + +CL_NS_DEF(analysis) + +/** An abstract base class for simple, character-oriented tokenizers.*/ +class CLUCENE_EXPORT 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); + Token* next(Token* token); + void reset(CL_NS(util)::Reader* input); + + virtual ~CharTokenizer(); +}; + + +/** 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 CLUCENE_EXPORT LetterTokenizer:public CharTokenizer { +public: + // Construct a new LetterTokenizer. + LetterTokenizer(CL_NS(util)::Reader* in); + virtual ~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. +*

+* 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 CLUCENE_EXPORT LowerCaseTokenizer:public LetterTokenizer { +public: + /** Construct a new LowerCaseTokenizer. */ + LowerCaseTokenizer(CL_NS(util)::Reader* in); + virtual ~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 CLUCENE_EXPORT WhitespaceTokenizer: public CharTokenizer { +public: + /** Construct a new WhitespaceTokenizer. */ + WhitespaceTokenizer(CL_NS(util)::Reader* in); + virtual ~WhitespaceTokenizer(); +protected: + /** Collects only characters which do not satisfy _istspace.*/ + bool isTokenChar(const TCHAR c) const; +}; + + +/** An Analyzer that uses WhitespaceTokenizer. */ +class CLUCENE_EXPORT WhitespaceAnalyzer: public Analyzer { +public: + WhitespaceAnalyzer(); + TokenStream* tokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader); + TokenStream* reusableTokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader); + virtual ~WhitespaceAnalyzer(); +}; + +/** An Analyzer that filters LetterTokenizer with LowerCaseFilter. */ +class CLUCENE_EXPORT SimpleAnalyzer: public Analyzer { +public: + SimpleAnalyzer(); + TokenStream* tokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader); + TokenStream* reusableTokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader); + + virtual ~SimpleAnalyzer(); +}; + + + +/** +* Normalizes token text to lower case. +*/ +class CLUCENE_EXPORT LowerCaseFilter: public TokenFilter { +public: + LowerCaseFilter(TokenStream* in, bool deleteTokenStream); + virtual ~LowerCaseFilter(); + Token* next(Token* token); +}; + + +/** + * Removes stop words from a token stream. + */ +class CLUCENE_EXPORT 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. + //ish: implement a radix/patricia tree for this? + CLTCSetList* stopWords; + bool deleteStopTable; + + bool enablePositionIncrements; + const bool ignoreCase; +public: + static bool ENABLE_POSITION_INCREMENTS_DEFAULT; + + // 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, const bool _ignoreCase = false); + + virtual ~StopFilter(); + + /** Constructs a filter which removes words from the input + * TokenStream that are named in the CLSetList. + */ + StopFilter(TokenStream* in, bool deleteTokenStream, CLTCSetList* stopTable, bool _deleteStopTable=false); + + /** + * 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(CLTCSetList* stopTable, + const TCHAR** stopWords, const bool _ignoreCase = false); + + /** + * Returns the next input Token whose termText() is not a stop word. + */ + Token* next(Token* token); + + + /** + * @see #setEnablePositionIncrementsDefault(boolean). + */ + static bool getEnablePositionIncrementsDefault(); + + /** + * Set the default position increments behavior of every StopFilter created from now on. + *

+ * Note: behavior of a single StopFilter instance can be modified + * with {@link #setEnablePositionIncrements(boolean)}. + * This static method allows control over behavior of classes using StopFilters internally, + * for example {@link lucene::analysis::standard::StandardAnalyzer StandardAnalyzer}. + *

+ * Default : false. + * @see #setEnablePositionIncrements(boolean). + */ + static void setEnablePositionIncrementsDefault(const bool defaultValue); + + /** + * @see #setEnablePositionIncrements(boolean). + */ + bool getEnablePositionIncrements() const; + + /** + * Set to true to make this StopFilter enable position increments to result tokens. + *

+ * When set, when a token is stopped (omitted), the position increment of + * the following token is incremented. + *

+ * Default: see {@link #setEnablePositionIncrementsDefault(boolean)}. + */ + void setEnablePositionIncrements(const bool enable); + +}; + +/** + * Loader for text files that represent a list of stopwords. + * + */ +class CLUCENE_EXPORT WordlistLoader { +public: + /** + * Loads a text file and adds every line as an entry to a HashSet (omitting + * leading and trailing whitespace). Every line of the file should contain only + * one word. The words need to be in lowercase if you make use of an + * Analyzer which uses LowerCaseFilter (like StandardAnalyzer). + * + * @param wordfile File containing the wordlist + * @return A HashSet with the file's words + */ + static CLTCSetList* getWordSet(const char* wordfilePath, const char* enc = NULL, CLTCSetList* stopTable = NULL); + + /** + * Reads lines from a Reader and adds every line as an entry to a HashSet (omitting + * leading and trailing whitespace). Every line of the Reader should contain only + * one word. The words need to be in lowercase if you make use of an + * Analyzer which uses LowerCaseFilter (like StandardAnalyzer). + * + * @param reader Reader containing the wordlist + * @return A HashSet with the reader's words + */ + static CLTCSetList* getWordSet(CL_NS(util)::Reader* reader, CLTCSetList* stopTable = NULL, const bool bDeleteReader = false); +}; + + +/** Filters LetterTokenizer with LowerCaseFilter and StopFilter. */ +class CLUCENE_EXPORT StopAnalyzer: public Analyzer { + CLTCSetList* stopTable; + class SavedStreams; + +public: + /** Builds an analyzer which removes words in ENGLISH_STOP_WORDS. */ + StopAnalyzer(); + virtual ~StopAnalyzer(); + + /** Builds an analyzer which removes words in the provided array. */ + StopAnalyzer( const TCHAR** stopWords ); + + /** Builds an analyzer with the stop words from the given file. + * @see WordlistLoader#getWordSet(File) + */ + StopAnalyzer(const char* stopwordsFile, const char* enc = NULL); + + /** Builds an analyzer with the stop words from the given reader. + * @see WordlistLoader#getWordSet(Reader) + */ + StopAnalyzer(CL_NS(util)::Reader* stopwordsReader, const bool _bDeleteReader = false); + + /** Filters LowerCaseTokenizer with StopFilter. */ + TokenStream* tokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader); + TokenStream* reusableTokenStream(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. + * + *

Example usage: + * + *

+ *   PerFieldAnalyzerWrapper* aWrapper =
+ *      new PerFieldAnalyzerWrapper(new StandardAnalyzer());
+ *   aWrapper.addAnalyzer("firstname", new KeywordAnalyzer());
+ *   aWrapper.addAnalyzer("lastname", new KeywordAnalyzer());
+ * 
+ * + *

In this example, StandardAnalyzer will be used for all fields except "firstname" + * and "lastname", for which KeywordAnalyzer will be used. + * + *

A PerFieldAnalyzerWrapper can be used like any other analyzer, for both indexing + * and query parsing. + */ +class CLUCENE_EXPORT PerFieldAnalyzerWrapper : public Analyzer { +private: + Analyzer* defaultAnalyzer; + + typedef CL_NS(util)::CLHashMap > AnalyzerMapType; + AnalyzerMapType* 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); + virtual ~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); + + TokenStream* reusableTokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader); + + /** Return the positionIncrementGap from the analyzer assigned to fieldName */ + int32_t getPositionIncrementGap(const TCHAR* fieldName); +}; + + +/** + * 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. + *

+ * For instance, 'à' will be replaced by 'a'. + *

+ */ +class CLUCENE_EXPORT ISOLatin1AccentFilter: public TokenFilter { +public: + ISOLatin1AccentFilter(TokenStream* input, bool deleteTs); + + /** + * To replace accented characters in a String by unaccented equivalents. + */ + Token* next(Token* token); + virtual ~ISOLatin1AccentFilter(); +}; + + +/** + * Emits the entire input as a single token. + */ +class CLUCENE_EXPORT 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); + Token* next(Token* token); + void reset(CL_NS(util)::Reader* input); + + virtual ~KeywordTokenizer(); +}; + +/** + * "Tokenizes" the entire stream as a single token. This is useful + * for data like zip codes, ids, and some product names. + */ +class CLUCENE_EXPORT KeywordAnalyzer: public Analyzer { +public: + KeywordAnalyzer(); + virtual ~KeywordAnalyzer(); + TokenStream* tokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader); + TokenStream* reusableTokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader); +}; + + +/** + * Removes words that are too long and too short from the stream. + * + */ +class CLUCENE_EXPORT LengthFilter: public TokenFilter { +private: + size_t _min; + size_t _max; +public: + /** + * Build a filter that removes words that are too long or too + * short from the text. + */ + LengthFilter(TokenStream* in, const size_t _min, const size_t _max); + + /** + * Returns the next input Token whose termText() is the right len + */ + Token* next(Token* token); +}; + + +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/analysis/CachingTokenFilter.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/analysis/CachingTokenFilter.cpp new file mode 100644 index 0000000..0591f44 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/analysis/CachingTokenFilter.cpp @@ -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. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "CachingTokenFilter.h" + +CL_NS_DEF(analysis) + +CachingTokenFilter::CachingTokenFilter( TokenStream * input, bool bDeleteTS ) +: TokenFilter( input, bDeleteTS ) +{ + bCacheInitialized = false; +} + +CachingTokenFilter::~CachingTokenFilter() +{ + for( itCache = cache.begin(); itCache != cache.end(); itCache++ ) + delete (*itCache); + + cache.clear(); +} + +Token * CachingTokenFilter::next( Token* t ) +{ + if( ! bCacheInitialized ) + { + fillCache(); + bCacheInitialized = true; + itCache = cache.begin(); + } + + // if the cache is exhausted, return null + if( itCache == cache.end() ) + return NULL; + + t->set( (*itCache)->termBuffer(), (*itCache)->startOffset(), (*itCache)->endOffset(), (*itCache)->type() ); + t->setPositionIncrement( (*itCache)->getPositionIncrement() ); + t->setPayload( (*itCache)->getPayload() ); + itCache++; + + return t; +} + +void CachingTokenFilter::reset() +{ + itCache = cache.begin(); +} + +void CachingTokenFilter::fillCache() +{ + Token token; + Token * pCopy; + + while( input->next( &token ) ) + { + pCopy = new Token( token.termBuffer(), token.startOffset(), token.endOffset(), token.type() ); + pCopy ->setPositionIncrement( token.getPositionIncrement() ); + pCopy ->setPayload( token.getPayload() ); + cache.push_back( pCopy ); + } +} + +CL_NS_END \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/analysis/CachingTokenFilter.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/analysis/CachingTokenFilter.h new file mode 100644 index 0000000..a280821 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/analysis/CachingTokenFilter.h @@ -0,0 +1,33 @@ +/*------------------------------------------------------------------------------ +* 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_CachingTokenFilter +#define _lucene_analysis_CachingTokenFilter + +#include +#include "CLucene/analysis/AnalysisHeader.h" + +CL_NS_DEF(analysis) + +class CLUCENE_EXPORT CachingTokenFilter : public TokenFilter +{ +private: + bool bCacheInitialized; + std::list cache; + std::list::iterator itCache; + +public: + CachingTokenFilter( TokenStream * input, bool bDeleteTS ); + virtual ~CachingTokenFilter(); + + Token * next( Token* t ); + void reset(); + void fillCache(); +}; + +CL_NS_END + +#endif // _lucene_analysis_CachingTokenFilter diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/analysis/standard/StandardAnalyzer.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/analysis/standard/StandardAnalyzer.cpp new file mode 100644 index 0000000..34e8741 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/analysis/standard/StandardAnalyzer.cpp @@ -0,0 +1,112 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "StandardAnalyzer.h" + +////#include "CLucene/util/VoidMap.h" +#include "CLucene/util/CLStreams.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(_CLNEW CLTCSetList(true)), maxTokenLength(DEFAULT_MAX_TOKEN_LENGTH) + { + StopFilter::fillStopTable( stopSet,CL_NS(analysis)::StopAnalyzer::ENGLISH_STOP_WORDS); + } + + StandardAnalyzer::StandardAnalyzer( const TCHAR** stopWords): + stopSet(_CLNEW CLTCSetList(true)), maxTokenLength(DEFAULT_MAX_TOKEN_LENGTH) + { + StopFilter::fillStopTable( stopSet,stopWords ); + } + + StandardAnalyzer::StandardAnalyzer(const char* stopwordsFile, const char* enc): + stopSet(_CLNEW CLTCSetList(true)), maxTokenLength(DEFAULT_MAX_TOKEN_LENGTH) + { + if ( enc == NULL ) + enc = "ASCII"; + WordlistLoader::getWordSet(stopwordsFile, enc, stopSet); + } + + StandardAnalyzer::StandardAnalyzer(CL_NS(util)::Reader* stopwordsReader, const bool _bDeleteReader): + stopSet(_CLNEW CLTCSetList(true)), maxTokenLength(DEFAULT_MAX_TOKEN_LENGTH) + { + WordlistLoader::getWordSet(stopwordsReader, stopSet, _bDeleteReader); + } + + class StandardAnalyzer::SavedStreams : public TokenStream { + public: + StandardTokenizer* tokenStream; + TokenStream* filteredTokenStream; + + SavedStreams():tokenStream(NULL), filteredTokenStream(NULL) + { + } + + virtual ~SavedStreams() + { + //_CLDELETE(tokenStream); // This will be deleted with the filteredTokenStream + _CLDELETE(filteredTokenStream); + } + + void close(){} + Token* next(Token* token) {return NULL;} + }; + + StandardAnalyzer::~StandardAnalyzer(){ + SavedStreams* t = reinterpret_cast(this->getPreviousTokenStream()); + if (t) _CLDELETE(t->filteredTokenStream); + _CLLDELETE(stopSet); + } + + + TokenStream* StandardAnalyzer::tokenStream(const TCHAR* /*fieldName*/, Reader* reader) + { + BufferedReader* bufferedReader = reader->__asBufferedReader(); + TokenStream* ret; + + if ( bufferedReader == NULL ) + ret = _CLNEW StandardTokenizer( _CLNEW FilteredBufferedReader(reader, false), true ); + else + ret = _CLNEW StandardTokenizer(bufferedReader); + //ret->setMaxTokenLength(maxTokenLength); + ret = _CLNEW StandardFilter(ret,true); + ret = _CLNEW LowerCaseFilter(ret,true); + ret = _CLNEW StopFilter(ret,true, stopSet); + return ret; + } + + TokenStream* StandardAnalyzer::reusableTokenStream(const TCHAR* fieldName, Reader* reader){ + SavedStreams* streams = reinterpret_cast(getPreviousTokenStream()); + if (streams == NULL) { + streams = _CLNEW SavedStreams(); + setPreviousTokenStream(streams); + + BufferedReader* bufferedReader = reader->__asBufferedReader(); + if ( bufferedReader == NULL ) + streams->tokenStream = _CLNEW StandardTokenizer( _CLNEW FilteredBufferedReader(reader, false), true); + else + streams->tokenStream = _CLNEW StandardTokenizer(bufferedReader); + + streams->filteredTokenStream = _CLNEW StandardFilter(streams->tokenStream, true); + streams->filteredTokenStream = _CLNEW LowerCaseFilter(streams->filteredTokenStream, true); + streams->filteredTokenStream = _CLNEW StopFilter(streams->filteredTokenStream, true, stopSet); + } else { + streams->tokenStream->reset(reader); + } + //streams->tokenStream->setMaxTokenLength(maxTokenLength); + + return streams->filteredTokenStream; + } +CL_NS_END2 diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/analysis/standard/StandardAnalyzer.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/analysis/standard/StandardAnalyzer.h new file mode 100644 index 0000000..85e476b --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/analysis/standard/StandardAnalyzer.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_analysis_standard_StandardAnalyzer +#define _lucene_analysis_standard_StandardAnalyzer + +CL_CLASS_DEF(util,BufferedReader) +#include "CLucene/analysis/AnalysisHeader.h" + +CL_NS_DEF2(analysis,standard) + +/** +* Filters {@link lucene::analysis::standard::StandardTokenizer} with {@link lucene::analysis::standard::StandardFilter}, +* {@link lucene::analysis::LowerCaseFilter} and {@link lucene::analysis::StopFilter}, using a list of English stop words. +* +*/ + class CLUCENE_EXPORT StandardAnalyzer : public Analyzer + { + private: + CLTCSetList* stopSet; + int32_t maxTokenLength; + + class SavedStreams; + public: + /** Default maximum allowed token length */ + LUCENE_STATIC_CONSTANT(int32_t, DEFAULT_MAX_TOKEN_LENGTH = 255); + + /** Builds an analyzer.*/ + StandardAnalyzer(); + + /** Builds an analyzer with the given stop words. */ + StandardAnalyzer( const TCHAR** stopWords); + + /** Builds an analyzer with the stop words from the given file. + * @see WordlistLoader#getWordSet(File) + */ + StandardAnalyzer(const char* stopwordsFile, const char* enc = NULL); + + /** Builds an analyzer with the stop words from the given reader. + * @see WordlistLoader#getWordSet(Reader) + */ + StandardAnalyzer(CL_NS(util)::Reader* stopwordsReader, const bool _bDeleteReader = false); + + virtual ~StandardAnalyzer(); + + /** + * Constructs a StandardTokenizer filtered by a + * StandardFilter, a LowerCaseFilter and a StopFilter. + */ + TokenStream* tokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader); + + TokenStream* reusableTokenStream(const TCHAR* fieldName, CL_NS(util)::Reader* reader); + + /** + * Set maximum allowed token length. If a token is seen + * that exceeds this length then it is discarded. This + * setting only takes effect the next time tokenStream or + * reusableTokenStream is called. + */ + void setMaxTokenLength(const int32_t length) { + maxTokenLength = length; + } + + /** + * @see #setMaxTokenLength + */ + int getMaxTokenLength() const { + return maxTokenLength; + } + }; +CL_NS_END2 +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/analysis/standard/StandardFilter.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/analysis/standard/StandardFilter.cpp new file mode 100644 index 0000000..075d233 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/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/_ApiHeader.h" +#include "StandardFilter.h" + +#include "../AnalysisHeader.h" +#include "../Analyzers.h" +#include "StandardTokenizerConstants.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(){ + } + + Token* StandardFilter::next(Token* t) { + if (input->next(t) == NULL) + return NULL; + + TCHAR* text = t->termBuffer(); + const int32_t textLength = t->termLength(); + 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 t; + + } else if ( type == tokenImage[ACRONYM] ) { // remove dots + int32_t j = 0; + for ( int32_t i=0;iresetTermTextLen(); + return t; + + } else { + return t; + } + } + +CL_NS_END2 diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/analysis/standard/StandardFilter.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/analysis/standard/StandardFilter.h new file mode 100644 index 0000000..9fcd3de --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/analysis/standard/StandardFilter.h @@ -0,0 +1,35 @@ +/*------------------------------------------------------------------------------ +* 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 + + +#include "CLucene/analysis/AnalysisHeader.h" +//#include "../Analyzers.h" +//#include "StandardTokenizerConstants.h" + +CL_CLASS_DEF(util,StringBuffer) + +CL_NS_DEF2(analysis,standard) + + /** Normalizes tokens extracted with {@link lucene::analysis::standard::StandardTokenizer}. */ + class CLUCENE_EXPORT StandardFilter: public TokenFilter{ + public: + // Construct filtering in. + StandardFilter(TokenStream* in, bool deleteTokenStream); + + virtual ~StandardFilter(); + + + /** Returns the next token in the stream, or NULL at EOS. + *

Removes 's from the end of words. + *

Removes dots from acronyms. + */ + Token* next(Token* token); + }; +CL_NS_END2 +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/analysis/standard/StandardTokenizer.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/analysis/standard/StandardTokenizer.cpp new file mode 100644 index 0000000..b2a708e --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/analysis/standard/StandardTokenizer.cpp @@ -0,0 +1,464 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "StandardTokenizer.h" +#include "CLucene/util/StringBuffer.h" +#include "CLucene/util/_FastCharStream.h" +#include "CLucene/util/CLStreams.h" + +CL_NS_USE(analysis) +CL_NS_USE(util) +CL_NS_DEF2(analysis,standard) + + const TCHAR* tokenImageArray[] = { + _T(""), + _T(""), + _T(""), + _T(""), + _T(""), + _T(""), + _T(""), + _T(""), + _T(""), + _T("") + }; + 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(sb.len)) + + + StandardTokenizer::StandardTokenizer(BufferedReader* reader, bool deleteReader): + /* rdPos is zero-based. It starts at -1, and will advance to the first + ** position when readChar() is first called. */ + rdPos(-1), + tokenStart(-1), + rd(_CLNEW FastCharStream(reader)) + { + this->reader = reader; + this->deleteReader = deleteReader; + } + + StandardTokenizer::~StandardTokenizer() { + _CLDELETE(rd); + if ( this->deleteReader ) + _CLDELETE(reader) + } + + 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 Token* 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 t; + } + + void StandardTokenizer::reset(Reader* _input) { + this->input = _input; + if (rd->input==NULL) rd->input = _input->__asBufferedReader(); + rdPos = -1; + tokenStart = -1; + rd->reset(); + } + + Token* 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; + t = ReadAlphaNum(ch,t); + if ( t != NULL) return 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 t; + } else if ( _CJK ){ + t = ReadCJK(ch,t); + if ( t != NULL ) return t; + } + } + return NULL; + } + + Token* 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->termBuffer(),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 NULL; + } + 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 NULL; + } + + /* 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 NULL; //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 NULL; + } + + return setToken(t,&str,tokenType); + } + + Token* 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->termBuffer(),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); + } + + Token* 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->termBuffer(),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); + } + + + Token* 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); + } + + Token* 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); + } + + Token* 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 t; + } + + Token* 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/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/analysis/standard/StandardTokenizer.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/analysis/standard/StandardTokenizer.h new file mode 100644 index 0000000..049a406 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/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 + + +#include "../AnalysisHeader.h" //required for Tokenizer +#include "StandardTokenizerConstants.h" +CL_CLASS_DEF(analysis,Token) +CL_CLASS_DEF(util,BufferedReader) +CL_CLASS_DEF(util,StringBuffer) +CL_CLASS_DEF(util,FastCharStream) + +CL_NS_DEF2(analysis,standard) + +/** A grammar-based tokenizer constructed with JavaCC. + * + *

This should be a good tokenizer for most European-language documents: + * + *

    + *
  • Splits words at punctuation characters, removing punctuation. However, a + * dot that's not followed by whitespace is considered part of a token. + *
  • 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. + *
  • Recognizes email addresses and internet hostnames as one token. + *
+ * + *

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 CLUCENE_EXPORT 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 Token* setToken(Token* t, CL_NS(util)::StringBuffer* sb, TokenTypes tokenCode); + + Token* ReadDotted(CL_NS(util)::StringBuffer* str, TokenTypes forcedType,Token* t); + + CL_NS(util)::BufferedReader* reader; + bool deleteReader; + CL_NS(util)::FastCharStream* rd; + public: + + // Constructs a tokenizer for this Reader. + StandardTokenizer(CL_NS(util)::BufferedReader* reader, bool deleteReader=false); + + virtual ~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. */ + Token* next(Token* token); + + // Reads for number like "1"/"1234.567", or IP address like "192.168.1.2". + Token* ReadNumber(const TCHAR* previousNumber, const TCHAR prev, Token* t); + + Token* ReadAlphaNum(const TCHAR prev, Token* t); + + // Reads for apostrophe-containing word. + Token* ReadApostrophe(CL_NS(util)::StringBuffer* str, Token* t); + + // Reads for something@... it may be a COMPANY name or a EMAIL address + Token* ReadAt(CL_NS(util)::StringBuffer* str, Token* t); + + // Reads for COMPANY name like AT&T. + Token* ReadCompany(CL_NS(util)::StringBuffer* str, Token* t); + + // Reads CJK characters + Token* ReadCJK(const TCHAR prev, Token* t); + + virtual void reset(CL_NS(util)::Reader* _input); + }; + +CL_NS_END2 +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/analysis/standard/StandardTokenizerConstants.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/analysis/standard/StandardTokenizerConstants.h new file mode 100644 index 0000000..815dd6f --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/analysis/standard/StandardTokenizerConstants.h @@ -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. +------------------------------------------------------------------------------*/ +#ifndef _lucene_analysis_standard_StandardTokenizerConstants +#define _lucene_analysis_standard_StandardTokenizerConstants + +// TODO: Put these into StandardTokenizer +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/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/debug/error.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/debug/error.cpp new file mode 100644 index 0000000..9b4fe3e --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/debug/error.cpp @@ -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. +------------------------------------------------------------------------------*/ +#include "CLucene/_SharedHeader.h" +#include "error.h" +#include "CLucene/util/Misc.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():_twhat(NULL),error_number(0){ +#ifndef _ASCII + _awhat = NULL; +#endif + } + CLuceneError::CLuceneError(int num, const char* str, bool ownstr):error_number(num) + { +#ifdef _ASCII + _twhat=STRDUP_AtoA(str); + +#else + _awhat=STRDUP_AtoA(str); + _twhat=NULL; +#endif + if ( ownstr ) + _CLDELETE_LCaARRAY( const_cast(str)); + } + +#ifndef _ASCII + CLuceneError::CLuceneError(int num, const TCHAR* str, bool ownstr) + { + error_number = num; + _awhat=NULL; + _twhat=STRDUP_TtoT(str); + if ( ownstr ) + _CLDELETE_LCARRAY((TCHAR*)str); + } +#endif + + CLuceneError::CLuceneError(const CLuceneError& clone) + { + this->error_number = clone.error_number; +#ifndef _ASCII + this->_awhat = NULL; + if ( clone._awhat != NULL ) + this->_awhat = STRDUP_AtoA(clone._awhat); +#endif + this->_twhat = NULL; + if ( clone._twhat != NULL ) + this->_twhat = STRDUP_TtoT(clone._twhat); + } + CLuceneError::~CLuceneError() throw(){ + _CLDELETE_LCARRAY(_twhat); +#ifndef _ASCII + _CLDELETE_LCaARRAY(_awhat); +#endif + } + char* CLuceneError::what(){ +#ifdef _ASCII + return _twhat; +#else + if ( _awhat == NULL ) + _awhat = STRDUP_TtoA(_twhat); + return _awhat; +#endif + } + TCHAR* CLuceneError::twhat(){ +#ifdef _ASCII + return _twhat; +#else + if ( _twhat == NULL ) + _twhat = STRDUP_AtoT(_awhat); + return _twhat; +#endif + } + +#ifndef _ASCII + void CLuceneError::set(int num, const char* str, bool ownstr){ + _CLDELETE_CARRAY(_twhat); + _CLDELETE_CaARRAY(_awhat); + _awhat=STRDUP_AtoA(str); + error_number = num; + if ( ownstr ) + _CLDELETE_LCaARRAY( const_cast(str)); + } +#endif + + void CLuceneError::set(int num, const TCHAR* str, bool ownstr){ +#ifndef _ASCII + _CLDELETE_CaARRAY(_awhat); +#endif + _CLDELETE_CARRAY(_twhat); + _twhat=STRDUP_TtoT(str); + error_number = num; + if ( ownstr ) + _CLDELETE_LCARRAY(const_cast(str)); + } + +#endif //_LUCENE_DISABLE_EXCEPTIONS diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/debug/error.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/debug/error.h new file mode 100644 index 0000000..9fe980f --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/debug/error.h @@ -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. +------------------------------------------------------------------------------*/ +#ifndef _lucene_debug_error_ +#define _lucene_debug_error_ + + +#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 // Sub-error: AlreadyClosed +#define CL_ERR_UnknownOperator 14 +#define CL_ERR_ConcurrentModification 15 +#define CL_ERR_CorruptIndex 16 +#define CL_ERR_NumberFormat 17 +#define CL_ERR_AlreadyClosed 18 +#define CL_ERR_StaleReader 19 +#define CL_ERR_LockObtainFailed 20 +#define CL_ERR_Merge 21 //< Exception thrown if there are any problems while executing a merge. +#define CL_ERR_MergeAborted 22 +#define CL_ERR_OutOfMemory 23 +#define CL_ERR_FieldReader 24 + +//////////////////////////////////////////////////////// +//error try/throw/catch definitions +//////////////////////////////////////////////////////// +#ifdef _CL_DISABLE_NATIVE_EXCEPTIONS + #include + + /* + #define try struct pj_exception_state_t pj_x_except__; int pj_x_code__; \ + if(1){ \ + pj_push_exception_handler_(&pj_x_except__); \ + pj_x_code__ = pj_setjmp(pj_x_except__.state); \ + if (pj_x_code__ == 0) + #define _CLCATCHEND pj_pop_exception_handler_(); \ + } else {} + #define _CLCATCH else if (pj_x_code__ == (id)) _CLCATCHEND + #define _CLCATCHANY else _CLCATCHEND + #define _RETHROW pj_throw_exception_(pj_x_code__) + + #define _CLFINALLY(x) else{x _RETHROW}_CLCATCHEND x + #define _CLTHROWA(number) pj_throw_exception_(number) + #define _CLTHROWT(number) pj_throw_exception_(number) + #define _THROWA_DEL(number) _CLDELETE_CaARRAY(str); pj_throw_exception_(number) + #define _THROWT_DEL(number) _CLDELETE_CARRAY(str); pj_throw_exception_(number) + + */ +#else +class CLUCENE_EXPORT CLuceneError +{ +#ifndef _ASCII + char* _awhat; +#endif + TCHAR* _twhat; + int error_number; +public: + CLuceneError(); + CLuceneError(const CLuceneError& clone); +#ifndef _ASCII + CLuceneError(int num, const char* str, bool ownstr); +#endif + CLuceneError(int num, const TCHAR* str, bool ownstr); + int number() const{return error_number;} + char* what(); + TCHAR* twhat(); + ~CLuceneError() throw(); + + void set(int num, const TCHAR*, bool ownstr=false); +#ifndef _ASCII + void set(int num, const char*, bool ownstr=false); +#endif +}; + + //#define _THROWS //does nothing + #define _TRY try + #define _CLCATCH_ERR(err_num, cleanup_code, else_code) catch(CLuceneError& err){if (err.number()!=err_num){cleanup_code;throw err;}else {else_code;}} + #define _CLCATCH_ERR_ELSE(err_num, else_code) catch(CLuceneError& err){if (err.number()!=err_num){throw err;}else {else_code;}} + #define _CLCATCH_ERR_CLEANUP(err_num, cleanup_code) catch(CLuceneError& err){if (err.number()!=err_num){cleanup_code;throw err;}} + #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/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/debug/lucenebase.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/debug/lucenebase.h new file mode 100644 index 0000000..c053f11 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/debug/lucenebase.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_debug_lucenebase_ +#define _lucene_debug_lucenebase_ + +#include "CLucene/LuceneThreads.h" + +CL_NS_DEF(debug) + +//Lucenebase is the superclass of all clucene objects. It provides +//memory debugging tracking and/or reference counting +class CLUCENE_EXPORT LuceneBase{ +public: + _LUCENE_ATOMIC_INT __cl_refcount; + LuceneBase(){ + _LUCENE_ATOMIC_INT_SET(__cl_refcount,1); + } + inline int __cl_getref(){ + return _LUCENE_ATOMIC_INT_GET(__cl_refcount); + } + inline int __cl_addref(){ return _LUCENE_ATOMIC_INC(&__cl_refcount); } + inline int __cl_decref(){ return _LUCENE_ATOMIC_DEC(&__cl_refcount); } + virtual ~LuceneBase(){}; +}; + +class CLUCENE_EXPORT LuceneVoidBase{ + public: + virtual ~LuceneVoidBase(){}; +}; + +#if defined(LUCENE_ENABLE_REFCOUNT) + #define LUCENE_BASE public CL_NS(debug)::LuceneBase +#else + #define LUCENE_BASE public CL_NS(debug)::LuceneVoidBase +#endif +#define LUCENE_REFBASE public CL_NS(debug)::LuceneBase //this is the base of classes who *always* need refcounting + + +CL_NS_END +#endif //_lucene_debug_lucenebase_ diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/debug/mem.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/debug/mem.h new file mode 100644 index 0000000..98038b5 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/debug/mem.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_debug_mem_h +#define _lucene_debug_mem_h + +//todo: this is a hack... +#ifndef CND_PRECONDITION + #include + #define CND_PRECONDITION(x,y) assert(x) +#endif + +//Macro for creating new objects +#if defined(LUCENE_ENABLE_REFCOUNT) + #define _CLNEW new +#else + #define _CLNEW new +#endif +#define _CL_POINTER(x) (x==NULL?NULL:(x->__cl_addref()>=0?x:x)) //return a add-ref'd object +#define _CL_DECREF(x) ((x)==NULL?NULL:((x)->__cl_decref()>=0?(x):(x))) //return a add-ref'd object +#define _CL_LDECREF(x) if ((x)!=NULL) (x)->__cl_decref(); + +//Macro for creating new arrays +#define _CL_NEWARRAY(type,size) (type*)calloc(size, sizeof(type)) +#define _CLDELETE_ARRAY(x) {free(x); x=NULL;} +#define _CLDELETE_LARRAY(x) {free(x);} +#ifndef _CLDELETE_CARRAY + #define _CLDELETE_CARRAY(x) {free(x); x=NULL;} + #define _CLDELETE_LCARRAY(x) {free(x);} +#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_LCARRAY_ALL(x) {if ( x!=NULL ){ for(int xcda=0;x[xcda]!=NULL;xcda++)_CLDELETE_LCARRAY(x[xcda]);}_CLDELETE_LARRAY(x)}; +#define _CLDELETE_CaARRAY_ALL(x) {if ( x!=NULL ){ for(int xcda=0;x[xcda]!=NULL;xcda++)_CLDELETE_CaARRAY(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(_LUCENE_ATOMIC_INT_GET((x)->__cl_refcount)>=0,"__cl_refcount was < 0"); if (_LUCENE_ATOMIC_INT_GET((x)->__cl_decref()) <= 0)delete x; x=NULL; } + #define _CLLDELETE(x) if (x!=NULL){ CND_PRECONDITION(_LUCENE_ATOMIC_INT_GET((x)->__cl_refcount)>=0,"__cl_refcount was < 0"); if ((x)->__cl_decref() <= 0)delete x; } +#else + #define _CLDELETE(x) {delete x;x=NULL;} + #define _CLLDELETE(x) {delete x;} +#endif + +//_CLDECDELETE deletes objects which are *always* refcounted +#define _CLDECDELETE(x) if (x!=NULL){ CND_PRECONDITION(_LUCENE_ATOMIC_INT_GET((x)->__cl_refcount)>=0,"__cl_refcount was < 0"); _LUCENE_ATOMIC_DECDELETE(&(x)->__cl_refcount, x); x=NULL; } +#define _CLLDECDELETE(x) if (x!=NULL){ CND_PRECONDITION(_LUCENE_ATOMIC_INT_GET((x)->__cl_refcount)>=0,"__cl_refcount was < 0"); _LUCENE_ATOMIC_DECDELETE(&(x)->__cl_refcount, x); } +#define _LUCENE_ATOMIC_DECDELETE(theInteger, theObject) { if ( _LUCENE_ATOMIC_DEC(theInteger) == 0) delete theObject;} + +//_VDelete should be used for deleting non-clucene objects. +//when using reference counting, _CLDELETE casts the object +//into a LuceneBase*. +#define _CLVDELETE(x) {delete x;x=NULL;} + +#endif //_lucene_debug_mem_h diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/document/DateField.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/document/DateField.cpp new file mode 100644 index 0000000..f0c59cf --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/document/DateField.cpp @@ -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. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.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/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/document/DateField.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/document/DateField.h new file mode 100644 index 0000000..e309dc3 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/document/DateField.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_document_DateField_ +#define _lucene_document_DateField_ + + +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 + +/** +* 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. +* +*

Note that this class saves dates with millisecond granularity, +* which is bad for {@link lucene::search::RangeQuery} and {@link lucene::search::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 lucene::document::DateTools} instead. +* +*

+* Note: dates before 1970 cannot be used, and therefore cannot be +* indexed when using this class. See {@link lucene::document::DateTools} for an +* alternative without such a limitation. +* +* @deprecated If you build a new index, use {@link lucene::document::DateTools} instead. +* This class is included for use with existing indices and will be removed in a future release. +*/ +class CLUCENE_EXPORT DateField { +public: + virtual ~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 + */ + _CL_DEPRECATED( DateTools ) 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 + */ + _CL_DEPRECATED( DateTools ) static void timeToString(const int64_t time, TCHAR* str); + + /** Converts a string-encoded date into a millisecond time. */ + _CL_DEPRECATED( DateTools ) static int64_t stringToTime(const TCHAR* s); +}; +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/document/DateTools.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/document/DateTools.cpp new file mode 100644 index 0000000..f99ab25 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/document/DateTools.cpp @@ -0,0 +1,272 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" + +#include "DateTools.h" +#include "CLucene/util/Misc.h" + +CL_NS_USE(util) +CL_NS_DEF(document) + +TCHAR* DateTools::timeToString(const int64_t time, Resolution resolution /*= MILLISECOND_FORMAT*/) { + TCHAR* buf = _CL_NEWARRAY(TCHAR, DATETOOLS_BUFFER_SIZE); + timeToString(time, resolution, buf, DATETOOLS_BUFFER_SIZE); + return buf; +} + +void DateTools::timeToString(const int64_t time, Resolution resolution, TCHAR* buf, size_t bufLength) +{ + // Take into account TZ and DST differences which may appear when using gmtime below + const int64_t diff_secs = getDifferenceFromGMT(); + time_t secs = time / 1000 + diff_secs; + tm *ptm = gmtime(&secs); + + char abuf[DATETOOLS_BUFFER_SIZE]; + + if (resolution == MILLISECOND_FORMAT) { + size_t len = strftime(abuf, DATETOOLS_BUFFER_SIZE, "%Y%m%d%H%M%S", ptm); + uint32_t ms = static_cast(time % 1000); + _snprintf(abuf + len, 4, "%03u", ms); + } else if (resolution == SECOND_FORMAT) { + strftime(abuf, DATETOOLS_BUFFER_SIZE, "%Y%m%d%H%M%S", ptm); + } else if (resolution == MINUTE_FORMAT) { + strftime(abuf, DATETOOLS_BUFFER_SIZE, "%Y%m%d%H%M", ptm); + } else if (resolution == YEAR_FORMAT) { + strftime(abuf, DATETOOLS_BUFFER_SIZE, "%Y", ptm); + } else if (resolution == MONTH_FORMAT) { + strftime(abuf, DATETOOLS_BUFFER_SIZE, "%Y%m", ptm); + } else if (resolution == DAY_FORMAT) { + strftime(abuf, DATETOOLS_BUFFER_SIZE, "%Y%m%d", ptm); + } else if (resolution == HOUR_FORMAT) { + strftime(abuf, DATETOOLS_BUFFER_SIZE, "%Y%m%d%H", ptm); + } + + STRCPY_AtoT(buf,abuf, bufLength); +} + +tm* DateTools::stringToDate(const TCHAR* dateString){ + const int64_t time = stringToTime(dateString); + time_t secs = time / 1000; + tm *ptm = gmtime(&secs); + return ptm; +} + +int64_t DateTools::stringToTime(const TCHAR* dateString) { + tm s_time; + memset(&s_time, 0, sizeof (s_time)); + s_time.tm_mday = 1; + int32_t ms = 0; + + switch (_tcslen(dateString)) { + case 4: // YEAR_FORMAT + { + s_time.tm_year = _ttoi(dateString) - 1900; + if (s_time.tm_year == -1900) + _CLTHROWA(CL_ERR_Parse, "Input is not valid date string"); + break; + } + case 6: // MONTH_FORMAT + { + TCHAR* tmpDate = STRDUP_TtoT(dateString); + s_time.tm_mon = _ttoi(&tmpDate[4]) - 1; + tmpDate[4] = 0; + s_time.tm_year = _ttoi(tmpDate) - 1900; + _CLDELETE_CARRAY(tmpDate); + break; + } + case 8: // DAY_FORMAT + { + TCHAR* tmpDate = STRDUP_TtoT(dateString); + s_time.tm_mday = _ttoi(&tmpDate[6]); + tmpDate[6] = 0; + s_time.tm_mon = _ttoi(&tmpDate[4]) - 1; + tmpDate[4] = 0; + s_time.tm_year = _ttoi(tmpDate) - 1900; + _CLDELETE_CARRAY(tmpDate); + break; + } + case 10: // HOUR_FORMAT + { + TCHAR* tmpDate = STRDUP_TtoT(dateString); + s_time.tm_hour = _ttoi(&tmpDate[8]); + tmpDate[8] = 0; + s_time.tm_mday = _ttoi(&tmpDate[6]); + tmpDate[6] = 0; + s_time.tm_mon = _ttoi(&tmpDate[4]) - 1; + tmpDate[4] = 0; + s_time.tm_year = _ttoi(tmpDate) - 1900; + _CLDELETE_CARRAY(tmpDate); + break; + } + case 12: // MINUTE_FORMAT + { + TCHAR* tmpDate = STRDUP_TtoT(dateString); + s_time.tm_min = _ttoi(&tmpDate[10]); + tmpDate[10] = 0; + s_time.tm_hour = _ttoi(&tmpDate[8]); + tmpDate[8] = 0; + s_time.tm_mday = _ttoi(&tmpDate[6]); + tmpDate[6] = 0; + s_time.tm_mon = _ttoi(&tmpDate[4]) - 1; + tmpDate[4] = 0; + s_time.tm_year = _ttoi(tmpDate) - 1900; + _CLDELETE_CARRAY(tmpDate); + break; + } + case 14: // SECOND_FORMAT + { + TCHAR* tmpDate = STRDUP_TtoT(dateString); + s_time.tm_sec = _ttoi(&tmpDate[12]); + tmpDate[12] = 0; + s_time.tm_min = _ttoi(&tmpDate[10]); + tmpDate[10] = 0; + s_time.tm_hour = _ttoi(&tmpDate[8]); + tmpDate[8] = 0; + s_time.tm_mday = _ttoi(&tmpDate[6]); + tmpDate[6] = 0; + s_time.tm_mon = _ttoi(&tmpDate[4]) - 1; + tmpDate[4] = 0; + s_time.tm_year = _ttoi(tmpDate) - 1900; + _CLDELETE_CARRAY(tmpDate); + break; + } + case 17: // MILLISECOND_FORMAT + { + TCHAR* tmpDate = STRDUP_TtoT(dateString); + ms = _ttoi(&tmpDate[14]); + tmpDate[14] = 0; + s_time.tm_sec = _ttoi(&tmpDate[12]); + tmpDate[12] = 0; + s_time.tm_min = _ttoi(&tmpDate[10]); + tmpDate[10] = 0; + s_time.tm_hour = _ttoi(&tmpDate[8]); + tmpDate[8] = 0; + s_time.tm_mday = _ttoi(&tmpDate[6]); + tmpDate[6] = 0; + s_time.tm_mon = _ttoi(&tmpDate[4]) - 1; + tmpDate[4] = 0; + s_time.tm_year = _ttoi(tmpDate) - 1900; + _CLDELETE_CARRAY(tmpDate); + break; + } + default: + { + _CLTHROWA(CL_ERR_Parse, "Input is not valid date string"); + break; + } + } + + time_t t = mktime(&s_time); + if (t == -1) + _CLTHROWA(CL_ERR_Parse, "Input is not valid date string"); + + // Get TZ difference in seconds, and calc it in + const int64_t diff_secs = getDifferenceFromGMT(); + + return (static_cast(t + diff_secs) * 1000) + ms; +} + +int64_t DateTools::getDifferenceFromGMT() +{ + struct tm *tptr; + time_t secs, local_secs, gmt_secs; + time( &secs ); // Current time in GMT + tptr = localtime( &secs ); + local_secs = mktime( tptr ); + tptr = gmtime( &secs ); + gmt_secs = mktime( tptr ); + return int64_t(local_secs - gmt_secs); +} + +int64_t DateTools::timeMakeInclusive(const int64_t time) +{ + time_t secs = time / 1000; + tm *ptm = localtime(&secs); // use localtime since mktime below will convert the time to GMT before returning + ptm->tm_hour = 23; + ptm->tm_min = 59; + ptm->tm_sec = 59; + + time_t t = mktime(ptm); + if (t == -1) + _CLTHROWA(CL_ERR_Parse, "Input is not a valid date"); + + return (static_cast(t) * 1000) + 999; +} + +int64_t DateTools::getTime(unsigned short year, uint8_t month, uint8_t mday, uint8_t hours, + uint8_t minutes, uint8_t seconds, unsigned short ms) +{ + struct tm* s_time; + + // get current time, and then change it according to the parameters + time_t rawtime; + time ( &rawtime ); + s_time = localtime ( &rawtime ); // use localtime, since mktime will take into account TZ differences + s_time->tm_isdst = 0; // since we are using gmtime all around, make sure DST is off + + s_time->tm_year = year - 1900; + s_time->tm_mon = month - 1; + s_time->tm_mday = mday; + s_time->tm_hour = hours; + s_time->tm_min = minutes; + s_time->tm_sec = seconds; + + time_t t = mktime(s_time); + if (t == -1) + _CLTHROWA(CL_ERR_Parse, "Input is not a valid date"); + + return (static_cast(t) * 1000) + ms; +} + +TCHAR* DateTools::getISOFormat(const int64_t time){ + const time_t secs = time / 1000; + const int64_t ms = abs((int32_t)((secs * 1000) - time)); + tm *ptm = gmtime(&secs); + return getISOFormat(ptm->tm_year + 1900, ptm->tm_mon + 1, ptm->tm_mday, ptm->tm_hour, ptm->tm_min, + ptm->tm_sec, ms); +} + +void DateTools::strCatDate(TCHAR* buf, int zeroes, int value){ + TCHAR str[10]; + _i64tot(value, str, 10); + size_t l = _tcslen(str); + + TCHAR* p = buf; + for ( size_t i=0;i<(zeroes-l);i++ ){ + *p = _T('0'); + p++; + } + _tcscat(p, str); + p+=l; + *p = _T('\0'); +} +TCHAR* DateTools::getISOFormat(unsigned short year, uint8_t month, uint8_t mday, uint8_t hours, + uint8_t minutes, uint8_t seconds, unsigned short ms) +{ + TCHAR* ISOString = _CL_NEWARRAY(TCHAR, 24); + TCHAR* p = ISOString; + strCatDate(p, 4, year); p+=4; + _tcscat(p, _T("-")); p++; + strCatDate(p, 2, month); p+=2; + _tcscat(p, _T("-")); p++; + strCatDate(p, 2, mday); p+=2; + _tcscat(p, _T(" ")); p++; + strCatDate(p, 2, hours); p+=2; + _tcscat(p, _T(":")); p++; + strCatDate(p, 2, minutes); p+=2; + _tcscat(p, _T(":")); p++; + strCatDate(p, 2, seconds); p+=2; + _tcscat(p, _T(":")); p++; + strCatDate(p, 3, ms); p+=3; + + return ISOString; +} + +DateTools::~DateTools(){ +} + +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/document/DateTools.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/document/DateTools.h new file mode 100644 index 0000000..68220c6 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/document/DateTools.h @@ -0,0 +1,96 @@ +/*------------------------------------------------------------------------------ +* 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_DateTools_ +#define _lucene_document_DateTools_ + +#ifdef _CL_TIME_WITH_SYS_TIME +# include +# include +#else +# if defined(_CL_HAVE_SYS_TIME_H) +# include +# else +# include +# endif +#endif + +#ifdef _CL_HAVE_SYS_TIMEB_H +# include +#endif + +CL_NS_DEF(document) + +class CLUCENE_EXPORT DateTools { +private: + static void strCatDate(TCHAR* buf, int zeroes, int value); +public: + + enum Resolution { + NO_RESOLUTION, + YEAR_FORMAT, // yyyy + MONTH_FORMAT, // yyyyMM + DAY_FORMAT, // yyyyMMdd + HOUR_FORMAT, // yyyyMMddHH + MINUTE_FORMAT, // yyyyMMddHHmm + SECOND_FORMAT, // yyyyMMddHHmmss + MILLISECOND_FORMAT // yyyyMMddHHmmssSSS + }; + + /** + * Converts a millisecond time to a string suitable for indexing. + * + * @param time the date expressed as milliseconds since January 1, 1970, 00:00:00 GMT + * @param resolution the desired resolution, see {@link #Resolution} + * @return a string in format yyyyMMddHHmmssSSS or shorter, + * depeding on resolution; using UTC as timezone + */ + static TCHAR* timeToString(const int64_t time, Resolution resolution = MILLISECOND_FORMAT); + + static void timeToString(const int64_t time, Resolution resolution, TCHAR* buf, size_t bufLength); + + /** + * Converts a string produced by timeToString or + * dateToString back to a time, represented as the + * number of milliseconds since January 1, 1970, 00:00:00 GMT. + * + * @param dateString the date string to be converted + * @return the number of milliseconds since January 1, 1970, 00:00:00 GMT + * @throws ParseException if dateString is not in the + * expected format + */ + static int64_t stringToTime(const TCHAR* dateString); + + static tm* stringToDate(const TCHAR* dateString); + + /**** + + * CLucene specific methods + + *****/ + + /** + * Returns a 64bit time value based on the parameters passed + */ + static int64_t getTime(unsigned short year, uint8_t month, uint8_t mday, uint8_t hours = 0, + uint8_t minutes = 0, uint8_t seconds = 0, unsigned short ms = 0); + + /** + * Returns a 64bit time value which is inclusive of the whole last day. + */ + static int64_t timeMakeInclusive(const int64_t time); + + inline static int64_t getDifferenceFromGMT(); + + static TCHAR* getISOFormat(const int64_t time); + static TCHAR* getISOFormat(unsigned short year, uint8_t month, uint8_t mday, uint8_t hours = 0, + uint8_t minutes = 0, uint8_t seconds = 0, unsigned short ms = 0); + + virtual ~DateTools(); + +}; +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/document/Document.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/document/Document.cpp new file mode 100644 index 0000000..69ba2af --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/document/Document.cpp @@ -0,0 +1,183 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "Document.h" +#include "Field.h" +#include "CLucene/util/StringBuffer.h" +#include + +CL_NS_USE(util) +CL_NS_DEF(document) + + + struct DocumentFieldEnumeration::Internal { + Document::FieldsType::iterator itr; + Document::FieldsType::iterator end; + }; + DocumentFieldEnumeration::DocumentFieldEnumeration(Document::FieldsType::iterator itr, Document::FieldsType::iterator end){ + this->_internal = new DocumentFieldEnumeration::Internal; + this->_internal->itr = itr; + this->_internal->end = end; + } + + bool DocumentFieldEnumeration::hasMoreElements() const { + return _internal->itr != _internal->end; + } + + Field* DocumentFieldEnumeration::nextElement() { + //Func - Return the next element in the enumeration + //Pre - true + //Post - The next element is returned or NULL + + Field* result = NULL; + if ( _internal->itr != _internal->end ){ + result = *_internal->itr; + _internal->itr++; + } + return result; + } + + DocumentFieldEnumeration::~DocumentFieldEnumeration(){ + //Func - Destructor + //Pre - true + //Post - Instance has been destroyed + delete _internal; + } + DocumentFieldEnumeration* Document::fields() { + return _CLNEW DocumentFieldEnumeration(_fields->begin(), _fields->end()); + } + + /** Constructs a new document with no fields-> */ + Document::Document(): + _fields(_CLNEW FieldsType(true) ) + { + //Func - Constructor + //Pre - true + //Post - Instance has been created + boost = 1.0f; + } + + Document::~Document(){ + //Func - Destructor + //Pre - true + //Post - Instance has been destroyed + boost = 1.0f; + _CLDELETE(_fields); + } + + void Document::clear(){ + _fields->clear(); + } + + void Document::add(Field& field) { + _fields->push_back(&field); + } + + void Document::setBoost(const float_t boost) { + this->boost = boost; + } + + float_t Document::getBoost() const { + return boost; + } + + + Field* Document::getField(const TCHAR* name) const{ + CND_PRECONDITION(name != NULL, "name is NULL"); + for ( FieldsType::const_iterator itr = _fields->begin(); + itr != _fields->end(); itr ++ ){ + if ( _tcscmp( (*itr)->name(),name)==0 ) + return *itr; + } + 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; + } + + const Document::FieldsType* Document::getFields() const { + return _fields; + } + + + TCHAR* Document::toString() const { + StringBuffer ret(_T("Document<")); + for (FieldsType::const_iterator itr = _fields->begin(); + itr != _fields->end(); itr++ ) { + TCHAR* tmp = (*itr)->toString(); + if ( ret.len > 0 ) + ret.append(_T(" ")); + ret.append( tmp ); + _CLDELETE_ARRAY( tmp ); + } + ret.append(_T(">")); + return ret.toString(); + } + + + + void Document::removeField(const TCHAR* name) { + CND_PRECONDITION(name != NULL, "name is NULL"); + + for ( FieldsType::iterator itr = _fields->begin(); + itr != _fields->end(); itr++ ){ + + if ( _tcscmp( (*itr)->name(), name) == 0 ){ + _fields->remove(itr); + return; + } + } + } + + void Document::removeFields(const TCHAR* name) { + CND_PRECONDITION(name != NULL, "name is NULL"); + bool flag = true; + //TODO: make this more efficient + while(flag){ + for ( FieldsType::iterator itr = _fields->begin(); + itr != _fields->end(); itr++ ){ + if ( _tcscmp( (*itr)->name(), name) == 0 ){ + _fields->remove(itr); + flag = false; //no modifications allowed on an iterator + break; + } + } + flag = !flag; + } + } + + TCHAR** Document::getValues(const TCHAR* name) { + int count = 0; + for ( FieldsType::iterator itr = _fields->begin(); + itr != _fields->end(); itr++ ){ + if ( _tcscmp( (*itr)->name(),name) == 0 && (*itr)->stringValue() != NULL ) + count++; + } + + //todo: there must be a better way of doing this, we are doing two iterations of the fields + TCHAR** ret = NULL; + if ( count > 0 ){ + ret = _CL_NEWARRAY(TCHAR*,count+1); + int32_t i=0; + for ( FieldsType::iterator itr = _fields->begin(); + itr != _fields->end(); itr++ ){ + + if ( _tcscmp( (*itr)->name(),name) == 0 && (*itr)->stringValue() != NULL ){ + ret[i] = stringDuplicate((*itr)->stringValue()); + i++; + } + } + ret[count]=NULL; + } + return ret; + } +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/document/Document.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/document/Document.h new file mode 100644 index 0000000..400ec59 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/document/Document.h @@ -0,0 +1,178 @@ +/*------------------------------------------------------------------------------ +* 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_ + +#include "CLucene/util/VoidList.h" +#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 DocumentFieldEnumeration; + +/** 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. +* +*

Note that fields which are not {@link Field#isStored() stored} are +* not 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 CLUCENE_EXPORT Document:LUCENE_BASE { +public: + typedef CL_NS(util)::CLArrayList > FieldsType; +private: + FieldsType* _fields; + float_t boost; +public: + /** Constructs a new document with no fields. */ + Document(); + + ~Document(); + + /** 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. + * + *

The default value is 1.0. + * + *

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(float_t) + */ + void setBoost(const float_t boost); + + /** Returns, at indexing time, the boost factor as set by {@link #setBoost(float_t)}. + * + *

Note that once a document is indexed this value is no longer available + * from the index. At search time, for retrieved documents, this method always + * returns 1. This however does not mean that the boost value set at indexing + * time was ignored - it was just combined with other indexing time factors and + * stored elsewhere, for better indexing and search performance. (For more + * information see the "norm(t,d)" part of the scoring formula in + * {@link Similarity}.) + * + * @see #setBoost(float_t) + */ + float_t getBoost() const; + + /** + *

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.

+ *

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.

+ * + */ + void add(Field& field); + + /** + *

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.

+ *

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.

+ * Note: name is case sensitive + */ + void removeField(const TCHAR* name); + + /** + *

Removes all fields with the given name from the document. + * If there is no field with the specified name, the document remains unchanged.

+ *

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.

+ * Note: name is case sensitive + */ + void removeFields(const TCHAR* name); + + /** 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 + * Do not use this method with lazy loaded fields. + */ + 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. + * @deprecated use {@link #getFields()} instead + */ + _CL_DEPRECATED( getFields() ) DocumentFieldEnumeration* fields(); + + /** Returns a List of all the fields in a document. + *

Note that fields which are not {@link Field#isStored() stored} are + * not available in documents retrieved from the index, e.g. with {@link + * Hits#doc(int)}, {@link Searcher#doc(int)} or {@link IndexReader#document(int)}. + */ + const FieldsType* getFields() const; + + /** + * Returns an array of {@link Field}s with the given name. + * This method can return null. + * + * @param name the name of the field + * @return a Field[] array or null + */ + void getFields(const TCHAR* name, std::vector& ret); + + /** Prints the fields of a document for human consumption. */ + TCHAR* toString() const; + + + /** + * Returns an array of values of the field specified as the method parameter. + * This method can return null. + * Note: name is case sensitive + * + * @param name the name of the field + * @return a TCHAR** of field values or null + */ + TCHAR** getValues(const TCHAR* name); + + /** + * Empties out the document so that it can be reused + */ + void clear(); +}; + + +class CLUCENE_EXPORT DocumentFieldEnumeration :LUCENE_BASE{ +private: + struct Internal; + Internal* _internal; +public: + DocumentFieldEnumeration(Document::FieldsType::iterator itr, Document::FieldsType::iterator end); + ~DocumentFieldEnumeration(); + bool hasMoreElements() const; + Field* nextElement(); +}; +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/document/Field.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/document/Field.cpp new file mode 100644 index 0000000..4da4715 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/document/Field.cpp @@ -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. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "Field.h" +#include "CLucene/util/_StringIntern.h" +#include "CLucene/util/StringBuffer.h" +#include "CLucene/util/CLStreams.h" +#include "CLucene/analysis/AnalysisHeader.h" + +CL_NS_USE(util) +CL_NS_DEF(document) + +Field::Field(const TCHAR* Name, Reader* reader, int config): + lazy(false) +{ + CND_PRECONDITION(Name != NULL, "Name cannot be NULL"); + CND_PRECONDITION(reader != NULL, "reader cannot be NULL"); + + _name = CLStringIntern::intern( Name ); + fieldsData = reader; + valueType = VALUE_READER; + + boost=1.0f; + + setConfig(config); +} + + +Field::Field(const TCHAR* Name, const TCHAR* Value, int _config, const bool duplicateValue): + lazy(false) +{ + CND_PRECONDITION(Name != NULL, "Name cannot be NULL"); + CND_PRECONDITION(Value != NULL, "value cannot be NULL"); + CND_PRECONDITION(_tcslen(Value)>0 || _tcslen(Name)>0, "name and value cannot both be empty"); + + /* + if (_config & INDEX_NO && _config & STORE_NO) + _CLTHROWA(CL_ERR_IllegalArgument,"it doesn't make sense to have a field that is neither indexed nor stored"); + if (_config & INDEX_NO && _config & TERMVECTOR_YES) + _CLTHROWA(CL_ERR_IllegalArgument,"cannot store term vector information for a field that is not indexed"); + */ + + _name = CLStringIntern::intern( Name ); + if (duplicateValue) + fieldsData = stringDuplicate( Value ); + else + fieldsData = (void*)Value; + valueType = VALUE_STRING; + + boost=1.0f; + + //config = INDEX_TOKENIZED; // default Field is tokenized and indexed + + setConfig(_config); +} + +Field::Field(const TCHAR* Name, ValueArray* Value, int config, bool duplicateValue): + lazy(false) +{ + CND_PRECONDITION(Name != NULL, "Name cannot be NULL"); + CND_PRECONDITION(Value != NULL, "value cannot be NULL"); + + _name = CLStringIntern::intern( Name ); + + if ( duplicateValue ){ + ValueArray* tmp = _CLNEW ValueArray(Value->length); + memcpy(tmp->values, Value->values, Value->length * sizeof(uint8_t)); + fieldsData = tmp; + }else{ + fieldsData = Value; + } + valueType = VALUE_BINARY; + + boost=1.0f; + + setConfig(config); +} + +Field::Field(const TCHAR* Name, int config): + lazy(false) +{ + CND_PRECONDITION(Name != NULL, "Name cannot be NULL"); + + _name = CLStringIntern::intern( Name ); + fieldsData = NULL; + valueType = VALUE_NONE; + + boost=1.0f; + + if (config) setConfig(config); +} + +Field::~Field(){ +//Func - Destructor +//Pre - true +//Post - Instance has been destroyed + + CLStringIntern::unintern(_name); + _resetValue(); +} + + +/*===============FIELDS=======================*/ +const TCHAR* Field::name() const { return _name; } ///(fieldsData) : NULL; } ///* Field::binaryValue() { return (valueType & VALUE_BINARY) ? static_cast*>(fieldsData) : NULL; } ///(fieldsData) : NULL; } ///(fieldsData) : NULL; } + +bool Field::isStored() const { return (config & STORE_YES) != 0; } +bool Field::isIndexed() const { return (config & INDEX_TOKENIZED)!=0 || (config & INDEX_UNTOKENIZED)!=0; } +bool Field::isTokenized() const { return (config & INDEX_TOKENIZED) != 0; } +bool Field::isCompressed() const { return (config & STORE_COMPRESS) != 0; } +bool Field::isBinary() const { return (valueType & VALUE_BINARY) && fieldsData!=NULL; } + +bool Field::isTermVectorStored() const { return (config & TERMVECTOR_YES) != 0; } +bool Field::isStoreOffsetWithTermVector() const { return (config & TERMVECTOR_YES) != 0 && (config & TERMVECTOR_WITH_OFFSETS) != 0 && ((config & TERMVECTOR_WITH_OFFSETS) != TERMVECTOR_YES); } +bool Field::isStorePositionWithTermVector() const { return (config & TERMVECTOR_YES) != 0 && (config & TERMVECTOR_WITH_POSITIONS) != 0 && ((config & TERMVECTOR_WITH_POSITIONS) != TERMVECTOR_YES); } + +bool Field::getOmitNorms() const { return (config & INDEX_NONORMS) != 0; } +void Field::setOmitNorms(const bool omitNorms) { + if ( omitNorms ) + config |= INDEX_NONORMS; + else + config &= ~INDEX_NONORMS; +} + +bool Field::isLazy() const { return lazy; } + +void Field::setValue(TCHAR* value, const bool duplicateValue) { + _resetValue(); + if (duplicateValue) + fieldsData = stringDuplicate( value ); + else + fieldsData = value; + valueType = VALUE_STRING; +} + +void Field::setValue(Reader* value) { + _resetValue(); + fieldsData = value; + valueType = VALUE_READER; +} +void Field::setValue(ValueArray* value) { + _resetValue(); + fieldsData = value; + valueType = VALUE_BINARY; +} + +/** Expert: change the value of this field. See setValue(String). */ +void Field::setValue(CL_NS(analysis)::TokenStream* value) { + _resetValue(); + fieldsData = value; + valueType = VALUE_TOKENSTREAM; +} + +void Field::setBoost(const float_t boost) { this->boost = boost; } +float_t Field::getBoost() const { return boost; } + +void Field::setConfig(const uint32_t x){ + uint32_t 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_TOKENIZED && x & INDEX_UNTOKENIZED ) + _CLTHROWA(CL_ERR_IllegalArgument,"it doesn't make sense to have an untokenised and tokenised field"); + + if ( x & INDEX_NONORMS ){ + newConfig |= INDEX_UNTOKENIZED; + newConfig |= INDEX_NONORMS; + index = true; + } + else if ( x & INDEX_TOKENIZED ){ + newConfig |= INDEX_TOKENIZED; + index = true; + } + else 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_POSITIONS) && ((x & TERMVECTOR_WITH_POSITIONS) != TERMVECTOR_YES) ){ + newConfig |= TERMVECTOR_WITH_POSITIONS; + termVector=true; + } + if ( x & TERMVECTOR_WITH_OFFSETS && ((x & TERMVECTOR_WITH_OFFSETS) != TERMVECTOR_YES) ){ + newConfig |= TERMVECTOR_WITH_OFFSETS; + termVector=true; + } + // TERMVECTOR_WITH_POSITIONS_OFFSETS is being automatically handled here + + 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() { + StringBuffer result; + if (isStored()) { + result.append( _T("stored") ); + if (isCompressed()) + result.append( _T("/compressed")); + else + result.append( _T("/uncompressed") ); + } + 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") ); + } + if (isLazy()){ + result.append( _T(",lazy") ); + } + result.appendChar('<'); + result.append(name()); + result.appendChar(':'); + + if (! isLazy() && fieldsData != NULL) { + if (valueType & VALUE_STRING) + result.append(static_cast(fieldsData)); + else if (valueType & VALUE_READER) + result.append( _T("Reader") ); + else if (valueType & VALUE_BINARY) + result.append( _T("Binary") ); + else + result.append( _T("NULL") ); + } + + result.appendChar('>'); + return result.toString(); +} + + +void Field::_resetValue() { + if (valueType & VALUE_STRING) { + TCHAR* t = static_cast(fieldsData); + _CLDELETE_CARRAY(t); + } else if (valueType & VALUE_READER) { + Reader* r = static_cast(fieldsData); + _CLDELETE(r); + } else if (valueType & VALUE_BINARY) { + ValueArray* v = static_cast*>(fieldsData); + _CLDELETE(v); + } + valueType=VALUE_NONE; +} +const char* Field::getObjectName() const{ + return getClassName(); +} +const char* Field::getClassName(){ + return "Field"; +} +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/document/Field.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/document/Field.h new file mode 100644 index 0000000..82c0a98 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/document/Field.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. +------------------------------------------------------------------------------*/ +#ifndef _lucene_document_Field_ +#define _lucene_document_Field_ + +#include "CLucene/util/Array.h" +#include "CLucene/util/Equators.h" +/* +Fieldable reading: +https://issues.apache.org/jira/browse/LUCENE-1219?page=com.atlassian.jira.plugin.system.issuetabpanels:comment- tabpanel&focusedCommentId=12578199#action_12578199 +http://lucene.markmail.org/message/ioi4f6z24cbd5bdm?q=Fieldable#query:Fieldable+page:1+mid:fxmvzb6up7zve7k4+state:results + +TODO: - Solve some inconsistencies between CL and JL - mainly in the constructors area. + - Write some more tests to make sure we conform with JL - mainly in the tokenizing and omitNorms area + - Is there a bug in JL when calling setOmitNorms after a Tokenized field was created? +*/ + +CL_CLASS_DEF(util,Reader) +CL_CLASS_DEF(analysis,TokenStream) + +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. +*/ +class CLUCENE_EXPORT Field : public CL_NS(util)::NamedObject{ +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. + */ + 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. + * Note that once you index a given field with norms enabled, + * disabling norms will have no effect. In other words, for NO_NORMS + * to have the above described effect on a field, all instances of that + * field must be indexed with NO_NORMS from the beginning. + */ + 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 = TERMVECTOR_YES | 1024, + + /** + * Store the term vector + Token offset information + * + * @see #YES + */ + TERMVECTOR_WITH_OFFSETS = TERMVECTOR_YES | 2048, + + /** + * Store the term vector + Token position and offset information + * + * @see #YES + * @see #WITH_POSITIONS + * @see #WITH_OFFSETS + */ + TERMVECTOR_WITH_POSITIONS_OFFSETS = TERMVECTOR_WITH_OFFSETS | TERMVECTOR_WITH_POSITIONS + }; + + bool lazy; + + enum ValueType { + VALUE_NONE = 0, + VALUE_STRING = 1, + VALUE_READER = 2, + VALUE_BINARY = 4, + VALUE_TOKENSTREAM = 8 + }; + + /** + * TCHAR value constructor of Field. + * @memory Set duplicateValue to false to save on memory allocations when possible + */ + Field(const TCHAR* name, const TCHAR* value, int _config, const bool duplicateValue = true); + + /** + * Reader* constructor of Field. + * @memory consumes reader + */ + Field(const TCHAR* name, CL_NS(util)::Reader* reader, int _config); + + /** + * Binary constructor of Field. + * @memory Set duplicateValue to false to save on memory allocations when possible + */ + Field(const TCHAR* name, CL_NS(util)::ValueArray* data, int _config, const bool duplicateValue = true); + + Field(const TCHAR* name, int _config); ///* binaryValue(); + + /** The value of the field as a TokesStream, or null. If null, the Reader value, + * String value, or binary value is used. Exactly one of stringValue(), + * readerValue(), binaryValue(), and tokenStreamValue() must be set. */ + virtual CL_NS(analysis)::TokenStream* tokenStreamValue(); + + // True if 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() const; + + // True if the value of the field is to be indexed, so that it may be + // searched on. + bool isIndexed() const; + + // True if 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() const; + + /** True if the value of the field is stored and compressed within the index + */ + bool isCompressed() const; + + /** True if 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 stored attribute instead. + * + * @see IndexReader#getTermFreqVector(int32_t, String) + */ + bool isTermVectorStored() const; + + /** + * True iff terms are stored as term vector together with their offsets + * (start and end positon in source text). + */ + bool isStoreOffsetWithTermVector() const; + + /** + * True iff terms are stored as term vector together with their token positions. + */ + bool isStorePositionWithTermVector() const; + + /** Returns the boost factor for hits for this field. + * + *

The default value is 1.0. + * + *

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_t) + */ + float_t getBoost() const; + + /** Sets the boost factor hits on this field. This value will be + * multiplied into the score of all hits on this this field of this + * document. + * + *

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_t)} 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_t) + * @see Similarity#lengthNorm(String, int) + * @see Similarity#encodeNorm(float_t) + */ + void setBoost(const float_t value); + + /** True if the value of the filed is stored as binary */ + bool isBinary() const; + + /** True if norms are omitted for this indexed field */ + bool getOmitNorms() const; + + /** Expert: + * + * If set, omit normalization factors associated with this indexed field. + * This effectively disables indexing boosts and length normalization for this field. + */ + void setOmitNorms(const bool omitNorms); + + /** + * Indicates whether a Field is Lazy or not. The semantics of Lazy loading are such that if a Field is lazily loaded, retrieving + * it's values via {@link #stringValue()} or {@link #binaryValue()} is only valid as long as the {@link org.apache.lucene.index.IndexReader} that + * retrieved the {@link Document} is still open. + * + * @return true if this field can be loaded lazily + */ + bool isLazy() const; + + /** Prints a Field for human consumption. */ + TCHAR* toString(); + + /**

Expert: change the value of this field. This can + * be used during indexing to re-use a single Field + * instance to improve indexing speed by avoiding GC cost + * of new'ing and reclaiming Field instances. Typically + * a single {@link Document} instance is re-used as + * well. This helps most on small documents.

+ * + *

Note that you should only use this method after the + * Field has been consumed (ie, the {@link Document} + * containing this Field has been added to the index). + * Also, each Field instance should only be used once + * within a single {@link Document} instance. See ImproveIndexingSpeed + * for details.

+ * + * @memory Caller is responsible for releasing value if duplicateValue == false */ + void setValue(TCHAR* value, const bool duplicateValue = true); + + /** Expert: change the value of this field. See setValue(TCHAR*). */ + void setValue(CL_NS(util)::Reader* value); + + /** Expert: change the value of this field. See setValue(TCHAR*). */ + void setValue(CL_NS(util)::ValueArray* value) ; + + /** Expert: change the value of this field. See setValue(TCHAR*). */ + void setValue(CL_NS(analysis)::TokenStream* value); + + virtual const char* getObjectName() const; + static const char* getClassName(); + +protected: + /** + * 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(const uint32_t _config); + + void _resetValue(); + + void* fieldsData; + ValueType valueType; + + const TCHAR* _name; + uint32_t config; + float_t boost; +}; +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/document/FieldSelector.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/document/FieldSelector.cpp new file mode 100644 index 0000000..346a87e --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/document/FieldSelector.cpp @@ -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. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" + +#include "FieldSelector.h" + +CL_NS_USE(util) +CL_NS_DEF(document) + +FieldSelector::~FieldSelector(){ +} + +LoadFirstFieldSelector::~LoadFirstFieldSelector(){ +} + +FieldSelector::FieldSelectorResult LoadFirstFieldSelector::accept(const TCHAR* /*fieldName*/) const{ + return LOAD_AND_BREAK; +} + +MapFieldSelector::~MapFieldSelector(){ + _CLDELETE(fieldSelections); +} + +MapFieldSelector::MapFieldSelector() : + fieldSelections(_CLNEW FieldSelectionsType(true,false)) +{ +} + +MapFieldSelector::MapFieldSelector(std::vector& fields) : + fieldSelections(_CLNEW FieldSelectionsType(true,false)) +{ + std::vector::iterator itr = fields.begin(); + while ( itr != fields.end() ){ + add(*itr); + itr++; + } +} + +MapFieldSelector::MapFieldSelector(ArrayBase& fields): + fieldSelections(_CLNEW FieldSelectionsType(true,false)) +{ + for ( size_t i=0;ifind((TCHAR*)field); + if ( itr != fieldSelections->end() ){ + return itr->second; + } + return FieldSelector::NO_LOAD; +} + +void MapFieldSelector::add(const TCHAR* field, FieldSelector::FieldSelectorResult action){ + fieldSelections->insert(fieldSelections->end(),std::pair( + STRDUP_TtoT(field), action)); +} + + +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/document/FieldSelector.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/document/FieldSelector.h new file mode 100644 index 0000000..f66a300 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/document/FieldSelector.h @@ -0,0 +1,142 @@ +/*------------------------------------------------------------------------------ +* 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_FieldSelector_ +#define _lucene_document_FieldSelector_ + +#include "CLucene/util/Equators.h" +#include "CLucene/util/Array.h" +#include "CLucene/util/VoidMap.h" + +CL_NS_DEF(document) + +/** + * Similar to a {@link java.io.FileFilter}, the FieldSelector allows one to make decisions about + * what Fields get loaded on a {@link Document} by {@link org.apache.lucene.index.IndexReader#document(int,org.apache.lucene.document.FieldSelector)} + * + **/ +class CLUCENE_EXPORT FieldSelector :LUCENE_BASE { +public: + + /** + * Provides information about what should be done with this Field + * + **/ + enum FieldSelectorResult { + /** + * Load this {@link Field} every time the {@link Document} is loaded, reading in the data as it is encounterd. + * {@link Document#getField(String)} and {@link Document#getField(String)} should not return null. + *

+ * {@link Document#add(Field)} should be called by the Reader. + */ + LOAD = 0, + + /** + * Lazily load this {@link Field}. This means the {@link Field} is valid, but it may not actually contain its data until + * invoked. {@link Document#getField(String)} SHOULD NOT BE USED. {@link Document#getField(String)} is safe to use and should + * return a valid instance of a {@link Field}. + *

+ * {@link Document#add(Field)} should be called by the Reader. + */ + LAZY_LOAD = 1, + + /** + * Do not load the {@link Field}. {@link Document#getField(String)} and {@link Document#getField(String)} should return null. + * {@link Document#add(Field)} is not called. + *

+ * {@link Document#add(Field)} should not be called by the Reader. + */ + NO_LOAD = 2, + + /** + * Load this field as in the {@link #LOAD} case, but immediately return from {@link Field} loading for the {@link Document}. Thus, the + * Document may not have its complete set of Fields. {@link Document#getField(String)} and {@link Document#getField(String)} should + * both be valid for this {@link Field} + *

+ * {@link Document#add(Field)} should be called by the Reader. + */ + LOAD_AND_BREAK = 3, + + /** + * Behaves much like {@link #LOAD} but does not uncompress any compressed data. This is used for internal purposes. + * {@link Document#getField(String)} and {@link Document#getField(String)} should not return null. + *

+ * {@link Document#add(Field)} should be called by the Reader. + */ + LOAD_FOR_MERGE = 4, + + /** Expert: Load the size of this {@link Field} rather than its value. + * Size is measured as number of bytes required to store the field == bytes for a binary or any compressed value, and 2*chars for a String value. + * The size is stored as a binary value, represented as an int in a byte[], with the higher order byte first in [0] + */ + SIZE = 5, + + /** Expert: Like {@link #SIZE} but immediately break from the field loading loop, i.e., stop loading further fields, after the size is loaded */ + SIZE_AND_BREAK = 6 + }; + + virtual ~FieldSelector(); + + /** + * + * @param fieldName the field to accept or reject + * @return an instance of {@link FieldSelectorResult} + * if the {@link Field} named fieldName should be loaded. + */ + virtual FieldSelectorResult accept(const TCHAR* fieldName) const = 0; + +}; + +/** + * Load the First field and break. + *

+ * See {@link FieldSelectorResult#LOAD_AND_BREAK} + */ +class CLUCENE_EXPORT LoadFirstFieldSelector :public FieldSelector { +public: + ~LoadFirstFieldSelector(); + + FieldSelectorResult accept(const TCHAR* fieldName) const; +}; + +/** + * A FieldSelector based on a Map of field names to FieldSelectorResults + * + * @author Chuck Williams + */ +class CLUCENE_EXPORT MapFieldSelector: public FieldSelector { +public: + typedef CL_NS(util)::CLHashMap FieldSelectionsType; + FieldSelectionsType* fieldSelections; + + virtual ~MapFieldSelector(); + + MapFieldSelector(std::vector& fieldSelections); + + /** Create a a MapFieldSelector + */ + MapFieldSelector(); + + /** Create a a MapFieldSelector + * @param fields fields to LOAD. All other fields are NO_LOAD. + */ + MapFieldSelector(CL_NS(util)::ArrayBase& fields); + + /** Load field according to its associated value in fieldSelections + * @param field a field name + * @return the fieldSelections value that field maps to or NO_LOAD if none. + */ + FieldSelectorResult accept(const TCHAR* field) const; + + void add(const TCHAR*, FieldSelector::FieldSelectorResult action=FieldSelector::LOAD); +}; + +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/document/NumberTools.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/document/NumberTools.cpp new file mode 100644 index 0000000..97f89df --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/document/NumberTools.cpp @@ -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. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" + +#include "NumberTools.h" +#include "CLucene/util/Misc.h" + +CL_NS_DEF(document) + +const TCHAR* NumberTools::MIN_STRING_VALUE = NEGATIVE_PREFIX _T("0000000000000"); +const TCHAR* NumberTools::MAX_STRING_VALUE = POSITIVE_PREFIX _T("1y2p0ij32e8e7"); + +TCHAR* NumberTools::longToString(int64_t l) +{ + if (l == LUCENE_INT64_MIN_SHOULDBE) { + // special case, because long is not symetric around zero + return stringDuplicate(MIN_STRING_VALUE); + } + + TCHAR* buf = _CL_NEWARRAY(TCHAR, STR_SIZE + 1); + if (l < 0) { + buf[0] = NEGATIVE_PREFIX[0]; + l = LUCENE_INT64_MAX_SHOULDBE + l + 1; + } else { + buf[0] = POSITIVE_PREFIX[0]; + } + + TCHAR tmp[STR_SIZE]; + _i64tot(l, tmp, NUMBERTOOLS_RADIX); + size_t len = _tcslen(tmp); + _tcscpy(buf+(STR_SIZE-len),tmp); + for ( size_t i=1;i + * That is, if l1 is less than l2 for any two longs l1 and l2, then + * NumberTools.longToString(l1) is lexicographically less than + * NumberTools.longToString(l2). (Similarly for "greater than" and "equals".) + * + *

+ * This class handles all long values (unlike + * {@link org.apache.lucene.document.DateField}). + * + * + */ +class CLUCENE_EXPORT NumberTools :LUCENE_BASE { + + #define NUMBERTOOLS_RADIX 36 + + #define NEGATIVE_PREFIX _T("-") + // NB: NEGATIVE_PREFIX must be < POSITIVE_PREFIX + #define POSITIVE_PREFIX _T("0") + +public: + //NB: this must be less than + /** + * Equivalent to longToString(Long.MIN_VALUE); STR_SIZE is depandant on the length of it + */ + static const TCHAR* MIN_STRING_VALUE; + + /** + * Equivalent to longToString(Long.MAX_VALUE) + */ + static const TCHAR* MAX_STRING_VALUE; + + /** + * The length of (all) strings returned by {@link #longToString} + */ + LUCENE_STATIC_CONSTANT (size_t, STR_SIZE = 14); + + /** + * Converts a long to a String suitable for indexing. + * + * @memory Caller should free the returned buffer + */ + static TCHAR* longToString(int64_t l); + + /** + * Converts a String that was returned by {@link #longToString} back to a + * long. + * + * @throws IllegalArgumentException + * if the input is null + * @throws NumberFormatException + * if the input does not parse (it was not a String returned by + * longToString()). + */ + static int64_t stringToLong(const TCHAR* str); + + ~NumberTools(); + +}; +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/CompoundFile.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/CompoundFile.cpp new file mode 100644 index 0000000..52036f3 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/CompoundFile.cpp @@ -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. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "Term.h" +#include "_TermInfo.h" +#include "_SkipListWriter.h" +#include "_CompoundFile.h" +#include "CLucene/util/Misc.h" +#include "CLucene/store/IndexInput.h" +#include "CLucene/store/IndexOutput.h" + +CL_NS_USE(store) +CL_NS_USE(util) +CL_NS_DEF(index) + + +class WriterFileEntry:LUCENE_BASE { +public: + WriterFileEntry(){ + directoryOffset=0; + dataOffset=0; + } + ~WriterFileEntry(){ + } + /** source file */ + char file[CL_MAX_PATH]; + + /** temporary holder for the start of directory entry for this file */ + int64_t directoryOffset; + + /** temporary holder for the start of this file's data section */ + int64_t dataOffset; + +}; + + +/** 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, const int32_t readBufferSize = CL_NS(store)::BufferedIndexInput::BUFFER_SIZE); + CSIndexInput(const CSIndexInput& clone); + ~CSIndexInput(); + + /** Closes the stream to futher operations. */ + void close(); + CL_NS(store)::IndexInput* clone() const; + + int64_t length() const { return _length; } + + const char* getDirectoryType() const{ return CompoundFileReader::getClassName(); } + const char* getObjectName() const{ return getClassName(); } + static const char* getClassName() { return "CSIndexInput"; } +}; + +class ReaderFileEntry:LUCENE_BASE { +public: + int64_t offset; + int64_t length; + ReaderFileEntry(){ + offset=0; + length=0; + } + ~ReaderFileEntry(){ + } +}; + + +CSIndexInput::CSIndexInput(CL_NS(store)::IndexInput* base, const int64_t fileOffset, const int64_t length, const int32_t _readBufferSize):BufferedIndexInput(_readBufferSize){ + this->base = base; + this->fileOffset = fileOffset; + this->_length = length; +} + +void 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, false); +} +CSIndexInput::~CSIndexInput(){ +} +IndexInput* CSIndexInput::clone() const +{ + return _CLNEW CSIndexInput(*this); +} +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 CSIndexInput::close(){ +} + + + +CompoundFileReader::CompoundFileReader(Directory* dir, const char* name, int32_t _readBufferSize): + readBufferSize(_readBufferSize), directory(dir), stream(NULL), entries(_CLNEW EntriesType(true,true)) +{ + fileName = STRDUP_AtoA(name); + + bool success = false; + + try { + stream = dir->openInput(name, readBufferSize); + + // read the directory and init files + int32_t count = stream->readVInt(); + ReaderFileEntry* entry = NULL; + TCHAR tid[CL_MAX_PATH]; + for (int32_t i=0; ireadLong(); + stream->readString(tid,CL_MAX_PATH); + char* aid = STRDUP_TtoA(tid); + + if (entry != NULL) { + // set length of the previous entry + entry->length = offset - entry->offset; + } + + entry = _CLNEW ReaderFileEntry(); + entry->offset = 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; + //else ignore + } + } + ) +} + +CompoundFileReader::~CompoundFileReader(){ + close(); + _CLDELETE_CaARRAY(fileName); + _CLDELETE(entries); +} + +Directory* CompoundFileReader::getDirectory(){ + return directory; +} + +const char* CompoundFileReader::getName() const{ + return fileName; +} +const char* CompoundFileReader::getClassName(){ + return "CompoundFileReader"; +} +const char* CompoundFileReader::getObjectName() const{ + return getClassName(); +} + +void CompoundFileReader::close(){ + SCOPED_LOCK_MUTEX(THIS_LOCK) + + if (stream != NULL){ + entries->clear(); + stream->close(); + _CLDELETE(stream); + } +} + +bool CompoundFileReader::openInput(const char * id, CL_NS(store)::IndexInput *& ret, CLuceneError& error, int32_t bufferSize){ + SCOPED_LOCK_MUTEX(THIS_LOCK); + + if (stream == NULL){ + error.set(CL_ERR_IO,"Stream closed"); + return false; + } + + const ReaderFileEntry* entry = entries->get((char*)id); + if (entry == NULL){ + char buf[CL_MAX_PATH+26]; + cl_sprintf(buf, CL_MAX_PATH+26, "No sub-file with id %s found", id); + error.set(CL_ERR_IO,buf); + return false; + } + + if (bufferSize < 1) + bufferSize = readBufferSize; + + ret = _CLNEW CSIndexInput(stream, entry->offset, entry->length, bufferSize); + return true; +} + +bool CompoundFileReader::list(vector* names) const{ + for ( EntriesType::const_iterator i=entries->begin();i!=entries->end();i++ ){ + names->push_back(i->first); + ++i; + } + return true; +} + +bool CompoundFileReader::fileExists(const char* name) const{ + return entries->exists((char*)name); +} + +int64_t CompoundFileReader::fileModified(const char* name) const{ + return directory->fileModified(name); +} + +void CompoundFileReader::touchFile(const char* name){ + directory->touchFile(name); +} + +bool CompoundFileReader::doDeleteFile(const char* /*name*/){ + _CLTHROWA(CL_ERR_UnsupportedOperation,"UnsupportedOperationException: CompoundFileReader::doDeleteFile"); +} + +void CompoundFileReader::renameFile(const char* /*from*/, const char* /*to*/){ + _CLTHROWA(CL_ERR_UnsupportedOperation,"UnsupportedOperationException: CompoundFileReader::renameFile"); +} + +int64_t CompoundFileReader::fileLength(const char* name) const{ + ReaderFileEntry* e = entries->get((char*)name); + if (e == NULL){ + char buf[CL_MAX_PATH + 30]; + strcpy(buf,"File "); + strncat(buf,name,CL_MAX_PATH ); + strcat(buf," does not exist"); + _CLTHROWA(CL_ERR_IO,buf); + } + return e->length; +} +IndexOutput* CompoundFileReader::createOutput(const char* /*name*/){ + _CLTHROWA(CL_ERR_UnsupportedOperation,"UnsupportedOperationException: CompoundFileReader::createOutput"); +} +LuceneLock* CompoundFileReader::makeLock(const char* /*name*/){ + _CLTHROWA(CL_ERR_UnsupportedOperation,"UnsupportedOperationException: CompoundFileReader::makeLock"); +} + +string CompoundFileReader::toString() const{ + return string("CompoundFileReader@") + fileName; +} + + + +class CompoundFileWriter::Internal{ +public: + CL_NS(store)::Directory* directory; + string fileName; + + CL_NS(util)::CLHashSet ids; + + typedef CL_NS(util)::CLLinkedList > EntriesType; + EntriesType* entries; + + bool merged; + SegmentMerger::CheckAbort* checkAbort; + + Internal(): + ids(true), + entries(_CLNEW EntriesType(true)) + { + + } + ~Internal(){ + _CLDELETE(entries); + } +}; +CompoundFileWriter::CompoundFileWriter(Directory* dir, const char* name, SegmentMerger::CheckAbort* checkAbort){ + _internal = _CLNEW Internal; + if (dir == NULL) + _CLTHROWA(CL_ERR_NullPointer,"directory cannot be null"); + if (name == NULL) + _CLTHROWA(CL_ERR_NullPointer,"name cannot be null"); + _internal->merged = false; + _internal->checkAbort = checkAbort; + _internal->directory = dir; + _internal->fileName = name; +} + +CompoundFileWriter::~CompoundFileWriter(){ + _CLDELETE(_internal); +} + +Directory* CompoundFileWriter::getDirectory(){ + return _internal->directory; +} + +/** Returns the name of the compound file. */ +const char* CompoundFileWriter::getName() const{ + return _internal->fileName.c_str(); +} + +void CompoundFileWriter::addFile(const char* file){ + if (_internal->merged) + _CLTHROWA(CL_ERR_IO,"Can't add extensions after merge has been called"); + + if (file == NULL) + _CLTHROWA(CL_ERR_NullPointer,"file cannot be null"); + + if (_internal->ids.find((char*)file)!=_internal->ids.end()){ + char buf[CL_MAX_PATH + 30]; + strcpy(buf,"File "); + strncat(buf,file,CL_MAX_PATH); + strcat(buf," already added"); + _CLTHROWA(CL_ERR_IO,buf); + } + _internal->ids.insert(STRDUP_AtoA(file)); + + WriterFileEntry* entry = _CLNEW WriterFileEntry(); + STRCPY_AtoA(entry->file,file,CL_MAX_PATH); + _internal->entries->push_back(entry); +} + +void CompoundFileWriter::close(){ + if (_internal->merged) + _CLTHROWA(CL_ERR_IO,"Merge already performed"); + + if (_internal->entries->size()==0) //isEmpty() + _CLTHROWA(CL_ERR_IO,"No entries to merge have been defined"); + + _internal->merged = true; + + // open the compound stream + IndexOutput* os = NULL; + try { + os = _internal->directory->createOutput(_internal->fileName.c_str()); + + // Write the number of entries + os->writeVInt(_internal->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 + for ( CLLinkedList::iterator i=_internal->entries->begin();i!=_internal->entries->end();i++ ){ + WriterFileEntry* fe = *i; + fe->directoryOffset = os->getFilePointer(); + os->writeLong(0); // for now + os->writeString(fe->file); + } + } + + // Open the files and copy their data into the stream. + // Remember the locations of each file's data section. + { //msvc6 for scope fix + const int32_t bufferLength = 16384; + uint8_t buffer[bufferLength]; + for ( CL_NS(util)::CLLinkedList::iterator i=_internal->entries->begin();i!=_internal->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::iterator i=_internal->entries->begin(); + i!=_internal->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 = _internal->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)cl_min((int64_t)chunk, remainder); + is->readBytes(buffer, len); + os->writeBytes(buffer, len); + remainder -= len; + + if (_internal->checkAbort != NULL) + // Roughly every 2 MB we will check if + // it's time to abort + _internal->checkAbort->work(80); + } + + // 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 after copying") + _T(": %d (id: %s, length: %d, buffer size: %d)"), + (int)remainder,source->file,(int)length,(int)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"),(int)diff,(int)length); + _CLTHROWT(CL_ERR_IO,buf); + } + } _CLFINALLY ( + if (is != NULL){ + is->close(); + _CLDELETE(is); + } + ); +} + +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/DirectoryIndexReader.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/DirectoryIndexReader.cpp new file mode 100644 index 0000000..0456dc5 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/DirectoryIndexReader.cpp @@ -0,0 +1,305 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "DirectoryIndexReader.h" +#include "_IndexFileDeleter.h" +#include "IndexDeletionPolicy.h" +#include "_MultiSegmentReader.h" +#include "_SegmentHeader.h" +#include "IndexWriter.h" +#include "CLucene/store/Directory.h" +#include "CLucene/store/Lock.h" +#include "_SegmentInfos.h" + +CL_NS_USE(store) +CL_NS_USE(util) + +CL_NS_DEF(index) + + + void DirectoryIndexReader::doClose() { + if(closeDirectory && _directory){ + _directory->close(); + } + _CLDECDELETE(_directory); + } + + void DirectoryIndexReader::doCommit() { + if(hasChanges){ + if (segmentInfos != NULL) { + + // Default deleter (for backwards compatibility) is + // KeepOnlyLastCommitDeleter: + IndexFileDeleter deleter(_directory, + deletionPolicy == NULL ? _CLNEW KeepOnlyLastCommitDeletionPolicy() : deletionPolicy, + segmentInfos, NULL, NULL); + + // Checkpoint the state we are about to change, in + // case we have to roll back: + startCommit(); + + bool success = false; + try { + commitChanges(); + segmentInfos->write(_directory); + success = true; + } _CLFINALLY ( + + if (!success) { + + // Rollback changes that were made to + // SegmentInfos but failed to get [fully] + // committed. This way this reader instance + // remains consistent (matched to what's + // actually in the index): + rollbackCommit(); + + // Recompute deletable files & remove them (so + // partially written .del files, etc, are + // removed): + deleter.refresh(); + } + ) + + // Have the deleter remove any now unreferenced + // files due to this commit: + deleter.checkpoint(segmentInfos, true); + + if (writeLock != NULL) { + writeLock->release(); // release write lock + _CLDELETE(writeLock); + } + } + else + commitChanges(); + } + hasChanges = false; + } + + void DirectoryIndexReader::acquireWriteLock() { + if (segmentInfos != NULL) { + ensureOpen(); + if (stale) + _CLTHROWA(CL_ERR_StaleReader, "IndexReader out of date and no longer valid for delete, undelete, or setNorm operations"); + + if (writeLock == NULL) { + LuceneLock* writeLock = _directory->makeLock(IndexWriter::WRITE_LOCK_NAME); + if (!writeLock->obtain(IndexWriter::WRITE_LOCK_TIMEOUT)) { // obtain write lock + string message = string("Index locked for write: ") + writeLock->getObjectName(); + _CLDELETE(writeLock); + _CLTHROWA(CL_ERR_LockObtainFailed, message.c_str()); + } + 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(writeLock); + _CLTHROWA(CL_ERR_StaleReader, "IndexReader out of date and no longer valid for delete, undelete, or setNorm operations"); + } + } + } + } + + void DirectoryIndexReader::init(Directory* __directory, SegmentInfos* segmentInfos, bool closeDirectory) { + this->deletionPolicy = NULL; + this->stale = false; + this->writeLock = NULL; + this->rollbackSegmentInfos = NULL; + this->_directory = _CL_POINTER(__directory); + this->segmentInfos = segmentInfos; + this->closeDirectory = closeDirectory; + } + + DirectoryIndexReader::DirectoryIndexReader(): + IndexReader() + { + } + DirectoryIndexReader::~DirectoryIndexReader(){ + try { + if (writeLock != NULL) { + writeLock->release(); // release write lock + writeLock = NULL; + } + }catch(...){ + } + _CLDELETE(segmentInfos); + _CLDELETE(rollbackSegmentInfos); + } + DirectoryIndexReader::DirectoryIndexReader(Directory* __directory, SegmentInfos* segmentInfos, bool closeDirectory): + IndexReader() + { + init(__directory, segmentInfos, closeDirectory); + } + + class DirectoryIndexReader::FindSegmentsFile_Open: public SegmentInfos::FindSegmentsFile{ + bool closeDirectory; + IndexDeletionPolicy* deletionPolicy; + protected: + DirectoryIndexReader* doBody(const char* segmentFileName) { + + SegmentInfos* infos = _CLNEW SegmentInfos; + infos->read(directory, segmentFileName); + + DirectoryIndexReader* reader; + + if (infos->size() == 1) { // index is optimized + reader = SegmentReader::get(infos, infos->info(0), closeDirectory); + } else { + reader = _CLNEW MultiSegmentReader(directory, infos, closeDirectory); + } + reader->setDeletionPolicy(deletionPolicy); + return reader; + } + public: + FindSegmentsFile_Open( bool closeDirectory, IndexDeletionPolicy* deletionPolicy, + CL_NS(store)::Directory* dir ): + SegmentInfos::FindSegmentsFile(dir) + { + this->closeDirectory = closeDirectory; + this->deletionPolicy = deletionPolicy; + } + }; + + DirectoryIndexReader* DirectoryIndexReader::open(Directory* __directory, bool closeDirectory, IndexDeletionPolicy* deletionPolicy) { + DirectoryIndexReader::FindSegmentsFile_Open runner(closeDirectory, deletionPolicy, __directory); + return runner.run(); + } + + + class DirectoryIndexReader::FindSegmentsFile_Reopen: public SegmentInfos::FindSegmentsFile{ + bool closeDirectory; + IndexDeletionPolicy* deletionPolicy; + DirectoryIndexReader* _this; + protected: + DirectoryIndexReader* doBody(const char* segmentFileName) { + SegmentInfos* infos = _CLNEW SegmentInfos(); + infos->read(directory, segmentFileName); + + DirectoryIndexReader* newReader = _this->doReopen(infos); + + if (_this != newReader) { + newReader->init(directory, infos, closeDirectory); + newReader->deletionPolicy = deletionPolicy; + } + + return newReader; + } + public: + FindSegmentsFile_Reopen( bool closeDirectory, IndexDeletionPolicy* deletionPolicy, + CL_NS(store)::Directory* dir, DirectoryIndexReader* _this ): + SegmentInfos::FindSegmentsFile(dir) + { + this->closeDirectory = closeDirectory; + this->deletionPolicy = deletionPolicy; + this->_this = _this; + } + }; + + IndexReader* DirectoryIndexReader::reopen(){ + SCOPED_LOCK_MUTEX(THIS_LOCK) + ensureOpen(); + + if (this->hasChanges || this->isCurrent()) { + // the index hasn't changed - nothing to do here + return this; + } + FindSegmentsFile_Reopen runner(closeDirectory, deletionPolicy, _directory, this); + IndexReader* ret = runner.run(); + + //disown this memory... + this->writeLock = NULL; + this->_directory = NULL; + this->deletionPolicy = NULL; + + return ret; + } + + void DirectoryIndexReader::setDeletionPolicy(IndexDeletionPolicy* deletionPolicy) { + this->deletionPolicy = deletionPolicy; + } + + /** Returns the directory this index resides in. + */ + Directory* DirectoryIndexReader::directory() { + ensureOpen(); + return _directory; + } + + /** + * Version number when this IndexReader was opened. + */ + int64_t DirectoryIndexReader::getVersion() { + ensureOpen(); + return segmentInfos->getVersion(); + } + + /** + * Check whether this IndexReader is still using the + * current (i.e., most recently committed) version of the + * index. If a writer has committed any changes to the + * index since this reader was opened, this will return + * false, in which case you must open a _CLNEW + * IndexReader in order to see the changes. See the + * description of the autoCommit + * flag which controls when the {@link IndexWriter} + * actually commits changes to the index. + * + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + bool DirectoryIndexReader::isCurrent(){ + ensureOpen(); + return SegmentInfos::readCurrentVersion(_directory) == segmentInfos->getVersion(); + } + + /** + * Checks is the index is optimized (if it has a single segment and no deletions) + * @return true if the index is optimized; false otherwise + */ + bool DirectoryIndexReader::isOptimized() { + ensureOpen(); + return segmentInfos->size() == 1 && hasDeletions() == false; + } + + /** + * Should internally checkpoint state that will change + * during commit so that we can rollback if necessary. + */ + void DirectoryIndexReader::startCommit() { + if (segmentInfos != NULL) { + if (rollbackSegmentInfos != NULL) { + _CLDELETE(rollbackSegmentInfos); + } + rollbackSegmentInfos = segmentInfos->clone(); + } + rollbackHasChanges = hasChanges; + } + + /** + * Rolls back state to just before the commit (this is + * called by commit() if there is some exception while + * committing). + */ + void DirectoryIndexReader::rollbackCommit() { + if (segmentInfos != NULL) { + for(int32_t i=0;isize();i++) { + // Rollback each segmentInfo. Because the + // SegmentReader holds a reference to the + // SegmentInfo we can't [easily] just replace + // segmentInfos, so we reset it in place instead: + segmentInfos->info(i)->reset(rollbackSegmentInfos->info(i)); + } + _CLDELETE(rollbackSegmentInfos); + } + + hasChanges = rollbackHasChanges; + } + +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/DirectoryIndexReader.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/DirectoryIndexReader.h new file mode 100644 index 0000000..62d3150 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/DirectoryIndexReader.h @@ -0,0 +1,139 @@ +/*------------------------------------------------------------------------------ +* 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_DirectoryIndexReader_ +#define _lucene_index_DirectoryIndexReader_ + +#include "IndexReader.h" + +CL_CLASS_DEF(store,LuceneLock) + +CL_NS_DEF(index) +class IndexDeletionPolicy; + +/** + * IndexReader implementation that has access to a Directory. + * Instances that have a SegmentInfos object (i. e. segmentInfos != null) + * "own" the directory, which means that they try to acquire a write lock + * whenever index modifications are performed. + */ +class CLUCENE_EXPORT DirectoryIndexReader: public IndexReader { +private: + IndexDeletionPolicy* deletionPolicy; + + SegmentInfos* segmentInfos; + CL_NS(store)::LuceneLock* writeLock; + bool stale; + + /** Used by commit() to record pre-commit state in case + * rollback is necessary */ + bool rollbackHasChanges; + SegmentInfos* rollbackSegmentInfos; + + class FindSegmentsFile_Open; + class FindSegmentsFile_Reopen; + friend class FindSegmentsFile_Open; + friend class FindSegmentsFile_Reopen; + +protected: + CL_NS(store)::Directory* _directory; + bool closeDirectory; + DirectoryIndexReader(); + + /** + * Re-opens the index using the passed-in SegmentInfos + */ + virtual DirectoryIndexReader* doReopen(SegmentInfos* infos) = 0; + + + void doClose(); + + /** + * Commit changes resulting from delete, undeleteAll, or + * setNorm operations + * + * If an exception is hit, then either no changes or all + * changes will have been committed to the index + * (transactional semantics). + * @throws IOException if there is a low-level IO error + */ + void doCommit(); + + virtual void commitChanges() = 0; + + /** + * Tries to acquire the WriteLock on this directory-> + * this method is only valid if this IndexReader is directory owner. + * + * @throws StaleReaderException if the index has changed + * since this reader was opened + * @throws CorruptIndexException if the index is corrupt + * @throws LockObtainFailedException if another writer + * has this index open (write.lock could not + * be obtained) + * @throws IOException if there is a low-level IO error + */ + void acquireWriteLock(); + +public: + virtual ~DirectoryIndexReader(); + void init(CL_NS(store)::Directory* directory, SegmentInfos* segmentInfos, bool closeDirectory); + + CLUCENE_LOCAL_DECL DirectoryIndexReader(CL_NS(store)::Directory* directory, SegmentInfos* segmentInfos, bool closeDirectory); + CLUCENE_LOCAL_DECL static DirectoryIndexReader* open(CL_NS(store)::Directory* directory, bool closeDirectory, IndexDeletionPolicy* deletionPolicy); + + IndexReader* reopen(); + + void setDeletionPolicy(IndexDeletionPolicy* deletionPolicy); + + /** Returns the directory this index resides in. + */ + CL_NS(store)::Directory* directory(); + + /** + * Version number when this IndexReader was opened. + */ + int64_t getVersion(); + + /** + * Check whether this IndexReader is still using the + * current (i.e., most recently committed) version of the + * index. If a writer has committed any changes to the + * index since this reader was opened, this will return + * false, in which case you must open a _CLNEW + * IndexReader in order to see the changes. See the + * description of the autoCommit + * flag which controls when the {@link IndexWriter} + * actually commits changes to the index. + * + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + bool isCurrent(); + + /** + * Checks is the index is optimized (if it has a single segment and no deletions) + * @return true if the index is optimized; false otherwise + */ + bool isOptimized(); + + /** + * Should internally checkpoint state that will change + * during commit so that we can rollback if necessary. + */ + CLUCENE_LOCAL_DECL void startCommit(); + + /** + * Rolls back state to just before the commit (this is + * called by commit() if there is some exception while + * committing). + */ + CLUCENE_LOCAL_DECL void rollbackCommit(); + +}; + +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/DocumentsWriter.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/DocumentsWriter.cpp new file mode 100644 index 0000000..15eb6f0 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/DocumentsWriter.cpp @@ -0,0 +1,1670 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" + +#include "CLucene/store/Directory.h" +#include "CLucene/store/IndexOutput.h" +#include "CLucene/store/_RAMDirectory.h" +#include "CLucene/util/Array.h" +#include "CLucene/util/_Arrays.h" +#include "CLucene/util/Misc.h" +#include "CLucene/util/CLStreams.h" +#include "CLucene/document/Field.h" +#include "CLucene/search/Similarity.h" +#include "CLucene/document/Document.h" +#include "_FieldInfos.h" +#include "_TermInfo.h" +#include "_CompoundFile.h" +#include "IndexWriter.h" +#include "_IndexFileNames.h" +#include "_FieldsWriter.h" +#include "Term.h" +#include "_Term.h" +#include "_TermInfo.h" +#include "_TermVector.h" +#include "_TermInfosWriter.h" +#include "_SkipListWriter.h" +#include "CLucene/analysis/AnalysisHeader.h" +#include "CLucene/search/Similarity.h" +#include "_TermInfosWriter.h" +#include "_FieldsWriter.h" +#include "_DocumentsWriter.h" +#include +#include +#include + +CL_NS_USE(util) +CL_NS_USE(store) +CL_NS_USE(analysis) +CL_NS_USE(document) +CL_NS_USE(search) +CL_NS_DEF(index) + + +const int32_t DocumentsWriter::MAX_THREAD_STATE = 5; +const uint8_t DocumentsWriter::defaultNorm = Similarity::encodeNorm(1.0f); +const int32_t DocumentsWriter::nextLevelArray[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 9}; +const int32_t DocumentsWriter::levelSizeArray[10] = {5, 14, 20, 30, 40, 40, 80, 80, 120, 200}; +const int32_t DocumentsWriter::POSTING_NUM_BYTE = OBJECT_HEADER_BYTES + 9*INT_NUM_BYTE + 5*POINTER_NUM_BYTE; + +const int32_t DocumentsWriter::BYTE_BLOCK_SHIFT = 15; +const int32_t DocumentsWriter::BYTE_BLOCK_SIZE = (int32_t)pow(2.0, BYTE_BLOCK_SHIFT); +const int32_t DocumentsWriter::BYTE_BLOCK_MASK = BYTE_BLOCK_SIZE - 1; +const int32_t DocumentsWriter::BYTE_BLOCK_NOT_MASK = ~BYTE_BLOCK_MASK; + +const int32_t DocumentsWriter::CHAR_BLOCK_SHIFT = 14; +const int32_t DocumentsWriter::CHAR_BLOCK_SIZE = (int32_t)pow(2.0, CHAR_BLOCK_SHIFT); +const int32_t DocumentsWriter::CHAR_BLOCK_MASK = CHAR_BLOCK_SIZE - 1; + +int32_t DocumentsWriter::OBJECT_HEADER_BYTES = 8; +int32_t DocumentsWriter::OBJECT_POINTER_BYTES = 4; // TODO: should be 8 on 64-bit platform +int32_t DocumentsWriter::BYTES_PER_CHAR = 2; +int32_t DocumentsWriter::BYTES_PER_INT = 4; + +const int32_t DocumentsWriter::POINTER_NUM_BYTE = 4; +const int32_t DocumentsWriter::INT_NUM_BYTE = 4; +const int32_t DocumentsWriter::CHAR_NUM_BYTE = 2; //TODO: adjust for c++... + +const int32_t DocumentsWriter::MAX_TERM_LENGTH = DocumentsWriter::CHAR_BLOCK_SIZE-1; + + + +AbortException::AbortException(CLuceneError& _err, DocumentsWriter* docWriter): + err(_err) +{ + docWriter->setAborting(); +} + +DocumentsWriter::DocumentsWriter(CL_NS(store)::Directory* directory, IndexWriter* writer): + bufferedDeleteTerms(_CLNEW TermNumMapType(true, true)), + freeCharBlocks(FreeCharBlocksType(true)), + freeByteBlocks(FreeByteBlocksType(true)), + waitingThreadStates( CL_NS(util)::ValueArray(MAX_THREAD_STATE) ) +{ + numBytesAlloc = 0; + numBytesUsed = 0; + this->directory = directory; + this->writer = writer; + this->hasNorms = this->bufferIsFull = false; + fieldInfos = _CLNEW FieldInfos(); + + maxBufferedDeleteTerms = IndexWriter::DEFAULT_MAX_BUFFERED_DELETE_TERMS; + ramBufferSize = (int64_t) (IndexWriter::DEFAULT_RAM_BUFFER_SIZE_MB*1024*1024); + maxBufferedDocs = IndexWriter::DEFAULT_MAX_BUFFERED_DOCS; + + numBufferedDeleteTerms = 0; + copyByteBuffer = _CL_NEWARRAY(uint8_t, 4096); + *copyByteBuffer = 0; + + this->closed = this->flushPending = false; + _files = NULL; + _abortedFiles = NULL; + skipListWriter = NULL; + infoStream = NULL; + fieldsWriter = NULL; + tvx = tvf = tvd = NULL; + postingsFreeCountDW = postingsAllocCountDW = numWaiting = pauseThreads = abortCount = 0; + docStoreOffset = nextDocID = numDocsInRAM = numDocsInStore = nextWriteDocID = 0; +} +DocumentsWriter::~DocumentsWriter(){ + _CLLDELETE(bufferedDeleteTerms); + _CLLDELETE(skipListWriter); + _CLDELETE_LARRAY(copyByteBuffer); + _CLLDELETE(_files); + _CLLDELETE(fieldInfos); + + for(size_t i=0;ipostingsFreeListDW.values){ + if (this->postingsFreeCountDW < this->postingsFreeListDW.length) { + memset(this->postingsFreeListDW.values + this->postingsFreeCountDW + , 0 + , sizeof(Posting*)); + } + postingsFreeListDW.deleteUntilNULL(); + } +} + +void DocumentsWriter::setInfoStream(std::ostream* infoStream) { + this->infoStream = infoStream; +} + +void DocumentsWriter::setRAMBufferSizeMB(float_t mb) { + if ( (int32_t)mb == IndexWriter::DISABLE_AUTO_FLUSH) { + ramBufferSize = IndexWriter::DISABLE_AUTO_FLUSH; + } else { + ramBufferSize = (int64_t) (mb*1024*1024); + } +} + +float_t DocumentsWriter::getRAMBufferSizeMB() { + if (ramBufferSize == IndexWriter::DISABLE_AUTO_FLUSH) { + return (float_t)ramBufferSize; + } else { + return ramBufferSize/1024.0/1024.0; + } +} + +void DocumentsWriter::setMaxBufferedDocs(int32_t count) { + maxBufferedDocs = count; +} + +int32_t DocumentsWriter::getMaxBufferedDocs() { + return maxBufferedDocs; +} + +std::string DocumentsWriter::getSegment() { + return segment; +} + +int32_t DocumentsWriter::getNumDocsInRAM() { + return numDocsInRAM; +} + +const std::string& DocumentsWriter::getDocStoreSegment() { + return docStoreSegment; +} + +int32_t DocumentsWriter::getDocStoreOffset() { + return docStoreOffset; +} + +std::string DocumentsWriter::closeDocStore() { + + assert (allThreadsIdle()); + + const std::vector& flushedFiles = files(); + + if (infoStream != NULL) + (*infoStream) << string("\ncloseDocStore: ") << Misc::toString((int32_t)flushedFiles.size()) << string(" files to flush to segment ") << + docStoreSegment << string(" numDocs=") << Misc::toString(numDocsInStore) << string("\n"); + + if (flushedFiles.size() > 0) { + _CLDELETE(_files); + + if (tvx != NULL) { + // At least one doc in this run had term vectors enabled + assert ( !docStoreSegment.empty()); + tvx->close(); + _CLDELETE(tvx); + tvf->close(); + _CLDELETE(tvf); + tvd->close(); + _CLDELETE(tvd); + + assert ( 4+numDocsInStore*8 == directory->fileLength( (docStoreSegment + "." + IndexFileNames::VECTORS_INDEX_EXTENSION).c_str()) ); // "after flush: tvx size mismatch: " + numDocsInStore + " docs vs " + directory->fileLength(docStoreSegment + "." + IndexFileNames::VECTORS_INDEX_EXTENSION) + " length in bytes of " + docStoreSegment + "." + IndexFileNames::VECTORS_INDEX_EXTENSION; + } + + if (fieldsWriter != NULL) { + assert (!docStoreSegment.empty()); + fieldsWriter->close(); + _CLDELETE(fieldsWriter); + + assert(numDocsInStore*8 == directory->fileLength( (docStoreSegment + "." + IndexFileNames::FIELDS_INDEX_EXTENSION).c_str() ) );// "after flush: fdx size mismatch: " + numDocsInStore + " docs vs " + directory->fileLength(docStoreSegment + "." + IndexFileNames::FIELDS_INDEX_EXTENSION) + " length in bytes of " + docStoreSegment + "." + IndexFileNames::FIELDS_INDEX_EXTENSION; + } + + std::string s = docStoreSegment; + docStoreSegment.clear(); + docStoreOffset = 0; + numDocsInStore = 0; + return s; + } else { + return ""; + } +} + +const std::vector* DocumentsWriter::abortedFiles() { + return _abortedFiles; +} + +const std::vector& DocumentsWriter::files() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + + if (_files != NULL) + return *_files; + + _files = _CLNEW std::vector; + + // Stored fields: + if (fieldsWriter != NULL) { + assert ( !docStoreSegment.empty()); + _files->push_back(docStoreSegment + "." + IndexFileNames::FIELDS_EXTENSION); + _files->push_back(docStoreSegment + "." + IndexFileNames::FIELDS_INDEX_EXTENSION); + } + + // Vectors: + if (tvx != NULL) { + assert ( !docStoreSegment.empty()); + _files->push_back(docStoreSegment + "." + IndexFileNames::VECTORS_INDEX_EXTENSION); + _files->push_back(docStoreSegment + "." + IndexFileNames::VECTORS_FIELDS_EXTENSION); + _files->push_back(docStoreSegment + "." + IndexFileNames::VECTORS_DOCUMENTS_EXTENSION); + } + + return *_files; +} + +void DocumentsWriter::setAborting() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + + abortCount++; +} + +void DocumentsWriter::abort(AbortException* ae) { + SCOPED_LOCK_MUTEX(THIS_LOCK) + + // Anywhere that throws an AbortException must first + // mark aborting to make sure while the exception is + // unwinding the un-synchronized stack, no thread grabs + // the corrupt ThreadState that hit the aborting + // exception: + assert (ae == NULL || abortCount>0); + + try { + + if (infoStream != NULL) + (*infoStream) << string("docWriter: now abort\n"); + + // Forcefully remove waiting ThreadStates from line + for(int32_t i=0;iisIdle = true; + numWaiting = 0; + + // Wait for all other threads to finish with DocumentsWriter: + pauseAllThreads(); + + assert (0 == numWaiting); + + try { + bufferedDeleteTerms->clear(); + bufferedDeleteDocIDs.clear(); + numBufferedDeleteTerms = 0; + + try { + const std::vector& __abortedFiles = files(); + _abortedFiles = _CLNEW std::vector; + for ( std::vector::const_iterator itr = __abortedFiles.begin(); + itr != __abortedFiles.end(); itr ++ ){ + _abortedFiles->push_back(*itr); + } + } catch (...) { + _CLDELETE(_abortedFiles); + } + + docStoreSegment.clear(); + numDocsInStore = 0; + docStoreOffset = 0; + _CLDELETE(_files); + + // Clear vectors & fields from ThreadStates + for(size_t i=0;itvfLocal->reset(); + state->fdtLocal->reset(); + if (state->localFieldsWriter != NULL) { + try { + state->localFieldsWriter->close(); + } catch (...) { + } + _CLDELETE(state->localFieldsWriter); + } + } + + // Reset vectors writer + if (tvx != NULL) { + try { + tvx->close(); + } catch (...) { + } + _CLDELETE(tvx); + } + if (tvd != NULL) { + try { + tvd->close(); + } catch (...) { + } + _CLDELETE(tvd); + } + if (tvf != NULL) { + try { + tvf->close(); + } catch (...) { + } + _CLDELETE(tvf); + } + + // Reset fields writer + if (fieldsWriter != NULL) { + try { + fieldsWriter->close(); + } catch (...) { + } + _CLDELETE(fieldsWriter); + } + + // Discard pending norms: + const int32_t numField = fieldInfos->size(); + for (int32_t i=0;ifieldInfo(i); + if (fi->isIndexed && !fi->omitNorms) { + BufferedNorms* n = norms[i]; + if (n != NULL) + try { + n->reset(); + } catch (...) { + } + } + } + + // Reset all postings data + resetPostingsData(); + + } _CLFINALLY ( + resumeAllThreads(); + ) + + // If we have a root cause exception, re-throw it now: + if (ae != NULL) { + CLuceneError& t = ae->err; + throw t; + } + } _CLFINALLY ( + if (ae != NULL) + abortCount--; + CONDITION_NOTIFYALL(THIS_WAIT_CONDITION) + ) +} + +void DocumentsWriter::resetPostingsData() { + // All ThreadStates should be idle when we are called + assert ( allThreadsIdle() ); + threadBindings.clear(); + segment.erase(); + numDocsInRAM = 0; + nextDocID = 0; + nextWriteDocID = 0; + _CLDELETE(_files); + balanceRAM(); + bufferIsFull = false; + flushPending = false; + for(size_t i=0;inumThreads = 0; + threadStates[i]->resetPostings(); + } + numBytesUsed = 0; +} + +// Returns true if an abort is in progress +bool DocumentsWriter::pauseAllThreads() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + + pauseThreads++; + while(!allThreadsIdle()) { + CONDITION_WAIT(THIS_LOCK, THIS_WAIT_CONDITION) + } + return abortCount > 0; +} + +void DocumentsWriter::resumeAllThreads() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + + pauseThreads--; + assert ( pauseThreads >= 0 ); + if (0 == pauseThreads){ + CONDITION_NOTIFYALL(THIS_WAIT_CONDITION) + } +} + +bool DocumentsWriter::allThreadsIdle() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + + for(size_t i=0;iisIdle) + return false; + return true; +} + +int32_t DocumentsWriter::flush(bool _closeDocStore) { + SCOPED_LOCK_MUTEX(THIS_LOCK) + + assert ( allThreadsIdle() ); + + if (segment.empty()){ + // In case we are asked to flush an empty segment + segment = writer->newSegmentName(); + } + + newFiles.clear(); + + docStoreOffset = numDocsInStore; + + int32_t docCount; + + assert ( numDocsInRAM > 0 ); + + if (infoStream != NULL) + (*infoStream) << string("\nflush postings as segment ") << segment << string(" numDocs=") << Misc::toString(numDocsInRAM) << string("\n"); + + bool success = false; + + try { + + if (_closeDocStore) { + assert ( !docStoreSegment.empty()); + assert ( docStoreSegment.compare(segment) == 0 ); + const std::vector& tmp = files(); + for (std::vector::const_iterator itr = tmp.begin(); + itr != tmp.end(); itr++ ) + newFiles.push_back(*itr); + closeDocStore(); + } + + fieldInfos->write(directory, (segment + ".fnm").c_str() ); + + docCount = numDocsInRAM; + + writeSegment(newFiles); //write new files directly... + + success = true; + + } _CLFINALLY( + if (!success) + abort(NULL); + ) + + return docCount; +} + +void DocumentsWriter::createCompoundFile(const std::string& segment) +{ + CompoundFileWriter* cfsWriter = _CLNEW CompoundFileWriter(directory, (segment + "." + IndexFileNames::COMPOUND_FILE_EXTENSION).c_str()); + for (std::vector::const_iterator itr = newFiles.begin(); + itr != newFiles.end(); itr ++ ) + cfsWriter->addFile( (*itr).c_str() ); + + // Perform the merge + cfsWriter->close(); + _CLDELETE(cfsWriter); +} + +bool DocumentsWriter::setFlushPending() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + + if (flushPending) + return false; + else { + flushPending = true; + return true; + } +} + +void DocumentsWriter::clearFlushPending() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + + flushPending = false; +} + +void DocumentsWriter::writeNorms(const std::string& segmentName, int32_t totalNumDoc) { + IndexOutput* normsOut = directory->createOutput( (segmentName + "." + IndexFileNames::NORMS_EXTENSION).c_str() ); + + try { + normsOut->writeBytes(SegmentMerger::NORMS_HEADER, SegmentMerger::NORMS_HEADER_length); + + const int32_t numField = fieldInfos->size(); + + for (int32_t fieldIdx=0;fieldIdxfieldInfo(fieldIdx); + if (fi->isIndexed && !fi->omitNorms) { + BufferedNorms* n = norms[fieldIdx]; + int64_t v; + if (n == NULL) + v = 0; + else { + v = n->out.getFilePointer(); + n->out.writeTo(normsOut); + n->reset(); + } + if (v < totalNumDoc) + fillBytes(normsOut, defaultNorm, (int32_t) (totalNumDoc-v)); + } + } + } _CLFINALLY ( + normsOut->close(); + _CLDELETE(normsOut); + ) +} + +void DocumentsWriter::writeSegment(std::vector& flushedFiles) { + + assert ( allThreadsIdle() ); + + assert ( nextDocID == numDocsInRAM ); + + const std::string segmentName = segment; + + TermInfosWriter* termsOut = _CLNEW TermInfosWriter(directory, segmentName.c_str(), fieldInfos, + writer->getTermIndexInterval()); + + IndexOutput* freqOut = directory->createOutput( (segmentName + ".frq").c_str() ); + IndexOutput* proxOut = directory->createOutput( (segmentName + ".prx").c_str() ); + + // Gather all FieldData's that have postings, across all + // ThreadStates + std::vector allFields; + assert ( allThreadsIdle() ); + for(size_t i=0;itrimFields(); + const int32_t numFields = state->numAllFieldData; + for(int32_t j=0;jallFieldDataArray[j]; + if (fp->numPostings > 0) + allFields.push_back(fp); + } + } + + // Sort by field name + std::sort(allFields.begin(),allFields.end(),ThreadState::FieldData::sort); + const int32_t numAllFields = allFields.size(); + + skipListWriter = _CLNEW DefaultSkipListWriter(termsOut->skipInterval, + termsOut->maxSkipLevels, + numDocsInRAM, freqOut, proxOut); + + int32_t start = 0; + while(start < numAllFields) { + + const TCHAR* fieldName = allFields[start]->fieldInfo->name; + + int32_t end = start+1; + while(end < numAllFields && _tcscmp(allFields[end]->fieldInfo->name, fieldName)==0 ) + end++; + + ValueArray fields(end-start); + for(int32_t i=start;iresetPostingArrays(); + + start = end; + } + + freqOut->close(); + _CLDELETE(freqOut); + proxOut->close(); + _CLDELETE(proxOut); + termsOut->close(); + _CLDELETE(termsOut); + _CLDELETE(skipListWriter); + + // Record all files we have flushed + flushedFiles.push_back(segmentFileName(IndexFileNames::FIELD_INFOS_EXTENSION)); + flushedFiles.push_back(segmentFileName(IndexFileNames::FREQ_EXTENSION)); + flushedFiles.push_back(segmentFileName(IndexFileNames::PROX_EXTENSION)); + flushedFiles.push_back(segmentFileName(IndexFileNames::TERMS_EXTENSION)); + flushedFiles.push_back(segmentFileName(IndexFileNames::TERMS_INDEX_EXTENSION)); + + if (hasNorms) { + writeNorms(segmentName, numDocsInRAM); + flushedFiles.push_back(segmentFileName(IndexFileNames::NORMS_EXTENSION)); + } + + if (infoStream != NULL) { + const int64_t newSegmentSize = segmentSize(segmentName); + + (*infoStream) << string(" oldRAMSize=") << Misc::toString(numBytesUsed) << + string(" newFlushedSize=") << Misc::toString(newSegmentSize) << + string(" docs/MB=") << Misc::toString((float_t)(numDocsInRAM/(newSegmentSize/1024.0/1024.0))) << + string(" new/old=") << Misc::toString((float_t)(100.0*newSegmentSize/numBytesUsed)) << string("%\n"); + } + + resetPostingsData(); + + nextDocID = 0; + nextWriteDocID = 0; + numDocsInRAM = 0; + _CLDELETE(_files); + + // Maybe downsize this->postingsFreeListDW array + if (this->postingsFreeListDW.length > 1.5*this->postingsFreeCountDW) { + int32_t newSize = this->postingsFreeListDW.length; + while(newSize > 1.25*this->postingsFreeCountDW) { + newSize = (int32_t) (newSize*0.8); + } + this->postingsFreeListDW.resize(newSize); + } + +} + +std::string DocumentsWriter::segmentFileName(const char* extension) { + return segmentFileName( string(extension) ); +} +std::string DocumentsWriter::segmentFileName(const std::string& extension) { + return segment + "." + extension; +} + +int32_t DocumentsWriter::compareText(const TCHAR* text1, const TCHAR* text2) { +int32_t pos1=0; +int32_t pos2=0; + while(true) { + const TCHAR c1 = text1[pos1++]; + const TCHAR c2 = text2[pos2++]; + if (c1 < c2) + if (CLUCENE_END_OF_WORD == c2) + return 1; + else + return -1; + else if (c2 < c1) + if (CLUCENE_END_OF_WORD == c1) + return -1; + else + return 1; + else if (CLUCENE_END_OF_WORD == c1) + return 0; + } +} + + +void DocumentsWriter::appendPostings(ArrayBase* fields, + TermInfosWriter* termsOut, + IndexOutput* freqOut, + IndexOutput* proxOut) { + + const int32_t fieldNumber = (*fields)[0]->fieldInfo->number; + int32_t numFields = fields->length; + + ObjectArray mergeStatesData(numFields); + ValueArray mergeStates(numFields); + + for(int32_t i=0;ifield = (*fields)[i]; + fms->postings = fms->field->sortPostings(); + + assert ( fms->field->fieldInfo == (*fields)[0]->fieldInfo ); + + // Should always be true + bool result = fms->nextTerm(); + assert (result); + } + memcpy(mergeStates.values,mergeStatesData.values,sizeof(FieldMergeState*) * numFields); + + const int32_t skipInterval = termsOut->skipInterval; + currentFieldStorePayloads = (*fields)[0]->fieldInfo->storePayloads; + + ValueArray termStates(numFields); + + while(numFields > 0) { + + // Get the next term to merge + termStates.values[0] = mergeStates[0]; + int32_t numToMerge = 1; + + for(int32_t i=1;itext; + const int32_t textOffset = mergeStates[i]->textOffset; + const int32_t cmp = compareText(text+ textOffset, termStates[0]->text + termStates[0]->textOffset); + + if (cmp < 0) { + termStates.values[0] = mergeStates[i]; + numToMerge = 1; + } else if (cmp == 0) + termStates.values[numToMerge++] = mergeStates[i]; + } + + int32_t df = 0; + int32_t lastPayloadLength = -1; + + int32_t lastDoc = 0; + + const TCHAR* start = termStates[0]->text + termStates[0]->textOffset; + const TCHAR* pos = start; + while(*pos != CLUCENE_END_OF_WORD) + pos++; + + int64_t freqPointer = freqOut->getFilePointer(); + int64_t proxPointer = proxOut->getFilePointer(); + + skipListWriter->resetSkip(); + + // Now termStates has numToMerge FieldMergeStates + // which all share the same term. Now we must + // interleave the docID streams. + while(numToMerge > 0) { + + if ((++df % skipInterval) == 0) { + skipListWriter->setSkipData(lastDoc, currentFieldStorePayloads, lastPayloadLength); + skipListWriter->bufferSkip(df); + } + + FieldMergeState* minState = termStates[0]; + for(int32_t i=1;idocID < minState->docID) + minState = termStates[i]; + + const int32_t doc = minState->docID; + const int32_t termDocFreq = minState->termFreq; + + assert (doc < numDocsInRAM); + assert ( doc > lastDoc || df == 1 ); + + const int32_t newDocCode = (doc-lastDoc)<<1; + lastDoc = doc; + + ByteSliceReader& prox = minState->prox; + + // Carefully copy over the prox + payload info, + // changing the format to match Lucene's segment + // format. + for(int32_t j=0;jwriteVInt(code|1); + proxOut->writeVInt(payloadLength); + lastPayloadLength = payloadLength; + } else + proxOut->writeVInt(code & (~1)); + if (payloadLength > 0) + copyBytes(&prox, proxOut, payloadLength); + } else { + assert ( 0 == (code & 1) ); + proxOut->writeVInt(code>>1); + } + } + + if (1 == termDocFreq) { + freqOut->writeVInt(newDocCode|1); + } else { + freqOut->writeVInt(newDocCode); + freqOut->writeVInt(termDocFreq); + } + + if (!minState->nextDoc()) { + + // Remove from termStates + int32_t upto = 0; + for(int32_t i=0;inextTerm()) { + // OK, no more terms, so remove from mergeStates + // as well + upto = 0; + for(int32_t i=0;i 0); + + // Done merging this term + + int64_t skipPointer = skipListWriter->writeSkip(freqOut); + + // Write term + termInfo.set(df, freqPointer, proxPointer, (int32_t) (skipPointer - freqPointer)); + termsOut->add(fieldNumber, start, pos-start, &termInfo); + } +} + + +void DocumentsWriter::close() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + + closed = true; + CONDITION_NOTIFYALL(THIS_WAIT_CONDITION) +} + +DocumentsWriter::ThreadState* DocumentsWriter::getThreadState(Document* doc, Term* delTerm) { + SCOPED_LOCK_MUTEX(THIS_LOCK) + + // First, find a thread state. If this thread already + // has affinity to a specific ThreadState, use that one + // again. + ThreadState* state = NULL; + if ( threadBindings.find(_LUCENE_CURRTHREADID) == threadBindings.end() ){ + // First time this thread has called us since last flush + ThreadState* minThreadState = NULL; + for(size_t i=0;inumThreads < minThreadState->numThreads) + minThreadState = ts; + } + if (minThreadState != NULL && (minThreadState->numThreads == 0 || threadStates.length == MAX_THREAD_STATE)) { + state = minThreadState; + state->numThreads++; + } else { + // Just create a new "private" thread state + threadStates.resize(1+threadStates.length); + //fill the new position + state = threadStates.values[threadStates.length-1] = _CLNEW ThreadState(this); + } + threadBindings.put(_LUCENE_CURRTHREADID, state); + }else{ + state = threadBindings[_LUCENE_CURRTHREADID]; + } + + // Next, wait until my thread state is idle (in case + // it's shared with other threads) and for threads to + // not be paused nor a flush pending: + while(!closed && (!state->isIdle || pauseThreads != 0 || flushPending || abortCount > 0)) + CONDITION_WAIT(THIS_LOCK, THIS_WAIT_CONDITION) + + if (closed) + _CLTHROWA(CL_ERR_AlreadyClosed, "this IndexWriter is closed"); + + if (segment.empty()) + segment = writer->newSegmentName(); + + state->isIdle = false; + + try { + bool success = false; + try { + state->init(doc, nextDocID); + if (delTerm != NULL) { + addDeleteTerm(delTerm, state->docID); + state->doFlushAfter = timeToFlushDeletes(); + } + // Only increment nextDocID & numDocsInRAM on successful init + nextDocID++; + numDocsInRAM++; + + // We must at this point commit to flushing to ensure we + // always get N docs when we flush by doc count, even if + // > 1 thread is adding documents: + if (!flushPending && maxBufferedDocs != IndexWriter::DISABLE_AUTO_FLUSH + && numDocsInRAM >= maxBufferedDocs) { + flushPending = true; + state->doFlushAfter = true; + } + + success = true; + } _CLFINALLY ( + if (!success) { + // Forcefully idle this ThreadState: + state->isIdle = true; + CONDITION_NOTIFYALL(THIS_WAIT_CONDITION) + if (state->doFlushAfter) { + state->doFlushAfter = false; + flushPending = false; + } + } + ) + } catch (AbortException& ae) { + abort(&ae); + } + + return state; +} + +bool DocumentsWriter::addDocument(Document* doc, Analyzer* analyzer){ + return updateDocument(doc, analyzer, NULL); +} + +bool DocumentsWriter::updateDocument(Term* t, Document* doc, Analyzer* analyzer){ + return updateDocument(doc, analyzer, t); +} + +bool DocumentsWriter::updateDocument(Document* doc, Analyzer* analyzer, Term* delTerm) { + + // This call is synchronized but fast + ThreadState* state = getThreadState(doc, delTerm); + try { + bool success = false; + try { + try { + // This call is not synchronized and does all the work + state->processDocument(analyzer); + } _CLFINALLY ( + // This call is synchronized but fast + finishDocument(state); + ) + success = true; + } _CLFINALLY ( + if (!success) { + SCOPED_LOCK_MUTEX(THIS_LOCK) + + // If this thread state had decided to flush, we + // must clear it so another thread can flush + if (state->doFlushAfter) { + state->doFlushAfter = false; + flushPending = false; + CONDITION_NOTIFYALL(THIS_WAIT_CONDITION) + } + + // Immediately mark this document as deleted + // since likely it was partially added. This + // keeps indexing as "all or none" (atomic) when + // adding a document: + addDeleteDocID(state->docID); + } + ) + } catch (AbortException& ae) { + abort(&ae); + } + + return state->doFlushAfter || timeToFlushDeletes(); +} + +int32_t DocumentsWriter::getNumBufferedDeleteTerms() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + return numBufferedDeleteTerms; +} + +const DocumentsWriter::TermNumMapType& DocumentsWriter::getBufferedDeleteTerms() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + return *bufferedDeleteTerms; +} + +const std::vector* DocumentsWriter::getBufferedDeleteDocIDs() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + return &bufferedDeleteDocIDs; +} + +// Reset buffered deletes. +void DocumentsWriter::clearBufferedDeletes() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + DocumentsWriter::TermNumMapType::iterator term = bufferedDeleteTerms->begin(); + while ( term != bufferedDeleteTerms->end() ){ + Term* t = term->first; + _CLDELETE(term->second); + bufferedDeleteTerms->erase(term); + _CLDECDELETE(t); + term = bufferedDeleteTerms->begin(); + } + bufferedDeleteDocIDs.clear(); + numBufferedDeleteTerms = 0; + if (numBytesUsed > 0) + resetPostingsData(); +} + +bool DocumentsWriter::bufferDeleteTerms(const ArrayBase* terms) { + SCOPED_LOCK_MUTEX(THIS_LOCK) + while(pauseThreads != 0 || flushPending){ + CONDITION_WAIT(THIS_LOCK, THIS_WAIT_CONDITION) + } + for (size_t i = 0; i < terms->length; i++) + addDeleteTerm((*terms)[i], numDocsInRAM); + return timeToFlushDeletes(); +} + +bool DocumentsWriter::bufferDeleteTerm(Term* term) { + SCOPED_LOCK_MUTEX(THIS_LOCK) + while(pauseThreads != 0 || flushPending){ + CONDITION_WAIT(THIS_LOCK, THIS_WAIT_CONDITION) + } + addDeleteTerm(term, numDocsInRAM); + return timeToFlushDeletes(); +} + +bool DocumentsWriter::timeToFlushDeletes() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + return (bufferIsFull + || (maxBufferedDeleteTerms != IndexWriter::DISABLE_AUTO_FLUSH + && numBufferedDeleteTerms >= maxBufferedDeleteTerms)) + && setFlushPending(); +} + +void DocumentsWriter::setMaxBufferedDeleteTerms(int32_t _maxBufferedDeleteTerms) { + this->maxBufferedDeleteTerms = _maxBufferedDeleteTerms; +} + +int32_t DocumentsWriter::getMaxBufferedDeleteTerms() { + return maxBufferedDeleteTerms; +} + +bool DocumentsWriter::hasDeletes() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + return bufferedDeleteTerms->size() > 0 || bufferedDeleteDocIDs.size() > 0; +} + +// Buffer a term in bufferedDeleteTerms, which records the +// current number of documents buffered in ram so that the +// delete term will be applied to those documents as well +// as the disk segments. +void DocumentsWriter::addDeleteTerm(Term* term, int32_t docCount) { + SCOPED_LOCK_MUTEX(THIS_LOCK) + Num* num = bufferedDeleteTerms->get(term); + if (num == NULL) { + bufferedDeleteTerms->put(_CL_POINTER(term), new Num(docCount)); + // This is coarse approximation of actual bytes used: + numBytesUsed += ( _tcslen(term->field()) + term->textLength()) * BYTES_PER_CHAR + + 4 + 5 * OBJECT_HEADER_BYTES + 5 * OBJECT_POINTER_BYTES; + if (ramBufferSize != IndexWriter::DISABLE_AUTO_FLUSH + && numBytesUsed > ramBufferSize) { + bufferIsFull = true; + } + } else { + num->setNum(docCount); + } + numBufferedDeleteTerms++; +} + +void DocumentsWriter::addDeleteDocID(int32_t docId) { + SCOPED_LOCK_MUTEX(THIS_LOCK) + bufferedDeleteDocIDs.push_back(docId); + numBytesUsed += OBJECT_HEADER_BYTES + BYTES_PER_INT + OBJECT_POINTER_BYTES; +} + +void DocumentsWriter::finishDocument(ThreadState* state) { + SCOPED_LOCK_MUTEX(THIS_LOCK) + if (abortCount > 0) { + // Forcefully idle this threadstate -- its state will + // be reset by abort() + state->isIdle = true; + CONDITION_NOTIFYALL(THIS_WAIT_CONDITION) + return; + } + + // Now write the indexed document to the real files. + if (nextWriteDocID == state->docID) { + // It's my turn, so write everything now: + nextWriteDocID++; + state->writeDocument(); + state->isIdle = true; + CONDITION_NOTIFYALL(THIS_WAIT_CONDITION) + + // If any states were waiting on me, sweep through and + // flush those that are enabled by my write. + if (numWaiting > 0) { + bool any = true; + while(any) { + any = false; + for(int32_t i=0;idocID == nextWriteDocID) { + s->writeDocument(); + s->isIdle = true; + nextWriteDocID++; + any = true; + if (numWaiting > i+1) + // Swap in the last waiting state to fill in + // the hole we just created. It's important + // to do this as-we-go and not at the end of + // the loop, because if we hit an aborting + // exception in one of the s.writeDocument + // calls (above), it leaves this array in an + // inconsistent state: + waitingThreadStates.values[i] = waitingThreadStates[numWaiting-1]; + numWaiting--; + } else { + assert (!s->isIdle); + i++; + } + } + } + } + } else { + // Another thread got a docID before me, but, it + // hasn't finished its processing. So add myself to + // the line but don't hold up this thread. + waitingThreadStates.values[numWaiting++] = state; + } +} + +int64_t DocumentsWriter::getRAMUsed() { + return numBytesUsed; +} + +void DocumentsWriter::fillBytes(IndexOutput* out, uint8_t b, int32_t numBytes) { + for(int32_t i=0;iwriteByte(b); +} + +void DocumentsWriter::copyBytes(IndexInput* srcIn, IndexOutput* destIn, int64_t numBytes) { + // TODO: we could do this more efficiently (save a copy) + // because it's always from a ByteSliceReader -> + // IndexOutput + while(numBytes > 0) { + int32_t chunk; + if (numBytes > 4096) + chunk = 4096; + else + chunk = (int32_t) numBytes; + srcIn->readBytes(copyByteBuffer, chunk); + destIn->writeBytes(copyByteBuffer, chunk); + numBytes -= chunk; + } +} + + +int64_t DocumentsWriter::segmentSize(const std::string& segmentName) { + assert (infoStream != NULL); + + int64_t size = directory->fileLength( (segmentName + ".tii").c_str() ) + + directory->fileLength( (segmentName + ".tis").c_str() ) + + directory->fileLength( (segmentName + ".frq").c_str() ) + + directory->fileLength( (segmentName + ".prx").c_str() ); + + const std::string normFileName = segmentName + ".nrm"; + if (directory->fileExists(normFileName.c_str())) + size += directory->fileLength(normFileName.c_str()); + + return size; +} + +void DocumentsWriter::getPostings(ValueArray& postings) { + SCOPED_LOCK_MUTEX(THIS_LOCK) + numBytesUsed += postings.length * POSTING_NUM_BYTE; + int32_t numToCopy; + if (this->postingsFreeCountDW < postings.length) + numToCopy = this->postingsFreeCountDW; + else + numToCopy = postings.length; + + const int32_t start = this->postingsFreeCountDW-numToCopy; + if ( numToCopy > 0 ){ + memcpy(postings.values, this->postingsFreeListDW.values+start, sizeof(Posting*)*numToCopy); + } + this->postingsFreeCountDW -= numToCopy; + + // Directly allocate the remainder if any + if (numToCopy < postings.length) { + const int32_t extra = postings.length - numToCopy; + const int32_t newPostingsAllocCount = this->postingsAllocCountDW + extra; + if (newPostingsAllocCount > this->postingsFreeListDW.length) + this->postingsFreeListDW.resize((int32_t) (1.25 * newPostingsAllocCount)); + + balanceRAM(); + for(size_t i=numToCopy;ipostingsAllocCountDW++; + } + } +} + +void DocumentsWriter::recyclePostings(ValueArray& postings, int32_t numPostings) { + SCOPED_LOCK_MUTEX(THIS_LOCK) + // Move all Postings from this ThreadState back to our + // free list. We pre-allocated this array while we were + // creating Postings to make sure it's large enough + assert (this->postingsFreeCountDW + numPostings <= this->postingsFreeListDW.length); + if ( numPostings > 0 ) + memcpy (this->postingsFreeListDW.values + this->postingsFreeCountDW, postings.values, numPostings * sizeof(Posting*)); + this->postingsFreeCountDW += numPostings; +} + +uint8_t* DocumentsWriter::getByteBlock(bool trackAllocations) { + SCOPED_LOCK_MUTEX(THIS_LOCK) + const int32_t size = freeByteBlocks.size(); + uint8_t* b; + if (0 == size) { + numBytesAlloc += BYTE_BLOCK_SIZE; + balanceRAM(); + b = _CL_NEWARRAY(uint8_t, BYTE_BLOCK_SIZE); + memset(b,0,sizeof(uint8_t) * BYTE_BLOCK_SIZE); + } else { + b = *freeByteBlocks.begin(); + freeByteBlocks.remove(freeByteBlocks.begin(),true); + } + if (trackAllocations) + numBytesUsed += BYTE_BLOCK_SIZE; + return b; +} + +void DocumentsWriter::recycleBlocks(ArrayBase& blocks, int32_t start, int32_t end) { + SCOPED_LOCK_MUTEX(THIS_LOCK) + for(int32_t i=start;i& blocks, int32_t start, int32_t numBlocks) { + SCOPED_LOCK_MUTEX(THIS_LOCK) + + for(int32_t i=start;i freeTrigger) { + if (infoStream != NULL) + (*infoStream) << string(" RAM: now balance allocations: usedMB=") << toMB(numBytesUsed) + + string(" vs trigger=") << toMB(flushTrigger) << + string(" allocMB=") << toMB(numBytesAlloc) << + string(" vs trigger=") << toMB(freeTrigger) << + string(" postingsFree=") << toMB(this->postingsFreeCountDW*POSTING_NUM_BYTE) << + string(" byteBlockFree=") << toMB(freeByteBlocks.size()*BYTE_BLOCK_SIZE) << + string(" charBlockFree=") << toMB(freeCharBlocks.size()*CHAR_BLOCK_SIZE*CHAR_NUM_BYTE) << string("\n"); + + // When we've crossed 100% of our target Postings + // RAM usage, try to free up until we're back down + // to 95% + const int64_t startBytesAlloc = numBytesAlloc; + + const int32_t postingsFreeChunk = (int32_t) (BYTE_BLOCK_SIZE / POSTING_NUM_BYTE); + + int32_t iter = 0; + + // We free equally from each pool in 64 KB + // chunks until we are below our threshold + // (freeLevel) + + while(numBytesAlloc > freeLevel) { + if (0 == freeByteBlocks.size() && 0 == freeCharBlocks.size() && 0 == this->postingsFreeCountDW) { + // Nothing else to free -- must flush now. + bufferIsFull = true; + if (infoStream != NULL) + (*infoStream) << string(" nothing to free; now set bufferIsFull\n"); + break; + } + + if ((0 == iter % 3) && freeByteBlocks.size() > 0) { + freeByteBlocks.remove(freeByteBlocks.size()-1); + numBytesAlloc -= BYTE_BLOCK_SIZE; + } + + if ((1 == iter % 3) && freeCharBlocks.size() > 0) { + freeCharBlocks.remove(freeCharBlocks.size()-1); + numBytesAlloc -= CHAR_BLOCK_SIZE * CHAR_NUM_BYTE; + } + + if ((2 == iter % 3) && this->postingsFreeCountDW > 0) { + int32_t numToFree; + if (this->postingsFreeCountDW >= postingsFreeChunk) + numToFree = postingsFreeChunk; + else + numToFree = this->postingsFreeCountDW; + for ( size_t i = this->postingsFreeCountDW-numToFree;i< this->postingsFreeCountDW; i++ ){ + _CLDELETE(this->postingsFreeListDW.values[i]); + } + this->postingsFreeCountDW -= numToFree; + this->postingsAllocCountDW -= numToFree; + numBytesAlloc -= numToFree * POSTING_NUM_BYTE; + } + + iter++; + } + + if (infoStream != NULL){ + (*infoStream) << " after free: freedMB=" + Misc::toString((float_t)((startBytesAlloc-numBytesAlloc)/1024.0/1024.0)) + + " usedMB=" + Misc::toString((float_t)(numBytesUsed/1024.0/1024.0)) + + " allocMB=" + Misc::toString((float_t)(numBytesAlloc/1024.0/1024.0)) << string("\n"); + } + + } else { + // If we have not crossed the 100% mark, but have + // crossed the 95% mark of RAM we are actually + // using, go ahead and flush. This prevents + // over-allocating and then freeing, with every + // flush. + if (numBytesUsed > flushTrigger) { + if (infoStream != NULL){ + (*infoStream) << string(" RAM: now flush @ usedMB=") << Misc::toString((float_t)(numBytesUsed/1024.0/1024.0)) << + string(" allocMB=") << Misc::toString((float_t)(numBytesAlloc/1024.0/1024.0)) << + string(" triggerMB=") << Misc::toString((float_t)(flushTrigger/1024.0/1024.0)) << string("\n"); + } + + bufferIsFull = true; + } + } +} + + +DocumentsWriter::BufferedNorms::BufferedNorms(){ + this->upto = 0; +} +void DocumentsWriter::BufferedNorms::add(float_t norm){ + uint8_t b = Similarity::encodeNorm(norm); + out.writeByte(b); + upto++; +} +void DocumentsWriter::BufferedNorms::reset(){ + out.reset(); + upto = 0; +} +void DocumentsWriter::BufferedNorms::fill(int32_t docID){ + // Must now fill in docs that didn't have this + // field. Note that this is how norms can consume + // tremendous storage when the docs have widely + // varying different fields, because we are not + // storing the norms sparsely (see LUCENE-830) + if (upto < docID) { + fillBytes(&out, defaultNorm, docID-upto); + upto = docID; + } +} + + + +DocumentsWriter::FieldMergeState::FieldMergeState(){ + field = NULL; + postings = NULL; + p = NULL; + text = NULL; + textOffset = 0; + postingUpto = -1; + docID = 0; + termFreq = 0; +} +DocumentsWriter::FieldMergeState::~FieldMergeState(){ +} +bool DocumentsWriter::FieldMergeState::nextTerm(){ + postingUpto++; + if (postingUpto == field->numPostings) + return false; + + p = (*postings)[postingUpto]; + docID = 0; + + text = field->threadState->charPool->buffers[p->textStart >> CHAR_BLOCK_SHIFT]; + textOffset = p->textStart & CHAR_BLOCK_MASK; + + if (p->freqUpto > p->freqStart) + freq.init(field->threadState->postingsPool, p->freqStart, p->freqUpto); + else + freq.bufferOffset = freq.upto = freq.endIndex = 0; + + prox.init(field->threadState->postingsPool, p->proxStart, p->proxUpto); + + // Should always be true + bool result = nextDoc(); + assert (result); + + return true; +} + +bool DocumentsWriter::FieldMergeState::nextDoc() { + if (freq.bufferOffset + freq.upto == freq.endIndex) { + if (p->lastDocCode != -1) { + // Return last doc + docID = p->lastDocID; + termFreq = p->docFreq; + p->lastDocCode = -1; + return true; + } else + // EOF + return false; + } + + const uint32_t code = (uint32_t)freq.readVInt(); + docID += code >> 1; //unsigned shift + if ((code & 1) != 0) + termFreq = 1; + else + termFreq = freq.readVInt(); + + return true; +} + + +DocumentsWriter::ByteSliceReader::ByteSliceReader(){ + pool = NULL; + bufferUpto = 0; + buffer = 0; + limit = 0; + level = 0; + upto = 0; + bufferOffset = 0; + endIndex = 0; +} +DocumentsWriter::ByteSliceReader::~ByteSliceReader(){ +} +const char* DocumentsWriter::ByteSliceReader::getDirectoryType() const{ + return ""; +} +const char* DocumentsWriter::ByteSliceReader::getObjectName() const{ + return getClassName(); +} +const char* DocumentsWriter::ByteSliceReader::getClassName(){ + return "DocumentsWriter::ByteSliceReader"; +} +IndexInput* DocumentsWriter::ByteSliceReader::clone() const{ + _CLTHROWA(CL_ERR_UnsupportedOperation, "Not implemented"); +} +void DocumentsWriter::ByteSliceReader::init(ByteBlockPool* _pool, int32_t _startIndex, int32_t _endIndex) { + + assert (_endIndex-_startIndex > 0); + + level = 0; + this->pool = _pool; + this->endIndex = _endIndex; + + bufferUpto = _startIndex / BYTE_BLOCK_SIZE; + bufferOffset = bufferUpto * BYTE_BLOCK_SIZE; + buffer = pool->buffers[bufferUpto]; + upto = _startIndex & BYTE_BLOCK_MASK; + + const int32_t firstSize = levelSizeArray[0]; + + if (_startIndex+firstSize >= endIndex) { + // There is only this one slice to read + limit = endIndex & BYTE_BLOCK_MASK; + } else + limit = upto+firstSize-4; +} + +uint8_t DocumentsWriter::ByteSliceReader::readByte() { + // Assert that we are not @ EOF + assert (upto + bufferOffset < endIndex); + if (upto == limit) + nextSlice(); + return buffer[upto++]; +} + +int64_t DocumentsWriter::ByteSliceReader::writeTo(IndexOutput* out) { + int64_t size = 0; + while(true) { + if (limit + bufferOffset == endIndex) { + assert (endIndex - bufferOffset >= upto); + out->writeBytes(buffer+upto, limit-upto); + size += limit-upto; + break; + } else { + out->writeBytes(buffer+upto, limit-upto); + size += limit-upto; + nextSlice(); + } + } + + return size; +} + +void DocumentsWriter::ByteSliceReader::nextSlice() { + + // Skip to our next slice + const int32_t nextIndex = ((buffer[limit]&0xff)<<24) + ((buffer[1+limit]&0xff)<<16) + ((buffer[2+limit]&0xff)<<8) + (buffer[3+limit]&0xff); + level = nextLevelArray[level]; + const int32_t newSize = levelSizeArray[level]; + + bufferUpto = nextIndex / BYTE_BLOCK_SIZE; + bufferOffset = bufferUpto * BYTE_BLOCK_SIZE; + + buffer = pool->buffers[bufferUpto]; + upto = nextIndex & BYTE_BLOCK_MASK; + + if (nextIndex + newSize >= endIndex) { + // We are advancing to the const slice + assert (endIndex - nextIndex > 0); + limit = endIndex - bufferOffset; + } else { + // This is not the const slice (subtract 4 for the + // forwarding address at the end of this new slice) + limit = upto+newSize-4; + } +} + +void DocumentsWriter::ByteSliceReader::readBytes(uint8_t* b, int32_t len) { + while(len > 0) { + const int32_t numLeft = limit-upto; + if (numLeft < len) { + // Read entire slice + memcpy(b, buffer+upto,numLeft * sizeof(uint8_t)); + b += numLeft; + len -= numLeft; + nextSlice(); + } else { + // This slice is the last one + memcpy(b, buffer+upto,len * sizeof(uint8_t)); + upto += len; + break; + } + } +} + +int64_t DocumentsWriter::ByteSliceReader::getFilePointer() const{_CLTHROWA(CL_ERR_Runtime,"not implemented");} +int64_t DocumentsWriter::ByteSliceReader::length() const{_CLTHROWA(CL_ERR_Runtime,"not implemented");} +void DocumentsWriter::ByteSliceReader::seek(const int64_t /*pos*/) {_CLTHROWA(CL_ERR_Runtime,"not implemented");} +void DocumentsWriter::ByteSliceReader::close() {_CLTHROWA(CL_ERR_Runtime,"not implemented");} + +DocumentsWriter::ByteBlockPool::ByteBlockPool( bool _trackAllocations, DocumentsWriter* _parent): + BlockPool(_parent, BYTE_BLOCK_SIZE, _trackAllocations) +{ +} +DocumentsWriter::ByteBlockPool::~ByteBlockPool(){ + reset(); + //delete the first block + _CLDELETE_ARRAY(buffer); +} +uint8_t* DocumentsWriter::ByteBlockPool::getNewBlock(bool _trackAllocations){ + return parent->getByteBlock(_trackAllocations); +} +int32_t DocumentsWriter::ByteBlockPool::newSlice(const int32_t size) { + if (tUpto > BYTE_BLOCK_SIZE-size) + nextBuffer(); + const int32_t upto = tUpto; + tUpto += size; + buffer[tUpto-1] = 16; + return upto; +} + +int32_t DocumentsWriter::ByteBlockPool::allocSlice(uint8_t* slice, const int32_t upto) { + const int32_t level = slice[upto] & 15; + assert(level < 10); + const int32_t newLevel = nextLevelArray[level]; + const int32_t newSize = levelSizeArray[newLevel]; + + // Maybe allocate another block + if (tUpto > BYTE_BLOCK_SIZE-newSize) + nextBuffer(); + + const int32_t newUpto = tUpto; + const uint32_t offset = newUpto + tOffset; + tUpto += newSize; + + // Copy forward the past 3 bytes (which we are about + // to overwrite with the forwarding address): + buffer[newUpto] = slice[upto-3]; + buffer[newUpto+1] = slice[upto-2]; + buffer[newUpto+2] = slice[upto-1]; + + // Write forwarding address at end of last slice: + slice[upto-3] = (uint8_t) (offset >> 24); //offset is unsigned... + slice[upto-2] = (uint8_t) (offset >> 16); + slice[upto-1] = (uint8_t) (offset >> 8); + slice[upto] = (uint8_t) offset; + + // Write new level: + buffer[tUpto-1] = (uint8_t) (16|newLevel); + + return newUpto+3; +} +void DocumentsWriter::ByteBlockPool::reset() { + if (bufferUpto != -1) { + // We allocated at least one buffer + + for(int i=0;i 0) + // Recycle all but the first buffer + parent->recycleBlocks(buffers, 1, 1+bufferUpto); + + // Re-use the first buffer + bufferUpto = 0; + tUpto = 0; + tOffset = 0; + buffer = buffers[0]; + } +} +DocumentsWriter::CharBlockPool::CharBlockPool(DocumentsWriter* _parent): + BlockPool(_parent, CHAR_BLOCK_SIZE, false) +{ +} +DocumentsWriter::CharBlockPool::~CharBlockPool(){ +} +TCHAR* DocumentsWriter::CharBlockPool::getNewBlock(bool){ + return parent->getCharBlock(); +} +void DocumentsWriter::CharBlockPool::reset() { + parent->recycleBlocks(buffers, 0, 1+bufferUpto); + bufferUpto = -1; + tUpto = blockSize; + tOffset = -blockSize; +} + +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/DocumentsWriterThreadState.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/DocumentsWriterThreadState.cpp new file mode 100644 index 0000000..6998fd8 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/DocumentsWriterThreadState.cpp @@ -0,0 +1,1318 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" + +#include "CLucene/store/Directory.h" +#include "CLucene/store/IndexOutput.h" +#include "CLucene/store/_RAMDirectory.h" +#include "CLucene/util/Array.h" +#include "CLucene/util/_Arrays.h" +#include "CLucene/util/Misc.h" +#include "CLucene/util/CLStreams.h" +#include "CLucene/document/Field.h" +#include "CLucene/search/Similarity.h" +#include "CLucene/document/Document.h" +#include "_TermInfo.h" +#include "_FieldInfos.h" +#include "_CompoundFile.h" +#include "IndexWriter.h" +#include "_IndexFileNames.h" +#include "_FieldsWriter.h" +#include "Term.h" +#include "_Term.h" +#include "_TermVector.h" +#include "_TermInfosWriter.h" +#include "CLucene/analysis/AnalysisHeader.h" +#include "CLucene/search/Similarity.h" +#include "_TermInfosWriter.h" +#include "_FieldsWriter.h" +#include "_DocumentsWriter.h" +#include +#include + +CL_NS_USE(util) +CL_NS_USE(store) +CL_NS_USE(analysis) +CL_NS_USE(document) +CL_NS_USE(search) +CL_NS_DEF(index) + + +DocumentsWriter::ThreadState::ThreadState(DocumentsWriter* __parent): + postingsFreeListTS(ValueArray(256)), + vectorFieldPointers(ValueArray(10)), + vectorFieldNumbers(ValueArray(10)), + fieldDataArray(ValueArray(8)), + fieldDataHash(ValueArray(16)), + postingsVectors(ObjectArray(1)), + postingsPool( _CLNEW ByteBlockPool(true, __parent) ), + vectorsPool( _CLNEW ByteBlockPool(false, __parent) ), + charPool( _CLNEW CharBlockPool(__parent) ), + allFieldDataArray(ValueArray(10)), + _parent(__parent) +{ + fieldDataHashMask = 15; + postingsFreeCountTS = 0; + stringReader = _CLNEW ReusableStringReader(_T(""),0,false); + + isIdle = true; + numThreads = 1; + + tvfLocal = _CLNEW RAMOutputStream(); // Term vectors for one doc + fdtLocal = _CLNEW RAMOutputStream(); // Stored fields for one doc + + this->docBoost = 0.0; + this->fieldGen = this->posUpto = this->maxPostingsVectors = this->numStoredFields = 0; + this->numAllFieldData = this->docID = 0; + this->numFieldData = numVectorFields = this->proxUpto = this->freqUpto = this->offsetUpto = 0; + this->localFieldsWriter = NULL; + this->maxTermPrefix = NULL; + this->p = NULL; + this->prox = NULL; + this->vector = NULL; + this->offsets = NULL; + this->pos = NULL; + this->freq = NULL; + this->doFlushAfter = false; +} + +DocumentsWriter::ThreadState::~ThreadState(){ + _CLDELETE(postingsPool); + _CLDELETE(vectorsPool); + _CLDELETE(charPool); + _CLDELETE(stringReader); + _CLDELETE(tvfLocal); + _CLDELETE(fdtLocal); + + for ( size_t i=0; iclose(); + _CLDELETE(localFieldsWriter); + } + postingsPool->reset(); + charPool->reset(); + _parent->recyclePostings(this->postingsFreeListTS, this->postingsFreeCountTS); + this->postingsFreeCountTS = 0; + for(int32_t i=0;ilastGen = -1; + if (fp->numPostings > 0) + fp->resetPostingArrays(); + } +} + +void DocumentsWriter::ThreadState::writeDocument() { + + // If we hit an exception while appending to the + // stored fields or term vectors files, we have to + // abort all documents since we last flushed because + // it means those files are possibly inconsistent. + try { + _parent->numDocsInStore++; + + // Append stored fields to the real FieldsWriter: + _parent->fieldsWriter->flushDocument(numStoredFields, fdtLocal); + fdtLocal->reset(); + + // Append term vectors to the real outputs: + if (_parent->tvx != NULL) { + _parent->tvx->writeLong(_parent->tvd->getFilePointer()); + _parent->tvd->writeVInt(numVectorFields); + if (numVectorFields > 0) { + for(int32_t i=0;itvd->writeVInt(vectorFieldNumbers[i]); + assert(0 == vectorFieldPointers[0]); + _parent->tvd->writeVLong(_parent->tvf->getFilePointer()); + int64_t lastPos = vectorFieldPointers[0]; + for(int32_t i=1;itvd->writeVLong(pos-lastPos); + lastPos = pos; + } + tvfLocal->writeTo(_parent->tvf); + tvfLocal->reset(); + } + } + + // Append norms for the fields we saw: + for(int32_t i=0;idoNorms) { + BufferedNorms* bn = _parent->norms[fp->fieldInfo->number]; + assert ( bn != NULL ); + assert ( bn->upto <= docID ); + bn->fill(docID); + float_t norm = fp->boost * _parent->writer->getSimilarity()->lengthNorm(fp->fieldInfo->name, fp->length); + bn->add(norm); + } + } + } catch (CLuceneError& t) { + // Forcefully idle this threadstate -- its state will + // be reset by abort() + isIdle = true; + throw AbortException(t, _parent); + } + + if (_parent->bufferIsFull && !_parent->flushPending) { + _parent->flushPending = true; + doFlushAfter = true; + } +} + +void DocumentsWriter::ThreadState::init(Document* doc, int32_t docID) { + + assert (!isIdle); + assert (_parent->writer->testPoint("DocumentsWriter.ThreadState.init start")); + + this->docID = docID; + docBoost = doc->getBoost(); + numStoredFields = 0; + numFieldData = 0; + numVectorFields = 0; + maxTermPrefix = NULL; + + assert (0 == fdtLocal->length()); + assert (0 == fdtLocal->getFilePointer()); + assert (0 == tvfLocal->length()); + assert (0 == tvfLocal->getFilePointer()); + const int32_t thisFieldGen = fieldGen++; + + const Document::FieldsType& docFields = *doc->getFields(); + const int32_t numDocFields = docFields.size(); + bool docHasVectors = false; + + // Absorb any new fields first seen in this document. + // Also absorb any changes to fields we had already + // seen before (eg suddenly turning on norms or + // vectors, etc.): + + for(int32_t i=0;ifieldInfos->add(field->name(), field->isIndexed(), field->isTermVectorStored(), + field->isStorePositionWithTermVector(), field->isStoreOffsetWithTermVector(), + field->getOmitNorms(), false); + if (fi->isIndexed && !fi->omitNorms) { + // Maybe grow our buffered norms + if (_parent->norms.length <= fi->number) { + int32_t newSize = (int32_t) ((1+fi->number)*1.25); + _parent->norms.resize(newSize); + } + + if (_parent->norms[fi->number] == NULL) + _parent->norms.values[fi->number] = _CLNEW BufferedNorms(); + + _parent->hasNorms = true; + } + + // Make sure we have a FieldData allocated + int32_t hashPos = Misc::thashCode(fi->name) & fieldDataHashMask; //TODO: put hash in fieldinfo + FieldData* fp = fieldDataHash[hashPos]; + while(fp != NULL && _tcscmp(fp->fieldInfo->name, fi->name) != 0 ) + fp = fp->next; + + if (fp == NULL) { + fp = _CLNEW FieldData(_parent,this,fi); + fp->next = fieldDataHash[hashPos]; + fieldDataHash.values[hashPos] = fp; + + if (numAllFieldData == allFieldDataArray.length) { + allFieldDataArray.resize( (int32_t) (allFieldDataArray.length*1.5) ); + + ValueArray newHashArray(fieldDataHash.length*2); + + // Rehash + fieldDataHashMask = allFieldDataArray.length-1; + for(size_t j=0;jfieldInfo->name) & fieldDataHashMask; + FieldData* nextFP0 = fp0->next; + fp0->next = newHashArray[hashPos]; + newHashArray.values[hashPos] = fp0; + fp0 = nextFP0; + } + } + fieldDataHash.resize( newHashArray.length ); + memcpy(fieldDataHash.values, newHashArray.values, newHashArray.length * sizeof(FieldData*)); + } + allFieldDataArray.values[numAllFieldData++] = fp; + } else { + assert (fp->fieldInfo == fi); + } + + if (thisFieldGen != fp->lastGen) { + + // First time we're seeing this field for this doc + fp->lastGen = thisFieldGen; + fp->fieldCount = 0; + fp->doVectors = fp->doVectorPositions = fp->doVectorOffsets = false; + fp->doNorms = fi->isIndexed && !fi->omitNorms; + + if (numFieldData == fieldDataArray.length) { + fieldDataArray.resize(fieldDataArray.length*2); + } + fieldDataArray.values[numFieldData++] = fp; + } + + if (field->isTermVectorStored()) { + if (!fp->doVectors && numVectorFields++ == vectorFieldPointers.length) { + const int32_t newSize = (int32_t)(numVectorFields*1.5); + vectorFieldPointers.resize(newSize); + vectorFieldNumbers.resize(newSize); + } + fp->doVectors = true; + docHasVectors = true; + + fp->doVectorPositions |= field->isStorePositionWithTermVector(); + fp->doVectorOffsets |= field->isStoreOffsetWithTermVector(); + } + + if (fp->fieldCount == fp->docFields.length) { + fp->docFields.resize(fp->docFields.length*2); + } + + // Lazily allocate arrays for postings: + if (field->isIndexed() && fp->postingsHash.values == NULL) + fp->initPostingArrays(); + + fp->docFields.values[fp->fieldCount++] = field; + } + + // Maybe init the local & global fieldsWriter + if (localFieldsWriter == NULL) { + if (_parent->fieldsWriter == NULL) { + assert (_parent->docStoreSegment.empty()); + assert (!_parent->segment.empty()); + _parent->docStoreSegment = _parent->segment; + // If we hit an exception while init'ing the + // fieldsWriter, we must abort this segment + // because those files will be in an unknown + // state: + try { + _parent->fieldsWriter = _CLNEW FieldsWriter(_parent->directory, _parent->docStoreSegment.c_str(), _parent->fieldInfos); + } catch (CLuceneError& t) { + throw AbortException(t,_parent); + } + _CLDELETE(_parent->_files); + } + localFieldsWriter = _CLNEW FieldsWriter(NULL, fdtLocal, _parent->fieldInfos); + } + + // First time we see a doc that has field(s) with + // stored vectors, we init our tvx writer + if (docHasVectors) { + if (_parent->tvx == NULL) { + assert (!_parent->docStoreSegment.empty()); + // If we hit an exception while init'ing the term + // vector output files, we must abort this segment + // because those files will be in an unknown + // state: + try { + _parent->tvx = _parent->directory->createOutput( (_parent->docStoreSegment + "." + IndexFileNames::VECTORS_INDEX_EXTENSION).c_str() ); + _parent->tvx->writeInt(TermVectorsReader::FORMAT_VERSION); + _parent->tvd = _parent->directory->createOutput( (_parent->docStoreSegment + "." + IndexFileNames::VECTORS_DOCUMENTS_EXTENSION).c_str() ); + _parent->tvd->writeInt(TermVectorsReader::FORMAT_VERSION); + _parent->tvf = _parent->directory->createOutput( (_parent->docStoreSegment + "." + IndexFileNames::VECTORS_FIELDS_EXTENSION).c_str() ); + _parent->tvf->writeInt(TermVectorsReader::FORMAT_VERSION); + + // We must "catch up" for all docs before us + // that had no vectors: + for(int32_t i=0;i<_parent->numDocsInStore;i++) { + _parent->tvx->writeLong(_parent->tvd->getFilePointer()); + _parent->tvd->writeVInt(0); + } + + } catch (CLuceneError& t) { + throw AbortException(t, _parent); + } + _CLDELETE(_parent->_files); + } + + numVectorFields = 0; + } +} + +void DocumentsWriter::ThreadState::doPostingSort(Posting** postings, int32_t numPosting) { + quickSort(postings, 0, numPosting-1); +} + +void DocumentsWriter::ThreadState::quickSort(Posting** postings, int32_t lo, int32_t hi) { + if (lo >= hi) + return; + + int32_t mid = ((uint32_t)(lo + hi)) >> 1; //unsigned shift... + + if (comparePostings(postings[lo], postings[mid]) > 0) { + Posting* tmp = postings[lo]; + postings[lo] = postings[mid]; + postings[mid] = tmp; + } + + if (comparePostings(postings[mid], postings[hi]) > 0) { + Posting* tmp = postings[mid]; + postings[mid] = postings[hi]; + postings[hi] = tmp; + + if (comparePostings(postings[lo], postings[mid]) > 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; + + Posting* partition = postings[mid]; + + for (; ;) { + while (comparePostings(postings[right], partition) > 0) + --right; + + while (left < right && comparePostings(postings[left], 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 DocumentsWriter::ThreadState::doVectorSort(ArrayBase& postings, int32_t numPosting) { + quickSort(postings, 0, numPosting-1); +} + +void DocumentsWriter::ThreadState::quickSort(ArrayBase& postings, int32_t lo, int32_t hi) { + if (lo >= hi) + return; + + int32_t mid = ((uint8_t)(lo + hi)) >> 1; //unsigned shift.. + + if (comparePostings(postings[lo]->p, postings[mid]->p) > 0) { + PostingVector* tmp = postings[lo]; + postings.values[lo] = postings[mid]; + postings.values[mid] = tmp; + } + + if (comparePostings(postings[mid]->p, postings[hi]->p) > 0) { + PostingVector* tmp = postings[mid]; + postings.values[mid] = postings[hi]; + postings.values[hi] = tmp; + + if (comparePostings(postings[lo]->p, postings[mid]->p) > 0) { + PostingVector* tmp2 = postings[lo]; + postings.values[lo] = postings[mid]; + postings.values[mid] = tmp2; + } + } + + int32_t left = lo + 1; + int32_t right = hi - 1; + + if (left >= right) + return; + + PostingVector* partition = postings[mid]; + + for (; ;) { + while (comparePostings(postings[right]->p, partition->p) > 0) + --right; + + while (left < right && comparePostings(postings[left]->p, partition->p) <= 0) + ++left; + + if (left < right) { + PostingVector* tmp = postings[left]; + postings.values[left] = postings[right]; + postings.values[right] = tmp; + --right; + } else { + break; + } + } + + quickSort(postings, lo, left); + quickSort(postings, left + 1, hi); +} + +void DocumentsWriter::ThreadState::trimFields() { + + int32_t upto = 0; + for(int32_t i=0;ilastGen == -1) { + // This field was not seen since the previous + // flush, so, free up its resources now + + // Unhash + const int32_t hashPos = Misc::thashCode(fp->fieldInfo->name) & fieldDataHashMask; + FieldData* last = NULL; + FieldData* fp0 = fieldDataHash[hashPos]; + while(fp0 != fp) { + last = fp0; + fp0 = fp0->next; + } + assert(fp0 != NULL); + + if (last == NULL) + fieldDataHash.values[hashPos] = fp->next; + else + last->next = fp->next; + + if (_parent->infoStream != NULL) + (*_parent->infoStream) << " remove field=" << fp->fieldInfo->name << "\n"; + + _CLDELETE(fp); + } else { + // Reset + fp->lastGen = -1; + allFieldDataArray.values[upto++] = fp; + + if (fp->numPostings > 0 && ((float_t) fp->numPostings) / fp->postingsHashSize < 0.2) { + int32_t hashSize = fp->postingsHashSize; + + // Reduce hash so it's between 25-50% full + while (fp->numPostings < (hashSize>>1) && hashSize >= 2) + hashSize >>= 1; + hashSize <<= 1; + + if (hashSize != fp->postingsHash.length) + fp->rehashPostings(hashSize); + } + } + } + //delete everything after up to in allFieldDataArray + for ( size_t i=upto;inorms.length;i++) { + BufferedNorms* n = _parent->norms[i]; + if (n != NULL && n->upto == 0) + { + _CLLDELETE(n); + _parent->norms.values[i] = NULL; + } + } + + numAllFieldData = upto; + + // Also pare back PostingsVectors if it's excessively + // large + if (maxPostingsVectors * 1.5 < postingsVectors.length) { + int32_t newSize; + if (0 == maxPostingsVectors) + newSize = 1; + else + newSize = (int32_t) (1.5*maxPostingsVectors); + postingsVectors.resize(newSize, true); + } +} + +void DocumentsWriter::ThreadState::processDocument(Analyzer* analyzer) +{ + + const int32_t numFields = numFieldData; + + assert (0 == fdtLocal->length()); + + if (_parent->tvx != NULL){ + // If we are writing vectors then we must visit + // fields in sorted order so they are written in + // sorted order. TODO: we actually only need to + // sort the subset of fields that have vectors + // enabled; we could save [small amount of] CPU + // here. + Arrays::sort(fieldDataArray.values,fieldDataArray.length, 0, numFields); + } + + // We process the document one field at a time + for(int32_t i=0;iprocessField(analyzer); + + if (maxTermPrefix != NULL && _parent->infoStream != NULL) + (*_parent->infoStream) << "WARNING: document contains at least one immense term (longer than the max length " << MAX_TERM_LENGTH << "), all of which were skipped. Please correct the analyzer to not produce such terms. The prefix of the first immense term is: '" << maxTermPrefix << "...'\n"; + + if (_parent->ramBufferSize != IndexWriter::DISABLE_AUTO_FLUSH + && _parent->numBytesUsed > 0.95 * _parent->ramBufferSize) + _parent->balanceRAM(); +} + +// USE ONLY FOR DEBUGGING! +/* + String getPostingText() { + TCHAR* text = charPool->buffers[p->textStart >> CHAR_BLOCK_SHIFT]; + int32_t upto = p->textStart & CHAR_BLOCK_MASK; + while((*text)[upto] != CLUCENE_END_OF_WORD) + upto++; + return new String(text, p->textStart, upto-(p->textStart & BYTE_BLOCK_MASK)); + } +*/ + +bool DocumentsWriter::ThreadState::postingEquals(const TCHAR* tokenText, const int32_t tokenTextLen) { + + const TCHAR* text = charPool->buffers[p->textStart >> CHAR_BLOCK_SHIFT]; + assert (text != NULL); + int32_t pos = p->textStart & CHAR_BLOCK_MASK; + + int32_t tokenPos = 0; + for(;tokenPosbuffers[p1->textStart >> CHAR_BLOCK_SHIFT] + (p1->textStart & CHAR_BLOCK_MASK); + const TCHAR* pos2 = charPool->buffers[p2->textStart >> CHAR_BLOCK_SHIFT] + (p2->textStart & CHAR_BLOCK_MASK); + while(true) { + const TCHAR c1 = *pos1++; + const TCHAR c2 = *pos2++; + if (c1 < c2) + if (CLUCENE_END_OF_WORD == c2) + return 1; + else + return -1; + else if (c2 < c1) + if (CLUCENE_END_OF_WORD == c1) + return -1; + else + return 1; + else if (CLUCENE_END_OF_WORD == c1) + return 0; + } +} + +void DocumentsWriter::ThreadState::writeFreqVInt(int32_t vi) { + uint32_t i = vi; + while ((i & ~0x7F) != 0) { + writeFreqByte((uint8_t)((i & 0x7f) | 0x80)); + i >>= 7; //unsigned shift... + } + writeFreqByte((uint8_t) i); +} + +void DocumentsWriter::ThreadState::writeProxVInt(int32_t vi) { + uint32_t i = vi; + while ((i & ~0x7F) != 0) { + writeProxByte((uint8_t)((i & 0x7f) | 0x80)); + i >>= 7; //unsigned shift... + } + writeProxByte((uint8_t) i); +} + +void DocumentsWriter::ThreadState::writeFreqByte(uint8_t b) { + assert (freq != NULL); + if (freq[freqUpto] != 0) { + freqUpto = postingsPool->allocSlice(freq, freqUpto); + freq = postingsPool->buffer; + p->freqUpto = postingsPool->tOffset; + } + freq[freqUpto++] = b; +} + +void DocumentsWriter::ThreadState::writeProxByte(uint8_t b) { + assert (prox != NULL); + if (prox[proxUpto] != 0) { + proxUpto = postingsPool->allocSlice(prox, proxUpto); + prox = postingsPool->buffer; + p->proxUpto = postingsPool->tOffset; + assert (prox != NULL); + } + prox[proxUpto++] = b; + assert (proxUpto != DocumentsWriter::BYTE_BLOCK_SIZE); +} + +void DocumentsWriter::ThreadState::writeProxBytes(uint8_t* b, int32_t offset, int32_t len) { + const int32_t offsetEnd = offset + len; + while(offset < offsetEnd) { + if (prox[proxUpto] != 0) { + // End marker + proxUpto = postingsPool->allocSlice(prox, proxUpto); + prox = postingsPool->buffer; + p->proxUpto = postingsPool->tOffset; + } + + prox[proxUpto++] = b[offset++]; + assert (proxUpto != DocumentsWriter::BYTE_BLOCK_SIZE); + } +} + +void DocumentsWriter::ThreadState::writeOffsetVInt(int32_t vi) { + uint32_t i = vi; + while ((i & ~0x7F) != 0) { + writeOffsetByte((uint8_t)((i & 0x7f) | 0x80)); + i >>= 7; //unsigned shift... + } + writeOffsetByte((uint8_t) i); +} + +void DocumentsWriter::ThreadState::writeOffsetByte(uint8_t b) { + assert (offsets != NULL); + if (offsets[offsetUpto] != 0) { + offsetUpto = vectorsPool->allocSlice(offsets, offsetUpto); + offsets = vectorsPool->buffer; + vector->offsetUpto = vectorsPool->tOffset; + } + offsets[offsetUpto++] = b; +} + +void DocumentsWriter::ThreadState::writePosVInt(int32_t vi) { + uint32_t i = vi; + while ((i & ~0x7F) != 0) { + writePosByte((uint8_t)((i & 0x7f) | 0x80)); + i >>= 7; //unsigned shift... + } + writePosByte((uint8_t) i); +} + +void DocumentsWriter::ThreadState::writePosByte(uint8_t b) { + assert (pos != NULL); + if (pos[posUpto] != 0) { + posUpto = vectorsPool->allocSlice(pos, posUpto); + pos = vectorsPool->buffer; + vector->posUpto = vectorsPool->tOffset; + } + pos[posUpto++] = b; +} + + + +DocumentsWriter::ThreadState::FieldData::FieldData(DocumentsWriter* __parent, ThreadState* __threadState, FieldInfo* fieldInfo): + docFields(ValueArray(1)), + _parent(__parent), + localToken (_CLNEW Token), + vectorSliceReader(_CLNEW ByteSliceReader()) +{ + this->fieldCount = this->postingsHashSize = this->postingsHashHalfSize = this->postingsVectorsUpto = 0; + this->postingsHashMask = this->offsetEnd = 0; + this->offsetStartCode = this->offsetStart = this->numPostings = this->position = this->length = this->offset = 0; + this->boost = 0.0; + this->next = NULL; + this->lastGen = -1; + this->fieldInfo = fieldInfo; + this->threadState = __threadState; + this->postingsCompacted = false; +} +DocumentsWriter::ThreadState::FieldData::~FieldData(){ + _CLDELETE(vectorSliceReader); + _CLDELETE(localToken); +} +bool DocumentsWriter::ThreadState::FieldData::sort(FieldData* e1, FieldData* e2){ + return _tcscmp(e1->fieldInfo->name, e2->fieldInfo->name) < 0; +} +void DocumentsWriter::ThreadState::FieldData::resetPostingArrays() { + if (!postingsCompacted) + compactPostings(); + _parent->recyclePostings(this->postingsHash, numPostings); + memset(postingsHash.values, 0, postingsHash.length * sizeof(Posting*)); + postingsCompacted = false; + numPostings = 0; +} + +const char* DocumentsWriter::ThreadState::FieldData::getObjectName() const{ + return getClassName(); +} +const char* DocumentsWriter::ThreadState::FieldData::getClassName(){ + return "DocumentsWriter::ThreadState"; +} +void DocumentsWriter::ThreadState::FieldData::initPostingArrays() { + // Target hash fill factor of <= 50% + // NOTE: must be a power of two for hash collision + // strategy to work correctly + postingsHashSize = 4; + postingsHashHalfSize = 2; + postingsHashMask = postingsHashSize-1; + postingsHash.resize(postingsHashSize); +} + +int32_t DocumentsWriter::ThreadState::FieldData::compareTo(NamedObject* o) { + if ( o->getObjectName() != FieldData::getClassName() ) + return -1; + return _tcscmp(fieldInfo->name, ((FieldData*) o)->fieldInfo->name); +} + +void DocumentsWriter::ThreadState::FieldData::compactPostings() { + int32_t upto = 0; + for(int32_t i=0;i* DocumentsWriter::ThreadState::FieldData::sortPostings() { + compactPostings(); + threadState->doPostingSort(postingsHash.values, numPostings); + return &postingsHash; +} + + +void DocumentsWriter::ThreadState::FieldData::processField(Analyzer* analyzer) { + length = 0; + position = 0; + offset = 0; + boost = threadState->docBoost; + + const int32_t maxFieldLength = _parent->writer->getMaxFieldLength(); + + const int32_t limit = fieldCount; + const ArrayBase& docFieldsFinal = docFields; + + bool doWriteVectors = true; + + // Walk through all occurrences in this doc for this + // field: + try { + for(int32_t j=0;jisIndexed()) + invertField(field, analyzer, maxFieldLength); + + if (field->isStored()) { + threadState->numStoredFields++; + bool success = false; + try { + threadState->localFieldsWriter->writeField(fieldInfo, field); + success = true; + } _CLFINALLY( + // If we hit an exception inside + // localFieldsWriter->writeField, the + // contents of fdtLocal can be corrupt, so + // we must discard all stored fields for + // this document: + if (!success) + threadState->fdtLocal->reset(); + ) + } + + docFieldsFinal.values[j] = NULL; + } + } catch (AbortException& ae) { + doWriteVectors = false; + throw ae; + } _CLFINALLY ( + if (postingsVectorsUpto > 0) { + try { + if (doWriteVectors) { + // Add term vectors for this field + bool success = false; + try { + writeVectors(fieldInfo); + success = true; + } _CLFINALLY ( + if (!success) { + // If we hit an exception inside + // writeVectors, the contents of tvfLocal + // can be corrupt, so we must discard all + // term vectors for this document: + threadState->numVectorFields = 0; + threadState->tvfLocal->reset(); + } + ) + } + } _CLFINALLY ( + if (postingsVectorsUpto > threadState->maxPostingsVectors) + threadState->maxPostingsVectors = postingsVectorsUpto; + postingsVectorsUpto = 0; + threadState->vectorsPool->reset(); + ) + } + ) +} +void DocumentsWriter::ThreadState::FieldData::invertField(Field* field, Analyzer* analyzer, const int32_t maxFieldLength) { + + if (length>0) + position += analyzer->getPositionIncrementGap(fieldInfo->name); + + if (!field->isTokenized()) { // un-tokenized field + const TCHAR* stringValue = field->stringValue(); + const size_t valueLength = _tcslen(stringValue); + Token* token = localToken; + token->clear(); + + token->setText(stringValue,valueLength); + token->setStartOffset(offset); + token->setEndOffset(offset + valueLength); + addPosition(token); + offset += valueLength; + length++; + } else { // tokenized field + TokenStream* stream; + TokenStream* streamValue = field->tokenStreamValue(); + + if (streamValue != NULL) + stream = streamValue; + else { + // the field does not have a TokenStream, + // so we have to obtain one from the analyzer + Reader* reader; // find or make Reader + Reader* readerValue = field->readerValue(); + + if (readerValue != NULL) + reader = readerValue; + else { + const TCHAR* stringValue = field->stringValue(); + size_t stringValueLength = _tcslen(stringValue); + if (stringValue == NULL) + _CLTHROWA(CL_ERR_IllegalArgument, "field must have either TokenStream, String or Reader value"); + threadState->stringReader->init(stringValue, stringValueLength); + reader = threadState->stringReader; + } + + // Tokenize field and add to postingTable + stream = analyzer->reusableTokenStream(fieldInfo->name, reader); + } + + // reset the TokenStream to the first token + stream->reset(); + + try { + offsetEnd = offset-1; + for(;;) { + Token* token = stream->next(localToken); + if (token == NULL) break; + position += (token->getPositionIncrement() - 1); + addPosition(token); + ++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) { + if (_parent->infoStream != NULL) + (*_parent->infoStream) << "maxFieldLength " << maxFieldLength << " reached for field " << fieldInfo->name << ", ignoring following tokens\n"; + 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(fieldInfo->name) + + _tcslen(defaultMaxAsChar); + TCHAR* errMsg = _CL_NEWARRAY(TCHAR,errMsgLen+1); + + _sntprintf(errMsg, errMsgLen,errMsgBase, fieldInfo->name, defaultMaxAsChar); + + _CLTHROWT_DEL(CL_ERR_Runtime,errMsg); + } + } + offset = offsetEnd+1; + } _CLFINALLY ( + stream->close(); //don't delete, this stream is re-used + ) + } + + boost *= field->getBoost(); +} + +DocumentsWriter::PostingVector* DocumentsWriter::ThreadState::FieldData::addNewVector() { + + if (postingsVectorsUpto == threadState->postingsVectors.length) { + int32_t newSize; + if (threadState->postingsVectors.length < 2) + newSize = 2; + else + newSize = (int32_t) (1.5*threadState->postingsVectors.length); + threadState->postingsVectors.resize(newSize, true); + } + + threadState->p->vector = threadState->postingsVectors[postingsVectorsUpto]; + if (threadState->p->vector == NULL) + threadState->p->vector = threadState->postingsVectors.values[postingsVectorsUpto] = _CLNEW PostingVector(); + + postingsVectorsUpto++; + + PostingVector* v = threadState->p->vector; + v->p = threadState->p; + + const int32_t firstSize = levelSizeArray[0]; + + if (doVectorPositions) { + const int32_t upto = threadState->vectorsPool->newSlice(firstSize); + v->posStart = v->posUpto = threadState->vectorsPool->tOffset + upto; + } + + if (doVectorOffsets) { + const int32_t upto = threadState->vectorsPool->newSlice(firstSize); + v->offsetStart = v->offsetUpto = threadState->vectorsPool->tOffset + upto; + } + + return v; +} + +void DocumentsWriter::ThreadState::FieldData::addPosition(Token* token) { + + const Payload* payload = token->getPayload(); + + // Get the text of this term. Term can either + // provide a String token or offset into a TCHAR* + // array + const TCHAR* tokenText = token->termBuffer(); + const int32_t tokenTextLen = token->termLength(); + + uint32_t code = 0; + + // Compute hashcode + int32_t downto = tokenTextLen; + while (downto > 0) + code = (code*31) + tokenText[--downto]; +/* + std::cout << " addPosition: buffer=" << Misc::toString(tokenText).substr(0,tokenTextLen) << " pos=" << position + << " offsetStart=" << (offset+token->startOffset()) << " offsetEnd=" << (offset + token->endOffset()) + << " docID=" << threadState->docID << " doPos=" << (doVectorPositions?"true":"false") << " doOffset=" << (doVectorOffsets?"true":"false") << "\n"; +*/ + int32_t hashPos = code & postingsHashMask; + + assert (!postingsCompacted); + + // Locate Posting in hash + threadState->p = postingsHash[hashPos]; + + if (threadState->p != NULL && !threadState->postingEquals(tokenText, tokenTextLen)) { + // Conflict: keep searching different locations in + // the hash table. + const int32_t inc = ((code>>8)+code)|1; + do { + code += inc; + hashPos = code & postingsHashMask; + threadState->p = postingsHash[hashPos]; + } while (threadState->p != NULL && !threadState->postingEquals(tokenText, tokenTextLen)); + } + + int32_t proxCode; + + // If we hit an exception below, it's possible the + // posting list or term vectors data will be + // partially written and thus inconsistent if + // flushed, so we have to abort all documents + // since the last flush: + + try { + + if (threadState->p != NULL) { // term seen since last flush + + if (threadState->docID != threadState->p->lastDocID) { // term not yet seen in this doc +/* + std::cout << " seen before (new docID=" << threadState->docID << ") freqUpto=" << threadState->p->freqUpto + << " proxUpto=" << threadState->p->proxUpto << "\n"; +*/ + assert (threadState->p->docFreq > 0); + + // Now that we know doc freq for previous doc, + // write it & lastDocCode + threadState->freqUpto = threadState->p->freqUpto & BYTE_BLOCK_MASK; + threadState->freq = threadState->postingsPool->buffers[threadState->p->freqUpto >> BYTE_BLOCK_SHIFT]; + if (1 == threadState->p->docFreq) + threadState->writeFreqVInt(threadState->p->lastDocCode | 1); + else { + threadState->writeFreqVInt(threadState->p->lastDocCode); + threadState->writeFreqVInt(threadState->p->docFreq); + } + threadState->p->freqUpto = threadState->freqUpto + (threadState->p->freqUpto & BYTE_BLOCK_NOT_MASK); + + if (doVectors) { + threadState->vector = addNewVector(); + if (doVectorOffsets) { + offsetStartCode = offsetStart = offset + token->startOffset(); + offsetEnd = offset + token->endOffset(); + } + } + + proxCode = position; + + threadState->p->docFreq = 1; + + // Store code so we can write this after we're + // done with this new doc + threadState->p->lastDocCode = (threadState->docID - threadState->p->lastDocID) << 1; + threadState->p->lastDocID = threadState->docID; + + } else { // term already seen in this doc + //std::cout << " seen before (same docID=" << threadState->docID << ") proxUpto=" << threadState->p->proxUpto << "\n"; + + threadState->p->docFreq++; + + proxCode = position - threadState->p->lastPosition; + + if (doVectors) { + threadState->vector = threadState->p->vector; + if (threadState->vector == NULL) + threadState->vector = addNewVector(); + if (doVectorOffsets) { + offsetStart = offset + token->startOffset(); + offsetEnd = offset + token->endOffset(); + offsetStartCode = offsetStart - threadState->vector->lastOffset; + } + } + } + } else { // term not seen before + //std::cout << " never seen docID=" << threadState->docID << "\n"; + + // Refill? + if (0 == threadState->postingsFreeCountTS) { + _parent->getPostings(threadState->postingsFreeListTS); + threadState->postingsFreeCountTS = threadState->postingsFreeListTS.length; + } + + const int32_t textLen1 = 1+tokenTextLen; + if (textLen1 + threadState->charPool->tUpto > CHAR_BLOCK_SIZE) { + if (textLen1 > CHAR_BLOCK_SIZE) { + // Just skip this term, to remain as robust as + // possible during indexing. A TokenFilter + // can be inserted into the analyzer chain if + // other behavior is wanted (pruning the term + // to a prefix, throwing an exception, etc). + if (threadState->maxTermPrefix == NULL){ + threadState->maxTermPrefix = _CL_NEWARRAY(TCHAR,31); + _tcsncpy(threadState->maxTermPrefix,tokenText,30); + threadState->maxTermPrefix[30] = 0; + } + + // Still increment position: + position++; + return; + } + threadState->charPool->nextBuffer(); + } + TCHAR* text = threadState->charPool->buffer; + TCHAR* textUpto = text+ threadState->charPool->tUpto; + + // Pull next free Posting from free list + threadState->p = threadState->postingsFreeListTS[--threadState->postingsFreeCountTS]; + assert(threadState->p != NULL); + threadState->p->textStart = textUpto + threadState->charPool->tOffset - text; + threadState->charPool->tUpto += textLen1; + + _tcsncpy(textUpto, tokenText, tokenTextLen); + textUpto[tokenTextLen] = CLUCENE_END_OF_WORD; + + assert (postingsHash[hashPos] == NULL); + + postingsHash.values[hashPos] = threadState->p; + numPostings++; + + if (numPostings == postingsHashHalfSize) + rehashPostings(2*postingsHashSize); + + // Init first slice for freq & prox streams + const int32_t firstSize = levelSizeArray[0]; + + const int32_t upto1 = threadState->postingsPool->newSlice(firstSize); + threadState->p->freqStart = threadState->p->freqUpto = threadState->postingsPool->tOffset + upto1; + + const int32_t upto2 = threadState->postingsPool->newSlice(firstSize); + threadState->p->proxStart = threadState->p->proxUpto = threadState->postingsPool->tOffset + upto2; + + threadState->p->lastDocCode = threadState->docID << 1; + threadState->p->lastDocID = threadState->docID; + threadState->p->docFreq = 1; + + if (doVectors) { + threadState->vector = addNewVector(); + if (doVectorOffsets) { + offsetStart = offsetStartCode = offset + token->startOffset(); + offsetEnd = offset + token->endOffset(); + } + } + + proxCode = position; + } + + threadState->proxUpto = threadState->p->proxUpto & BYTE_BLOCK_MASK; + threadState->prox = threadState->postingsPool->buffers[threadState->p->proxUpto >> BYTE_BLOCK_SHIFT]; + assert (threadState->prox != NULL); + + if (payload != NULL && payload->length() > 0) { + threadState->writeProxVInt((proxCode<<1)|1); + threadState->writeProxVInt(payload->length()); + threadState->writeProxBytes(payload->getData().values, payload->getOffset(), payload->length()); + fieldInfo->storePayloads = true; + } else + threadState->writeProxVInt(proxCode<<1); + + threadState->p->proxUpto = threadState->proxUpto + (threadState->p->proxUpto & BYTE_BLOCK_NOT_MASK); + + threadState->p->lastPosition = position++; + + if (doVectorPositions) { + threadState->posUpto = threadState->vector->posUpto & BYTE_BLOCK_MASK; + threadState->pos = threadState->vectorsPool->buffers[threadState->vector->posUpto >> BYTE_BLOCK_SHIFT]; + threadState->writePosVInt(proxCode); + threadState->vector->posUpto = threadState->posUpto + (threadState->vector->posUpto & BYTE_BLOCK_NOT_MASK); + } + + if (doVectorOffsets) { + threadState->offsetUpto = threadState->vector->offsetUpto & BYTE_BLOCK_MASK; + threadState->offsets = threadState->vectorsPool->buffers[threadState->vector->offsetUpto >> BYTE_BLOCK_SHIFT]; + threadState->writeOffsetVInt(offsetStartCode); + threadState->writeOffsetVInt(offsetEnd-offsetStart); + threadState->vector->lastOffset = offsetEnd; + threadState->vector->offsetUpto = threadState->offsetUpto + (threadState->vector->offsetUpto & BYTE_BLOCK_NOT_MASK); + } + } catch (CLuceneError& t) { + throw AbortException(t, _parent); + } +} + +void DocumentsWriter::ThreadState::FieldData::rehashPostings(const int32_t newSize) { + + const int32_t newMask = newSize-1; + + ValueArray newHash(newSize); + int32_t hashPos; + uint32_t code; + const TCHAR* pos = NULL; + const TCHAR* start = NULL; + Posting* p0; + + for(int32_t i=0;icharPool->buffers[p0->textStart >> CHAR_BLOCK_SHIFT] + (p0->textStart & CHAR_BLOCK_MASK); + pos = start; + while( *pos != CLUCENE_END_OF_WORD) + pos++; + code = 0; + while (pos > start) + code = (code*31) + *--pos; + + hashPos = code & newMask; + assert (hashPos >= 0); + if (newHash[hashPos] != NULL) { + const int32_t inc = ((code>>8)+code)|1; + do { + code += inc; + hashPos = code & newMask; + } while (newHash[hashPos] != NULL); + } + newHash.values[hashPos] = p0; + } + } + + postingsHashMask = newMask; + postingsHash.deleteArray(); + postingsHash.length = newHash.length; + postingsHash.values = newHash.takeArray(); + postingsHashSize = newSize; + postingsHashHalfSize = newSize >> 1; +} + +void DocumentsWriter::ThreadState::FieldData::writeVectors(FieldInfo* fieldInfo) { + assert (fieldInfo->storeTermVector); + + threadState->vectorFieldNumbers.values[threadState->numVectorFields] = fieldInfo->number; + threadState->vectorFieldPointers.values[threadState->numVectorFields] = threadState->tvfLocal->getFilePointer(); + threadState->numVectorFields++; + + const int32_t numPostingsVectors = postingsVectorsUpto; + + threadState->tvfLocal->writeVInt(numPostingsVectors); + uint8_t bits = 0x0; + if (doVectorPositions) + bits |= TermVectorsReader::STORE_POSITIONS_WITH_TERMVECTOR; + if (doVectorOffsets) + bits |= TermVectorsReader::STORE_OFFSET_WITH_TERMVECTOR; + threadState->tvfLocal->writeByte(bits); + + threadState->doVectorSort(threadState->postingsVectors, numPostingsVectors); + + Posting* lastPosting = NULL; + + ByteSliceReader* reader = vectorSliceReader; + + for(int32_t j=0;jpostingsVectors[j]; + Posting* posting = vector->p; + const int32_t freq = posting->docFreq; + + int32_t prefix = 0; + const TCHAR* text2 = threadState->charPool->buffers[posting->textStart >> CHAR_BLOCK_SHIFT]; + const TCHAR* start2 = text2 + (posting->textStart & CHAR_BLOCK_MASK); + const TCHAR* pos2 = start2; + + // Compute common prefix between last term and + // this term + if (lastPosting == NULL) + prefix = 0; + else { + const TCHAR* text1 = threadState->charPool->buffers[lastPosting->textStart >> CHAR_BLOCK_SHIFT]; + const TCHAR* start1 = text1 + (lastPosting->textStart & CHAR_BLOCK_MASK); + const TCHAR* pos1 = start1; + while(true) { + if (*pos1 != *pos2 || *pos1 == CLUCENE_END_OF_WORD) { + prefix = pos1-start1; + break; + } + pos1++; + pos2++; + } + } + lastPosting = posting; + + // Compute length + while(*pos2 != CLUCENE_END_OF_WORD) + pos2++; + + const int32_t suffix = pos2 - start2 - prefix; + threadState->tvfLocal->writeVInt(prefix); + threadState->tvfLocal->writeVInt(suffix); + threadState->tvfLocal->writeChars(start2 + prefix, suffix); + threadState->tvfLocal->writeVInt(freq); + + if (doVectorPositions) { + reader->init(threadState->vectorsPool, vector->posStart, vector->posUpto); + reader->writeTo(threadState->tvfLocal); + } + + if (doVectorOffsets) { + reader->init(threadState->vectorsPool, vector->offsetStart, vector->offsetUpto); + reader->writeTo(threadState->tvfLocal); + } + } +} + +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/FieldInfos.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/FieldInfos.cpp new file mode 100644 index 0000000..289f4ed --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/FieldInfos.cpp @@ -0,0 +1,238 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.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" +#include "CLucene/store/IndexInput.h" +#include "CLucene/store/IndexOutput.h" + +CL_NS_USE(store) +CL_NS_USE(document) +CL_NS_USE(util) +CL_NS_DEF(index) + + +FieldInfo::FieldInfo( const TCHAR* _fieldName, + const bool _isIndexed, + const int32_t _fieldNumber, + const bool _storeTermVector, + const bool _storeOffsetWithTermVector, + const bool _storePositionWithTermVector, + const bool _omitNorms, + const bool _storePayloads): + name(CLStringIntern::intern(_fieldName )), + isIndexed(_isIndexed), + number(_fieldNumber), + storeTermVector(_storeTermVector), + storeOffsetWithTermVector(_storeOffsetWithTermVector), + storePositionWithTermVector(_storePositionWithTermVector), + omitNorms(_omitNorms), storePayloads(_storePayloads) +{ +} + +FieldInfo::~FieldInfo(){ + CL_NS(util)::CLStringIntern::unintern(name); +} + +FieldInfo* FieldInfo::clone() { + return _CLNEW FieldInfo(name, isIndexed, number, storeTermVector, storePositionWithTermVector, + storeOffsetWithTermVector, omitNorms, storePayloads); +} + +FieldInfos::FieldInfos(): + byName(false,false),byNumber(true) { +} + +FieldInfos::~FieldInfos(){ + byName.clear(); + byNumber.clear(); +} + +FieldInfos::FieldInfos(Directory* d, const char* name): + byName(false,false),byNumber(true) +{ + IndexInput* input = d->openInput(name); + try { + read(input); + } _CLFINALLY ( + input->close(); + _CLDELETE(input); + ); +} + +FieldInfos* FieldInfos::clone() +{ + FieldInfos* fis = _CLNEW FieldInfos(); + const size_t numField = byNumber.size(); + for(size_t i=0;iclone(); + fis->byNumber.push_back(fi); + fis->byName.put( fi->name, fi); + } + return fis; +} + +void FieldInfos::add(const Document* doc) { + const Document::FieldsType& fields = *doc->getFields(); + Field* field; + for ( Document::FieldsType::const_iterator itr = fields.begin() ; itr != fields.end() ; itr++ ){ + field = *itr; + add(field->name(), field->isIndexed(), field->isTermVectorStored(), field->isStorePositionWithTermVector(), + field->isStoreOffsetWithTermVector(), field->getOmitNorms()); + } +} + +void FieldInfos::addIndexed(const TCHAR** names, const bool storeTermVectors, const bool storePositionWithTermVector, + const bool storeOffsetWithTermVector) { + size_t i = 0; + while (names[i]) { + add(names[i], true, storeTermVectors, storePositionWithTermVector, storeOffsetWithTermVector); + ++i; + } +} + +void FieldInfos::add(const TCHAR** names,const bool isIndexed, const bool storeTermVectors, + const bool storePositionWithTermVector, const bool storeOffsetWithTermVector, const bool omitNorms, const bool storePayloads) +{ + size_t i=0; + while ( names[i] != NULL ){ + add(names[i], isIndexed, storeTermVectors, storePositionWithTermVector, + storeOffsetWithTermVector, omitNorms, storePayloads); + ++i; + } +} + +FieldInfo* FieldInfos::add( const TCHAR* name, const bool isIndexed, const bool storeTermVector, + const bool storePositionWithTermVector, const bool storeOffsetWithTermVector, const bool omitNorms, + const bool storePayloads) { + FieldInfo* fi = fieldInfo(name); + if (fi == NULL) { + return addInternal(name, isIndexed, storeTermVector, + storePositionWithTermVector, + storeOffsetWithTermVector, omitNorms, storePayloads); + } else { + if (fi->isIndexed != isIndexed) { + fi->isIndexed = true; // once indexed, always index + } + if (fi->storeTermVector != storeTermVector) { + fi->storeTermVector = true; // once vector, always vector + } + if (fi->storePositionWithTermVector != storePositionWithTermVector) { + fi->storePositionWithTermVector = true; // once vector, always vector + } + if (fi->storeOffsetWithTermVector != storeOffsetWithTermVector) { + fi->storeOffsetWithTermVector = true; // once vector, always vector + } + if (fi->omitNorms != omitNorms) { + fi->omitNorms = false; // once norms are stored, always store + } + if (fi->storePayloads != storePayloads) { + fi->storePayloads = true; + } + } + return fi; +} + +FieldInfo* FieldInfos::addInternal( const TCHAR* name, const bool isIndexed, const bool storeTermVector, + const bool storePositionWithTermVector, const bool storeOffsetWithTermVector, + const bool omitNorms, const bool storePayloads) { + + FieldInfo* fi = _CLNEW FieldInfo(name, isIndexed, byNumber.size(), storeTermVector, + storePositionWithTermVector, storeOffsetWithTermVector, omitNorms, storePayloads); + byNumber.push_back(fi); + byName.put( fi->name, fi); + return fi; +} + +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 { + FieldInfo* ret = byName.get(fieldName); + return ret; +} + +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]; +} + +size_t FieldInfos::size()const { + return byNumber.size(); +} + +bool FieldInfos::hasVectors() const{ + for (size_t i = 0; i < size(); i++) { + if (fieldInfo(i)->storeTermVector) + return true; + } + return false; +} + +void FieldInfos::write(Directory* d, const char* name) const{ + IndexOutput* output = d->createOutput(name); + try { + write(output); + } _CLFINALLY ( + output->close(); + _CLDELETE(output); + ); +} + +void FieldInfos::write(IndexOutput* output) const{ + output->writeVInt(static_cast(size())); + FieldInfo* fi; + uint8_t bits; + for (size_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; + if (fi->storePayloads) bits |= STORE_PAYLOADS; + + output->writeString(fi->name,_tcslen(fi->name)); + output->writeByte(bits); + } +} + +void FieldInfos::read(IndexInput* input) { + int32_t size = input->readVInt();//read in the size + uint8_t bits; + bool isIndexed,storeTermVector,storePositionsWithTermVector,storeOffsetWithTermVector,omitNorms,storePayloads; + for (int32_t i = 0; i < size; ++i){ + TCHAR* name = input->readString(); //we could read name into a string buffer, but we can't be sure what the maximum field length will be. + bits = input->readByte(); + isIndexed = (bits & IS_INDEXED) != 0; + storeTermVector = (bits & STORE_TERMVECTOR) != 0; + storePositionsWithTermVector = (bits & STORE_POSITIONS_WITH_TERMVECTOR) != 0; + storeOffsetWithTermVector = (bits & STORE_OFFSET_WITH_TERMVECTOR) != 0; + omitNorms = (bits & OMIT_NORMS) != 0; + storePayloads = (bits & STORE_PAYLOADS) != 0; + + addInternal(name, isIndexed, storeTermVector, storePositionsWithTermVector, storeOffsetWithTermVector, omitNorms, storePayloads); + _CLDELETE_CARRAY(name); + } +} + +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/FieldsReader.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/FieldsReader.cpp new file mode 100644 index 0000000..47b0682 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/FieldsReader.cpp @@ -0,0 +1,568 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" + +#include +#include "CLucene/util/Misc.h" +#include "CLucene/util/_StringIntern.h" +#include "CLucene/util/CLStreams.h" +#include "CLucene/store/Directory.h" +#include "CLucene/store/IndexInput.h" +#include "CLucene/document/Document.h" +#include "CLucene/document/FieldSelector.h" +#include "_FieldInfos.h" +#include "_FieldsWriter.h" +#include "_FieldsReader.h" +#include "CLucene/analysis/AnalysisHeader.h" +#include + +CL_NS_USE(store) +CL_NS_USE(document) +CL_NS_USE(util) +CL_NS_DEF(index) + +FieldsReader::FieldsReader(Directory* d, const char* segment, FieldInfos* fn, int32_t _readBufferSize, int32_t _docStoreOffset, int32_t size): + fieldInfos(fn), cloneableFieldsStream(NULL), fieldsStream(NULL), indexStream(NULL), + numTotalDocs(0),_size(0), closed(false),docStoreOffset(0) +{ +//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 != NULL, "segment != NULL"); + + bool success = false; + + try { + cloneableFieldsStream = d->openInput( Misc::segmentname(segment,".fdt").c_str(), _readBufferSize ); + fieldsStream = cloneableFieldsStream->clone(); + + indexStream = d->openInput( Misc::segmentname(segment,".fdx").c_str(), _readBufferSize ); + + if (_docStoreOffset != -1) { + // We read only a slice out of this shared fields file + this->docStoreOffset = _docStoreOffset; + this->_size = size; + + // Verify the file is long enough to hold all of our + // docs + CND_CONDITION(((int32_t) (indexStream->length() / 8)) >= size + this->docStoreOffset, + "the file is not long enough to hold all of our docs"); + } else { + this->docStoreOffset = 0; + this->_size = (int32_t) (indexStream->length() >> 3); + } + + //_size = (int32_t)indexStream->length()/8; + + numTotalDocs = (int32_t) (indexStream->length() >> 3); + success = true; + } _CLFINALLY ({ + // With lock-less commits, it's entirely possible (and + // fine) to hit a FileNotFound exception above. In + // this case, we want to explicitly close any subset + // of things that were opened so that we don't have to + // wait for a GC to do so. + if (!success) { + close(); + } + }); +} + +FieldsReader::~FieldsReader(){ +//Func - Destructor +//Pre - true +//Post - The instance has been destroyed + + close(); +} + +void FieldsReader::ensureOpen() { + if (closed) { + _CLTHROWA(CL_ERR_IllegalState, "this FieldsReader is closed"); + } +} + +void FieldsReader::close() { + if (!closed) { + if (fieldsStream){ + fieldsStream->close(); + _CLDELETE(fieldsStream); + } + if (cloneableFieldsStream){ + cloneableFieldsStream->close(); + _CLDELETE(cloneableFieldsStream); + } + if(indexStream){ + indexStream->close(); + _CLDELETE(indexStream); + } + /* + CL_NS(store)::IndexInput* localFieldsStream = fieldsStreamTL.get(); + if (localFieldsStream != NULL) { + localFieldsStream->close(); + fieldsStreamTL->set(NULL); + }*/ + closed = true; + } +} + +int32_t FieldsReader::size() const{ + return _size; +} + +bool FieldsReader::doc(int32_t n, Document& doc, const CL_NS(document)::FieldSelector* fieldSelector) { + if ( (n + docStoreOffset) * 8L > indexStream->length() ) + return false; + indexStream->seek((n + docStoreOffset) * 8L); + int64_t position = indexStream->readLong(); + fieldsStream->seek(position); + + int32_t numFields = fieldsStream->readVInt(); + for (int32_t i = 0; i < numFields; i++) { + const int32_t fieldNumber = fieldsStream->readVInt(); + FieldInfo* fi = fieldInfos->fieldInfo(fieldNumber); + if ( fi == NULL ) _CLTHROWA(CL_ERR_IO, "Field stream is invalid"); + + FieldSelector::FieldSelectorResult acceptField = (fieldSelector == NULL) ? FieldSelector::LOAD : fieldSelector->accept(fi->name); + + uint8_t bits = fieldsStream->readByte(); + CND_CONDITION(bits <= FieldsWriter::FIELD_IS_COMPRESSED + FieldsWriter::FIELD_IS_TOKENIZED + FieldsWriter::FIELD_IS_BINARY, + "invalid field bits"); + + const bool compressed = (bits & FieldsWriter::FIELD_IS_COMPRESSED) != 0; + const bool tokenize = (bits & FieldsWriter::FIELD_IS_TOKENIZED) != 0; + const bool binary = (bits & FieldsWriter::FIELD_IS_BINARY) != 0; + + //TODO: Find an alternative approach here if this list continues to grow beyond the + //list of 5 or 6 currently here. See Lucene 762 for discussion + if (acceptField == FieldSelector::LOAD) { + addField(doc, fi, binary, compressed, tokenize); + } + else if (acceptField == FieldSelector::LOAD_FOR_MERGE) { + addFieldForMerge(doc, fi, binary, compressed, tokenize); + } + else if (acceptField == FieldSelector::LOAD_AND_BREAK){ + addField(doc, fi, binary, compressed, tokenize); + break;//Get out of this loop + } + else if (acceptField == FieldSelector::LAZY_LOAD) { + addFieldLazy(doc, fi, binary, compressed, tokenize); + } + else if (acceptField == FieldSelector::SIZE){ + skipField(binary, compressed, addFieldSize(doc, fi, binary, compressed)); + } + else if (acceptField == FieldSelector::SIZE_AND_BREAK){ + addFieldSize(doc, fi, binary, compressed); + break; + }else { + skipField(binary, compressed); + } + } + return true; +} + +CL_NS(store)::IndexInput* FieldsReader::rawDocs(int32_t* lengths, const int32_t startDocID, const int32_t numDocs) { + indexStream->seek((docStoreOffset+startDocID) * 8L); + int64_t startOffset = indexStream->readLong(); + int64_t lastOffset = startOffset; + int32_t count = 0; + while (count < numDocs) { + int64_t offset; + const int32_t docID = docStoreOffset + startDocID + count + 1; + CND_CONDITION( docID <= numTotalDocs, "invalid docID"); + if (docID < numTotalDocs) + offset = indexStream->readLong(); + else + offset = fieldsStream->length(); + lengths[count++] = static_cast(offset-lastOffset); + lastOffset = offset; + } + + fieldsStream->seek(startOffset); + + return fieldsStream; +} + +void FieldsReader::skipField(const bool binary, const bool compressed) { + skipField(binary, compressed, fieldsStream->readVInt()); +} + +void FieldsReader::skipField(const bool binary, const bool compressed, const int32_t toRead) { + if (binary || compressed) { + int64_t pointer = fieldsStream->getFilePointer(); + fieldsStream->seek(pointer + toRead); + } else { + //We need to skip chars. This will slow us down, but still better + fieldsStream->skipChars(toRead); + } +} + +void FieldsReader::addFieldLazy(CL_NS(document)::Document& doc, const FieldInfo* fi, const bool binary, + const bool compressed, const bool tokenize) { + if (binary) { + int32_t toRead = fieldsStream->readVInt(); + int64_t pointer = fieldsStream->getFilePointer(); + if (compressed) { + doc.add(*_CLNEW LazyField(this, fi->name, Field::STORE_COMPRESS, toRead, pointer)); + } else { + doc.add(*_CLNEW LazyField(this, fi->name, Field::STORE_YES, toRead, pointer)); + } + //Need to move the pointer ahead by toRead positions + fieldsStream->seek(pointer + toRead); + } else { + LazyField* f = NULL; + if (compressed) { + int32_t toRead = fieldsStream->readVInt(); + int64_t pointer = fieldsStream->getFilePointer(); + f = _CLNEW LazyField(this, fi->name, Field::STORE_COMPRESS, toRead, pointer); + //skip over the part that we aren't loading + fieldsStream->seek(pointer + toRead); + f->setOmitNorms(fi->omitNorms); + } else { + int32_t length = fieldsStream->readVInt(); + int64_t pointer = fieldsStream->getFilePointer(); + //Skip ahead of where we are by the length of what is stored + fieldsStream->skipChars(length); + f = _CLNEW LazyField(this, fi->name, Field::STORE_YES | getIndexType(fi, tokenize) | getTermVectorType(fi), length, pointer); + f->setOmitNorms(fi->omitNorms); + } + doc.add(*f); + } +} + +// in merge mode we don't uncompress the data of a compressed field +void FieldsReader::addFieldForMerge(CL_NS(document)::Document& doc, const FieldInfo* fi, const bool binary, const bool compressed, const bool tokenize) { + void* data; + Field::ValueType v; + + if ( binary || compressed) { + int32_t toRead = fieldsStream->readVInt(); + CL_NS(util)::ValueArray * b = new CL_NS(util)::ValueArray(toRead); + fieldsStream->readBytes(b->values,toRead); + v = Field::VALUE_BINARY; + data = b; //.takeArray(); + } else { + data = fieldsStream->readString(); + v = Field::VALUE_STRING; + } + + doc.add(*_CLNEW FieldForMerge(data, v, fi, binary, compressed, tokenize)); +} + +void FieldsReader::addField(CL_NS(document)::Document& doc, const FieldInfo* fi, const bool binary, const bool compressed, const bool tokenize) { + + //we have a binary stored field, and it may be compressed + if (binary) { + const int32_t toRead = fieldsStream->readVInt(); + ValueArray* b = _CLNEW ValueArray(toRead); + fieldsStream->readBytes(b->values,toRead); + if (compressed) { + // we still do not support compressed fields + ValueArray* data = _CLNEW ValueArray; + try{ + uncompress(*b, *data); + }catch(CLuceneError& err){ + _CLDELETE(data); + _CLDELETE(b); + throw err; + } + _CLDELETE(b); + doc.add(* _CLNEW Field(fi->name, data, Field::STORE_COMPRESS, false)); + }else{ + doc.add(* _CLNEW Field(fi->name, b, Field::STORE_YES, false)); + } + //no need to clean up, Field consumes b + } else { + uint8_t bits = 0; + bits |= getIndexType(fi, tokenize); + bits |= getTermVectorType(fi); + + Field* f = NULL; + if (compressed) { + bits |= Field::STORE_COMPRESS; + const int32_t toRead = fieldsStream->readVInt(); + ValueArray* b = _CLNEW ValueArray(toRead); + fieldsStream->readBytes(b->values,toRead); + ValueArray data; + try{ + uncompress(*b, data); + }_CLFINALLY( _CLDELETE(b) ) + +#ifndef _ASCII + //convert to utf8 + TCHAR* result = _CL_NEWARRAY(TCHAR, data.length); + size_t l = lucene_utf8towcs(result, (const char*)data.values, data.length); + result[l] = 0; + + //if we were a bit too pesimistic with the size, then shrink the memory... + if ( l < data.length/2 ){ + TCHAR* tmp = result; + result = STRDUP_TtoT(result); + _CLDELETE_LCARRAY(tmp); + } + + f = _CLNEW Field(fi->name, // field name + result, // uncompress the value and add as string + bits, false); +#else + f = _CLNEW Field(fi->name, // field name + reinterpret_cast(data.values), // uncompress the value and add as string + bits, false); +#endif + f->setOmitNorms(fi->omitNorms); + } else { + bits |= Field::STORE_YES; + TCHAR* str = fieldsStream->readString(); + f = _CLNEW Field(fi->name, // name + str, // read value + bits, false); + f->setOmitNorms(fi->omitNorms); + } + doc.add(*f); + } +} + +int32_t FieldsReader::addFieldSize(CL_NS(document)::Document& doc, const FieldInfo* fi, const bool binary, const bool compressed) { + const int32_t size = fieldsStream->readVInt(); + const uint32_t bytesize = binary || compressed ? size : 2*size; + ValueArray* sizebytes = _CLNEW ValueArray(4); + sizebytes->values[0] = (uint8_t) (bytesize>>24); + sizebytes->values[1] = (uint8_t) (bytesize>>16); + sizebytes->values[2] = (uint8_t) (bytesize>> 8); + sizebytes->values[3] = (uint8_t) bytesize ; + doc.add(*_CLNEW Field(fi->name, sizebytes, Field::STORE_YES, false)); + return size; +} + +CL_NS(document)::Field::TermVector FieldsReader::getTermVectorType(const FieldInfo* fi) { + if (fi->storeTermVector) { + if (fi->storeOffsetWithTermVector) { + if (fi->storePositionWithTermVector) { + return Field::TERMVECTOR_WITH_POSITIONS_OFFSETS; + } else { + return Field::TERMVECTOR_WITH_OFFSETS; + } + } else if (fi->storePositionWithTermVector) { + return Field::TERMVECTOR_WITH_POSITIONS; + } else { + return Field::TERMVECTOR_YES; + } + } else { + return Field::TERMVECTOR_NO ; + } +} + +CL_NS(document)::Field::Index FieldsReader::getIndexType(const FieldInfo* fi, const bool tokenize) { + if (fi->isIndexed && tokenize) + return Field::INDEX_TOKENIZED; + else if (fi->isIndexed && !tokenize) + return Field::INDEX_UNTOKENIZED; + else + return Field::INDEX_NO; +} + + +FieldsReader::LazyField::LazyField(FieldsReader* _parent, const TCHAR* _name, + int config, const int32_t _toRead, const int64_t _pointer) +: Field(_name, config), parent(_parent) { + // todo: need to allow for auto setting Field::INDEX_NO | Field::TERMVECTOR_NO so only Store is required + this->toRead = _toRead; + this->pointer = _pointer; + lazy = true; +} +FieldsReader::LazyField::~LazyField(){ +} + +CL_NS(store)::IndexInput* FieldsReader::LazyField::getFieldStream(){ + CL_NS(store)::IndexInput* localFieldsStream = parent->fieldsStreamTL.get(); + if (localFieldsStream == NULL) { + localFieldsStream = parent->cloneableFieldsStream->clone(); + parent->fieldsStreamTL.set(localFieldsStream); + } + return localFieldsStream; +} + +const ValueArray* FieldsReader::LazyField::binaryValue(){ + parent->ensureOpen(); + if (fieldsData == NULL) { + ValueArray* b = _CLNEW ValueArray(toRead); + CL_NS(store)::IndexInput* localFieldsStream = getFieldStream(); + + //Throw this IO Exception since IndexREader.document does so anyway, so probably not that big of a change for people + //since they are already handling this exception when getting the document + try { + localFieldsStream->seek(pointer); + localFieldsStream->readBytes(b->values, toRead); + if (isCompressed() == true) { + ValueArray* data = _CLNEW ValueArray; + try{ + uncompress(*b, *data); + }catch (CLuceneError& err){ + _CLDELETE(data); + _CLDELETE(b); + throw err; + } + _CLDELETE(b); + fieldsData = data; + } else { + fieldsData = b; + } + valueType = VALUE_BINARY; + + }catch(CLuceneError& err){ + if ( err.number() != CL_ERR_IO ) throw err; + _CLTHROWA(CL_ERR_FieldReader, err.what()); + } + + } + return static_cast*>(fieldsData); +} + +CL_NS(util)::Reader* FieldsReader::LazyField::readerValue(){ + parent->ensureOpen(); + return (valueType & VALUE_READER) ? static_cast(fieldsData) : NULL; +} + + +CL_NS(analysis)::TokenStream* FieldsReader::LazyField::tokenStreamValue(){ + parent->ensureOpen(); + return (valueType & VALUE_TOKENSTREAM) ? static_cast(fieldsData) : NULL; +} + + +/** The value of the field as a String, or null. If null, the Reader value, +* binary value, or TokenStream value is used. Exactly one of stringValue(), +* readerValue(), binaryValue(), and tokenStreamValue() must be set. */ +const TCHAR* FieldsReader::LazyField::stringValue() { + parent->ensureOpen(); + if (fieldsData == NULL) { + CL_NS(store)::IndexInput* localFieldsStream = getFieldStream(); + localFieldsStream->seek(pointer); + if (isCompressed()) { + ValueArray b(toRead); + ValueArray uncompressed; + localFieldsStream->readBytes(b.values, toRead); + _resetValue(); + uncompress(b, uncompressed); //no need to catch error, memory all in frame + +#ifndef _ASCII + TCHAR* str = _CL_NEWARRAY(TCHAR, uncompressed.length); + size_t l = lucene_utf8towcs(str, (const char*)uncompressed.values, uncompressed.length); + str[l] = 0; + + if ( l < uncompressed.length/2 ){ + //too pesimistic with size... + fieldsData = STRDUP_TtoT(str); + _CLDELETE_LCARRAY(str); + }else{ + fieldsData = str; + } +#else + fieldsData = uncompressed.values; +#endif + } else { + //read in chars b/c we already know the length we need to read + TCHAR* chars = _CL_NEWARRAY(TCHAR, toRead+1); + if( ! chars ) + _CLTHROWA(CL_ERR_OutOfMemory, "IndexInput::readString"); + + localFieldsStream->readChars(chars, 0, toRead); + chars[toRead] = _T('\0'); + _resetValue(); + fieldsData = chars; + } + valueType = VALUE_STRING; + } + return static_cast(fieldsData); //instanceof String ? (String) fieldsData : null; +} + +int64_t FieldsReader::LazyField::getPointer() const { + parent->ensureOpen(); + return pointer; +} + +void FieldsReader::LazyField::setPointer(const int64_t _pointer) { + parent->ensureOpen(); + this->pointer = _pointer; +} + +int32_t FieldsReader::LazyField::getToRead() const { + parent->ensureOpen(); + return toRead; +} + +void FieldsReader::LazyField::setToRead(const int32_t _toRead) { + parent->ensureOpen(); + this->toRead = _toRead; +} + +const TCHAR* FieldsReader::FieldForMerge::stringValue() const { + return (valueType & VALUE_STRING) ? static_cast(fieldsData) : NULL; +} + +CL_NS(util)::Reader* FieldsReader::FieldForMerge::readerValue() const { + // not needed for merge + return NULL; +} + +const CL_NS(util)::ValueArray* FieldsReader::FieldForMerge::binaryValue(){ + return (valueType & VALUE_BINARY) ? static_cast*>(fieldsData) : NULL; +} + +CL_NS(analysis)::TokenStream* FieldsReader::FieldForMerge::tokenStreamValue() const { + // not needed for merge + return NULL; +} + +FieldsReader::FieldForMerge::FieldForMerge(void* _value, ValueType _type, const FieldInfo* fi, const bool binary, const bool compressed, const bool tokenize) : Field(fi->name, 0) { + + uint32_t bits = STORE_YES; + + this->fieldsData = _value; + this->valueType = _type; + + if (tokenize) bits |= INDEX_TOKENIZED; + if (compressed) bits |= STORE_COMPRESS; + + if (fi->isIndexed && !tokenize) bits |= INDEX_UNTOKENIZED; + if (fi->omitNorms) bits |= INDEX_NONORMS; + if (fi->storeOffsetWithTermVector) bits |= TERMVECTOR_WITH_OFFSETS; + if (fi->storePositionWithTermVector) bits |= TERMVECTOR_WITH_POSITIONS; + if (fi->storeTermVector) bits |= TERMVECTOR_YES; + + setConfig(bits); +} +FieldsReader::FieldForMerge::~FieldForMerge(){ +} +const char* FieldsReader::FieldForMerge::getClassName(){ + return "FieldsReader::FieldForMerge"; +} +const char* FieldsReader::FieldForMerge::getObjectName() const{ + return getClassName(); +} + +void FieldsReader::uncompress(const CL_NS(util)::ValueArray& input, CL_NS(util)::ValueArray& output){ + stringstream out; + string err; + if ( ! Misc::inflate(input.values, input.length, out, err) ){ + _CLTHROWA(CL_ERR_IO, err.c_str()); + } + + // get length of file: + out.seekg (0, ios::end); + size_t length = out.tellg(); + out.seekg (0, ios::beg); + + output.resize(length+1); + out.read((char*)output.values,length); + output.values[length] = 0;//null-terminate in case we want to use it as utf8 +} + +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/FieldsWriter.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/FieldsWriter.cpp new file mode 100644 index 0000000..9cf09ab --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/FieldsWriter.cpp @@ -0,0 +1,269 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "_FieldsWriter.h" + +//#include "CLucene/util/VoidMap.h" +#include "CLucene/util/CLStreams.h" +#include "CLucene/util/Misc.h" +#include "CLucene/store/Directory.h" +#include "CLucene/store/_RAMDirectory.h" +#include "CLucene/store/IndexOutput.h" +#include "CLucene/document/Document.h" +#include "CLucene/document/Field.h" +#include "_FieldInfos.h" +#include "_FieldsReader.h" +#include + +CL_NS_USE(store) +CL_NS_USE(util) +CL_NS_USE(document) +CL_NS_DEF(index) + +FieldsWriter::FieldsWriter(Directory* d, const char* 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 != NULL,"segment is NULL"); + + fieldsStream = d->createOutput ( Misc::segmentname(segment,".fdt").c_str() ); + + CND_CONDITION(fieldsStream != NULL,"fieldsStream is NULL"); + + indexStream = d->createOutput( Misc::segmentname(segment,".fdx").c_str() ); + + CND_CONDITION(indexStream != NULL,"indexStream is NULL"); + + doClose = true; +} + +FieldsWriter::FieldsWriter(CL_NS(store)::IndexOutput* fdx, CL_NS(store)::IndexOutput* fdt, FieldInfos* fn): + fieldInfos(fn) +{ + fieldsStream = fdt; + CND_CONDITION(fieldsStream != NULL,"fieldsStream is NULL"); + indexStream = fdx; + CND_CONDITION(fieldsStream != NULL,"fieldsStream is NULL"); + doClose = false; +} + +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 + + if (! doClose ) + return; + + //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; + { + const Document::FieldsType& fields = *doc->getFields(); + for ( Document::FieldsType::const_iterator itr = fields.begin() ; itr != fields.end() ; itr++ ){ + Field* field = *itr; + if (field->isStored()) + storedCount++; + } + fieldsStream->writeVInt(storedCount); + } + { + const Document::FieldsType& fields = *doc->getFields(); + for ( Document::FieldsType::const_iterator itr = fields.begin() ; itr != fields.end() ; itr++ ){ + Field* field = *itr; + if (field->isStored()) { + writeField(fieldInfos->fieldInfo(field->name()), field); + } + } + } +} + +void FieldsWriter::writeField(FieldInfo* fi, CL_NS(document)::Field* field) +{ + // if the field as an instanceof FieldsReader.FieldForMerge, we're in merge mode + // and field.binaryValue() already returns the compressed value for a field + // with isCompressed()==true, so we disable compression in that case + bool disableCompression = (field->instanceOf(FieldsReader::FieldForMerge::getClassName())); + + fieldsStream->writeVInt(fi->number); + 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() ){ + // compression is enabled for the current field + CL_NS(util)::ValueArray dataB; + const CL_NS(util)::ValueArray* data = &dataB; + + if (disableCompression) { + // optimized case for merging, the data + // is already compressed + data = field->binaryValue(); + } else { + // check if it is a binary field + if (field->isBinary()) { + compress(*field->binaryValue(), dataB); + }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(); + + int32_t sz = r->size(); + if ( sz < 0 ) + sz = 10000000; //todo: we should warn the developer here.... + + //read the entire string + const TCHAR* rv = NULL; + int64_t rl = r->read(rv, sz, 1); + if ( rl > LUCENE_INT32_MAX_SHOULDBE ) + _CLTHROWA(CL_ERR_Runtime,"Field length too long"); + else if ( rl < 0 ) + rl = 0; + + string str = lucene_wcstoutf8string(rv, rl); + CL_NS(util)::ValueArray utfstr; + utfstr.length = str.length(); + utfstr.values = (uint8_t*)str.c_str(); + compress(utfstr, dataB); + utfstr.values = NULL; + }else if ( field->stringValue() != NULL ){ + string str = lucene_wcstoutf8string(field->stringValue(), LUCENE_INT32_MAX_SHOULDBE); + CL_NS(util)::ValueArray utfstr; + utfstr.length = str.length(); + utfstr.values = (uint8_t*)str.c_str(); + compress(utfstr, dataB); + utfstr.values = NULL; + } + } + fieldsStream->writeVInt(data->length); + fieldsStream->writeBytes(data->values, data->length); + + }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()) { + const CL_NS(util)::ValueArray* data = field->binaryValue(); + fieldsStream->writeVInt(data->length); + fieldsStream->writeBytes(data->values, data->length); + + }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(); + + int32_t sz = r->size(); + if ( sz < 0 ) + sz = 10000000; //todo: we should warn the developer here.... + + //read the entire string + const TCHAR* rv; + int64_t rl = r->read(rv, sz, 1); + 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"); + } +} + +void FieldsWriter::flushDocument(int32_t numStoredFields, CL_NS(store)::RAMOutputStream* buffer) { + indexStream->writeLong(fieldsStream->getFilePointer()); + fieldsStream->writeVInt(numStoredFields); + buffer->writeTo(fieldsStream); +} + +void FieldsWriter::flush() { + indexStream->flush(); + fieldsStream->flush(); +} + +void FieldsWriter::addRawDocuments(CL_NS(store)::IndexInput* stream, const int32_t* lengths, const int32_t numDocs) { + int64_t position = fieldsStream->getFilePointer(); + const int64_t start = position; + for(int32_t i=0;iwriteLong(position); + position += lengths[i]; + } + fieldsStream->copyBytes(stream, position-start); + CND_CONDITION(fieldsStream->getFilePointer() == position,"fieldsStream->getFilePointer() != position"); +} + +void FieldsWriter::compress(const CL_NS(util)::ValueArray& input, CL_NS(util)::ValueArray& output){ + stringstream out; + string err; + if ( ! Misc::deflate(input.values, input.length, out, err) ){ + _CLTHROWA(CL_ERR_IO, err.c_str()); + } + + // get length of file: + out.seekg (0, ios::end); + size_t length = out.tellg(); + out.seekg (0, ios::beg); + + output.resize(length); + out.read((char*)output.values,length); +} + +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/IndexDeletionPolicy.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/IndexDeletionPolicy.cpp new file mode 100644 index 0000000..49007ee --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/IndexDeletionPolicy.cpp @@ -0,0 +1,140 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "IndexDeletionPolicy.h" + +CL_NS_DEF(index) + +IndexDeletionPolicy::~IndexDeletionPolicy(){ +} +IndexCommitPoint::~IndexCommitPoint(){ +} + + + +KeepOnlyLastCommitDeletionPolicy::~KeepOnlyLastCommitDeletionPolicy(){ +} + +void KeepOnlyLastCommitDeletionPolicy::onInit(std::vector& commits) { + // Note that commits.size() should normally be 1: + onCommit(commits); +} + +void KeepOnlyLastCommitDeletionPolicy::onCommit(std::vector& commits) { + // Note that commits.size() should normally be 2 (if not + // called by onInit above): + size_t size = commits.size(); + for(size_t i=0;ideleteCommitPoint(); + } +} + +const char* KeepOnlyLastCommitDeletionPolicy::getClassName(){ + return "KeepOnlyLastCommitDeletionPolicy"; +} +const char* KeepOnlyLastCommitDeletionPolicy::getObjectName() const{ + return getClassName(); +} + + + +/** A {@link IndexDeletionPolicy} that wraps around any other + * {@link IndexDeletionPolicy} and adds the ability to hold and + * later release a single "snapshot" of an index. While + * the snapshot is held, the {@link IndexWriter} will not + * remove any files associated with it even if the index is + * otherwise being actively, arbitrarily changed. Because + * we wrap another arbitrary {@link IndexDeletionPolicy}, this + * gives you the freedom to continue using whatever {@link + * IndexDeletionPolicy} you would normally want to use with your + * index. + +class SnapshotDeletionPolicy: public IndexDeletionPolicy { +private: + IndexCommitPoint lastCommit; + IndexDeletionPolicy primary; + IndexCommitPoint snapshot; + DEFINE_MUTEX(SnapshotDeletionPolicy_LOCK) + + class MyCommitPoint: public IndexCommitPoint { + IndexCommitPoint cp; + public: + MyCommitPoint(IndexCommitPoint cp) { + this.cp = cp; + } + String getSegmentsFileName() { + return cp.getSegmentsFileName(); + } + Collection getFileNames() throws IOException { + return cp.getFileNames(); + } + void deleteCommitPoint() { + synchronized(SnapshotDeletionPolicy_LOCK) { + // Suppress the delete request if this commit point is + // our current snapshot. + if (snapshot != cp) + cp->deleteCommitPoint(); + } + } + } + + List wrapCommits(List commits) { + final int count = commits.size(); + List myCommits = new ArrayList(count); + for(int i=0;i +#include "CLucene/util/Equators.h" + +CL_NS_DEF(index) + + +class CLUCENE_EXPORT IndexCommitPoint { +public: + virtual ~IndexCommitPoint(); + /** + * Get the segments file (segments_N) associated + * with this commit point. + */ + virtual std::string getSegmentsFileName() = 0; + + /** + * Returns all index files referenced by this commit point. + */ + virtual const std::vector& getFileNames() = 0; + + /** + * Delete this commit point. + *

+ * Upon calling this, the writer is notified that this commit + * point should be deleted. + *

+ * Decision that a commit-point should be deleted is taken by the {@link IndexDeletionPolicy} in effect + * and therefore this should only be called by its {@link IndexDeletionPolicy#onInit onInit()} or + * {@link IndexDeletionPolicy#onCommit onCommit()} methods. + */ + virtual void deleteCommitPoint() = 0; +}; + +/** + *

Expert: policy for deletion of stale {@link IndexCommitPoint index commits}. + * + *

Implement this interface, and pass it to one + * of the {@link IndexWriter} or {@link IndexReader} + * constructors, to customize when older + * {@link IndexCommitPoint point-in-time commits} + * are deleted from the index directory. The default deletion policy + * is {@link KeepOnlyLastCommitDeletionPolicy}, which always + * removes old commits as soon as a new commit is done (this + * matches the behavior before 2.2).

+ * + *

One expected use case for this (and the reason why it + * was first created) is to work around problems with an + * index directory accessed via filesystems like NFS because + * NFS does not provide the "delete on last close" semantics + * that Lucene's "point in time" search normally relies on. + * By implementing a custom deletion policy, such as "a + * commit is only removed once it has been stale for more + * than X minutes", you can give your readers time to + * refresh to the new commit before {@link IndexWriter} + * removes the old commits. Note that doing so will + * increase the storage requirements of the index. See LUCENE-710 + * for details.

+ */ +class CLUCENE_EXPORT IndexDeletionPolicy: public CL_NS(util)::NamedObject{ +public: + virtual ~IndexDeletionPolicy(); + + /** + *

This is called once when a writer is first + * instantiated to give the policy a chance to remove old + * commit points.

+ * + *

The writer locates all index commits present in the + * index directory and calls this method. The policy may + * choose to delete some of the commit points, doing so by + * calling method {@link IndexCommitPoint#delete delete()} + * of {@link IndexCommitPoint}.

+ * + *

Note: the last CommitPoint is the most recent one, + * i.e. the "front index state". Be careful not to delete it, + * unless you know for sure what you are doing, and unless + * you can afford to lose the index content while doing that. + * + * @param commits List of current + * {@link IndexCommitPoint point-in-time commits}, + * sorted by age (the 0th one is the oldest commit). + */ + virtual void onInit(std::vector& commits) = 0; + + /** + *

This is called each time the writer completed a commit. + * This gives the policy a chance to remove old commit points + * with each commit.

+ * + *

The policy may now choose to delete old commit points + * by calling method {@link IndexCommitPoint#delete delete()} + * of {@link IndexCommitPoint}.

+ * + *

If writer has autoCommit = true then + * this method will in general be called many times during + * one instance of {@link IndexWriter}. If + * autoCommit = false then this method is + * only called once when {@link IndexWriter#close} is + * called, or not at all if the {@link IndexWriter#abort} + * is called. + * + *

Note: the last CommitPoint is the most recent one, + * i.e. the "front index state". Be careful not to delete it, + * unless you know for sure what you are doing, and unless + * you can afford to lose the index content while doing that. + * + * @param commits List of {@link IndexCommitPoint}, + * sorted by age (the 0th one is the oldest commit). + */ + virtual void onCommit(std::vector& commits) = 0; +}; + + + + +/** + * This {@link IndexDeletionPolicy} implementation that + * keeps only the most recent commit and immediately removes + * all prior commits after a new commit is done. This is + * the default deletion policy. + */ + +class CLUCENE_EXPORT KeepOnlyLastCommitDeletionPolicy: public IndexDeletionPolicy { +public: + virtual ~KeepOnlyLastCommitDeletionPolicy(); + /** + * Deletes all commits except the most recent one. + */ + void onInit(std::vector& commits); + + /** + * Deletes all commits except the most recent one. + */ + void onCommit(std::vector& commits); + + static const char* getClassName(); + const char* getObjectName() const; +}; + +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/IndexFileDeleter.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/IndexFileDeleter.cpp new file mode 100644 index 0000000..6e092c2 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/IndexFileDeleter.cpp @@ -0,0 +1,530 @@ +#include "CLucene/_ApiHeader.h" +#include "_IndexFileDeleter.h" +#include "_IndexFileNameFilter.h" +#include "_DocumentsWriter.h" +#include "_SegmentHeader.h" +#include "CLucene/store/Directory.h" +#include "CLucene/LuceneThreads.h" +#include +#include +#include + +CL_NS_USE(store) +CL_NS_USE(util) +CL_NS_DEF(index) + +bool IndexFileDeleter::VERBOSE_REF_COUNTS = false; + +IndexFileDeleter::CommitPoint::CommitPoint(IndexFileDeleter* _this, SegmentInfos* segmentInfos){ + this->_this = _this; + this->deleted = false; + this->gen = 0; + segmentsFileName = segmentInfos->getCurrentSegmentFileName(); + int32_t size = segmentInfos->size(); + files.push_back(segmentsFileName); + gen = segmentInfos->getGeneration(); + for(int32_t i=0;iinfo(i); + if (segmentInfo->dir == _this->directory) { + const vector& ff = segmentInfo->files(); + files.insert(files.end(),ff.begin(), ff.end()); + } + } + +} +IndexFileDeleter::CommitPoint::~CommitPoint(){ +} + +/** +* Get the segments_N file for this commit point32_t. +*/ +std::string IndexFileDeleter::CommitPoint::getSegmentsFileName() { + return segmentsFileName; +} +bool IndexFileDeleter::CommitPoint::sort(IndexCommitPoint* elem1, IndexCommitPoint* elem2){ + if (((CommitPoint*)elem1)->gen < ((CommitPoint*)elem2)->gen) + return true; + return false; +} + +const std::vector& IndexFileDeleter::CommitPoint::getFileNames() { + return files; +} + +/** +* Called only be the deletion policy, to remove this +* commit point32_t from the index. +*/ +void IndexFileDeleter::CommitPoint::deleteCommitPoint() { + if (!deleted) { + deleted = true; + _this->commitsToDelete.push_back(this); + } +} + +const char* IndexFileDeleter::CommitPoint::getClassName(){ + return "IndexFileDeleter::CommitPoint"; +} +const char* IndexFileDeleter::CommitPoint::getObjectName() const{ + return getClassName(); +} +int32_t IndexFileDeleter::CommitPoint::compareTo(NamedObject* obj) { + if ( obj->getObjectName() != CommitPoint::getClassName() ) + return -1; + + CommitPoint* commit = (CommitPoint*) obj; + if (gen < commit->gen) { + return -1; + } else if (gen > commit->gen) { + return 1; + } else { + return 0; + } +} + +void IndexFileDeleter::setInfoStream(std::ostream* infoStream) { + this->infoStream = infoStream; + if (infoStream != NULL){ + string msg = string("setInfoStream deletionPolicy=") + policy->getObjectName(); + message( msg ); + } +} + +void IndexFileDeleter::message(string message) { + (*infoStream) << string("IFD [") << Misc::toString( _LUCENE_CURRTHREADID ) << string("]: ") << message << string("\n"); +} + + +IndexFileDeleter::~IndexFileDeleter(){ + _CLDELETE(policy); + commitsToDelete.clear(); + commits.clear(); + refCounts.clear(); +} +IndexFileDeleter::IndexFileDeleter(Directory* directory, IndexDeletionPolicy* policy, + SegmentInfos* segmentInfos, std::ostream* infoStream, DocumentsWriter* docWriter): + refCounts( RefCountsType(true,true) ), commits(CommitsType(true)) +{ + this->docWriter = docWriter; + this->infoStream = infoStream; + + if (infoStream != NULL) + message( string("init: current segments file is \"") + segmentInfos->getCurrentSegmentFileName() + "\"; deletionPolicy=" + policy->getObjectName()); + + this->policy = policy; + this->directory = directory; + CommitPoint* currentCommitPoint = NULL; + + // First pass: walk the files and initialize our ref + // counts: + int64_t currentGen = segmentInfos->getGeneration(); + const IndexFileNameFilter* filter = IndexFileNameFilter::getFilter(); + + vector files; + if ( !directory->list(&files) ) + _CLTHROWA(CL_ERR_IO, (string("cannot read directory ") + directory->toString() + ": list() returned NULL").c_str()); + + + for(size_t i=0;iaccept(NULL, fileName.c_str()) && fileName.compare(IndexFileNames::SEGMENTS_GEN) != 0) { + + // Add this file to refCounts with initial count 0: + getRefCount(fileName.c_str()); + + if ( strncmp(fileName.c_str(), IndexFileNames::SEGMENTS, strlen(IndexFileNames::SEGMENTS)) == 0 ) { + + // This is a commit (segments or segments_N), and + // it's valid (<= the max gen). Load it, then + // incref all files it refers to: + if (SegmentInfos::generationFromSegmentsFileName(fileName.c_str()) <= currentGen) { + if (infoStream != NULL) { + message("init: load commit \"" + fileName + "\""); + } + SegmentInfos sis; + bool failed = false; + try { + sis.read(directory, fileName.c_str()); + } catch (CLuceneError& e) { + if ( e.number() != CL_ERR_IO ){ + throw e; + } + // LUCENE-948: on NFS (and maybe others), if + // you have writers switching back and forth + // between machines, it's very likely that the + // dir listing will be stale and will claim a + // file segments_X exists when in fact it + // doesn't. So, we catch this and handle it + // as if the file does not exist + if (infoStream != NULL) { + message("init: hit FileNotFoundException when loading commit \"" + fileName + "\"; skipping this commit point32_t"); + } + failed = true; + } + if (!failed) { + CommitPoint* commitPoint = _CLNEW CommitPoint(this,&sis); + if (sis.getGeneration() == segmentInfos->getGeneration()) { + currentCommitPoint = commitPoint; + } + commits.push_back(commitPoint); + incRef(&sis, true); + } + } + } + } + } + + if (currentCommitPoint == NULL) { + // We did not in fact see the segments_N file + // corresponding to the segmentInfos that was passed + // in. Yet, it must exist, because our caller holds + // the write lock. This can happen when the directory + // listing was stale (eg when index accessed via NFS + // client with stale directory listing cache). So we + // try now to explicitly open this commit point32_t: + SegmentInfos sis; + try { + sis.read(directory, segmentInfos->getCurrentSegmentFileName().c_str()); + } catch (CLuceneError& e) { + if ( e.number() == CL_ERR_IO ){ + _CLTHROWA(CL_ERR_CorruptIndex, "failed to locate current segments_N file"); + } + } + if (infoStream != NULL) + message("forced open of current segments file " + segmentInfos->getCurrentSegmentFileName()); + currentCommitPoint = _CLNEW CommitPoint(this,&sis); + commits.push_back(currentCommitPoint); + incRef(&sis, true); + } + + // We keep commits list in sorted order (oldest to newest): + std::sort(commits.begin(), commits.end(), CommitPoint::sort); + + // Now delete anything with ref count at 0. These are + // presumably abandoned files eg due to crash of + // IndexWriter. + RefCountsType::iterator it = refCounts.begin(); + while(it != refCounts.end()) { + char* fileName = it->first; + RefCount* rc = it->second; + if (0 == rc->count) { + if (infoStream != NULL) { + message( string("init: removing unreferenced file \"") + fileName + "\""); + } + deleteFile(fileName); + } + it++; + } + + // Finally, give policy a chance to remove things on + // startup: + policy->onInit(commits); + + // It's OK for the onInit to remove the current commit + // point; we just have to checkpoint our in-memory + // SegmentInfos to protect those files that it uses: + if (currentCommitPoint->deleted) { + checkpoint(segmentInfos, false); + } + + deleteCommits(); +} + +/** +* Remove the CommitPoints in the commitsToDelete List by +* DecRef'ing all files from each segmentInfos-> +*/ +void IndexFileDeleter::deleteCommits() { + + int32_t size = commitsToDelete.size(); + + if (size > 0) { + + // First decref all files that had been referred to by + // the now-deleted commits: + for(int32_t i=0;igetSegmentsFileName() + "\""); + } + decRef(commit->files); + } + commitsToDelete.clear(); + + // Now compact commits to remove deleted ones (preserving the sort): + size = commits.size(); + int32_t readFrom = 0; + int32_t writeTo = 0; + while(readFrom < size) { + CommitPoint* commit = (CommitPoint*)commits[readFrom]; + if (!commit->deleted) { + if (writeTo != readFrom) { + commits.remove(readFrom,true); + commits.remove(writeTo,false);//delete this one... + if ( commits.size() == writeTo ) + commits.push_back(commit); + else + commits[writeTo] = commit; + } + writeTo++; + } + readFrom++; + } + + while(size > writeTo) { + commits.remove(size-1); + size--; + } + } +} + +/** +* Writer calls this when it has hit an error and had to +* roll back, to tell us that there may now be +* unreferenced files in the filesystem. So we re-list +* the filesystem and delete such files. If segmentName +* is non-NULL, we will only delete files corresponding to +* that segment. +*/ +void IndexFileDeleter::refresh(const char* segmentName) { + vector files; + if ( !directory->list(files) ) + _CLTHROWA(CL_ERR_IO, (string("cannot read directory ") + directory->toString() + ": list() returned NULL").c_str() ); + const IndexFileNameFilter* filter = IndexFileNameFilter::getFilter(); + string segmentPrefix1; + string segmentPrefix2; + if (segmentName != NULL) { + segmentPrefix1 = string(segmentName) + "."; + segmentPrefix2 = string(segmentName) + "_"; + } + + for(size_t i=0;iaccept(NULL, fileName.c_str()) && + ( (segmentName==NULL || fileName.compare(0,segmentPrefix1.length(),segmentPrefix1) == 0 || fileName.compare(0,segmentPrefix2.length(),segmentPrefix2)==0) + && refCounts.find((char*)fileName.c_str())== refCounts.end() && fileName.compare(IndexFileNames::SEGMENTS_GEN)!=0) ){ + + // Unreferenced file, so remove it + if (infoStream != NULL) { + message( string("refresh [prefix=") + segmentName + "]: removing newly created unreferenced file \"" + fileName + "\""); + } + deleteFile(fileName.c_str()); + } + } +} + +void IndexFileDeleter::refresh() { + refresh(NULL); +} + +void IndexFileDeleter::close() { + deletePendingFiles(); +} + +void IndexFileDeleter::deletePendingFiles() { + if (!deletable.empty()) { + vector oldDeletable; + oldDeletable.insert(oldDeletable.end(),deletable.begin(),deletable.end()); + deletable.clear(); + + int32_t size = oldDeletable.size(); + for(int32_t i=0;igetCurrentSegmentFileName() + "\" [" + + Misc::toString(segmentInfos->size()) + " segments ; isCommit = " + Misc::toString(isCommit) + "]"); + } + + // Try again now to delete any previously un-deletable + // files (because they were in use, on Windows): + deletePendingFiles(); + + // Incref the files: + incRef(segmentInfos, isCommit); + const vector* docWriterFiles = NULL; + if (docWriter != NULL) { + docWriterFiles = &docWriter->files(); + if (!docWriterFiles->empty()) + incRef(*docWriterFiles); + else + docWriterFiles = NULL; + } + + if (isCommit) { + // Append to our commits list: + commits.push_back(_CLNEW CommitPoint(this, segmentInfos)); + + // Tell policy so it can remove commits: + policy->onCommit(commits); + + // Decref files for commits that were deleted by the policy: + deleteCommits(); + } + + // DecRef old files from the last checkpoint, if any: + int32_t size = lastFiles.size(); + if (size > 0) { + for(int32_t i=0;isize(); + for(int32_t i=0;iinfo(i); + if (segmentInfo->dir == directory) { + const vector& files = segmentInfo->files(); + lastFiles.insert(lastFiles.end(), files.begin(), files.end()); + } + } + } + if (docWriterFiles != NULL) + lastFiles.insert(lastFiles.end(), docWriterFiles->begin(),docWriterFiles->end()); +} + +void IndexFileDeleter::incRef(SegmentInfos* segmentInfos, bool isCommit) { + int32_t size = segmentInfos->size(); + for(int32_t i=0;iinfo(i); + if (segmentInfo->dir == directory) { + incRef(segmentInfo->files()); + } + } + + if (isCommit) { + // Since this is a commit point32_t, also incref its + // segments_N file: + getRefCount(segmentInfos->getCurrentSegmentFileName().c_str())->IncRef(); + } +} + +void IndexFileDeleter::incRef(const vector& files) { + int32_t size = files.size(); + for(int32_t i=0;icount)); + } + rc->IncRef(); + } +} + +void IndexFileDeleter::decRef(const vector& files) { + int32_t size = files.size(); + for(int32_t i=0;icount)); + } + if (0 == rc->DecRef()) { + // This file is no int32_t64_ter referenced by any past + // commit point32_ts nor by the in-memory SegmentInfos: + deleteFile(fileName.c_str()); + refCounts.remove((char*)fileName.c_str()); + } +} + +void IndexFileDeleter::decRef(SegmentInfos* segmentInfos) { + int32_t size = segmentInfos->size(); + for(int32_t i=0;iinfo(i); + if (segmentInfo->dir == directory) { + decRef(segmentInfo->files()); + } + } +} + +IndexFileDeleter::RefCount* IndexFileDeleter::getRefCount(const char* fileName) { + RefCount* rc; + RefCountsType::iterator itr = refCounts.find((char*)fileName); + if (itr == refCounts.end()) { + rc = _CLNEW RefCount(); + refCounts.put( STRDUP_AtoA(fileName), rc); + } else { + rc = itr->second; + } + return rc; +} + +void IndexFileDeleter::deleteFiles(vector& files) { + int32_t size = files.size(); + for(int32_t i=0;i& files) { + int32_t size = files.size(); + for(int32_t i=0;ideleteFile(fileName); + } catch (CLuceneError& e) { // if delete fails + if ( e.number() != CL_ERR_IO ){ + throw e; + } + if (directory->fileExists(fileName)) { + + // 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. + + if (infoStream != NULL) { + message(string("IndexFileDeleter: unable to remove file \"") + fileName + "\": " + e.what() + "; Will re-try later."); + } + deletable.push_back(fileName); // add to deletable + } + } +} + +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/IndexFileNameFilter.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/IndexFileNameFilter.cpp new file mode 100644 index 0000000..6dec143 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/IndexFileNameFilter.cpp @@ -0,0 +1,84 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "_IndexFileNameFilter.h" +#include "_IndexFileNames.h" + +CL_NS_DEF(index) + +FilenameFilter::~FilenameFilter(){ +} + +IndexFileNameFilter* IndexFileNameFilter::_singleton = NULL; +IndexFileNameFilter* IndexFileNameFilter::singleton(){ + if ( _singleton == NULL ) + _singleton = _CLNEW IndexFileNameFilter(); + return _singleton; +} + +void IndexFileNameFilter::_shutdown(){ + _CLDELETE(_singleton); +} + +IndexFileNameFilter::IndexFileNameFilter() { + size_t i; + for ( i = 0; i < IndexFileNames::INDEX_EXTENSIONS().length; ++i) { + extensions.insert(IndexFileNames::INDEX_EXTENSIONS()[i]); + } + for ( i = 0; i < IndexFileNames::INDEX_EXTENSIONS_IN_COMPOUND_FILE().length; ++i) { + extensionsInCFS.insert(IndexFileNames::INDEX_EXTENSIONS_IN_COMPOUND_FILE()[i]); + } +} +IndexFileNameFilter::~IndexFileNameFilter(){ +} +bool IndexFileNameFilter::accept(const char* /*dir*/, const char* name) const { + string _name(name); + size_t i = _name.find_last_of('.'); + if (i != string::npos) { + const char* extension = name + 1 + i; + char* tmp; + if (extensions.find(extension) != extensions.end()) { + return true; + } + + size_t l = _name.length(); + if (*extension == 'f' && + strtol(extension+1, &tmp,10)>= 0 && tmp == (extension+l) ) { //check for f001 + return true; + } else if (*extension == 's' && + strtol(extension+1, &tmp,10)>= 0 && tmp == (extension+l)) { + return true; + } + } else { + if ( strcmp(name, IndexFileNames::DELETABLE) == 0 ) return true; + else if ( strncmp(name, IndexFileNames::SEGMENTS, strlen(IndexFileNames::SEGMENTS)) == 0 ) return true; + } + return false; +} + +bool IndexFileNameFilter::isCFSFile(const char* name) const { + string _name(name); + size_t i = _name.find_last_of('.'); + if (i != string::npos) { + const char* extension = name + 1 + i; + char* tmp; + if (extensionsInCFS.find(extension) != extensionsInCFS.end() ) { + return true; + } + size_t l = _name.length(); + if (*extension == 'f' && + strtol(extension+1, &tmp,10)>= 0 && tmp == (extension+l)) { + return true; + } + } + return false; +} + +const IndexFileNameFilter* IndexFileNameFilter::getFilter() { + return singleton(); +} +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/IndexFileNames.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/IndexFileNames.cpp new file mode 100644 index 0000000..4217240 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/IndexFileNames.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. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" + +#include "_IndexFileNames.h" +#include "_SegmentInfos.h" +#include "CLucene/util/Misc.h" + + +CL_NS_DEF(index) + + const char* IndexFileNames::SEGMENTS = "segments"; + const char* IndexFileNames::SEGMENTS_GEN = "segments.gen"; + const char* IndexFileNames::DELETABLE = "deletable"; + const char* IndexFileNames::NORMS_EXTENSION = "nrm"; + const char* IndexFileNames::FREQ_EXTENSION = "frq"; + const char* IndexFileNames::PROX_EXTENSION = "prx"; + const char* IndexFileNames::TERMS_EXTENSION = "tis"; + const char* IndexFileNames::TERMS_INDEX_EXTENSION = "tii"; + const char* IndexFileNames::FIELDS_INDEX_EXTENSION = "fdx"; + const char* IndexFileNames::FIELDS_EXTENSION = "fdt"; + const char* IndexFileNames::VECTORS_FIELDS_EXTENSION = "tvf"; + const char* IndexFileNames::VECTORS_DOCUMENTS_EXTENSION = "tvd"; + const char* IndexFileNames::VECTORS_INDEX_EXTENSION = "tvx"; + const char* IndexFileNames::COMPOUND_FILE_EXTENSION = "cfs"; + const char* IndexFileNames::COMPOUND_FILE_STORE_EXTENSION = "cfx"; + const char* IndexFileNames::DELETES_EXTENSION = "del"; + const char* IndexFileNames::FIELD_INFOS_EXTENSION = "fnm"; + const char* IndexFileNames::PLAIN_NORMS_EXTENSION = "f"; + const char* IndexFileNames::SEPARATE_NORMS_EXTENSION = "s"; + const char* IndexFileNames::GEN_EXTENSION = "gen"; + + const char* IndexFileNames_INDEX_EXTENSIONS_s[] = + { + IndexFileNames::COMPOUND_FILE_EXTENSION, + IndexFileNames::FIELD_INFOS_EXTENSION, + IndexFileNames::FIELDS_INDEX_EXTENSION, + IndexFileNames::FIELDS_EXTENSION, + IndexFileNames::TERMS_INDEX_EXTENSION, + IndexFileNames::TERMS_EXTENSION, + IndexFileNames::FREQ_EXTENSION, + IndexFileNames::PROX_EXTENSION, + IndexFileNames::DELETES_EXTENSION, + IndexFileNames::VECTORS_INDEX_EXTENSION, + IndexFileNames::VECTORS_DOCUMENTS_EXTENSION, + IndexFileNames::VECTORS_FIELDS_EXTENSION, + IndexFileNames::GEN_EXTENSION, + IndexFileNames::NORMS_EXTENSION, + IndexFileNames::COMPOUND_FILE_STORE_EXTENSION + }; + + CL_NS(util)::ConstValueArray IndexFileNames::_INDEX_EXTENSIONS; + CL_NS(util)::ConstValueArray& IndexFileNames::INDEX_EXTENSIONS(){ + if ( _INDEX_EXTENSIONS.length == 0 ){ + _INDEX_EXTENSIONS.values = IndexFileNames_INDEX_EXTENSIONS_s; + _INDEX_EXTENSIONS.length = 15; + } + return _INDEX_EXTENSIONS; + } + + const char* IndexFileNames_INDEX_EXTENSIONS_IN_COMPOUND_FILE_s[] = { + IndexFileNames::FIELD_INFOS_EXTENSION, + IndexFileNames::FIELDS_INDEX_EXTENSION, + IndexFileNames::FIELDS_EXTENSION, + IndexFileNames::TERMS_INDEX_EXTENSION, + IndexFileNames::TERMS_EXTENSION, + IndexFileNames::FREQ_EXTENSION, + IndexFileNames::PROX_EXTENSION, + IndexFileNames::VECTORS_INDEX_EXTENSION, + IndexFileNames::VECTORS_DOCUMENTS_EXTENSION, + IndexFileNames::VECTORS_FIELDS_EXTENSION, + IndexFileNames::NORMS_EXTENSION + }; + CL_NS(util)::ConstValueArray IndexFileNames::_INDEX_EXTENSIONS_IN_COMPOUND_FILE; + CL_NS(util)::ConstValueArray& IndexFileNames::INDEX_EXTENSIONS_IN_COMPOUND_FILE(){ + if ( _INDEX_EXTENSIONS_IN_COMPOUND_FILE.length == 0 ){ + _INDEX_EXTENSIONS_IN_COMPOUND_FILE.values = IndexFileNames_INDEX_EXTENSIONS_IN_COMPOUND_FILE_s; + _INDEX_EXTENSIONS_IN_COMPOUND_FILE.length = 11; + } + return _INDEX_EXTENSIONS_IN_COMPOUND_FILE; + } + + const char* IndexFileNames_STORE_INDEX_EXTENSIONS_s[] = { + IndexFileNames::VECTORS_INDEX_EXTENSION, + IndexFileNames::VECTORS_FIELDS_EXTENSION, + IndexFileNames::VECTORS_DOCUMENTS_EXTENSION, + IndexFileNames::FIELDS_INDEX_EXTENSION, + IndexFileNames::FIELDS_EXTENSION + }; + CL_NS(util)::ConstValueArray IndexFileNames::_STORE_INDEX_EXTENSIONS; + CL_NS(util)::ConstValueArray& IndexFileNames::STORE_INDEX_EXTENSIONS(){ + if ( _STORE_INDEX_EXTENSIONS.length == 0 ){ + _STORE_INDEX_EXTENSIONS.values = IndexFileNames_STORE_INDEX_EXTENSIONS_s; + _STORE_INDEX_EXTENSIONS.length = 5; + } + return _STORE_INDEX_EXTENSIONS; + } + + const char* IndexFileNames_NON_STORE_INDEX_EXTENSIONS_s[] = { + IndexFileNames::FIELD_INFOS_EXTENSION, + IndexFileNames::FREQ_EXTENSION, + IndexFileNames::PROX_EXTENSION, + IndexFileNames::TERMS_EXTENSION, + IndexFileNames::TERMS_INDEX_EXTENSION, + IndexFileNames::NORMS_EXTENSION + }; + CL_NS(util)::ConstValueArray IndexFileNames::_NON_STORE_INDEX_EXTENSIONS; + CL_NS(util)::ConstValueArray& IndexFileNames::NON_STORE_INDEX_EXTENSIONS(){ + if ( _NON_STORE_INDEX_EXTENSIONS.length == 0 ){ + _NON_STORE_INDEX_EXTENSIONS.values = IndexFileNames_NON_STORE_INDEX_EXTENSIONS_s; + _NON_STORE_INDEX_EXTENSIONS.length = 6; + } + return _NON_STORE_INDEX_EXTENSIONS; + } + + const char* IndexFileNames_COMPOUND_EXTENSIONS_s[] = { + IndexFileNames::FIELD_INFOS_EXTENSION, + IndexFileNames::FREQ_EXTENSION, + IndexFileNames::PROX_EXTENSION, + IndexFileNames::FIELDS_INDEX_EXTENSION, + IndexFileNames::FIELDS_EXTENSION, + IndexFileNames::TERMS_INDEX_EXTENSION, + IndexFileNames::TERMS_EXTENSION + }; + CL_NS(util)::ConstValueArray IndexFileNames::_COMPOUND_EXTENSIONS; + CL_NS(util)::ConstValueArray& IndexFileNames::COMPOUND_EXTENSIONS(){ + if ( _COMPOUND_EXTENSIONS.length == 0 ){ + _COMPOUND_EXTENSIONS.values = IndexFileNames_COMPOUND_EXTENSIONS_s; + _COMPOUND_EXTENSIONS.length = 7; + } + return _COMPOUND_EXTENSIONS; + } + + const char* IndexFileNames_VECTOR_EXTENSIONS_s[] = { + IndexFileNames::VECTORS_INDEX_EXTENSION, + IndexFileNames::VECTORS_DOCUMENTS_EXTENSION, + IndexFileNames::VECTORS_FIELDS_EXTENSION + }; + CL_NS(util)::ConstValueArray IndexFileNames::_VECTOR_EXTENSIONS; + CL_NS(util)::ConstValueArray& IndexFileNames::VECTOR_EXTENSIONS(){ + if ( _VECTOR_EXTENSIONS.length == 0 ){ + _VECTOR_EXTENSIONS.values = IndexFileNames_VECTOR_EXTENSIONS_s; + _VECTOR_EXTENSIONS.length = 3; + } + return _VECTOR_EXTENSIONS; + } + + string IndexFileNames::fileNameFromGeneration( const char* base, const char* extension, int64_t gen ) { + if ( gen == SegmentInfo::NO ) { + return ""; + } else if ( gen == SegmentInfo::WITHOUT_GEN ) { + return string(base) + extension; + } else { + char buf[(sizeof(unsigned long) << 3) + 1]; + CL_NS(util)::Misc::longToBase( gen, 36, buf ); + return string(base) + "_" + buf + extension; + } + } + + bool IndexFileNames::isDocStoreFile( const char* fileName ) { + + const char* p = strchr( fileName, (int)'.' ); + + if ( p != NULL && strcmp( p+1, COMPOUND_FILE_STORE_EXTENSION ) == 0 ) { + return true; + } + for ( int32_t i = 0; i < STORE_INDEX_EXTENSIONS().length; i++ ) { + if ( p != NULL && strcmp( p+1, STORE_INDEX_EXTENSIONS()[i] ) == 0 ) { + return true; + } + } + return false; + } + +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/IndexModifier.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/IndexModifier.cpp new file mode 100644 index 0000000..8303208 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/IndexModifier.cpp @@ -0,0 +1,277 @@ +/*------------------------------------------------------------------------------ +* 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. +------------------------------------------------------------------------------*/ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "IndexModifier.h" + +#include "IndexWriter.h" +#include "IndexReader.h" +#include "CLucene/store/FSDirectory.h" +#include "CLucene/document/Document.h" +#include "MergeScheduler.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 char* dirName, Analyzer* analyzer, bool create) { + Directory* dir = FSDirectory::getDirectory(dirName); + init(dir, analyzer, create); +} + +void IndexModifier::init(Directory* directory, Analyzer* analyzer, bool create) { + indexWriter = NULL; + indexReader = NULL; + open = false; + infoStream = NULL; + + useCompoundFile = true; + this->maxBufferedDocs = IndexWriter::DEFAULT_MAX_BUFFERED_DOCS; + this->maxFieldLength = IndexWriter::DEFAULT_MAX_FIELD_LENGTH; + this->mergeFactor = IndexWriter::DEFAULT_MERGE_FACTOR; + + this->directory = _CL_POINTER(directory); + SCOPED_LOCK_MUTEX(directory->THIS_LOCK) + this->analyzer = analyzer; + indexWriter = _CLNEW IndexWriter(directory, analyzer, create); + open = true; +} + +IndexModifier::~IndexModifier(){ + if (open) { + close(); + } +} + +void IndexModifier::assureOpen() const{ + if (!open) { + _CLTHROWA(CL_ERR_IllegalState,"Index is closed"); + } +} + +void IndexModifier::createIndexWriter(bool create) { + if (indexWriter == NULL) { + if (indexReader != NULL) { + indexReader->close(); + _CLDELETE(indexReader); + } + + indexWriter = _CLNEW IndexWriter(directory, analyzer, false); + // IndexModifier cannot use ConcurrentMergeScheduler + // because it synchronizes on the directory which can + // cause deadlock + indexWriter->setMergeScheduler(_CLNEW SerialMergeScheduler()); + indexWriter->setInfoStream(infoStream); + indexWriter->setUseCompoundFile(useCompoundFile); + if (maxBufferedDocs != IndexWriter::DISABLE_AUTO_FLUSH) + 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() { + if (!open) + _CLTHROWA(CL_ERR_IllegalState, "Index is closed already"); + SCOPED_LOCK_MUTEX(directory->THIS_LOCK) + if (indexWriter != NULL) { + indexWriter->close(); + _CLDELETE(indexWriter); + } else if (indexReader != NULL) { + indexReader->close(); + _CLDELETE(indexReader); + } + _CLDECDELETE(directory) + open = false; +} + +string IndexModifier::toString() const{ + return string("Index@") + 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); +} +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/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/IndexModifier.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/IndexModifier.h new file mode 100644 index 0000000..d6429bf --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/IndexModifier.h @@ -0,0 +1,332 @@ +/*------------------------------------------------------------------------------ +* 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_IndexModifier_ +#define _lucene_index_IndexModifier_ + + +CL_CLASS_DEF(store,Directory) +CL_CLASS_DEF(document,Document) +CL_CLASS_DEF(index, IndexWriter) +CL_CLASS_DEF(index, IndexReader) +CL_CLASS_DEF(index, Term) +CL_CLASS_DEF(index, TermDocs) +CL_CLASS_DEF(index, TermEnum) + +#include "CLucene/analysis/AnalysisHeader.h" + +CL_NS_DEF(index) + +/** +*

[Note that as of 2.1, all but one of the +* methods in this class are available via {@link +* IndexWriter}. The one method that is not available is +* {@link #deleteDocument(int)}.]

+* +* 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. +* +*

Note that you cannot create more than one IndexModifier object +* on the same directory at the same time. +* +*

Example usage: +* +*

+* +* +* +* +*
+* +* //note this code will leak memory :) +* Analyzer* analyzer = new StandardAnalyzer();
+* // create an index in /tmp/index, overwriting an existing one:
+* IndexModifier* indexModifier = new IndexModifier("/tmp/index", analyzer, true);
+* Document* doc = new Document*();
+* doc->add(*new Field("id", "1", Field::STORE_YES| Field::INDEX_UNTOKENIZED));
+* doc->add(*new Field("body", "a simple test", Field::STORE_YES, Field::INDEX_TOKENIZED));
+* indexModifier->addDocument(doc);
+* int32_t deleted = indexModifier->deleteDocuments(new Term("id", "1"));
+* printf("Deleted %d document", deleted);
+* indexModifier->flush();
+* printf( "$d docs in index", indexModifier->docCount() );
+* indexModifier->close(); +*
+*
+* +*

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 IndexModifier. +* +*

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). +* +*

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. +* +* @deprecated Please use {@link IndexWriter} instead. +*/ +class CLUCENE_EXPORT IndexModifier { +protected: + IndexWriter* indexWriter; + IndexReader* indexReader; + + CL_NS(store)::Directory* directory; + CL_NS(analysis)::Analyzer* analyzer; + bool open; + + // Lucene defaults: + std::ostream* infoStream; + 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 true to create the index or overwrite the existing one; + * false to append to the existing index + */ + IndexModifier(CL_NS(store)::Directory* directory, CL_NS(analysis)::Analyzer* analyzer, bool create); + + /** + * Open an index with write access. + * + * @param dirName the index directory + * @param analyzer the analyzer to use for adding new documents + * @param create true to create the index or overwrite the existing one; + * false to append to the existing index + */ + IndexModifier(const char* dirName, CL_NS(analysis)::Analyzer* analyzer, bool create); + + virtual ~IndexModifier(); + +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(bool create = false); + + /** + * 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 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. 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 docNum. + * @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.

+ * 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.

+ * 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.

+ * 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.

+ * 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); + + /** + * @throws IOException + * @see IndexModifier#setMaxBufferedDocs(int32_t) + */ + 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 (> 10) are best + * for batch index creation, and smaller values (< 10) for indices that are + * interactively maintained. + *

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(); + + std::string 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&) )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/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/IndexReader.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/IndexReader.cpp new file mode 100644 index 0000000..91ca18e --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/IndexReader.cpp @@ -0,0 +1,532 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.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 "CLucene/util/Misc.h" +#include "_SegmentInfos.h" +#include "_SegmentHeader.h" +#include "MultiReader.h" +#include "Terms.h" +#include + +CL_NS_USE(util) +CL_NS_USE(store) +CL_NS_DEF(index) + + + class IndexReaderFindSegmentsFile: public SegmentInfos::FindSegmentsFile{ + public: + IndexReaderFindSegmentsFile( CL_NS(store)::Directory* dir ): + SegmentInfos::FindSegmentsFile(dir){ + } + IndexReaderFindSegmentsFile( const char* dir ): + SegmentInfos::FindSegmentsFile(dir){ + } + uint64_t doBody(const char* segmentFileName){ + return directory->fileModified(segmentFileName); + } + }; + + class CloseCallbackCompare:public CL_NS(util)::Compare::_base{ + public: + bool operator()( IndexReader::CloseCallback t1, IndexReader::CloseCallback t2 ) const{ + return t1 > t2; + } + static void doDelete(IndexReader::CloseCallback /*dummy*/){ + } + }; + + + class IndexReader::Internal: LUCENE_BASE{ + public: + /** + * @deprecated will be deleted when IndexReader(Directory) is deleted + * @see #directory() + */ + CL_NS(store)::Directory* directory; + + typedef CL_NS(util)::CLSet CloseCallbackMap; + CloseCallbackMap closeCallbacks; + + Internal(Directory* directory, IndexReader* _this) + { + if ( directory != NULL ) + this->directory = _CL_POINTER(directory); + else + this->directory = NULL; + _this->closed = false; + _this->hasChanges = false; + } + ~Internal(){ + } + }; + + IndexReader::IndexReader(Directory* dir){ + //Constructor. + //Func - Creates an instance of IndexReader + //Pre - true + //Post - An instance has been created with writeLock = NULL + _internal = _CLNEW Internal(dir, this); + } + + IndexReader::IndexReader(){ + //Constructor. + //Func - Creates an instance of IndexReader + //Pre - true + //Post - An instance has been created with writeLock = NULL + _internal = _CLNEW Internal(NULL, this); + } + + IndexReader::~IndexReader(){ + //Func - Destructor + // Destroys the instance and releases the writeLock if needed + //Pre - true + //Post - The instance has been destroyed if pre(writeLock) exists is has been released + _CLLDELETE(_internal); + } + + IndexReader* IndexReader::open(const char* path, bool closeDirectoryOnCleanup, IndexDeletionPolicy* deletionPolicy){ + //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 != NULL, "path is NULL"); + Directory* dir = FSDirectory::getDirectory(path); + IndexReader* reader = open(dir,closeDirectoryOnCleanup,deletionPolicy); + //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, IndexDeletionPolicy* deletionPolicy){ + //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 + + return DirectoryIndexReader::open(directory, closeDirectory, deletionPolicy); + } + + IndexReader* IndexReader::reopen(){ + _CLTHROWA(CL_ERR_UnsupportedOperation, "This reader does not support reopen()."); + } + CL_NS(store)::Directory* IndexReader::directory() { + ensureOpen(); + if (NULL != _internal->directory) { + return _internal->directory; + } else { + _CLTHROWA(CL_ERR_UnsupportedOperation, "This reader does not support this method."); + } + } + + void IndexReader::ensureOpen(){ + } + + void IndexReader::acquireWriteLock(){ + SCOPED_LOCK_MUTEX(THIS_LOCK) + /* NOOP */ + } + + 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; + } + + uint64_t IndexReader::lastModified(const char* directory2) { + //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(directory2 != NULL, "directory is NULL"); + + IndexReaderFindSegmentsFile runner(directory2); + return (uint64_t)runner.run(); + } + + int64_t IndexReader::getCurrentVersion(Directory* directory) { + return SegmentInfos::readCurrentVersion(directory); + } + + + int64_t IndexReader::getCurrentVersion(const char* directory){ + Directory* dir = FSDirectory::getDirectory(directory); + int64_t version = getCurrentVersion(dir); + dir->close(); + _CLDECDELETE(dir); + return version; + } + int64_t IndexReader::getVersion() { + _CLTHROWA(CL_ERR_UnsupportedOperation, "This reader does not support this method."); + } + + void IndexReader::setTermInfosIndexDivisor(int32_t /*indexDivisor*/) { + _CLTHROWA(CL_ERR_UnsupportedOperation, "This reader does not support this method."); + } + + int32_t IndexReader::getTermInfosIndexDivisor() { + _CLTHROWA(CL_ERR_UnsupportedOperation, "This reader does not support this method."); + } + + bool IndexReader::isCurrent() { + _CLTHROWA(CL_ERR_UnsupportedOperation, "This reader does not support this method."); + } + bool IndexReader::isOptimized() { + _CLTHROWA(CL_ERR_UnsupportedOperation, "This reader does not support this method."); + } + + uint64_t IndexReader::lastModified(Directory* directory2) { + //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 + IndexReaderFindSegmentsFile runner(directory2); + return (uint64_t)runner.run(); + } + + void IndexReader::setNorm(int32_t doc, const TCHAR* field, uint8_t value){ + SCOPED_LOCK_MUTEX(THIS_LOCK) + this->ensureOpen(); + this->acquireWriteLock(); + this->hasChanges = true; + this->doSetNorm(doc, field, value); + } + + + void IndexReader::setNorm(int32_t doc, const TCHAR* field, float_t value){ + ensureOpen(); + setNorm(doc, field, CL_NS(search)::Similarity::encodeNorm(value)); + } + + bool IndexReader::indexExists(const char* 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. + std::vector files; + Misc::listFiles(directory, files); + return SegmentInfos::getCurrentSegmentGeneration(files) != -1; + } + + 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 SegmentInfos::getCurrentSegmentGeneration(directory) != -1; + } + + TermDocs* IndexReader::termDocs(Term* term) { + //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 => * + // 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"); + + ensureOpen(); + //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){ + //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 => >* + // + // 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"); + + ensureOpen(); + //Reference an instantiated termPositions instance + TermPositions* _termPositions = termPositions(); + //Seek all documents containing term + _termPositions->seek(term); + //return the enumeration + return _termPositions; + } + + bool IndexReader::document(int32_t n, CL_NS(document)::Document* doc){ + return document(n, *doc); + } + bool IndexReader::document(int32_t n, CL_NS(document)::Document& doc){ + ensureOpen(); + return document(n, doc, NULL); + } + + void IndexReader::deleteDoc(const int32_t docNum){ + deleteDocument(docNum); + } + int32_t IndexReader::deleteTerm(Term* term){ + return deleteDocuments(term); + } + + 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"); + + ensureOpen(); + acquireWriteLock(); + + //Have the document identified by docNum deleted + hasChanges = true; + doDelete(docNum); + } + + void IndexReader::flush() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + ensureOpen(); + commit(); + } + + void IndexReader::commit(){ + SCOPED_LOCK_MUTEX(THIS_LOCK) + if(hasChanges){ + doCommit(); + } + hasChanges = false; + } + + + void IndexReader::undeleteAll(){ + SCOPED_LOCK_MUTEX(THIS_LOCK) + ensureOpen(); + acquireWriteLock(); + hasChanges = true; + doUndeleteAll(); + } + + 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"); + ensureOpen(); + + //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; + } + + + 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) + if ( !closed ){ + Internal::CloseCallbackMap::iterator iter = _internal->closeCallbacks.begin(); + for ( ;iter!=_internal->closeCallbacks.end();iter++){ + CloseCallback callback = *iter->first; + callback(this,iter->second); + } + commit(); + doClose(); + } + closed = true; + } + + 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* l = directory->makeLock("write.lock"); + bool ret = l->isLocked(); + _CLDELETE(l); + return ret; + } + + bool IndexReader::isLocked(const char* 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 != NULL, "directory is NULL"); + + Directory* dir = FSDirectory::getDirectory(directory); + bool ret = isLocked(dir); + dir->close(); + _CLDECDELETE(dir); + + return ret; + } + +bool IndexReader::hasNorms(const TCHAR* field) { + // backward compatible implementation. + // SegmentReader has an efficient implementation. + ensureOpen(); + return norms(field) != NULL; +} + +void IndexReader::unlock(const char* path){ + FSDirectory* dir = FSDirectory::getDirectory(path); + 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 = directory->makeLock("write.lock"); + lock->release(); + _CLDELETE(lock); + } + +bool IndexReader::isLuceneFile(const char* filename){ + if ( !filename ) + return false; + size_t len = strlen(filename); + if ( len < 6 ) //need at least x.frx + return false; + const char* ext=filename+len; + while(*ext != '.' && ext!=filename) + ext--; + + if ( strcmp(ext, ".cfs") == 0 ) + return true; + else if ( strcmp(ext, ".fnm") == 0 ) + return true; + else if ( strcmp(ext, ".fdx") == 0 ) + return true; + else if ( strcmp(ext, ".fdt") == 0 ) + return true; + else if ( strcmp(ext, ".tii") == 0 ) + return true; + else if ( strcmp(ext, ".tis") == 0 ) + return true; + else if ( strcmp(ext, ".frq") == 0 ) + return true; + else if ( strcmp(ext, ".prx") == 0 ) + return true; + else if ( strcmp(ext, ".del") == 0 ) + return true; + else if ( strcmp(ext, ".tvx") == 0 ) + return true; + else if ( strcmp(ext, ".tvd") == 0 ) + return true; + else if ( strcmp(ext, ".tvf") == 0 ) + return true; + else if ( strcmp(ext, ".tvp") == 0 ) + return true; + + else if ( strcmp(filename, "segments") == 0 ) + return true; + else if ( strcmp(filename, "segments.new") == 0 ) + return true; + else if ( strcmp(filename, "deletable") == 0 ) + return true; + + else if ( strncmp(ext,".f",2)==0 ){ + const char* n = ext+2; + if ( *n && _istdigit(*n) ) + return true; + } + + return false; +} + +CL_NS(store)::Directory* IndexReader::getDirectory() { + return directory(); +} + + void IndexReader::addCloseCallback(CloseCallback callback, void* parameter){ + _internal->closeCallbacks.put(callback, parameter); + } + +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/IndexReader.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/IndexReader.h new file mode 100644 index 0000000..9079025 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/IndexReader.h @@ -0,0 +1,688 @@ +/*------------------------------------------------------------------------------ +* 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_IndexReader_ +#define _lucene_index_IndexReader_ + + +#include "CLucene/util/Array.h" +#include "CLucene/util/VoidList.h" +#include "CLucene/LuceneThreads.h" + +CL_CLASS_DEF(store,Directory) +CL_CLASS_DEF(store,LuceneLock) +CL_CLASS_DEF(document,Document) +CL_CLASS_DEF(document,FieldSelector) + +CL_NS_DEF(index) +class SegmentInfos; +class TermFreqVector; +class TermEnum; +class Term; +class TermDocs; +class TermPositions; +class IndexDeletionPolicy; +class TermVectorMapper; + +/** 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. + +

Concrete subclasses of IndexReader are usually constructed with a call to + one of the static open() methods, e.g. {@link #open(String)}. + +

For efficiency, in this API documents are often referred to via + document numbers, 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. + +

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. + +

+ NOTE: for backwards API compatibility, several methods are not listed + as abstract, but have no useful implementations in this base class and + instead always throw UnsupportedOperationException. Subclasses are + strongly encouraged to override these methods, but in many cases may not + need to. +

+ +*/ +class CLUCENE_EXPORT IndexReader: public CL_NS(util)::NamedObject{ + bool closed; +protected: + bool hasChanges; + + /** + * Legacy Constructor for backwards compatibility. + * + *

+ * This Constructor should not be used, it exists for backwards + * compatibility only to support legacy subclasses that did not "own" + * a specific directory, but needed to specify something to be returned + * by the directory() method. Future subclasses should delegate to the + * no arg constructor and implement the directory() method as appropriate. + * + * @param directory Directory to be returned by the directory() method + * @see #directory() + * @deprecated - use IndexReader() + */ + IndexReader(CL_NS(store)::Directory* dir); + + IndexReader(); + + /// 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 docNum. + * Applications should call {@link #deleteDocument(int32_t)} or {@link #deleteDocuments(Term*)}. + */ + virtual void doDelete(const int32_t docNum) = 0; + + /** + * @throws AlreadyClosedException if this IndexReader is closed + */ + virtual void ensureOpen(); + + /** Does nothing by default. Subclasses that require a write lock for + * index modifications must implement this method. */ + virtual void acquireWriteLock(); + +public: + //Callback for classes that need to know if IndexReader is closing. + typedef void (*CloseCallback)(IndexReader*, void*); + + /** Internal use. Implements commit */ + virtual void doCommit() = 0; + /** Internal use. */ + class Internal; + /** Internal use. */ + Internal* _internal; + + + /** + * Constants describing field properties, for example used for + * {@link IndexReader#getFieldNames(FieldOption)}. + */ + 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, + /** all fields that store payloads */ + STORES_PAYLOADS = 512 + }; + + /** Returns an IndexReader reading the index in an FSDirectory in the named + path. + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + * @param path the path to the index directory */ + static IndexReader* open(const char* path, bool closeDirectoryOnCleanup=true, IndexDeletionPolicy* deletionPolicy=NULL); + + /** Expert: returns an IndexReader reading the index in the given + * Directory, with a custom {@link IndexDeletionPolicy}. + * @param directory the index directory + * @param deletionPolicy a custom deletion policy (only used + * if you use this reader to perform deletes or to set + * norms); see {@link IndexWriter} for details. + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + static IndexReader* open(CL_NS(store)::Directory* directory, bool closeDirectoryOnCleanup=false, IndexDeletionPolicy* deletionPolicy=NULL); + + + /** + * Refreshes an IndexReader if the index has changed since this instance + * was (re)opened. + *

+ * Opening an IndexReader is an expensive operation. This method can be used + * to refresh an existing IndexReader to reduce these costs. This method + * tries to only load segments that have changed or were created after the + * IndexReader was (re)opened. + *

+ * If the index has not changed since this instance was (re)opened, then this + * call is a NOOP and returns this instance. Otherwise, a new instance is + * returned. The old instance is closed (unlink JLucene) and must + * be deleted
+ *

+ * You can determine whether a reader was actually reopened by comparing the + * old instance with the instance returned by this method: + *

+   * IndexReader* reader = ...
+   * ...
+   * IndexReader* newreader = r->reopen();
+   * if (newreader != reader) {
+   *   ...     // reader was reopened
+   *   reader->close();
+   *   _CLDELETE(reader);
+   * }
+   * reader = newreader;
+   * ...
+   * 
+ * + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + virtual IndexReader* reopen(); + + /** + * Returns the directory associated with this index. The Default + * implementation returns the directory specified by subclasses when + * delegating to the IndexReader(Directory) constructor, or throws an + * UnsupportedOperationException if one was not specified. + * @throws UnsupportedOperationException if no directory + */ + virtual CL_NS(store)::Directory* directory(); + + DEFINE_MUTEX(THIS_LOCK) + + /** + * + * @throws IOException + */ + virtual void flush(); + + /** + * Commit changes resulting from delete, undeleteAll, or + * setNorm operations + * + * If an exception is hit, then either no changes or all + * changes will have been committed to the index + * (transactional semantics). + * @throws IOException if there is a low-level IO error + */ + CLUCENE_LOCAL_DECL virtual void commit(); + + + /** Undeletes all documents currently marked as deleted in this index. + * + * @throws StaleReaderException if the index has changed + * since this reader was opened + * @throws LockObtainFailedException if another writer + * has this index open (write.lock could not + * be obtained) + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + virtual 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, StringArrayWithDeletor& retarray) = 0; + + /** 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() + * + * @see Field#setBoost(float_t) + * @memory The values are cached, so don't delete the returned byte array. + */ + 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. + * + * The size of bytes must be the size of the IndexReader->maxDoc() + * + * @see Field#setBoost(float_t) + */ + 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) + * + * @throws StaleReaderException if the index has changed + * since this reader was opened + * @throws CorruptIndexException if the index is corrupt + * @throws LockObtainFailedException if another writer + * has this index open (write.lock could not + * be obtained) + * @throws IOException if there is a low-level IO error + */ + void setNorm(int32_t doc, const TCHAR* field, float_t 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(float_t) 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) + * @throws StaleReaderException if the index has changed + * since this reader was opened + * @throws CorruptIndexException if the index is corrupt + * @throws LockObtainFailedException if another writer + * has this index open (write.lock could not + * be obtained) + * @throws IOException if there is a low-level IO error + */ + void setNorm(int32_t doc, const TCHAR* field, uint8_t value); + + /// Release the write lock, if needed. + virtual ~IndexReader(); + + /** + * 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. + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + static uint64_t lastModified(const char* 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. + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + static uint64_t lastModified(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 CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + 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 CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + static int64_t getCurrentVersion(const char* directory); + + /** + * Version number when this IndexReader was opened. Not implemented in the IndexReader base class. + * @throws UnsupportedOperationException unless overridden in subclass + */ + virtual int64_t getVersion(); + + /**

For IndexReader implementations that use + * TermInfosReader to read terms, this sets the + * indexDivisor to subsample the number of indexed terms + * loaded into memory. This has the same effect as {@link + * IndexWriter#setTermIndexInterval} except that setting + * must be done at indexing time while this setting can be + * set per reader. When set to N, then one in every + * N*termIndexInterval terms in the index is loaded into + * memory. By setting this to a value > 1 you can reduce + * memory usage, at the expense of higher latency when + * loading a TermInfo. The default value is 1.

+ * + * NOTE: you must call this before the term + * index is loaded. If the index is already loaded, + * an IllegalStateException is thrown. + * @throws IllegalStateException if the term index has already been loaded into memory + */ + void setTermInfosIndexDivisor(int32_t indexDivisor); + + /**

For IndexReader implementations that use + * TermInfosReader to read terms, this returns the + * current indexDivisor. + * @see #setTermInfosIndexDivisor */ + int32_t getTermInfosIndexDivisor(); + + /** + * Check whether this IndexReader is still using the + * current (i.e., most recently committed) version of the + * index. If a writer has committed any changes to the + * index since this reader was opened, this will return + * false, in which case you must open a new + * IndexReader in order to see the changes. See the + * description of the autoCommit + * flag which controls when the {@link IndexWriter} + * actually commits changes to the index. + * + *

+ * Not implemented in the IndexReader base class. + *

+ * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + * @throws UnsupportedOperationException unless overridden in subclass + */ + virtual bool isCurrent(); + + /** + * Checks is the index is optimized (if it has a single segment and + * no deletions). Not implemented in the IndexReader base class. + * @return true if the index is optimized; false otherwise + * @throws UnsupportedOperationException unless overridden in subclass + */ + virtual bool isOptimized(); + + /** + * 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 CL_NS(util)::ArrayBase* getTermFreqVectors(int32_t docNumber) = 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=NULL) = 0; + + /** + * Load the Term Vector into a user-defined data structure instead of relying on the parallel arrays of + * the {@link TermFreqVector}. + * @param docNumber The number of the document to load the vector for + * @param field The name of the field to load + * @param mapper The {@link TermVectorMapper} to process the vector. Must not be null + * @throws IOException if term vectors cannot be accessed or if they do not exist on the field and doc. specified. + * + */ + virtual void getTermFreqVector(int32_t docNumber, const TCHAR* field, TermVectorMapper* mapper) =0; + + /** + * Map all the term vectors for all fields in a Document + * @param docNumber The number of the document to load the vector for + * @param mapper The {@link TermVectorMapper} to process the vector. Must not be null + * @throws IOException if term vectors cannot be accessed or if they do not exist on the field and doc. specified. + */ + virtual void getTermFreqVector(int32_t docNumber, TermVectorMapper* mapper) =0; + + /** + * Returns true 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 true if an index exists; false otherwise + */ + static bool indexExists(const char* directory); + + /** + * Returns true 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 true if an index exists; false 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; + + /** + * Get the {@link org.apache.lucene.document.Document} at the nth position. The {@link org.apache.lucene.document.FieldSelector} + * may be used to determine what {@link org.apache.lucene.document.Field}s to load and how they should be loaded. + * The fields are not cleared before retrieving the document, so the + * object should be new or just cleared. + * + * NOTE: If this Reader (more specifically, the underlying FieldsReader) is closed before the lazy {@link org.apache.lucene.document.Field} is + * loaded an exception may be thrown. If you want the value of a lazy {@link org.apache.lucene.document.Field} to be available after closing you must + * explicitly load it or fetch the Document again with a new loader. + * + * + * @param n Get the document at the nth position + * @param fieldSelector The {@link org.apache.lucene.document.FieldSelector} to use to determine what Fields should be loaded on the Document. May be null, in which case all Fields will be loaded. + * @return The stored fields of the {@link org.apache.lucene.document.Document} at the nth position + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + * + * @see org.apache.lucene.document.Field + * @see org.apache.lucene.document.FieldSelector + * @see org.apache.lucene.document.SetBasedFieldSelector + * @see org.apache.lucene.document.LoadFirstFieldSelector + */ + //When we convert to JDK 1.5 make this Set + virtual bool document(int32_t n, CL_NS(document)::Document& doc, const CL_NS(document)::FieldSelector* fieldSelector) =0; + + /** Gets the stored fields of the nth + * Document in this index. + * The fields are not cleared before retrieving the document, so the + * object should be new or just cleared. + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + bool document(int32_t n, CL_NS(document)::Document& doc); + + _CL_DEPRECATED( document(i, Document&) ) bool document(int32_t n, CL_NS(document)::Document*); + + _CL_DEPRECATED( document(i, document) ) CL_NS(document)::Document* document(const int32_t n); + + /** Returns true if document n 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. Note that after + * calling terms(), {@link TermEnum#next()} must be called + * on the resulting enumeration before calling other methods such as + * {@link TermEnum#term()}. + * @throws IOException if there is a low-level IO error + * @memory Caller must clean up + */ + virtual TermEnum* terms() = 0; + +/** Returns an enumeration of all terms starting at a given term. If + * the given term does not exist, the enumeration is positioned at the + * first term greater than the supplied therm. The enumeration is + * ordered by Term.compareTo(). Each term is greater than all that + * precede it in the enumeration. + * @throws IOException if there is a low-level IO error + * @memory Caller must clean up + */ + virtual TermEnum* terms(const Term* t) = 0; + + /** Returns the number of documents containing the term t. + * @throws IOException if there is a low-level IO error + */ + virtual int32_t docFreq(const Term* t) = 0; + + /* Returns an unpositioned TermPositions enumerator. + * @throws IOException if there is a low-level IO error + * @memory Caller must clean up + */ + virtual TermPositions* termPositions() = 0; + + /** 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, + * <pos1, pos2, ... + * posfreq-1> + * >* + *
+ *

This positional information facilitates phrase and proximity searching. + *

The enumeration is ordered by document number. Each document number is + * greater than all that precede it in the enumeration. + * @throws IOException if there is a low-level IO error + * @memory Caller must clean up + */ + TermPositions* termPositions(Term* term); + + /** Returns an unpositioned {@link TermDocs} enumerator. + * @throws IOException if there is a low-level IO error + * @memory Caller must clean up + */ + virtual TermDocs* termDocs() = 0; + + /** 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. + * @throws IOException if there is a low-level IO error + * @memory Caller must clean up + */ + TermDocs* termDocs(Term* term); + + /** 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 {@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. + * @throws StaleReaderException if the index has changed + * since this reader was opened + * @throws CorruptIndexException if the index is corrupt + * @throws LockObtainFailedException if another writer + * has this index open (write.lock could not + * be obtained) + * @throws IOException if there is a low-level IO error + */ + void deleteDocument(const int32_t docNum); + + ///@deprecated. Use deleteDocument instead. + _CL_DEPRECATED( deleteDocument ) void deleteDoc(const int32_t docNum); + + /** Deletes all documents that have a given 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. + * See {@link #deleteDocument(int)} for information about when this deletion will + * become effective. + * @return the number of documents deleted + * @throws StaleReaderException if the index has changed + * since this reader was opened + * @throws CorruptIndexException if the index is corrupt + * @throws LockObtainFailedException if another writer + * has this index open (write.lock could not + * be obtained) + * @throws IOException if there is a low-level IO error + */ + int32_t deleteDocuments(Term* term); + + ///@deprecated. Use deleteDocuments instead. + _CL_DEPRECATED( deleteDocuments ) int32_t deleteTerm(Term* 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. + * @throws IOException if there is a low-level IO error + */ + void close(); + + /** + * Returns true iff the index in the named directory is + * currently locked. + * @param directory the directory to check for a lock + * @throws IOException if there is a low-level IO error + */ + static bool isLocked(CL_NS(store)::Directory* directory); + + /** + * Returns true iff the index in the named directory is + * currently locked. + * @param directory the directory to check for a lock + * @throws IOException if there is a low-level IO error + */ + static bool isLocked(const char* 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 char* path); + + /** Returns the directory this index resides in. */ + _CL_DEPRECATED( directory() ) CL_NS(store)::Directory* getDirectory(); + + /** Returns true if the file is a lucene filename (based on extension or filename) */ + static bool isLuceneFile(const char* 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); + + friend class SegmentReader; + friend class MultiReader; + friend class IndexWriter; + friend class MultiSegmentReader; +}; + +CL_NS_END +#endif + + diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/IndexWriter.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/IndexWriter.cpp new file mode 100644 index 0000000..7bcdd88 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/IndexWriter.cpp @@ -0,0 +1,2347 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "IndexWriter.h" +#include "IndexReader.h" +#include "CLucene/document/Document.h" +#include "CLucene/store/Directory.h" +#include "CLucene/search/Similarity.h" +#include "CLucene/util/Misc.h" + +#include "CLucene/store/_Lock.h" +#include "CLucene/store/_RAMDirectory.h" +#include "CLucene/store/FSDirectory.h" +#include "CLucene/util/Array.h" +#include "CLucene/util/PriorityQueue.h" +#include "_DocumentsWriter.h" +#include "_TermInfo.h" +#include "_SegmentInfos.h" +#include "_SegmentMerger.h" +#include "_SegmentHeader.h" +#include "CLucene/search/Similarity.h" +#include "CLucene/index/MergePolicy.h" +#include "MergePolicy.h" +#include "MergeScheduler.h" +#include "_IndexFileDeleter.h" +#include "_Term.h" +#include +#include +#include + +CL_NS_USE(store) +CL_NS_USE(util) +CL_NS_USE(document) +CL_NS_USE(analysis) +CL_NS_USE(search) +CL_NS_DEF(index) + +int64_t IndexWriter::WRITE_LOCK_TIMEOUT = 1000; +const char* IndexWriter::WRITE_LOCK_NAME = "write.lock"; +std::ostream* IndexWriter::defaultInfoStream = NULL; + +const int32_t IndexWriter::MERGE_READ_BUFFER_SIZE = 4096; +const int32_t IndexWriter::DISABLE_AUTO_FLUSH = -1; +const int32_t IndexWriter::DEFAULT_MAX_BUFFERED_DOCS = DISABLE_AUTO_FLUSH; +const float_t IndexWriter::DEFAULT_RAM_BUFFER_SIZE_MB = 16.0; +const int32_t IndexWriter::DEFAULT_MAX_BUFFERED_DELETE_TERMS = DISABLE_AUTO_FLUSH; +const int32_t IndexWriter::DEFAULT_MAX_MERGE_DOCS = LogDocMergePolicy::DEFAULT_MAX_MERGE_DOCS; +const int32_t IndexWriter::DEFAULT_MERGE_FACTOR = LogMergePolicy::DEFAULT_MERGE_FACTOR; + +DEFINE_MUTEX(IndexWriter::MESSAGE_ID_LOCK) +int32_t IndexWriter::MESSAGE_ID = 0; + +class IndexWriter::Internal{ +public: + IndexWriter* _this; + Internal(IndexWriter* _this){ + this->_this = _this; + } + // Apply buffered delete terms to the segment just flushed from ram + // apply appropriately so that a delete term is only applied to + // the documents buffered before it, not those buffered after it. + void applyDeletesSelectively(const DocumentsWriter::TermNumMapType& deleteTerms, + const std::vector& deleteIds,IndexReader* reader); + + // Apply buffered delete terms to this reader. + void applyDeletes(const DocumentsWriter::TermNumMapType& deleteTerms, IndexReader* reader); +}; + +void IndexWriter::deinit(bool releaseWriteLock) throw() { + if (writeLock != NULL && releaseWriteLock) { + writeLock->release(); // release write lock + _CLLDELETE(writeLock); + } + _CLLDELETE(segmentInfos); + _CLLDELETE(mergingSegments); + _CLLDELETE(pendingMerges); + _CLLDELETE(runningMerges); + _CLLDELETE(mergeExceptions); + _CLLDELETE(segmentsToOptimize); + _CLLDELETE(mergeScheduler); + _CLLDELETE(mergePolicy); + _CLLDELETE(deleter); + _CLLDELETE(docWriter); + if (bOwnsDirectory) _CLLDECDELETE(directory); + delete _internal; +} + +IndexWriter::~IndexWriter(){ + deinit(); +} + +void IndexWriter::ensureOpen() { + if (closed) { + _CLTHROWA(CL_ERR_AlreadyClosed, "this IndexWriter is closed"); + } +} + +void IndexWriter::message(string message) { + if (infoStream != NULL){ + (*infoStream) << string("IW ") << Misc::toString(messageID) << string(" [") + << Misc::toString( _LUCENE_CURRTHREADID ) << string("]: ") << message << string("\n"); + } +} + +void IndexWriter::setMessageID() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + if (infoStream != NULL && messageID == -1) { + { SCOPED_LOCK_MUTEX(MESSAGE_ID_LOCK) + messageID = MESSAGE_ID++; + } + } +} + +LogMergePolicy* IndexWriter::getLogMergePolicy() const{ + if ( mergePolicy->instanceOf(LogMergePolicy::getClassName()) ) + return (LogMergePolicy*) mergePolicy; + else + _CLTHROWA(CL_ERR_IllegalArgument, "this method can only be called when the merge policy is the default LogMergePolicy"); +} + +bool IndexWriter::getUseCompoundFile() { + return getLogMergePolicy()->getUseCompoundFile(); +} + + +void IndexWriter::setUseCompoundFile(bool value) { + getLogMergePolicy()->setUseCompoundFile(value); + getLogMergePolicy()->setUseCompoundDocStore(value); +} + +void IndexWriter::setSimilarity(Similarity* similarity) { + ensureOpen(); + this->similarity = similarity; +} + +Similarity* IndexWriter::getSimilarity() { + ensureOpen(); + return this->similarity; +} + + +void IndexWriter::setTermIndexInterval(int32_t interval) { + ensureOpen(); + this->termIndexInterval = interval; +} + +int32_t IndexWriter::getTermIndexInterval() { + ensureOpen(); + return termIndexInterval; +} + +IndexWriter::IndexWriter(const char* path, Analyzer* a, bool create):bOwnsDirectory(true){ + init(FSDirectory::getDirectory(path, create), a, create, true, (IndexDeletionPolicy*)NULL, true); +} + +IndexWriter::IndexWriter(Directory* d, Analyzer* a, bool create, bool closeDir):bOwnsDirectory(false){ + init(d, a, create, closeDir, NULL, true); +} + +IndexWriter::IndexWriter(Directory* d, bool autoCommit, Analyzer* a, IndexDeletionPolicy* deletionPolicy, bool closeDirOnShutdown):bOwnsDirectory(false){ + init(d, a, closeDirOnShutdown, deletionPolicy, autoCommit); +} + +IndexWriter::IndexWriter(Directory* d, bool autoCommit, Analyzer* a, bool create, IndexDeletionPolicy* deletionPolicy, bool closeDirOnShutdown):bOwnsDirectory(false){ + init(d, a, create, closeDirOnShutdown, deletionPolicy, autoCommit); +} + +void IndexWriter::init(Directory* d, Analyzer* a, bool closeDir, IndexDeletionPolicy* deletionPolicy, bool autoCommit){ + if (IndexReader::indexExists(d)) { + init(d, a, false, closeDir, deletionPolicy, autoCommit); + } else { + init(d, a, true, closeDir, deletionPolicy, autoCommit); + } +} + +void IndexWriter::init(Directory* d, Analyzer* a, const bool create, const bool closeDir, + IndexDeletionPolicy* deletionPolicy, const bool autoCommit){ + this->_internal = new Internal(this); + this->termIndexInterval = IndexWriter::DEFAULT_TERM_INDEX_INTERVAL; + this->mergeScheduler = _CLNEW SerialMergeScheduler(); //TODO: implement and use ConcurrentMergeScheduler + this->mergingSegments = _CLNEW MergingSegmentsType; + this->pendingMerges = _CLNEW PendingMergesType; + this->runningMerges = _CLNEW RunningMergesType; + this->mergeExceptions = _CLNEW MergeExceptionsType; + this->segmentsToOptimize = _CLNEW SegmentsToOptimizeType; + this->mergePolicy = _CLNEW LogByteSizeMergePolicy(); + this->localRollbackSegmentInfos = NULL; + this->stopMerges = false; + messageID = -1; + maxFieldLength = FIELD_TRUNC_POLICY__WARN; + infoStream = NULL; + this->mergeFactor = this->minMergeDocs = this->maxMergeDocs = 0; + this->commitLockTimeout =0; + this->closeDir = closeDir; + this->commitPending = this->closed = this->closing = false; + directory = d; + analyzer = a; + this->infoStream = defaultInfoStream; + setMessageID(); + this->writeLockTimeout = IndexWriter::WRITE_LOCK_TIMEOUT; + this->similarity = Similarity::getDefault(); + this->hitOOM = false; + this->autoCommit = true; + this->segmentInfos = _CLNEW SegmentInfos; + this->mergeGen = 0; + this->rollbackSegmentInfos = NULL; + this->deleter = NULL; + this->docWriter = NULL; + this->writeLock = NULL; + + if (create) { + // Clear the write lock in case it's leftover: + directory->clearLock(IndexWriter::WRITE_LOCK_NAME); + } + + bool hasLock = false; + try { + writeLock = directory->makeLock(IndexWriter::WRITE_LOCK_NAME); + hasLock = writeLock->obtain(writeLockTimeout); + if (!hasLock) // obtain write lock + _CLTHROWA(CL_ERR_LockObtainFailed, (string("Index locked for write: ") + writeLock->getObjectName()).c_str() ); + } catch (...) { + deinit(hasLock); + _CLLDELETE(writeLock); + throw; + } + + try { + if (create) { + // Try to read first. This is to allow create + // against an index that's currently open for + // searching. In this case we write the next + // segments_N file with no segments: + try { + segmentInfos->read(directory); + segmentInfos->clear(); + } catch (CLuceneError& e) { + if ( e.number() != CL_ERR_IO ) throw e; + // Likely this means it's a fresh directory + } + segmentInfos->write(directory); + } else { + segmentInfos->read(directory); + } + + this->autoCommit = autoCommit; + if (!autoCommit) { + rollbackSegmentInfos = segmentInfos->clone(); + }else{ + rollbackSegmentInfos = NULL; + } + + docWriter = _CLNEW DocumentsWriter(directory, this); + docWriter->setInfoStream(infoStream); + + // Default deleter (for backwards compatibility) is + // KeepOnlyLastCommitDeleter: + deleter = _CLNEW IndexFileDeleter(directory, + deletionPolicy == NULL ? _CLNEW KeepOnlyLastCommitDeletionPolicy() : deletionPolicy, + segmentInfos, infoStream, docWriter); + + pushMaxBufferedDocs(); + + if (infoStream != NULL) { + message( string("init: create=") + (create ? "true" : "false") ); + messageState(); + } + + } catch (CLuceneError& e) { + deinit(e.number() == CL_ERR_IO); + throw e; + } +} + +void IndexWriter::setMergePolicy(MergePolicy* mp) { + ensureOpen(); + if (mp == NULL) + _CLTHROWA(CL_ERR_NullPointer, "MergePolicy must be non-NULL"); + + if (mergePolicy != mp){ + mergePolicy->close(); + _CLDELETE(mergePolicy); + } + mergePolicy = mp; + pushMaxBufferedDocs(); + if (infoStream != NULL) + message(string("setMergePolicy ") + mp->getObjectName()); +} + +MergePolicy* IndexWriter::getMergePolicy() { + ensureOpen(); + return mergePolicy; +} + +void IndexWriter::setMergeScheduler(MergeScheduler* mergeScheduler) { + ensureOpen(); + if (mergeScheduler == NULL) + _CLTHROWA(CL_ERR_NullPointer, "MergeScheduler must be non-NULL"); + + if (this->mergeScheduler != mergeScheduler) { + finishMerges(true); + this->mergeScheduler->close(); + _CLLDELETE(this->mergeScheduler) + } + this->mergeScheduler = mergeScheduler; + if (infoStream != NULL) + message( string("setMergeScheduler ") + mergeScheduler->getObjectName()); +} + +MergeScheduler* IndexWriter::getMergeScheduler() { + ensureOpen(); + return mergeScheduler; +} + +void IndexWriter::setMaxMergeDocs(int32_t maxMergeDocs) { + getLogMergePolicy()->setMaxMergeDocs(maxMergeDocs); +} + +int32_t IndexWriter::getMaxMergeDocs() const{ + return getLogMergePolicy()->getMaxMergeDocs(); +} + +void IndexWriter::setMaxFieldLength(int32_t maxFieldLength) { + ensureOpen(); + this->maxFieldLength = maxFieldLength; + if (infoStream != NULL) + message( "setMaxFieldLength " + Misc::toString(maxFieldLength) ); +} + +int32_t IndexWriter::getMaxFieldLength() { + ensureOpen(); + return maxFieldLength; +} + +void IndexWriter::setMaxBufferedDocs(int32_t maxBufferedDocs) { + ensureOpen(); + if (maxBufferedDocs != DISABLE_AUTO_FLUSH && maxBufferedDocs < 2) + _CLTHROWA(CL_ERR_IllegalArgument, + "maxBufferedDocs must at least be 2 when enabled"); + if (maxBufferedDocs == DISABLE_AUTO_FLUSH + && (int32_t)getRAMBufferSizeMB() == DISABLE_AUTO_FLUSH) + _CLTHROWA(CL_ERR_IllegalArgument, + "at least one of ramBufferSize and maxBufferedDocs must be enabled"); + docWriter->setMaxBufferedDocs(maxBufferedDocs); + pushMaxBufferedDocs(); + if (infoStream != NULL) + message("setMaxBufferedDocs " + Misc::toString(maxBufferedDocs)); +} + +void IndexWriter::pushMaxBufferedDocs() { + if (docWriter->getMaxBufferedDocs() != DISABLE_AUTO_FLUSH) { + const MergePolicy* mp = mergePolicy; + if (mp->instanceOf(LogDocMergePolicy::getClassName())) { + LogDocMergePolicy* lmp = (LogDocMergePolicy*) mp; + const int32_t maxBufferedDocs = docWriter->getMaxBufferedDocs(); + if (lmp->getMinMergeDocs() != maxBufferedDocs) { + if (infoStream != NULL){ + message(string("now push maxBufferedDocs ") + Misc::toString(maxBufferedDocs) + " to LogDocMergePolicy"); + } + lmp->setMinMergeDocs(maxBufferedDocs); + } + } + } +} + +int32_t IndexWriter::getMaxBufferedDocs() { + ensureOpen(); + return docWriter->getMaxBufferedDocs(); +} + +void IndexWriter::setRAMBufferSizeMB(float_t mb) { + if ( (int32_t)mb != DISABLE_AUTO_FLUSH && mb <= 0.0) + _CLTHROWA(CL_ERR_IllegalArgument, + "ramBufferSize should be > 0.0 MB when enabled"); + if (mb == DISABLE_AUTO_FLUSH && getMaxBufferedDocs() == DISABLE_AUTO_FLUSH) + _CLTHROWA(CL_ERR_IllegalArgument, + "at least one of ramBufferSize and maxBufferedDocs must be enabled"); + docWriter->setRAMBufferSizeMB(mb); + if (infoStream != NULL){ + message(string("setRAMBufferSizeMB ") + Misc::toString(mb)); + } +} + +float_t IndexWriter::getRAMBufferSizeMB() { + return docWriter->getRAMBufferSizeMB(); +} + +void IndexWriter::setMaxBufferedDeleteTerms(int32_t maxBufferedDeleteTerms) { + ensureOpen(); + if (maxBufferedDeleteTerms != DISABLE_AUTO_FLUSH + && maxBufferedDeleteTerms < 1) + _CLTHROWA(CL_ERR_IllegalArgument, + "maxBufferedDeleteTerms must at least be 1 when enabled"); + docWriter->setMaxBufferedDeleteTerms(maxBufferedDeleteTerms); + if (infoStream != NULL) + message("setMaxBufferedDeleteTerms " + Misc::toString(maxBufferedDeleteTerms)); +} + +int32_t IndexWriter::getMaxBufferedDeleteTerms() { + ensureOpen(); + return docWriter->getMaxBufferedDeleteTerms(); +} + +void IndexWriter::setMergeFactor(int32_t mergeFactor) { + getLogMergePolicy()->setMergeFactor(mergeFactor); +} + +int32_t IndexWriter::getMergeFactor() const { + return getLogMergePolicy()->getMergeFactor(); +} + +void IndexWriter::setDefaultInfoStream(std::ostream* infoStream) { + IndexWriter::defaultInfoStream = infoStream; +} + +std::ostream* IndexWriter::getDefaultInfoStream() { + return IndexWriter::defaultInfoStream; +} + +//TODO: infoStream - unicode +void IndexWriter::setInfoStream(std::ostream* infoStream) { + ensureOpen(); + this->infoStream = infoStream; + setMessageID(); + docWriter->setInfoStream(infoStream); + deleter->setInfoStream(infoStream); + if (infoStream != NULL) + messageState(); +} + +void IndexWriter::messageState() { + message( string("setInfoStream: dir=") + directory->toString() + + " autoCommit=" + (autoCommit?"true":"false" + + string(" mergePolicy=") + mergePolicy->getObjectName() + + " mergeScheduler=" + mergeScheduler->getObjectName() + + " ramBufferSizeMB=" + Misc::toString(docWriter->getRAMBufferSizeMB()) + + " maxBuffereDocs=" + Misc::toString(docWriter->getMaxBufferedDocs())) + + " maxBuffereDeleteTerms=" + Misc::toString(docWriter->getMaxBufferedDeleteTerms()) + + " maxFieldLength=" + Misc::toString(maxFieldLength) + + " index=" + segString()); +} + +std::ostream* IndexWriter::getInfoStream() { + ensureOpen(); + return infoStream; +} + +void IndexWriter::setWriteLockTimeout(int64_t writeLockTimeout) { + ensureOpen(); + this->writeLockTimeout = writeLockTimeout; +} + +int64_t IndexWriter::getWriteLockTimeout() { + ensureOpen(); + return writeLockTimeout; +} + +void IndexWriter::setDefaultWriteLockTimeout(int64_t writeLockTimeout) { + IndexWriter::WRITE_LOCK_TIMEOUT = writeLockTimeout; +} + +int64_t IndexWriter::getDefaultWriteLockTimeout() { + return IndexWriter::WRITE_LOCK_TIMEOUT; +} + +void IndexWriter::close(bool waitForMerges) { + bool doClose; + + // If any methods have hit OutOfMemoryError, then abort + // on close, in case the internal state of IndexWriter + // or DocumentsWriter is corrupt + if (hitOOM) + abort(); + + { SCOPED_LOCK_MUTEX(this->THIS_LOCK) + // Ensure that only one thread actually gets to do the closing: + if (!closing) { + doClose = true; + closing = true; + } else + doClose = false; + } + if (doClose) + closeInternal(waitForMerges); + else + // Another thread beat us to it (is actually doing the + // close), so we will block until that other thread + // has finished closing + waitForClose(); +} + +void IndexWriter::waitForClose() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + while(!closed && closing) { + CONDITION_WAIT(THIS_LOCK, THIS_WAIT_CONDITION) + } +} + +void IndexWriter::closeInternal(bool waitForMerges) { + try { + if (infoStream != NULL) + message(string("now flush at close")); + + docWriter->close(); + + // Only allow a _CLNEW merge to be triggered if we are + // going to wait for merges: + flush(waitForMerges, true); + + if (waitForMerges) + // Give merge scheduler last chance to run, in case + // any pending merges are waiting: + mergeScheduler->merge(this); + + mergePolicy->close(); + + finishMerges(waitForMerges); + + mergeScheduler->close(); + + { SCOPED_LOCK_MUTEX(this->THIS_LOCK) + if (commitPending) { + bool success = false; + try { + segmentInfos->write(directory); // now commit changes + success = true; + } _CLFINALLY ( + if (!success) { + if (infoStream != NULL) + message(string("hit exception committing segments file during close")); + deletePartialSegmentsFile(); + } + ) + if (infoStream != NULL) + message("close: wrote segments file \"" + segmentInfos->getCurrentSegmentFileName() + "\""); + + deleter->checkpoint(segmentInfos, true); + + commitPending = false; +// _CLDELETE(rollbackSegmentInfos); + } + _CLDELETE(rollbackSegmentInfos); + + + if (infoStream != NULL) + message("at close: " + segString()); + + _CLDELETE(docWriter); + deleter->close(); + } + + if (closeDir) + directory->close(); + + if (writeLock != NULL) { + writeLock->release(); // release write lock + _CLDELETE(writeLock); + } + closed = true; + } catch (std::bad_alloc&) { + hitOOM = true; + _CLTHROWA(CL_ERR_OutOfMemory,"Out of memory"); + } _CLFINALLY ( + { SCOPED_LOCK_MUTEX(this->THIS_LOCK) + if (!closed) { + closing = false; + if (infoStream != NULL) + message(string("hit exception while closing")); + } + CONDITION_NOTIFYALL(THIS_WAIT_CONDITION) + } + ) +} + +bool IndexWriter::flushDocStores() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + + const std::vector& files = docWriter->files(); + + bool useCompoundDocStore = false; + + if (files.size() > 0) { + string docStoreSegment; + + bool success = false; + try { + docStoreSegment = docWriter->closeDocStore(); + success = true; + } _CLFINALLY ( + if (!success) { + if (infoStream != NULL) + message(string("hit exception closing doc store segment")); + docWriter->abort(NULL); + } + ) + + useCompoundDocStore = mergePolicy->useCompoundDocStore(segmentInfos); + + if (useCompoundDocStore && !docStoreSegment.empty()) { + // Now build compound doc store file + + success = false; + + const int32_t numSegments = segmentInfos->size(); + const string compoundFileName = docStoreSegment + "." + IndexFileNames::COMPOUND_FILE_STORE_EXTENSION; + + try { + CompoundFileWriter cfsWriter(directory, compoundFileName.c_str()); + const size_t size = files.size(); + for(size_t i=0;iinfo(i); + if (si->getDocStoreOffset() != -1 && + si->getDocStoreSegment().compare(docStoreSegment)==0) + si->setDocStoreIsCompoundFile(true); + } + checkpoint(); + success = true; + } _CLFINALLY ( + if (!success) { + + if (infoStream != NULL) + message("hit exception building compound file doc store for segment " + docStoreSegment); + + // Rollback to no compound file + for(int32_t i=0;iinfo(i); + if (si->getDocStoreOffset() != -1 && + si->getDocStoreSegment().compare(docStoreSegment)==0 ) + si->setDocStoreIsCompoundFile(false); + } + deleter->deleteFile(compoundFileName.c_str()); + deletePartialSegmentsFile(); + } + ) + + deleter->checkpoint(segmentInfos, false); + } + } + + return useCompoundDocStore; +} + +Directory* IndexWriter::getDirectory() { + ensureOpen(); + return directory; +} + +Analyzer* IndexWriter::getAnalyzer() { + ensureOpen(); + return analyzer; +} + +int32_t IndexWriter::docCount() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + ensureOpen(); + int32_t count = docWriter->getNumDocsInRAM(); + for (int32_t i = 0; i < segmentInfos->size(); i++) { + SegmentInfo* si = segmentInfos->info(i); + count += si->docCount; + } + return count; +} + + +void IndexWriter::addDocument(Document* doc, Analyzer* analyzer) { + if ( analyzer == NULL ) analyzer = this->analyzer; + ensureOpen(); + bool doFlush = false; + bool success = false; + try { + try { + doFlush = docWriter->addDocument(doc, analyzer); + success = true; + } _CLFINALLY ( + if (!success) { + + if (infoStream != NULL) + message(string("hit exception adding document")); + + { SCOPED_LOCK_MUTEX(this->THIS_LOCK) + // If docWriter has some aborted files that were + // never incref'd, then we clean them up here + if (docWriter != NULL) { + const std::vector* files = docWriter->abortedFiles(); + if (files != NULL ) + deleter->deleteNewFiles(*files); + } + } + } + ) + if (doFlush) + flush(true, false); + } catch (std::bad_alloc&) { + hitOOM = true; + _CLTHROWA(CL_ERR_OutOfMemory,"Out of memory"); + } +} + +void IndexWriter::deleteDocuments(Term* term) { + ensureOpen(); + try { + bool doFlush = docWriter->bufferDeleteTerm(term); + if (doFlush) + flush(true, false); + } catch (std::bad_alloc&) { + hitOOM = true; + _CLTHROWA(CL_ERR_OutOfMemory,"Out of memory"); + } +} + +void IndexWriter::deleteDocuments(const ArrayBase* terms) { + ensureOpen(); + try { + bool doFlush = docWriter->bufferDeleteTerms(terms); + if (doFlush) + flush(true, false); + } catch (std::bad_alloc&) { + hitOOM = true; + _CLTHROWA(CL_ERR_OutOfMemory,"Out of memory"); + } +} + +void IndexWriter::updateDocument(Term* term, Document* doc) { + ensureOpen(); + updateDocument(term, doc, getAnalyzer()); +} + +void IndexWriter::updateDocument(Term* term, Document* doc, Analyzer* analyzer) +{ + ensureOpen(); + try { + bool doFlush = false; + bool success = false; + try { + doFlush = docWriter->updateDocument(term, doc, analyzer); + success = true; + } _CLFINALLY ( + if (!success) { + + if (infoStream != NULL) + message(string("hit exception updating document")); + + { SCOPED_LOCK_MUTEX(this->THIS_LOCK) + // If docWriter has some aborted files that were + // never incref'd, then we clean them up here + const std::vector* files = docWriter->abortedFiles(); + if (files != NULL) + deleter->deleteNewFiles(*files); + } + } + ) + if (doFlush) + flush(true, false); + } catch (std::bad_alloc&) { + hitOOM = true; + _CLTHROWA(CL_ERR_OutOfMemory,"Out of memory"); + } +} + +// for test purpose +int32_t IndexWriter::getSegmentCount(){ + SCOPED_LOCK_MUTEX(THIS_LOCK) + return segmentInfos->size(); +} + +// for test purpose +int32_t IndexWriter::getNumBufferedDocuments(){ + SCOPED_LOCK_MUTEX(THIS_LOCK) + return docWriter->getNumDocsInRAM(); +} + +// for test purpose +int32_t IndexWriter::getDocCount(int32_t i) { + SCOPED_LOCK_MUTEX(THIS_LOCK) + if (i >= 0 && i < segmentInfos->size()) { + return segmentInfos->info(i)->docCount; + } else { + return -1; + } +} + +string IndexWriter::newSegmentName() { + // Cannot synchronize on IndexWriter because that causes + // deadlock + { SCOPED_LOCK_MUTEX(segmentInfos->THIS_LOCK) + // Important to set commitPending so that the + // segmentInfos is written on close. Otherwise we + // could close, re-open and re-return the same segment + // name that was previously returned which can cause + // problems at least with ConcurrentMergeScheduler. + commitPending = true; + + char buf[10]; + Misc::longToBase(segmentInfos->counter++, 36,buf); + return string("_") + buf; + } +} + +void IndexWriter::optimize(bool doWait) { + optimize(1, doWait); +} + +void IndexWriter::optimize(int32_t maxNumSegments, bool doWait) { + ensureOpen(); + + if (maxNumSegments < 1) + _CLTHROWA(CL_ERR_IllegalArgument, (string("maxNumSegments must be >= 1; got ") + Misc::toString(maxNumSegments)).c_str()); + + if (infoStream != NULL) + message("optimize: index now " + segString()); + + flush(); + + { SCOPED_LOCK_MUTEX(this->THIS_LOCK) + resetMergeExceptions(); + segmentsToOptimize->clear(); + const int32_t numSegments = segmentInfos->size(); + for(int32_t i=0;ipush_back(segmentInfos->info(i)); + + // Now mark all pending & running merges as optimize + // merge: + PendingMergesType::iterator it = pendingMerges->begin(); + while(it != pendingMerges->end()) { + MergePolicy::OneMerge* _merge = *it; + _merge->optimize = true; + _merge->maxNumSegmentsOptimize = maxNumSegments; + + it++; + } + + RunningMergesType::iterator it2 = runningMerges->begin(); + while(it2 != runningMerges->end()) { + MergePolicy::OneMerge* _merge = *it2; + _merge->optimize = true; + _merge->maxNumSegmentsOptimize = maxNumSegments; + + it2++; + } + } + + maybeMerge(maxNumSegments, true); + + if (doWait) { + { SCOPED_LOCK_MUTEX(this->THIS_LOCK) + while(optimizeMergesPending()) { + CONDITION_WAIT(THIS_LOCK, THIS_WAIT_CONDITION); + + if (mergeExceptions->size() > 0) { + // Forward any exceptions in background merge + // threads to the current thread: + const int32_t size = mergeExceptions->size(); + for(int32_t i=0;ioptimize) { + CLuceneError tmp(_merge->getException()); + CLuceneError err(tmp.number(), + (string("background merge hit exception: ") + _merge->segString(directory) + ":" + tmp.what() ).c_str(), false ); + throw err; + } + } + } + } + } + } + + // NOTE: in the ConcurrentMergeScheduler case, when + // doWait is false, we can return immediately while + // background threads accomplish the optimization +} + +bool IndexWriter::optimizeMergesPending() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + for(PendingMergesType::iterator it = pendingMerges->begin(); + it != pendingMerges->end(); it++){ + if ((*it)->optimize) + return true; + + it++; + } + + for(RunningMergesType::iterator it = runningMerges->begin(); + it != runningMerges->end(); it++){ + if ((*it)->optimize) + return true; + + it++; + } + + return false; +} + +void IndexWriter::maybeMerge() { + maybeMerge(false); +} + +void IndexWriter::maybeMerge(bool optimize) { + maybeMerge(1, optimize); +} + +void IndexWriter::maybeMerge(int32_t maxNumSegmentsOptimize, bool optimize) { + updatePendingMerges(maxNumSegmentsOptimize, optimize); + mergeScheduler->merge(this); +} + +void IndexWriter::updatePendingMerges(int32_t maxNumSegmentsOptimize, bool optimize){ + SCOPED_LOCK_MUTEX(THIS_LOCK) + assert (!optimize || maxNumSegmentsOptimize > 0); + + if (stopMerges) + return; + + MergePolicy::MergeSpecification* spec; + if (optimize) { + spec = mergePolicy->findMergesForOptimize(segmentInfos, this, maxNumSegmentsOptimize, *segmentsToOptimize); + + if (spec != NULL) { + const int32_t numMerges = spec->merges->size(); + for(int32_t i=0;imerges)[i]; + _merge->optimize = true; + _merge->maxNumSegmentsOptimize = maxNumSegmentsOptimize; + } + } + + } else + spec = mergePolicy->findMerges(segmentInfos, this); + + if (spec != NULL) { + const int32_t numMerges = spec->merges->size(); + for(int32_t i=0;imerges)[i])) + _CLLDELETE((*spec->merges)[i]); + } + } + _CLDELETE(spec); +} + +MergePolicy::OneMerge* IndexWriter::getNextMerge() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + if (pendingMerges->size() == 0) + return NULL; + else { + // Advance the merge from pending to running + MergePolicy::OneMerge* _merge = *pendingMerges->begin(); + pendingMerges->pop_front(); + runningMerges->insert(_merge); + return _merge; + } +} + + +void IndexWriter::startTransaction() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + + if (infoStream != NULL) + message(string("now start transaction")); + + CND_PRECONDITION(docWriter->getNumBufferedDeleteTerms() == 0, + "calling startTransaction with buffered delete terms not supported"); + CND_PRECONDITION (docWriter->getNumDocsInRAM() == 0, + "calling startTransaction with buffered documents not supported"); + + localRollbackSegmentInfos = segmentInfos->clone(); + localAutoCommit = autoCommit; + + if (localAutoCommit) { + + if (infoStream != NULL) + message(string("flush at startTransaction")); + + flush(); + // Turn off auto-commit during our local transaction: + autoCommit = false; + } else + // We must "protect" our files at this point from + // deletion in case we need to rollback: + deleter->incRef(segmentInfos, false); +} + +void IndexWriter::rollbackTransaction() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + + if (infoStream != NULL) + message(string("now rollback transaction")); + + // First restore autoCommit in case we hit an exception below: + autoCommit = localAutoCommit; + + // Keep the same segmentInfos instance but replace all + // of its SegmentInfo instances. This is so the next + // attempt to commit using this instance of IndexWriter + // will always write to a _CLNEW generation ("write once"). + segmentInfos->clear(); + segmentInfos->insert(localRollbackSegmentInfos, true); + _CLDELETE(localRollbackSegmentInfos); + + // Ask deleter to locate unreferenced files we had + // created & remove them: + deleter->checkpoint(segmentInfos, false); + + if (!autoCommit) + // Remove the incRef we did in startTransaction: + deleter->decRef(segmentInfos); + + deleter->refresh(); + finishMerges(false); + stopMerges = false; +} + +void IndexWriter::commitTransaction() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + + if (infoStream != NULL) + message(string("now commit transaction")); + + // First restore autoCommit in case we hit an exception below: + autoCommit = localAutoCommit; + + bool success = false; + try { + checkpoint(); + success = true; + } _CLFINALLY ( + if (!success) { + if (infoStream != NULL) + message(string("hit exception committing transaction")); + + rollbackTransaction(); + } + ) + + if (!autoCommit) + // Remove the incRef we did in startTransaction. + deleter->decRef(localRollbackSegmentInfos); + + _CLDELETE(localRollbackSegmentInfos); + + // Give deleter a chance to remove files now: + deleter->checkpoint(segmentInfos, autoCommit); +} + +void IndexWriter::abort() { + ensureOpen(); + if (autoCommit) + _CLTHROWA(CL_ERR_IllegalState,"abort() can only be called when IndexWriter was opened with autoCommit=false"); + + bool doClose; + { SCOPED_LOCK_MUTEX(this->THIS_LOCK) + // Ensure that only one thread actually gets to do the closing: + if (!closing) { + doClose = true; + closing = true; + } else + doClose = false; + } + + if (doClose) { + + finishMerges(false); + + // Must pre-close these two, in case they set + // commitPending=true, so that we can then set it to + // false before calling closeInternal + mergePolicy->close(); + mergeScheduler->close(); + + { SCOPED_LOCK_MUTEX(this->THIS_LOCK) + // Keep the same segmentInfos instance but replace all + // of its SegmentInfo instances. This is so the next + // attempt to commit using this instance of IndexWriter + // will always write to a _CLNEW generation ("write + // once"). + segmentInfos->clear(); + segmentInfos->insert(rollbackSegmentInfos, false); + + docWriter->abort(NULL); + + // Ask deleter to locate unreferenced files & remove + // them: + deleter->checkpoint(segmentInfos, false); + deleter->refresh(); + } + + commitPending = false; + closeInternal(false); + } else + waitForClose(); +} + +void IndexWriter::finishMerges(bool waitForMerges) { + SCOPED_LOCK_MUTEX(THIS_LOCK) + if (!waitForMerges) { + + stopMerges = true; + + // Abort all pending & running merges: + for(PendingMergesType::iterator it = pendingMerges->begin(); + it != pendingMerges->end(); it++ ){ + MergePolicy::OneMerge* _merge = *it; + if (infoStream != NULL) + message("now abort pending merge " + _merge->segString(directory)); + _merge->abort(); + mergeFinish(_merge); + + it++; + } + pendingMerges->clear(); + + for(RunningMergesType::iterator it = runningMerges->begin(); + it != runningMerges->end(); it++ ){ + MergePolicy::OneMerge* _merge = *it; + if (infoStream != NULL) + message("now abort running merge " + _merge->segString(directory)); + _merge->abort(); + + it++; + } + + // These merges periodically check whether they have + // been aborted, and stop if so. We wait here to make + // sure they all stop. It should not take very int64_t + // because the merge threads periodically check if + // they are aborted. + while(runningMerges->size() > 0) { + if (infoStream != NULL) + message( string("now wait for ") + Misc::toString( (int32_t)runningMerges->size()) + " running merge to abort"); + CONDITION_WAIT(THIS_LOCK, THIS_WAIT_CONDITION) + } + + assert (0 == mergingSegments->size()); + + if (infoStream != NULL) + message(string("all running merges have aborted")); + + } else { + while(pendingMerges->size() > 0 || runningMerges->size() > 0) { + CONDITION_WAIT(THIS_LOCK, THIS_WAIT_CONDITION) + } + assert (0 == mergingSegments->size()); + } +} + +void IndexWriter::checkpoint() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + if (autoCommit) { + segmentInfos->write(directory); + commitPending = false; + if (infoStream != NULL) + message("checkpoint: wrote segments file \"" + segmentInfos->getCurrentSegmentFileName() + "\""); + } else { + commitPending = true; + } +} + +void IndexWriter::addIndexes(CL_NS(util)::ArrayBase& dirs){ + + ensureOpen(); + + // Do not allow add docs or deletes while we are running: + docWriter->pauseAllThreads(); + + try { + + if (infoStream != NULL) + message(string("flush at addIndexes")); + flush(); + + bool success = false; + + startTransaction(); + + try { + + { SCOPED_LOCK_MUTEX(this->THIS_LOCK) + for (int32_t i = 0; i< dirs.length; i++) { + SegmentInfos sis; // read infos from dir + sis.read(dirs[i]); + segmentInfos->insert(&sis,true); // add each info + } + } + + optimize(); + + success = true; + } _CLFINALLY ( + if (success) { + commitTransaction(); + } else { + rollbackTransaction(); + } + ) + } catch (std::bad_alloc&) { + hitOOM = true; + _CLTHROWA(CL_ERR_OutOfMemory,"Out of memory"); + } _CLFINALLY ( + docWriter->resumeAllThreads(); + ) +} + +void IndexWriter::resetMergeExceptions() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + mergeExceptions->clear(); + mergeGen++; +} + +void IndexWriter::addIndexesNoOptimize(CL_NS(util)::ArrayBase& dirs) +{ + ensureOpen(); + + // Do not allow add docs or deletes while we are running: + docWriter->pauseAllThreads(); + + try { + if (infoStream != NULL) + message(string("flush at addIndexesNoOptimize")); + flush(); + + bool success = false; + + startTransaction(); + + try { + + { SCOPED_LOCK_MUTEX(this->THIS_LOCK) + for (int32_t i = 0; i< dirs.length; i++) { + if (directory == dirs[i]) { + // cannot add this index: segments may be deleted in merge before added + _CLTHROWA(CL_ERR_IllegalArgument,"Cannot add this index to itself"); + } + + SegmentInfos sis; // read infos from dir + sis.read(dirs[i]); + segmentInfos->insert(&sis, true); + } + } + + maybeMerge(); + + // If after merging there remain segments in the index + // that are in a different directory, just copy these + // over into our index. This is necessary (before + // finishing the transaction) to avoid leaving the + // index in an unusable (inconsistent) state. + copyExternalSegments(); + + success = true; + + } _CLFINALLY ( + if (success) { + commitTransaction(); + } else { + rollbackTransaction(); + } + ) + } catch (std::bad_alloc&) { + hitOOM = true; + _CLTHROWA(CL_ERR_OutOfMemory,"Out of memory"); + } _CLFINALLY ( + docWriter->resumeAllThreads(); + ) +} + +void IndexWriter::copyExternalSegments() { + + bool any = false; + + while(true) { + SegmentInfo* info = NULL; + MergePolicy::OneMerge* _merge = NULL; + { SCOPED_LOCK_MUTEX(this->THIS_LOCK) + const int32_t numSegments = segmentInfos->size(); + for(int32_t i=0;iinfo(i); + if (info->dir != directory) { + SegmentInfos* range = _CLNEW SegmentInfos; + segmentInfos->range(i, 1+i, *range); + _merge = _CLNEW MergePolicy::OneMerge(range, info->getUseCompoundFile()); + break; + } + } + } + + if (_merge != NULL) { + if (registerMerge(_merge)) { + PendingMergesType::iterator p = std::find(pendingMerges->begin(),pendingMerges->end(), _merge); + pendingMerges->remove(p,true); + runningMerges->insert(_merge); + any = true; + merge(_merge); + } else + // This means there is a bug in the + // MergeScheduler. MergeSchedulers in general are + // not allowed to run a merge involving segments + // external to this IndexWriter's directory in the + // background because this would put the index + // into an inconsistent state (where segmentInfos + // has been written with such external segments + // that an IndexReader would fail to load). + _CLTHROWA(CL_ERR_Merge, (string("segment \"") + info->name + " exists in external directory yet the MergeScheduler executed the merge in a separate thread").c_str() ); + } else + // No more external segments + break; + } + + if (any) + // Sometimes, on copying an external segment over, + // more merges may become necessary: + mergeScheduler->merge(this); +} + +void IndexWriter::doAfterFlush(){ +} + +void IndexWriter::flush() { + flush(true, false); +} + +void IndexWriter::flush(bool triggerMerge, bool _flushDocStores) { + ensureOpen(); + + if (doFlush(_flushDocStores) && triggerMerge) + maybeMerge(); +} + +bool IndexWriter::doFlush(bool _flushDocStores) { + SCOPED_LOCK_MUTEX(THIS_LOCK) + + // Make sure no threads are actively adding a document + + // Returns true if docWriter is currently aborting, in + // which case we skip flushing this segment + if (docWriter->pauseAllThreads()) { + docWriter->resumeAllThreads(); + return false; + } + + bool ret = false; + try { + + SegmentInfo* newSegment = NULL; + + const int32_t numDocs = docWriter->getNumDocsInRAM(); + + // Always flush docs if there are any + bool flushDocs = numDocs > 0; + + // With autoCommit=true we always must flush the doc + // stores when we flush + _flushDocStores |= autoCommit; + string docStoreSegment = docWriter->getDocStoreSegment(); + if (docStoreSegment.empty()) + _flushDocStores = false; + + // Always flush deletes if there are any delete terms. + // TODO: when autoCommit=false we don't have to flush + // deletes with every flushed segment; we can save + // CPU/IO by buffering longer & flushing deletes only + // when they are full or writer is being closed. We + // have to fix the "applyDeletesSelectively" logic to + // apply to more than just the last flushed segment + bool flushDeletes = docWriter->hasDeletes(); + + if (infoStream != NULL) { + message(" flush: segment=" + docWriter->getSegment() + + " docStoreSegment=" + docWriter->getDocStoreSegment() + + " docStoreOffset=" + Misc::toString(docWriter->getDocStoreOffset()) + + " flushDocs=" + Misc::toString(flushDocs) + + " flushDeletes=" + Misc::toString(flushDeletes) + + " flushDocStores=" + Misc::toString(_flushDocStores) + + " numDocs=" + Misc::toString(numDocs) + + " numBufDelTerms=" + Misc::toString(docWriter->getNumBufferedDeleteTerms()) ); + message(" index before flush " + segString()); + } + + int32_t docStoreOffset = docWriter->getDocStoreOffset(); + + // docStoreOffset should only be non-zero when + // autoCommit == false + assert (!autoCommit || 0 == docStoreOffset); + + bool docStoreIsCompoundFile = false; + + // Check if the doc stores must be separately flushed + // because other segments, besides the one we are about + // to flush, reference it + if (_flushDocStores && (!flushDocs || docWriter->getSegment().compare(docWriter->getDocStoreSegment()) != 0)) { + // We must separately flush the doc store + if (infoStream != NULL) + message(" flush shared docStore segment " + docStoreSegment); + + docStoreIsCompoundFile = flushDocStores(); + _flushDocStores = false; + } + + string segment = docWriter->getSegment(); + + // If we are flushing docs, segment must not be NULL: + assert (!segment.empty() || !flushDocs); + + if (flushDocs || flushDeletes) { + + SegmentInfos* rollback = NULL; + + if (flushDeletes) + rollback = segmentInfos->clone(); + + bool success = false; + + try { + if (flushDocs) { + + if (0 == docStoreOffset && _flushDocStores) { + // This means we are flushing doc stores + // with this segment, so it will not be shared + // with other segments + assert (!docStoreSegment.empty()); + assert (docStoreSegment.compare(segment)==0); + docStoreOffset = -1; + docStoreIsCompoundFile = false; + docStoreSegment.clear(); + } + + int32_t flushedDocCount = docWriter->flush(_flushDocStores); + + newSegment = _CLNEW SegmentInfo(segment.c_str(), + flushedDocCount, + directory, false, true, + docStoreOffset, docStoreSegment.c_str(), + docStoreIsCompoundFile); + segmentInfos->insert(newSegment); + } + + if (flushDeletes) + // we should be able to change this so we can + // buffer deletes longer and then flush them to + // multiple flushed segments, when + // autoCommit=false + applyDeletes(flushDocs); + + doAfterFlush(); + + checkpoint(); + success = true; + } _CLFINALLY ( + if (!success) { + + if (infoStream != NULL) + message("hit exception flushing segment " + segment); + + if (flushDeletes) { + + // Carefully check if any partial .del files + // should be removed: + const int32_t size = rollback->size(); + for(int32_t i=0;iinfo(i)->getDelFileName(); + const string delFileName = rollback->info(i)->getDelFileName(); + if ( !newDelFileName.empty() && newDelFileName.compare(delFileName)!=0 ) + deleter->deleteFile(newDelFileName.c_str()); + } + + // Fully replace the segmentInfos since flushed + // deletes could have changed any of the + // SegmentInfo instances: + segmentInfos->clear(); + assert(false);//test me.. + segmentInfos->insert(rollback, false); + + } else { + // Remove segment we added, if any: + if ( newSegment != NULL && + segmentInfos->size() > 0 && + segmentInfos->info(segmentInfos->size()-1) == newSegment) + segmentInfos->remove(segmentInfos->size()-1); + } + if (flushDocs) + docWriter->abort(NULL); + deletePartialSegmentsFile(); + deleter->checkpoint(segmentInfos, false); + + if (!segment.empty()) + deleter->refresh(segment.c_str()); + } else if (flushDeletes) + _CLDELETE(rollback); + ) + + deleter->checkpoint(segmentInfos, autoCommit); + + if (flushDocs && mergePolicy->useCompoundFile(segmentInfos, + newSegment)) { + success = false; + try { + docWriter->createCompoundFile(segment); + newSegment->setUseCompoundFile(true); + checkpoint(); + success = true; + } _CLFINALLY ( + if (!success) { + if (infoStream != NULL) + message("hit exception creating compound file for newly flushed segment " + segment); + newSegment->setUseCompoundFile(false); + deleter->deleteFile( (segment + "." + IndexFileNames::COMPOUND_FILE_EXTENSION).c_str() ); + deletePartialSegmentsFile(); + } + ) + + deleter->checkpoint(segmentInfos, autoCommit); + } + + ret = true; + } + + } catch (std::bad_alloc&) { + hitOOM = true; + _CLTHROWA(CL_ERR_OutOfMemory,"Out of memory"); + } _CLFINALLY ( + docWriter->clearFlushPending(); + docWriter->resumeAllThreads(); + ) + return ret; +} + +int64_t IndexWriter::ramSizeInBytes() { + ensureOpen(); + return docWriter->getRAMUsed(); +} + +int32_t IndexWriter::numRamDocs() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + ensureOpen(); + return docWriter->getNumDocsInRAM(); +} + +int32_t IndexWriter::ensureContiguousMerge(MergePolicy::OneMerge* _merge) { + + int32_t first = segmentInfos->indexOf(_merge->segments->info(0)); + if (first == -1) + _CLTHROWA(CL_ERR_Merge, (string("could not find segment ") + _merge->segments->info(0)->name + " in current segments").c_str()); + + const int32_t numSegments = segmentInfos->size(); + + const int32_t numSegmentsToMerge = _merge->segments->size(); + for(int32_t i=0;isegments->info(i); + + if (first + i >= numSegments || !segmentInfos->info(first+i)->equals(info) ) { + if (segmentInfos->indexOf(info) == -1) + _CLTHROWA(CL_ERR_Merge, (string("MergePolicy selected a segment (") + info->name + ") that is not in the index").c_str()); + else + _CLTHROWA(CL_ERR_Merge, (string("MergePolicy selected non-contiguous segments to merge (") + _merge->getObjectName() + " vs " + segString() + "), which IndexWriter (currently) cannot handle").c_str() ); + } + } + + return first; +} + +bool IndexWriter::commitMerge(MergePolicy::OneMerge* _merge) { + SCOPED_LOCK_MUTEX(THIS_LOCK) + + assert (_merge->registerDone); + + if (hitOOM) + return false; + + if (infoStream != NULL) + message("commitMerge: " + _merge->segString(directory)); + + // If merge was explicitly aborted, or, if abort() or + // rollbackTransaction() had been called since our merge + // started (which results in an unqualified + // deleter->refresh() call that will remove any index + // file that current segments does not reference), we + // abort this merge + if (_merge->isAborted()) { + if (infoStream != NULL) + message("commitMerge: skipping merge " + _merge->segString(directory) + ": it was aborted"); + + assert (_merge->increfDone); + decrefMergeSegments(_merge); + deleter->refresh(_merge->info->name.c_str()); + return false; + } + + bool success = false; + + int32_t start; + + try { + SegmentInfos* sourceSegmentsClone = _merge->segmentsClone; + const SegmentInfos* sourceSegments = _merge->segments; + + start = ensureContiguousMerge(_merge); + if (infoStream != NULL) + message("commitMerge " + _merge->segString(directory)); + + // Carefully merge deletes that occurred after we + // started merging: + + BitVector* deletes = NULL; + int32_t docUpto = 0; + + const int32_t numSegmentsToMerge = sourceSegments->size(); + for(int32_t i=0;iinfo(i); + const SegmentInfo* currentInfo = sourceSegments->info(i); + + assert (currentInfo->docCount == previousInfo->docCount); + + const int32_t docCount = currentInfo->docCount; + + if (previousInfo->hasDeletions()) { + + // There were deletes on this segment when the merge + // started. The merge has collapsed away those + // deletes, but, if _CLNEW deletes were flushed since + // the merge started, we must now carefully keep any + // newly flushed deletes but mapping them to the _CLNEW + // docIDs. + + assert (currentInfo->hasDeletions()); + + // Load deletes present @ start of merge, for this segment: + BitVector previousDeletes(previousInfo->dir, previousInfo->getDelFileName().c_str()); + + if (currentInfo->getDelFileName().compare(previousInfo->getDelFileName()) != 0) { + // This means this segment has had new deletes + // committed since we started the merge, so we + // must merge them: + if (deletes == NULL) + deletes = _CLNEW BitVector(_merge->info->docCount); + + BitVector currentDeletes(currentInfo->dir, currentInfo->getDelFileName().c_str()); + for(int32_t j=0;jset(docUpto); + docUpto++; + } + } + } else + docUpto += docCount - previousDeletes.count(); + + } else if (currentInfo->hasDeletions()) { + // This segment had no deletes before but now it + // does: + if (deletes == NULL) + deletes = _CLNEW BitVector(_merge->info->docCount); + BitVector currentDeletes(directory, currentInfo->getDelFileName().c_str()); + + for(int32_t j=0;jset(docUpto); + docUpto++; + } + + } else + // No deletes before or after + docUpto += currentInfo->docCount; + + _merge->checkAborted(directory); + } + + if (deletes != NULL) { + _merge->info->advanceDelGen(); + deletes->write(directory, _merge->info->getDelFileName().c_str() ); + _CLDELETE(deletes); + } + success = true; + } _CLFINALLY ( + if (!success) { + if (infoStream != NULL) + message(string("hit exception creating merged deletes file")); + deleter->refresh(_merge->info->name.c_str()); + } + ) + + // Simple optimization: if the doc store we are using + // has been closed and is in now compound format (but + // wasn't when we started), then we will switch to the + // compound format as well: + const string mergeDocStoreSegment = _merge->info->getDocStoreSegment(); + if ( !mergeDocStoreSegment.empty() && !_merge->info->getDocStoreIsCompoundFile()) { + const int32_t size = segmentInfos->size(); + for(int32_t i=0;iinfo(i); + const string docStoreSegment = info->getDocStoreSegment(); + if ( !docStoreSegment.empty() && + docStoreSegment.compare(mergeDocStoreSegment)==0 && + info->getDocStoreIsCompoundFile()) { + _merge->info->setDocStoreIsCompoundFile(true); + break; + } + } + } + + success = false; + SegmentInfos* rollback = NULL; + try { + rollback = segmentInfos->clone(); + int32_t segmentssize = _merge->segments->size(); + for ( int32_t i=0;iremove(start); + } + segmentInfos->add(_merge->info,start); + checkpoint(); + success = true; + } _CLFINALLY ( + if (!success && rollback != NULL) { + if (infoStream != NULL) + message(string("hit exception when checkpointing after merge")); + segmentInfos->clear(); + segmentInfos->insert(rollback,true); + deletePartialSegmentsFile(); + deleter->refresh(_merge->info->name.c_str()); + } + _CLDELETE(rollback); + ) + + if (_merge->optimize) + segmentsToOptimize->push_back(_merge->info); + + // Must checkpoint before decrefing so any newly + // referenced files in the _CLNEW merge->info are incref'd + // first: + deleter->checkpoint(segmentInfos, autoCommit); + + decrefMergeSegments(_merge); + + return true; +} + + +void IndexWriter::decrefMergeSegments(MergePolicy::OneMerge* _merge) { + const SegmentInfos* sourceSegmentsClone = _merge->segmentsClone; + const int32_t numSegmentsToMerge = sourceSegmentsClone->size(); + assert (_merge->increfDone); + _merge->increfDone = false; + for(int32_t i=0;iinfo(i); + // Decref all files for this SegmentInfo (this + // matches the incref in mergeInit): + if (previousInfo->dir == directory) + deleter->decRef(previousInfo->files()); + } +} + +void IndexWriter::merge(MergePolicy::OneMerge* _merge) +{ + + assert (_merge->registerDone); + assert (!_merge->optimize || _merge->maxNumSegmentsOptimize > 0); + + bool success = false; + + try { + try { + try { + mergeInit(_merge); + + if (infoStream != NULL) + message("now merge\n merge=" + _merge->segString(directory) + "\n index=" + segString()); + + mergeMiddle(_merge); + success = true; + } catch (CLuceneError& e) { + if ( e.number() != CL_ERR_MergeAborted ) throw e; + _merge->setException(e); + addMergeException(_merge); + // We can ignore this exception, unless the merge + // involves segments from external directories, in + // which case we must throw it so, for example, the + // rollbackTransaction code in addIndexes* is + // executed. + if (_merge->isExternal) + throw e; + } + } _CLFINALLY ( + { SCOPED_LOCK_MUTEX(this->THIS_LOCK) + try { + + mergeFinish(_merge); + + if (!success) { + if (infoStream != NULL) + message(string("hit exception during merge")); + addMergeException(_merge); + if (_merge->info != NULL && segmentInfos->indexOf(_merge->info)==-1) + deleter->refresh(_merge->info->name.c_str()); + } + + // This merge (and, generally, any change to the + // segments) may now enable new merges, so we call + // merge policy & update pending merges. + if (success && !_merge->isAborted() && !closed && !closing) + updatePendingMerges(_merge->maxNumSegmentsOptimize, _merge->optimize); + + } _CLFINALLY ( + RunningMergesType::iterator itr = runningMerges->find(_merge); + if ( itr != runningMerges->end() ) runningMerges->remove( itr ); + // Optimize may be waiting on the final optimize + // merge to finish; and finishMerges() may be + // waiting for all merges to finish: + CONDITION_NOTIFYALL(THIS_WAIT_CONDITION) + ) + } + ) + } catch (std::bad_alloc&) { + hitOOM = true; + _CLTHROWA(CL_ERR_OutOfMemory,"Out of memory"); + } +} + +bool IndexWriter::registerMerge(MergePolicy::OneMerge* _merge) { + SCOPED_LOCK_MUTEX(THIS_LOCK) + + if (_merge->registerDone) + return true; + + const int32_t count = _merge->segments->size(); + bool isExternal = false; + for(int32_t i=0;isegments->info(i); + if (mergingSegments->find(info) != mergingSegments->end()) + return false; + if (segmentInfos->indexOf(info) == -1) + return false; + if (info->dir != directory) + isExternal = true; + } + + pendingMerges->push_back(_merge); + + if (infoStream != NULL) + message( string("add merge to pendingMerges: ") + _merge->segString(directory) + " [total " + Misc::toString((int32_t)pendingMerges->size()) + " pending]"); + + _merge->mergeGen = mergeGen; + _merge->isExternal = isExternal; + + // OK it does not conflict; now record that this merge + // is running (while synchronized) to avoid race + // condition where two conflicting merges from different + // threads, start + for(int32_t i=0;iinsert(mergingSegments->end(),_merge->segments->info(i)); + + // Merge is now registered + _merge->registerDone = true; + return true; +} + +void IndexWriter::mergeInit(MergePolicy::OneMerge* _merge) { + SCOPED_LOCK_MUTEX(THIS_LOCK) + bool success = false; + try { + _mergeInit(_merge); + success = true; + } _CLFINALLY ( + if (!success) { + mergeFinish(_merge); + RunningMergesType::iterator itr = runningMerges->find(_merge); + if ( itr != runningMerges->end() ) runningMerges->remove(itr); + } + ) +} + +void IndexWriter::_mergeInit(MergePolicy::OneMerge* _merge) { + SCOPED_LOCK_MUTEX(THIS_LOCK) + + assert (testPoint("startMergeInit")); + + assert (_merge->registerDone); + + if (_merge->info != NULL) + // mergeInit already done + return; + + if (_merge->isAborted()) + return; + + const SegmentInfos* sourceSegments = _merge->segments; + const int32_t end = sourceSegments->size(); + + ensureContiguousMerge(_merge); + + // Check whether this merge will allow us to skip + // merging the doc stores (stored field & vectors). + // This is a very substantial optimization (saves tons + // of IO) that can only be applied with + // autoCommit=false. + + Directory* lastDir = directory; + string lastDocStoreSegment; + int32_t next = -1; + + bool mergeDocStores = false; + bool doFlushDocStore = false; + const string currentDocStoreSegment = docWriter->getDocStoreSegment(); + + // Test each segment to be merged: check if we need to + // flush/merge doc stores + for (int32_t i = 0; i < end; i++) { + SegmentInfo* si = sourceSegments->info(i); + + // If it has deletions we must merge the doc stores + if (si->hasDeletions()) + mergeDocStores = true; + + // If it has its own (private) doc stores we must + // merge the doc stores + if (-1 == si->getDocStoreOffset()) + mergeDocStores = true; + + // If it has a different doc store segment than + // previous segments, we must merge the doc stores + string docStoreSegment = si->getDocStoreSegment(); + if (docStoreSegment.empty()) + mergeDocStores = true; + else if (lastDocStoreSegment.empty()) + lastDocStoreSegment = docStoreSegment; + else if (lastDocStoreSegment.compare(docStoreSegment) != 0) + mergeDocStores = true; + + // Segments' docScoreOffsets must be in-order, + // contiguous. For the default merge policy now + // this will always be the case but for an arbitrary + // merge policy this may not be the case + if (-1 == next) + next = si->getDocStoreOffset() + si->docCount; + else if (next != si->getDocStoreOffset()) + mergeDocStores = true; + else + next = si->getDocStoreOffset() + si->docCount; + + // If the segment comes from a different directory + // we must merge + if (lastDir != si->dir) + mergeDocStores = true; + + // If the segment is referencing the current "live" + // doc store outputs then we must merge + if (si->getDocStoreOffset() != -1 && !currentDocStoreSegment.empty() && si->getDocStoreSegment().compare(currentDocStoreSegment)==0 ) + doFlushDocStore = true; + } + + int32_t docStoreOffset; + string docStoreSegment; + bool docStoreIsCompoundFile; + + if (mergeDocStores) { + docStoreOffset = -1; + docStoreSegment.clear(); + docStoreIsCompoundFile = false; + } else { + SegmentInfo* si = sourceSegments->info(0); + docStoreOffset = si->getDocStoreOffset(); + docStoreSegment = si->getDocStoreSegment(); + docStoreIsCompoundFile = si->getDocStoreIsCompoundFile(); + } + + if (mergeDocStores && doFlushDocStore) { + // SegmentMerger intends to merge the doc stores + // (stored fields, vectors), and at least one of the + // segments to be merged refers to the currently + // live doc stores. + + // TODO: if we know we are about to merge away these + // newly flushed doc store files then we should not + // make compound file out of them... + if (infoStream != NULL) + message(string("flush at merge")); + flush(false, true); + } + + // We must take a full copy at this point so that we can + // properly merge deletes in commitMerge() + _merge->segmentsClone = _merge->segments->clone(); + + for (int32_t i = 0; i < end; i++) { + SegmentInfo* si = _merge->segmentsClone->info(i); + + // IncRef all files for this segment info to make sure + // they are not removed while we are trying to merge-> + if (si->dir == directory) + deleter->incRef(si->files()); + } + + _merge->increfDone = true; + + _merge->mergeDocStores = mergeDocStores; + + // Bind a _CLNEW segment name here so even with + // ConcurrentMergePolicy we keep deterministic segment + // names. + _merge->info = _CLNEW SegmentInfo(newSegmentName().c_str(), 0, + directory, false, true, + docStoreOffset, + docStoreSegment.c_str(), + docStoreIsCompoundFile); + // Also enroll the merged segment into mergingSegments; + // this prevents it from getting selected for a merge + // after our merge is done but while we are building the + // CFS: + mergingSegments->insert(_merge->info); +} + +void IndexWriter::mergeFinish(MergePolicy::OneMerge* _merge) { + SCOPED_LOCK_MUTEX(THIS_LOCK) + + if (_merge->increfDone) + decrefMergeSegments(_merge); + + assert (_merge->registerDone); + + const SegmentInfos* sourceSegments = _merge->segments; + const int32_t end = sourceSegments->size(); + for(int32_t i=0;ifind(sourceSegments->info(i)); + if ( itr != mergingSegments->end() ) mergingSegments->remove(itr); + } + MergingSegmentsType::iterator itr = mergingSegments->find(_merge->info); + if ( itr != mergingSegments->end() ) mergingSegments->remove(itr); + _merge->registerDone = false; +} + +int32_t IndexWriter::mergeMiddle(MergePolicy::OneMerge* _merge) { + + _merge->checkAborted(directory); + + const string mergedName = _merge->info->name; + + int32_t mergedDocCount = 0; + + const SegmentInfos* sourceSegments = _merge->segments; + SegmentInfos* sourceSegmentsClone = _merge->segmentsClone; + const int32_t numSegments = sourceSegments->size(); + + if (infoStream != NULL) + message("merging " + _merge->segString(directory)); + + SegmentMerger merger (this, mergedName.c_str(), _merge) ; + + // This is try/finally to make sure merger's readers are + // closed: + + bool success = false; + + try { + int32_t totDocCount = 0; + + for (int32_t i = 0; i < numSegments; i++) { + SegmentInfo* si = sourceSegmentsClone->info(i); + IndexReader* reader = SegmentReader::get(si, MERGE_READ_BUFFER_SIZE, _merge->mergeDocStores); // no need to set deleter (yet) + merger.add(reader); + totDocCount += reader->numDocs(); + } + if (infoStream != NULL) { + message(string("merge: total ")+ Misc::toString(totDocCount)+" docs"); + } + + _merge->checkAborted(directory); + + mergedDocCount = _merge->info->docCount = merger.merge(_merge->mergeDocStores); + + assert (mergedDocCount == totDocCount); + + success = true; + + } _CLFINALLY ( + // close readers before we attempt to delete + // now-obsolete segments + merger.closeReaders(); + if (!success) { + if (infoStream != NULL) + message("hit exception during merge; now refresh deleter on segment " + mergedName); + { SCOPED_LOCK_MUTEX(this->THIS_LOCK) + addMergeException(_merge); + deleter->refresh(mergedName.c_str()); + } + } + ) + + if (!commitMerge(_merge)) + // commitMerge will return false if this merge was aborted + return 0; + + if (_merge->useCompoundFile) { + + success = false; + bool skip = false; + const string compoundFileName = mergedName + "." + IndexFileNames::COMPOUND_FILE_EXTENSION; + + try { + try { + merger.createCompoundFile(compoundFileName.c_str()); + success = true; + } catch (CLuceneError& ioe) { + if ( ioe.number() != CL_ERR_IO ) throw ioe; + + { SCOPED_LOCK_MUTEX(this->THIS_LOCK) + if (segmentInfos->indexOf(_merge->info) == -1) { + // If another merge kicked in and merged our + // _CLNEW segment away while we were trying to + // build the compound file, we can hit a + // FileNotFoundException and possibly + // IOException over NFS. We can tell this has + // happened because our SegmentInfo is no + // longer in the segments; if this has + // happened it is safe to ignore the exception + // & skip finishing/committing our compound + // file creating. + if (infoStream != NULL) + message("hit exception creating compound file; ignoring it because our info (segment " + _merge->info->name + ") has been merged away"); + skip = true; + } else + throw ioe; + } + } + } _CLFINALLY ( + if (!success) { + if (infoStream != NULL) + message(string("hit exception creating compound file during merge: skip=") + Misc::toString(skip)); + + { SCOPED_LOCK_MUTEX(this->THIS_LOCK) + if (!skip) + addMergeException(_merge); + deleter->deleteFile(compoundFileName.c_str()); + } + } + ) + + if (!skip) { + + { SCOPED_LOCK_MUTEX(this->THIS_LOCK) + if (skip || segmentInfos->indexOf(_merge->info) == -1 || _merge->isAborted()) { + // Our segment (committed in non-compound + // format) got merged away while we were + // building the compound format. + deleter->deleteFile(compoundFileName.c_str()); + } else { + success = false; + try { + _merge->info->setUseCompoundFile(true); + checkpoint(); + success = true; + } _CLFINALLY ( + if (!success) { + if (infoStream != NULL) + message(string("hit exception checkpointing compound file during merge")); + + // Must rollback: + addMergeException(_merge); + _merge->info->setUseCompoundFile(false); + deletePartialSegmentsFile(); + deleter->deleteFile(compoundFileName.c_str()); + } + ) + + // Give deleter a chance to remove files now. + deleter->checkpoint(segmentInfos, autoCommit); + } + } + } + } + + return mergedDocCount; +} + +void IndexWriter::addMergeException(MergePolicy::OneMerge* _merge) { + SCOPED_LOCK_MUTEX(THIS_LOCK) + if ( mergeGen == _merge->mergeGen ){ + MergeExceptionsType::iterator itr = mergeExceptions->begin(); + while ( itr != mergeExceptions->end() ){ + MergePolicy::OneMerge* x = *itr; + if ( x == _merge ){ + return; + } + } + } + mergeExceptions->push_back(_merge); +} + +void IndexWriter::deletePartialSegmentsFile() { + if (segmentInfos->getLastGeneration() != segmentInfos->getGeneration()) { + string segmentFileName = IndexFileNames::fileNameFromGeneration(IndexFileNames::SEGMENTS, + "", + segmentInfos->getGeneration()); + if (infoStream != NULL) + message("now delete partial segments file \"" + segmentFileName + "\""); + + deleter->deleteFile(segmentFileName.c_str()); + } +} + + +void IndexWriter::applyDeletes(bool flushedNewSegment) { + const DocumentsWriter::TermNumMapType& bufferedDeleteTerms = docWriter->getBufferedDeleteTerms(); + const vector* bufferedDeleteDocIDs = docWriter->getBufferedDeleteDocIDs(); + + if (infoStream != NULL) + message( string("flush ") + Misc::toString(docWriter->getNumBufferedDeleteTerms()) + + " buffered deleted terms and " + Misc::toString((int32_t)bufferedDeleteDocIDs->size()) + + " deleted docIDs on " + Misc::toString((int32_t)segmentInfos->size()) + " segments."); + + if (flushedNewSegment) { + IndexReader* reader = NULL; + try { + // Open readers w/o opening the stored fields / + // vectors because these files may still be held + // open for writing by docWriter + reader = SegmentReader::get(segmentInfos->info(segmentInfos->size() - 1), false); + + // Apply delete terms to the segment just flushed from ram + // apply appropriately so that a delete term is only applied to + // the documents buffered before it, not those buffered after it. + _internal->applyDeletesSelectively(bufferedDeleteTerms, *bufferedDeleteDocIDs, reader); + } _CLFINALLY ( + if (reader != NULL) { + try { + reader->doCommit(); + } _CLFINALLY ( + reader->doClose(); + _CLLDELETE(reader); + ) + } + ) + } + + int32_t infosEnd = segmentInfos->size(); + if (flushedNewSegment) { + infosEnd--; + } + + for (int32_t i = 0; i < infosEnd; i++) { + IndexReader* reader = NULL; + try { + reader = SegmentReader::get(segmentInfos->info(i), false); + + // Apply delete terms to disk segments + // except the one just flushed from ram. + _internal->applyDeletes(bufferedDeleteTerms, reader); + } _CLFINALLY ( + if (reader != NULL) { + try { + reader->doCommit(); + } _CLFINALLY ( + reader->doClose(); + _CLDELETE(reader); + ) + } + ) + } + + // Clean up bufferedDeleteTerms. + docWriter->clearBufferedDeletes(); +} + + +int32_t IndexWriter::getBufferedDeleteTermsSize() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + return docWriter->getBufferedDeleteTerms().size(); +} + +int32_t IndexWriter::getNumBufferedDeleteTerms() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + return docWriter->getNumBufferedDeleteTerms(); +} + +void IndexWriter::Internal::applyDeletesSelectively(const DocumentsWriter::TermNumMapType& deleteTerms, + const vector& deleteIds, IndexReader* reader) +{ + DocumentsWriter::TermNumMapType::const_iterator iter = deleteTerms.begin(); + while (iter != deleteTerms.end() ) { + Term* term = iter->first; + TermDocs* docs = reader->termDocs(term); + if (docs != NULL) { + int32_t num = iter->second->getNum(); + try { + while (docs->next()) { + int32_t doc = docs->doc(); + if (doc >= num) { + break; + } + reader->deleteDocument(doc); + } + } _CLFINALLY ( + docs->close(); + _CLDELETE(docs); + ) + } + + iter++; + } + + if (deleteIds.size() > 0) { + vector::const_iterator iter2 = deleteIds.begin(); + while (iter2 != deleteIds.end()){ + reader->deleteDocument(*iter2); + ++iter2; + } + } +} + +void IndexWriter::Internal::applyDeletes(const DocumentsWriter::TermNumMapType& deleteTerms, IndexReader* reader) +{ + DocumentsWriter::TermNumMapType::const_iterator iter = deleteTerms.begin(); + while (iter != deleteTerms.end()) { + reader->deleteDocuments(iter->first); + iter++; + } +} + +SegmentInfo* IndexWriter::newestSegment() { + return segmentInfos->info(segmentInfos->size()-1); +} + +string IndexWriter::segString() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + std::string buffer; + for(int32_t i = 0; i < segmentInfos->size(); i++) { + if (i > 0) { + buffer+= " "; + } + buffer+= segmentInfos->info(i)->segString(directory); + } + + return buffer; +} + +bool IndexWriter::testPoint(const char* name) { + return true; +} + +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/IndexWriter.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/IndexWriter.h new file mode 100644 index 0000000..0ca1e99 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/IndexWriter.h @@ -0,0 +1,1290 @@ +/*------------------------------------------------------------------------------ + * 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_IndexWriter_ +#define _lucene_index_IndexWriter_ + +#include "CLucene/util/VoidList.h" +#include "CLucene/util/Array.h" +CL_CLASS_DEF(search,Similarity) +CL_CLASS_DEF(store,Lock) +CL_CLASS_DEF(analysis,Analyzer) +CL_CLASS_DEF(store,Directory) +CL_CLASS_DEF(store,LuceneLock) +CL_CLASS_DEF(document,Document) + +#include "MergePolicy.h" +#include "CLucene/LuceneThreads.h" + +CL_NS_DEF(index) +class SegmentInfo; +class SegmentInfos; +class MergePolicy; +class IndexReader; +class SegmentReader; +class MergeScheduler; +class DocumentsWriter; +class IndexFileDeleter; +class LogMergePolicy; +class IndexDeletionPolicy; +class Term; + +/** + An IndexWriter creates and maintains an index. + +

The create argument to the + constructor + determines whether a new index is created, or whether an existing index is + opened. Note that you + can open an index with create=true even while readers are + using the index. The old readers will continue to search + the "point in time" snapshot they had opened, and won't + see the newly created index until they re-open. There are + also constructors + with no create argument which + will create a new index if there is not already an index at the + provided path and otherwise open the existing index.

+ +

In either case, documents are added with addDocument + and removed with deleteDocuments. + A document can be updated with updateDocument + (which just deletes and then adds the entire document). + When finished adding, deleting and updating documents, close should be called.

+ +

These changes are buffered in memory and periodically + flushed to the {@link Directory} (during the above method + calls). A flush is triggered when there are enough + buffered deletes (see {@link #setMaxBufferedDeleteTerms}) + or enough added documents since the last flush, whichever + is sooner. For the added documents, flushing is triggered + either by RAM usage of the documents (see {@link + #setRAMBufferSizeMB}) or the number of added documents. + The default is to flush when RAM usage hits 16 MB. For + best indexing speed you should flush by RAM usage with a + large RAM buffer. You can also force a flush by calling + {@link #flush}. When a flush occurs, both pending deletes + and added documents are flushed to the index. A flush may + also trigger one or more segment merges which by default + run with a background thread so as not to block the + addDocument calls (see below + for changing the {@link MergeScheduler}).

+ + +

The optional autoCommit argument to the + constructors + controls visibility of the changes to {@link IndexReader} instances reading the same index. + When this is false, changes are not + visible until {@link #close()} is called. + Note that changes will still be flushed to the + {@link org.apache.lucene.store.Directory} as new files, + but are not committed (no new segments_N file + is written referencing the new files) until {@link #close} is + called. If something goes terribly wrong (for example the + JVM crashes) before {@link #close()}, then + the index will reflect none of the changes made (it will + remain in its starting state). + You can also call {@link #abort()}, which closes the writer without committing any + changes, and removes any index + files that had been flushed but are now unreferenced. + This mode is useful for preventing readers from refreshing + at a bad time (for example after you've done all your + deletes but before you've done your adds). + It can also be used to implement simple single-writer + transactional semantics ("all or none").

+ +

When autoCommit is true then + every flush is also a commit ({@link IndexReader} + instances will see each flush as changes to the index). + This is the default, to match the behavior before 2.2. + When running in this mode, be careful not to refresh your + readers while optimize or segment merges are taking place + as this can tie up substantial disk space.

+ +

Regardless of autoCommit, an {@link + IndexReader} or {@link org.apache.lucene.search.IndexSearcher} will only see the + index as of the "point in time" that it was opened. Any + changes committed to the index after the reader was opened + are not visible until the reader is re-opened.

+ +

If an index will not have more documents added for a while and optimal search + performance is desired, then the optimize + method should be called before the index is closed.

+ +

Opening an IndexWriter creates a lock file for the directory in use. Trying to open + another IndexWriter on the same directory will lead to a + {@link LockObtainFailedException}. The {@link LockObtainFailedException} + is also thrown if an IndexReader on the same directory is used to delete documents + from the index.

+ + +

Expert: IndexWriter allows an optional + {@link IndexDeletionPolicy} implementation to be + specified. You can use this to control when prior commits + are deleted from the index. The default policy is {@link + KeepOnlyLastCommitDeletionPolicy} which removes all prior + commits as soon as a new commit is done (this matches + behavior before 2.2). Creating your own policy can allow + you to explicitly keep previous "point in time" commits + alive in the index for some time, to allow readers to + refresh to the new commit without having the old commit + deleted out from under them. This is necessary on + filesystems like NFS that do not support "delete on last + close" semantics, which Lucene's "point in time" search + normally relies on.

+ +

Expert: + IndexWriter allows you to separately change + the {@link MergePolicy} and the {@link MergeScheduler}. + The {@link MergePolicy} is invoked whenever there are + changes to the segments in the index. Its role is to + select which merges to do, if any, and return a {@link + MergePolicy.MergeSpecification} describing the merges. It + also selects merges to do for optimize(). (The default is + {@link LogByteSizeMergePolicy}. Then, the {@link + MergeScheduler} is invoked with the requested merges and + it decides when and how to run the merges. The default is + {@link ConcurrentMergeScheduler}.

+ */ +/* + * Clarification: Check Points (and commits) + * Being able to set autoCommit=false allows IndexWriter to flush and + * write new index files to the directory without writing a new segments_N + * file which references these new files. It also means that the state of + * the in memory SegmentInfos object is different than the most recent + * segments_N file written to the directory. + * + * Each time the SegmentInfos is changed, and matches the (possibly + * modified) directory files, we have a new "check point". + * If the modified/new SegmentInfos is written to disk - as a new + * (generation of) segments_N file - this check point is also an + * IndexCommitPoint. + * + * With autoCommit=true, every checkPoint is also a CommitPoint. + * With autoCommit=false, some checkPoints may not be commits. + * + * A new checkpoint always replaces the previous checkpoint and + * becomes the new "front" of the index. This allows the IndexFileDeleter + * to delete files that are referenced only by stale checkpoints. + * (files that were created since the last commit, but are no longer + * referenced by the "front" of the index). For this, IndexFileDeleter + * keeps track of the last non commit checkpoint. + */ +class CLUCENE_EXPORT IndexWriter:LUCENE_BASE { + bool isOpen; //indicates if the writers is open - this way close can be called multiple times + + // how to analyze text + CL_NS(analysis)::Analyzer* analyzer; + + CL_NS(search)::Similarity* similarity; // how to normalize + + bool closeDir; + bool closed; + bool closing; + + // Holds all SegmentInfo instances currently involved in + // merges + typedef CL_NS(util)::CLHashSet > MergingSegmentsType; + MergingSegmentsType* mergingSegments; + MergePolicy* mergePolicy; + MergeScheduler* mergeScheduler; + + typedef CL_NS(util)::CLLinkedList > PendingMergesType; + PendingMergesType* pendingMerges; + + typedef CL_NS(util)::CLHashSet, + CL_NS(util)::Deletor::Object > RunningMergesType; + RunningMergesType* runningMerges; + + typedef CL_NS(util)::CLArrayList MergeExceptionsType; + MergeExceptionsType* mergeExceptions; + int64_t mergeGen; + bool stopMerges; + + + /** If non-null, information about merges will be printed to this. + */ + std::ostream* infoStream; + static std::ostream* defaultInfoStream; + + + + bool commitPending; // true if segmentInfos has changes not yet committed + SegmentInfos* rollbackSegmentInfos; // segmentInfos we will fallback to if the commit fails + + SegmentInfos* localRollbackSegmentInfos; // segmentInfos we will fallback to if the commit fails + bool localAutoCommit; // saved autoCommit during local transaction + bool autoCommit; // false if we should commit only on close + + DocumentsWriter* docWriter; + IndexFileDeleter* deleter; + + typedef std::vector SegmentsToOptimizeType; + SegmentsToOptimizeType* segmentsToOptimize; // used by optimize to note those needing optimization + + + CL_NS(store)::LuceneLock* writeLock; + + void init(CL_NS(store)::Directory* d, CL_NS(analysis)::Analyzer* a, bool closeDir, IndexDeletionPolicy* deletionPolicy, bool autoCommit); + void init(CL_NS(store)::Directory* d, CL_NS(analysis)::Analyzer* a, bool create, bool closeDir, IndexDeletionPolicy* deletionPolicy, bool autoCommit); + void deinit(bool releaseWriteLock = true) throw(); + + // where this index resides + CL_NS(store)::Directory* directory; + bool bOwnsDirectory; + + + int32_t getSegmentsCounter(); + int32_t maxFieldLength; + int32_t mergeFactor; + int32_t minMergeDocs; + int32_t maxMergeDocs; + int32_t termIndexInterval; + + int64_t writeLockTimeout; + int64_t commitLockTimeout; + + // The normal read buffer size defaults to 1024, but + // increasing this during merging seems to yield + // performance gains. However we don't want to increase + // it too much because there are quite a few + // BufferedIndexInputs created during merging. See + // LUCENE-888 for details. + static const int32_t MERGE_READ_BUFFER_SIZE; + + // Used for printing messages + STATIC_DEFINE_MUTEX(MESSAGE_ID_LOCK) + static int32_t MESSAGE_ID; + int32_t messageID; + mutable bool hitOOM; + +public: + DEFINE_MUTEX(THIS_LOCK) + DEFINE_CONDITION(THIS_WAIT_CONDITION) + + // Release the write lock, if needed. + SegmentInfos* segmentInfos; + + // Release the write lock, if needed. + virtual ~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); + + /** + * Returns the maximum number of terms that will be + * indexed for a single field in a document. + * @see #setMaxFieldLength + */ + 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. This setting refers to the number of running terms, + * not to the number of different terms.

+ * Note: see {@link DEFAULT_MAX_FIELD_LENGTH} for an important + * note regarding field lengths. + * @see #DEFAULT_MAX_FIELD_LENGTH + */ + void setMaxFieldLength(int32_t val); + + /** 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. + * + *

The default value is DEFAULT_MAX_BUFFERED_DOCS.*/ + void setMaxBufferedDocs(int32_t val); + /** + * @see #setMaxBufferedDocs + */ + int32_t getMaxBufferedDocs(); + + /** + * Default value for the write lock timeout (1,000). + * @see #setDefaultWriteLockTimeout + */ + static int64_t WRITE_LOCK_TIMEOUT; + /** + * Sets the maximum time to wait for a write lock (in milliseconds). + */ + void setWriteLockTimeout(int64_t writeLockTimeout); + /** + * @see #setWriteLockTimeout + */ + int64_t getWriteLockTimeout(); + + /** + * Sets the maximum time to wait for a commit lock (in milliseconds). + */ + void setCommitLockTimeout(int64_t commitLockTimeout); + /** + * @see #setCommitLockTimeout + */ + int64_t getCommitLockTimeout(); + + /** + * Name of the write lock in the index. + */ + static const char* WRITE_LOCK_NAME; //"write.lock"; + + /** + * @deprecated + * @see LogMergePolicy#DEFAULT_MERGE_FACTOR + */ + static const int32_t DEFAULT_MERGE_FACTOR ; + + /** + * Value to denote a flush trigger is disabled + */ + static const int32_t DISABLE_AUTO_FLUSH; + + /** + * Disabled by default (because IndexWriter flushes by RAM usage + * by default). Change using {@link #setMaxBufferedDocs(int)}. + */ + static const int32_t DEFAULT_MAX_BUFFERED_DOCS; + + /** + * Default value is 16 MB (which means flush when buffered + * docs consume 16 MB RAM). Change using {@link #setRAMBufferSizeMB}. + */ + static const float_t DEFAULT_RAM_BUFFER_SIZE_MB; + + /** + * Disabled by default (because IndexWriter flushes by RAM usage + * by default). Change using {@link #setMaxBufferedDeleteTerms(int)}. + */ + static const int32_t DEFAULT_MAX_BUFFERED_DELETE_TERMS; + + /** + * @deprecated + * @see LogDocMergePolicy#DEFAULT_MAX_MERGE_DOCS + */ + static const int32_t DEFAULT_MAX_MERGE_DOCS; + + + /* 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. + * + *

This must never be less than 2. The default value is 10. + */ + int32_t getMergeFactor() const; + void setMergeFactor(int32_t 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, numUniqueTerms/interval terms are read into + * memory by an IndexReader, and, on average, interval/2 terms + * must be scanned for each random term access. + * + * @see #DEFAULT_TERM_INDEX_INTERVAL + */ + void setTermIndexInterval(int32_t interval); + /** Expert: Return the interval between indexed terms. + * + * @see #setTermIndexInterval(int) + */ + int32_t getTermIndexInterval(); + + /**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. + * + *

The default value is {@link Integer#MAX_VALUE}. + */ + int32_t getMaxMergeDocs() const; + void setMaxMergeDocs(int32_t val); + + /** + * Constructs an IndexWriter for the index in path. + * Text will be analyzed with a. If create + * is true, then a new, empty index will be created in + * path, replacing the index already there, if any. + * + * @param path the path to the index directory + * @param a the analyzer to use + * @param create true to create the index or overwrite + * the existing one; false to append to the existing + * index + * @throws CorruptIndexException if the index is corrupt + * @throws LockObtainFailedException if another writer + * has this index open (write.lock could not + * be obtained) + * @throws IOException if the directory cannot be read/written to, or + * if it does not exist and create is + * false or if there is any other low-level + * IO error + */ + explicit IndexWriter(const char* path, CL_NS(analysis)::Analyzer* a, const bool create); + + /** + * Constructs an IndexWriter for the index in d. + * Text will be analyzed with a. If create + * is true, then a new, empty index will be created in + * d, replacing the index already there, if any. + * + * @param d the index directory + * @param a the analyzer to use + * @param create true to create the index or overwrite + * the existing one; false to append to the existing + * index + * @throws CorruptIndexException if the index is corrupt + * @throws LockObtainFailedException if another writer + * has this index open (write.lock could not + * be obtained) + * @throws IOException if the directory cannot be read/written to, or + * if it does not exist and create is + * false or if there is any other low-level + * IO error + */ + explicit IndexWriter(CL_NS(store)::Directory* d, CL_NS(analysis)::Analyzer* a, const bool create, const bool closeDirOnShutdown=false); + + /** + * Expert: constructs an IndexWriter with a custom {@link + * IndexDeletionPolicy}, for the index in d, + * first creating it if it does not already exist. Text + * will be analyzed with a. + * + * @param d the index directory + * @param autoCommit see above + * @param a the analyzer to use + * @param deletionPolicy see above + * @throws CorruptIndexException if the index is corrupt + * @throws LockObtainFailedException if another writer + * has this index open (write.lock could not + * be obtained) + * @throws IOException if the directory cannot be + * read/written to or if there is any other low-level + * IO error + */ + explicit IndexWriter(CL_NS(store)::Directory* d, const bool autoCommit, CL_NS(analysis)::Analyzer* a, IndexDeletionPolicy* deletionPolicy = NULL, const bool closeDirOnShutdown=false); + + /** + * Expert: constructs an IndexWriter with a custom {@link + * IndexDeletionPolicy}, for the index in d. + * Text will be analyzed with a. If + * create is true, then a new, empty index + * will be created in d, replacing the index + * already there, if any. + * + * @param d the index directory + * @param autoCommit see above + * @param a the analyzer to use + * @param create true to create the index or overwrite + * the existing one; false to append to the existing + * index + * @param deletionPolicy see above + * @throws CorruptIndexException if the index is corrupt + * @throws LockObtainFailedException if another writer + * has this index open (write.lock could not + * be obtained) + * @throws IOException if the directory cannot be read/written to, or + * if it does not exist and create is + * false or if there is any other low-level + * IO error + */ + explicit IndexWriter(CL_NS(store)::Directory* d, const bool autoCommit, CL_NS(analysis)::Analyzer* a, const bool create, IndexDeletionPolicy* deletionPolicy = NULL, const bool closeDirOnShutdown=false); + + /**Returns the number of documents currently in this index. + * synchronized + */ + int32_t docCount(); + + + /** Returns the directory this index resides in. */ + CL_NS(store)::Directory* getDirectory(); + + /** 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(); + + /** 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); + + + /** Expert: Set the Similarity implementation used by this IndexWriter. + * + * @see Similarity#setDefault(Similarity) + */ + void setSimilarity(CL_NS(search)::Similarity* similarity); + + /** Expert: Return the Similarity implementation used by this IndexWriter. + * + *

This defaults to the current value of {@link Similarity#getDefault()}. + */ + CL_NS(search)::Similarity* getSimilarity(); + + /** Returns the analyzer used by this index. */ + CL_NS(analysis)::Analyzer* getAnalyzer(); + + // synchronized + std::string newSegmentName(); + + /** + * Prints a message to the infoStream (if non-null), + * prefixed with the identifying information for this + * writer and the thread that's calling it. + */ + void message(std::string message); + + /** + * Returns the current default infoStream for newly + * instantiated IndexWriters. + * @see #setDefaultInfoStream + */ + static std::ostream* getDefaultInfoStream(); + + /** + * Returns the current infoStream in use by this writer. + * @see #setInfoStream + */ + std::ostream* getInfoStream(); + + /** + * Returns the number of buffered deleted terms that will + * trigger a flush if enabled. + * @see #setMaxBufferedDeleteTerms + */ + int32_t getMaxBufferedDeleteTerms(); + + /** + * Expert: returns the current MergePolicy in use by this writer. + * @see #setMergePolicy + */ + MergePolicy* getMergePolicy(); + + /** + * Expert: returns the current MergePolicy in use by this + * writer. + * @see #setMergePolicy + */ + MergeScheduler* getMergeScheduler(); + + /** + * Returns the value set by {@link #setRAMBufferSizeMB} if enabled. + */ + float_t getRAMBufferSizeMB(); + + /** If non-null, this will be the default infoStream used + * by a newly instantiated IndexWriter. + * @see #setInfoStream + */ + static void setDefaultInfoStream(std::ostream* infoStream);\ + + /** If non-null, information about merges, deletes and a + * message when maxFieldLength is reached will be printed + * to this. + */ + void setInfoStream(std::ostream* infoStream); + + /** + *

Determines the minimal number of delete terms required before the buffered + * in-memory delete terms are applied and flushed. If there are documents + * buffered in memory at the time, they are merged and a new segment is + * created.

+ + *

Disabled by default (writer flushes by RAM usage).

+ * + * @throws IllegalArgumentException if maxBufferedDeleteTerms + * is enabled but smaller than 1 + * @see #setRAMBufferSizeMB + */ + void setMaxBufferedDeleteTerms(int32_t maxBufferedDeleteTerms); + + /** + * Expert: set the merge policy used by this writer. + */ + void setMergePolicy(MergePolicy* mp); + + /** + * Expert: set the merge scheduler used by this writer. + */ + void setMergeScheduler(MergeScheduler* mergeScheduler); + + /** Determines the amount of RAM that may be used for + * buffering added documents before they are flushed as a + * new Segment. Generally for faster indexing performance + * it's best to flush by RAM usage instead of document + * count and use as large a RAM buffer as you can. + * + *

When this is set, the writer will flush whenever + * buffered documents use this much RAM. Pass in {@link + * #DISABLE_AUTO_FLUSH} to prevent triggering a flush due + * to RAM usage. Note that if flushing by document count + * is also enabled, then the flush will be triggered by + * whichever comes first.

+ * + *

The default value is {@link #DEFAULT_RAM_BUFFER_SIZE_MB}.

+ * + * @throws IllegalArgumentException if ramBufferSize is + * enabled but non-positive, or it disables ramBufferSize + * when maxBufferedDocs is already disabled + */ + void setRAMBufferSizeMB(float_t mb); + + + /** Expert: the {@link MergeScheduler} calls this method + * to retrieve the next merge requested by the + * MergePolicy */ + MergePolicy::OneMerge* getNextMerge(); + + /** + * Merges the indicated segments, replacing them in the stack with a + * single segment. + */ + void merge(MergePolicy::OneMerge* merge); + + /** + * Deletes the document(s) containing term. + * @param term the term to identify the documents to be deleted + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + void deleteDocuments(Term* term); + + /** + * Deletes the document(s) containing any of the + * terms. All deletes are flushed at the same time. + * @param terms array of terms to identify the documents + * to be deleted + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + void deleteDocuments(const CL_NS(util)::ArrayBase* terms); + + /** + * Updates a document by first deleting the document(s) + * containing term and then adding the new + * document. The delete and then add are atomic as seen + * by a reader on the same index (flush may happen only after + * the add). + * @param term the term to identify the document(s) to be + * deleted + * @param doc the document to be added + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + void updateDocument(Term* term, CL_NS(document)::Document* doc); + + /** + * Updates a document by first deleting the document(s) + * containing term and then adding the new + * document. The delete and then add are atomic as seen + * by a reader on the same index (flush may happen only after + * the add). + * @param term the term to identify the document(s) to be + * deleted + * @param doc the document to be added + * @param analyzer the analyzer to use when analyzing the document + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + void updateDocument(Term* term, CL_NS(document)::Document* doc, CL_NS(analysis)::Analyzer* analyzer); + + /** + * Returns default write lock timeout for newly + * instantiated IndexWriters. + * @see #setDefaultWriteLockTimeout + */ + int64_t getDefaultWriteLockTimeout(); + + /** + * Sets the default (for any instance of IndexWriter) maximum time to wait for a write lock (in + * milliseconds). + */ + void setDefaultWriteLockTimeout(int64_t writeLockTimeout); + + std::string segString(); + + /** + * Closes the index with or without waiting for currently + * running merges to finish. This is only meaningful when + * using a MergeScheduler that runs merges in background + * threads. + * @param waitForMerges if true, this call will block + * until all merges complete; else, it will ask all + * running merges to abort, wait until those merges have + * finished (which should be at most a few seconds), and + * then return. + * + *

If an Exception is hit during close, eg due to disk + * full or some other reason, then both the on-disk index + * and the internal state of the IndexWriter instance will + * be consistent. However, the close will not be complete + * even though part of it (flushing buffered documents) + * may have succeeded, so the write lock will still be + * held.

+ * + *

If you can correct the underlying cause (eg free up + * some disk space) then you can call close() again. + * Failing that, if you want to force the write lock to be + * released (dangerous, because you may then lose buffered + * docs in the IndexWriter instance) then you can do + * something like this:

+ * + *
+   * try {
+   *   writer.close();
+   * } finally {
+   *   if (IndexReader.isLocked(directory)) {
+   *     IndexReader.unlock(directory);
+   *   }
+   * }
+   * 
+ * + * after which, you must be certain not to use the writer + * instance anymore.

+ * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + void close(bool waitForMerges=true); + + /** + * Requests an "optimize" operation on an index, priming the index + * for the fastest available search. Traditionally this has meant + * merging all segments into a single segment as is done in the + * default merge policy, but individaul merge policies may implement + * optimize in different ways. + * + * @see LogMergePolicy#findMergesForOptimize + * + *

It is recommended that this method be called upon completion of indexing. In + * environments with frequent updates, optimize is best done during low volume times, if at all. + * + *

+ *

See http://www.gossamer-threads.com/lists/lucene/java-dev/47895 for more discussion.

+ * + *

Note that this can require substantial temporary free + * space in the Directory (see LUCENE-764 + * for details):

+ * + *
    + *
  • + * + *

    If no readers/searchers are open against the index, + * then free space required is up to 1X the total size of + * the starting index. For example, if the starting + * index is 10 GB, then you must have up to 10 GB of free + * space before calling optimize.

    + * + *
  • + * + *

    If readers/searchers are using the index, then free + * space required is up to 2X the size of the starting + * index. This is because in addition to the 1X used by + * optimize, the original 1X of the starting index is + * still consuming space in the Directory as the readers + * are holding the segments files open. Even on Unix, + * where it will appear as if the files are gone ("ls" + * won't list them), they still consume storage due to + * "delete on last close" semantics.

    + * + *

    Furthermore, if some but not all readers re-open + * while the optimize is underway, this will cause > 2X + * temporary space to be consumed as those new readers + * will then hold open the partially optimized segments at + * that time. It is best not to re-open readers while + * optimize is running.

    + * + *
+ * + *

The actual temporary usage could be much less than + * these figures (it depends on many factors).

+ * + *

In general, once the optimize completes, the total size of the + * index will be less than the size of the starting index. + * It could be quite a bit smaller (if there were many + * pending deletes) or just slightly smaller.

+ * + *

If an Exception is hit during optimize(), for example + * due to disk full, the index will not be corrupt and no + * documents will have been lost. However, it may have + * been partially optimized (some segments were merged but + * not all), and it's possible that one of the segments in + * the index will be in non-compound format even when + * using compound file format. This will occur when the + * Exception is hit during conversion of the segment into + * compound format.

+ * + *

This call will optimize those segments present in + * the index when the call started. If other threads are + * still adding documents and flushing segments, those + * newly created segments will not be optimized unless you + * call optimize again.

+ * + * @param doWait Specifies whether the call should block + * until the optimize completes. This is only meaningful + * with a {@link MergeScheduler} that is able to run merges + * in background threads. + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + void optimize(bool doWait=true); + + /** + * Optimize the index down to <= maxNumSegments. If + * maxNumSegments==1 then this is the same as {@link + * #optimize()}. + * @param maxNumSegments maximum number of segments left + * in the index after optimization finishes + * @param doWait Specifies whether the call should block + * until the optimize completes. This is only meaningful + * with a {@link MergeScheduler} that is able to run merges + * in background threads. + */ + void optimize(int32_t maxNumSegments, bool doWait=true); + + /** + * Flush all in-memory buffered updates (adds and deletes) + * to the Directory. + *

Note: if autoCommit=false, flushed data would still + * not be visible to readers, until {@link #close} is called. + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + void flush(); + + /** + * Adds a document to this index. If the document contains more than + * {@link #setMaxFieldLength(int)} terms for a given field, the remainder are + * discarded (depending on the policy, see #FIELD_TRUNC_POLICY__WARN) + * + *

Note that if an Exception is hit (for example disk full) + * then the index will be consistent, but this document + * may not have been added. Furthermore, it's possible + * the index will have one segment in non-compound format + * even when using compound files (when a merge has + * partially succeeded).

+ * + *

This method periodically flushes pending documents + * to the Directory (every {@link #setMaxBufferedDocs}), + * and also periodically merges segments in the index + * (every {@link #setMergeFactor} flushes). When this + * occurs, the method will take more time to run (possibly + * a long time if the index is large), and will require + * free temporary space in the Directory to do the + * merging.

+ * + *

The amount of free space required when a merge is triggered is + * up to 1X the size of all segments being merged, when no + * readers/searchers are open against the index, and up to 2X the + * size of all segments being merged when readers/searchers are open + * against the index (see {@link #optimize()} for details). The + * sequence of primitive merge operations performed is governed by + * the merge policy. + * + *

Note that each term in the document can be no longer + * than 16383 characters, otherwise an + * IllegalArgumentException will be thrown.

+ * + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + * @param analyzer use the provided analyzer instead of the + * value of {@link #getAnalyzer()} + */ + void addDocument(CL_NS(document)::Document* doc, CL_NS(analysis)::Analyzer* analyzer=NULL); + + + /** + * Expert: asks the mergePolicy whether any merges are + * necessary now and if so, runs the requested merges and + * then iterate (test again if merges are needed) until no + * more merges are returned by the mergePolicy. + * + * Explicit calls to maybeMerge() are usually not + * necessary. The most common case is when merge policy + * parameters have changed. + */ + void maybeMerge(); + + /** + * Close the IndexWriter without committing + * any of the changes that have occurred since it was + * opened. This removes any temporary files that had been + * created, after which the state of the index will be the + * same as it was when this writer was first opened. This + * can only be called when this IndexWriter was opened + * with autoCommit=false. + * @throws IllegalStateException if this is called when + * the writer was opened with autoCommit=true. + * @throws IOException if there is a low-level IO error + */ + void abort(); + + + /** + * Merges all segments from an array of indexes into this index. + *

+ * This is similar to addIndexes(Directory[]). However, no optimize() + * is called either at the beginning or at the end. Instead, merges + * are carried out as necessary. + * + *

NOTE: the index in each Directory must not be + * changed (opened by a writer) while this method is + * running. This method does not acquire a write lock in + * each input Directory, so it is up to the caller to + * enforce this. + * + *

NOTE: while this is running, any attempts to + * add or delete documents (with another thread) will be + * paused until this method completes. + * + *

+ * This requires this index not be among those to be added, and the + * upper bound* of those segment doc counts not exceed maxMergeDocs. + * + *

See {@link #addIndexes(Directory[])} for + * details on transactional semantics, temporary free + * space required in the Directory, and non-CFS segments + * on an Exception.

+ * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + void addIndexesNoOptimize(CL_NS(util)::ArrayBase& dirs); + + /** Merges the provided indexes into this index. + *

After this completes, the index is optimized.

+ *

The provided IndexReaders are not closed.

+ + *

NOTE: the index in each Directory must not be + * changed (opened by a writer) while this method is + * running. This method does not acquire a write lock in + * each input Directory, so it is up to the caller to + * enforce this. + * + *

NOTE: while this is running, any attempts to + * add or delete documents (with another thread) will be + * paused until this method completes. + * + *

See {@link #addIndexes(Directory[])} for + * details on transactional semantics, temporary free + * space required in the Directory, and non-CFS segments + * on an Exception.

+ * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + //NOT IMPLEMENTED YET: void addIndexes(CL_NS(util)::ArrayBase& readers); + + /** Merges all segments from an array of indexes into this index. + * + *

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 indexes + * with this method. + * + *

NOTE: the index in each Directory must not be + * changed (opened by a writer) while this method is + * running. This method does not acquire a write lock in + * each input Directory, so it is up to the caller to + * enforce this. + * + *

NOTE: while this is running, any attempts to + * add or delete documents (with another thread) will be + * paused until this method completes. + * + *

After this completes, the index is optimized. + * + *

This method is transactional in how Exceptions are + * handled: it does not commit a new segments_N file until + * all indexes are added. This means if an Exception + * occurs (for example disk full), then either no indexes + * will have been added or they all will have been.

+ * + *

If an Exception is hit, it's still possible that all + * indexes were successfully added. This happens when the + * Exception is hit when trying to build a CFS file. In + * this case, one segment in the index will be in non-CFS + * format, even when using compound file format.

+ * + *

Also note that on an Exception, the index may still + * have been partially or fully optimized even though none + * of the input indexes were added.

+ * + *

Note that this requires temporary free space in the + * Directory up to 2X the sum of all input indexes + * (including the starting index). If readers/searchers + * are open against the starting index, then temporary + * free space required will be higher by the size of the + * starting index (see {@link #optimize()} for details). + *

+ * + *

Once this completes, the final size of the index + * will be less than the sum of all input index sizes + * (including the starting index). It could be quite a + * bit smaller (if there were many pending deletes) or + * just slightly smaller.

+ * + *

See LUCENE-702 + * for details.

+ * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + void addIndexes(CL_NS(util)::ArrayBase& dirs); + + /** Expert: Return the total size of all index files currently cached in memory. + * Useful for size management with flushRamDocs() + */ + int64_t ramSizeInBytes(); + + /** Expert: Return the number of documents whose segments are currently cached in memory. + * Useful when calling flush() + */ + int32_t numRamDocs(); + + /** for testing only */ + virtual bool testPoint(const char* name); +private: + class LockWith2; + class LockWithCFS; + friend class LockWith2; + friend class LockWithCFS; + friend class DocumentsWriter; + + /** 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); + + void deleteFiles(std::vector& files); + void readDeleteableFiles(std::vector& files); + void writeDeleteableFiles(std::vector& files); + + /* + * 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* segments); + void deleteFiles(std::vector& files, CL_NS(store)::Directory* directory); + void deleteFiles(std::vector& files, std::vector& deletable); + + /** + * Casts current mergePolicy to LogMergePolicy, and throws + * an exception if the mergePolicy is not a LogMergePolicy. + */ + LogMergePolicy* getLogMergePolicy() const; + + void setMessageID(); + + void closeInternal(bool waitForMerges); + void messageState(); + + /** + * If we are flushing by doc count (not by RAM usage), and + * using LogDocMergePolicy then push maxBufferedDocs down + * as its minMergeDocs, to keep backwards compatibility. + */ + void pushMaxBufferedDocs(); + + void finishMerges(bool waitForMerges); + + /** Tells the docWriter to close its currently open shared + * doc stores (stored fields & vectors files). + * Return value specifices whether new doc store files are compound or not. + */ + bool flushDocStores(); + + //for test purposes +protected: + int32_t getDocCount(int32_t i); + int32_t getNumBufferedDocuments(); + int32_t getSegmentCount(); + int32_t getBufferedDeleteTermsSize(); + int32_t getNumBufferedDeleteTerms(); + virtual SegmentInfo* newestSegment(); + +private: + void waitForClose(); + void deletePartialSegmentsFile(); + + /** Returns true if any merges in pendingMerges or + * runningMerges are optimization merges. */ + bool optimizeMergesPending(); + + void resetMergeExceptions(); + + void updatePendingMerges(int32_t maxNumSegmentsOptimize, bool optimize); + + /* + * Begin a transaction. During a transaction, any segment + * merges that happen (or ram segments flushed) will not + * write a new segments file and will not remove any files + * that were present at the start of the transaction. You + * must make a matched (try/finally) call to + * commitTransaction() or rollbackTransaction() to finish + * the transaction. + * + * Note that buffered documents and delete terms are not handled + * within the transactions, so they must be flushed before the + * transaction is started. + */ + void startTransaction(); + + /* + * Rolls back the transaction and restores state to where + * we were at the start. + */ + void rollbackTransaction(); + + /* + * Commits the transaction. This will write the new + * segments file and remove and pending deletions we have + * accumulated during the transaction + */ + void commitTransaction(); + + + void maybeMerge(bool optimize); + void maybeMerge(int32_t maxNumSegmentsOptimize, bool optimize); + /** Does initial setup for a merge, which is fast but holds + * the synchronized lock on IndexWriter instance. */ + void mergeInit(MergePolicy::OneMerge* _merge); + void _mergeInit(MergePolicy::OneMerge* _merge); + + /* If any of our segments are using a directory != ours + * then copy them over. Currently this is only used by + * addIndexesNoOptimize(). */ + void copyExternalSegments(); + + + /* + * Called whenever the SegmentInfos has been updated and + * the index files referenced exist (correctly) in the + * index directory-> If we are in autoCommit mode, we + * commit the change immediately. Else, we mark + * commitPending. + */ + void checkpoint(); + + bool doFlush(bool flushDocStores); + + /* FIXME if we want to support non-contiguous segment merges */ + bool commitMerge(MergePolicy::OneMerge* merge); + + int32_t ensureContiguousMerge(MergePolicy::OneMerge* merge); + + void decrefMergeSegments(MergePolicy::OneMerge* _merge); + + /** Does fininishing for a merge, which is fast but holds + * the synchronized lock on IndexWriter instance. */ + void mergeFinish(MergePolicy::OneMerge* _merge); + + /** Does the actual (time-consuming) work of the merge, + * but without holding synchronized lock on IndexWriter + * instance */ + int32_t mergeMiddle(MergePolicy::OneMerge* _merge); + + void addMergeException(MergePolicy::OneMerge* _merge); + + /** Checks whether this merge involves any segments + * already participating in a merge. If not, this merge + * is "registered", meaning we record that its segments + * are now participating in a merge, and true is + * returned. Else (the merge conflicts) false is + * returned. */ + bool registerMerge(MergePolicy::OneMerge* _merge); + + // Called during flush to apply any buffered deletes. If + // flushedNewSegment is true then a new segment was just + // created and flushed from the ram segments, so we will + // selectively apply the deletes to that new segment. + void applyDeletes(bool flushedNewSegment); + + class Internal; + Internal* _internal; +protected: + // This is called after pending added and deleted + // documents have been flushed to the Directory but before + // the change is committed (_CLNEW segments_N file written). + virtual void doAfterFlush(); + + /** + * Used internally to throw an {@link + * AlreadyClosedException} if this IndexWriter has been + * closed. + * @throws AlreadyClosedException if this IndexWriter is + */ + void ensureOpen(); + + /** + * Flush all in-memory buffered udpates (adds and deletes) + * to the Directory. + * @param triggerMerge if true, we may merge segments (if + * deletes or docs were flushed) if necessary + * @param flushDocStores if false we are allowed to keep + * doc stores open to share with the next segment + */ + void flush(bool triggerMerge, bool flushDocStores); +}; + +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/MergePolicy.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/MergePolicy.cpp new file mode 100644 index 0000000..a0b1507 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/MergePolicy.cpp @@ -0,0 +1,514 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "MergePolicy.h" +#include "_SegmentInfos.h" +#include "IndexWriter.h" +#include "CLucene/store/Directory.h" +#include + +CL_NS_USE(util) +CL_NS_USE(store) +CL_NS_DEF(index) + +#define MESSAGE(msg) if ( writer != NULL && writer->getInfoStream() != NULL ) message(msg) + +const int32_t LogMergePolicy::DEFAULT_MAX_MERGE_DOCS = LUCENE_INT32_MAX_SHOULDBE; + +MergePolicy::OneMerge::OneMerge(SegmentInfos* segments, bool _useCompoundFile): + useCompoundFile(_useCompoundFile) +{ + if (0 == segments->size()) + _CLTHROWA(CL_ERR_Runtime,"segments must include at least one segment"); + this->segments = segments; + this->info = NULL; + this->segmentsClone = NULL; + this->mergeGen = 0; + this->maxNumSegmentsOptimize = 0; + aborted = mergeDocStores = optimize = increfDone = registerDone = isExternal = false; +} +MergePolicy::OneMerge::~OneMerge(){ + _CLDELETE(this->segmentsClone); + + while ( this->segments->size() > 0 ){ + this->segments->remove(0,true);//don't delete... + } + _CLDELETE(this->segments);//and finally delete the segments object itself +} + +const char* MergePolicy::OneMerge::getClassName(){ + return "MergePolicy::OneMerge"; +} +const char* MergePolicy::OneMerge::getObjectName() const{ + return getClassName(); +} +void MergePolicy::OneMerge::setException(CLuceneError& error) { + SCOPED_LOCK_MUTEX(THIS_LOCK) + this->error.set(error.number(),error.what()); +} + +const CLuceneError& MergePolicy::OneMerge::getException(){ + SCOPED_LOCK_MUTEX(THIS_LOCK) + return error; +} + +void MergePolicy::OneMerge::abort() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + aborted = true; +} + +bool MergePolicy::OneMerge::isAborted() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + return aborted; +} + +void MergePolicy::OneMerge::checkAborted(CL_NS(store)::Directory* dir){ + SCOPED_LOCK_MUTEX(THIS_LOCK) + if (aborted) + _CLTHROWA(CL_ERR_MergeAborted, (string("merge is aborted: ") + segString(dir)).c_str() ); +} + +std::string MergePolicy::OneMerge::segString(CL_NS(store)::Directory* dir) const{ + std::string b; + const int32_t numSegments = segments->size(); + for(int32_t i=0;i 0) b.append(" "); + b.append(segments->info(i)->segString(dir)); + } + if (info != NULL) + b.append(" into ").append(info->name); + if (optimize) + b.append(" [optimize]"); + return b; +} + + +MergePolicy::MergeSpecification::MergeSpecification(){ + merges = _CLNEW CLArrayList; +} +MergePolicy::MergeSpecification::~MergeSpecification(){ + _CLDELETE(merges); +} +void MergePolicy::MergeSpecification::add(OneMerge* merge) { + merges->push_back(merge); +} + +std::string MergePolicy::MergeSpecification::segString(CL_NS(store)::Directory* dir) { + std::string b = "MergeSpec:\n"; + int32_t count = merges->size(); + for(int32_t i=0;isegString(dir)); + } + return b; +} + + + +const float_t LogMergePolicy::LEVEL_LOG_SPAN = 0.75; + +void LogMergePolicy::message(const string& message) { + if (writer != NULL){ + string msg = "LMP: " + message; + writer->message( msg ); + } +} +int32_t LogMergePolicy::getMergeFactor(){ + return mergeFactor; +} +bool LogMergePolicy::isOptimized(SegmentInfos* infos, IndexWriter* writer, int32_t maxNumSegments, std::vector& segmentsToOptimize){ + const int32_t numSegments = infos->size(); + int32_t numToOptimize = 0; + SegmentInfo* optimizeInfo = NULL; + for(int32_t i=0;iinfo(i); + vector::iterator itr = segmentsToOptimize.begin(); + while ( itr != segmentsToOptimize.end() ){ + if ( *itr == info ) { + numToOptimize++; + optimizeInfo = info; + } + itr++; + } + } + + return numToOptimize <= maxNumSegments && + (numToOptimize != 1 || isOptimized(writer, optimizeInfo)); +} + +bool LogMergePolicy::isOptimized(IndexWriter* writer, SegmentInfo* info){ + return !info->hasDeletions() && + !info->hasSeparateNorms() && + info->dir == writer->getDirectory() && + info->getUseCompoundFile() == _useCompoundFile; +} + +LogMergePolicy::LogMergePolicy(){ + this->maxMergeDocs = DEFAULT_MAX_MERGE_DOCS; + this->mergeFactor = DEFAULT_MERGE_FACTOR; + this->_useCompoundFile = true; + this->_useCompoundDocStore = true; + this->writer = NULL; + this->minMergeSize = this->maxMergeSize = 0; +} + +void LogMergePolicy::setMergeFactor(int32_t mergeFactor) { + if (mergeFactor < 2) + _CLTHROWA(CL_ERR_IllegalArgument, "mergeFactor cannot be less than 2"); + this->mergeFactor = mergeFactor; +} + +bool LogMergePolicy::useCompoundFile(SegmentInfos* /*infos*/, SegmentInfo* /*info*/) { + return _useCompoundFile; +} + +void LogMergePolicy::setUseCompoundFile(bool useCompoundFile) { + this->_useCompoundFile = useCompoundFile; +} + +bool LogMergePolicy::getUseCompoundFile() { + return _useCompoundFile; +} + +bool LogMergePolicy::useCompoundDocStore(SegmentInfos* /*infos*/) { + return _useCompoundDocStore; +} + +void LogMergePolicy::setUseCompoundDocStore(bool useCompoundDocStore) { + this->_useCompoundDocStore = useCompoundDocStore; +} + +bool LogMergePolicy::getUseCompoundDocStore() { + return _useCompoundDocStore; +} + +void LogMergePolicy::close() {} + + +MergePolicy::MergeSpecification* LogMergePolicy::findMergesForOptimize(SegmentInfos* infos, IndexWriter* writer, int32_t maxNumSegments, vector& segmentsToOptimize) { + MergeSpecification* spec = NULL; + + assert (maxNumSegments > 0); + + if (!isOptimized(infos, writer, maxNumSegments, segmentsToOptimize)) { + + // Find the newest (rightmost) segment that needs to + // be optimized (other segments may have been flushed + // since optimize started): + int32_t last = infos->size(); + while(last > 0) { + const SegmentInfo* info = infos->info(--last); + + vector::iterator itr = segmentsToOptimize.begin(); + bool containsInfo = false; + while (itr != segmentsToOptimize.end() ){ + if ( *itr == info ){ + containsInfo = true; + break; + } + itr++; + } + if (containsInfo) { + last++; + break; + } + } + + if (last > 0) { + spec = _CLNEW MergeSpecification(); + + // First, enroll all "full" merges (size + // mergeFactor) to potentially be run concurrently: + while (last - maxNumSegments + 1 >= mergeFactor) { + SegmentInfos* range = _CLNEW SegmentInfos; + infos->range(last-mergeFactor, last, *range); + spec->add(_CLNEW OneMerge(range, _useCompoundFile)); + last -= mergeFactor; + } + + // Only if there are no full merges pending do we + // add a final partial (< mergeFactor segments) merge: + if (0 == spec->merges->size()) { + if (maxNumSegments == 1) { + + // Since we must optimize down to 1 segment, the + // choice is simple: + if (last > 1 || !isOptimized(writer, infos->info(0))){ + SegmentInfos* range = _CLNEW SegmentInfos; + infos->range(0, last, *range); + spec->add(_CLNEW OneMerge(range, _useCompoundFile)); + } + } else if (last > maxNumSegments) { + + // Take care to pick a partial merge that is + // least cost, but does not make the index too + // lopsided. If we always just picked the + // partial tail then we could produce a highly + // lopsided index over time: + + // We must merge this many segments to leave + // maxNumSegments in the index (from when + // optimize was first kicked off): + const int32_t finalMergeSize = last - maxNumSegments + 1; + + // Consider all possible starting points: + int64_t bestSize = 0; + int32_t bestStart = 0; + + for(int32_t i=0;iinfo(j+i)); + if (i == 0 || (sumSize < 2*size(infos->info(i-1)) && sumSize < bestSize)) { + bestStart = i; + bestSize = sumSize; + } + } + + SegmentInfos* range = _CLNEW SegmentInfos; + infos->range(bestStart, bestStart+finalMergeSize, *range); + spec->add(_CLNEW OneMerge(range, _useCompoundFile)); + } + } + + } else + _CLDELETE(spec); + } else + _CLDELETE(spec); + + return spec; +} + +MergePolicy::MergeSpecification* LogMergePolicy::findMerges(SegmentInfos* infos, IndexWriter* writer){ + + const int32_t numSegments = infos->size(); + this->writer = writer; + MESSAGE( string("findMerges: ") + Misc::toString(numSegments) + " segments"); + + // Compute levels, which is just log (base mergeFactor) + // of the size of each segment + ValueArray levels(numSegments); + const float_t norm = log((float_t)mergeFactor); + + for(int32_t i=0;iinfo(i); + int64_t _size = size(info); + + // Floor tiny segments + if (_size < 1) + _size = 1; + levels[i] = log((float_t)_size)/norm; + } + + float_t levelFloor; + if (minMergeSize <= 0) + levelFloor = 0.0; + else + levelFloor = log((float_t)minMergeSize)/norm; + + // Now, we quantize the log values into levels. The + // first level is any segment whose log size is within + // LEVEL_LOG_SPAN of the max size, or, who has such as + // segment "to the right". Then, we find the max of all + // other segments and use that to define the next level + // segment, etc. + + MergeSpecification* spec = NULL; + + int32_t start = 0; + while(start < numSegments) { + + // Find max level of all segments not already + // quantized. + float_t maxLevel = levels[start]; + for(int32_t i=1+start;i maxLevel) + maxLevel = level; + } + + // Now search backwards for the rightmost segment that + // falls into this level: + float_t levelBottom; + if (maxLevel < levelFloor) + // All remaining segments fall into the min level + levelBottom = -1.0F; + else { + levelBottom = maxLevel - LEVEL_LOG_SPAN; + + // Force a boundary at the level floor + if (levelBottom < levelFloor && maxLevel >= levelFloor) + levelBottom = levelFloor; + } + + int32_t upto = numSegments-1; + while(upto >= start) { + if (levels[upto] >= levelBottom) { + break; + } + upto--; + } + MESSAGE(string(" level ") + Misc::toString(levelBottom) + " to " + Misc::toString(maxLevel) + ": " + Misc::toString(1+upto-start) + " segments"); + + // Finally, record all merges that are viable at this level: + int32_t end = start + mergeFactor; + while(end <= 1+upto) { + bool anyTooLarge = false; + for(int32_t i=start;iinfo(i); + anyTooLarge |= (size(info) >= maxMergeSize || info->docCount >= maxMergeDocs); + } + + if (!anyTooLarge) { + if (spec == NULL) + spec = _CLNEW MergeSpecification(); + MESSAGE( string(" ") + Misc::toString(start) + " to " + Misc::toString(end) + ": add this merge"); + SegmentInfos* range = _CLNEW SegmentInfos; + infos->range(start, end, *range); + spec->add(_CLNEW OneMerge(range, _useCompoundFile)); + } else + MESSAGE( string(" ") + Misc::toString(start) + " to " + Misc::toString(end) + ": contains segment over maxMergeSize or maxMergeDocs; skipping"); + + start = end; + end = start + mergeFactor; + } + + start = 1+upto; + } + + return spec; +} + +void LogMergePolicy::setMaxMergeDocs(int32_t maxMergeDocs) { + this->maxMergeDocs = maxMergeDocs; +} + +int32_t LogMergePolicy::getMaxMergeDocs() { + return maxMergeDocs; +} + +const char* LogMergePolicy::getClassName(){ + return "LogMergePolicy"; +} +const char* LogMergePolicy::getObjectName() const{ + return getClassName(); +} +bool LogMergePolicy::instanceOf(const char* other) const{ + const char* t = this->getObjectName(); + if ( t==other || strcmp( t, other )==0 ){ + return true; + } + t = getClassName(); + if ( t==other || strcmp( t, other )==0 ){ + return true; + } + return false; +} + + + + +LogDocMergePolicy::LogDocMergePolicy() { + minMergeSize = DEFAULT_MIN_MERGE_DOCS; + + // maxMergeSize is never used by LogDocMergePolicy; set + // it to Long.MAX_VALUE to disable it + maxMergeSize = LUCENE_INT64_MAX_SHOULDBE; +} + +void LogDocMergePolicy::setMinMergeDocs(int32_t minMergeDocs) { + minMergeSize = minMergeDocs; +} + +int32_t LogDocMergePolicy::getMinMergeDocs() { + return (int32_t)minMergeSize; +} + +int64_t LogDocMergePolicy::size(SegmentInfo* info) { + return info->docCount; +} + +const char* LogDocMergePolicy::getClassName(){ + return "LogDocMergePolicy"; +} +const char* LogDocMergePolicy::getObjectName() const{ + return getClassName(); +} + + + + +int64_t LogByteSizeMergePolicy::size(SegmentInfo* info) { + return info->sizeInBytes(); +} + +/** Default minimum segment size. @see setMinMergeMB */ +const float_t LogByteSizeMergePolicy::DEFAULT_MIN_MERGE_MB = 1.6; + +/** Default maximum segment size. A segment of this size + * or larger will never be merged. @see setMaxMergeMB */ +const float_t LogByteSizeMergePolicy::DEFAULT_MAX_MERGE_MB = (float_t)LUCENE_INT64_MAX_SHOULDBE; + +LogByteSizeMergePolicy::LogByteSizeMergePolicy() { + minMergeSize = (int64_t) (DEFAULT_MIN_MERGE_MB*1024*1024); + maxMergeSize = (uint64_t) (DEFAULT_MAX_MERGE_MB); //*1024*1024 +} + +/**

Determines the largest segment (measured by total + * byte size of the segment's files, in MB) that may be + * merged with other segments. Small values (e.g., less + * than 50 MB) 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.

+ * + *

Note that {@link #setMaxMergeDocs} is also + * used to check whether a segment is too large for + * merging (it's either or).

*/ +void LogByteSizeMergePolicy::setMaxMergeMB(float_t mb) { + maxMergeSize = (uint64_t) (mb*1024*1024); +} + +/** Returns the largest segment (meaured by total byte + * size of the segment's files, in MB) that may be merged + * with other segments. + * @see #setMaxMergeMB */ +float_t LogByteSizeMergePolicy::getMaxMergeMB() { + return ((float_t) maxMergeSize)/1024/1024; +} + +/** Sets the minimum size for the lowest level segments. + * Any segments below this size are considered to be on + * the same level (even if they vary drastically in size) + * and will be merged whenever there are mergeFactor of + * them. This effectively truncates the "long tail" of + * small segments that would otherwise be created into a + * single level. If you set this too large, it could + * greatly increase the merging cost during indexing (if + * you flush many small segments). */ +void LogByteSizeMergePolicy::setMinMergeMB(float_t mb) { + minMergeSize = (int64_t) (mb*1024*1024); +} + +/** Get the minimum size for a segment to remain + * un-merged. + * @see #setMinMergeMB **/ +float_t LogByteSizeMergePolicy::getMinMergeMB() { + return ((float_t) minMergeSize)/1024/1024; +} + +const char* LogByteSizeMergePolicy::getClassName(){ + return "LogByteSizeMergePolicy"; +} +const char* LogByteSizeMergePolicy::getObjectName() const{ + return getClassName(); +} + + +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/MergePolicy.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/MergePolicy.h new file mode 100644 index 0000000..79caf40 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/MergePolicy.h @@ -0,0 +1,438 @@ +/*------------------------------------------------------------------------------ +* 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_MergePolicy_ +#define _lucene_index_MergePolicy_ + +#include "CLucene/util/VoidList.h" +CL_CLASS_DEF(store,Directory) +CL_NS_DEF(index) + +class SegmentInfo; +class SegmentInfos; +class IndexWriter; + +/** + *

Expert: a MergePolicy determines the sequence of + * primitive merge operations to be used for overall merge + * and optimize operations.

+ * + *

Whenever the segments in an index have been altered by + * {@link IndexWriter}, either the addition of a newly + * flushed segment, addition of many segments from + * addIndexes* calls, or a previous merge that may now need + * to cascade, {@link IndexWriter} invokes {@link + * #findMerges} to give the MergePolicy a chance to pick + * merges that are now required. This method returns a + * {@link MergeSpecification} instance describing the set of + * merges that should be done, or null if no merges are + * necessary. When IndexWriter.optimize is called, it calls + * {@link #findMergesForOptimize} and the MergePolicy should + * then return the necessary merges.

+ * + *

Note that the policy can return more than one merge at + * a time. In this case, if the writer is using {@link + * SerialMergeScheduler}, the merges will be run + * sequentially but if it is using {@link + * ConcurrentMergeScheduler} they will be run concurrently.

+ * + *

The default MergePolicy is {@link + * LogByteSizeMergePolicy}.

+ *

NOTE: This API is new and still experimental + * (subject to change suddenly in the next release)

+ */ +class CLUCENE_EXPORT MergePolicy: public CL_NS(util)::NamedObject { +public: + /** OneMerge provides the information necessary to perform + * an individual primitive merge operation, resulting in + * a single new segment. The merge spec includes the + * subset of segments to be merged as well as whether the + * new segment should use the compound file format. */ + class CLUCENE_EXPORT OneMerge: public CL_NS(util)::NamedObject { + public: + DEFINE_MUTEX(THIS_LOCK) + SegmentInfo* info; // used by IndexWriter + bool mergeDocStores; // used by IndexWriter + bool optimize; // used by IndexWriter + SegmentInfos* segmentsClone; // used by IndexWriter + bool increfDone; // used by IndexWriter + bool registerDone; // used by IndexWriter + int64_t mergeGen; // used by IndexWriter + bool isExternal; // used by IndexWriter + int32_t maxNumSegmentsOptimize; // used by IndexWriter + + SegmentInfos* segments; + const bool useCompoundFile; + bool aborted; + CLuceneError error; + + /** + * Constructor + * @memory, segments object is consumed. The SegmentInfo objects within are referenced + */ + OneMerge(SegmentInfos* segments, bool _useCompoundFile); + ~OneMerge(); + + /** Record that an exception occurred while executing + * this merge */ + void setException(CLuceneError& error); + + /** Retrieve previous exception set by {@link + * #setException}. */ + const CLuceneError& getException(); + + /** Mark this merge as aborted. If this is called + * before the merge is committed then the merge will + * not be committed. */ + void abort(); + + /** Returns true if this merge was aborted. */ + bool isAborted(); + + void checkAborted(CL_NS(store)::Directory* dir); + + std::string segString(CL_NS(store)::Directory* dir) const; + + static const char* getClassName(); + virtual const char* getObjectName() const; + }; + + /** + * A MergeSpecification instance provides the information + * necessary to perform multiple merges. It simply + * contains a list of {@link OneMerge} instances. + */ + + class CLUCENE_EXPORT MergeSpecification { + public: + MergeSpecification(); + ~MergeSpecification(); + + /** + * The subset of segments to be included in the primitive merge. + */ + CL_NS(util)::CLArrayList* merges; + + void add(OneMerge* merge); + + std::string segString(CL_NS(store)::Directory* dir); + }; + + + /** + * Determine what set of merge operations are now + * necessary on the index. The IndexWriter calls this + * whenever there is a change to the segments. This call + * is always synchronized on the IndexWriter instance so + * only one thread at a time will call this method. + * + * @param segmentInfos the total set of segments in the index + * @param writer IndexWriter instance + */ + virtual MergeSpecification* findMerges(SegmentInfos* segmentInfos, + IndexWriter* writer) = 0; + + /** + * Determine what set of merge operations are necessary in + * order to optimize the index. The IndexWriter calls + * this when its optimize() method is called. This call + * is always synchronized on the IndexWriter instance so + * only one thread at a time will call this method. + * + * @param segmentInfos the total set of segments in the index + * @param writer IndexWriter instance + * @param maxSegmentCount requested maximum number of + * segments in the index (currently this is always 1) + * @param segmentsToOptimize contains the specific + * SegmentInfo instances that must be merged away. This + * may be a subset of all SegmentInfos. + */ + virtual MergeSpecification* findMergesForOptimize(SegmentInfos* segmentInfos, + IndexWriter* writer, + int32_t maxSegmentCount, + std::vector& segmentsToOptimize) = 0; + + /** + * Release all resources for the policy. + */ + virtual void close() = 0; + + /** + * Returns true if a newly flushed (not from merge) + * segment should use the compound file format. + */ + virtual bool useCompoundFile(SegmentInfos* segments, SegmentInfo* newSegment) = 0; + + /** + * Returns true if the doc store files should use the + * compound file format. + */ + virtual bool useCompoundDocStore(SegmentInfos* segments) = 0; +}; + + + + + + + + + + + + + +/**

This class implements a {@link MergePolicy} that tries + * to merge segments into levels of exponentially + * increasing size, where each level has < mergeFactor + * segments in it. Whenever a given levle has mergeFactor + * segments or more in it, they will be merged.

+ * + *

This class is abstract and requires a subclass to + * define the {@link #size} method which specifies how a + * segment's size is determined. {@link LogDocMergePolicy} + * is one subclass that measures size by document count in + * the segment. {@link LogByteSizeMergePolicy} is another + * subclass that measures size as the total byte size of the + * file(s) for the segment.

+ */ +class CLUCENE_EXPORT LogMergePolicy: public MergePolicy { + + int32_t mergeFactor; + + int32_t maxMergeDocs; + + bool _useCompoundFile; + bool _useCompoundDocStore; + IndexWriter* writer; + + void message(const std::string& message); + + bool isOptimized(SegmentInfos* infos, IndexWriter* writer, int32_t maxNumSegments, std::vector& segmentsToOptimize); + + /** Returns true if this single nfo is optimized (has no + * pending norms or deletes, is in the same dir as the + * writer, and matches the current compound file setting */ + bool isOptimized(IndexWriter* writer, SegmentInfo* info); + + +protected: + virtual int64_t size(SegmentInfo* info) = 0; + int64_t minMergeSize; + uint64_t maxMergeSize; + +public: + LogMergePolicy(); + + /** Defines the allowed range of log(size) for each + * level. A level is computed by taking the max segment + * log size, minuse LEVEL_LOG_SPAN, and finding all + * segments falling within that range. */ + static const float_t LEVEL_LOG_SPAN; + + /** Default merge factor, which is how many segments are + * merged at a time */ + LUCENE_STATIC_CONSTANT(int32_t, DEFAULT_MERGE_FACTOR = 10); + + /** Default maximum segment size. A segment of this size + * or larger will never be merged. @see setMaxMergeDocs */ + static const int32_t DEFAULT_MAX_MERGE_DOCS; + + /**

Returns the number of segments that are merged at + * once and also controls the total number of segments + * allowed to accumulate in the index.

*/ + int32_t getMergeFactor(); + + /** 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 (> 10) are best for batch + * index creation, and smaller values (< 10) for indices + * that are interactively maintained. */ + void setMergeFactor(int32_t mergeFactor); + + // Javadoc inherited + bool useCompoundFile(SegmentInfos* infos, SegmentInfo* info); + + /** Sets whether compound file format should be used for + * newly flushed and newly merged segments. */ + void setUseCompoundFile(bool useCompoundFile); + + /** Returns true if newly flushed and newly merge segments + * are written in compound file format. @see + * #setUseCompoundFile */ + bool getUseCompoundFile(); + + // Javadoc inherited + bool useCompoundDocStore(SegmentInfos* infos); + + /** Sets whether compound file format should be used for + * newly flushed and newly merged doc store + * segment files (term vectors and stored fields). */ + void setUseCompoundDocStore(bool useCompoundDocStore); + + /** Returns true if newly flushed and newly merge doc + * store segment files (term vectors and stored fields) + * are written in compound file format. @see + * #setUseCompoundDocStore */ + bool getUseCompoundDocStore(); + + void close(); + + + /** Returns the merges necessary to optimize the index. + * This merge policy defines "optimized" to mean only one + * segment in the index, where that segment has no + * deletions pending nor separate norms, and it is in + * compound file format if the current useCompoundFile + * setting is true. This method returns multiple merges + * (mergeFactor at a time) so the {@link MergeScheduler} + * in use may make use of concurrency. */ + MergeSpecification* findMergesForOptimize(SegmentInfos* segmentInfos, + IndexWriter* writer, + int32_t maxSegmentCount, + std::vector& segmentsToOptimize); + + /** Checks if any merges are now necessary and returns a + * {@link MergePolicy.MergeSpecification} if so. A merge + * is necessary when there are more than {@link + * #setMergeFactor} segments at a given level. When + * multiple levels have too many segments, this method + * will return multiple merges, allowing the {@link + * MergeScheduler} to use concurrency. */ + MergeSpecification* findMerges(SegmentInfos* infos, IndexWriter* writer); + + /**

Determines the largest segment (measured by + * document count) that may be merged with other segments. + * 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.

+ * + *

The default value is {@link Integer#MAX_VALUE}.

+ * + *

The default merge policy ({@link + * LogByteSizeMergePolicy}) also allows you to set this + * limit by net size (in MB) of the segment, using {@link + * LogByteSizeMergePolicy#setMaxMergeMB}.

+ */ + void setMaxMergeDocs(int32_t maxMergeDocs); + + /** Returns the largest segment (measured by document + * count) that may be merged with other segments. + * @see #setMaxMergeDocs */ + int32_t getMaxMergeDocs(); + + + virtual bool instanceOf(const char* otherobject) const; + static const char* getClassName(); + virtual const char* getObjectName() const; +}; + + + + + + +/** This is a {@link LogMergePolicy} that measures size of a + * segment as the number of documents (not taking deletions + * into account). */ +class CLUCENE_EXPORT LogDocMergePolicy: public LogMergePolicy { +public: + + /** Default minimum segment size. @see setMinMergeDocs */ + LUCENE_STATIC_CONSTANT(int32_t, DEFAULT_MIN_MERGE_DOCS = 1000); + + LogDocMergePolicy(); + + /** Sets the minimum size for the lowest level segments. + * Any segments below this size are considered to be on + * the same level (even if they vary drastically in size) + * and will be merged whenever there are mergeFactor of + * them. This effectively truncates the "int64_t tail" of + * small segments that would otherwise be created into a + * single level. If you set this too large, it could + * greatly increase the merging cost during indexing (if + * you flush many small segments). */ + void setMinMergeDocs(int32_t minMergeDocs); + + /** Get the minimum size for a segment to remain + * un-merged. + * @see #setMinMergeDocs **/ + int32_t getMinMergeDocs(); + + + static const char* getClassName(); + virtual const char* getObjectName() const; +protected: + int64_t size(SegmentInfo* info); +}; + + +/** This is a {@link LogMergePolicy} that measures size of a + * segment as the total byte size of the segment's files. */ +class CLUCENE_EXPORT LogByteSizeMergePolicy: public LogMergePolicy { +protected: + int64_t size(SegmentInfo* info); + +public: + /** Default minimum segment size. @see setMinMergeMB */ + static const float_t DEFAULT_MIN_MERGE_MB; + + /** Default maximum segment size. A segment of this size + * or larger will never be merged. @see setMaxMergeMB */ + static const float_t DEFAULT_MAX_MERGE_MB; + + LogByteSizeMergePolicy(); + + /**

Determines the largest segment (measured by total + * byte size of the segment's files, in MB) that may be + * merged with other segments. Small values (e.g., less + * than 50 MB) 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.

+ * + *

Note that {@link #setMaxMergeDocs} is also + * used to check whether a segment is too large for + * merging (it's either or).

*/ + void setMaxMergeMB(float_t mb); + + /** Returns the largest segment (meaured by total byte + * size of the segment's files, in MB) that may be merged + * with other segments. + * @see #setMaxMergeMB */ + float_t getMaxMergeMB(); + + /** Sets the minimum size for the lowest level segments. + * Any segments below this size are considered to be on + * the same level (even if they vary drastically in size) + * and will be merged whenever there are mergeFactor of + * them. This effectively truncates the "long tail" of + * small segments that would otherwise be created into a + * single level. If you set this too large, it could + * greatly increase the merging cost during indexing (if + * you flush many small segments). */ + void setMinMergeMB(float_t mb); + + /** Get the minimum size for a segment to remain + * un-merged. + * @see #setMinMergeMB **/ + float_t getMinMergeMB(); + + static const char* getClassName(); + virtual const char* getObjectName() const; +}; + + + +CL_NS_END +#endif + diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/MergeScheduler.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/MergeScheduler.cpp new file mode 100644 index 0000000..9de63b3 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/MergeScheduler.cpp @@ -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. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "MergeScheduler.h" +#include "IndexWriter.h" + + +CL_NS_DEF(index) + + +const char* SerialMergeScheduler::getObjectName() const{ + return getClassName(); +} +const char* SerialMergeScheduler::getClassName(){ + return "SerialMergeScheduler"; +} + +void SerialMergeScheduler::merge(IndexWriter* writer){ + SCOPED_LOCK_MUTEX(THIS_LOCK) + while(true) { + MergePolicy::OneMerge* merge = writer->getNextMerge(); + if (merge == NULL) + break; + writer->merge(merge); + } +} + +void SerialMergeScheduler::close() {} + +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/MergeScheduler.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/MergeScheduler.h new file mode 100644 index 0000000..97cb8b3 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/MergeScheduler.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_index_MergeScheduler_ +#define _lucene_index_MergeScheduler_ + +#include "CLucene/util/Equators.h" +#include "CLucene/LuceneThreads.h" +CL_NS_DEF(index) + +class IndexWriter; + +/** Expert: {@link IndexWriter} uses an instance + * implementing this interface to execute the merges + * selected by a {@link MergePolicy}. The default + * MergeScheduler is {@link ConcurrentMergeScheduler}. + *

NOTE: This API is new and still experimental + * (subject to change suddenly in the next release)

+*/ +class CLUCENE_EXPORT MergeScheduler: public CL_NS(util)::NamedObject { +public: + /** Run the merges provided by {@link IndexWriter#getNextMerge()}. */ + virtual void merge(IndexWriter* writer) = 0; + + /** Close this MergeScheduler. */ + virtual void close() = 0; +}; + +/** A {@link MergeScheduler} that simply does each merge + * sequentially, using the current thread. */ +class CLUCENE_EXPORT SerialMergeScheduler: public MergeScheduler { +public: + DEFINE_MUTEX(THIS_LOCK) + + /** Just do the merges in sequence. We do this + * "synchronized" so that even if the application is using + * multiple threads, only one merge may run at a time. */ + void merge(IndexWriter* writer); + void close(); + + const char* getObjectName() const; + static const char* getClassName(); +}; + + +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/MultiReader.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/MultiReader.cpp new file mode 100644 index 0000000..0a94c5f --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/MultiReader.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/_ApiHeader.h" +#include "MultiReader.h" +#include "_MultiSegmentReader.h" + +#include "IndexReader.h" +#include "CLucene/document/Document.h" +#include "Term.h" +#include "Terms.h" +#include "CLucene/util/PriorityQueue.h" +#include "_SegmentHeader.h" +#include "_SegmentMergeInfo.h" +#include "_SegmentMergeQueue.h" + +CL_NS_USE(store) +CL_NS_USE(document) +CL_NS_USE(util) +CL_NS_DEF(index) + + + +class MultiReader::Internal: LUCENE_BASE{ +public: + MultiSegmentReader::NormsCacheType normsCache; + + bool* closeOnClose; //remember which subreaders to close on close + bool _hasDeletions; + uint8_t* ones; + int32_t _maxDoc; + int32_t _numDocs; + + Internal(): + normsCache(true, true) + { + _maxDoc = 0; + _numDocs = -1; + ones = NULL; + _hasDeletions = false; + closeOnClose = NULL; + } + ~Internal(){ + _CLDELETE_ARRAY(ones); + _CLDELETE_ARRAY(closeOnClose); + } +}; + +MultiReader::MultiReader(const CL_NS(util)::ArrayBase* subReaders, bool closeSubReaders) +{ + this->_internal = _CLNEW Internal(); + this->init(subReaders, closeSubReaders); +} + +void MultiReader::init(const CL_NS(util)::ArrayBase* _subReaders, bool closeSubReaders){ + this->subReaders = _CLNEW CL_NS(util)::ValueArray(_subReaders->length); + starts = _CL_NEWARRAY(int32_t, subReaders->length + 1); // build starts array + _internal->closeOnClose = _CL_NEWARRAY(bool, subReaders->length); + + for (size_t i = 0; i < subReaders->length; i++) { + this->subReaders->values[i] = _subReaders->values[i]; + starts[i] = _internal->_maxDoc; + + // compute maxDocs + _internal->_maxDoc += (*subReaders)[i]->maxDoc(); + _internal->closeOnClose[i] = closeSubReaders; + if ((*subReaders)[i]->hasDeletions()) + _internal->_hasDeletions = true; + } + starts[subReaders->length] = _internal->_maxDoc; +} + +MultiReader::~MultiReader() { +//Func - Destructor +//Pre - true +//Post - The instance has been destroyed all IndexReader instances +// this instance managed have been destroyed to + + close(); + _CLDELETE(_internal); + _CLDELETE_ARRAY(starts); + _CLDELETE(subReaders); +} + + +IndexReader* MultiReader::reopen() { + ensureOpen(); + + bool reopened = false; + ValueArray newSubReaders(subReaders->length); + ValueArray newCloseOnClose(subReaders->length); + + bool success = false; + IndexReader* ret = NULL; + try { + for (size_t i = 0; i < subReaders->length; i++) { + newSubReaders[i] = (*subReaders)[i]->reopen(); + + // if at least one of the subreaders was updated we remember that + // and return a new MultiReader + if (newSubReaders[i] != (*subReaders)[i]) { + reopened = true; + // this is a new subreader instance, so on close() we don't close it + newCloseOnClose[i] = true; + } + } + + if (reopened) { + MultiReader* mr = _CLNEW MultiReader(&newSubReaders); + + for (size_t i = 0; i < subReaders->length; i++) { + if (newSubReaders[i] == (*subReaders)[i]) { + // 'give' the memory to the new object + mr->_internal->closeOnClose[i] = this->_internal->closeOnClose[i]; + this->subReaders->values[i] = NULL; + } + } + success = true; + ret = mr; + } else { + success = true; + ret = this; + } + } _CLFINALLY ( + if (!success && reopened) { + for (size_t i = 0; i < newSubReaders.length; i++) { + if (newSubReaders[i] != NULL) { + try { + if (newCloseOnClose[i]) { + newSubReaders.values[i]->close(); + _CLDELETE(newSubReaders.values[i]); + } + } catch (CLuceneError& ignore) { + if ( ignore.number() != CL_ERR_IO ) throw ignore; + // keep going - we want to clean up as much as possible + } + } + } + } + ) + return ret; +} + +ArrayBase* MultiReader::getTermFreqVectors(int32_t n){ + ensureOpen(); + int32_t i = readerIndex(n); // find segment num + return (*subReaders)[i]->getTermFreqVectors(n - starts[i]); // dispatch to segment +} + +TermFreqVector* MultiReader::getTermFreqVector(int32_t n, const TCHAR* field){ + ensureOpen(); + int32_t i = readerIndex(n); // find segment num + return (*subReaders)[i]->getTermFreqVector(n - starts[i], field); +} + +void MultiReader::getTermFreqVector(int32_t docNumber, const TCHAR* field, TermVectorMapper* mapper) { + ensureOpen(); + int32_t i = readerIndex(docNumber); // find segment num + (*subReaders)[i]->getTermFreqVector(docNumber - starts[i], field, mapper); +} + +void MultiReader::getTermFreqVector(int32_t docNumber, TermVectorMapper* mapper) { + ensureOpen(); + int32_t i = readerIndex(docNumber); // find segment num + (*subReaders)[i]->getTermFreqVector(docNumber - starts[i], mapper); +} + +bool MultiReader::isOptimized() { + return false; +} + + +int32_t MultiReader::numDocs() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + // Don't call ensureOpen() here (it could affect performance) + if (_internal->_numDocs == -1) { // check cache + int32_t n = 0; // cache miss--recompute + for (size_t i = 0; i < subReaders->length; i++){ + n += (*subReaders)[i]->numDocs(); // sum from readers + } + _internal->_numDocs = n; + } + return _internal->_numDocs; +} + +int32_t MultiReader::maxDoc() const { + // Don't call ensureOpen() here (it could affect performance) + return _internal->_maxDoc; +} + +bool MultiReader::document(int32_t n, CL_NS(document)::Document& doc, const FieldSelector* fieldSelector){ + ensureOpen(); + int32_t i = readerIndex(n); // find segment num + return (*subReaders)[i]->document(n - starts[i],doc, fieldSelector); // dispatch to segment reader +} + +bool MultiReader::isDeleted(const int32_t n) { + // Don't call ensureOpen() here (it could affect performance) + int32_t i = readerIndex(n); // find segment num + return (*subReaders)[i]->isDeleted(n - starts[i]); // dispatch to segment reader +} + +bool MultiReader::hasDeletions() const{ + // Don't call ensureOpen() here (it could affect performance) + return _internal->_hasDeletions; +} + +const ArrayBase* MultiReader::getSubReaders() const{ + return subReaders; +} + +uint8_t* MultiReader::norms(const TCHAR* field){ + SCOPED_LOCK_MUTEX(THIS_LOCK) + ensureOpen(); + uint8_t* bytes; + bytes = _internal->normsCache.get((TCHAR*)field); + if (bytes != NULL){ + return bytes; // cache hit + } + + if ( !hasNorms(field) ) + return fakeNorms(); + + bytes = _CL_NEWARRAY(uint8_t,maxDoc()); + for (size_t i = 0; i < subReaders->length; 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 + _internal->normsCache.put(key, bytes); + + return bytes; +} + +void MultiReader::norms(const TCHAR* field, uint8_t* result) { + SCOPED_LOCK_MUTEX(THIS_LOCK) + uint8_t* bytes = norms(field); + if (bytes != NULL){ // return + memcpy(result,bytes, maxDoc() * sizeof(int32_t)); + } +} + + +void MultiReader::doSetNorm(int32_t n, const TCHAR* field, uint8_t value){ + _internal->normsCache.removeitr( _internal->normsCache.find((TCHAR*)field) ); // clear cache + int32_t i = readerIndex(n); // find segment num + (*subReaders)[i]->setNorm(n-starts[i], field, value); // dispatch +} + +TermEnum* MultiReader::terms() { + ensureOpen(); + return _CLNEW MultiTermEnum(subReaders, starts, NULL); +} + +TermEnum* MultiReader::terms(const Term* term) { + ensureOpen(); + return _CLNEW MultiTermEnum(subReaders, starts, term); +} + +int32_t MultiReader::docFreq(const Term* t) { + ensureOpen(); + int32_t total = 0; // sum freqs in Multi + for (size_t i = 0; i < subReaders->length; i++) + total += (*subReaders)[i]->docFreq(t); + return total; +} + +TermDocs* MultiReader::termDocs() { + ensureOpen(); + TermDocs* ret = _CLNEW MultiTermDocs(subReaders, starts); + return ret; +} + +TermPositions* MultiReader::termPositions() { + ensureOpen(); + TermPositions* ret = (TermPositions*)_CLNEW MultiTermPositions(subReaders, starts); + return ret; +} + +void MultiReader::doDelete(const int32_t n) { + _internal->_numDocs = -1; // invalidate cache + int32_t i = readerIndex(n); // find segment num + (*subReaders)[i]->deleteDocument(n - starts[i]); // dispatch to segment reader + _internal->_hasDeletions = true; +} + +int32_t MultiReader::readerIndex(const int32_t n) const { // find reader for doc n: + return MultiSegmentReader::readerIndex(n, this->starts, this->subReaders->length); +} + +bool MultiReader::hasNorms(const TCHAR* field) { + ensureOpen(); + for (size_t i = 0; i < subReaders->length; i++) { + if ((*subReaders)[i]->hasNorms(field)) + return true; + } + return false; +} +uint8_t* MultiReader::fakeNorms() { + if (_internal->ones==NULL) + _internal->ones=SegmentReader::createFakeNorms(maxDoc()); + return _internal->ones; +} + +void MultiReader::doUndeleteAll(){ + for (size_t i = 0; i < subReaders->length; i++) + (*subReaders)[i]->undeleteAll(); + _internal->_hasDeletions = false; + _internal->_numDocs = -1; +} +void MultiReader::doCommit() { + for (size_t i = 0; i < subReaders->length; i++) + (*subReaders)[i]->commit(); +} + +void MultiReader::doClose() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + for (size_t i = 0; i < subReaders->length; i++){ + if ( (*subReaders)[i] == NULL ) continue; //reopen may take some memory... + if (_internal->closeOnClose[i]) { + subReaders->values[i]->close(); + _CLDELETE(subReaders->values[i]); + } + } +} + + +void MultiReader::getFieldNames(FieldOption fieldNames, StringArrayWithDeletor& retarray){ + ensureOpen(); + return MultiSegmentReader::getFieldNames(fieldNames, retarray, this->subReaders); +} + +bool MultiReader::isCurrent(){ + for (size_t i = 0; i < subReaders->length; i++) { + if (!(*subReaders)[i]->isCurrent()) { + return false; + } + } + + // all subreaders are up to date + return true; +} + +/** Not implemented. + * @throws UnsupportedOperationException + */ +int64_t MultiReader::getVersion() { + _CLTHROWA(CL_ERR_UnsupportedOperation, "MultiReader does not support this method."); +} + +const char* MultiReader::getClassName(){ + return "MultiReader"; +} +const char* MultiReader::getObjectName() const{ + return getClassName(); +} +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/MultiReader.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/MultiReader.h new file mode 100644 index 0000000..64d1cca --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/MultiReader.h @@ -0,0 +1,129 @@ +/*------------------------------------------------------------------------------ +* 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 + + +//#include "SegmentHeader.h" +#include "IndexReader.h" +CL_CLASS_DEF(document,Document) +//#include "Terms.h" +//#include "SegmentMergeQueue.h" + +CL_NS_DEF(index) + +/** An IndexReader which reads multiple indexes, appending their content. +*/ +class CLUCENE_EXPORT MultiReader:public IndexReader{ +private: + class Internal; + Internal* _internal; + int32_t readerIndex(const int32_t n) const; + bool hasNorms(const TCHAR* field); + uint8_t* fakeNorms(); + + void init(const CL_NS(util)::ArrayBase* subReaders, bool closeSubReaders); +protected: + CL_NS(util)::ArrayBase* subReaders; + int32_t* starts; // 1st docno for each segment + + void doSetNorm(int32_t n, const TCHAR* field, uint8_t value); + void doUndeleteAll(); + void doCommit(); + void doClose(); + void doDelete(const int32_t n); +public: + /** + *

Construct a MultiReader aggregating the named set of (sub)readers. + * Directory locking for delete, undeleteAll, and setNorm operations is + * left to the subreaders.

+ * @param subReaders set of (sub)readers + * @param closeSubReaders The subReaders (IndexReader instances) are deleted if true + * @throws IOException + * @memory The subReaders array itself belongs to the caller + */ + MultiReader(const CL_NS(util)::ArrayBase* subReaders, bool closeSubReaders=true); + + ~MultiReader(); + + + /** + * Tries to reopen the subreaders. + *
+ * If one or more subreaders could be re-opened (i. e. subReader.reopen() + * returned a new instance != subReader), then a new MultiReader instance + * is returned, otherwise this instance is returned. + *

+ * A re-opened instance might share one or more subreaders with the old + * instance. Index modification operations result in undefined behavior + * when performed before the old instance is closed. + * (see {@link IndexReader#reopen()}). + *

+ * If subreaders are shared, then the reference count of those + * readers is increased to ensure that the subreaders remain open + * until the last referring reader is closed. + * + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + IndexReader* reopen(); + + TermFreqVector* getTermFreqVector(int32_t n, const TCHAR* field=NULL); + + void getTermFreqVector(int32_t docNumber, const TCHAR* field, TermVectorMapper* mapper); + void getTermFreqVector(int32_t docNumber, TermVectorMapper* mapper); + + /** 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. + */ + CL_NS(util)::ArrayBase* getTermFreqVectors(int32_t n); + + bool isOptimized(); + + int32_t numDocs(); + int32_t maxDoc() const; + bool document(int32_t n, CL_NS(document)::Document& doc, const CL_NS(document)::FieldSelector* fieldSelector); + bool isDeleted(const int32_t n); + bool hasDeletions() const; + uint8_t* norms(const TCHAR* field); + void norms(const TCHAR* field, uint8_t* result); + TermEnum* terms(); + TermEnum* terms(const Term* term); + + //Returns the document frequency of the current term in the set + int32_t docFreq(const Term* t=NULL); + TermDocs* termDocs(); + TermPositions* termPositions(); + + /** + * @see IndexReader#getFieldNames(IndexReader.FieldOption fldOption) + */ + void getFieldNames(FieldOption fldOption, StringArrayWithDeletor& retarray); + + + /** + * Checks recursively if all subreaders are up to date. + */ + bool isCurrent(); + + /** Not implemented. + * @throws UnsupportedOperationException + */ + int64_t getVersion(); + + const CL_NS(util)::ArrayBase* getSubReaders() const; + + static const char* getClassName(); + const char* getObjectName() const; +}; + + +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/MultiSegmentReader.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/MultiSegmentReader.cpp new file mode 100644 index 0000000..252b94d --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/MultiSegmentReader.cpp @@ -0,0 +1,898 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" + +#include "IndexReader.h" +#include "CLucene/document/Document.h" +#include "CLucene/document/FieldSelector.h" +#include "Term.h" +#include "Terms.h" +#include "CLucene/util/PriorityQueue.h" +#include "_SegmentHeader.h" +#include "_SegmentMergeInfo.h" +#include "_SegmentMergeQueue.h" +#include "MultiReader.h" +#include "_MultiSegmentReader.h" + +CL_NS_USE(document) +CL_NS_USE(store) +CL_NS_USE(util) +CL_NS_DEF(index) + +void MultiSegmentReader::initialize(CL_NS(util)::ArrayBase* _subReaders){ + this->subReaders = _subReaders; + + _maxDoc = 0; + _numDocs = -1; + ones = NULL; + _hasDeletions = false; + + starts = _CL_NEWARRAY(int32_t, subReaders->length + 1); // build starts array + for (size_t i = 0; i < subReaders->length; i++) { + starts[i] = _maxDoc; + + // compute maxDocs + _maxDoc += (*subReaders)[i]->maxDoc(); + if ((*subReaders)[i]->hasDeletions()) + _hasDeletions = true; + } + starts[subReaders->length] = _maxDoc; +} + +MultiSegmentReader::MultiSegmentReader(CL_NS(store)::Directory* directory, SegmentInfos* sis, bool closeDirectory): + DirectoryIndexReader(directory,sis,closeDirectory), + normsCache(NormsCacheType(true,true)) +{ + // To reduce the chance of hitting FileNotFound + // (and having to retry), we open segments in + // reverse because IndexWriter merges & deletes + // the newest segments first. + + ArrayBase* readers = _CLNEW ObjectArray(sis->size()); + for (int32_t i = (int32_t)sis->size()-1; i >= 0; i--) { + try { + readers->values[i] = SegmentReader::get(sis->info(i)); + } catch(CLuceneError& err) { + if ( err.number() != CL_ERR_IO ) throw err; + + // Close all readers we had opened: + for(i++;isize();i++) { + try { + (*readers)[i]->close(); + } catch (CLuceneError& err2) { + if ( err.number() != CL_ERR_IO ) throw err2; + // keep going - we want to clean up as much as possible + } + } + throw err; + } + } + initialize(readers); +} + +/** This contructor is only used for {@link #reopen()} */ +MultiSegmentReader::MultiSegmentReader( + CL_NS(store)::Directory* directory, + SegmentInfos* infos, + bool closeDirectory, + CL_NS(util)::ArrayBase* oldReaders, + int32_t* oldStarts, + NormsCacheType* oldNormsCache): + DirectoryIndexReader(directory, infos, closeDirectory), + normsCache(NormsCacheType(true,true)) +{ + // we put the old SegmentReaders in a map, that allows us + // to lookup a reader using its segment name + map segmentReaders; + if (oldReaders != NULL) { + // create a Map SegmentName->SegmentReader + for (size_t i = 0; i < oldReaders->length; i++) { + segmentReaders[((SegmentReader*)(*oldReaders)[i])->getSegmentName()] = i; + } + } + + ArrayBase* newReaders = _CLNEW ObjectArray(infos->size()); + + for (int32_t i = infos->size() - 1; i>=0; i--) { + // find SegmentReader for this segment + map::iterator oldReaderIndex = segmentReaders.find(infos->info(i)->name); + if ( oldReaderIndex == segmentReaders.end()) { + // this is a new segment, no old SegmentReader can be reused + newReaders->values[i] = NULL; + } else { + // there is an old reader for this segment - we'll try to reopen it + newReaders->values[i] = (*oldReaders)[oldReaderIndex->second]; + } + + bool success = false; + try { + SegmentReader* newReader; + if ((*newReaders)[i] == NULL || infos->info(i)->getUseCompoundFile() != ((SegmentReader*)(*newReaders)[i])->getSegmentInfo()->getUseCompoundFile()) { + // this is a new reader; in case we hit an exception we can close it safely + newReader = SegmentReader::get(infos->info(i)); + } else { + newReader = ((SegmentReader*)(*newReaders)[i])->reopenSegment(infos->info(i)); + } + if (newReader == (*newReaders)[i]) { + // this reader is being re-used, so we take ownership of it... + oldReaders->values[i] = NULL; + } + + newReaders->values[i] = newReader; + success = true; + } _CLFINALLY ( + if (!success) { + for (i++; i < infos->size(); i++) { + if (newReaders->values[i] != NULL) { + try { + (*newReaders)[i]->close(); + _CLDELETE(newReaders->values[i]); + }catch(CLuceneError& ignore){ + if ( ignore.number() != CL_ERR_IO ) throw ignore; + // keep going - we want to clean up as much as possible + } + } + } + } + ) + } + + // initialize the readers to calculate maxDoc before we try to reuse the old normsCache + initialize(newReaders); + + // try to copy unchanged norms from the old normsCache to the new one + if (oldNormsCache != NULL) { + NormsCacheType::iterator it = oldNormsCache->begin(); + while (it != oldNormsCache->end()) { + TCHAR* field = it->first; + if (!hasNorms(field)) { + continue; + } + uint8_t* oldBytes = it->second; + uint8_t* bytes = _CL_NEWARRAY(uint8_t,maxDoc()); + + + for (size_t i = 0; i < subReaders->length; i++) { + map::iterator oldReaderIndex = segmentReaders.find(((SegmentReader*)(*subReaders)[i])->getSegmentName()); + + // this SegmentReader was not re-opened, we can copy all of its norms + if (oldReaderIndex != segmentReaders.end() && + ((*oldReaders)[oldReaderIndex->second] == (*subReaders)[i] + || ((SegmentReader*)(*oldReaders)[oldReaderIndex->second])->_norms.get(field) == ((SegmentReader*)(*subReaders)[i])->_norms.get(field))) { + // we don't have to synchronize here: either this constructor is called from a SegmentReader, + // in which case no old norms cache is present, or it is called from MultiReader.reopen(), + // which is synchronized + memcpy(bytes + starts[i], oldBytes + oldStarts[oldReaderIndex->second], starts[i+1] - starts[i]); + } else { + (*subReaders)[i]->norms(field, bytes+starts[i]); + } + } + + normsCache.put(field, bytes); // update cache + + it++; + } + } +} + + + +MultiSegmentReader::~MultiSegmentReader() { +//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 + _CLDELETE(subReaders); +} + +const char* MultiTermEnum::getObjectName() const{ return getClassName(); } +const char* MultiTermEnum::getClassName(){ return "MultiTermEnum"; } + + DirectoryIndexReader* MultiSegmentReader::doReopen(SegmentInfos* infos){ + SCOPED_LOCK_MUTEX(THIS_LOCK) + if (infos->size() == 1) { + // The index has only one segment now, so we can't refresh the MultiSegmentReader. + // Return a new SegmentReader instead + return SegmentReader::get(infos, infos->info(0), false); + } else { + return _CLNEW MultiSegmentReader(_directory, infos, closeDirectory, subReaders, starts, &normsCache); + } + } + + +ArrayBase* MultiSegmentReader::getTermFreqVectors(int32_t n){ + ensureOpen(); + int32_t i = readerIndex(n); // find segment num + return (*subReaders)[i]->getTermFreqVectors(n - starts[i]); // dispatch to segment +} + +TermFreqVector* MultiSegmentReader::getTermFreqVector(int32_t n, const TCHAR* field){ + ensureOpen(); + int32_t i = readerIndex(n); // find segment num + return (*subReaders)[i]->getTermFreqVector(n - starts[i], field); +} +void MultiSegmentReader::getTermFreqVector(int32_t docNumber, const TCHAR* field, TermVectorMapper* mapper){ + ensureOpen(); + int32_t i = readerIndex(docNumber); // find segment num + (*subReaders)[i]->getTermFreqVector(docNumber - starts[i], field, mapper); +} + +void MultiSegmentReader::getTermFreqVector(int32_t docNumber, TermVectorMapper* mapper){ + ensureOpen(); + int32_t i = readerIndex(docNumber); // find segment num + (*subReaders)[i]->getTermFreqVector(docNumber - starts[i], mapper); +} + + +bool MultiSegmentReader::isOptimized() { + return false; +} + +int32_t MultiSegmentReader::numDocs() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + // Don't call ensureOpen() here (it could affect performance) + if (_numDocs == -1) { // check cache + int32_t n = 0; // cache miss--recompute + for (size_t i = 0; i < subReaders->length; i++) + n += (*subReaders)[i]->numDocs(); // sum from readers + _numDocs = n; + } + return _numDocs; +} + +int32_t MultiSegmentReader::maxDoc() const { + // Don't call ensureOpen() here (it could affect performance) + return _maxDoc; +} + +const ArrayBase* MultiSegmentReader::getSubReaders() const{ + return subReaders; +} + +bool MultiSegmentReader::document(int32_t n, CL_NS(document)::Document& doc, const FieldSelector* fieldSelector){ + ensureOpen(); + int32_t i = readerIndex(n); // find segment num + return (*subReaders)[i]->document(n - starts[i],doc, fieldSelector); // dispatch to segment reader +} + +bool MultiSegmentReader::isDeleted(const int32_t n) { + // Don't call ensureOpen() here (it could affect performance) + int32_t i = readerIndex(n); // find segment num + return (*subReaders)[i]->isDeleted(n - starts[i]); // dispatch to segment reader +} + +bool MultiSegmentReader::hasDeletions() const{ + // Don't call ensureOpen() here (it could affect performance) + return _hasDeletions; +} + +uint8_t* MultiSegmentReader::norms(const TCHAR* field){ + SCOPED_LOCK_MUTEX(THIS_LOCK) + ensureOpen(); + uint8_t* bytes; + bytes = normsCache.get((TCHAR*)field); + if (bytes != NULL){ + return bytes; // cache hit + } + + if ( !hasNorms(field) ) + return fakeNorms(); + + bytes = _CL_NEWARRAY(uint8_t,maxDoc()); + for (size_t i = 0; i < subReaders->length; 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 MultiSegmentReader::norms(const TCHAR* field, uint8_t* result) { + SCOPED_LOCK_MUTEX(THIS_LOCK) + ensureOpen(); + uint8_t* bytes = normsCache.get((TCHAR*)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 (size_t i = 0; i < subReaders->length; i++) // read from segments + (*subReaders)[i]->norms(field, result + starts[i]); +} + + +void MultiSegmentReader::doSetNorm(int32_t n, const TCHAR* field, uint8_t value){ + normsCache.removeitr( normsCache.find((TCHAR*)field) ); // clear cache + int32_t i = readerIndex(n); // find segment num + (*subReaders)[i]->setNorm(n-starts[i], field, value); // dispatch +} + +TermEnum* MultiSegmentReader::terms() { + ensureOpen(); + return _CLNEW MultiTermEnum(subReaders, starts, NULL); +} + +TermEnum* MultiSegmentReader::terms(const Term* term) { + ensureOpen(); + return _CLNEW MultiTermEnum(subReaders, starts, term); +} + +int32_t MultiSegmentReader::docFreq(const Term* t) { + ensureOpen(); + int32_t total = 0; // sum freqs in Multi + for (size_t i = 0; i < subReaders->length; i++) + total += (*subReaders)[i]->docFreq(t); + return total; +} + +TermDocs* MultiSegmentReader::termDocs() { + ensureOpen(); + TermDocs* ret = _CLNEW MultiTermDocs(subReaders, starts); + return ret; +} + +TermPositions* MultiSegmentReader::termPositions() { + ensureOpen(); + TermPositions* ret = static_cast(_CLNEW MultiTermPositions(subReaders, starts)); + return ret; +} + +void MultiSegmentReader::setTermInfosIndexDivisor(int32_t indexDivisor) { + for (size_t i = 0; i < subReaders->length; i++) + (*subReaders)[i]->setTermInfosIndexDivisor(indexDivisor); +} + +int32_t MultiSegmentReader::getTermInfosIndexDivisor() { + if (subReaders->length > 0) + return (*subReaders)[0]->getTermInfosIndexDivisor(); + else + _CLTHROWA(CL_ERR_IllegalState,"no readers"); +} + +void MultiSegmentReader::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 MultiSegmentReader::readerIndex(int32_t n) const{ // find reader for doc n: + return readerIndex(n, this->starts, this->subReaders->length); +} + + +int32_t MultiSegmentReader::readerIndex(const int32_t n, int32_t* starts, int32_t numSubReaders) { // find reader for doc n: + int32_t lo = 0; // search starts array + int32_t hi = numSubReaders - 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 < numSubReaders && starts[mid+1] == midValue) { + mid++; // scan to last match + } + return mid; + } + } + return hi; +} + +bool MultiSegmentReader::hasNorms(const TCHAR* field) { + ensureOpen(); + for (size_t i = 0; i < subReaders->length; i++) { + if ((*subReaders)[i]->hasNorms(field)) + return true; + } + return false; +} +uint8_t* MultiSegmentReader::fakeNorms() { + if (ones==NULL) + ones=SegmentReader::createFakeNorms(maxDoc()); + return ones; +} + +void MultiSegmentReader::doUndeleteAll(){ + for (size_t i = 0; i < subReaders->length; i++) + (*subReaders)[i]->undeleteAll(); + _hasDeletions = false; + _numDocs = -1; +} +void MultiSegmentReader::commitChanges() { + for (size_t i = 0; i < subReaders->length; i++) + (*subReaders)[i]->commit(); +} + +void MultiSegmentReader::doClose() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + for (size_t i = 0; i < subReaders->length; i++){ + if ( (*subReaders)[i] != NULL ){ + (*subReaders)[i]->close(); + _CLDELETE(subReaders->values[i]); + } + } + // maybe close directory + DirectoryIndexReader::doClose(); +} + +void MultiSegmentReader::getFieldNames(FieldOption fieldNames, StringArrayWithDeletor& retarray, CL_NS(util)::ArrayBase* subReaders) { + // maintain a unique set of field names + for (size_t i = 0; i < subReaders->length; i++) { + IndexReader* reader = (*subReaders)[i]; + StringArrayWithDeletor subFields(false); + reader->getFieldNames(fieldNames, subFields); + retarray.insert(retarray.end(),subFields.begin(),subFields.end()); + subFields.clear(); + } +} + + +void MultiSegmentReader::getFieldNames(FieldOption fldOption, StringArrayWithDeletor& retarray){ + StringArrayWithDeletor temp; + CLHashList hashList; + for (size_t i = 0; i < subReaders->length; 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::iterator itr = hashList.begin(); + while ( itr != hashList.end() ){ + retarray.push_back(*itr);//no need to copy, already done! + itr++; + } +} +const char* MultiSegmentReader::getClassName(){ + return "MultiSegmentReader"; +} +const char* MultiSegmentReader::getObjectName() const{ + return getClassName(); +} + + + + + + + + + + +void MultiTermDocs::init(ArrayBase* r, const int32_t* s){ + subReaders = r; + starts = s; + base = 0; + pointer = 0; + current = NULL; + term = NULL; + readerTermDocs = NULL; + + //Check if there are subReaders + if(subReaders != NULL && subReaders->length > 0){ + readerTermDocs = _CLNEW ValueArray(subReaders->length); + } +} +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 + + init(NULL,NULL); +} + +MultiTermDocs::MultiTermDocs(ArrayBase* 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 + init(r,s); +} + +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); +//xx + //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() { + for(;;) { + if (current != NULL && current->next()) { + return true; + } else if (pointer < subReaders->length) { + base = starts[pointer]; + current = termDocs(pointer++); + } else { + return false; + } + } +} + +int32_t MultiTermDocs::read(int32_t* docs, int32_t* freqs, int32_t length) { + while (true) { + while (current == NULL) { + if (pointer < subReaders->length) { // 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; + for(;;) { + if ( current != NULL && current->skipTo(target - base)) { + return true; + } else if ( pointer < subReaders->length ) { + base = starts[pointer]; + current = termDocs(pointer++); + } else { + return false; + } + } +} + +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 (size_t i = 0; i < subReaders->length; 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(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(IndexReader* reader) { + return reader->termDocs(); +} + +TermDocs* MultiTermDocs::termDocs(const int32_t i) { + if (term == NULL) + return NULL; + TermDocs* result = (*readerTermDocs)[i]; + if (result == NULL){ + _CLLDELETE(readerTermDocs->values[i]); + readerTermDocs->values[i] = termDocs((*subReaders)[i]); + result = (*readerTermDocs)[i]; + } + result->seek(term); + + return result; +} + + +MultiTermEnum::MultiTermEnum(ArrayBase* 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 +// subReaders->length >= 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 subReaders->length must be 0 else if readers != NULL then subReaders->length > 0 +// s != NULL +//Post - The instance has been created + + 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(subReaders->length); + + CND_CONDITION (queue != NULL, "Could not allocate memory for queue"); + + //iterate through all the readers + for ( size_t i=0;ilength;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(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(ArrayBase* 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 + init(r,s); +} + + +TermDocs* MultiTermPositions::__asTermDocs(){ + return (TermDocs*) this; +} +TermPositions* MultiTermPositions::__asTermPositions(){ + return (TermPositions*) this; +} + + +TermDocs* MultiTermPositions::termDocs(IndexReader* reader) { +// 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(); +} + +int32_t MultiTermPositions::getPayloadLength() const{ + TermPositions* curAsTP = current->__asTermPositions(); + return curAsTP->getPayloadLength(); +} + +uint8_t* MultiTermPositions::getPayload(uint8_t* data){ + TermPositions* curAsTP = current->__asTermPositions(); + return curAsTP->getPayload(data); +} + +bool MultiTermPositions::isPayloadAvailable() const{ + TermPositions* curAsTP = current->__asTermPositions(); + return curAsTP->isPayloadAvailable(); +} + +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/MultipleTermPositions.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/MultipleTermPositions.cpp new file mode 100644 index 0000000..a4dcf2c --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/MultipleTermPositions.cpp @@ -0,0 +1,199 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "MultipleTermPositions.h" +#include "IndexReader.h" +#include "CLucene/util/Array.h" +#include "CLucene/util/PriorityQueue.h" + +CL_NS_USE(util) + +CL_NS_DEF(index) + +void MultipleTermPositions::seek(Term*) { + _CLTHROWA(CL_ERR_UnsupportedOperation, "Unsupported operation: MultipleTermPositions::seek"); +} + +void MultipleTermPositions::seek(TermEnum*) { + _CLTHROWA(CL_ERR_UnsupportedOperation, "Unsupported operation: MultipleTermPositions::seek"); +} + +int32_t MultipleTermPositions::read(int32_t*, int32_t*,int32_t) { + _CLTHROWA(CL_ERR_UnsupportedOperation, "Unsupported operation: MultipleTermPositions::read"); +} + +int32_t MultipleTermPositions::getPayloadLength() const { + _CLTHROWA(CL_ERR_UnsupportedOperation, "Unsupported operation: MultipleTermPositions::getPayloadLength"); +} + +uint8_t* MultipleTermPositions::getPayload(uint8_t*) { + _CLTHROWA(CL_ERR_UnsupportedOperation, "Unsupported operation: MultipleTermPositions::getPayload"); +} + +bool MultipleTermPositions::isPayloadAvailable() const{ + return false; +} + +TermDocs* MultipleTermPositions::__asTermDocs(){ + return (TermDocs*)this; +} +TermPositions* MultipleTermPositions::__asTermPositions(){ + return (TermPositions*)this; +} + + +class MultipleTermPositions::TermPositionsQueue : public CL_NS(util)::PriorityQueue > { +public: + TermPositionsQueue(TermPositions** termPositions, size_t termPositionsSize) { + initialize(termPositionsSize, false); + + size_t i=0; + while (termPositions[i]!=NULL) { + if (termPositions[i]->next()) + put(termPositions[i]); + else + _CLDELETE( termPositions[ i ] ); + + ++i; + } + } + virtual ~TermPositionsQueue(){ + } + + TermPositions* peek() { + return top(); + } + + bool lessThan(TermPositions* a, TermPositions* b) { + return a->doc() < b->doc(); + } +}; + +int IntQueue_sort(const void* a, const void* b){ + return ( *(int*)a - *(int*)b ); +} +class MultipleTermPositions::IntQueue { +private: + ValueArray* _array; + int32_t _index; + int32_t _lastIndex; + +public: + IntQueue():_array(_CLNEW ValueArray(16)), _index(0), _lastIndex(0){ + } + virtual ~IntQueue(){ + _CLLDELETE(_array); + } + + void add(const int32_t i) { + if (_lastIndex == _array->length) + _array->resize(_array->length*2); + + _array->values[_lastIndex++] = i; + } + + int32_t next() { + return _array->values[_index++]; + } + + void sort() { + int len = _lastIndex - _index; + qsort(_array->values+_index, len, sizeof(int32_t), IntQueue_sort); + } + + void clear() { + _index = 0; + _lastIndex = 0; + } + + int32_t size() { + return (_lastIndex - _index); + } +}; + +MultipleTermPositions::MultipleTermPositions(IndexReader* indexReader, const CL_NS(util)::ArrayBase* terms) : _posList(_CLNEW IntQueue()){ + CLLinkedList termPositions; + for ( size_t i=0;ilength;i++){ + termPositions.push_back( indexReader->termPositions(terms->values[i])); + } + + TermPositions** tps = _CL_NEWARRAY(TermPositions*, terms->length+1); // i == tpsSize + termPositions.toArray_nullTerminated(tps); + + _termPositionsQueue = _CLNEW TermPositionsQueue(tps,terms->length); + _CLDELETE_LARRAY(tps); +} + +MultipleTermPositions::~MultipleTermPositions() { + _CLLDELETE(_termPositionsQueue); + _CLLDELETE(_posList); +} + +bool MultipleTermPositions::next() { + if (_termPositionsQueue->size() == 0) + return false; + + _posList->clear(); + _doc = _termPositionsQueue->peek()->doc(); + + TermPositions* tp; + do { + tp = _termPositionsQueue->peek(); + + for (int32_t i = 0; i < tp->freq(); i++) + _posList->add(tp->nextPosition()); + + if (tp->next()) + _termPositionsQueue->adjustTop(); + else { + _termPositionsQueue->pop(); + tp->close(); + _CLLDELETE(tp); + } + } while (_termPositionsQueue->size() > 0 && _termPositionsQueue->peek()->doc() == _doc); + + _posList->sort(); + _freq = _posList->size(); + + return true; +} + +int32_t MultipleTermPositions::nextPosition() { + return _posList->next(); +} + +bool MultipleTermPositions::skipTo(int32_t target) { + while (_termPositionsQueue->peek() != NULL && target > _termPositionsQueue->peek()->doc()) { + TermPositions* tp = _termPositionsQueue->pop(); + if (tp->skipTo(target)) + _termPositionsQueue->put(tp); + else { + tp->close(); + _CLLDELETE(tp); + } + } + return next(); +} + +int32_t MultipleTermPositions::doc() const { + return _doc; +} + +int32_t MultipleTermPositions::freq() const { + return _freq; +} + +void MultipleTermPositions::close() { + while (_termPositionsQueue->size() > 0) { + TermPositions* tp = _termPositionsQueue->pop(); + tp->close(); + _CLLDELETE(tp); + } +} + +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/MultipleTermPositions.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/MultipleTermPositions.h new file mode 100644 index 0000000..012f197 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/MultipleTermPositions.h @@ -0,0 +1,92 @@ +/*------------------------------------------------------------------------------ +* 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_MultipleTermPositions_ +#define _lucene_index_MultipleTermPositions_ + +#include "Terms.h" +#include "CLucene/util/Array.h" + +CL_NS_DEF(index) + +class Term; +class IndexReader; + +class CLUCENE_EXPORT MultipleTermPositions : public TermPositions { +private: + class TermPositionsQueue; + class IntQueue; + + int32_t _doc; + int32_t _freq; + TermPositionsQueue* _termPositionsQueue; + IntQueue* _posList; + +public: + /** + * Creates a new MultipleTermPositions instance. + * + * @exception IOException + */ + MultipleTermPositions(IndexReader* indexReader, const CL_NS(util)::ArrayBase* terms); + virtual ~MultipleTermPositions(); + + bool next(); + + int32_t nextPosition(); + + bool skipTo(const int32_t target); + + int32_t doc() const; + + int32_t freq() const; + + void close(); + + /** + * Not implemented. + * @throws UnsupportedOperationException + */ + void seek(Term*); + + /** + * Not implemented. + * @throws UnsupportedOperationException + */ + void seek(TermEnum*); + + /** + * Not implemented. + * @throws UnsupportedOperationException + */ + int32_t read(int32_t*, int32_t*,int32_t); + + /** + * Not implemented. + * @throws UnsupportedOperationException + */ + int32_t getPayloadLength() const; + + /** + * Not implemented. + * @throws UnsupportedOperationException + */ + uint8_t* getPayload(uint8_t*); + + /** + * + * @return false + */ + // Java-TODO: Remove warning after API has been finalized + bool isPayloadAvailable() const; + + TermDocs* __asTermDocs(); + TermPositions* __asTermPositions(); +}; + + +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/Payload.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/Payload.cpp new file mode 100644 index 0000000..1fb2c28 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/Payload.cpp @@ -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. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "Payload.h" +#include + +CL_NS_USE(util) +CL_NS_DEF(index) + +Payload::Payload() : + data( * _CLNEW CL_NS(util)::ValueArray(0)) +{ + // nothing to do + this->deleteData = true; + this->deleteArray = true; +} +Payload::Payload(CL_NS(util)::ValueArray& _data, const int32_t offset, const int32_t length, bool deleteData): + data(_data) +{ + this->deleteData = false; + this->deleteArray = false; + this->setData(data,offset,length,deleteData); +} +Payload::Payload(uint8_t* data, const int32_t length, bool deleteData): + data(*_CLNEW CL_NS(util)::ValueArray) +{ + this->deleteData = false; + this->deleteArray = false; + this->setData(data,length,deleteData); +} + +Payload::~Payload() { + if ( deleteData ) this->data.deleteValues(); + if ( deleteArray ) _CLLDELETE(&this->data); +} + +void Payload::setData(uint8_t* data, const int32_t length, bool deleteData) { + if ( this->deleteData ) this->data.deleteValues(); + if ( this->deleteArray ) { + _CLLDELETE(&this->data); + this->data = *_CLNEW CL_NS(util)::ValueArray; + } + if (length < 0 ) { + _CLTHROWA(CL_ERR_IllegalArgument,"length < 0"); + } + this->data.length = offset+length; + this->data.values = data; + this->deleteData = deleteData; + this->deleteArray = true; + this->_length = length; + this->offset = 0; + assert(false); +} + +void Payload::setData(CL_NS(util)::ValueArray& data, const int32_t offset, const int32_t length, bool deleteData) { + if ( this->deleteData ) this->data.deleteValues(); + if ( this->deleteArray ) { + _CLLDELETE(&this->data); + } + + if (offset < 0 || offset + length > data.length) { + _CLTHROWA(CL_ERR_IllegalArgument,"offset < 0 || offset + length > data.length"); + } + this->data = data; + this->_length = ( length < 0 ? data.length-offset : length ); + this->offset = offset; + this->deleteData = this->deleteArray = deleteData; + assert(false); +} + +const CL_NS(util)::ValueArray& Payload::getData() const{ + return data; +} + +int32_t Payload::getOffset() const { return offset; } + +int32_t Payload::length() const { return _length; } + +uint8_t Payload::byteAt(int index) const { + if (0 <= index && index < this->_length) { + return this->data[this->offset + index]; + } + _CLTHROWA(CL_ERR_IndexOutOfBounds,"Array index out of bounds at Payload::byteAt"); +} + +CL_NS(util)::ValueArray* Payload::toByteArray() const{ + CL_NS(util)::ValueArray* ret = _CLNEW CL_NS(util)::ValueArray(this->_length); + memcpy(ret->values, this->data.values + this->offset, this->_length * sizeof(uint8_t)); + return ret; +} + +void Payload::copyTo(uint8_t* target, const int32_t targetLen) const { + if (this->_length > targetLen) { + _CLTHROWA(CL_ERR_IndexOutOfBounds,"Array index out of bounds at Payload::byteAt"); + } + memcpy(target, this->data.values + this->offset, this->_length * sizeof(uint8_t)); +} + +Payload* Payload::clone() const{ + Payload* clone = _CLNEW Payload(*this->toByteArray(), 0, -1, true); + return clone; +} + +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/Payload.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/Payload.h new file mode 100644 index 0000000..5a490dc --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/Payload.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. +------------------------------------------------------------------------------*/ +#ifndef _lucene_index_Payload_ +#define _lucene_index_Payload_ + +#include "CLucene/util/Array.h" + +CL_NS_DEF(index) + +/** +* A Payload is metadata that can be stored together with each occurrence +* of a term. This metadata is stored inline in the posting list of the +* specific term. +*

+* To store payloads in the index a {@link TokenStream} has to be used that +* produces {@link Token}s containing payload data. +*

+* Use {@link TermPositions#getPayloadLength()} and {@link TermPositions#getPayload(byte[], int)} +* to retrieve the payloads from the index.
+* +*/ +class CLUCENE_EXPORT Payload:LUCENE_REFBASE { +protected: + CL_NS(util)::ValueArray& data; + + /** the offset within the byte array */ + int32_t offset; + + /** the length of the payload data */ + int32_t _length; + + bool deleteData; + bool deleteArray; +public: + + /** Creates an empty payload and does not allocate a byte array. */ + Payload(); + + /** + * Creates a new payload with the the given array as data. + * A reference to the passed-in array is held, i. e. no + * copy is made. + * + * @param data the data of this payload + * @param length the length of the data + * @param deleteData delete data when payload is deleted + */ + Payload(uint8_t* data, const int32_t length, bool deleteData=false); + + /** + * Creates a new payload with the the given array as data. + * A reference to the passed-in array is held, i. e. no + * copy is made. + * + * @param data the data of this payload + * @param deleteData delete data when payload is deleted + */ + Payload(CL_NS(util)::ValueArray& data, const int32_t offset=0, const int32_t length=-1, bool deleteData=false); + + /* Desctructor - auto-delete the data container */ + ~Payload(); + + /** + * Sets this payloads data. + * A reference to the passed-in array is held, i. e. no + * copy is made. + * @param deleteData delete data when payload is deleted + */ + void setData(uint8_t* data, const int32_t length, bool deleteData=false); + + /** + * Sets this payloads data. + * A reference to the passed-in array is held, i. e. no + * copy is made. + * @param deleteData delete data when payload is deleted + */ + void setData(CL_NS(util)::ValueArray& data, const int32_t offset=0, const int32_t length=-1, bool deleteData=false); + + /** + * Returns a reference to the underlying byte array + * that holds this payloads data. + */ + const CL_NS(util)::ValueArray& getData() const; + + /** + * Returns the length of the payload data. + */ + int32_t length() const; + + /** + * Returns the offset in the underlying byte array + */ + int32_t getOffset() const; + + /** + * Returns the byte at the given index. + */ + uint8_t byteAt(int index) const; + + /** + * Allocates a new byte array, copies the payload data into it and returns it. Caller is responsible + * for deleting it later. + * @memory caller is responsible for deleting the returned array + */ + CL_NS(util)::ValueArray* toByteArray() const; + + /** + * Copies the payload data to a byte array. + * + * @param target the target byte array + * @param targetOffset the offset in the target byte array + */ + void copyTo(uint8_t* target, const int32_t targetLen) const; + + /** + * Clones this payload by creating a copy of the underlying + * byte array. + */ + Payload* clone() const; + +}; + +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/SegmentInfos.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/SegmentInfos.cpp new file mode 100644 index 0000000..fb42b2a --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/SegmentInfos.cpp @@ -0,0 +1,1131 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" + +#include "_SegmentInfos.h" +#include "_IndexFileNames.h" +#include "_SegmentHeader.h" +#include "MultiReader.h" +#include +#include + +#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 char* _name, const int32_t _docCount, CL_NS(store)::Directory* _dir, + bool _isCompoundFile, bool _hasSingleNormFile, + int32_t _docStoreOffset, const char* _docStoreSegment, bool _docStoreIsCompoundFile) + : + docCount(_docCount), + preLockless(false), + delGen(SegmentInfo::NO), + isCompoundFile(_isCompoundFile ? SegmentInfo::YES : SegmentInfo::NO), + hasSingleNormFile(_hasSingleNormFile), + _sizeInBytes(-1), + docStoreOffset(_docStoreOffset), + docStoreSegment( _docStoreSegment == NULL ? "" : _docStoreSegment ), + docStoreIsCompoundFile(_docStoreIsCompoundFile) +{ + CND_PRECONDITION(docStoreOffset == -1 || !docStoreSegment.empty(), "failed testing for (docStoreOffset == -1 || docStoreSegment != NULL)"); + + this->name = _name; + this->dir = _dir; +} + +string SegmentInfo::segString(Directory* dir) { + string cfs; + try { + if (getUseCompoundFile()) + cfs = "c"; + else + cfs = "C"; + } catch (CLuceneError& ioe) { + if ( ioe.number() != CL_ERR_IO ) throw ioe; + cfs = "?"; + } + + string docStore; + + if (docStoreOffset != -1) + docStore = string("->") + docStoreSegment; + else + docStore = ""; + + return string(name) + ":" + + cfs + + string(this->dir == dir ? "" : "x") + + Misc::toString(docCount) + docStore; +} + SegmentInfo::SegmentInfo(CL_NS(store)::Directory* _dir, int32_t format, CL_NS(store)::IndexInput* input): + _sizeInBytes(-1) + { + this->dir = _dir; + + { + char aname[CL_MAX_PATH]; + input->readString(aname, CL_MAX_PATH); + this->name = aname; + } + + docCount = input->readInt(); + if (format <= SegmentInfos::FORMAT_LOCKLESS) { + delGen = input->readLong(); + if (format <= SegmentInfos::FORMAT_SHARED_DOC_STORE) { + docStoreOffset = input->readInt(); + if (docStoreOffset != -1) { + char aname[CL_MAX_PATH]; + input->readString(aname, CL_MAX_PATH); + docStoreSegment = aname; + docStoreIsCompoundFile = (1 == input->readByte()); + } else { + docStoreSegment = name; + docStoreIsCompoundFile = false; + } + } else { + docStoreOffset = -1; + docStoreSegment = name; + docStoreIsCompoundFile = false; + } + if (format <= SegmentInfos::FORMAT_SINGLE_NORM_FILE) { + hasSingleNormFile = (1 == input->readByte()); + } else { + hasSingleNormFile = false; + } + int32_t numNormGen = input->readInt(); + normGen.deleteValues(); + if (numNormGen == NO) { + // normGen is already NULL, we'll just set normGenLen to 0 + } else { + normGen.values = _CL_NEWARRAY(int64_t, numNormGen); + normGen.length = numNormGen; + for(int32_t j=0;jreadLong(); + } + } + isCompoundFile = input->readByte(); + preLockless = (isCompoundFile == CHECK_DIR); + } else { + delGen = CHECK_DIR; + //normGen=NULL; normGenLen=0; + isCompoundFile = CHECK_DIR; + preLockless = true; + hasSingleNormFile = false; + docStoreOffset = -1; + docStoreIsCompoundFile = false; + } + } + + void SegmentInfo::reset(const SegmentInfo* src) { + clearFiles(); + this->name = src->name; + docCount = src->docCount; + dir = src->dir; + preLockless = src->preLockless; + delGen = src->delGen; + docStoreOffset = src->docStoreOffset; + docStoreIsCompoundFile = src->docStoreIsCompoundFile; + if (src->normGen.values == NULL) { + this->normGen.deleteValues(); + }else{ + // optimized case to allocate new array only if current memory buffer is too small + if (this->normGen.length < src->normGen.length) { + normGen.resize(src->normGen.length); + }else{ + this->normGen.length = src->normGen.length; + } + memcpy(this->normGen.values, src->normGen.values, sizeof(int64_t) * this->normGen.length); + } + isCompoundFile = src->isCompoundFile; + hasSingleNormFile = src->hasSingleNormFile; + } + + SegmentInfo::~SegmentInfo(){ + normGen.deleteValues(); + } + + void SegmentInfo::setNumFields(const int32_t numFields) { + if (normGen.values == NULL) { + // normGen is null if we loaded a pre-2.1 segment + // file, or, if this segments file hasn't had any + // norms set against it yet: + normGen.resize(numFields); + + if (preLockless) { + // Do nothing: thus leaving normGen[k]==CHECK_DIR (==0), so that later we know + // we have to check filesystem for norm files, because this is prelockless. + + } else { + // This is a FORMAT_LOCKLESS segment, which means + // there are no separate norms: + for(int32_t i=0;i& __files = files(); + size_t size = __files.size(); + _sizeInBytes = 0; + for(size_t i=0;ifileLength(fileName); + } + } + return _sizeInBytes; + } + + void SegmentInfo::addIfExists(std::vector& files, const std::string& fileName){ + if (dir->fileExists(fileName.c_str())) + files.push_back(fileName); + } + + const vector& SegmentInfo::files(){ + if (!_files.empty()) { + // Already cached: + return _files; + } + + bool useCompoundFile = getUseCompoundFile(); + + if (useCompoundFile) { + _files.push_back( string(name) + "." + IndexFileNames::COMPOUND_FILE_EXTENSION); + } else { + ConstValueArray& exts = IndexFileNames::NON_STORE_INDEX_EXTENSIONS(); + for(size_t i=0;i& exts = IndexFileNames::STORE_INDEX_EXTENSIONS(); + for(size_t i=0;i& exts = IndexFileNames::STORE_INDEX_EXTENSIONS(); + for(size_t i=0;i= YES || dir->fileExists(delFileName.c_str()))) { + _files.push_back(delFileName); + } + + // Careful logic for norms files + if (normGen.values != NULL) { + for(size_t i=0;i= YES) { + // Definitely a separate norm file, with generation: + string gens = string(".") + IndexFileNames::SEPARATE_NORMS_EXTENSION; + gens += Misc::toString((int64_t)i); + _files.push_back(IndexFileNames::fileNameFromGeneration(name.c_str(), gens.c_str(), gen)); + } else if (NO == gen) { + // No separate norms but maybe plain norms + // in the non compound file case: + if (!hasSingleNormFile && !useCompoundFile) { + string fileName = name + "." + IndexFileNames::PLAIN_NORMS_EXTENSION; + fileName += i; + if (dir->fileExists(fileName.c_str())) { + _files.push_back(fileName); + } + } + } else if (CHECK_DIR == gen) { + // Pre-2.1: we have to check file existence + string fileName; + if (useCompoundFile) { + fileName = name + "." + IndexFileNames::SEPARATE_NORMS_EXTENSION; + fileName += Misc::toString((int64_t)i); + } else if (!hasSingleNormFile) { + fileName = name + "." + IndexFileNames::PLAIN_NORMS_EXTENSION; + fileName += Misc::toString((int64_t)i); + } + if ( !fileName.empty() && dir->fileExists(fileName.c_str())) { + _files.push_back(fileName); + } + } + } + } else if (preLockless || (!hasSingleNormFile && !useCompoundFile)) { + // Pre-2.1: we have to scan the dir to find all + // matching _X.sN/_X.fN files for our segment: + string prefix; + if (useCompoundFile) + prefix = name + "." + IndexFileNames::SEPARATE_NORMS_EXTENSION; + else + prefix = name + "." + IndexFileNames::PLAIN_NORMS_EXTENSION; + size_t prefixLength = prefix.length(); + vector allFiles; + if (dir->list(allFiles) == false ){ + string err = "cannot read directory "; + err += dir->toString(); + err += ": list() returned null"; + _CLTHROWA(CL_ERR_IO, err.c_str()); + } + for(size_t i=0;i prefixLength && _istdigit(fileName[prefixLength]) && fileName.compare(0,prefix.length(),prefix)==0 ) { + _files.push_back(fileName); + } + } + } + return _files; + } + + + + bool SegmentInfo::hasDeletions() const { + // Cases: + // + // delGen == NO: this means this segment was written + // by the LOCKLESS code and for certain does not have + // deletions yet + // + // delGen == CHECK_DIR: this means this segment was written by + // pre-LOCKLESS code which means we must check + // directory to see if .del file exists + // + // delGen >= YES: this means this segment was written by + // the LOCKLESS code and for certain has + // deletions + // + if (delGen == NO) { + return false; + } else if (delGen >= YES) { + return true; + } else { + return dir->fileExists(getDelFileName().c_str()); + } + } + + void SegmentInfo::advanceDelGen() { + // delGen 0 is reserved for pre-LOCKLESS format + if (delGen == NO) { + delGen = YES; + } else { + delGen++; + } + clearFiles(); + } + + void SegmentInfo::clearDelGen() { + delGen = NO; + clearFiles(); + } + + SegmentInfo* SegmentInfo::clone () { + SegmentInfo* si = _CLNEW SegmentInfo(name.c_str(), docCount, dir); + si->isCompoundFile = isCompoundFile; + si->delGen = delGen; + si->preLockless = preLockless; + si->hasSingleNormFile = hasSingleNormFile; + if (this->normGen.values != NULL) { + si->normGen.resize(this->normGen.length); + memcpy(si->normGen.values, this->normGen.values, sizeof(int64_t) * this->normGen.length); + } + si->docStoreOffset = docStoreOffset; + si->docStoreSegment = docStoreSegment; + si->docStoreIsCompoundFile = docStoreIsCompoundFile; + + return si; + } + + string SegmentInfo::getDelFileName() const { + if (delGen == NO) { + // In this case we know there is no deletion filename + // against this segment + return NULL; + } else { + // If delGen is CHECK_DIR, it's the pre-lockless-commit file format + return IndexFileNames::fileNameFromGeneration(name.c_str(), (string(".") + IndexFileNames::DELETES_EXTENSION).c_str(), delGen); + } + } + + bool SegmentInfo::hasSeparateNorms(const int32_t fieldNumber) const { + if ((normGen.values == NULL && preLockless) || (normGen.values != NULL && normGen[fieldNumber] == CHECK_DIR)) { + // Must fallback to directory file exists check: + return dir->fileExists( (name + string(".s") + Misc::toString(fieldNumber)).c_str() ); + } else if (normGen.values == NULL || normGen[fieldNumber] == NO) { + return false; + } else { + return true; + } + } + + bool SegmentInfo::hasSeparateNorms() const { + if (normGen.values == NULL) { + if (!preLockless) { + // This means we were created w/ LOCKLESS code and no + // norms are written yet: + return false; + } else { + // This means this segment was saved with pre-LOCKLESS + // code. So we must fallback to the original + // directory list check: + vector result; + if ( !dir->list(result) ) { + _CLTHROWA(CL_ERR_IO, (string("cannot read directory: ") + dir->toString() + string(" list() returned NULL")).c_str() ); + } + + string pattern = name + string(".s"); + for ( vector::iterator itr = result.begin(); + itr != result.end() ; itr ++ ){ + if(strncmp(itr->c_str(), pattern.c_str(), pattern.length() ) == 0 && + isdigit( (*itr)[pattern.length()])) { + return true; + } + } + return false; + } + } else { + // This means this segment was saved with LOCKLESS + // code so we first check whether any normGen's are >= 1 + // (meaning they definitely have separate norms): + for(size_t i=0;i= YES) { + return true; + } + } + // Next we look for any == 0. These cases were + // pre-LOCKLESS and must be checked in directory: + for(size_t j=0;jisCompoundFile = YES; + } else { + this->isCompoundFile = NO; + } + clearFiles(); + } + + bool SegmentInfo::getUseCompoundFile() const { + if (isCompoundFile == NO) { + return false; + } else if (isCompoundFile == YES) { + return true; + } else { + return dir->fileExists( ((string)name + "." + IndexFileNames::COMPOUND_FILE_EXTENSION).c_str() ); + } + } + + int32_t SegmentInfo::getDocStoreOffset() const { return docStoreOffset; } + + bool SegmentInfo::getDocStoreIsCompoundFile() const { return docStoreIsCompoundFile; } + + void SegmentInfo::setDocStoreIsCompoundFile(const bool v) { + docStoreIsCompoundFile = v; + clearFiles(); + } + + const string& SegmentInfo::getDocStoreSegment() const { + return docStoreSegment; + } + + void SegmentInfo::setDocStoreOffset(const int32_t offset) { + docStoreOffset = offset; + clearFiles(); + } + + void SegmentInfo::write(CL_NS(store)::IndexOutput* output) { + output->writeString(name); + output->writeInt(docCount); + output->writeLong(delGen); + output->writeInt(docStoreOffset); + if (docStoreOffset != -1) { + output->writeString(docStoreSegment); + output->writeByte(static_cast(docStoreIsCompoundFile ? 1:0)); + } + + output->writeByte(static_cast(hasSingleNormFile ? 1:0)); + if (normGen.values == NULL) { + output->writeInt(NO); + } else { + output->writeInt(normGen.length); + for(size_t j = 0; j < normGen.length; j++) { + output->writeLong(normGen[j]); + } + } + output->writeByte(isCompoundFile); + } + + void SegmentInfo::clearFiles() { + _files.clear(); + _sizeInBytes = -1; + } + + /** We consider another SegmentInfo instance equal if it + * has the same dir and same name. */ + bool SegmentInfo::equals(const SegmentInfo* obj) { + return (obj->dir == this->dir && obj->name.compare(this->name) == 0 ); + } + + + + + + std::ostream* SegmentInfos::infoStream = NULL; + + /** If non-null, information about retries when loading + * the segments file will be printed to this. + */ + void SegmentInfos::setInfoStream(std::ostream* infoStream) { + SegmentInfos::infoStream = infoStream; + } + + /** + * @see #setInfoStream + */ + std::ostream* SegmentInfos::getInfoStream() { + return infoStream; + } + + SegmentInfos::SegmentInfos(bool deleteMembers, int32_t reserveCount) : + generation(0),lastGeneration(0), infos(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(); + if (reserveCount > 1) + infos.reserve(reserveCount); + } + + 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. + + //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 < infos.size(), "i is out of bounds"); + + //Get the i-th SegmentInfo instance + SegmentInfo *ret = infos[i]; + + //Condition check to see if the i-th SegmentInfo has been retrieved + CND_CONDITION(ret != NULL,"No SegmentInfo instance found"); + + return ret; + } + + int64_t SegmentInfos::getCurrentSegmentGeneration( std::vector& files ) { + if ( files.size() == 0 ) { + return -1; + } + + int64_t max = -1; + + vector::iterator itr = files.begin(); + const char* file; + size_t seglen = strlen(IndexFileNames::SEGMENTS); + while ( itr != files.end() ) { + file = itr->c_str(); + if ( strncmp( file, IndexFileNames::SEGMENTS, seglen ) == 0 && strcmp( file, IndexFileNames::SEGMENTS_GEN ) != 0 ) { + int64_t gen = generationFromSegmentsFileName( file ); + if ( gen > max ) { + max = gen; + } + } + + itr++; + } + + return max; + } + + int64_t SegmentInfos::getCurrentSegmentGeneration( const CL_NS(store)::Directory* directory ) { + vector files; + if ( !directory->list(&files) ){ + _CLTHROWA(CL_ERR_IO, (string("cannot read directory ") + directory->toString() + string(": list() returned NULL")).c_str() ); + } + int64_t gen = getCurrentSegmentGeneration( files ); + return gen; + } + + string SegmentInfos::getCurrentSegmentFileName( vector& files ) { + return IndexFileNames::fileNameFromGeneration( IndexFileNames::SEGMENTS, "", getCurrentSegmentGeneration( files )); + } + + std::string SegmentInfos::getCurrentSegmentFileName( CL_NS(store)::Directory* directory ) { + return IndexFileNames::fileNameFromGeneration( IndexFileNames::SEGMENTS, "", getCurrentSegmentGeneration( directory )); + } + + std::string SegmentInfos::getCurrentSegmentFileName() { + return IndexFileNames::fileNameFromGeneration( IndexFileNames::SEGMENTS, "", lastGeneration ); + } + + int64_t SegmentInfos::generationFromSegmentsFileName( const char* fileName ) { + if ( strcmp( fileName, IndexFileNames::SEGMENTS ) == 0 ) { + return 0; + } else if ( strncmp( fileName, IndexFileNames::SEGMENTS, strlen(IndexFileNames::SEGMENTS) ) == 0 ) { + return CL_NS(util)::Misc::base36ToLong( fileName + strlen( IndexFileNames::SEGMENTS )+1 ); + } else { + TCHAR err[CL_MAX_PATH + 35]; + _sntprintf(err,CL_MAX_PATH + 35,_T("fileName \"%s\" is not a segments file"), fileName); + _CLTHROWA(CL_ERR_IllegalArgument, err); + return 0; + } + } + + std::string SegmentInfos::getNextSegmentFileName() { + int64_t nextGeneration; + + if ( generation == -1 ) { + nextGeneration = 1; + } else { + nextGeneration = generation+1; + } + + return IndexFileNames::fileNameFromGeneration( IndexFileNames::SEGMENTS, "", nextGeneration ); + } + + void SegmentInfos::clearto(size_t from, size_t end){ + size_t range = end - from; + if ( (infos.size() - from) >= range) { // Make sure we actually need to remove + segmentInfosType::iterator itr,bitr=infos.begin()+from,eitr=infos.end(); + size_t count = 0; + for(itr=bitr;itr!=eitr && count < range;++itr, count++) { + _CLLDELETE((*itr)); + } + infos.erase(bitr,bitr + count); + } + } + void SegmentInfos::add(SegmentInfo* info, int32_t pos){ + if ( pos == -1 ){ + infos.push_back(info); + }else{ + if ( pos < 0 || pos >= (int32_t)infos.size()+1 ) _CLTHROWA(CL_ERR_IllegalArgument, "pos is out of range"); + infos.insert( infos.begin()+pos, info ); + } + } + int32_t SegmentInfos::size() const{ + return infos.size(); + } + SegmentInfo* SegmentInfos::elementAt(int32_t pos) { + return infos.at(pos); + } + void SegmentInfos::setElementAt(SegmentInfo* si, int32_t pos) { + infos.set(pos, si); + } + void SegmentInfos::clear() { infos.clear(); } + + + void SegmentInfos::insert(SegmentInfos* _infos, bool takeMemory){ + infos.insert(infos.end(),_infos->infos.begin(),_infos->infos.end()); + if ( takeMemory ){ + while (_infos->infos.size() > 0 ) + _infos->infos.remove(_infos->infos.begin(), true ); + } + } + void SegmentInfos::insert(SegmentInfo* info){ + infos.push_back(info); + } + int32_t SegmentInfos::indexOf(const SegmentInfo* info) const{ + segmentInfosType::const_iterator itr = infos.begin(); + int32_t c=-1; + while ( itr != infos.end()){ + c++; + if ( *itr == info ){ + return c; + } + itr++; + } + return -1; + } + void SegmentInfos::range(size_t from, size_t to, SegmentInfos& ret) const{ + segmentInfosType::const_iterator itr = infos.begin(); + itr+= from; + for (size_t i=from;iopenInput(segmentFileName); + CND_CONDITION(input != NULL,"input == NULL"); + + generation = generationFromSegmentsFileName( segmentFileName ); + lastGeneration = generation; + + try { + int32_t format = input->readInt(); + if(format < 0){ // file contains explicit format info + // check that it is a format we can understand + if (format < CURRENT_FORMAT){ + char err[30]; + cl_sprintf(err,30,"Unknown format version: %d", format); + _CLTHROWA(CL_ERR_CorruptIndex, err); + } + version = input->readLong(); // read version + counter = input->readInt(); // read counter + } + else{ // file is in old format without explicit format info + counter = format; + } + + for (int32_t i = input->readInt(); i > 0; i--) { // read segmentInfos + infos.push_back( _CLNEW SegmentInfo(directory, format, input) ); + } + + if(format >= 0){ // in old format the version number may be at the end of the file + if (input->getFilePointer() >= input->length()) + version = CL_NS(util)::Misc::currentTimeMillis(); // old file format without version number + else + version = input->readLong(); // read version + } + success = true; + } _CLFINALLY({ + input->close(); + _CLDELETE(input); + if (!success) { + // Clear any segment infos we had loaded so we + // have a clean slate on retry: + clear(); + } + }); + } + + void SegmentInfos::read(Directory* directory) { + generation = lastGeneration = -1; + + FindSegmentsRead find(directory, this); + + find.run(); + } + + + 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 + + string segmentFileName = getNextSegmentFileName(); + + // Always advance the generation on write: + if (generation == -1) { + generation = 1; + } else { + generation++; + } + + IndexOutput* output = directory->createOutput(segmentFileName.c_str()); + + bool success = false; + + try { + output->writeInt(CURRENT_FORMAT); // write FORMAT + output->writeLong(++version); // every write changes + // the index + output->writeInt(counter); // write counter + output->writeInt(size()); // write infos + for (int32_t i = 0; i < size(); i++) { + info(i)->write(output); + } + }_CLFINALLY ( + try { + output->close(); + _CLDELETE(output); + success = true; + } _CLFINALLY ( + if (!success) { + // Try not to leave a truncated segments_N file in + // the index: + directory->deleteFile(segmentFileName.c_str()); + } + ) + ) + + try { + output = directory->createOutput(IndexFileNames::SEGMENTS_GEN); + try { + output->writeInt(FORMAT_LOCKLESS); + output->writeLong(generation); + output->writeLong(generation); + } _CLFINALLY( + output->close(); + _CLDELETE(output); + ) + } catch (CLuceneError& e) { + if ( e.number() != CL_ERR_IO ) throw e; + // It's OK if we fail to write this file since it's + // used only as one of the retry fallbacks. + } + + lastGeneration = generation; + } + + SegmentInfos* SegmentInfos::clone() const{ + SegmentInfos* sis = _CLNEW SegmentInfos(true, infos.size()); + for(size_t i=0;isetElementAt(infos[i]->clone(), i); + } + return sis; + } + + int64_t SegmentInfos::getVersion() const { return version; } + int64_t SegmentInfos::getGeneration() const { return generation; } + int64_t SegmentInfos::getLastGeneration() const { return lastGeneration; } + + int64_t SegmentInfos::readCurrentVersion(Directory* directory){ + FindSegmentsVersion find(directory); + return find.run(); + } + + //void SegmentInfos::setDefaultGenFileRetryCount(const int32_t count) { defaultGenFileRetryCount = count; } + int32_t SegmentInfos::getDefaultGenFileRetryCount() { return defaultGenFileRetryCount; } + + //void SegmentInfos::setDefaultGenFileRetryPauseMsec(const int32_t msec) { defaultGenFileRetryPauseMsec = msec; } + int32_t SegmentInfos::getDefaultGenFileRetryPauseMsec() { return defaultGenFileRetryPauseMsec; } + + //void SegmentInfos::setDefaultGenLookaheadCount(const int32_t count) { defaultGenLookaheadCount = count;} + int32_t SegmentInfos::getDefaultGenLookahedCount() { return defaultGenLookaheadCount; } + + void SegmentInfos::_FindSegmentsFile::doRun(){ + string segmentFileName; + int64_t lastGen = -1; + int64_t gen = 0; + int32_t genLookaheadCount = 0; + bool retry = false; + CLuceneError exc; //saved exception + + int32_t method = 0; + + // Loop until we succeed in calling doBody() without + // hitting an IOException. An IOException most likely + // means a commit was in process and has finished, in + // the time it took us to load the now-old infos files + // (and segments files). It's also possible it's a + // true error (corrupt index). To distinguish these, + // on each retry we must see "forward progress" on + // which generation we are trying to load. If we + // don't, then the original error is real and we throw + // it. + + // We have three methods for determining the current + // generation. We try the first two in parallel, and + // fall back to the third when necessary. + + while( true ) { + + if ( 0 == method ) { + // Method 1: list the directory and use the highest + // segments_N file. This method works well as long + // as there is no stale caching on the directory + // contents (NOTE: NFS clients often have such stale + // caching): + vector files; + + int64_t genA = -1; + + if (directory != NULL){ + if (directory->list(&files)) { + genA = getCurrentSegmentGeneration( files ); + files.clear(); + } + } + + + if ( infoStream ){ + (*infoStream) << "[SIS]: directory listing genA=" << genA << "\n"; + } + + // Method 2: open segments.gen and read its + // contents. Then we take the larger of the two + // gen's. This way, if either approach is hitting + // a stale cache (NFS) we have a better chance of + // getting the right generation. + int64_t genB = -1; + if (directory != NULL) { + CLuceneError e; + for(int32_t i=0;iopenInput(IndexFileNames::SEGMENTS_GEN, genInput, e) ){ + if (e.number() == CL_ERR_IO ) { + if ( infoStream ){ + (*infoStream) << "[SIS]: segments.gen open: IOException " << e.what() << "\n"; + } + break; + } else { + genInput->close(); + _CLLDELETE(genInput); + throw e; + } + } + + if (genInput != NULL) { + try { + int32_t version = genInput->readInt(); + if (version == FORMAT_LOCKLESS) { + int64_t gen0 = genInput->readLong(); + int64_t gen1 = genInput->readLong(); + //CL_TRACE("fallback check: %d; %d", gen0, gen1); + if (gen0 == gen1) { + // The file is consistent. + genB = gen0; + genInput->close(); + _CLDELETE(genInput); + break; + } + } + } catch (CLuceneError &err2) { + if (err2.number() != CL_ERR_IO) { + genInput->close(); + _CLLDELETE(genInput); + throw err2; // retry only for IOException + } + } _CLFINALLY({ + genInput->close(); + _CLDELETE(genInput); + }); + } + + _LUCENE_SLEEP(defaultGenFileRetryPauseMsec); + /* + //todo: Wrap the LUCENE_SLEEP call above with the following try/catch block if + // InterruptedException is implemented + try { + } catch (CLuceneError &e) { + //if (err2.number != CL_ERR_Interrupted) // retry only for InterruptedException + // todo: see if CL_ERR_Interrupted needs to be added... + throw e; + }*/ + + } + } + + //CL_TRACE("%s check: genB=%d", IndexFileNames::SEGMENTS_GEN, genB); + + // Pick the larger of the two gen's: + if (genA > genB) + gen = genA; + else + gen = genB; + + if (gen == -1) { + // Neither approach found a generation + _CLTHROWA(CL_ERR_IO, (string("No segments* file found in ") + directory->toString()).c_str()); + } + } + + // Third method (fallback if first & second methods + // are not reliable): since both directory cache and + // file contents cache seem to be stale, just + // advance the generation. + if ( 1 == method || ( 0 == method && lastGen == gen && retry )) { + + method = 1; + + if (genLookaheadCount < defaultGenLookaheadCount) { + gen++; + genLookaheadCount++; + //CL_TRACE("look ahead increment gen to %d", gen); + } + } + + if (lastGen == gen) { + + // This means we're about to try the same + // segments_N last tried. This is allowed, + // exactly once, because writer could have been in + // the process of writing segments_N last time. + + if (retry) { + // OK, we've tried the same segments_N file + // twice in a row, so this must be a real + // error. We throw the original exception we + // got. + throw exc; + } else { + retry = true; + } + + } else { + // Segment file has advanced since our last loop, so + // reset retry: + retry = false; + } + + lastGen = gen; + + segmentFileName = IndexFileNames::fileNameFromGeneration(IndexFileNames::SEGMENTS, "", gen); + + CLuceneError saved_error; + if ( tryDoBody(segmentFileName.c_str(), saved_error) ){ + return; + } + + // Save the original root cause: + if (exc.number() == 0) { + CND_CONDITION( saved_error.number() > 0, "Unsupported error code"); + exc.set(saved_error.number(),saved_error.what()); + } + + //CL_TRACE("primary Exception on '" + segmentFileName + "': " + err + "'; will retry: retry=" + retry + "; gen = " + gen); + + if (!retry && gen > 1) { + + // This is our first time trying this segments + // file (because retry is false), and, there is + // possibly a segments_(N-1) (because gen > 1). + // So, check if the segments_(N-1) exists and + // try it if so: + string prevSegmentFileName = IndexFileNames::fileNameFromGeneration( IndexFileNames::SEGMENTS, "", gen-1 ); + + bool prevExists=false; + if (directory != NULL) + prevExists = directory->fileExists(prevSegmentFileName.c_str()); + else + prevExists = Misc::dir_Exists( (string(fileDirectory) + prevSegmentFileName).c_str() ); + + if (prevExists) { + //CL_TRACE("fallback to prior segment file '%s'", prevSegmentFileName); + CLuceneError saved_error; + if ( tryDoBody(prevSegmentFileName.c_str(), saved_error) ){ + return; + } + //CL_TRACE("secondary Exception on '" + prevSegmentFileName + "': " + err2 + "'; will retry"); + } + } + } + } + SegmentInfos::FindSegmentsRead::FindSegmentsRead( CL_NS(store)::Directory* dir, SegmentInfos* _this ) : + SegmentInfos::FindSegmentsFile(dir) { + this->_this = _this; + } + bool SegmentInfos::FindSegmentsRead::doBody( const char* segmentFileName ) { + //Have SegmentInfos read the segments file in directory + _this->read(directory, segmentFileName); + return true; + } + + SegmentInfos::FindSegmentsVersion::FindSegmentsVersion( CL_NS(store)::Directory* dir ) : + SegmentInfos::FindSegmentsFile(dir) { + } + + int64_t SegmentInfos::FindSegmentsVersion::doBody( const char* segmentFileName ) { + + IndexInput* input = directory->openInput( segmentFileName ); + + int32_t format = 0; + int64_t version=0; + try { + format = input->readInt(); + if(format < 0){ + if(format < CURRENT_FORMAT){ + char err[30]; + cl_sprintf(err,30,"Unknown format version: %d",format); + _CLTHROWA(CL_ERR_CorruptIndex,err); + } + version = input->readLong(); // read version + } + } + _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* sis = _CLNEW SegmentInfos(); + sis->read(directory, segmentFileName); + version = sis->getVersion(); + _CLDELETE(sis); + + return version; + + } + +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/SegmentMergeInfo.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/SegmentMergeInfo.cpp new file mode 100644 index 0000000..035cdd2 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/SegmentMergeInfo.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/_ApiHeader.h" +#include "_SegmentHeader.h" +#include "_SegmentMergeInfo.h" +#include "_SegmentTermEnum.h" + +CL_NS_DEF(index) + +SegmentMergeInfo::SegmentMergeInfo(const int32_t b, TermEnum* te, IndexReader* r): + docMap(NULL), + termEnum(te), + base(b), + reader(r) +{ +//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/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/SegmentMergeQueue.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/SegmentMergeQueue.cpp new file mode 100644 index 0000000..ba34937 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/SegmentMergeQueue.cpp @@ -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. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "CLucene/util/PriorityQueue.h" +#include "_SegmentHeader.h" +#include "_SegmentMergeInfo.h" +#include "_SegmentMergeQueue.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/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/SegmentMerger.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/SegmentMerger.cpp new file mode 100644 index 0000000..284ee26 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/SegmentMerger.cpp @@ -0,0 +1,813 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "_SegmentHeader.h" +#include "CLucene/util/PriorityQueue.h" +#include "CLucene/util/Misc.h" +#include "IndexReader.h" +#include "IndexWriter.h" +#include "_SegmentMerger.h" +#include "_FieldsWriter.h" +#include "CLucene/document/Document.h" +#include +#include "CLucene/index/_IndexFileNames.h" +#include "_CompoundFile.h" +#include "_SkipListWriter.h" +#include "CLucene/document/FieldSelector.h" + +CL_NS_USE(util) +CL_NS_USE(document) +CL_NS_USE(store) +CL_NS_DEF(index) + +const uint8_t SegmentMerger::NORMS_HEADER[] = {'N','R','M', (uint8_t)-1}; +const int SegmentMerger::NORMS_HEADER_length = 4; +int32_t SegmentMerger::MAX_RAW_MERGE_DOCS = 4192; + +void SegmentMerger::init(){ + skipListWriter = NULL; + freqOutput = NULL; + proxOutput = NULL; + termInfosWriter = NULL; + queue = NULL; + fieldInfos = NULL; + checkAbort = NULL; + skipInterval = 0; +} + +SegmentMerger::SegmentMerger(IndexWriter* writer, const char* name, MergePolicy::OneMerge* merge){ +//Func - Constructor +//Pre - dir holds a valid reference to a Directory +// name != NULL +//Post - Instance has been created + + CND_PRECONDITION(name != NULL, "name is NULL"); + + this->init(); + this->directory = writer->getDirectory(); + this->segment = name; + if (merge != NULL) + this->checkAbort = _CLNEW CheckAbort(merge, directory); + this->termIndexInterval= writer->getTermIndexInterval(); + this->mergedDocs = 0; + this->maxSkipLevels = 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); + } + + _CLDELETE(checkAbort); + _CLDELETE(skipListWriter); + +} + +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(bool mergeDocStores) { + this->mergeDocStores = mergeDocStores; + + // NOTE: it's important to add calls to + // checkAbort.work(...) if you make any changes to this + // method that will spend alot of time. The frequency + // of this check impacts how long + // IndexWriter.close(false) takes to actually stop the + // threads. + + mergedDocs = mergeFields(); + + mergeTerms(); + mergeNorms(); + + if (mergeDocStores && fieldInfos->hasVectors()) + mergeVectors(); + + return mergedDocs; +} + +void SegmentMerger::closeReaders(){ + for (uint32_t i = 0; i < readers.size(); i++) { // close readers + IndexReader* reader = readers[i]; + reader->close(); + } +} + +void SegmentMerger::createCompoundFile(const char* filename, std::vector* files){ + CompoundFileWriter* cfsWriter = _CLNEW CompoundFileWriter(directory, filename, checkAbort); + + bool ownFiles = false; + if ( files == NULL ){ + files = new vector; + files->reserve(IndexFileNames::COMPOUND_EXTENSIONS().length + 1); + ownFiles = true; + } + + // Basic files + for (int32_t i = 0; i < IndexFileNames::COMPOUND_EXTENSIONS().length; i++) { + const char* ext = IndexFileNames::COMPOUND_EXTENSIONS()[i]; + if (mergeDocStores || (strcmp(ext,IndexFileNames::FIELDS_EXTENSION) != 0 && + strcmp(ext,IndexFileNames::FIELDS_INDEX_EXTENSION) != 0 ) ){ + files->push_back ( string(segment) + "." + ext ); + } + } + + // Field norm files + for (size_t i = 0; i < fieldInfos->size(); i++) { + FieldInfo* fi = fieldInfos->fieldInfo(i); + if (fi->isIndexed && !fi->omitNorms) { + files->push_back ( segment + "." + IndexFileNames::NORMS_EXTENSION ); + break; + } + } + + // Vector files + if ( mergeDocStores && fieldInfos->hasVectors()) { + for (int32_t i = 0; i < IndexFileNames::VECTOR_EXTENSIONS().length; i++) { + files->push_back ( segment + "." + IndexFileNames::VECTOR_EXTENSIONS()[i] ); + } + } + + // Now merge all added files + for ( size_t i=0;isize();i++ ){ + cfsWriter->addFile( (*files)[i].c_str()); + } + + // Perform the merge + cfsWriter->close(); + _CLDELETE(cfsWriter); + if ( ownFiles ) delete files; +} + +void SegmentMerger::addIndexed(IndexReader* reader, FieldInfos* fieldInfos, StringArrayWithDeletor& names, + bool storeTermVectors, bool storePositionWithTermVector, + bool storeOffsetWithTermVector, bool storePayloads){ + + StringArrayWithDeletor::const_iterator itr = names.begin(); + while ( itr != names.end() ){ + fieldInfos->add(*itr, true, + storeTermVectors, storePositionWithTermVector, + storeOffsetWithTermVector, !reader->hasNorms(*itr), storePayloads); + + ++itr; + } +} + + +// for merging we don't want to compress/uncompress the data, so to tell the FieldsReader that we're +// in merge mode, we use this FieldSelector +class FieldSelectorMerge: public FieldSelector{ +public: + FieldSelectorResult accept(const TCHAR* /*fieldName*/) const{ + return FieldSelector::LOAD_FOR_MERGE; + } +}; + + +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. + + if (!mergeDocStores) { + // When we are not merging by doc stores, that means + // all segments were written as part of a single + // autoCommit=false IndexWriter session, so their field + // name -> number mapping are the same. So, we start + // with the fieldInfos of the last segment in this + // case, to keep that numbering. + assert(readers[readers.size()-1]->instanceOf(SegmentReader::getClassName())); + assert(false);//check last...and remove if correct... + SegmentReader* sr = (SegmentReader*)readers[readers.size()-1]; + fieldInfos = sr->fieldInfos()->clone(); + } else { + //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; + + //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"); + + if (reader->instanceOf(SegmentReader::getClassName())) { + SegmentReader* segmentReader = (SegmentReader*) reader; + for (size_t j = 0; j < segmentReader->getFieldInfos()->size(); j++) { + FieldInfo* fi = segmentReader->getFieldInfos()->fieldInfo(j); + fieldInfos->add(fi->name, fi->isIndexed, fi->storeTermVector, + fi->storePositionWithTermVector, fi->storeOffsetWithTermVector, + !reader->hasNorms(fi->name), fi->storePayloads); + } + } else { + StringArrayWithDeletor tmp; + + tmp.clear(); reader->getFieldNames(IndexReader::TERMVECTOR_WITH_POSITION_OFFSET, tmp); + addIndexed(reader, fieldInfos, tmp, true, true, true, false); + + tmp.clear(); reader->getFieldNames(IndexReader::TERMVECTOR_WITH_POSITION, tmp); + addIndexed(reader, fieldInfos, tmp, true, true, false, false); + + tmp.clear(); reader->getFieldNames(IndexReader::TERMVECTOR_WITH_OFFSET, tmp); + addIndexed(reader, fieldInfos, tmp, true, false, true, false); + + tmp.clear(); reader->getFieldNames(IndexReader::TERMVECTOR, tmp); + addIndexed(reader, fieldInfos, tmp, true, false, false, false); + + tmp.clear(); reader->getFieldNames(IndexReader::STORES_PAYLOADS, tmp); + addIndexed(reader, fieldInfos, tmp, false, false, false, true); + + tmp.clear(); reader->getFieldNames(IndexReader::INDEXED, tmp); + addIndexed(reader, fieldInfos, tmp, false, false, false, false); + + tmp.clear(); reader->getFieldNames(IndexReader::UNINDEXED, tmp); + if ( tmp.size() > 0 ){ + TCHAR** arr = _CL_NEWARRAY(TCHAR*,tmp.size()+1); + tmp.toArray_nullTerminated(arr); + fieldInfos->add((const TCHAR**)arr, false); + _CLDELETE_ARRAY(arr); //no need to delete the contents, since tmp is responsible for it + } + } + } + + //Write the new FieldInfos file to the directory + fieldInfos->write(directory, Misc::segmentname(segment.c_str(),".fnm").c_str() ); + + int32_t docCount = 0; + + if (mergeDocStores) { + + // If the i'th reader is a SegmentReader and has + // identical fieldName -> number mapping, then this + // array will be non-NULL at position i: + ValueArray matchingSegmentReaders(readers.size()); + + // If this reader is a SegmentReader, and all of its + // field name -> number mappings match the "merged" + // FieldInfos, then we can do a bulk copy of the + // stored fields: + for (size_t i = 0; i < readers.size(); i++) { + IndexReader* reader = readers[i]; + if (reader->instanceOf(SegmentReader::getClassName())) { + SegmentReader* segmentReader = (SegmentReader*) reader; + bool same = true; + FieldInfos* segmentFieldInfos = segmentReader->getFieldInfos(); + for (size_t j = 0; same && j < segmentFieldInfos->size(); j++) + same = _tcscmp(fieldInfos->fieldName(j), segmentFieldInfos->fieldName(j)) == 0; + if (same) { + matchingSegmentReaders.values[i] = segmentReader; + } + } + } + + // Used for bulk-reading raw bytes for stored fields + ValueArray rawDocLengths(MAX_RAW_MERGE_DOCS); + + // merge field values + FieldsWriter fieldsWriter(directory, segment.c_str(), fieldInfos); + + try { + for (size_t i = 0; i < readers.size(); i++) { + IndexReader* reader = readers[i]; + SegmentReader* matchingSegmentReader = matchingSegmentReaders[i]; + FieldsReader* matchingFieldsReader; + if (matchingSegmentReader != NULL) + matchingFieldsReader = matchingSegmentReader->getFieldsReader(); + else + matchingFieldsReader = NULL; + const int32_t maxDoc = reader->maxDoc(); + Document doc; + FieldSelectorMerge fieldSelectorMerge; + for (int32_t j = 0; j < maxDoc;) { + if (!reader->isDeleted(j)) { // skip deleted docs + if (matchingSegmentReader != NULL) { + // We can optimize this case (doing a bulk + // byte copy) since the field numbers are + // identical + int32_t start = j; + int32_t numDocs = 0; + do { + j++; + numDocs++; + } while(j < maxDoc && !matchingSegmentReader->isDeleted(j) && numDocs < MAX_RAW_MERGE_DOCS); + + IndexInput* stream = matchingFieldsReader->rawDocs(rawDocLengths.values, start, numDocs); + fieldsWriter.addRawDocuments(stream, rawDocLengths.values, numDocs); + docCount += numDocs; + if (checkAbort != NULL) + checkAbort->work(300*numDocs); + } else { + doc.clear(); + reader->document(j, doc, &fieldSelectorMerge); + fieldsWriter.addDocument(&doc); + j++; + docCount++; + if (checkAbort != NULL) + checkAbort->work(300); + } + } else + j++; + } + } + } _CLFINALLY ( + fieldsWriter.close(); + ) + + CND_PRECONDITION (docCount*8 == directory->fileLength( (segment + "." + IndexFileNames::FIELDS_INDEX_EXTENSION).c_str() ), + (string("after mergeFields: fdx size mismatch: ") + Misc::toString(docCount) + " docs vs " + Misc::toString(directory->fileLength( (segment + "." + IndexFileNames::FIELDS_INDEX_EXTENSION).c_str() )) + " length in bytes of " + segment + "." + IndexFileNames::FIELDS_INDEX_EXTENSION).c_str() ); + + } else{ + // If we are skipping the doc stores, that means there + // are no deletions in any of these segments, so we + // just sum numDocs() of each segment to get total docCount + for (size_t i = 0; i < readers.size(); i++) + docCount += readers[i]->numDocs(); + } + return docCount; +} + + +void SegmentMerger::mergeVectors(){ + TermVectorsWriter* termVectorsWriter = + _CLNEW TermVectorsWriter(directory, segment.c_str(), 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; + + ArrayBase* tmp = reader->getTermFreqVectors(docNum); +// if ( tmp != NULL ){ + termVectorsWriter->addAllDocVectors(tmp); + _CLLDELETE(tmp); +// } + if (checkAbort != NULL) + checkAbort->work(300); + } + } + }_CLFINALLY( + if ( termVectorsWriter != NULL ){ + termVectorsWriter->close(); + _CLDELETE(termVectorsWriter); + } + ); + + CND_PRECONDITION(4+mergedDocs*8 == directory->fileLength( (segment + "." + IndexFileNames::VECTORS_INDEX_EXTENSION).c_str() ), + (string("after mergeVectors: tvx size mismatch: ") + Misc::toString(mergedDocs) + " docs vs " + Misc::toString(directory->fileLength( (segment + "." + IndexFileNames::VECTORS_INDEX_EXTENSION).c_str() )) + " length in bytes of " + segment + "." + IndexFileNames::VECTORS_INDEX_EXTENSION).c_str() ) + +} + + +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{ + //Open an IndexOutput to the new Frequency File + freqOutput = directory->createOutput( Misc::segmentname(segment.c_str(),".frq").c_str() ); + + //Open an IndexOutput to the new Prox File + proxOutput = directory->createOutput( Misc::segmentname(segment.c_str(),".prx").c_str() ); + + //Instantiate a new termInfosWriter which will write in directory + //for the segment name segment using the new merged fieldInfos + termInfosWriter = _CLNEW TermInfosWriter(directory, segment.c_str(), 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; + maxSkipLevels = termInfosWriter->maxSkipLevels; + skipListWriter = _CLNEW DefaultSkipListWriter(skipInterval, maxSkipLevels, mergedDocs, freqOutput, proxOutput); + queue = _CLNEW SegmentMergeQueue(readers.size()); + + //And merge the Term Infos + mergeTermInfos(); + }_CLFINALLY( + if ( freqOutput != NULL ){ + freqOutput->close(); + _CLDELETE(freqOutput); + } + if ( proxOutput != NULL ){ + proxOutput->close(); + _CLDELETE(proxOutput); + } + if ( termInfosWriter != NULL ){ + termInfosWriter->close(); + _CLDELETE(termInfosWriter); + } + 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()); + + //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(); + } + int32_t df = mergeTermInfo(match, matchSize); // add new TermInfo + if (checkAbort != NULL) + checkAbort->work(df/3.0); + + //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); +} + +int32_t SegmentMerger::mergeTermInfo( SegmentMergeInfo** smis, int32_t n){ +//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, n); + + int64_t skipPointer = skipListWriter->writeSkip(freqOutput); + + //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); + } + return df; +} + + +int32_t SegmentMerger::appendPostings(SegmentMergeInfo** smis, int32_t n){ +//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 + + skipListWriter->resetSkip(); + bool storePayloads = fieldInfos->fieldInfo(smis[0]->term->field())->storePayloads; + int32_t lastPayloadLength = -1; // ensures that we write the first length + + SegmentMergeInfo* smi = NULL; + + //Iterate through all SegmentMergeInfo instances in smis + for ( int32_t i=0;igetPositions(); + assert(postings != NULL); + //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 + if (doc < 0 || (df > 0 && doc <= lastDoc)) + _CLTHROWA(CL_ERR_CorruptIndex, (string("docs out of order (") + Misc::toString(doc) + + " <= " + Misc::toString(lastDoc) + " )").c_str()); + + //Increase the total frequency over all segments + df++; + + if ((df % skipInterval) == 0) { + skipListWriter->setSkipData(lastDoc, storePayloads, lastPayloadLength); + skipListWriter->bufferSkip(df); + } + + //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); + } + + /** See {@link DocumentWriter#writePostings(Posting[], String)} for + * documentation about the encoding of positions and payloads + */ + int32_t lastPosition = 0; + // write position deltas + for (int32_t j = 0; j < freq; j++) { + //Get the next position + int32_t position = postings->nextPosition(); + int32_t delta = position - lastPosition; + if (storePayloads) { + size_t payloadLength = postings->getPayloadLength(); + if (payloadLength == lastPayloadLength) { + proxOutput->writeVInt(delta * 2); + } else { + proxOutput->writeVInt(delta * 2 + 1); + proxOutput->writeVInt(payloadLength); + lastPayloadLength = payloadLength; + } + if (payloadLength > 0) { + if ( payloadBuffer.length < payloadLength ){ + payloadBuffer.resize(payloadLength); + } + postings->getPayload(payloadBuffer.values); + proxOutput->writeBytes(payloadBuffer.values, payloadLength); + } + } else { + proxOutput->writeVInt(delta); + } + lastPosition = position; + } + } + } + + //Return total number of documents across all segments where term was found + return df; +} + +void SegmentMerger::mergeNorms() { +//Func - Merges the norms for all fields +//Pre - fieldInfos != NULL +//Post - The norms for all fields have been merged + ValueArray normBuffer; + IndexOutput* output = NULL; + try { + + CND_PRECONDITION(fieldInfos != NULL, "fieldInfos is NULL"); + + IndexReader* reader = NULL; + + //iterate through all the Field Infos instances + for (size_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){ + //Instantiate an IndexOutput to that norm file + if (output == NULL) { + output = directory->createOutput( (segment + "." + IndexFileNames::NORMS_EXTENSION).c_str() ); + output->writeBytes(NORMS_HEADER,NORMS_HEADER_length); + } + + //Condition check to see if output points to a valid instance + CND_CONDITION(output != NULL, "No Outputstream retrieved"); + + //Iterate through all IndexReaders + for (uint32_t j = 0; j < readers.size(); j++) { + //Get the i-th IndexReader + reader = readers[j]; + + //Condition check to see if reader points to a valid instance + CND_CONDITION(reader != NULL, "No reader found"); + + //Get the total number of documents including the documents that have been marked deleted + size_t maxDoc = reader->maxDoc(); + + //Get an IndexInput to the norm file for this field in this segment + if ( normBuffer.length < maxDoc ){ + normBuffer.resize(maxDoc); + memset(normBuffer.values,0,sizeof(uint8_t) * maxDoc); + } + reader->norms(fi->name, normBuffer.values); + + if (!reader->hasDeletions()) { + //optimized case for segments without deleted docs + output->writeBytes(normBuffer.values, maxDoc); + } else { + // this segment has deleted docs, so we have to + // check for every doc if it is deleted or not + + for(size_t k = 0; k < maxDoc; k++) { + //Check if document k is deleted + if (!reader->isDeleted(k)){ + //write the new norm + output->writeByte(normBuffer[k]); + } + } + } + if (checkAbort != NULL) + checkAbort->work(maxDoc); + } + } + } + }_CLFINALLY( + if ( output != NULL ){ + output->close(); + _CLDELETE(output); + } + ); +} + + +SegmentMerger::CheckAbort::CheckAbort(MergePolicy::OneMerge* merge, Directory* dir) { + this->merge = merge; + this->dir = dir; + this->workCount = 0; +} + +void SegmentMerger::CheckAbort::work(float_t units){ + workCount += units; + if (workCount >= 10000.0) { + merge->checkAborted(dir); + workCount = 0; + } +} +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/SegmentReader.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/SegmentReader.cpp new file mode 100644 index 0000000..a109e48 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/SegmentReader.cpp @@ -0,0 +1,1120 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "CLucene/util/Misc.h" +#include "_SegmentHeader.h" +#include "_MultiSegmentReader.h" +#include "_FieldInfos.h" +#include "_FieldsReader.h" +#include "IndexReader.h" +#include "_TermInfosReader.h" +#include "Terms.h" +#include "CLucene/search/Similarity.h" +#include "CLucene/store/FSDirectory.h" +#include "CLucene/util/PriorityQueue.h" +#include "_SegmentMerger.h" +#include + +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, bool _useSingleNormStream, int32_t n, int64_t ns, SegmentReader* r, const char* seg): + number(n), + normSeek(ns), + _this(r), + segment(seg), + useSingleNormStream(_useSingleNormStream), + 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 + + refCount = 1; + 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!!!!! + if ( in != _this->singleNormStream ) + _CLDELETE(in); + + //Delete the bytes array + _CLDELETE_ARRAY(bytes); + + } + void SegmentReader::Norm::doDelete(Norm* norm){ + if ( norm->refCount == 0 ){ + _CLLDELETE(norm); + } + } + + void SegmentReader::Norm::close(){ + SCOPED_LOCK_MUTEX(THIS_LOCK) + if (in != NULL && !useSingleNormStream) { + in->close(); + _CLDELETE(in); + } + in = NULL; + } + + void SegmentReader::Norm::incRef() { + SCOPED_LOCK_MUTEX(THIS_LOCK) + assert (refCount > 0); + refCount++; + } + + void SegmentReader::Norm::decRef(){ + SCOPED_LOCK_MUTEX(THIS_LOCK) + assert (refCount > 0); + if (refCount == 1) { + close(); + } + refCount--; + } + void SegmentReader::Norm::reWrite(SegmentInfo* si){ + // NOTE: norms are re-written in regular directory, not cfs + si->advanceNormGen(this->number); + IndexOutput* out = _this->directory()->createOutput(si->getNormFileName(this->number).c_str()); + try { + out->writeBytes(bytes, _this->maxDoc()); + }_CLFINALLY( + out->close(); + _CLDELETE(out) + ); + this->dirty = false; + } + + void SegmentReader::initialize(SegmentInfo* si, int32_t readBufferSize, bool doOpenStores, bool doingReopen){ + //Pre - si-> is a valid reference to SegmentInfo instance + // identified by si-> + //Post - All files of the segment have been read + + this->deletedDocs = NULL; + this->ones = NULL; + //There are no documents yet marked as deleted + this->deletedDocsDirty = false; + + this->normsDirty=false; + this->undeleteAll=false; + + this->rollbackDeletedDocsDirty = false; + this->rollbackNormsDirty = false; + this->rollbackUndeleteAll = false; + + //Duplicate the name of the segment from SegmentInfo to segment + this->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 + this->freqStream = NULL; + this->proxStream = NULL; + this->singleNormStream = NULL; + this->termVectorsReaderOrig = NULL; + this->_fieldInfos = NULL; + this->tis = NULL; + this->fieldsReader = NULL; + this->cfsReader = NULL; + this->storeCFSReader = NULL; + + this->segment = si->name; + this->si = si; + this->readBufferSize = readBufferSize; + + if ( doingReopen ) return; // the rest is done in the reopen code... + + bool success = false; + + try { + // Use compound file directory for some files, if it exists + Directory* cfsDir = directory(); + if (si->getUseCompoundFile()) { + cfsReader = _CLNEW CompoundFileReader(directory(), (segment + "." + IndexFileNames::COMPOUND_FILE_EXTENSION).c_str(), readBufferSize); + cfsDir = cfsReader; + } + + Directory* storeDir; + + if (doOpenStores) { + if (si->getDocStoreOffset() != -1) { + if (si->getDocStoreIsCompoundFile()) { + storeCFSReader = _CLNEW CompoundFileReader(directory(), (si->getDocStoreSegment() + "." + IndexFileNames::COMPOUND_FILE_STORE_EXTENSION).c_str(), readBufferSize); + storeDir = storeCFSReader; + } else { + storeDir = directory(); + } + } else { + storeDir = cfsDir; + } + } else + storeDir = NULL; + + // No compound file exists - use the multi-file format + _fieldInfos = _CLNEW FieldInfos(cfsDir, (segment + ".fnm").c_str() ); + + string fieldsSegment; + + if (si->getDocStoreOffset() != -1) + fieldsSegment = si->getDocStoreSegment(); + else + fieldsSegment = segment; + + if (doOpenStores) { + fieldsReader = _CLNEW FieldsReader(storeDir, fieldsSegment.c_str(), _fieldInfos, readBufferSize, + si->getDocStoreOffset(), si->docCount); + + // Verify two sources of "maxDoc" agree: + if (si->getDocStoreOffset() == -1 && fieldsReader->size() != si->docCount) { + string err = "doc counts differ for segment "; + err += si->name; + err += ": fieldsReader shows "; + err += fieldsReader->size(); + err += " but segmentInfo shows "; + err += si->docCount; + _CLTHROWA(CL_ERR_CorruptIndex, err.c_str() ); + } + } + + tis = _CLNEW TermInfosReader(cfsDir, segment.c_str(), _fieldInfos, readBufferSize); + + loadDeletedDocs(); + + // 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 = cfsDir->openInput( (segment + ".frq").c_str(), readBufferSize); + proxStream = cfsDir->openInput( (segment + ".prx").c_str(), readBufferSize); + openNorms(cfsDir, readBufferSize); + + if (doOpenStores && _fieldInfos->hasVectors()) { // open term vector files only as needed + string vectorsSegment; + if (si->getDocStoreOffset() != -1) + vectorsSegment = si->getDocStoreSegment(); + else + vectorsSegment = segment; + termVectorsReaderOrig = _CLNEW TermVectorsReader(storeDir, vectorsSegment.c_str(), _fieldInfos, readBufferSize, si->getDocStoreOffset(), si->docCount); + } + success = true; + } _CLFINALLY ( + + // With lock-less commits, it's entirely possible (and + // fine) to hit a FileNotFound exception above. In + // this case, we want to explicitly close any subset + // of things that were opened so that we don't have to + // wait for a GC to do so. + if (!success) { + doClose(); + } + ) + } + + SegmentReader* SegmentReader::get(SegmentInfo* si, bool doOpenStores) { + return get(si->dir, si, NULL, false, false, BufferedIndexInput::BUFFER_SIZE, doOpenStores); + } + + SegmentReader* SegmentReader::get(SegmentInfo* si, int32_t readBufferSize, bool doOpenStores){ + return get(si->dir, si, NULL, false, false, readBufferSize, doOpenStores); + } + SegmentReader* SegmentReader::get(SegmentInfos* sis, SegmentInfo* si, + bool closeDir) { + return get(si->dir, si, sis, closeDir, true, BufferedIndexInput::BUFFER_SIZE, true); + } + /** + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + SegmentReader* SegmentReader::get(Directory* dir, SegmentInfo* si, + SegmentInfos* sis, + bool closeDir, bool ownDir, + int32_t readBufferSize, + bool doOpenStores){ + SegmentReader* instance = _CLNEW SegmentReader(); //todo: make this configurable... + instance->init(dir, sis, closeDir); + instance->initialize(si, readBufferSize==-1 ? BufferedIndexInput::BUFFER_SIZE : readBufferSize, doOpenStores, false); + return instance; + } + + SegmentReader::SegmentReader(): + DirectoryIndexReader(), + _norms(false,true) + { + } + 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); + //termVectorsLocal->unregister(this); + } + + void SegmentReader::commitChanges(){ + if (deletedDocsDirty) { // re-write deleted + si->advanceDelGen(); + + // We can write directly to the actual name (vs to a + // .tmp & renaming it) because the file is not live + // until segments file is written: + deletedDocs->write(directory(), si->getDelFileName().c_str()); + } + if (undeleteAll && si->hasDeletions()) { + si->clearDelGen(); + } + if (normsDirty) { // re-write norms + si->setNumFields(_fieldInfos->size()); + NormsType::iterator it = _norms.begin(); + while (it != _norms.end()) { + Norm* norm = it->second; + if (norm->dirty) { + norm->reWrite(si); + } + it++; + } + } + 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 + + _CLDELETE(deletedDocs); + + // close the single norms stream + if (singleNormStream != NULL) { + // we can close this stream, even if the norms + // are shared, because every reader has it's own + // singleNormStream + singleNormStream->close(); + _CLDELETE(singleNormStream); + } + + // re-opened SegmentReaders have their own instance of FieldsReader + if (fieldsReader != NULL) { + fieldsReader->close(); + _CLDELETE(fieldsReader); + } + + if (tis != NULL) { + tis->close(); + _CLDELETE(tis); + } + + //Close the frequency stream + if (freqStream != NULL){ + freqStream->close(); + _CLDELETE(freqStream); + } + //Close the prox stream + if (proxStream != NULL){ + proxStream->close(); + _CLDELETE(proxStream); + } + + if (termVectorsReaderOrig != NULL){ + termVectorsReaderOrig->close(); + _CLDELETE(termVectorsReaderOrig); + } + + if (cfsReader != NULL){ + cfsReader->close(); + _CLDECDELETE(cfsReader); + } + + if (storeCFSReader != NULL){ + storeCFSReader->close(); + _CLDELETE(storeCFSReader); + } + + this->decRefNorms(); + _norms.clear(); + + // maybe close directory + DirectoryIndexReader::doClose(); + } + + bool SegmentReader::hasDeletions() const{ + // Don't call ensureOpen() here (it could affect performance) + return deletedDocs != NULL; + } + + //static + bool SegmentReader::usesCompoundFile(SegmentInfo* si) { + return si->getUseCompoundFile(); + } + + //static + bool SegmentReader::hasSeparateNorms(SegmentInfo* si) { + return si->hasSeparateNorms(); + } + + 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 + + // Don't call ensureOpen() here (it could affect performance) + return si->hasDeletions(); + } + + //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(vector& retarray) { + //Func - Returns all file names managed by this SegmentReader + //Pre - segment != NULL + //Post - All filenames managed by this SegmentRead have been returned + vector tmp = si->files(); + retarray.insert(retarray.end(),tmp.begin(),tmp.end()); + } + + TermEnum* SegmentReader::terms() { + //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"); + + ensureOpen(); + return tis->terms(); + } + + TermEnum* SegmentReader::terms(const Term* t) { + //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"); + + ensureOpen(); + return tis->terms(t); + } + + bool SegmentReader::document(int32_t n, Document& doc, const FieldSelector* fieldSelector) { + //Func - writes the fields of document n into doc + //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) + + ensureOpen(); + + 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, fieldSelector); + } + + + 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 + bool ret = (deletedDocs != NULL && deletedDocs->get(n)); + + return ret; + } + + TermDocs* SegmentReader::termDocs() { + //Func - Returns an unpositioned TermDocs enumerator. + //Pre - true + //Post - An unpositioned TermDocs enumerator has been returned + + ensureOpen(); + return _CLNEW SegmentTermDocs(this); + } + + TermPositions* SegmentReader::termPositions() { + //Func - Returns an unpositioned TermPositions enumerator. + //Pre - true + //Post - An unpositioned TermPositions enumerator has been returned + + ensureOpen(); + return _CLNEW SegmentTermPositions(this); + } + + int32_t SegmentReader::docFreq(const Term* t) { + //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 + + ensureOpen(); + + //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; + } + else + //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 + + ensureOpen(); + + //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 + + // Don't call ensureOpen() here (it could affect performance) + + return si->docCount; + } + + + void SegmentReader::setTermInfosIndexDivisor(int32_t indexDivisor){ + tis->setIndexDivisor(indexDivisor); + } + + int32_t SegmentReader::getTermInfosIndexDivisor() { + return tis->getIndexDivisor(); + } + + +void SegmentReader::getFieldNames(FieldOption fldOption, StringArrayWithDeletor& retarray){ + ensureOpen(); + + size_t len = _fieldInfos->size(); + for (size_t i = 0; i < len; i++) { + FieldInfo* fi = _fieldInfos->fieldInfo(i); + bool v=false; + if (fldOption & IndexReader::ALL) { + v=true; + }else { + if (!fi->isIndexed && (fldOption & IndexReader::UNINDEXED) ) + v=true; + else if (fi->isIndexed && (fldOption & IndexReader::INDEXED) ) + v=true; + else if (fi->storePayloads && (fldOption & IndexReader::STORES_PAYLOADS) ) + v=true; + else if (fi->isIndexed && fi->storeTermVector == false && ( fldOption & IndexReader::INDEXED_NO_TERMVECTOR) ) + v=true; + else if ( (fldOption & IndexReader::TERMVECTOR) && + fi->storeTermVector == true && + fi->storePositionWithTermVector == false && + fi->storeOffsetWithTermVector == false ) + v=true; + else if (fi->isIndexed && fi->storeTermVector && (fldOption & IndexReader::INDEXED_WITH_TERMVECTOR) ) + v=true; + else if (fi->storePositionWithTermVector && fi->storeOffsetWithTermVector == false && + (fldOption & IndexReader::TERMVECTOR_WITH_POSITION)) + v=true; + else if (fi->storeOffsetWithTermVector && fi->storePositionWithTermVector == false && + (fldOption & IndexReader::TERMVECTOR_WITH_OFFSET) ) + v=true; + else 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){ + ensureOpen(); + 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) + + ensureOpen(); + Norm* norm = _norms.get(field); + if ( norm == NULL ){ + memcpy(bytes, fakeNorms(), maxDoc()); + return; + } + + + {SCOPED_LOCK_MUTEX(norm->THIS_LOCK) + if (norm->bytes != NULL) { // can copy from cache + memcpy(bytes, norm->bytes, maxDoc()); + return; + } + + // Read from disk. norm.in may be shared across multiple norms and + // should only be used in a synchronized context. + IndexInput* normStream; + if (norm->useSingleNormStream) { + normStream = singleNormStream; + } else { + normStream = norm->in; + } + normStream->seek(norm->normSeek); + normStream->readBytes(bytes, maxDoc()); + } + } + + uint8_t* SegmentReader::createFakeNorms(int32_t size) { + uint8_t* ones = _CL_NEWARRAY(uint8_t,size); + if ( size > 0 ) + 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 + + {SCOPED_LOCK_MUTEX(norm->THIS_LOCK) + if (norm->bytes == NULL) { // value not yet read + uint8_t* bytes = _CL_NEWARRAY(uint8_t, maxDoc()); + norms(field, bytes); + norm->bytes = bytes; // cache it + // it's OK to close the underlying IndexInput as we have cached the + // norms and will never read them again. + norm->close(); + } + return norm->bytes; + } + } + + void SegmentReader::decRefNorms(){ + SCOPED_LOCK_MUTEX(THIS_LOCK) + NormsType::iterator it = _norms.begin(); + while (it != _norms.end()) { + Norm* norm = it->second; + norm->decRef(); + it++; + } + } + + DirectoryIndexReader* SegmentReader::doReopen(SegmentInfos* infos){ + SCOPED_LOCK_MUTEX(THIS_LOCK) + DirectoryIndexReader* newReader; + + if (infos->size() == 1) { + SegmentInfo* si = infos->info(0); + if (segment.compare(si->name)==0 && si->getUseCompoundFile() == this->si->getUseCompoundFile()) { + newReader = reopenSegment(si); + } else { + // segment not referenced anymore, reopen not possible + // or segment format changed + newReader = SegmentReader::get(infos, infos->info(0), false); + } + } else { + ValueArray readers(1); + readers.values[0] = this; + return _CLNEW MultiSegmentReader(_directory, infos, closeDirectory, &readers, NULL, NULL); + } + + return newReader; + } + + + 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) + ensureOpen(); + 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 + } + + + string SegmentReader::SegmentName(const char* 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 != NULL, "ext is NULL"); + + return Misc::segmentname(segment.c_str(),ext,x); + } + + void SegmentReader::openNorms(Directory* cfsDir, int32_t readBufferSize) { + //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 + int64_t nextNormSeek = SegmentMerger::NORMS_HEADER_length; //skip header (header unused for now) + int32_t _maxDoc = maxDoc(); + for (size_t i = 0; i < _fieldInfos->size(); i++) { + FieldInfo* fi = _fieldInfos->fieldInfo(i); + if (_norms.find(fi->name) != _norms.end()) { + // in case this SegmentReader is being re-opened, we might be able to + // reuse some norm instances and skip loading them here + continue; + } + if (fi->isIndexed && !fi->omitNorms) { + Directory* d = directory(); + string fileName = si->getNormFileName(fi->number); + if (!si->hasSeparateNorms(fi->number)) { + d = cfsDir; + } + + // singleNormFile means multiple norms share this file + string ext = string(".") + IndexFileNames::NORMS_EXTENSION; + bool singleNormFile = fileName.compare(fileName.length()-ext.length(),ext.length(),ext)==0; + IndexInput* normInput = NULL; + int64_t normSeek; + + if (singleNormFile) { + normSeek = nextNormSeek; + if (singleNormStream==NULL) { + singleNormStream = d->openInput(fileName.c_str(), readBufferSize); + } + // All norms in the .nrm file can share a single IndexInput since + // they are only used in a synchronized context. + // If this were to change in the future, a clone could be done here. + normInput = singleNormStream; + } else { + normSeek = 0; + normInput = d->openInput(fileName.c_str()); + } + + _norms[fi->name] = _CLNEW Norm(normInput, singleNormFile, fi->number, normSeek, this, segment.c_str()); + nextNormSeek += _maxDoc; // increment also if some norms are separate + } + } + } + + + TermVectorsReader* SegmentReader::getTermVectorsReader() { + TermVectorsReader* tvReader = termVectorsLocal.get(); + if (tvReader == NULL) { + tvReader = termVectorsReaderOrig->clone(); + termVectorsLocal.set(tvReader); + } + return tvReader; + } + + FieldsReader* SegmentReader::getFieldsReader() { + return fieldsReader; + } + + FieldInfos* SegmentReader::getFieldInfos() { + return _fieldInfos; + } + + TermFreqVector* SegmentReader::getTermFreqVector(int32_t docNumber, const TCHAR* field){ + ensureOpen(); + if ( field != NULL ){ + // Check if this field is invalid or has no stored term vector + FieldInfo* fi = _fieldInfos->fieldInfo(field); + if (fi == NULL || !fi->storeTermVector || termVectorsReaderOrig == NULL ) + return NULL; + } + TermVectorsReader* termVectorsReader = getTermVectorsReader(); + if (termVectorsReader == NULL) + return NULL; + return termVectorsReader->get(docNumber, field); + } + + ArrayBase* SegmentReader::getTermFreqVectors(int32_t docNumber) { + ensureOpen(); + if (termVectorsReaderOrig == NULL) + return NULL; + + TermVectorsReader* termVectorsReader = getTermVectorsReader(); + if (termVectorsReader == NULL) + return NULL; + + return termVectorsReader->get(docNumber); + } + + + + void SegmentReader::getTermFreqVector(int32_t docNumber, const TCHAR* field, TermVectorMapper* mapper) { + ensureOpen(); + FieldInfo* fi = _fieldInfos->fieldInfo(field); + if (fi == NULL || !fi->storeTermVector || termVectorsReaderOrig == NULL) + return; + + TermVectorsReader* termVectorsReader = getTermVectorsReader(); + if (termVectorsReader == NULL) + { + return; + } + + + termVectorsReader->get(docNumber, field, mapper); + } + + + void SegmentReader::getTermFreqVector(int32_t docNumber, TermVectorMapper* mapper){ + ensureOpen(); + if (termVectorsReaderOrig == NULL) + return; + + TermVectorsReader* termVectorsReader = getTermVectorsReader(); + if (termVectorsReader == NULL) + return; + + termVectorsReader->get(docNumber, mapper); + } + + + void SegmentReader::loadDeletedDocs(){ + // NOTE: the bitvector is stored using the regular directory, not cfs + if (hasDeletions(si)) { + deletedDocs = _CLNEW BitVector(directory(), si->getDelFileName().c_str()); + + // Verify # deletes does not exceed maxDoc for this segment: + if (deletedDocs->count() > maxDoc()) { + string err = "number of deletes ("; + err += deletedDocs->count(); + err += ") exceeds max doc ("; + err += maxDoc(); + err += ") for segment "; + err += si->name; + _CLTHROWA(CL_ERR_CorruptIndex, err.c_str()); + } + } + } + + SegmentReader* SegmentReader::reopenSegment(SegmentInfo* si){ + SCOPED_LOCK_MUTEX(THIS_LOCK) + bool deletionsUpToDate = (this->si->hasDeletions() == si->hasDeletions()) + && (!si->hasDeletions() || this->si->getDelFileName().compare(si->getDelFileName())==0 ); + bool normsUpToDate = true; + + + ValueArrayfieldNormsChanged(_fieldInfos->size()); + if (normsUpToDate) { + for (size_t i = 0; i < _fieldInfos->size(); i++) { + if (this->si->getNormFileName(i).compare(si->getNormFileName(i)) != 0) { + normsUpToDate = false; + fieldNormsChanged.values[i] = true; + } + } + } + + if (normsUpToDate && deletionsUpToDate) { + this->si = si; //force the result to use the new segment info (the old one is going to go away!) + return this; + } + + + // clone reader + SegmentReader* clone = NULL; + bool success = false; + try { + clone = _CLNEW SegmentReader(); + clone->init(_directory, NULL, false); + clone->initialize(si, readBufferSize, false, true); + clone->cfsReader = cfsReader; + clone->storeCFSReader = storeCFSReader; + clone->_fieldInfos = _fieldInfos; + clone->tis = tis; + clone->freqStream = freqStream; + clone->proxStream = proxStream; + clone->termVectorsReaderOrig = termVectorsReaderOrig; + + // we have to open a new FieldsReader, because it is not thread-safe + // and can thus not be shared among multiple SegmentReaders + // TODO: Change this in case FieldsReader becomes thread-safe in the future + string fieldsSegment; + + Directory* storeDir = directory(); + + if (si->getDocStoreOffset() != -1) { + fieldsSegment = si->getDocStoreSegment(); + if (storeCFSReader != NULL) { + storeDir = storeCFSReader; + } + } else { + fieldsSegment = segment; + if (cfsReader != NULL) { + storeDir = cfsReader; + } + } + + if (fieldsReader != NULL) { + clone->fieldsReader = _CLNEW FieldsReader(storeDir, fieldsSegment.c_str(), _fieldInfos, readBufferSize, + si->getDocStoreOffset(), si->docCount); + } + + + if (!deletionsUpToDate) { + // load deleted docs + clone->deletedDocs = NULL; + clone->loadDeletedDocs(); + } else { + clone->deletedDocs = this->deletedDocs; + } + + if (!normsUpToDate) { + // load norms + for (size_t i = 0; i < fieldNormsChanged.length; i++) { + // copy unchanged norms to the cloned reader and incRef those norms + if (!fieldNormsChanged[i]) { + const TCHAR* curField = _fieldInfos->fieldInfo(i)->name; + Norm* norm = this->_norms.get(curField); + norm->incRef(); + norm->_this = clone; //give the norm to the clone + clone->_norms.put(curField, norm); + } + } + + clone->openNorms(si->getUseCompoundFile() ? cfsReader : directory(), readBufferSize); + } else { + NormsType::iterator it = _norms.begin(); + while (it != _norms.end()) { + const TCHAR* field = it->first; + Norm* norm = _norms[field]; + norm->incRef(); + norm->_this = clone; //give the norm to the clone + clone->_norms.put(field, norm); + it++; + } + } + + if (clone->singleNormStream == NULL) { + for (size_t i = 0; i < _fieldInfos->size(); i++) { + FieldInfo* fi = _fieldInfos->fieldInfo(i); + if (fi->isIndexed && !fi->omitNorms) { + Directory* d = si->getUseCompoundFile() ? cfsReader : directory(); + string fileName = si->getNormFileName(fi->number); + if (si->hasSeparateNorms(fi->number)) { + continue; + } + + string ext = string(".") + IndexFileNames::NORMS_EXTENSION; + if (fileName.compare(fileName.length()-ext.length(),ext.length(),ext)==0) { + clone->singleNormStream = d->openInput(fileName.c_str(), readBufferSize); + break; + } + } + } + } + + success = true; + } _CLFINALLY ( + if (!success) { + // An exception occured during reopen, we have to decRef the norms + // that we incRef'ed already and close singleNormsStream and FieldsReader + clone->decRefNorms(); + } + ) + + //disown this memory + this->freqStream = NULL; + this->_fieldInfos = NULL; + this->tis = NULL; + this->deletedDocs = NULL; + this->ones = NULL; + this->termVectorsReaderOrig = NULL; + this->cfsReader = NULL; + this->freqStream = NULL; + this->proxStream = NULL; + this->termVectorsReaderOrig = NULL; + this->cfsReader = NULL; + this->storeCFSReader = NULL; + _CLDELETE( this->singleNormStream ); + + return clone; + } + + + + /** Returns the field infos of this segment */ + FieldInfos* SegmentReader::fieldInfos() { + return _fieldInfos; + } + + /** + * Return the name of the segment this reader is reading. + */ + const char* SegmentReader::getSegmentName() { + return segment.c_str(); + } + + /** + * Return the SegmentInfo of the segment this reader is reading. + */ + SegmentInfo* SegmentReader::getSegmentInfo() { + return si; + } + + void SegmentReader::setSegmentInfo(SegmentInfo* info) { + si = info; + } + + void SegmentReader::startCommit() { + DirectoryIndexReader::startCommit(); + rollbackDeletedDocsDirty = deletedDocsDirty; + rollbackNormsDirty = normsDirty; + rollbackUndeleteAll = undeleteAll; + NormsType::iterator it = _norms.begin(); + while (it != _norms.end()) { + Norm* norm = it->second; + norm->rollbackDirty = norm->dirty; + } + } + + void SegmentReader::rollbackCommit() { + DirectoryIndexReader::rollbackCommit(); + deletedDocsDirty = rollbackDeletedDocsDirty; + normsDirty = rollbackNormsDirty; + undeleteAll = rollbackUndeleteAll; + NormsType::iterator it = _norms.begin(); + while (it != _norms.end()) { + Norm* norm = it->second; + norm->dirty = norm->rollbackDirty; + } + } + + const char* SegmentReader::getClassName(){ + return "SegmentReader"; + } + const char* SegmentReader::getObjectName() const{ + return getClassName(); + } + + bool SegmentReader::normsClosed() { + if (singleNormStream != NULL) { + return false; + } + NormsType::iterator it = _norms.begin(); + while ( it != _norms.end() ) { + Norm* norm = it->second; + if (norm->refCount > 0) { + return false; + } + } + return true; + } +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/SegmentTermDocs.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/SegmentTermDocs.cpp new file mode 100644 index 0000000..838a9b7 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/SegmentTermDocs.cpp @@ -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. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "_SegmentHeader.h" + +#include "CLucene/store/IndexInput.h" +#include "Term.h" +#include + +CL_NS_DEF(index) + + SegmentTermDocs::SegmentTermDocs(const SegmentReader* _parent) : parent(_parent),freqStream(_parent->freqStream->clone()), + count(0),df(0),deletedDocs(_parent->deletedDocs),_doc(0),_freq(0),skipInterval(_parent->tis->getSkipInterval()), + maxSkipLevels(_parent->tis->getMaxSkipLevels()),skipListReader(NULL),freqBasePointer(0),proxBasePointer(0), + skipPointer(0),haveSkipped(false) + { + CND_CONDITION(_parent != NULL,"Parent is NULL"); + } + + SegmentTermDocs::~SegmentTermDocs() { + close(); + } + + TermPositions* SegmentTermDocs::__asTermPositions(){ + return NULL; + } + + void SegmentTermDocs::seek(Term* term) { + TermInfo* ti = parent->tis->get(term); + seek(ti, term); + _CLDELETE(ti); + } + + void SegmentTermDocs::seek(TermEnum* termEnum){ + TermInfo* ti=NULL; + Term* term = NULL; + + // use comparison of fieldinfos to verify that termEnum belongs to the same segment as this SegmentTermDocs + if ( termEnum->getObjectName() == SegmentTermEnum::getClassName() && + ((SegmentTermEnum*)termEnum)->fieldInfos == parent->_fieldInfos ){ + SegmentTermEnum* segmentTermEnum = (SegmentTermEnum*) termEnum; + term = segmentTermEnum->term(false); + ti = segmentTermEnum->getTermInfo(); + }else{ + term = termEnum->term(false); + ti = parent->tis->get(term); + } + + seek(ti,term); + _CLDELETE(ti); + } + void SegmentTermDocs::seek(const TermInfo* ti,Term* term) { + count = 0; + FieldInfo* fi = parent->_fieldInfos->fieldInfo(term->field()); + currentFieldStoresPayloads = (fi != NULL) ? fi->storePayloads : false; + if (ti == NULL) { + df = 0; + } else { // punt case + df = ti->docFreq; + _doc = 0; + freqBasePointer = ti->freqPointer; + proxBasePointer = ti->proxPointer; + skipPointer = freqBasePointer + ti->skipOffset; + freqStream->seek(freqBasePointer); + haveSkipped = false; + } + } + + void SegmentTermDocs::close() { + _CLDELETE( freqStream ); + _CLDELETE( skipListReader ); + } + + 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) || (_doc >= 0 && 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 (ireadVInt(); + _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 || (_doc >= 0 && !deletedDocs->get(_doc))) { + docs[i] = _doc; + freqs[i] = _freq; + i++; + } + } + return i; + } + + bool SegmentTermDocs::skipTo(const int32_t target){ + assert(count <= df ); + + if (df >= skipInterval) { // optimized case + if (skipListReader == NULL) + skipListReader = _CLNEW DefaultSkipListReader(freqStream->clone(), maxSkipLevels, skipInterval); // lazily clone + + if (!haveSkipped) { // lazily initialize skip stream + skipListReader->init(skipPointer, freqBasePointer, proxBasePointer, df, currentFieldStoresPayloads); + haveSkipped = true; + } + + int32_t newCount = skipListReader->skipTo(target); + if (newCount > count) { + freqStream->seek(skipListReader->getFreqPointer()); + skipProx(skipListReader->getProxPointer(), skipListReader->getPayloadLength()); + + _doc = skipListReader->getDoc(); + count = newCount; + } + } + + // done skipping, now just scan + do { + if (!next()) + return false; + } while (target > _doc); + return true; + } + + +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/SegmentTermEnum.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/SegmentTermEnum.cpp new file mode 100644 index 0000000..17191f6 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/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/_ApiHeader.h" +#include "_SegmentHeader.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; + maxSkipLevels = 1; + + //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_CorruptIndex,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(); + if ( format == -3 ) { + // this new format introduces multi-level skipping + maxSkipLevels = 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; + maxSkipLevels = clone.maxSkipLevels; + + //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 + if ( buffer != NULL ) 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); + } + } + + const char* SegmentTermEnum::getObjectName() const{ return getClassName(); } + const char* SegmentTermEnum::getClassName(){ return "SegmentTermEnum"; } + + 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 ){ + if ( _LUCENE_ATOMIC_INT_GET(prev->__cl_refcount) > 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(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 || _LUCENE_ATOMIC_INT_GET(_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(bufferLength) < totalLength+1) + growBuffer(totalLength, false); //dont copy the buffer over. + + //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 < 8 ) + bufferLength = length+8; + 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/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/SegmentTermPositions.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/SegmentTermPositions.cpp new file mode 100644 index 0000000..e439a1c --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/SegmentTermPositions.cpp @@ -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. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "_SegmentHeader.h" + +#include "Terms.h" + +CL_NS_USE(util) +CL_NS_DEF(index) + +SegmentTermPositions::SegmentTermPositions(const SegmentReader* _parent): + SegmentTermDocs(_parent), proxStream(NULL)// the proxStream will be cloned lazily when nextPosition() is called for the first time + ,lazySkipPointer(-1), lazySkipProxCount(0) +{ + CND_CONDITION(_parent != NULL, "Parent is NULL"); +} + +SegmentTermPositions::~SegmentTermPositions() { + close(); +} + +TermDocs* SegmentTermPositions::__asTermDocs(){ + return (TermDocs*) this; +} +TermPositions* SegmentTermPositions::__asTermPositions(){ + return (TermPositions*) this; +} + +void SegmentTermPositions::seek(const TermInfo* ti, Term* term) { + SegmentTermDocs::seek(ti, term); + if (ti != NULL) + lazySkipPointer = ti->proxPointer; + + lazySkipProxCount = 0; + proxCount = 0; + payloadLength = 0; + needToLoadPayload = false; +} + +void SegmentTermPositions::close() { + SegmentTermDocs::close(); + //Check if proxStream still exists + if(proxStream){ + proxStream->close(); + _CLDELETE( proxStream ); + } +} + +int32_t SegmentTermPositions::nextPosition() { + // perform lazy skips if neccessary + lazySkip(); + proxCount--; + return position += readDeltaPosition(); +} + +int32_t SegmentTermPositions::readDeltaPosition() { + int32_t delta = proxStream->readVInt(); + if (currentFieldStoresPayloads) { + // if the current field stores payloads then + // the position delta is shifted one bit to the left. + // if the LSB is set, then we have to read the current + // payload length + if ((delta & 1) != 0) { + payloadLength = proxStream->readVInt(); + } + delta = (int32_t)((uint32_t)delta >> (uint32_t)1); + needToLoadPayload = true; + } + return delta; +} + +void SegmentTermPositions::skippingDoc() { + lazySkipProxCount += _freq; +} + +bool SegmentTermPositions::next() { + // we remember to skip the remaining positions of the current + // document lazily + lazySkipProxCount += proxCount; + + 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_UnsupportedOperation,"TermPositions does not support processing multiple documents in one call. Use TermDocs instead."); +} + +void SegmentTermPositions::skipProx(const int64_t proxPointer, const int32_t _payloadLength){ + // we save the pointer, we might have to skip there lazily + lazySkipPointer = proxPointer; + lazySkipProxCount = 0; + proxCount = 0; + this->payloadLength = _payloadLength; + needToLoadPayload = false; +} + +void SegmentTermPositions::skipPositions(const int32_t n) { + for ( int32_t f = n; f > 0; f-- ) { // skip unread positions + readDeltaPosition(); + skipPayload(); + } +} + +void SegmentTermPositions::skipPayload() { + if (needToLoadPayload && payloadLength > 0) { + proxStream->seek(proxStream->getFilePointer() + payloadLength); + } + needToLoadPayload = false; +} + +void SegmentTermPositions::lazySkip() { + if (proxStream == NULL) { + // clone lazily + proxStream = parent->proxStream->clone(); + } + + // we might have to skip the current payload + // if it was not read yet + skipPayload(); + + if (lazySkipPointer != -1) { + proxStream->seek(lazySkipPointer); + lazySkipPointer = -1; + } + + if (lazySkipProxCount != 0) { + skipPositions(lazySkipProxCount); + lazySkipProxCount = 0; + } +} + +int32_t SegmentTermPositions::getPayloadLength() const { return payloadLength; } + +uint8_t* SegmentTermPositions::getPayload(uint8_t* data) { + if (!needToLoadPayload) { + _CLTHROWA(CL_ERR_IO, "Payload cannot be loaded more than once for the same term position."); + } + + // read payloads lazily + uint8_t* retArray; + // TODO: Complete length logic ( possibly using ValueArray ? ) + if (data == NULL /*|| data.length - offset < payloadLength*/) { + // the array is too small to store the payload data, + // so we allocate a new one + _CLDELETE_ARRAY(data); + retArray = _CL_NEWARRAY(uint8_t, payloadLength); + } else { + retArray = data; + } + proxStream->readBytes(retArray, payloadLength); + needToLoadPayload = false; + return retArray; +} +bool SegmentTermPositions::isPayloadAvailable() const { return needToLoadPayload && (payloadLength > 0); } + +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/SegmentTermVector.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/SegmentTermVector.cpp new file mode 100644 index 0000000..049cb6c --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/SegmentTermVector.cpp @@ -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. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "_FieldInfos.h" +#include "_TermVector.h" +#include "CLucene/util/StringBuffer.h" +#include "CLucene/util/Array.h" + +CL_NS_USE(util) +CL_NS_DEF(index) + +ValueArray SegmentTermPositionVector::EMPTY_TERM_POS; + +SegmentTermVector::SegmentTermVector(const TCHAR* _field, + ArrayBase* _terms, ArrayBase* _termFreqs) { + this->field = STRDUP_TtoT(_field); // TODO: Try and avoid this dup (using intern'ing perhaps?) + this->terms = _terms; + this->termFreqs = _termFreqs; +} + +SegmentTermVector::~SegmentTermVector(){ + _CLDELETE_LCARRAY(field); + _CLDELETE(terms); + _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->values[i] != NULL ){ + if (i>0) + sb.append(_T(", ")); + sb.append(terms->values[i]); + sb.appendChar('/'); + + sb.appendInt((*termFreqs)[i]); + } + sb.appendChar('}'); + return sb.toString(); +} + +int32_t SegmentTermVector::size() { + if ( terms == NULL ) + return 0; + + return terms->length; +} + +const CL_NS(util)::ArrayBase* SegmentTermVector::getTerms() { + return (CL_NS(util)::ArrayBase*)terms; +} + +const ArrayBase* SegmentTermVector::getTermFrequencies() { + return termFreqs; +} + +int32_t SegmentTermVector::binarySearch(const ArrayBase& a, const TCHAR* key) const +{ + int32_t low = 0; + int32_t hi = a.length - 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, termText); + return res >= 0 ? res : -1; +} + +ArrayBase* SegmentTermVector::indexesOf(const CL_NS(util)::ArrayBase& termNumbers, const int32_t start, const int32_t len) { + // 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. + ArrayBase* ret = _CLNEW ValueArray(len); + for (int32_t i=0; ivalues[i] = indexOf(termNumbers[start+ i]); + } + return ret; +} + + +SegmentTermPositionVector::SegmentTermPositionVector(const TCHAR* field, + ArrayBase* terms, ArrayBase* termFreqs, + ArrayBase< ArrayBase* >* _positions, + ArrayBase< ArrayBase* >* _offsets) + : SegmentTermVector(field,terms,termFreqs), + positions(_positions), + offsets(_offsets) +{ +} +SegmentTermPositionVector::~SegmentTermPositionVector(){ + _CLLDELETE(offsets); + _CLLDELETE(positions); +} + +ArrayBase* SegmentTermPositionVector::indexesOf(const ArrayBase& termNumbers, const int32_t start, const int32_t len) +{ + return SegmentTermVector::indexesOf(termNumbers, start, len); +} + +TermPositionVector* SegmentTermPositionVector::__asTermPositionVector(){ + return this; +} + +const ArrayBase* SegmentTermPositionVector::getOffsets(const size_t index) { + if(offsets == NULL) + return NULL; + if (index < offsets->length) + return offsets->values[index]; + else + return TermVectorOffsetInfo_EMPTY_OFFSET_INFO; +} + +const ArrayBase* SegmentTermPositionVector::getTermPositions(const size_t index) { + if(positions == NULL) + return NULL; + + if (index < positions->length) + return positions->values[index]; + else + return &EMPTY_TERM_POS; +} + +CL_NS_END + diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/SkipListReader.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/SkipListReader.cpp new file mode 100644 index 0000000..6360c18 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/SkipListReader.cpp @@ -0,0 +1,325 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "_SkipListReader.h" + +CL_NS_USE(store) +CL_NS_DEF(index) + +MultiLevelSkipListReader::MultiLevelSkipListReader(IndexInput* _skipStream, const int32_t maxSkipLevels, + const int32_t _skipInterval): + maxNumberOfSkipLevels(maxSkipLevels),numberOfLevelsToBuffer(1), + skipStream(CL_NS(util)::ObjectArray(maxSkipLevels)), + skipPointer(_CL_NEWARRAY(int64_t,maxSkipLevels)), + skipInterval(_CL_NEWARRAY(int32_t,maxSkipLevels)), + numSkipped(_CL_NEWARRAY(int32_t,maxSkipLevels)), + skipDoc(_CL_NEWARRAY(int32_t,maxSkipLevels)), + childPointer(_CL_NEWARRAY(int64_t,maxSkipLevels)) +{ + memset(this->skipPointer,0,sizeof(int64_t) * maxSkipLevels); + memset(this->skipInterval,0,sizeof(int32_t) * maxSkipLevels); + memset(this->numSkipped,0,sizeof(int32_t) * maxSkipLevels); + memset(this->skipDoc,0,sizeof(int32_t) * maxSkipLevels); + memset(this->childPointer,0,sizeof(int32_t) * maxSkipLevels); + + this->numberOfLevelsToBuffer = 0; + this->numberOfSkipLevels = 0; + this->docCount = 0; + this->lastDoc = 0; + this->lastChildPointer = 0; + this->haveSkipped = false; + this->skipStream[0] = _skipStream; + this->inputIsBuffered = _skipStream->instanceOf(BufferedIndexInput::getClassName()); + this->skipInterval[0] = _skipInterval; + for (int32_t i = 1; i < maxSkipLevels; i++) { + // cache skip intervals + this->skipInterval[i] = this->skipInterval[i - 1] * _skipInterval; + } +} +MultiLevelSkipListReader::~MultiLevelSkipListReader(){ + close(); + _CLDELETE_LARRAY(skipPointer); + _CLDELETE_LARRAY(childPointer); + _CLDELETE_LARRAY(numSkipped); + _CLDELETE_LARRAY(skipInterval); + _CLDELETE_LARRAY(skipDoc); +} + +int32_t MultiLevelSkipListReader::getDoc() const { + return lastDoc; +} + +int32_t MultiLevelSkipListReader::skipTo(const int32_t target) { + if (!haveSkipped) { + // first time, load skip levels + loadSkipLevels(); + haveSkipped = true; + } + + // walk up the levels until highest level is found that has a skip + // for this target + int32_t level = 0; + while (level < numberOfSkipLevels - 1 && target > skipDoc[level + 1]) { + level++; + } + + while (level >= 0) { + if (target > skipDoc[level]) { + if (!loadNextSkip(level)) { + continue; + } + } else { + // no more skips on this level, go down one level + if (level > 0 && lastChildPointer > skipStream[level - 1]->getFilePointer()) { + seekChild(level - 1); + } + level--; + } + } + + return numSkipped[0] - skipInterval[0] - 1; +} + +bool MultiLevelSkipListReader::loadNextSkip(const int32_t level) { + // we have to skip, the target document is greater than the current + // skip list entry + setLastSkipData(level); + + numSkipped[level] += skipInterval[level]; + + if (numSkipped[level] > docCount) { + // this skip list is exhausted + skipDoc[level] = LUCENE_INT32_MAX_SHOULDBE; + if (numberOfSkipLevels > level) numberOfSkipLevels = level; + return false; + } + + // read next skip entry + skipDoc[level] += readSkipData(level, skipStream[level]); + + if (level != 0) { + // read the child pointer if we are not on the leaf level + childPointer[level] = skipStream[level]->readVLong() + skipPointer[level - 1]; + } + return true; +} + +void MultiLevelSkipListReader::seekChild(const int32_t level) { + skipStream[level]->seek(lastChildPointer); + numSkipped[level] = numSkipped[level + 1] - skipInterval[level + 1]; + skipDoc[level] = lastDoc; + if (level > 0) { + childPointer[level] = skipStream[level]->readVLong() + skipPointer[level - 1]; + } +} + +void MultiLevelSkipListReader::close() { + for (int32_t i = 1; i < maxNumberOfSkipLevels; i++) { + if (skipStream[i] != NULL) { + //skipStream[i]->close(); + _CLDELETE(skipStream[i]); // ISH: We actually do need to nullify pointer here + } + } +} + +void MultiLevelSkipListReader::init(const int64_t _skipPointer, const int32_t df) { + this->skipPointer[0] = _skipPointer; + this->docCount = df; + memset(skipDoc,0,sizeof(int32_t) * maxNumberOfSkipLevels); + memset(numSkipped,0,sizeof(int32_t) * maxNumberOfSkipLevels); + memset(childPointer,0,sizeof(int64_t) * maxNumberOfSkipLevels); + if ( numberOfSkipLevels > 1 ) + { + for (int i=1;i maxNumberOfSkipLevels) { + numberOfSkipLevels = maxNumberOfSkipLevels; + } + + skipStream[0]->seek(skipPointer[0]); + + int32_t toBuffer = numberOfLevelsToBuffer; + + for (int32_t i = numberOfSkipLevels - 1; i > 0; i--) { + // the length of the current level + int64_t length = skipStream[0]->readVLong(); + + // the start pointer of the current level + skipPointer[i] = skipStream[0]->getFilePointer(); + if (toBuffer > 0) { + // buffer this level + skipStream[i] = _CLNEW SkipBuffer(skipStream[0], (int32_t) length); + toBuffer--; + } else { + // clone this stream, it is already at the start of the current level + skipStream[i] = skipStream[0]->clone(); + if (inputIsBuffered && length < BufferedIndexInput::BUFFER_SIZE) { + ((BufferedIndexInput*) skipStream[i])->setBufferSize((int32_t) length); + } + + // move base stream beyond the current level + skipStream[0]->seek(skipStream[0]->getFilePointer() + length); + } + } + + // use base stream for the lowest level + skipPointer[0] = skipStream[0]->getFilePointer(); +} + +void MultiLevelSkipListReader::setLastSkipData(const int32_t level) { + lastDoc = skipDoc[level]; + lastChildPointer = childPointer[level]; +} + +MultiLevelSkipListReader::SkipBuffer::SkipBuffer(IndexInput* input, const int32_t _length):pos(0) +{ + data = _CL_NEWARRAY(uint8_t,_length); + this->_datalength = _length; + pointer = input->getFilePointer(); + input->readBytes(data, _length); +} +MultiLevelSkipListReader::SkipBuffer::~SkipBuffer() +{ + _CLLDELETE(data); +} + +void MultiLevelSkipListReader::SkipBuffer::close() { + _CLDELETE(data); + _datalength=0; +} + +int64_t MultiLevelSkipListReader::SkipBuffer::getFilePointer() const { + return pointer + pos; +} + +int64_t MultiLevelSkipListReader::SkipBuffer::length() const { + return _datalength; +} + +uint8_t MultiLevelSkipListReader::SkipBuffer::readByte() { + return data[pos++]; +} + +void MultiLevelSkipListReader::SkipBuffer::readBytes(uint8_t* b, const int32_t len) { + memcpy(b,data+pos,len*sizeof(uint8_t)); + pos += len; +} + +void MultiLevelSkipListReader::SkipBuffer::seek(const int64_t _pos) { + this->pos = static_cast(_pos - pointer); +} + +const char* MultiLevelSkipListReader::SkipBuffer::getObjectName() const{ return getClassName(); } +const char* MultiLevelSkipListReader::SkipBuffer::getClassName(){ return "MultiLevelSkipListReader::SkipBuffer"; } + +const char* MultiLevelSkipListReader::SkipBuffer::getDirectoryType() const{ return "SKIP"; } +MultiLevelSkipListReader::SkipBuffer::SkipBuffer(const SkipBuffer& other): + IndexInput(other) +{ + data = _CL_NEWARRAY(uint8_t,other._datalength); + memcpy(data,other.data,other._datalength * sizeof(uint8_t)); + this->_datalength = other._datalength; + this->pointer = other.pointer; + this->pos = other.pos; +} +IndexInput* MultiLevelSkipListReader::SkipBuffer::clone() const{ + return _CLNEW SkipBuffer(*this); +} + + + + + + + +DefaultSkipListReader::DefaultSkipListReader(CL_NS(store)::IndexInput* _skipStream, const int32_t maxSkipLevels, const int32_t _skipInterval) + : MultiLevelSkipListReader(_skipStream, maxSkipLevels, _skipInterval) +{ + freqPointer = _CL_NEWARRAY(int64_t,maxSkipLevels); + proxPointer = _CL_NEWARRAY(int64_t,maxSkipLevels); + payloadLength = _CL_NEWARRAY(int32_t,maxSkipLevels); + memset(freqPointer,0, sizeof(int64_t) * maxSkipLevels); + memset(proxPointer,0, sizeof(int64_t) * maxSkipLevels); + memset(payloadLength,0, sizeof(int32_t) * maxSkipLevels); + this->lastFreqPointer = 0; + this->lastProxPointer = 0; + this->lastPayloadLength = 0; + this->currentFieldStoresPayloads = false; +} + +DefaultSkipListReader::~DefaultSkipListReader(){ + _CLDELETE_LARRAY(freqPointer); + _CLDELETE_LARRAY(proxPointer); + _CLDELETE_LARRAY(payloadLength); +} + +void DefaultSkipListReader::init(const int64_t _skipPointer, const int64_t freqBasePointer, const int64_t proxBasePointer, const int32_t df, const bool storesPayloads) { + MultiLevelSkipListReader::init(_skipPointer, df); + this->currentFieldStoresPayloads = storesPayloads; + lastFreqPointer = freqBasePointer; + lastProxPointer = proxBasePointer; + + for (int32_t j=0; jreadVInt(); + if ((delta & 1) != 0) { + payloadLength[level] = _skipStream->readVInt(); + } + delta = (int32_t)(((uint32_t)delta) >> (uint32_t)1); + } else { + delta = _skipStream->readVInt(); + } + freqPointer[level] += _skipStream->readVInt(); + proxPointer[level] += _skipStream->readVInt(); + + return delta; +} + +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/SkipListWriter.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/SkipListWriter.cpp new file mode 100644 index 0000000..e0d2f9a --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/SkipListWriter.cpp @@ -0,0 +1,176 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "_SkipListWriter.h" +#include "CLucene/util/_Arrays.h" + +CL_NS_USE(store) +CL_NS_USE(util) +CL_NS_DEF(index) + +void MultiLevelSkipListWriter::bufferSkip(int32_t df){ + int32_t numLevels; + + // determine max level + for (numLevels = 0; (df % skipInterval) == 0 && numLevels < numberOfSkipLevels; df /= skipInterval) { + numLevels++; + } + + int64_t childPointer = 0; + + for (int32_t level = 0; level < numLevels; level++) { + writeSkipData(level, (*skipBuffer)[level]); + + int64_t newChildPointer = (*skipBuffer)[level]->getFilePointer(); + + if (level != 0) { + // store child pointers for all levels except the lowest + (*skipBuffer)[level]->writeVLong(childPointer); + } + + //remember the childPointer for the next level + childPointer = newChildPointer; + } +} + +int64_t MultiLevelSkipListWriter::writeSkip(IndexOutput* output){ + int64_t skipPointer = output->getFilePointer(); + if (skipBuffer == NULL || skipBuffer->length == 0) return skipPointer; + + for (int32_t level = numberOfSkipLevels - 1; level > 0; level--) { + int64_t length = (*skipBuffer)[level]->getFilePointer(); + if (length > 0) { + output->writeVLong(length); + (*skipBuffer)[level]->writeTo(output); + } + } + (*skipBuffer)[0]->writeTo(output); + + return skipPointer; +} + +MultiLevelSkipListWriter::MultiLevelSkipListWriter(int32_t skipInterval, int32_t maxSkipLevels, int32_t df) { + this->skipBuffer = NULL; + this->skipInterval = skipInterval; + + // calculate the maximum number of skip levels for this document frequency + numberOfSkipLevels = df == 0 ? 0 : (int32_t) floor(log((float_t)df) / log((float_t)skipInterval)); + + // make sure it does not exceed maxSkipLevels + if (numberOfSkipLevels > maxSkipLevels) { + numberOfSkipLevels = maxSkipLevels; + } +} +MultiLevelSkipListWriter::~MultiLevelSkipListWriter(){ + _CLDELETE(skipBuffer); +} + +void MultiLevelSkipListWriter::init() { + skipBuffer = _CLNEW CL_NS(util)::ObjectArray(numberOfSkipLevels); + for (int32_t i = 0; i < numberOfSkipLevels; i++) { + skipBuffer->values[i] = _CLNEW RAMOutputStream; + } +} + +void MultiLevelSkipListWriter::resetSkip() { + // creates new buffers or empties the existing ones + if (skipBuffer == NULL) { + init(); + } else { + for (size_t i = 0; i < skipBuffer->length; i++) { + (*skipBuffer)[i]->reset(); + } + } +} + + + + +void DefaultSkipListWriter::setSkipData(int32_t doc, bool storePayloads, int32_t payloadLength) { + this->curDoc = doc; + this->curStorePayloads = storePayloads; + this->curPayloadLength = payloadLength; + this->curFreqPointer = freqOutput->getFilePointer(); + this->curProxPointer = proxOutput->getFilePointer(); +} + +void DefaultSkipListWriter::resetSkip() { + MultiLevelSkipListWriter::resetSkip(); + memset(lastSkipDoc, 0, numberOfSkipLevels * sizeof(int32_t) ); + Arrays::fill(lastSkipPayloadLength, numberOfSkipLevels, -1); // we don't have to write the first length in the skip list + Arrays::fill(lastSkipFreqPointer, numberOfSkipLevels, freqOutput->getFilePointer()); + Arrays::fill(lastSkipProxPointer, numberOfSkipLevels, proxOutput->getFilePointer()); +} + +void DefaultSkipListWriter::writeSkipData(int32_t level, IndexOutput* skipBuffer){ + // To efficiently store payloads in the posting lists we do not store the length of + // every payload. Instead we omit the length for a payload if the previous payload had + // the same length. + // However, in order to support skipping the payload length at every skip point must be known. + // So we use the same length encoding that we use for the posting lists for the skip data as well: + // Case 1: current field does not store payloads + // SkipDatum --> DocSkip, FreqSkip, ProxSkip + // DocSkip,FreqSkip,ProxSkip --> VInt + // DocSkip records the document number before every SkipInterval th document in TermFreqs. + // Document numbers are represented as differences from the previous value in the sequence. + // Case 2: current field stores payloads + // SkipDatum --> DocSkip, PayloadLength?, FreqSkip,ProxSkip + // DocSkip,FreqSkip,ProxSkip --> VInt + // PayloadLength --> VInt + // In this case DocSkip/2 is the difference between + // the current and the previous value. If DocSkip + // is odd, then a PayloadLength encoded as VInt follows, + // if DocSkip is even, then it is assumed that the + // current payload length equals the length at the previous + // skip point + if (curStorePayloads) { + int32_t delta = curDoc - lastSkipDoc[level]; + if (curPayloadLength == lastSkipPayloadLength[level]) { + // the current payload length equals the length at the previous skip point, + // so we don't store the length again + skipBuffer->writeVInt(delta * 2); + } else { + // the payload length is different from the previous one. We shift the DocSkip, + // set the lowest bit and store the current payload length as VInt. + skipBuffer->writeVInt(delta * 2 + 1); + skipBuffer->writeVInt(curPayloadLength); + lastSkipPayloadLength[level] = curPayloadLength; + } + } else { + // current field does not store payloads + skipBuffer->writeVInt(curDoc - lastSkipDoc[level]); + } + skipBuffer->writeVInt((int32_t) (curFreqPointer - lastSkipFreqPointer[level])); + skipBuffer->writeVInt((int32_t) (curProxPointer - lastSkipProxPointer[level])); + + lastSkipDoc[level] = curDoc; + //System.out.println("write doc at level " + level + ": " + curDoc); + + lastSkipFreqPointer[level] = curFreqPointer; + lastSkipProxPointer[level] = curProxPointer; +} + +DefaultSkipListWriter::DefaultSkipListWriter(int32_t skipInterval, int32_t numberOfSkipLevels, int32_t docCount, IndexOutput* freqOutput, IndexOutput* proxOutput): + MultiLevelSkipListWriter(skipInterval, numberOfSkipLevels, docCount) +{ + this->freqOutput = freqOutput; + this->proxOutput = proxOutput; + this->curDoc = this->curPayloadLength = 0; + this->curFreqPointer =this->curProxPointer = 0; + + lastSkipDoc = _CL_NEWARRAY(int32_t,numberOfSkipLevels); + lastSkipPayloadLength = _CL_NEWARRAY(int32_t,numberOfSkipLevels); + lastSkipFreqPointer = _CL_NEWARRAY(int64_t,numberOfSkipLevels); + lastSkipProxPointer = _CL_NEWARRAY(int64_t,numberOfSkipLevels); +} +DefaultSkipListWriter::~DefaultSkipListWriter(){ + _CLDELETE_ARRAY(lastSkipDoc); + _CLDELETE_ARRAY(lastSkipPayloadLength); + _CLDELETE_ARRAY(lastSkipFreqPointer); + _CLDELETE_ARRAY(lastSkipProxPointer); +} +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/Term.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/Term.cpp new file mode 100644 index 0000000..70c7924 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/Term.cpp @@ -0,0 +1,260 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "Term.h" +#include "CLucene/util/_StringIntern.h" +#include "CLucene/util/Misc.h" + +CL_NS_USE(util) +CL_NS_DEF(index) + +Term::Term(){ + //Intern fld and assign it to field + _field = LUCENE_BLANK_STRING; + internF = false; + cachedHashCode = 0; + textLen = 0; + + //Duplicate txt and assign it to text + #ifdef LUCENE_TERM_TEXT_LENGTH + _text[0]=0; + #else + _text = STRDUP_TtoT(LUCENE_BLANK_STRING); + textLenBuf = 0; + #endif + textLen = 0; +} + +Term::Term(const TCHAR* fld, const TCHAR* txt, bool internField){ +//Func - 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. +//Pre - fld != NULL and contains the name of the field +// txt != NULL and contains the value of the field +// internF is true or false and indicates if term Field is interned or not +// internT is true or false and indicates if term Text is interned or not +// canDelete defaults to true but can be false and indicates to the IGarbageCollector that the Term can be deleted when finalized +//Post - An instance of Term has been created.Field and txt have not been copied but assigned + + _field = LUCENE_BLANK_STRING; + internF = false; + textLen = 0; + #ifdef LUCENE_TERM_TEXT_LENGTH + _text[0]=0; + #else + _text = STRDUP_TtoT(LUCENE_BLANK_STRING); + textLenBuf = 0; + #endif + + set(fld,txt,internField); +} + + +Term::Term(const Term* fieldTerm, const TCHAR* txt){ + _field = LUCENE_BLANK_STRING; + internF = false; + textLen = 0; + #ifdef LUCENE_TERM_TEXT_LENGTH + _text[0]=0; + #else + _text = STRDUP_TtoT(LUCENE_BLANK_STRING); + textLenBuf = 0; + #endif + + set(fieldTerm,txt); +} + +Term::Term(const TCHAR* fld, const TCHAR* txt){ + _field = LUCENE_BLANK_STRING; + internF = false; + textLen = 0; + #ifdef LUCENE_TERM_TEXT_LENGTH + _text[0]=0; + #else + _text = STRDUP_TtoT(LUCENE_BLANK_STRING); + textLenBuf = 0; + #endif + + set(fld,txt); +} + +Term::~Term(){ +//Func - Destructor. +//Pre - true +//Post - The instance has been destroyed. field and text have been deleted if pre(intrn) is false + + //Unintern field + if ( internF ) + CLStringIntern::unintern(_field); + _field = NULL; + +#ifndef LUCENE_TERM_TEXT_LENGTH + //Deletetext if it is the owner + _CLDELETE_CARRAY( _text ); +#endif +} + +const TCHAR* Term::field() const { +//Func - Returns the field of this term, an interned string. The field indicates +// the part of a document which this term came from. +//Pre - true +//Post - field has been returned + + return _field; +} + +const TCHAR* Term::text() const { +//Func - 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. +//Pre - true +//Post - text has been returned + + 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,const bool internField){ +//Func - Resets the field and text of a Term. +//Pre - fld != NULL and contains the name of the field +// txt != NULL and contains the value of the field +// internF is true or false +// internT is true or false +//Post - field and text of Term have been reset + + CND_PRECONDITION(fld != NULL, "fld contains NULL"); + CND_PRECONDITION(txt != NULL, "txt contains NULL"); + + //save field for unintern later + const TCHAR* oldField = _field; + //bool oldInternF = internF; //Not used + 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){ + _CLDELETE_ARRAY( _text ); + textLenBuf = 0; + } + + if ( _text==NULL ){ + //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); + 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"); +} + +/** Compares two terms, returning true iff they have the same + field and text. */ +bool Term::equals(const Term* other) const{ + if (other == this) + return true; + if (other == NULL) + return false; + + if ( cachedHashCode != 0 && other->cachedHashCode != 0 && other->cachedHashCode != cachedHashCode ) + return false; + + if ( _field==other->_field ){ + //this can be quicker than using compareTo, because checks + //field length first + if ( textLen == other->textLen ){ + return (_tcscmp(_text,other->_text)==0); + }else + return false; + }else + return false; +} + +size_t Term::hashCode(){ + if ( cachedHashCode == 0 ) + cachedHashCode = Misc::thashCode(_field) + Misc::thashCode(_text,textLen); + return cachedHashCode; +} + +size_t Term::textLength() const { return textLen; } + +int32_t Term::compareTo(const Term* other) const { +//Func - Compares two terms, to see if this term belongs before,is equal to or after +// after the argument term. +//Pre - other is a reference to another term +//Post - A negative integer is returned if this term belongs before the argument, +// zero is returned if this term is equal to the argument, and a positive integer +// if this term belongs after the argument. + + //Check ret to see if text needs to be compared + if ( _field == other->_field ){ // fields are interned + //Compare text with text of other and return the result + return _tcscmp(_text,other->_text); + }else{ + int32_t ret = _tcscmp(_field,other->_field); + if ( ret == 0 ){ + return _tcscmp(_text,other->_text); + }else{ + return ret; + } + } +} + +int32_t Term::hashedCompareTo(Term* other) { + size_t hc1 = this->hashCode(); + size_t hc2 = other->hashCode(); + + if ( hc1 == hc2 ) + return compareTo(other); + else if ( hc1 > hc2 ) + return -1; + else + return 1; +} + +TCHAR* Term::toString() const{ +//Func - Forms the contents of Field and term in some kind of tuple notation +// +//Pre - true +//Post - a string formatted as is returned if pre(field) is NULL and +// text is NULL the returned string will be formatted as <:> + + // Note: Should this representation ever change, make sure to update Query and Filter classes + // that may be using this format without calling toString (to save on memory allocations) + // For example: PrefixFilter::toString() + + return CL_NS(util)::Misc::join( _field, _T(":"), _text); +} + +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/Term.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/Term.h new file mode 100644 index 0000000..7a7ef1c --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/Term.h @@ -0,0 +1,137 @@ +/*------------------------------------------------------------------------------ +* 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_Term_ +#define _lucene_index_Term_ + +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 CLUCENE_EXPORT Term:LUCENE_REFBASE { +private: + size_t cachedHashCode; + const TCHAR* _field; + //CLStringIntern::iterator fielditr; +#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 + //bool dupT; //Indicates if Term Text is duplicated (and therefore must be deleted). +#endif + size_t textLen; //a cache of text len, this allows for a preliminary comparison of text lengths + bool internF; //Indicates if Term Field is interned(and therefore must be uninternd). +public: + + //uses the specified fieldTerm's field. this saves on intern'ing time. + /** Constructs a Term with the given field and text. + *

Note that a null field or null text value results in undefined + * behavior for most Lucene APIs that accept a Term parameter. + */ + Term(const Term* fieldTerm, const TCHAR* txt); + + /** Constructs a blank term */ + Term(); + + /** Constructs a Term with the given field and text. + *

Note that a null field or null text value results in undefined + * behavior for most Lucene APIs that accept a Term parameter. + */ + 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. + *

Note that a null field or null text value results in undefined + * behavior for most Lucene APIs that accept a Term parameter. + */ + 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; /// + TCHAR* toString() const; + + size_t hashCode(); +}; + +class Term_UnorderedCompare:LUCENE_BASE, public CL_NS(util)::Compare::_base // +{ +public: + bool operator()( Term* t1, Term* t2 ) const{ + return ( t1->hashedCompareTo(t2) < 0 ); + } + size_t operator()( Term* t ) const{ + return t->hashCode(); + } +}; + +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/TermInfo.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/TermInfo.cpp new file mode 100644 index 0000000..4eea2f6 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/TermInfo.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/_ApiHeader.h" +#include "_TermInfo.h" + + +CL_NS_DEF(index) + +TermInfo::TermInfo(){ +//Func - Constructor +//Pre - true +//Post - Instance has been created + + docFreq = 0; + freqPointer = 0; + proxPointer = 0; + skipOffset = 0; +} + +TermInfo::~TermInfo(){ +//Func - Destructor. +//Pre - true +//Post - Instance has been destroyed +} + +TermInfo::TermInfo(const int32_t df, const int64_t fp, const int64_t pp){ +//Func - Constructor. +//Pre - df >= 0, fp >= 0 pp >= 0 +//Post - An instance has been created with FreqPointer = fp, proxPointer=pp and docFreq= df + + CND_PRECONDITION(df >= 0, "df contains negative number"); + CND_PRECONDITION(fp >= 0, "fp contains negative number"); + CND_PRECONDITION(pp >= 0, "pp contains negative number"); + + freqPointer = fp; + proxPointer = pp; + docFreq = df; + skipOffset = 0; +} + +TermInfo::TermInfo(const TermInfo* ti) { +//Func - Constructor. +// Initialises this instance by copying the values of another TermInfo ti +//Pre - ti is a reference to another TermInfo +// ti->docFreq >= 0 +// ti->freqPointer >= 0 +// ti->proxPointer >= 0 +//Post - Values of ti have been copied to the values of this Instance. + + CND_PRECONDITION(ti->docFreq >= 0, "ti->docFreq contains negative number"); + CND_PRECONDITION(ti->freqPointer >= 0, "ti->freqPointer contains negative number"); + CND_PRECONDITION(ti->proxPointer >= 0, "ti->proxPointer contains negative number"); + + docFreq = ti->docFreq; + freqPointer = ti->freqPointer; + proxPointer = ti->proxPointer; + skipOffset = ti->skipOffset; +} + +void TermInfo::set(const int32_t df, const int64_t fp, const int64_t pp, int32_t so) { +//Func - Sets a new document frequency, a new freqPointer and a new proxPointer +//Pre - df >= 0, fp >= 0 pp >= 0 +//Post - The new document frequency, a new freqPointer and a new proxPointer +// have been set + + 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; +} + +void TermInfo::set(const TermInfo* ti) { +//Func - Sets a new document frequency, a new freqPointer and a new proxPointer +// by copying these values from another instance of TermInfo +//Pre - ti is a reference to another TermInfo +// ti->docFreq >= 0 +// ti->freqPointer >= 0 +// ti->proxPointer >= 0 +//Post - Values of ti have been copied to the values of this Instance. + + CND_PRECONDITION(ti->docFreq >= 0, "ti->docFreq contains negative number"); + CND_PRECONDITION(ti->freqPointer >= 0, "ti->freqPointer contains negative number"); + CND_PRECONDITION(ti->proxPointer >= 0, "ti->proxPointer contains negative number"); + + docFreq = ti->docFreq; + freqPointer = ti->freqPointer; + proxPointer = ti->proxPointer; + skipOffset = ti->skipOffset; +} +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/TermInfosReader.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/TermInfosReader.cpp new file mode 100644 index 0000000..ebbb315 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/TermInfosReader.cpp @@ -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. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" + +#include "Term.h" +#include "Terms.h" +#include "CLucene/util/Misc.h" +#include "CLucene/store/Directory.h" +#include "CLucene/store/IndexInput.h" + +#include "_TermInfo.h" +#include "_FieldInfos.h" +#include "_SegmentTermEnum.h" +#include "_FieldInfos.h" +#include "_TermInfo.h" +#include "_TermInfosWriter.h" +#include "_TermInfosReader.h" + +CL_NS_USE(store) +CL_NS_USE(util) +CL_NS_DEF(index) + + + TermInfosReader::TermInfosReader(Directory* dir, const char* seg, FieldInfos* fis, const int32_t readBufferSize): + directory (dir),fieldInfos (fis), indexTerms(NULL), indexInfos(NULL), indexPointers(NULL), indexDivisor(1) + { + //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 != NULL, "seg is NULL"); + + //Initialize the name of the segment + segment = seg; + + //Create a filname fo a Term Info File + string tisFile = Misc::segmentname(segment,".tis"); + string tiiFile = Misc::segmentname(segment,".tii"); + bool success = false; + origEnum = indexEnum = NULL; + _size = indexTermsLength = totalIndexInterval = 0; + + try { + //Create an SegmentTermEnum for storing all the terms read of the segment + origEnum = _CLNEW SegmentTermEnum( directory->openInput( tisFile.c_str(), readBufferSize ), fieldInfos, false); + _size = origEnum->size; + totalIndexInterval = origEnum->indexInterval; + indexEnum = _CLNEW SegmentTermEnum( directory->openInput( tiiFile.c_str(), readBufferSize ), 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"); + + success = true; + } _CLFINALLY({ + // With lock-less commits, it's entirely possible (and + // fine) to hit a FileNotFound exception above. In + // this case, we want to explicitly close any subset + // of things that were opened so that we don't have to + // wait for a GC to do so. + if (!success) { + close(); + } + }); + + } + + 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(); + } + int32_t TermInfosReader::getSkipInterval() const { + return origEnum->skipInterval; + } + + int32_t TermInfosReader::getMaxSkipLevels() const { + return origEnum->maxSkipLevels; + } + + void TermInfosReader::setIndexDivisor(const int32_t _indexDivisor) { + if (indexDivisor < 1) + _CLTHROWA(CL_ERR_IllegalArgument, "indexDivisor must be > 0"); + + if (indexTerms != NULL) + _CLTHROWA(CL_ERR_IllegalArgument, "index terms are already loaded"); + + this->indexDivisor = _indexDivisor; + totalIndexInterval = origEnum->indexInterval * _indexDivisor; + } + + int32_t TermInfosReader::getIndexDivisor() const { return indexDivisor; } + void TermInfosReader::close() { + + //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; iclose(); + + //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); + } + enumerators.setNull(); + } + + 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 + totalIndexInterval) + ) + { + return scanEnum(position); // can avoid seek + } + + //random-access: must seek + seekEnum(position / totalIndexInterval); + + //Get the Term at position + return scanEnum(position); + } + + 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 AND + enumerator->term(false) != NULL && + ( + //there exists a previous current called prev and term is positioned after this prev OR + ( enumerator->prev != NULL && term->compareTo(enumerator->prev) > 0) || + //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/totalIndexInterval)+1; + + // but before end of block + if ( + //the length of indexTerms (the number of terms in enumerator) equals + //_enum_offset OR + indexTermsLength == _enumOffset || + //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; + }else + 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); + _CLLDELETE(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 = new Term[indexTermsLength]; + CND_CONDITION(indexTerms != NULL,"No memory could be allocated for indexTerms");//Check if is indexTerms is a valid array + + //Instantiate an big block of TermInfo's, so that each one doesn't have to be new'd + indexInfos = _CL_NEWARRAY(TermInfo,indexTermsLength); + CND_CONDITION(indexInfos != NULL,"No memory could be allocated for indexInfos"); //Check if is indexInfos is a valid array + + //Instantiate an array indexPointers that contains pointers to the term info index file + indexPointers = _CL_NEWARRAY(int64_t,indexTermsLength); + CND_CONDITION(indexPointers != NULL,"No memory could be allocated for indexPointers");//Check if is indexPointers is a valid array + + //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; + + for (int32_t j = 1; j < indexDivisor; j++) + if (!indexEnum->next()) + break; + } + }_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 * totalIndexInterval) - 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(); + }else{ + //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/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/TermInfosWriter.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/TermInfosWriter.cpp new file mode 100644 index 0000000..cc9d779 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/TermInfosWriter.cpp @@ -0,0 +1,245 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "CLucene/store/Directory.h" +#include "CLucene/store/IndexOutput.h" +#include "CLucene/util/Misc.h" +#include "Term.h" +#include "_TermInfo.h" +#include "IndexWriter.h" +#include "_FieldInfos.h" +#include "_TermInfosWriter.h" +#include + +CL_NS_USE(util) +CL_NS_USE(store) +CL_NS_DEF(index) + + TermInfosWriter::TermInfosWriter(Directory* directory, const char* 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 != NULL, "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 char* 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 != NULL, "segment is NULL"); + initialise(directory,segment,interval,isIndex); + } + + void TermInfosWriter::initialise(Directory* directory, const char* 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 + + + maxSkipLevels = 10; + lastTermTextLength = 0; + lastFieldNumber = -1; + + lastTi = _CLNEW TermInfo(); + + CND_CONDITION(lastTi != NULL, "Could not allocate memory for lastTi"); + + lastIndexPointer = 0; + size = 0; + isIndex = IsIndex; + indexInterval = interval; + skipInterval = TermInfosWriter::DEFAULT_TERMDOCS_SKIP_INTERVAL; + + output = directory->createOutput( Misc::segmentname(segment, (isIndex ? ".tii" : ".tis")).c_str() ); + + output->writeInt(FORMAT); // write format + output->writeLong(0); // leave space for size + output->writeInt(indexInterval);// write indexInterval + output->writeInt(skipInterval); // write skipInterval + + output->writeInt(maxSkipLevels); // write maxSkipLevels + + //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, TermInfo* ti){ + const size_t length = term->textLength(); + if ( termTextBuffer.values == NULL || termTextBuffer.length < length ){ + termTextBuffer.resize( (int32_t)(length*1.25) ); + } + _tcsncpy(termTextBuffer.values, term->text(), length); + + add(fieldInfos->fieldNumber(term->field()), termTextBuffer.values, length, ti); + } + + // Currently used only by assert statement + int32_t TermInfosWriter::compareToLastTerm(int32_t fieldNumber, const TCHAR* termText, int32_t length) { + int32_t pos = 0; + + if (lastFieldNumber != fieldNumber) { + const int32_t cmp = _tcscmp(fieldInfos->fieldName(lastFieldNumber), fieldInfos->fieldName(fieldNumber)); + // If there is a field named "" (empty string) then we + // will get 0 on this comparison, yet, it's "OK". But + // it's not OK if two different field numbers map to + // the same name. + if (cmp != 0 || lastFieldNumber != -1) + return cmp; + } + + //TODO: is this just a _tcsncmp??? + while(pos < length && pos < lastTermTextLength) { + const TCHAR c1 = lastTermText[pos]; + const TCHAR c2 = termText[pos]; + if (c1 < c2) + return -1; + else if (c1 > c2) + return 1; + pos++; + } + + if (pos < lastTermTextLength) + // Last term was longer + return 1; + else if (pos < length) + // Last term was shorter + return -1; + else + return 0; + } + + void TermInfosWriter::add(int32_t fieldNumber, const TCHAR* termText, int32_t termTextLength, 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. + +// TODO: This is a hack. If _ASCII is defined, Misc::toString(const TCHAR*, int) will cause linking errors, +// at least on VS. Needs a prettier fix no doubt... ISH 2009-11-08 +#ifdef _ASCII + assert(compareToLastTerm(fieldNumber, termText, termTextLength) < 0 || + (isIndex && termTextLength == 0 && lastTermTextLength == 0)); +#else + CND_PRECONDITION(compareToLastTerm(fieldNumber, termText, termTextLength) < 0 || + (isIndex && termTextLength == 0 && lastTermTextLength == 0), + (string("Terms are out of order: field=") + Misc::toString(fieldInfos->fieldName(fieldNumber)) + + " (number " + Misc::toString(fieldNumber) + ")" + + " lastField=" + Misc::toString(fieldInfos->fieldName(lastFieldNumber)) + + " (number " + Misc::toString(lastFieldNumber) + ")" + + " text=" + Misc::toString(termText, termTextLength) + + " lastText=" + Misc::toString(lastTermText.values, lastTermTextLength) + ).c_str() ); +#endif + + CND_PRECONDITION(ti->freqPointer >= lastTi->freqPointer, ("freqPointer out of order (" + Misc::toString(ti->freqPointer) + " < " + Misc::toString(lastTi->freqPointer) + ")").c_str()); + CND_PRECONDITION(ti->proxPointer >= lastTi->proxPointer, ("proxPointer out of order (" + Misc::toString(ti->proxPointer) + " < " + Misc::toString(lastTi->proxPointer) + ")").c_str()); + + if (!isIndex && size % indexInterval == 0){ + //add an index term + other->add(lastFieldNumber, lastTermText.values, lastTermTextLength, lastTi); // add an index term + } + + //write term + writeTerm(fieldNumber, termText, termTextLength); + // 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 + } + if (lastTermText.length < termTextLength || lastTermText.length == 0){ + lastTermText.resize( (int32_t)cl_max(10.0,termTextLength*1.25) ); + } + if ( termText != NULL ) + _tcsncpy(lastTermText.values,termText,termTextLength); + else + lastTermText.values[0] = 0; + + lastTermTextLength = termTextLength; + lastFieldNumber = fieldNumber; + + 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 ); + } + } + _CLDELETE(lastTi); + } + } + + void TermInfosWriter::writeTerm(int32_t fieldNumber, const TCHAR* termText, int32_t termTextLength){ + + // Compute prefix in common with last term: + int32_t start = 0; + const int32_t limit = termTextLength < lastTermTextLength ? termTextLength : lastTermTextLength; + while(start < limit) { + if (termText[start] != lastTermText.values[start]) + break; + start++; + } + + int32_t length = termTextLength - start; + + output->writeVInt(start); // write shared prefix length + output->writeVInt(length); // write delta length + output->writeChars(termText+start, length); // write delta chars + output->writeVInt(fieldNumber); // write field num + } + + + +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/TermVector.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/TermVector.h new file mode 100644 index 0000000..9b843c3 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/TermVector.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_index_termvector_h +#define _lucene_index_termvector_h + + +//#include "FieldInfos.h" +#include "CLucene/util/Array.h" + +CL_NS_DEF(index) + +class TermPositionVector; + + +/** Provides access to stored term vector of + * a document field. The vector consists of the name of the field, an array of the terms tha occur in the field of the + * {@link org.apache.lucene.document.Document} and a parallel array of frequencies. Thus, getTermFrequencies()[5] corresponds with the + * frequency of getTerms()[5], assuming there are at least 5 terms in the Document. + */ +class CLUCENE_EXPORT TermFreqVector:LUCENE_BASE { +public: + virtual ~TermFreqVector(){ + } + + /** + * The Field name. + * @return The name of 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 CL_NS(util)::ArrayBase* getTerms() = 0; + + + /** Array of term frequencies. Locations of the array correspond one to one + * to the terms in the array obtained from getTerms + * 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 CL_NS(util)::ArrayBase* getTermFrequencies() = 0; + + + /** Return an index in the term numbers array returned from + * getTerms at which the term with the specified + * term appears. If this term does not appear in the array, + * return -1. + */ + virtual int32_t indexOf(const TCHAR* term) = 0; + + /** Just like indexOf(int32_t) 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 CL_NS(util)::ArrayBase* indexesOf(const CL_NS(util)::ArrayBase& terms, const int32_t start, const int32_t len) = 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; +}; + + +/** +* The TermVectorOffsetInfo class holds information pertaining to a Term in a {@link TermPositionVector}'s +* offset information. This offset information is the character offset as set during the Analysis phase (and thus may not be the actual offset in the +* original content). +*/ +struct CLUCENE_EXPORT TermVectorOffsetInfo { +private: + int32_t startOffset; + int32_t endOffset; +public: // TODO: Remove after TermVectorWriter has been ported; + TermVectorOffsetInfo(); + ~TermVectorOffsetInfo(); + TermVectorOffsetInfo(int32_t startOffset, int32_t endOffset); + + /** + * The accessor for the ending offset for the term + * @return The offset + */ + int32_t getEndOffset() const; + void setEndOffset(const int32_t _endOffset); + + /** + * The accessor for the starting offset of the term. + * + * @return The offset + */ + int32_t getStartOffset() const; + void setStartOffset(const int32_t _startOffset); + + /** + * Two TermVectorOffsetInfos are equals if both the start and end offsets are the same + * @param o The comparison Object + * @return true if both {@link #getStartOffset()} and {@link #getEndOffset()} are the same for both objects. + */ + bool equals(TermVectorOffsetInfo* o); + size_t hashCode() const; +}; + + +/** +* Convenience declaration when creating a {@link org.apache.lucene.index.TermPositionVector} that stores only position information. +*/ +extern CL_NS(util)::ObjectArray* TermVectorOffsetInfo_EMPTY_OFFSET_INFO; + +/** Extends TermFreqVector 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 CLUCENE_EXPORT 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 indexOf method. + * May return null if positions have not been stored. + */ + virtual const CL_NS(util)::ArrayBase* getTermPositions(const size_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 const CL_NS(util)::ArrayBase* getOffsets(const size_t index) = 0; + + virtual ~TermPositionVector(){ + } +}; + + + +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/TermVectorReader.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/TermVectorReader.cpp new file mode 100644 index 0000000..55f79b3 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/TermVectorReader.cpp @@ -0,0 +1,559 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "_TermVector.h" +#include "CLucene/util/StringBuffer.h" +#include "CLucene/store/IndexInput.h" +#include "CLucene/store/IndexOutput.h" +#include "_IndexFileNames.h" + +CL_NS_USE(util) +CL_NS_DEF(index) + +TermVectorsReader::TermVectorsReader(CL_NS(store)::Directory* d, const char* segment, FieldInfos* fieldInfos, + int32_t readBufferSize, int32_t docStoreOffset, int32_t size): + fieldInfos(NULL), tvx(NULL), tvd(NULL), tvf(NULL), _size(0), docStoreOffset(0) + { + + bool success = false; + + char fbuf[CL_MAX_NAME]; + strcpy(fbuf,segment); + strcat(fbuf,"."); + char* fpbuf=fbuf+strlen(fbuf); + + strcpy(fpbuf,IndexFileNames::VECTORS_INDEX_EXTENSION); + try { + if (d->fileExists(fbuf)) { + tvx = d->openInput(fbuf, readBufferSize); + checkValidFormat(tvx); + + strcpy(fpbuf,IndexFileNames::VECTORS_DOCUMENTS_EXTENSION); + tvd = d->openInput(fbuf, readBufferSize); + tvdFormat = checkValidFormat(tvd); + + strcpy(fpbuf,IndexFileNames::VECTORS_FIELDS_EXTENSION); + tvf = d->openInput(fbuf, readBufferSize); + tvfFormat = checkValidFormat(tvf); + if (-1 == docStoreOffset) { + this->docStoreOffset = 0; + this->_size = static_cast(tvx->length() >> 3); + } else { + this->docStoreOffset = docStoreOffset; + this->_size = size; + // Verify the file is long enough to hold all of our + // docs + CND_CONDITION( ((int64_t) (tvx->length() / 8)) >= size + docStoreOffset , "file is not long enough to hold all of our docs"); + } + } + + this->fieldInfos = fieldInfos; + success = true; + } _CLFINALLY ({ + // With lock-less commits, it's entirely possible (and + // fine) to hit a FileNotFound exception above. In + // this case, we want to explicitly close any subset + // of things that were opened so that we don't have to + // wait for a GC to do so. + if (!success) { + close(); + } + }); +} + +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; + docStoreOffset = copy.docStoreOffset; +} +TermVectorsReader* TermVectorsReader::clone() const{ + if (tvx == NULL || tvd == NULL || tvf == NULL) + return NULL; + return _CLNEW TermVectorsReader(*this); +} + +TermVectorsReader::~TermVectorsReader(){ + close(); +} + +int32_t TermVectorsReader::checkValidFormat(CL_NS(store)::IndexInput* in){ + int32_t format = in->readInt(); + if (format > TermVectorsReader::FORMAT_VERSION) + { + CL_NS(util)::StringBuffer err; + err.append(_T("Incompatible format version: ")); + err.appendInt(format); + err.append(_T(" expected ")); + err.appendInt(TermVectorsReader::FORMAT_VERSION); + err.append(_T(" or less")); + _CLTHROWT(CL_ERR_CorruptIndex,err.getBuffer()); + } + return format; +} + +void TermVectorsReader::close(){ + // make all effort to close up. Keep the first exception + // and throw it as a new one. + // todo: why don't we trap the exception and at least make sure that + // all streams that we can close are closed? + CLuceneError keep; + 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; +} + +int64_t TermVectorsReader::size() const{ + return _size; +} + +void TermVectorsReader::get(const int32_t docNum, const TCHAR* field, TermVectorMapper* mapper){ + if (tvx != NULL) { + int32_t fieldNumber = fieldInfos->fieldNumber(field); + //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 + docStoreOffset) * 8L) + 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 == 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++) // TODO: Was ++i, make sure its still good + position += tvd->readVLong(); + + mapper->setDocumentNumber(docNum); + readTermVector(field, position, mapper); + } else { + // "Field not found" + } + } else { + // "No tvx file" + } +} + +TermFreqVector* TermVectorsReader::get(const int32_t docNum, const TCHAR* field){ + // Check if no term vectors are available for this segment at all + ParallelArrayTermVectorMapper* mapper = _CLNEW ParallelArrayTermVectorMapper(); + try + { + get(docNum, field, (TermVectorMapper*)mapper); + } + catch(...) + { + _CLLDELETE(mapper); + throw; + } + + TermFreqVector* ret = mapper->materializeVector(); + _CLLDELETE(mapper); + return ret; +} + + +ArrayBase* TermVectorsReader::get(const int32_t docNum){ + ObjectArray* result = NULL; + // Check if no term vectors are available for this segment at all + if (tvx != NULL) { + //We need to offset by + tvx->seek(((docNum + docStoreOffset) * 8L) + 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 == 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; + } + } + + result = (ObjectArray*)readTermVectors(docNum, fields, tvfPointers, fieldCount); + + _CLDELETE_ARRAY(tvfPointers); + _CLDELETE_ARRAY(fields); + } + } else { + // "No tvx file" + } + return result; +} + +void TermVectorsReader::get(const int32_t docNumber, TermVectorMapper* mapper) { + // Check if no term vectors are available for this segment at all + if (tvx != NULL) { + //We need to offset by + tvx->seek((docNumber * 8L) + 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 == 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; + } + } + + mapper->setDocumentNumber(docNumber); + readTermVectors(fields, tvfPointers, fieldCount, mapper); + + _CLDELETE_ARRAY(tvfPointers); + _CLDELETE_ARRAY(fields); + } + } else { + // "No tvx file" + } + } + +ObjectArray* TermVectorsReader::readTermVectors(const int32_t docNum, + const TCHAR** fields, const int64_t* tvfPointers, const int32_t len){ + ObjectArray* res = _CLNEW CL_NS(util)::ObjectArray(len); + ParallelArrayTermVectorMapper* mapper = _CLNEW ParallelArrayTermVectorMapper(); + for (int32_t i = 0; i < len; i++) { + mapper->setDocumentNumber(docNum); + readTermVector(fields[i], tvfPointers[i], mapper); + res->values[i] = static_cast(mapper->materializeVector()); + mapper->reset(); + } + _CLLDELETE(mapper); + return res; +} + +void TermVectorsReader::readTermVectors(const TCHAR** fields, const int64_t* tvfPointers, + const int32_t len, TermVectorMapper* mapper){ + for (int32_t i = 0; i < len; i++) { + readTermVector(fields[i], tvfPointers[i], mapper); + } +} + +void TermVectorsReader::readTermVector(const TCHAR* field, const int64_t tvfPointer, TermVectorMapper* mapper){ + //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; + + bool storePositions; + bool storeOffsets; + + if(tvfFormat == FORMAT_VERSION){ + uint8_t bits = tvf->readByte(); + storePositions = (bits & STORE_POSITIONS_WITH_TERMVECTOR) != 0; + storeOffsets = (bits & STORE_OFFSET_WITH_TERMVECTOR) != 0; + } + else{ + tvf->readVInt(); + storePositions = false; + storeOffsets = false; + } + mapper->setExpectations(field, numTerms, storeOffsets, storePositions); + + int32_t start = 0; + int32_t deltaLength = 0; + int32_t totalLength = 0; + ValueArray buffer(10); // init the buffer with a length of 10 character + + for (int32_t i = 0; i < numTerms; ++i) { + start = tvf->readVInt(); + deltaLength = tvf->readVInt(); + totalLength = start + deltaLength; + if (buffer.length < totalLength + 1) // increase buffer + { + buffer.resize(totalLength+1); + } + + //read the term + tvf->readChars(buffer.values, start, deltaLength); + buffer.values[totalLength] = '\0'; //null terminate term + + //read the frequency + int32_t freq = tvf->readVInt(); + ValueArray* positions = NULL; + + if (storePositions) { //read in the positions + //does the mapper even care about positions? + if (mapper->isIgnoringPositions() == false) { + positions = _CLNEW ValueArray(freq); + int32_t prevPosition = 0; + for (int32_t j = 0; j < freq; j++) + { + positions->values[j] = prevPosition + tvf->readVInt(); + prevPosition = positions->values[j]; + } + } else { + //we need to skip over the positions. Since these are VInts, I don't believe there is anyway to know for sure how far to skip + // + for (int32_t j = 0; j < freq; j++) + { + tvf->readVInt(); + } + } + } + + ArrayBase* offsets = NULL; + if (storeOffsets) { + //does the mapper even care about offsets? + if (mapper->isIgnoringOffsets() == false) { + offsets = _CLNEW ObjectArray(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(); + offsets->values[j] = _CLNEW TermVectorOffsetInfo(startOffset, endOffset); + prevOffset = endOffset; + } + } else { + for (int32_t j = 0; j < freq; j++){ + tvf->readVInt(); + tvf->readVInt(); + } + } + } + mapper->map(buffer.values, totalLength, freq, offsets, positions); + } +} + +ObjectArray* TermVectorOffsetInfo_EMPTY_OFFSET_INFO = _CLNEW ObjectArray; + +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(const int32_t _endOffset) { + this->endOffset = _endOffset; +} + +int32_t TermVectorOffsetInfo::getStartOffset() const{ + return startOffset; +} + +void TermVectorOffsetInfo::setStartOffset(const 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; +} + +TermVectorMapper::TermVectorMapper(){ + this->ignoringPositions = false; + this->ignoringOffsets = false; +} + +TermVectorMapper::TermVectorMapper(const bool _ignoringPositions, const bool _ignoringOffsets){ + this->ignoringPositions = _ignoringPositions; + this->ignoringOffsets = _ignoringOffsets; +} + +bool TermVectorMapper::isIgnoringPositions() const +{ + return ignoringPositions; +} + +bool TermVectorMapper::isIgnoringOffsets() const +{ + return ignoringOffsets; +} + +void TermVectorMapper::setDocumentNumber(const int32_t /*documentNumber*/) +{ + //default implementation does nothing... +} + +ParallelArrayTermVectorMapper::ParallelArrayTermVectorMapper(): + terms(NULL), + termFreqs(NULL), + positions(NULL), + offsets(NULL), + currentPosition(0), + field(NULL) +{ +} +ParallelArrayTermVectorMapper::~ParallelArrayTermVectorMapper(){ + _CLDELETE_LCARRAY(field); +} + +void ParallelArrayTermVectorMapper::setExpectations(const TCHAR* _field, const int32_t numTerms, + const bool storeOffsets, const bool storePositions) { + _CLDELETE_LCARRAY(field); + this->field = STRDUP_TtoT(_field); + + terms = _CLNEW CL_NS(util)::TCharArray(numTerms); + termFreqs = _CLNEW ValueArray(numTerms); + + this->storingOffsets = storeOffsets; + this->storingPositions = storePositions; + if(storePositions){ + positions = (ArrayBase< ArrayBase* >*)_CLNEW ObjectArray< ValueArray >(numTerms); + } + if(storeOffsets){ + offsets = _CLNEW ObjectArray< ArrayBase >(numTerms); + } +} + +void ParallelArrayTermVectorMapper::map(const TCHAR* term, int32_t termLen, const int32_t frequency, + ArrayBase* _offsets, + ArrayBase* _positions) { + terms->values[currentPosition] = STRDUP_TtoT(term); + + termFreqs->values[currentPosition] = frequency; + + if (storingOffsets) + { + this->offsets->values[currentPosition] = _offsets; + } + if (storingPositions) + { + this->positions->values[currentPosition] = _positions; + } + currentPosition++; +} + +TermFreqVector* ParallelArrayTermVectorMapper::materializeVector() { + SegmentTermVector* tv = NULL; + if (field != NULL && terms != NULL) { + if (storingPositions || storingOffsets) { + tv = _CLNEW SegmentTermPositionVector(field, terms, termFreqs, positions, offsets); + } else { + tv = _CLNEW SegmentTermVector(field, terms, termFreqs); + } + } + return tv; +} + +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/TermVectorWriter.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/TermVectorWriter.cpp new file mode 100644 index 0000000..a37b69e --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/TermVectorWriter.cpp @@ -0,0 +1,230 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "_TermVector.h" +#include "_IndexFileNames.h" +#include "CLucene/util/Misc.h" +#include "CLucene/store/IndexInput.h" +#include "CLucene/store/IndexOutput.h" +#include + +CL_NS_USE(util) +CL_NS_DEF(index) + + TermVectorsWriter::TermVectorsWriter(CL_NS(store)::Directory* directory, + const char* segment,FieldInfos* fieldInfos) + { + // Open files for TermVector storage + char fbuf[CL_MAX_NAME]; + strcpy(fbuf,segment); + strcat(fbuf,"."); + char* fpbuf=fbuf+strlen(fbuf); + + strcpy(fpbuf,IndexFileNames::VECTORS_INDEX_EXTENSION); + tvx = directory->createOutput(fbuf); + tvx->writeInt(TermVectorsReader::FORMAT_VERSION); + + strcpy(fpbuf,IndexFileNames::VECTORS_DOCUMENTS_EXTENSION); + tvd = directory->createOutput(fbuf); + tvd->writeInt(TermVectorsReader::FORMAT_VERSION); + + strcpy(fpbuf,IndexFileNames::VECTORS_FIELDS_EXTENSION); + tvf = directory->createOutput(fbuf); + tvf->writeInt(TermVectorsReader::FORMAT_VERSION); + + this->fieldInfos = fieldInfos; + } + + void TermVectorsWriter::close(CLuceneError* err){ + CLuceneError keep; + bool bError = false; + + if ( tvx != NULL ){ + try{ + tvx->close(); + }catch(CLuceneError& ioerr){ + if ( ioerr.number() != CL_ERR_IO ) + { + _CLDELETE(tvx); + _CLDELETE(tvd); + _CLDELETE(tvf); + throw ioerr; + } + if (!bError) + { + bError = true; + keep.set(ioerr.number(), ioerr.what()); + } + } + _CLDELETE(tvx); + } + + if ( tvd != NULL ){ + try{ + tvd->close(); + }catch(CLuceneError& ioerr){ + if ( ioerr.number() != CL_ERR_IO ) + { + _CLDELETE(tvd); + _CLDELETE(tvf); + throw ioerr; + } + if (!bError) + { + bError = true; + keep.set(ioerr.number(), ioerr.what()); + } + } + _CLDELETE(tvd); + } + + if ( tvf != NULL ){ + try{ + tvf->close(); + }catch(CLuceneError& ioerr){ + if ( ioerr.number() != CL_ERR_IO ) + { + _CLDELETE(tvf); + throw ioerr; + } + if (!bError) + { + bError = true; + keep.set(ioerr.number(), ioerr.what()); + } + } + _CLDELETE(tvf); + } + + if (bError) + { + if ( err != NULL ) + err->set(keep.number(), keep.what()); + else + throw keep; + } + } + + TermVectorsWriter::~TermVectorsWriter(){ + CLuceneError err; + close(&err); + } + + + void TermVectorsWriter::addAllDocVectors(ArrayBase* _vectors){ + + tvx->writeLong(tvd->getFilePointer()); + + if (_vectors != NULL) { + ArrayBase& vectors = *_vectors; + + const int32_t numFields = vectors.length; + tvd->writeVInt(numFields); + + ValueArray fieldPointers(numFields); + + for (int32_t i=0; igetFilePointer(); + + const int32_t fieldNumber = fieldInfos->fieldNumber(vectors[i]->getField()); + + // 1st pass: write field numbers to tvd + tvd->writeVInt(fieldNumber); + + const int32_t numTerms = vectors[i]->size(); + tvf->writeVInt(numTerms); + + TermPositionVector* tpVector = NULL; + + uint8_t bits = 0; + bool storePositions = false; + bool storeOffsets = false; + + if ( vectors[i]->__asTermPositionVector() != NULL ) { + // May have positions & offsets + tpVector = vectors[i]->__asTermPositionVector(); + storePositions = tpVector->size() > 0 && tpVector->getTermPositions(0) != NULL; + storeOffsets = tpVector->size() > 0 && tpVector->getOffsets(0) != NULL; + bits = ((storePositions ? TermVectorsReader::STORE_POSITIONS_WITH_TERMVECTOR : 0) + + (storeOffsets ? TermVectorsReader::STORE_OFFSET_WITH_TERMVECTOR : 0)); + } else { + tpVector = NULL; + bits = 0; + storePositions = false; + storeOffsets = false; + } + + tvf->writeVInt(bits); + + const ArrayBase& terms = *vectors[i]->getTerms(); + const ArrayBase& freqs = *vectors[i]->getTermFrequencies(); + + const TCHAR* lastTermText = LUCENE_BLANK_STRING; + size_t lastTermTextLen = 0; + + for (int32_t j=0; jwriteVInt(start); // write shared prefix length + tvf->writeVInt(length); // write delta length + tvf->writeChars(termText + start, length); // write delta chars + lastTermText = termText; + + const int32_t termFreq = freqs[j]; + + tvf->writeVInt(termFreq); + + if (storePositions) { + const ArrayBase* _positions = tpVector->getTermPositions(j); + if (_positions == NULL) + _CLTHROWA(CL_ERR_IllegalState, "Trying to write positions that are NULL!"); + const ArrayBase& positions = *_positions; + assert (positions.length == termFreq); + + // use delta encoding for positions + int32_t lastPosition = 0; + for(int32_t k=0;kwriteVInt(position-lastPosition); + lastPosition = position; + } + } + + if (storeOffsets) { + const ArrayBase* _offsets = tpVector->getOffsets(j); + if (_offsets == NULL) + _CLTHROWA(CL_ERR_IllegalState, "Trying to write offsets that are NULL!"); + const ArrayBase& offsets = *_offsets; + assert (offsets.length == termFreq); + + // use delta encoding for offsets + int32_t lastEndOffset = 0; + for(int k=0;kgetStartOffset(); + const int32_t endOffset = offsets[k]->getEndOffset(); + tvf->writeVInt(startOffset-lastEndOffset); + tvf->writeVInt(endOffset-startOffset); + lastEndOffset = endOffset; + } + } + } + } + + // 2nd pass: write field pointers to tvd + int64_t lastFieldPointer = 0; + for (int32_t i=0; iwriteVLong(fieldPointer-lastFieldPointer); + lastFieldPointer = fieldPointer; + } + } else + tvd->writeVInt(0); + } + +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/Terms.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/Terms.cpp new file mode 100644 index 0000000..7899f81 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/Terms.cpp @@ -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. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "Terms.h" +#include "Term.h" + +CL_NS_DEF(index) + +TermDocs::~TermDocs(){ +} + +TermEnum::~TermEnum(){ +} + +bool TermEnum::skipTo(Term* target){ + do { + if (!next()) + return false; + } while (target->compareTo(term(false)) > 0); + return true; +} + +TermPositions::~TermPositions(){ +} + +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/Terms.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/Terms.h new file mode 100644 index 0000000..1744fa4 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/Terms.h @@ -0,0 +1,189 @@ +/*------------------------------------------------------------------------------ +* 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_ + +#include "CLucene/util/Equators.h" +CL_NS_DEF(index) + +//predefine +class Term; +class TermEnum; +class TermPositions; + +/** TermDocs provides an interface for enumerating <document, frequency> + pairs for a term.

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.

The pairs are + ordered by document number. + + @see IndexReader#termDocs() + */ +class CLUCENE_EXPORT TermDocs { +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.

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.

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.

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 + // docs. Document numbers are stored in docs, and term + // frequencies are stored in freqs. The freqs array must be as + // int64_t as the docs array. + // + //

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 target.

Returns true iff there is such + // an entry.

Behaves as if written:

+	//   bool skipTo(int32_t target) {
+	//     do {
+	//       if (!next())
+	// 	     return false;
+	//     } while (target > doc());
+	//     return true;
+	//   }
+	// 
+ // 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. + +

Term enumerations are always ordered by Term.compareTo(). Each term in + the enumeration is greater than all that precede it. +*/ +class CLUCENE_EXPORT TermEnum: LUCENE_BASE, public CL_NS(util)::NamedObject { +public: + /** Increments the enumeration to the next element. True if one exists.*/ + virtual bool next()=0; + + /** + * Returns the current Term in the enumeration. + * @param pointer if true, then increment the reference count before returning + */ + virtual Term* term(bool pointer=true)=0; + + /** 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 target.

Returns true iff there is such + * an entry.

Behaves as if written:

+	*   public boolean skipTo(Term target) {
+	*     do {
+	*       if (!next())
+	* 	     return false;
+	*     } while (target > term());
+	*     return true;
+	*   }
+	* 
+ * Some implementations are considerably more efficient than that. + */ + virtual bool skipTo(Term* target); +}; + + + +/** + * TermPositions provides an interface for enumerating the <document, + * frequency, <position>* > tuples for a term.

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 CLUCENE_EXPORT 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()}

This is + invalid until {@link #next()} is called for + the first time. + */ + virtual int32_t nextPosition() = 0; + + virtual ~TermPositions(); + + /** + * Returns the length of the payload at the current term position. + * This is invalid until {@link #nextPosition()} is called for + * the first time.
+ * @return length of the current payload in number of bytes + */ + virtual int32_t getPayloadLength() const = 0; + + /** + * Returns the payload data at the current term position. + * This is invalid until {@link #nextPosition()} is called for + * the first time. + * This method must not be called more than once after each call + * of {@link #nextPosition()}. However, payloads are loaded lazily, + * so if the payload data for the current position is not needed, + * this method may not be called at all for performance reasons.
+ * + * @param data the array into which the data of this payload is to be + * stored, if it is big enough; otherwise, a new byte[] array + * is allocated for this purpose. + * @return a byte[] array containing the data of this payload + */ + virtual uint8_t* getPayload(uint8_t* data) = 0; + + /** + * Checks if a payload can be loaded at this position. + *

+ * Payloads can only be loaded once per call to + * {@link #nextPosition()}. + * + * @return true if there is a payload available at this position that can be loaded + */ + virtual bool isPayloadAvailable() const = 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 TermDocs* __asTermDocs()=0; + virtual TermPositions* __asTermPositions()=0; +}; +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/_CompoundFile.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/_CompoundFile.h new file mode 100644 index 0000000..5577610 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/_CompoundFile.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_index_compoundfile_h +#define _lucene_index_compoundfile_h + + +CL_CLASS_DEF(store,Lock) +#include "CLucene/store/Directory.h" +#include "CLucene/store/IndexInput.h" +#include "_SegmentMerger.h" + +CL_NS_DEF(index) + +class WriterFileEntry; +class ReaderFileEntry; + +/** + * 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: + int32_t readBufferSize; + + // Base info + CL_NS(store)::Directory* directory; + char* fileName; + + CL_NS(store)::IndexInput* stream; + + typedef CL_NS(util)::CLHashMap > EntriesType; + EntriesType* entries; +protected: + /** Removes an existing file in the directory-> */ + bool doDeleteFile(const char* name); + +public: + CompoundFileReader(CL_NS(store)::Directory* dir, const char* name, int32_t _readBufferSize=CL_NS(store)::BufferedIndexInput::BUFFER_SIZE); + virtual ~CompoundFileReader(); + CL_NS(store)::Directory* getDirectory(); + const char* getName() const; + + void close(); + bool openInput(const char * name, CL_NS(store)::IndexInput *& ret, CLuceneError& error, int32_t bufferSize=0); + + /** Returns an array of strings, one for each file in the directory-> */ + bool list(std::vector* names) const; + /** Returns true iff a file with the given name exists. */ + bool fileExists(const char* name) const; + /** Returns the time the named file was last modified. */ + int64_t fileModified(const char* name) const; + /** Set the modified time of an existing file to now. */ + void touchFile(const char* 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 char* from, const char* to); + /** Returns the length of a file in the directory. + * @throws IOException if the file does not exist */ + int64_t fileLength(const char* name) const; + /** Not implemented + * @throws UnsupportedOperationException */ + CL_NS(store)::IndexOutput* createOutput(const char* name); + /** Not implemented + * @throws UnsupportedOperationException */ + CL_NS(store)::LuceneLock* makeLock(const char* name); + + std::string toString() const; + + static const char* getClassName(); + const char* getObjectName() const; +}; + + +/** + * Combines multiple files into a single compound file. + * The file format:
+ *

    + *
  • VInt fileCount
  • + *
  • {Directory} + * fileCount entries with the following structure:
  • + *
      + *
    • int64_t dataOffset
    • + *
    • UTFString extension
    • + *
    + *
  • {File Data} + * fileCount entries with the raw data of the corresponding file
  • + *
+ * + * 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 Internal; + Internal* _internal; + + /** 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 char* name, SegmentMerger::CheckAbort* checkAbort = NULL); + ~CompoundFileWriter(); + /** Returns the directory of the compound file. */ + CL_NS(store)::Directory* getDirectory(); + const char* getName() const ; + /** Add a source stream. file 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 file is null + * @throws IllegalArgumentException if a file with the same name + * has been added already + */ + void addFile(const char* 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/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/_DocumentsWriter.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/_DocumentsWriter.h new file mode 100644 index 0000000..6a3ac7e --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/_DocumentsWriter.h @@ -0,0 +1,968 @@ +/*------------------------------------------------------------------------------ +* 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_DocumentsWriter_ +#define _lucene_index_DocumentsWriter_ + +#include "CLucene/store/IndexInput.h" +#include "CLucene/config/_threads.h" +#include "CLucene/util/Array.h" +#include "CLucene/store/_RAMDirectory.h" +#include "_TermInfo.h" + +CL_CLASS_DEF(analysis,Analyzer) +CL_CLASS_DEF(analysis,Token) +CL_CLASS_DEF(analysis,TokenStream) +CL_CLASS_DEF(document,Field) +CL_CLASS_DEF(store,IndexOutput) +CL_CLASS_DEF(document,Document) +CL_CLASS_DEF(util,StringReader) + +CL_NS_DEF(index) + +class DocumentsWriter; +class DefaultSkipListWriter; +class FieldInfos; +class FieldsWriter; +class FieldInfos; +class IndexWriter; +class TermInfo; +class TermInfosWriter; +class Term; +class FieldInfo; +class Term_Compare; +class Term_Equals; + +/** Used only internally to DW to call abort "up the stack" */ +class AbortException{ +public: + CLuceneError err; + AbortException(CLuceneError& _err, DocumentsWriter* docWriter); +}; + +/** + * This class accepts multiple added documents and directly + * writes a single segment file. It does this more + * efficiently than creating a single segment per document + * (with DocumentWriter) and doing standard merges on those + * segments. + * + * When a document is added, its stored fields (if any) and + * term vectors (if any) are immediately written to the + * Directory (ie these do not consume RAM). The freq/prox + * postings are accumulated into a Postings hash table keyed + * by term. Each entry in this hash table holds a separate + * uint8_t stream (allocated as incrementally growing slices + * into large shared uint8_t[] arrays) for freq and prox, that + * contains the postings data for multiple documents. If + * vectors are enabled, each unique term for each document + * also allocates a PostingVector instance to similarly + * track the offsets & positions uint8_t stream. + * + * Once the Postings hash is full (ie is consuming the + * allowed RAM) or the number of added docs is large enough + * (in the case we are flushing by doc count instead of RAM + * usage), we create a real segment and flush it to disk and + * reset the Postings hash. + * + * In adding a document we first organize all of its fields + * by field name. We then process field by field, and + * record the Posting hash per-field. After each field we + * flush its term vectors. When it's time to flush the full + * segment we first sort the fields by name, and then go + * field by field and sorts its postings. + * + * + * Threads: + * + * Multiple threads are allowed into addDocument at once. + * There is an initial synchronized call to getThreadState + * which allocates a ThreadState for this thread. The same + * thread will get the same ThreadState over time (thread + * affinity) so that if there are consistent patterns (for + * example each thread is indexing a different content + * source) then we make better use of RAM. Then + * processDocument is called on that ThreadState without + * synchronization (most of the "heavy lifting" is in this + * call). Finally the synchronized "finishDocument" is + * called to flush changes to the directory. + * + * Each ThreadState instance has its own Posting hash. Once + * we're using too much RAM, we flush all Posting hashes to + * a segment by merging the docIDs in the posting lists for + * the same term across multiple thread states (see + * writeSegment and appendPostings). + * + * When flush is called by IndexWriter, or, we flush + * internally when autoCommit=false, we forcefully idle all + * threads and flush only once they are all idle. This + * means you can call flush with a given thread even while + * other threads are actively adding/deleting documents. + * + * + * Exceptions: + * + * Because this class directly updates in-memory posting + * lists, and flushes stored fields and term vectors + * directly to files in the directory, there are certain + * limited times when an exception can corrupt this state. + * For example, a disk full while flushing stored fields + * leaves this file in a corrupt state. Or, an OOM + * exception while appending to the in-memory posting lists + * can corrupt that posting list. We call such exceptions + * "aborting exceptions". In these cases we must call + * abort() to discard all docs added since the last flush. + * + * All other exceptions ("non-aborting exceptions") can + * still partially update the index structures. These + * updates are consistent, but, they represent only a part + * of the document seen up until the exception was hit. + * When this happens, we immediately mark the document as + * deleted so that the document is always atomically ("all + * or none") added to the index. + */ +class DocumentsWriter { +public: + + // Number of documents a delete term applies to. + class Num { + private: + int32_t num; + public: + Num(int32_t num) { + this->num = num; + } + int32_t getNum() { + return num; + } + void setNum(int32_t num) { + // Only record the new number if it's greater than the + // current one. This is important because if multiple + // threads are replacing the same doc at nearly the + // same time, it's possible that one thread that got a + // higher docID is scheduled before the other + // threads. + if (num > this->num) + this->num = num; + } + }; + typedef CL_NS(util)::CLHashMap, CL_NS(util)::Deletor::Object > TermNumMapType; + +private: + IndexWriter* writer; + CL_NS(store)::Directory* directory; + DEFINE_MUTEX(THIS_LOCK) + DEFINE_CONDITION(THIS_WAIT_CONDITION) + + FieldInfos* fieldInfos; // All fields we've seen + CL_NS(store)::IndexOutput *tvx, *tvf, *tvd; // To write term vectors + FieldsWriter* fieldsWriter; // To write stored fields + + std::string segment; // Current segment we are working on + std::string docStoreSegment; // Current doc-store segment we are writing + int32_t docStoreOffset; // Current starting doc-store offset of current segment + + int32_t nextDocID; // Next docID to be added + int32_t numDocsInRAM; // # docs buffered in RAM + int32_t numDocsInStore; // # docs written to doc stores + int32_t nextWriteDocID; // Next docID to be written + + std::ostream* infoStream; + + // Currently used only for deleting a doc on hitting an non-aborting exception + std::vector bufferedDeleteDocIDs; + + // The max number of delete terms that can be buffered before + // they must be flushed to disk. + int32_t maxBufferedDeleteTerms; + + // How much RAM we can use before flushing. This is 0 if + // we are flushing by doc count instead. + int64_t ramBufferSize; + + // Flush @ this number of docs. If rarmBufferSize is + // non-zero we will flush by RAM usage instead. + int32_t maxBufferedDocs; + + bool closed; + + // Coarse estimates used to measure RAM usage of buffered deletes + static int32_t OBJECT_HEADER_BYTES; + static int32_t OBJECT_POINTER_BYTES; // TODO: should be 8 on 64-bit platform + static int32_t BYTES_PER_CHAR; + static int32_t BYTES_PER_INT; + + + // This Hashmap buffers delete terms in ram before they + // are applied. The key is delete term; the value is + // number of buffered documents the term applies to. + TermNumMapType* bufferedDeleteTerms; + int32_t numBufferedDeleteTerms; + + + /* Simple StringReader that can be reset to a new string; + * we use this when tokenizing the string value from a + * Field. */ + typedef CL_NS(util)::StringReader ReusableStringReader; + + class ByteBlockPool; + class CharBlockPool; + class FieldMergeState; + + /* IndexInput that knows how to read the byte slices written + * by Posting and PostingVector. We read the bytes in + * each slice until we hit the end of that slice at which + * point we read the forwarding address of the next slice + * and then jump to it.*/ + class ByteSliceReader: public CL_NS(store)::IndexInput { + ByteBlockPool* pool; + int32_t bufferUpto; + const uint8_t* buffer; + int32_t limit; + int32_t level; + + int32_t upto; + int32_t bufferOffset; + int32_t endIndex; + public: + ByteSliceReader(); + virtual ~ByteSliceReader(); + void init(ByteBlockPool* pool, int32_t startIndex, int32_t endIndex); + + uint8_t readByte(); + int64_t writeTo(CL_NS(store)::IndexOutput* out); + void nextSlice(); + void readBytes(uint8_t* b, const int32_t len); + int64_t getFilePointer() const; + int64_t length() const; + void seek(const int64_t pos); + void close(); + + IndexInput* clone() const; + const char* getDirectoryType() const; + const char* getObjectName() const; + static const char* getClassName(); + + friend class FieldMergeState; + }; + + + struct PostingVector; //predefine... + + /* Used to track postings for a single term. One of these + * exists per unique term seen since the last flush. */ + struct Posting { + int32_t textStart; // Address into char[] blocks where our text is stored + int32_t docFreq; // # times this term occurs in the current doc + int32_t freqStart; // Address of first uint8_t[] slice for freq + int32_t freqUpto; // Next write address for freq + int32_t proxStart; // Address of first uint8_t[] slice + int32_t proxUpto; // Next write address for prox + int32_t lastDocID; // Last docID where this term occurred + int32_t lastDocCode; // Code for prior doc + int32_t lastPosition; // Last position where this term occurred + PostingVector* vector; // Corresponding PostingVector instance + }; + + /* Used to track data for term vectors. One of these + * exists per unique term seen in each field in the + * document. */ + struct PostingVector { + Posting* p; // Corresponding Posting instance for this term + int32_t lastOffset; // Last offset we saw + int32_t offsetStart; // Address of first slice for offsets + int32_t offsetUpto; // Next write address for offsets + int32_t posStart; // Address of first slice for positions + int32_t posUpto; // Next write address for positions + }; + + + /* Stores norms, buffered in RAM, until they are flushed + * to a partial segment. */ + class BufferedNorms { + public: + CL_NS(store)::RAMOutputStream out; + int32_t upto; + + BufferedNorms(); + void add(float_t norm); + void reset(); + void fill(int32_t docID); + }; + + + // Used only when infoStream != null + int64_t segmentSize(const std::string& segmentName); + + static const int32_t POINTER_NUM_BYTE; + static const int32_t INT_NUM_BYTE; + static const int32_t CHAR_NUM_BYTE; + + // Holds free pool of Posting instances + CL_NS(util)::ObjectArray postingsFreeListDW; + int32_t postingsFreeCountDW; + int32_t postingsAllocCountDW; + + typedef CL_NS(util)::CLArrayList FreeCharBlocksType; + FreeCharBlocksType freeCharBlocks; + + /* We have three pools of RAM: Postings, uint8_t blocks + * (holds freq/prox posting data) and char blocks (holds + * characters in the term). Different docs require + * varying amount of storage from these three classes. + * For example, docs with many unique single-occurrence + * short terms will use up the Postings RAM and hardly any + * of the other two. Whereas docs with very large terms + * will use alot of char blocks RAM and relatively less of + * the other two. This method just frees allocations from + * the pools once we are over-budget, which balances the + * pools to match the current docs. */ + void balanceRAM(); + + std::vector* _files; // Cached list of files we've created + std::vector* _abortedFiles; // List of files that were written before last abort() + + bool allThreadsIdle(); + + bool hasNorms; // Whether any norms were seen since last flush + + DefaultSkipListWriter* skipListWriter; + + bool currentFieldStorePayloads; + + /** Creates a segment from all Postings in the Postings + * hashes across all ThreadStates & FieldDatas. */ + void writeSegment(std::vector& flushedFiles); + + /** Returns the name of the file with this extension, on + * the current segment we are working on. */ + std::string segmentFileName(const std::string& extension); + std::string segmentFileName(const char* extension); + + TermInfo termInfo; // minimize consing + + + /** Reset after a flush */ + void resetPostingsData(); + + static const uint8_t defaultNorm; ///=Similarity::encodeNorm(1.0f) + + bool timeToFlushDeletes(); + + // Buffer a term in bufferedDeleteTerms, which records the + // current number of documents buffered in ram so that the + // delete term will be applied to those documents as well + // as the disk segments. + void addDeleteTerm(Term* term, int32_t docCount); + + // Buffer a specific docID for deletion. Currently only + // used when we hit a exception when adding a document + void addDeleteDocID(int32_t docId); + + typedef CL_NS(util)::CLArrayList > FreeByteBlocksType; + FreeByteBlocksType freeByteBlocks; + + + /** Per-thread state. We keep a separate Posting hash and + * other state for each thread and then merge postings * + * hashes from all threads when writing the segment. */ + class ThreadState { + public: + /** Holds data associated with a single field, including + * the Postings hash. A document may have many * + * occurrences for a given field name; we gather all * + * such occurrences here (in docFields) so that we can + * * process the entire field at once. */ + class FieldData: public CL_NS(util)::Comparable { + private: + ThreadState* threadState; + + int32_t fieldCount; + CL_NS(util)::ValueArray docFields; + + FieldData* next; + + bool postingsCompacted; + + CL_NS(util)::ValueArray postingsHash; + int32_t postingsHashSize; + int32_t postingsHashHalfSize; + int32_t postingsHashMask; + + int32_t postingsVectorsUpto; + DocumentsWriter* _parent; + + int32_t offsetEnd; + CL_NS(analysis)::Token* localToken; + + int32_t offsetStartCode; + int32_t offsetStart; + + ByteSliceReader* vectorSliceReader; + + void initPostingArrays(); + + /** Only called when term vectors are enabled. This + * is called the first time we see a given term for + * each * document, to allocate a PostingVector + * instance that * is used to record data needed to + * write the posting * vectors. */ + PostingVector* addNewVector(); + + /** This is the hotspot of indexing: it's called once + * for every term of every document. Its job is to * + * update the postings uint8_t stream (Postings hash) * + * based on the occurence of a single term. */ + void addPosition(CL_NS(analysis)::Token* token); + + /** Called when postings hash is too small (> 50% + * occupied) or too large (< 20% occupied). */ + void rehashPostings(int32_t newSize); + + /** Called once per field per document if term vectors + * are enabled, to write the vectors to * + * RAMOutputStream, which is then quickly flushed to + * the real term vectors files in the Directory. */ + void writeVectors(FieldInfo* fieldInfo); + + void compactPostings(); + + public: + int32_t numPostings; + FieldInfo* fieldInfo; + int32_t lastGen; + int32_t position; + int32_t length; + int32_t offset; + float_t boost; + bool doNorms; + bool doVectors; + bool doVectorPositions; + bool doVectorOffsets; + void resetPostingArrays(); + + FieldData(DocumentsWriter* _parent, ThreadState* __threadState, FieldInfo* fieldInfo); + ~FieldData(); + + /** So Arrays.sort can sort us. */ + int32_t compareTo(const void* o); + + /** Collapse the hash table & sort in-place. */ + CL_NS(util)::ValueArray* sortPostings(); + + /** Process all occurrences of one field in the document. */ + void processField(CL_NS(analysis)::Analyzer* analyzer); + + /* Invert one occurrence of one field in the document */ + void invertField(CL_NS(document)::Field* field, CL_NS(analysis)::Analyzer* analyzer, int32_t maxFieldLength); + + static bool sort(FieldData*, FieldData*); + + const char* getObjectName() const; + static const char* getClassName(); + int32_t compareTo(lucene::util::NamedObject *); + friend class ThreadState; + friend class FieldMergeState; + }; + + private: + CL_NS(util)::ValueArray postingsFreeListTS; // Free Posting instances + int32_t postingsFreeCountTS; + + CL_NS(util)::ValueArray vectorFieldPointers; + CL_NS(util)::ValueArray vectorFieldNumbers; + + int32_t numStoredFields; // How many stored fields in current doc + float_t docBoost; // Boost for current doc + + CL_NS(util)::ValueArray fieldDataArray; // Fields touched by current doc + int32_t numFieldData; // How many fields in current doc + int32_t numVectorFields; // How many vector fields in current doc + + CL_NS(util)::ValueArray fieldDataHash; // Hash FieldData instances by field name + int32_t fieldDataHashMask; + TCHAR* maxTermPrefix; // Non-null prefix of a too-large term if this + // doc has one + + int32_t fieldGen; + + CL_NS(util)::ObjectArray postingsVectors; + int32_t maxPostingsVectors; + + // Used to read a string value for a field + ReusableStringReader* stringReader; + + + ByteBlockPool* postingsPool; + ByteBlockPool* vectorsPool; + CharBlockPool* charPool; + + // Current posting we are working on + Posting* p; + PostingVector* vector; + + //writeFreqByte... + uint8_t* freq; + int32_t freqUpto; + + //writeProxByte... + uint8_t* prox; + int32_t proxUpto; + + //writeOffsetByte... + uint8_t* offsets; + int32_t offsetUpto; + + //writePosByte... + uint8_t* pos; + int32_t posUpto; + + + /** Do in-place sort of Posting array */ + void doPostingSort(Posting** postings, int32_t numPosting); + + void quickSort(Posting** postings, int32_t lo, int32_t hi); + + /** Do in-place sort of PostingVector array */ + void doVectorSort(CL_NS(util)::ArrayBase& postings, int32_t numPosting); + + void quickSort(CL_NS(util)::ArrayBase& postings, int32_t lo, int32_t hi); + + // USE ONLY FOR DEBUGGING! + /* + public String getPostingText() { + char[] text = charPool.buffers[p.textStart >> CHAR_BLOCK_SHIFT]; + int32_t upto = p.textStart & CHAR_BLOCK_MASK; + while(text[upto] != CLUCENE_END_OF_WORD) + upto++; + return new String(text, p.textStart, upto-(p.textStart & BYTE_BLOCK_MASK)); + } + */ + + /** Test whether the text for current Posting p equals + * current tokenText. */ + bool postingEquals(const TCHAR* tokenText, int32_t tokenTextLen); + + /** Compares term text for two Posting instance and + * returns -1 if p1 < p2; 1 if p1 > p2; else 0. + */ + int32_t comparePostings(Posting* p1, Posting* p2); + + + public: + bool isIdle; // Whether we are in use + CL_NS(store)::RAMOutputStream* tvfLocal; // Term vectors for one doc + CL_NS(store)::RAMOutputStream* fdtLocal; // Stored fields for one doc + FieldsWriter* localFieldsWriter; // Fields for one doc + int32_t numThreads; // Number of threads that use this instance + int32_t numAllFieldData; + CL_NS(util)::ValueArray allFieldDataArray; // All FieldData instances + bool doFlushAfter; + int32_t docID; // docID we are now working on + + DocumentsWriter* _parent; + + ThreadState(DocumentsWriter* _parent); + virtual ~ThreadState(); + + /** Initializes shared state for this new document */ + void init(CL_NS(document)::Document* doc, int32_t docID); + + /** Tokenizes the fields of a document into Postings */ + void processDocument(CL_NS(analysis)::Analyzer* analyzer); + + /** If there are fields we've seen but did not see again + * in the last run, then free them up. Also reduce + * postings hash size. */ + void trimFields(); + + /** Clear the postings hash and return objects back to + * shared pool */ + void resetPostings(); + + /** Move all per-document state that was accumulated in + * the ThreadState into the "real" stores. */ + void writeDocument(); + + /** Write vInt into freq stream of current Posting */ + void writeFreqVInt(int32_t i); + + /** Write vInt into prox stream of current Posting */ + void writeProxVInt(int32_t i); + + /** Write uint8_t into freq stream of current Posting */ + void writeFreqByte(uint8_t b); + + /** Write uint8_t into prox stream of current Posting */ + void writeProxByte(uint8_t b); + + /** Currently only used to copy a payload into the prox + * stream. */ + void writeProxBytes(uint8_t* b, int32_t offset, int32_t len); + + /** Write vInt into offsets stream of current + * PostingVector */ + void writeOffsetVInt(int32_t i); + + /** Write uint8_t into offsets stream of current + * PostingVector */ + void writeOffsetByte(uint8_t b); + + /** Write vInt into pos stream of current + * PostingVector */ + void writePosVInt(int32_t i); + + /** Write uint8_t into pos stream of current + * PostingVector */ + void writePosByte(uint8_t b); + + friend class FieldMergeState; + }; + + /* Class that Posting and PostingVector use to write uint8_t + * streams into shared fixed-size uint8_t[] arrays. The idea + * is to allocate slices of increasing lengths For + * example, the first slice is 5 bytes, the next slice is + * 14, etc. We start by writing our bytes into the first + * 5 bytes. When we hit the end of the slice, we allocate + * the next slice and then write the address of the new + * slice into the last 4 bytes of the previous slice (the + * "forwarding address"). + * + * Each slice is filled with 0's initially, and we mark + * the end with a non-zero uint8_t. This way the methods + * that are writing into the slice don't need to record + * its length and instead allocate a new slice once they + * hit a non-zero uint8_t. */ + template + class BlockPool { + protected: + bool trackAllocations; + + int32_t numBuffer; + + int32_t bufferUpto; // Which buffer we are upto + int32_t blockSize; + + DocumentsWriter* parent; + public: + CL_NS(util)::ValueArray< T* > buffers; + int32_t tOffset; // Current head offset + int32_t tUpto; // Where we are in head buffer + T* buffer; // Current head buffer + + virtual T* getNewBlock(bool trackAllocations) = 0; + + BlockPool(DocumentsWriter* _parent, int32_t _blockSize, bool trackAllocations): + buffers(CL_NS(util)::ValueArray(10)) + { + this->blockSize = _blockSize; + this->parent = _parent; + bufferUpto = -1; + tUpto = blockSize; + tOffset = -blockSize; + buffer = NULL; + numBuffer = 0; + this->trackAllocations = trackAllocations; + buffer = NULL; + } + virtual ~BlockPool(){ + buffers.deleteValues(); + } + + virtual void reset() = 0; + + void nextBuffer() { + if (1+bufferUpto == buffers.length) { + //expand the number of buffers + buffers.resize( (int32_t)(buffers.length * 1.5)); + } + buffer = buffers.values[1+bufferUpto] = getNewBlock(trackAllocations); + bufferUpto++; + + tUpto = 0; + tOffset += blockSize; + } + + friend class DocumentsWriter; + friend class DocumentsWriter::ThreadState; + friend class DocumentsWriter::ThreadState::FieldData; + friend class DocumentsWriter::FieldMergeState; + friend class DocumentsWriter::ByteSliceReader; + }; + + class CharBlockPool: public BlockPool{ + public: + CharBlockPool(DocumentsWriter* _parent); + virtual ~CharBlockPool(); + TCHAR* getNewBlock(bool trackAllocations); + void reset(); + friend class DocumentsWriter::FieldMergeState; + }; + class ByteBlockPool: public BlockPool{ + public: + ByteBlockPool( bool _trackAllocations, DocumentsWriter* _parent); + virtual ~ByteBlockPool(); + uint8_t* getNewBlock(bool trackAllocations); + int32_t newSlice(const int32_t size); + int32_t allocSlice(uint8_t* slice, const int32_t upto); + void reset(); + + friend class DocumentsWriter::ThreadState; + }; + + + + // Max # ThreadState instances; if there are more threads + // than this they share ThreadStates + static const int32_t MAX_THREAD_STATE; + CL_NS(util)::ValueArray threadStates; + CL_NS(util)::CLHashMap<_LUCENE_THREADID_TYPE, ThreadState*, + CL_NS (util)::CLuceneThreadIdCompare,CL_NS (util)::CLuceneThreadIdCompare, + CL_NS (util)::Deletor::ConstNullVal<_LUCENE_THREADID_TYPE>, + CL_NS (util)::Deletor::Object > threadBindings; + int32_t numWaiting; + CL_NS(util)::ValueArray waitingThreadStates; + int32_t pauseThreads; // Non-zero when we need all threads to + // pause (eg to flush) + bool flushPending; // True when a thread has decided to flush + bool bufferIsFull; // True when it's time to write segment + int32_t abortCount; // Non-zero while abort is pending or running + + CL_NS(util)::ObjectArray norms; // Holds norms until we flush + + /** Does the synchronized work to finish/flush the + * inverted document. */ + void finishDocument(ThreadState* state); + + + /** Used to merge the postings from multiple ThreadStates + * when creating a segment */ + class FieldMergeState { + private: + ThreadState::FieldData* field; + CL_NS(util)::ValueArray* postings; + + Posting* p; + TCHAR* text; + int32_t textOffset; + + int32_t postingUpto; + + ByteSliceReader freq; + ByteSliceReader prox; + + int32_t docID; + int32_t termFreq; + public: + FieldMergeState(); + ~FieldMergeState(); + bool nextTerm(); + bool nextDoc(); + + friend class DocumentsWriter; + }; + + +public: + DocumentsWriter(CL_NS(store)::Directory* directory, IndexWriter* writer); + ~DocumentsWriter(); + + /** If non-null, various details of indexing are printed + * here. */ + void setInfoStream(std::ostream* infoStream); + + /** Set how much RAM we can use before flushing. */ + void setRAMBufferSizeMB(float_t mb); + + float_t getRAMBufferSizeMB(); + + /** Set max buffered docs, which means we will flush by + * doc count instead of by RAM usage. */ + void setMaxBufferedDocs(int32_t count); + + int32_t getMaxBufferedDocs(); + + /** Get current segment name we are writing. */ + std::string getSegment(); + + /** Returns how many docs are currently buffered in RAM. */ + int32_t getNumDocsInRAM(); + + /** Returns the current doc store segment we are writing + * to. This will be the same as segment when autoCommit + * * is true. */ + const std::string& getDocStoreSegment(); + + /** Returns the doc offset into the shared doc store for + * the current buffered docs. */ + int32_t getDocStoreOffset(); + + /** Closes the current open doc stores an returns the doc + * store segment name. This returns a blank string if there are + * no buffered documents. */ + std::string closeDocStore(); + + const std::vector* abortedFiles(); + + /* Returns list of files in use by this instance, + * including any flushed segments. */ + const std::vector& files(); + + void setAborting(); + + /** Called if we hit an exception when adding docs, + * flushing, etc. This resets our state, discarding any + * docs added since last flush. If ae is non-null, it + * contains the root cause exception (which we re-throw + * after we are done aborting). */ + void abort(AbortException* ae); + + // Returns true if an abort is in progress + bool pauseAllThreads(); + + void resumeAllThreads(); + + std::vector newFiles; + + /** Flush all pending docs to a new segment */ + int32_t flush(bool closeDocStore); + + /** Build compound file for the segment we just flushed */ + void createCompoundFile(const std::string& segment); + + /** Set flushPending if it is not already set and returns + * whether it was set. This is used by IndexWriter to * + * trigger a single flush even when multiple threads are + * * trying to do so. */ + bool setFlushPending(); + + void clearFlushPending(); + + /** Write norms in the "true" segment format. This is + * called only during commit, to create the .nrm file. */ + void writeNorms(const std::string& segmentName, int32_t totalNumDoc); + + int32_t compareText(const TCHAR* text1, const TCHAR* text2); + + /* Walk through all unique text tokens (Posting + * instances) found in this field and serialize them + * into a single RAM segment. */ + void appendPostings(CL_NS(util)::ArrayBase* fields, + TermInfosWriter* termsOut, + CL_NS(store)::IndexOutput* freqOut, + CL_NS(store)::IndexOutput* proxOut); + + void close(); + + /** Returns a free (idle) ThreadState that may be used for + * indexing this one document. This call also pauses if a + * flush is pending. If delTerm is non-null then we + * buffer this deleted term after the thread state has + * been acquired. */ + ThreadState* getThreadState(CL_NS(document)::Document* doc, Term* delTerm); + + /** Returns true if the caller (IndexWriter) should now + * flush. */ + bool addDocument(CL_NS(document)::Document* doc, CL_NS(analysis)::Analyzer* analyzer); + + bool updateDocument(Term* t, CL_NS(document)::Document* doc, CL_NS(analysis)::Analyzer* analyzer); + + bool updateDocument(CL_NS(document)::Document* doc, CL_NS(analysis)::Analyzer* analyzer, Term* delTerm); + + int32_t getNumBufferedDeleteTerms(); + + const TermNumMapType& getBufferedDeleteTerms(); + + const std::vector* getBufferedDeleteDocIDs(); + + // Reset buffered deletes. + void clearBufferedDeletes(); + + bool bufferDeleteTerms(const CL_NS(util)::ArrayBase* terms); + + bool bufferDeleteTerm(Term* term); + + void setMaxBufferedDeleteTerms(int32_t maxBufferedDeleteTerms); + + int32_t getMaxBufferedDeleteTerms(); + + bool hasDeletes(); + + int64_t getRAMUsed(); + + int64_t numBytesAlloc; + int64_t numBytesUsed; + + /* Used only when writing norms to fill in default norm + * value into the holes in docID stream for those docs + * that didn't have this field. */ + static void fillBytes(CL_NS(store)::IndexOutput* out, uint8_t b, int32_t numBytes); + + uint8_t* copyByteBuffer; + + /** Copy numBytes from srcIn to destIn */ + void copyBytes(CL_NS(store)::IndexInput* srcIn, CL_NS(store)::IndexOutput* destIn, int64_t numBytes); + + + // Size of each slice. These arrays should be at most 16 + // elements. First array is just a compact way to encode + // X+1 with a max. Second array is the length of each + // slice, ie first slice is 5 bytes, next slice is 14 + // bytes, etc. + static const int32_t nextLevelArray[10]; + static const int32_t levelSizeArray[10]; + + // Why + 5*POINTER_NUM_BYTE below? + // 1: Posting has "vector" field which is a pointer + // 2: Posting is referenced by postingsFreeList array + // 3,4,5: Posting is referenced by postings hash, which + // targets 25-50% fill factor; approximate this + // as 3X # pointers + //TODO: estimate this accurately for C++! + static const int32_t POSTING_NUM_BYTE; /// = OBJECT_HEADER_BYTES + 9*INT_NUM_BYTE + 5*POINTER_NUM_BYTE; + + /* Allocate more Postings from shared pool */ + void getPostings(CL_NS(util)::ValueArray& postings); + void recyclePostings(CL_NS(util)::ValueArray& postings, int32_t numPostings); + + /* Initial chunks size of the shared uint8_t[] blocks used to + store postings data */ + static const int32_t BYTE_BLOCK_SHIFT; + static const int32_t BYTE_BLOCK_SIZE; + static const int32_t BYTE_BLOCK_MASK; + static const int32_t BYTE_BLOCK_NOT_MASK; + + /* Allocate another uint8_t[] from the shared pool */ + uint8_t* getByteBlock(bool trackAllocations); + + /* Return a uint8_t[] to the pool */ + void recycleBlocks(CL_NS(util)::ArrayBase& blocks, int32_t start, int32_t end); + + /* Initial chunk size of the shared char[] blocks used to + store term text */ + static const int32_t CHAR_BLOCK_SHIFT; + static const int32_t CHAR_BLOCK_SIZE; + static const int32_t CHAR_BLOCK_MASK; + + static const int32_t MAX_TERM_LENGTH; + + /* Allocate another char[] from the shared pool */ + TCHAR* getCharBlock(); + + /* Return a char[] to the pool */ + void recycleBlocks(CL_NS(util)::ArrayBase& blocks, int32_t start, int32_t numBlocks); + + std::string toMB(int64_t v); + + +}; + +#define CLUCENE_END_OF_WORD 0x0 + +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/_FieldInfo.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/_FieldInfo.h new file mode 100644 index 0000000..506499f --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/_FieldInfo.h @@ -0,0 +1,13 @@ +/*------------------------------------------------------------------------------ +* 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_ + + +#error "This header is deprecated, use _FieldInfos.h instead" + +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/_FieldInfos.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/_FieldInfos.h new file mode 100644 index 0000000..fe2acfe --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/_FieldInfos.h @@ -0,0 +1,198 @@ +/*------------------------------------------------------------------------------ +* 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_FieldInfos_ +#define _lucene_index_FieldInfos_ + +#include "CLucene/store/Directory.h" + +CL_CLASS_DEF(document,Document) +CL_CLASS_DEF(document,Field) + +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 + + bool storePayloads; // whether this field stores payloads together with term positions + + //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, + const bool isIndexed, + const int32_t fieldNumber, + const bool storeTermVector, + const bool storeOffsetWithTermVector, + const bool storePositionWithTermVector, + const bool omitNorms, + const bool storePayloads); + + //Func - Destructor + //Pre - true + //Post - The instance has been destroyed + ~FieldInfo(); + + /* Clones this + * @memory - caller is responsible for deleting the returned object + */ + FieldInfo* clone(); +}; + +/** 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 CLUCENE_EXPORT FieldInfos :LUCENE_BASE{ + //we now use internd field names, so we can use the voidCompare + //to directly compare the strings + typedef CL_NS(util)::CLHashMap defByName; + defByName byName; + + CL_NS(util)::CLArrayList > byNumber; +public: + enum{ + IS_INDEXED = 0x1, + STORE_TERMVECTOR = 0x2, + STORE_POSITIONS_WITH_TERMVECTOR = 0x4, + STORE_OFFSET_WITH_TERMVECTOR = 0x8, + OMIT_NORMS = 0x10, + STORE_PAYLOADS = 0x20 + }; + + 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 The name of the file to open the IndexInput from in the Directory + * @throws IOException + */ + FieldInfos(CL_NS(store)::Directory* d, const char* name); + + /** + * Returns a deep clone of this FieldInfos instance. + * @memory caller is responisble for deleting returned object + */ + FieldInfos* clone(); + + /** Adds field info for a Document. */ + void add(const CL_NS(document)::Document* doc); + + /** + * Add fields that are indexed. Whether they have termvectors has to be specified. + * + * @param names The names of the fields. An array of TCHARs, last item has to be NULL + * @param storeTermVectors Whether the fields store term vectors or not + * @param storePositionWithTermVector treu if positions should be stored. + * @param storeOffsetWithTermVector true if offsets should be stored + */ + void addIndexed(const TCHAR** names, const bool storeTermVectors, const bool storePositionWithTermVector, const bool storeOffsetWithTermVector); + + /** + * Assumes the fields are not storing term vectors. + * + * @param names The names of the fields + * @param isIndexed Whether the fields are indexed or not + * + * @see #add(TCHAR*, bool) + */ + void add(const TCHAR** names, const bool isIndexed, const bool storeTermVector=false, + const bool storePositionWithTermVector=false, const bool storeOffsetWithTermVector=false, + const bool omitNorms=false, const bool storePayloads=false); + + // 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 + * @param omitNorms true if the norms for the indexed field should be omitted + * @param storePayloads true if payloads should be stored for this field + */ + FieldInfo* add(const TCHAR* name, const bool isIndexed, const bool storeTermVector=false, + const bool storePositionWithTermVector=false, const bool storeOffsetWithTermVector=false, const bool omitNorms=false, const bool storePayloads=false); + + // was void + FieldInfo* addInternal( const TCHAR* name,const bool isIndexed, const bool storeTermVector, + const bool storePositionWithTermVector, const bool storeOffsetWithTermVector, const bool omitNorms, const bool storePayloads); + + 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; + + /** + * 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 int32_t fieldNumber) const; + + size_t size()const; + bool hasVectors() const; + + + void write(CL_NS(store)::Directory* d, const char* name) const; + void write(CL_NS(store)::IndexOutput* output) const; + +private: + void read(CL_NS(store)::IndexInput* input); + +}; +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/_FieldsReader.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/_FieldsReader.h new file mode 100644 index 0000000..33aec75 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/_FieldsReader.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. +------------------------------------------------------------------------------*/ +#ifndef _lucene_index_FieldsReader_ +#define _lucene_index_FieldsReader_ + +#include "CLucene/util/_ThreadLocal.h" +CL_CLASS_DEF(store,Directory) +CL_CLASS_DEF(document,Document) +#include "CLucene/document/Field.h" +CL_CLASS_DEF(document,FieldSelector) +CL_CLASS_DEF(index, FieldInfo) +CL_CLASS_DEF(index, FieldInfos) +CL_CLASS_DEF(store,IndexInput) + +CL_NS_DEF(index) + + /** + * Class responsible for access to stored document fields. + *

+ * It uses <segment>.fdt and <segment>.fdx; files. + */ + class FieldsReader :LUCENE_BASE{ + private: + const FieldInfos* fieldInfos; + + // The main fieldStream, used only for cloning. + CL_NS(store)::IndexInput* cloneableFieldsStream; + + // This is a clone of cloneableFieldsStream used for reading documents. + // It should not be cloned outside of a synchronized context. + CL_NS(store)::IndexInput* fieldsStream; + + CL_NS(store)::IndexInput* indexStream; + int32_t numTotalDocs; + int32_t _size; + bool closed; + + // The docID offset where our docs begin in the index + // file. This will be 0 if we have our own private file. + int32_t docStoreOffset; + + DEFINE_MUTEX(THIS_LOCK) + CL_NS(util)::ThreadLocal > fieldsStreamTL; + static void uncompress(const CL_NS(util)::ValueArray& input, CL_NS(util)::ValueArray& output); + public: + FieldsReader(CL_NS(store)::Directory* d, const char* segment, FieldInfos* fn, + int32_t readBufferSize = CL_NS(store)::BufferedIndexInput::BUFFER_SIZE, int32_t docStoreOffset = -1, int32_t size = 0); + virtual ~FieldsReader(); + + //protected: + /** + * @throws an exception (CL_ERR_IllegalState) if this FieldsReader is closed + */ + void ensureOpen(); + + /** + * Closes the underlying {@link org.apache.lucene.store.IndexInput} streams, including any ones associated with a + * lazy implementation of a Field. This means that the Fields values will not be accessible. + * + * @throws IOException + */ + 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, const CL_NS(document)::FieldSelector* fieldSelector = NULL); + + protected: + /** Returns the length in bytes of each raw document in a + * contiguous range of length numDocs starting with + * startDocID. Returns the IndexInput (the fieldStream), + * already seeked to the starting point for startDocID.*/ + CL_NS(store)::IndexInput* rawDocs(int32_t* lengths, const int32_t startDocID, const int32_t numDocs); + + private: + /** + * Skip the field. We still have to read some of the information about the field, but can skip past the actual content. + * This will have the most payoff on large fields. + */ + void skipField(const bool binary, const bool compressed); + void skipField(const bool binary, const bool compressed, const int32_t toRead); + + void addFieldLazy(CL_NS(document)::Document& doc, const FieldInfo* fi, const bool binary, const bool compressed, const bool tokenize); + + /** Add the size of field as a byte[] containing the 4 bytes of the integer byte size (high order byte first; char = 2 bytes) + * Read just the size -- caller must skip the field content to continue reading fields + * Return the size in bytes or chars, depending on field type + */ + int32_t addFieldSize(CL_NS(document)::Document& doc, const FieldInfo* fi, const bool binary, const bool compressed); + + // in merge mode we don't uncompress the data of a compressed field + void addFieldForMerge(CL_NS(document)::Document& doc, const FieldInfo* fi, const bool binary, const bool compressed, const bool tokenize); + + void addField(CL_NS(document)::Document& doc, const FieldInfo* fi, const bool binary, const bool compressed, const bool tokenize); + + CL_NS(document)::Field::TermVector getTermVectorType(const FieldInfo* fi); + CL_NS(document)::Field::Index getIndexType(const FieldInfo* fi, const bool tokenize); + + private: + /** + * A Lazy implementation of Field that differs loading of fields until asked for, instead of when the Document is + * loaded. + */ + class LazyField : public CL_NS(document)::Field { + private: + int32_t toRead; + int64_t pointer; + FieldsReader* parent; + + public: + LazyField(FieldsReader* _parent, const TCHAR* _name, int config, const int32_t _toRead, const int64_t _pointer); + virtual ~LazyField(); + private: + CL_NS(store)::IndexInput* getFieldStream(); + + public: + /** The value of the field in Binary, or null. If null, the Reader value, + * String value, or TokenStream value is used. Exactly one of stringValue(), + * readerValue(), binaryValue(), and tokenStreamValue() must be set. */ + virtual const CL_NS(util)::ValueArray* binaryValue(); + + /** The value of the field as a Reader, or null. If null, the String value, + * binary value, or TokenStream value is used. Exactly one of stringValue(), + * readerValue(), binaryValue(), and tokenStreamValue() must be set. */ + virtual CL_NS(util)::Reader* readerValue(); + + /** The value of the field as a String, or null. If null, the Reader value, + * binary value, or TokenStream value is used. Exactly one of stringValue(), + * readerValue(), binaryValue(), and tokenStreamValue() must be set. */ + virtual const TCHAR* stringValue(); + + /** The value of the field as a TokesStream, or null. If null, the Reader value, + * String value, or binary value is used. Exactly one of stringValue(), + * readerValue(), binaryValue(), and tokenStreamValue() must be set. */ + virtual CL_NS(analysis)::TokenStream* tokenStreamValue(); + + int64_t getPointer() const; + void setPointer(const int64_t _pointer); + + int32_t getToRead() const; + void setToRead(const int32_t _toRead); + }; + friend class LazyField; + friend class SegmentMerger; + friend class FieldsWriter; + + // Instances of this class hold field properties and data + // for merge + class FieldForMerge : public CL_NS(document)::Field { + public: + const TCHAR* stringValue() const; + CL_NS(util)::Reader* readerValue() const; + const CL_NS(util)::ValueArray* binaryValue(); + CL_NS(analysis)::TokenStream* tokenStreamValue() const; + + FieldForMerge(void* _value, ValueType _type, const FieldInfo* fi, const bool binary, const bool compressed, const bool tokenize); + virtual ~FieldForMerge(); + + virtual const char* getObjectName() const; + static const char* getClassName(); + }; + }; +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/_FieldsWriter.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/_FieldsWriter.h new file mode 100644 index 0000000..d0622aa --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/_FieldsWriter.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_index_FieldsWriter_ +#define _lucene_index_FieldsWriter_ + +CL_CLASS_DEF(store,Directory) +CL_CLASS_DEF(store,IndexOutput) +CL_CLASS_DEF(store,IndexInput) +CL_CLASS_DEF(index,FieldInfo) +CL_CLASS_DEF(store,RAMOutputStream) +CL_CLASS_DEF(document,Document) +CL_CLASS_DEF(document,Field) +CL_CLASS_DEF(index,FieldInfos) +#include "CLucene/util/Array.h" + +CL_NS_DEF(index) +class FieldsWriter :LUCENE_BASE{ +private: + FieldInfos* fieldInfos; + + CL_NS(store)::IndexOutput* fieldsStream; + CL_NS(store)::IndexOutput* indexStream; + + bool doClose; + + static void compress(const CL_NS(util)::ValueArray& input, CL_NS(util)::ValueArray& output); + +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 char* segment, FieldInfos* fn); + FieldsWriter(CL_NS(store)::IndexOutput* fdx, CL_NS(store)::IndexOutput* fdt, FieldInfos* fn); + ~FieldsWriter(); + + // Writes the contents of buffer into the fields stream + // and adds a new entry for this document into the index + // stream. This assumes the buffer was already written + // in the correct fields format. + void flushDocument(int32_t numStoredFields, CL_NS(store)::RAMOutputStream* buffer); + + void flush(); + + void writeField(FieldInfo* fi, CL_NS(document)::Field* field); + + void close(); + + /** Bulk write a contiguous series of documents. The + * lengths array is the length (in bytes) of each raw + * document. The stream IndexInput is the + * fieldsStream from which we should bulk-copy all + * bytes. */ + void addRawDocuments(CL_NS(store)::IndexInput* stream, const int32_t* lengths, const int32_t numDocs); + void addDocument(CL_NS(document)::Document* doc); +}; +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/_IndexFileDeleter.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/_IndexFileDeleter.h new file mode 100644 index 0000000..edf1f9b --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/_IndexFileDeleter.h @@ -0,0 +1,224 @@ +/*------------------------------------------------------------------------------ +* 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_IndexFileDeleter_ +#define _lucene_index_IndexFileDeleter_ + +#include "CLucene/util/Equators.h" +#include "IndexDeletionPolicy.h" + +CL_CLASS_DEF(store,Directory) +CL_NS_DEF(index) +class SegmentInfos; +class DocumentsWriter; +class IndexDeletionPolicy; + +/* + * This class keeps track of each SegmentInfos instance that + * is still "live", either because it corresponds to a + * segments_N file in the Directory (a "commit", i.e. a + * committed SegmentInfos) or because it's the in-memory SegmentInfos + * that a writer is actively updating but has not yet committed + * (currently this only applies when autoCommit=false in IndexWriter). + * This class uses simple reference counting to map the live + * SegmentInfos instances to individual files in the Directory. + * + * The same directory file may be referenced by more than + * one IndexCommitPoints, i.e. more than one SegmentInfos. + * Therefore we count how many commits reference each file. + * When all the commits referencing a certain file have been + * deleted, the refcount for that file becomes zero, and the + * file is deleted. + * + * A separate deletion policy interface + * (IndexDeletionPolicy) is consulted on creation (onInit) + * and once per commit (onCommit), to decide when a commit + * should be removed. + * + * It is the business of the IndexDeletionPolicy to choose + * when to delete commit points. The actual mechanics of + * file deletion, retrying, etc, derived from the deletion + * of commit points is the business of the IndexFileDeleter. + * + * The current default deletion policy is {@link + * KeepOnlyLastCommitDeletionPolicy}, which removes all + * prior commits when a new commit has completed. This + * matches the behavior before 2.2. + * + * Note that you must hold the write.lock before + * instantiating this class. It opens segments_N file(s) + * directly with no retry logic. + */ +class IndexFileDeleter { +private: + /** + * Tracks the reference count for a single index file: + */ + class RefCount { + public: + int count; + int IncRef() { + return ++count; + } + int DecRef() { + return --count; + } + }; + + /** + * Holds details for each commit point. This class is + * also passed to the deletion policy. Note: this class + * has a natural ordering that is inconsistent with + * equals. + */ + class CommitPoint: public IndexCommitPoint, public CL_NS(util)::Comparable { + int64_t gen; + std::string segmentsFileName; + IndexFileDeleter* _this; + public: + std::vector files; + bool deleted; + + CommitPoint(IndexFileDeleter* _this, SegmentInfos* segmentInfos); + virtual ~CommitPoint(); + + /** + * Get the segments_N file for this commit point. + */ + std::string getSegmentsFileName(); + + const std::vector& getFileNames(); + + /** + * Called only be the deletion policy, to remove this + * commit point from the index. + */ + void deleteCommitPoint(); + + int32_t compareTo(NamedObject* obj); + + static const char* getClassName(); + const char* getObjectName() const; + static bool sort(IndexCommitPoint* elem1, IndexCommitPoint* elem2); + }; + +private: + /* Files that we tried to delete but failed (likely + * because they are open and we are running on Windows), + * so we will retry them again later: */ + std::vector deletable; + + typedef CL_NS(util)::CLHashMap > RefCountsType; + /* Reference count for all files in the index. + * Counts how many existing commits reference a file. + * Maps String to RefCount (class below) instances: */ + RefCountsType refCounts; + + typedef CL_NS(util)::CLVector > CommitsType; + /* Holds all commits (segments_N) currently in the index. + * This will have just 1 commit if you are using the + * default delete policy (KeepOnlyLastCommitDeletionPolicy). + * Other policies may leave commit points live for longer + * in which case this list would be longer than 1: */ + CommitsType commits; + + /* Holds files we had incref'd from the previous + * non-commit checkpoint: */ + std::vector lastFiles; + + /* Commits that the IndexDeletionPolicy have decided to delete: */ + CL_NS(util)::CLArrayList commitsToDelete; + + std::ostream* infoStream; + CL_NS(store)::Directory* directory; + IndexDeletionPolicy* policy; + DocumentsWriter* docWriter; + + +public: + void deletePendingFiles(); + + void setInfoStream(std::ostream* infoStream); + void message(std::string message); + void decRef(const std::string& fileName); + RefCount* getRefCount(const char* fileName); + + /** + * Remove the CommitPoints in the commitsToDelete List by + * DecRef'ing all files from each SegmentInfos. + */ + void deleteCommits(); + + /** Change to true to see details of reference counts when + * infoStream != null */ + static bool VERBOSE_REF_COUNTS; + + /** + * Initialize the deleter: find all previous commits in + * the Directory, incref the files they reference, call + * the policy to let it delete commits. The incoming + * segmentInfos must have been loaded from a commit point + * and not yet modified. This will remove any files not + * referenced by any of the commits. + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + IndexFileDeleter(CL_NS(store)::Directory* directory, IndexDeletionPolicy* policy, SegmentInfos* segmentInfos, std::ostream* infoStream, DocumentsWriter* docWriter); + ~IndexFileDeleter(); + + /** + * Writer calls this when it has hit an error and had to + * roll back, to tell us that there may now be + * unreferenced files in the filesystem. So we re-list + * the filesystem and delete such files. If segmentName + * is non-null, we will only delete files corresponding to + * that segment. + */ + void refresh(const char* segmentName); + void refresh(); + void close(); + + /** + * For definition of "check point" see IndexWriter comments: + * "Clarification: Check Points (and commits)". + * + * Writer calls this when it has made a "consistent + * change" to the index, meaning new files are written to + * the index and the in-memory SegmentInfos have been + * modified to point to those files. + * + * This may or may not be a commit (segments_N may or may + * not have been written). + * + * We simply incref the files referenced by the new + * SegmentInfos and decref the files we had previously + * seen (if any). + * + * If this is a commit, we also call the policy to give it + * a chance to remove other commits. If any commits are + * removed, we decref their files as well. + */ + void checkpoint(SegmentInfos* segmentInfos, bool isCommit); + + + void CLUCENE_LOCAL_DECL incRef(SegmentInfos* segmentInfos, bool isCommit); + void CLUCENE_LOCAL_DECL incRef(const std::vector& files); + void CLUCENE_LOCAL_DECL decRef(const std::vector& files) ; + void CLUCENE_LOCAL_DECL decRef(SegmentInfos* segmentInfos); + void CLUCENE_LOCAL_DECL deleteFiles(std::vector& files); + + /** Delets the specified files, but only if they are new + * (have not yet been incref'd). */ + void CLUCENE_LOCAL_DECL deleteNewFiles(const std::vector& files); + void CLUCENE_LOCAL_DECL deleteFile(const char* fileName); +}; + +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/_IndexFileNameFilter.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/_IndexFileNameFilter.h new file mode 100644 index 0000000..c825e6a --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/_IndexFileNameFilter.h @@ -0,0 +1,54 @@ +/*------------------------------------------------------------------------------ +* 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_IndexFileNameFilter_ +#define _lucene_index_IndexFileNameFilter_ + +#include "CLucene/util/Equators.h" +#include "CLucene/util/VoidList.h" + +CL_NS_DEF(index) +class FilenameFilter{ +public: + virtual bool accept(const char* dir, const char* name) const = 0; + virtual ~FilenameFilter(); +}; + +/** + * Filename filter that accept filenames and extensions only created by Lucene. + * + * @author Daniel Naber / Bernhard Messer + * @version $rcs = ' $Id: Exp $ ' ; + */ +class IndexFileNameFilter: public FilenameFilter { + static IndexFileNameFilter* _singleton; + static IndexFileNameFilter* singleton(); + CL_NS(util)::CLHashSet extensions; + CL_NS(util)::CLHashSet extensionsInCFS; +public: + IndexFileNameFilter(); + virtual ~IndexFileNameFilter(); + + /* (non-Javadoc) + * @see java.io.FilenameFilter#accept(java.io.File, java.lang.String) + */ + bool accept(const char* dir, const char* name) const; + + /** + * Returns true if this is a file that would be contained + * in a CFS file. This function should only be called on + * files that pass the above "accept" (ie, are already + * known to be a Lucene index file). + */ + bool isCFSFile(const char* name) const; + static const IndexFileNameFilter* getFilter(); + + static void _shutdown(); +}; + + +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/_IndexFileNames.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/_IndexFileNames.h new file mode 100644 index 0000000..e93687e --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/_IndexFileNames.h @@ -0,0 +1,55 @@ + +#ifndef _lucene_index_IndexFileNames_ +#define _lucene_index_IndexFileNames_ + +#include "CLucene/util/Array.h" + +CL_NS_DEF(index) + +class CLUCENE_EXPORT IndexFileNames { + static CL_NS(util)::ConstValueArray _INDEX_EXTENSIONS; + static CL_NS(util)::ConstValueArray _INDEX_EXTENSIONS_IN_COMPOUND_FILE; + static CL_NS(util)::ConstValueArray _STORE_INDEX_EXTENSIONS; + static CL_NS(util)::ConstValueArray _NON_STORE_INDEX_EXTENSIONS; + static CL_NS(util)::ConstValueArray _COMPOUND_EXTENSIONS; + static CL_NS(util)::ConstValueArray _VECTOR_EXTENSIONS; +public: + static const char* SEGMENTS; + static const char* SEGMENTS_GEN; + static const char* DELETABLE; + static const char* NORMS_EXTENSION; + static const char* FREQ_EXTENSION; + static const char* PROX_EXTENSION; + static const char* TERMS_EXTENSION; + static const char* TERMS_INDEX_EXTENSION; + static const char* FIELDS_INDEX_EXTENSION; + static const char* FIELDS_EXTENSION; + static const char* VECTORS_FIELDS_EXTENSION; + static const char* VECTORS_DOCUMENTS_EXTENSION; + static const char* VECTORS_INDEX_EXTENSION; + static const char* COMPOUND_FILE_EXTENSION; + static const char* COMPOUND_FILE_STORE_EXTENSION; + static const char* DELETES_EXTENSION; + static const char* FIELD_INFOS_EXTENSION; + static const char* PLAIN_NORMS_EXTENSION; + static const char* SEPARATE_NORMS_EXTENSION; + static const char* GEN_EXTENSION; + + LUCENE_STATIC_CONSTANT(int32_t,COMPOUND_EXTENSIONS_LENGTH=7); + LUCENE_STATIC_CONSTANT(int32_t,VECTOR_EXTENSIONS_LENGTH=3); + LUCENE_STATIC_CONSTANT(int32_t,STORE_INDEX_EXTENSIONS_LENGTH=5); + + static CL_NS(util)::ConstValueArray& INDEX_EXTENSIONS(); + static CL_NS(util)::ConstValueArray& INDEX_EXTENSIONS_IN_COMPOUND_FILE(); + static CL_NS(util)::ConstValueArray& STORE_INDEX_EXTENSIONS(); + static CL_NS(util)::ConstValueArray& NON_STORE_INDEX_EXTENSIONS(); + static CL_NS(util)::ConstValueArray& COMPOUND_EXTENSIONS(); + static CL_NS(util)::ConstValueArray& VECTOR_EXTENSIONS(); + + static std::string fileNameFromGeneration( const char* base, const char* extension, int64_t gen ); + static bool isDocStoreFile( const char* fileName ); + +}; + +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/_MultiSegmentReader.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/_MultiSegmentReader.h new file mode 100644 index 0000000..1ad94a8 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/_MultiSegmentReader.h @@ -0,0 +1,232 @@ +/*------------------------------------------------------------------------------ +* 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_MultiSegmentReader +#define _lucene_index_MultiSegmentReader + + +#include "DirectoryIndexReader.h" +#include "IndexReader.h" +CL_CLASS_DEF(document,Document) +//#include "Terms.h" +#include "_SegmentHeader.h" + +CL_NS_DEF(index) +class SegmentMergeQueue; + +class MultiSegmentReader:public DirectoryIndexReader{ + static int32_t readerIndex(const int32_t n, int32_t* starts, int32_t numSubReaders); +public: + typedef CL_NS(util)::CLHashtable > NormsCacheType; +private: + int32_t readerIndex(int32_t n) const; + bool hasNorms(const TCHAR* field); + uint8_t* fakeNorms(); + + void startCommit(); + void rollbackCommit(); + + bool _hasDeletions; + uint8_t* ones; + NormsCacheType normsCache; + int32_t _maxDoc; + int32_t _numDocs; + +protected: + CL_NS(util)::ArrayBase* subReaders; + int32_t* starts; // 1st docno for each segment + + void doSetNorm(int32_t n, const TCHAR* field, uint8_t value); + void doUndeleteAll(); + void commitChanges(); + // synchronized + void doClose(); + + // synchronized + void doDelete(const int32_t n); + DirectoryIndexReader* doReopen(SegmentInfos* infos); + + void initialize( CL_NS(util)::ArrayBase* subReaders); + +public: + + /** Construct reading the named set of readers. */ + MultiSegmentReader(CL_NS(store)::Directory* directory, SegmentInfos* sis, bool closeDirectory); + + /** This contructor is only used for {@link #reopen()} */ + CLUCENE_LOCAL_DECL MultiSegmentReader( + CL_NS(store)::Directory* directory, + SegmentInfos* sis, + bool closeDirectory, + CL_NS(util)::ArrayBase* oldReaders, + int32_t* oldStarts, + NormsCacheType* oldNormsCache); + + virtual ~MultiSegmentReader(); + + /** 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. + */ + TermFreqVector* getTermFreqVector(int32_t docNumber, const TCHAR* field=NULL); + CL_NS(util)::ArrayBase* getTermFreqVectors(int32_t docNumber); + void getTermFreqVector(int32_t docNumber, const TCHAR* field, TermVectorMapper* mapper); + void getTermFreqVector(int32_t docNumber, TermVectorMapper* mapper); + bool isOptimized(); + + // synchronized + int32_t numDocs(); + + int32_t maxDoc() const; + + bool document(int32_t n, CL_NS(document)::Document& doc, const CL_NS(document)::FieldSelector* fieldSelector); + + bool isDeleted(const int32_t n); + bool hasDeletions() const; + + // synchronized + uint8_t* norms(const TCHAR* field); + void norms(const TCHAR* field, uint8_t* result); + + TermEnum* terms(); + TermEnum* terms(const Term* term); + + //Returns the document frequency of the current term in the set + int32_t docFreq(const Term* t=NULL); + TermDocs* termDocs(); + TermPositions* termPositions(); + + void getFieldNames (FieldOption fldOption, StringArrayWithDeletor& retarray); + static void getFieldNames(FieldOption fldOption, StringArrayWithDeletor& retarray, CL_NS(util)::ArrayBase* subReaders); + + void setTermInfosIndexDivisor(int32_t indexDivisor); + int32_t getTermInfosIndexDivisor(); + + const CL_NS(util)::ArrayBase* getSubReaders() const; + + friend class MultiReader; + friend class SegmentReader; + friend class DirectoryIndexReader; + + static const char* getClassName(); + const char* getObjectName() const; +}; + + +class MultiTermDocs:public virtual TermDocs { +protected: + CL_NS(util)::ArrayBase* readerTermDocs; + + CL_NS(util)::ArrayBase* subReaders; + const int32_t* starts; + Term* term; + + int32_t base; + size_t pointer; + + TermDocs* current; // == segTermDocs[pointer] + TermDocs* termDocs(const int32_t i); //< internal use only + virtual TermDocs* termDocs(IndexReader* reader); + void init(CL_NS(util)::ArrayBase* subReaders, const int32_t* starts); +public: + MultiTermDocs(); + MultiTermDocs(CL_NS(util)::ArrayBase* 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); + + /* A Possible future optimization could skip entire segments */ + bool skipTo(const int32_t target); + + void close(); + + virtual TermPositions* __asTermPositions(); +}; + + +//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(CL_NS(util)::ArrayBase* 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(bool pointer=true); + + //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() const; + static const char* getClassName(); +}; + + +#ifdef _MSC_VER + #pragma warning(disable : 4250) +#endif +class MultiTermPositions:public MultiTermDocs,public TermPositions { +protected: + TermDocs* termDocs(IndexReader* reader); +public: + MultiTermPositions(CL_NS(util)::ArrayBase* subReaders, const int32_t* s); + virtual ~MultiTermPositions() {}; + int32_t nextPosition(); + + /** + * Not implemented. + * @throws UnsupportedOperationException + */ + int32_t getPayloadLength() const; + + /** + * Not implemented. + * @throws UnsupportedOperationException + */ + uint8_t* getPayload(uint8_t* data); + + /** + * + * @return false + */ + // TODO: Remove warning after API has been finalized + bool isPayloadAvailable() const; + + virtual TermDocs* __asTermDocs(); + virtual TermPositions* __asTermPositions(); +}; + +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/_SegmentHeader.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/_SegmentHeader.h new file mode 100644 index 0000000..5265d5a --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/_SegmentHeader.h @@ -0,0 +1,447 @@ +/*------------------------------------------------------------------------------ + * 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_SegmentHeader_ +#define _lucene_index_SegmentHeader_ + +#include "_SegmentInfos.h" +#include "CLucene/util/BitSet.h" +//#include "CLucene/util/VoidMap.h" +#include "CLucene/store/IndexInput.h" +#include "CLucene/store/IndexOutput.h" +#include "CLucene/index/IndexReader.h" +#include "Term.h" +#include "Terms.h" +#include "_TermInfo.h" +//#include "FieldInfos.h" +#include "_FieldsReader.h" +#include "_TermVector.h" +//#include "IndexReader.h" +#include "_TermInfosReader.h" +#include "_CompoundFile.h" +#include "DirectoryIndexReader.h" +#include "_SkipListReader.h" +#include "CLucene/util/_ThreadLocal.h" + +CL_NS_DEF(index) +class SegmentReader; + +class SegmentTermDocs:public virtual TermDocs { +protected: + const SegmentReader* parent; + CL_NS(store)::IndexInput* freqStream; + int32_t count; + int32_t df; + CL_NS(util)::BitSet* deletedDocs; + int32_t _doc; + int32_t _freq; + +private: + int32_t skipInterval; + int32_t maxSkipLevels; + DefaultSkipListReader* skipListReader; + + int64_t freqBasePointer; + int64_t proxBasePointer; + + int64_t skipPointer; + bool haveSkipped; + +protected: + bool currentFieldStoresPayloads; + +public: + ///\param Parent must be a segment reader + SegmentTermDocs( const SegmentReader* Parent); + virtual ~SegmentTermDocs(); + + virtual void seek(Term* term); + virtual void seek(TermEnum* termEnum); + virtual void seek(const TermInfo* ti,Term* term); + + 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(); + +protected: + virtual void skippingDoc(){} + virtual void skipProx(const int64_t /*proxPointer*/, const int32_t /*payloadLength*/){} +}; + + +class SegmentTermPositions: public SegmentTermDocs, public TermPositions { +private: + CL_NS(store)::IndexInput* proxStream; + int32_t proxCount; + int32_t position; + + // the current payload length + int32_t payloadLength; + // indicates whether the payload of the currend position has + // been read from the proxStream yet + bool needToLoadPayload; + + // these variables are being used to remember information + // for a lazy skip + int64_t lazySkipPointer; + int32_t lazySkipProxCount; + +public: + ///\param Parent must be a segment reader + SegmentTermPositions(const SegmentReader* Parent); + virtual ~SegmentTermPositions(); + +private: + void seek(const TermInfo* ti, Term* term); + +public: + void close(); + + int32_t nextPosition(); +private: + int32_t readDeltaPosition(); + +protected: + void skippingDoc(); + +public: + bool next(); + int32_t read(int32_t* docs, int32_t* freqs, int32_t length); + +protected: + /** Called by super.skipTo(). */ + void skipProx(const int64_t proxPointer, const int32_t _payloadLength); + +private: + void skipPositions( int32_t n ); + void skipPayload(); + + // It is not always neccessary to move the prox pointer + // to a new document after the freq pointer has been moved. + // Consider for example a phrase query with two terms: + // the freq pointer for term 1 has to move to document x + // to answer the question if the term occurs in that document. But + // only if term 2 also matches document x, the positions have to be + // read to figure out if term 1 and term 2 appear next + // to each other in document x and thus satisfy the query. + // So we move the prox pointer lazily to the document + // as soon as positions are requested. + void lazySkip(); + +public: + int32_t getPayloadLength() const; + + uint8_t* getPayload(uint8_t* data); + + bool isPayloadAvailable() const; + +private: + 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); } +}; + + + + +/** + * An IndexReader responsible for reading 1 segment of an index + */ +class SegmentReader: public DirectoryIndexReader { + /** + * 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; + int64_t normSeek; + SegmentReader* _this; + const char* segment; ///< pointer to segment name + volatile int32_t refCount; + bool useSingleNormStream; + bool rollbackDirty; + + + /** Closes the underlying IndexInput for this norm. + * It is still valid to access all other norm properties after close is called. + * @throws IOException + */ + void close(); + public: + DEFINE_MUTEX(THIS_LOCK) + + CL_NS(store)::IndexInput* in; + uint8_t* bytes; + bool dirty; + //Constructor + Norm(CL_NS(store)::IndexInput* instrm, bool useSingleNormStream, int32_t number, int64_t normSeek, SegmentReader* reader, const char* segment); + //Destructor + ~Norm(); + + void reWrite(SegmentInfo* si); + + void incRef(); + void decRef(); + friend class SegmentReader; + + static void doDelete(Norm* norm); + }; + friend class SegmentReader::Norm; + + //Holds the name of the segment that is being read + std::string segment; + SegmentInfo* si; + int32_t readBufferSize; + + //Indicates if there are documents marked as deleted + bool deletedDocsDirty; + bool normsDirty; + bool undeleteAll; + + bool rollbackDeletedDocsDirty; + bool rollbackNormsDirty; + bool rollbackUndeleteAll; + + + //Holds all norms for all fields in the segment + typedef CL_NS(util)::CLHashtable NormsType; + NormsType _norms; + + uint8_t* ones; + uint8_t* fakeNorms(); + + // optionally used for the .nrm file shared by multiple norms + CL_NS(store)::IndexInput* singleNormStream; + + // Compound File Reader when based on a compound file segment + CompoundFileReader* cfsReader; + CompoundFileReader* storeCFSReader; + + ///Reads the Field Info file + FieldsReader* fieldsReader; + TermVectorsReader* termVectorsReaderOrig; + CL_NS(util)::ThreadLocal >termVectorsLocal; + + void initialize(SegmentInfo* si, int32_t readBufferSize, bool doOpenStores, bool doingReopen); + + /** + * Create a clone from the initial TermVectorsReader and store it in the ThreadLocal. + * @return TermVectorsReader + */ + TermVectorsReader* getTermVectorsReader(); + + FieldsReader* getFieldsReader(); + FieldInfos* getFieldInfos(); + +protected: + ///Marks document docNum as deleted + void doDelete(const int32_t docNum); + void doUndeleteAll(); + void commitChanges(); + 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); + + /** + * Decrements the RC of the norms this reader is using + */ + void decRefNorms(); + + + DirectoryIndexReader* doReopen(SegmentInfos* infos); + +public: + /** + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + static SegmentReader* get(SegmentInfo* si, bool doOpenStores=true); + + /** + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + static SegmentReader* get(SegmentInfo* si, int32_t readBufferSize, bool doOpenStores=true); + + /** + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + static SegmentReader* get(SegmentInfos* sis, SegmentInfo* si, bool closeDir); + + /** + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + * @param readBufferSize defaults to BufferedIndexInput::BUFFER_SIZE + */ + static SegmentReader* get(CL_NS(store)::Directory* dir, SegmentInfo* si, + SegmentInfos* sis, + bool closeDir, bool ownDir, + int32_t readBufferSize=-1, + bool doOpenStores=true); + + + + SegmentReader(); + ///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); + + ///Returns all file names managed by this SegmentReader + void files(std::vector& retarray); + ///Returns an enumeration of all the Terms and TermInfos in the set. + TermEnum* terms(); + ///Returns an enumeration of terms starting at or after the named term t + TermEnum* terms(const Term* t); + + ///Gets the document identified by n + bool document(int32_t n, CL_NS(document)::Document& doc, const CL_NS(document)::FieldSelector* fieldSelector); + + ///Checks if the n-th document has been marked deleted + bool isDeleted(const int32_t n); + + ///Returns an unpositioned TermDocs enumerator. + TermDocs* termDocs(); + ///Returns an unpositioned TermPositions enumerator. + TermPositions* termPositions(); + + ///Returns the number of documents which contain the term t + int32_t docFreq(const Term* t); + + ///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; + + + void setTermInfosIndexDivisor(int32_t indexDivisor); + + int32_t getTermInfosIndexDivisor(); + + ///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 + std::string SegmentName(const char* ext, const int32_t x=-1); + ///Creates a filename in buffer by concatenating segment with ext and x + void SegmentName(char* buffer,int32_t bufferLen,const char* ext, const int32_t x=-1 ); + + /** + * @see IndexReader#getFieldNames(IndexReader.FieldOption fldOption) + */ + void getFieldNames(FieldOption fldOption, 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); + + void getTermFreqVector(int32_t docNumber, const TCHAR* field, TermVectorMapper* mapper); + void getTermFreqVector(int32_t docNumber, TermVectorMapper* mapper); + + /** 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 + */ + CL_NS(util)::ArrayBase* getTermFreqVectors(int32_t docNumber); + + static const char* getClassName(); + const char* getObjectName() const; + + // for testing only + bool normsClosed(); + +private: + //Open all norms files for all fields + void openNorms(CL_NS(store)::Directory* cfsDir, int32_t readBufferSize); + + ///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); + + void loadDeletedDocs(); + SegmentReader* reopenSegment(SegmentInfo* si); + + /** Returns the field infos of this segment */ + FieldInfos* fieldInfos(); + + /** + * Return the name of the segment this reader is reading. + */ + const char* getSegmentName(); + + /** + * Return the SegmentInfo of the segment this reader is reading. + */ + SegmentInfo* getSegmentInfo(); + void setSegmentInfo(SegmentInfo* info); + void startCommit(); + void rollbackCommit(); + + //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; + friend class MultiSegmentReader; + friend class SegmentMerger; +}; + +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/_SegmentInfos.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/_SegmentInfos.h new file mode 100644 index 0000000..e79d9e5 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/_SegmentInfos.h @@ -0,0 +1,532 @@ +/*------------------------------------------------------------------------------ +* 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_SegmentInfos_ +#define _lucene_index_SegmentInfos_ + + +//#include "IndexReader.h" +#include "CLucene/util/Misc.h" +#include "_IndexFileNames.h" +CL_CLASS_DEF(store,Directory) +CL_CLASS_DEF(store,IndexInput) +CL_CLASS_DEF(store,IndexOutput) + +CL_NS_DEF(index) + + class SegmentInfo :LUCENE_BASE{ + public: + + LUCENE_STATIC_CONSTANT(int32_t, NO = -1); // e.g. no norms; no deletes; + LUCENE_STATIC_CONSTANT(int32_t, YES = 1); // e.g. have norms; have deletes; + LUCENE_STATIC_CONSTANT(int32_t, CHECK_DIR = 0); // e.g. must check dir to see if there are norms/deletions + LUCENE_STATIC_CONSTANT(int32_t, WITHOUT_GEN = 0); // a file name that has no GEN in it. + + std::string name; // unique name in dir + int32_t docCount; // number of docs in seg + CL_NS(store)::Directory* dir; // where segment resides + + private: + bool preLockless; // true if this is a segments file written before + // lock-less commits (2.1) + + int64_t delGen; // current generation of del file; NO if there + // are no deletes; CHECK_DIR if it's a pre-2.1 segment + // (and we must check filesystem); YES or higher if + // there are deletes at generation N + + CL_NS(util)::ValueArray normGen; // current generation of each field's norm file. + // If this array is null, for lockLess this means no + // separate norms. For preLockLess this means we must + // check filesystem. If this array is not null, its + // values mean: NO says this field has no separate + // norms; CHECK_DIR says it is a preLockLess segment and + // filesystem must be checked; >= YES says this field + // has separate norms with the specified generation + + int8_t isCompoundFile; // NO if it is not; YES if it is; CHECK_DIR if it's + // pre-2.1 (ie, must check file system to see + // if .cfs and .nrm exist) + + bool hasSingleNormFile; // true if this segment maintains norms in a single file; + // false otherwise + // this is currently false for segments populated by DocumentWriter + // and true for newly created merged segments (both + // compound and non compound). + + private: + + std::vector _files; // cached list of files that this segment uses + // in the Directory + + int64_t _sizeInBytes; // total byte size of all of our files (computed on demand) + + int32_t docStoreOffset; // if this segment shares stored fields & vectors, this + // offset is where in that file this segment's docs begin + std::string docStoreSegment; // name used to derive fields/vectors file we share with + // other segments + // This string is being interned. There might be a way around this, + // and if found, this would greatly improve perfomance. + + bool docStoreIsCompoundFile; // whether doc store files are stored in compound file (*.cfx) + + /* Called whenever any change is made that affects which + * files this segment has. */ + void clearFiles(); + + void addIfExists(std::vector& files, const std::string& fileName); + + public: + SegmentInfo(const char* _name, const int32_t _docCount, CL_NS(store)::Directory* _dir, + bool _isCompoundFile=SegmentInfo::CHECK_DIR, + bool _hasSingleNormFile=false, + int32_t _docStoreOffset = -1, + const char* _docStoreSegment = NULL, + bool _docStoreIsCompoundFile = false); + + /** + * Construct a new SegmentInfo instance by reading a + * previously saved SegmentInfo from input. + * + * @param dir directory to load from + * @param format format of the segments info file + * @param input input handle to read segment info from + */ + SegmentInfo(CL_NS(store)::Directory* dir, int32_t format, CL_NS(store)::IndexInput* input); + + ~SegmentInfo(); + + void setNumFields(const int32_t numFields); + int64_t sizeInBytes(); + bool hasDeletions() const; + + void advanceDelGen(); + void clearDelGen(); + + SegmentInfo* clone (); + + std::string getDelFileName() const; + + /** + * Returns true if this field for this segment has saved a separate norms file (__N.sX). + * + * @param fieldNumber the field index to check + */ + bool hasSeparateNorms(const int32_t fieldNumber) const; + + /** + * Returns true if any fields in this segment have separate norms. + */ + bool hasSeparateNorms() const; + + /** + * Get the file name for the norms file for this field. + * + * @param number field index + */ + std::string getNormFileName(const int32_t number) const; + + /** + * Increment the generation count for the norms file for + * this field. + * + * @param fieldIndex field whose norm file will be rewritten + */ + void advanceNormGen(const int32_t fieldIndex); + + /** + * Mark whether this segment is stored as a compound file. + * + * @param isCompoundFile true if this is a compound file; + * else, false + */ + void setUseCompoundFile(const bool isCompoundFile); + + /** + * Returns true if this segment is stored as a compound + * file; else, false. + */ + bool getUseCompoundFile() const; + + /* + * Return all files referenced by this SegmentInfo. The + * returns List is a locally cached List so you should not + * modify it. + */ + const std::vector& files(); + + /** + * Copy everything from src SegmentInfo into our instance. + */ + void reset(const SegmentInfo* src); + + /** + * Save this segment's info. + */ + void write(CL_NS(store)::IndexOutput* output); + + int32_t getDocStoreOffset() const; + + bool getDocStoreIsCompoundFile() const; + + void setDocStoreIsCompoundFile(const bool v); + + /** + * Returns a reference to docStoreSegment + */ + const std::string& getDocStoreSegment() const; + + void setDocStoreOffset(const int32_t offset); + + /** We consider another SegmentInfo instance equal if it + * has the same dir and same name. */ + bool equals(const SegmentInfo* obj); + + ///Gets the Directory where the segment resides + CL_NS(store)::Directory* getDir() const{ return dir; } //todo: since dir is public, consider removing this function + + friend class SegmentReader; + + /** Used for debugging */ + std::string segString(CL_NS(store)::Directory* dir); + }; + + typedef CL_NS(util)::CLVector > 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, + // + //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, SegCount + // + //Format, SegCount, SegSize --> UInt32 + // + //Format and Version have not been implemented yet + + class IndexReader; + + class SegmentInfos: LUCENE_BASE { + public: + DEFINE_MUTEX(THIS_LOCK) + + /** The file format version, a negative number. */ + /* Works since counter, the old 1st entry, is always >= 0 */ + LUCENE_STATIC_CONSTANT(int32_t,FORMAT=-1); + + /** This format adds details used for lockless commits. It differs + * slightly from the previous format in that file names + * are never re-used (write once). Instead, each file is + * written to the next generation. For example, + * segments_1, segments_2, etc. This allows us to not use + * a commit lock. See file + * formats for details. + */ + LUCENE_STATIC_CONSTANT(int32_t,FORMAT_LOCKLESS=-2); + + /** This format adds a "hasSingleNormFile" flag into each segment info. + * See LUCENE-756 + * for details. + */ + LUCENE_STATIC_CONSTANT(int32_t,FORMAT_SINGLE_NORM_FILE=-3); + + /** This format allows multiple segments to share a single + * vectors and stored fields file. */ + LUCENE_STATIC_CONSTANT(int32_t,FORMAT_SHARED_DOC_STORE=-4); + + private: + /* This must always point to the most recent file format. */ + LUCENE_STATIC_CONSTANT(int32_t,CURRENT_FORMAT=FORMAT_SHARED_DOC_STORE); + + public: + int32_t counter; // used to name new segments + + /** + * 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; + + private: + int64_t generation; // generation of the "segments_N" for the next commit + int64_t lastGeneration; // generation of the "segments_N" file we last successfully read + // or wrote; this is normally the same as generation except if + // there was an IOException that had interrupted a commit + + /** + * If non-null, information about loading segments_N files + * will be printed here. @see #setInfoStream. + */ + static std::ostream* infoStream; + + LUCENE_STATIC_CONSTANT(int32_t,defaultGenFileRetryCount=10); + LUCENE_STATIC_CONSTANT(int32_t,defaultGenFileRetryPauseMsec=50); + LUCENE_STATIC_CONSTANT(int32_t,defaultGenLookaheadCount=10); + + segmentInfosType infos; + + friend class IndexWriter; //allow IndexWriter to use counter + + static void message(const char* _message, ...); + + public: + SegmentInfos(bool deleteMembers=true, int32_t reserveCount=0); + ~SegmentInfos(); + + //Returns a reference to the i-th SegmentInfo in the list. + SegmentInfo* info(int32_t i) const; + + /** + * Get the generation (N) of the current segments_N file + * from a list of files. + * + * @param files -- array of file names to check + */ + static int64_t getCurrentSegmentGeneration( std::vector& files ); + + /** + * Get the generation (N) of the current segments_N file + * in the directory. + * + * @param directory -- directory to search for the latest segments_N file + */ + static int64_t getCurrentSegmentGeneration( const CL_NS(store)::Directory* directory ); + + /** + * Get the filename of the current segments_N file + * from a list of files. + * + * @param files -- array of file names to check + */ + static std::string getCurrentSegmentFileName( std::vector& files ); + + /** + * Get the filename of the current segments_N file + * in the directory. + * + * @param directory -- directory to search for the latest segments_N file + */ + static std::string getCurrentSegmentFileName( CL_NS(store)::Directory* directory ); + + /** + * Get the segments_N filename in use by this segment infos. + */ + std::string getCurrentSegmentFileName(); + + /** + * Parse the generation off the segments file name and + * return it. + */ + static int64_t generationFromSegmentsFileName( const char* fileName ); + + /** + * Get the next segments_N filename that will be written. + */ + std::string getNextSegmentFileName(); + + /* public vector-like operations */ + //delete and clears objects 'from' from to 'to' + void clearto(size_t to, size_t end); + //count of segment infos + int32_t size() const; + /** add a segment info + * @param pos position to add the info at. -1 for last position + */ + void add(SegmentInfo* info, int32_t pos=-1); + SegmentInfo* elementAt(int32_t pos); + void setElementAt(SegmentInfo* si, int32_t pos); + void clear(); + + void insert(SegmentInfos* infos, bool takeMemory); + void insert(SegmentInfo* info); + int32_t indexOf(const SegmentInfo* info) const; + void range(size_t from, size_t to, SegmentInfos& ret) const; + void remove(size_t index, bool dontDelete=false); + + /** + * Read a particular segmentFileName. Note that this may + * throw an IOException if a commit is in process. + * + * @param directory -- directory containing the segments file + * @param segmentFileName -- segment file to load + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + void read(CL_NS(store)::Directory* directory, const char* segmentFileName); + + /** + * This version of read uses the retry logic (for lock-less + * commits) to find the right segments file to load. + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + void read(CL_NS(store)::Directory* directory); + + //Writes a new segments file based upon the SegmentInfo instances it manages + //note: still does not support lock-less writes (still pre-2.1 format) + void write(CL_NS(store)::Directory* directory); + + /** + * Returns a copy of this instance, also copying each + * SegmentInfo. + */ + SegmentInfos* clone() const; + + /** + * version number when this SegmentInfos was generated. + */ + int64_t getVersion() const; + int64_t getGeneration() const; + int64_t getLastGeneration() const; + + /** + * Current version number from segments file. + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + static int64_t readCurrentVersion(CL_NS(store)::Directory* directory); + + + /** If non-null, information about retries when loading + * the segments file will be printed to this. + */ + static void setInfoStream(std::ostream* infoStream); + + /** + * @see #setInfoStream + */ + static std::ostream* getInfoStream(); + + /** + * Advanced: set how many times to try loading the + * segments.gen file contents to determine current segment + * generation. This file is only referenced when the + * primary method (listing the directory) fails. + */ + //static void setDefaultGenFileRetryCount(const int32_t count); + /** + * @see #setDefaultGenFileRetryCount + */ + static int32_t getDefaultGenFileRetryCount(); + + /** + * Advanced: set how many milliseconds to pause in between + * attempts to load the segments.gen file. + */ + //static void setDefaultGenFileRetryPauseMsec(const int32_t msec); + /** + * @see #setDefaultGenFileRetryPauseMsec + */ + static int32_t getDefaultGenFileRetryPauseMsec(); + + /** + * Advanced: set how many times to try incrementing the + * gen when loading the segments file. This only runs if + * the primary (listing directory) and secondary (opening + * segments.gen file) methods fail to find the segments + * file. + */ + //static void setDefaultGenLookaheadCount(const int32_t count); + /** + * @see #setDefaultGenLookaheadCount + */ + static int32_t getDefaultGenLookahedCount(); + + class _FindSegmentsFile: LUCENE_BASE{ + protected: + const char* fileDirectory; + CL_NS(store)::Directory* directory; + + void doRun(); + virtual bool tryDoBody(const char* segmentFileName, CLuceneError& ret_err) = 0; + }; + + /** + * Utility class for executing code that needs to do + * something with the current segments file. This is + * necessary with lock-less commits because from the time + * you locate the current segments file name, until you + * actually open it, read its contents, or check modified + * time, etc., it could have been deleted due to a writer + * commit finishing. + */ + template + class FindSegmentsFile: public _FindSegmentsFile{ + protected: + virtual RET doBody(const char* segmentFileName) = 0; + RET result; + + //catch only IO errors, return true on success... + bool tryDoBody(const char* segmentFileName, CLuceneError& ret_err){ + try{ + result = doBody(segmentFileName); + return true; + } catch (CLuceneError& err) { + result = 0; + ret_err.set(err.number(),err.what()); + } + return false; + } + public: + FindSegmentsFile( CL_NS(store)::Directory* dir ){ + this->directory = dir; + this->fileDirectory = NULL; + this->result = 0; + } + FindSegmentsFile( const char* dir ){ + this->directory = NULL; + this->fileDirectory = dir; + this->result = 0; + } + ~FindSegmentsFile(){ + } + + RET run(){ + doRun(); + return result; + }; + }; + //friend class SegmentInfos::FindSegmentsFile; + + class FindSegmentsVersion: public FindSegmentsFile { + public: + FindSegmentsVersion( CL_NS(store)::Directory* dir ); + FindSegmentsVersion( const char* dir ); + int64_t doBody( const char* segmentFileName ); + }; + friend class SegmentInfos::FindSegmentsVersion; + + class FindSegmentsRead: public FindSegmentsFile { + SegmentInfos* _this; + public: + FindSegmentsRead( CL_NS(store)::Directory* dir, SegmentInfos* _this ); + FindSegmentsRead( const char* dir, SegmentInfos* _this ); + bool doBody( const char* segmentFileName ); + }; + friend class SegmentInfos::FindSegmentsRead; + }; +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/_SegmentMergeInfo.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/_SegmentMergeInfo.h new file mode 100644 index 0000000..87b05cb --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/_SegmentMergeInfo.h @@ -0,0 +1,48 @@ +/*------------------------------------------------------------------------------ +* 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_ + + +//#include "SegmentTermEnum.h" +//#include "SegmentHeader.h" +#include "Terms.h" + +CL_NS_DEF(index) +class IndexReader; + +class SegmentMergeInfo:LUCENE_BASE { +private: + 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/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/_SegmentMergeQueue.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/_SegmentMergeQueue.h new file mode 100644 index 0000000..a95a001 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/_SegmentMergeQueue.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_index_SegmentMergeQueue_ +#define _lucene_index_SegmentMergeQueue_ + +#include "CLucene/util/PriorityQueue.h" +//#include "SegmentMergeInfo.h" + +CL_NS_DEF(index) + class SegmentMergeQueue :public CL_NS(util)::PriorityQueue > { + 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/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/_SegmentMerger.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/_SegmentMerger.h new file mode 100644 index 0000000..da24e1d --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/_SegmentMerger.h @@ -0,0 +1,198 @@ +/*------------------------------------------------------------------------------ +* 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_SegmentMerger_ +#define _lucene_index_SegmentMerger_ + + +CL_CLASS_DEF(store,Directory) +#include "CLucene/store/_RAMDirectory.h" +#include "_SegmentMergeInfo.h" +#include "_SegmentMergeQueue.h" +#include "IndexReader.h" +#include "_TermInfosWriter.h" +#include "Terms.h" +#include "MergePolicy.h" + +CL_NS_DEF(index) +class DefaultSkipListWriter; +/** +* 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. +*

+* If the compoundFile flag is set, then the segments will be merged into a compound file. +* +* +* @see #merge +* @see #add +*/ +class SegmentMerger:LUCENE_BASE { + CL_NS(util)::ValueArray payloadBuffer; + + //Directory of the segment + CL_NS(store)::Directory* directory; + //name of the new segment + std::string segment; + //Set of IndexReaders + CL_NS(util)::CLVector > readers; + //Field Infos for t he FieldInfo instances of all fields + FieldInfos* fieldInfos; + + int32_t mergedDocs; + + // Whether we should merge doc stores (stored fields and + // vectors files). When all segments we are merging + // already share the same doc store files, we don't need + // to merge the doc stores. + bool mergeDocStores; + + /** Maximum number of contiguous documents to bulk-copy + when merging stored fields */ + static int32_t MAX_RAW_MERGE_DOCS; + + //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; + int32_t maxSkipLevels; + DefaultSkipListWriter* skipListWriter; + +public: + static const uint8_t NORMS_HEADER[]; + static const int NORMS_HEADER_length; + + /** + * + * @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 char* name, MergePolicy::OneMerge* merge ); + + SegmentMerger(IndexWriter* writer, std::string name, MergePolicy::OneMerge* merge); + + void init(); + + //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. + * @param mergeDocStores if false, we will not merge the + * stored fields nor vectors files + * @return The number of documents that were merged + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + int32_t merge(bool mergeDocStores); + /** + * close all IndexReaders that have been added. + * Should not be called before merge(). + * @throws IOException + */ + void closeReaders(); + + + class CheckAbort { + private: + float_t workCount; + MergePolicy::OneMerge* merge; + CL_NS(store)::Directory* dir; + public: + CheckAbort(MergePolicy::OneMerge* merge, CL_NS(store)::Directory* dir); + + /** + * Records the fact that roughly units amount of work + * have been done since this method was last called. + * When adding time-consuming code into SegmentMerger, + * you should test different values for units to ensure + * that the time in between calls to merge.checkAborted + * is up to ~ 1 second. + */ + void work(float_t units); + }; + +private: + CheckAbort* checkAbort; + + void addIndexed(IndexReader* reader, FieldInfos* fieldInfos, StringArrayWithDeletor& names, + bool storeTermVectors, bool storePositionWithTermVector, + bool storeOffsetWithTermVector, bool storePayloads); + + /** + * Merge the fields of all segments + * @return The number of documents in all of the readers + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + 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 smis + * contains segments that are positioned at the same term. N + * 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 + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + int32_t mergeTermInfo( SegmentMergeInfo** smis, int32_t n); + + /** 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 + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + int32_t appendPostings(SegmentMergeInfo** smis, int32_t n); + + //Merges the norms for all fields + void mergeNorms(); + + void createCompoundFile(const char* filename, std::vector* files=NULL); + friend class IndexWriter; //allow IndexWriter to use createCompoundFile +}; +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/_SegmentTermEnum.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/_SegmentTermEnum.h new file mode 100644 index 0000000..a255908 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/_SegmentTermEnum.h @@ -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. +------------------------------------------------------------------------------*/ +#ifndef _lucene_index_SegmentTermEnum_ +#define _lucene_index_SegmentTermEnum_ + + +//#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; + int32_t maxSkipLevels; + + 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 the current term. + */ + Term* term(bool pointer=true); + + /** + * 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() const; + static const char* getClassName(); + +private: + /** + * Reads the next term in the enumeration + */ + Term* readTerm(Term* reuse); + /** + * Instantiate a buffer of length length+1 + * TODO: deprecate this... + */ + void growBuffer(const uint32_t length, bool force_copy); + +}; +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/_SkipListReader.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/_SkipListReader.h new file mode 100644 index 0000000..b7bf218 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/_SkipListReader.h @@ -0,0 +1,181 @@ +/*------------------------------------------------------------------------------ +* 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_SkipListReader_ +#define _lucene_index_SkipListReader_ + +#include "CLucene/store/IndexInput.h" +#include "CLucene/util/Array.h" + +CL_NS_DEF(index) + +/** + * This abstract class reads skip lists with multiple levels. + * + * See {@link MultiLevelSkipListWriter} for the information about the encoding + * of the multi level skip lists. + * + * Subclasses must implement the abstract method {@link #readSkipData(int, IndexInput)} + * which defines the actual format of the skip data. + */ +class MultiLevelSkipListReader : LUCENE_BASE { +protected: + // number of levels in this skip list + int32_t numberOfSkipLevels; + + // the maximum number of skip levels possible for this index + int32_t maxNumberOfSkipLevels; +private: + // Expert: defines the number of top skip levels to buffer in memory. + // Reducing this number results in less memory usage, but possibly + // slower performance due to more random I/Os. + // Please notice that the space each level occupies is limited by + // the skipInterval. The top level can not contain more than + // skipLevel entries, the second top level can not contain more + // than skipLevel^2 entries and so forth. + int32_t numberOfLevelsToBuffer; + + int32_t docCount; + bool haveSkipped; + + CL_NS(util)::ObjectArray skipStream; // skipStream for each level + int64_t* skipPointer; // the start pointer of each skip level + int32_t* skipInterval; // skipInterval of each level + int32_t* numSkipped; // number of docs skipped per level + + int32_t* skipDoc; // doc id of current skip entry per level + int32_t lastDoc; // doc id of last read skip entry with docId <= target + int64_t* childPointer; // child pointer of current skip entry per level + int64_t lastChildPointer; // childPointer of last read skip entry with docId <= target + + bool inputIsBuffered; + +public: + /** + * @memory consumes _skipStream + */ + MultiLevelSkipListReader(CL_NS(store)::IndexInput* _skipStream, const int32_t maxSkipLevels, const int32_t _skipInterval); + virtual ~MultiLevelSkipListReader(); + + /** Returns the id of the doc to which the last call of {@link #skipTo(int)} + * has skipped. */ + int32_t getDoc() const; + + /** Skips entries to the first beyond the current whose document number is + * greater than or equal to target. Returns the current doc count. + */ + int32_t skipTo(const int32_t target); + +private: + bool loadNextSkip(const int32_t level); + +protected: + /** Seeks the skip entry on the given level */ + virtual void seekChild(const int32_t level); + + void close(); + + /** initializes the reader */ + void init(const int64_t _skipPointer, const int32_t df); + +private: + /** Loads the skip levels */ + void loadSkipLevels(); + +protected: + /** + * Subclasses must implement the actual skip data encoding in this method. + * + * @param level the level skip data shall be read from + * @param skipStream the skip stream to read from + */ + virtual int32_t readSkipData(const int32_t level, CL_NS(store)::IndexInput* skipStream) = 0; + + /** Copies the values of the last read skip entry on this level */ + virtual void setLastSkipData(const int32_t level); + +protected: + /** used to buffer the top skip levels */ + class SkipBuffer : public CL_NS(store)::IndexInput { + private: + uint8_t* data; + int64_t pointer; + int32_t pos; + size_t _datalength; + + public: + SkipBuffer(CL_NS(store)::IndexInput* input, const int32_t length); + virtual ~SkipBuffer(); + + private: + void close(); + + int64_t getFilePointer() const; + + int64_t length() const; + + uint8_t readByte(); + + /* Make sure b is passed after the offset has been calculated into it, if necessary! */ + void readBytes(uint8_t* b, const int32_t len); + + void seek(const int64_t _pos); + + SkipBuffer(const SkipBuffer& other); + CL_NS(store)::IndexInput* clone() const; + + const char* getDirectoryType() const; + const char* getObjectName() const; + static const char* getClassName(); + }; +}; + + +/** + * Implements the skip list reader for the default posting list format + * that stores positions and payloads. + * + */ +class DefaultSkipListReader: public MultiLevelSkipListReader { +private: + bool currentFieldStoresPayloads; + int64_t* freqPointer; + int64_t* proxPointer; + int32_t* payloadLength; + + int64_t lastFreqPointer; + int64_t lastProxPointer; + int32_t lastPayloadLength; + +public: + DefaultSkipListReader(CL_NS(store)::IndexInput* _skipStream, const int32_t maxSkipLevels, const int32_t _skipInterval); + virtual ~DefaultSkipListReader(); + + void init(const int64_t _skipPointer, const int64_t freqBasePointer, const int64_t proxBasePointer, const int32_t df, const bool storesPayloads); + + /** Returns the freq pointer of the doc to which the last call of + * {@link MultiLevelSkipListReader#skipTo(int)} has skipped. */ + int64_t getFreqPointer() const; + + /** Returns the prox pointer of the doc to which the last call of + * {@link MultiLevelSkipListReader#skipTo(int)} has skipped. */ + int64_t getProxPointer() const; + + /** Returns the payload length of the payload stored just before + * the doc to which the last call of {@link MultiLevelSkipListReader#skipTo(int)} + * has skipped. */ + int32_t getPayloadLength() const; + +protected: + void seekChild(const int32_t level); + + void setLastSkipData(const int32_t level); + + int32_t readSkipData(const int32_t level, CL_NS(store)::IndexInput* _skipStream); +}; + +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/_SkipListWriter.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/_SkipListWriter.h new file mode 100644 index 0000000..4808a8a --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/_SkipListWriter.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_index_SkipListWriter_ +#define _lucene_index_SkipListWriter_ + +#include "CLucene/store/IndexInput.h" +#include "CLucene/store/_RAMDirectory.h" +#include "CLucene/util/Array.h" + +CL_NS_DEF(index) + +/** + * This abstract class writes skip lists with multiple levels. + * + * Example for skipInterval = 3: + * c (skip level 2) + * c c c (skip level 1) + * x x x x x x x x x x (skip level 0) + * d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d (posting list) + * 3 6 9 12 15 18 21 24 27 30 (df) + * + * d - document + * x - skip data + * c - skip data with child pointer + * + * Skip level i contains every skipInterval-th entry from skip level i-1. + * Therefore the number of entries on level i is: floor(df / ((skipInterval ^ (i + 1))). + * + * Each skip entry on a level i>0 contains a pointer to the corresponding skip entry in list i-1. + * This guarantess a logarithmic amount of skips to find the target document. + * + * While this class takes care of writing the different skip levels, + * subclasses must define the actual format of the skip data. + * + */ +class MultiLevelSkipListWriter { +private: + // the skip interval in the list with level = 0 + int32_t skipInterval; + + // for every skip level a different buffer is used + CL_NS(util)::ArrayBase* skipBuffer; + + + /** + * Writes the current skip data to the buffers. The current document frequency determines + * the max level is skip data is to be written to. + * + * @param df the current document frequency + * @throws IOException + */ + void bufferSkip(int32_t df); + + /** + * Writes the buffered skip lists to the given output. + * + * @param output the IndexOutput the skip lists shall be written to + * @return the pointer the skip list starts + */ + int64_t writeSkip(CL_NS(store)::IndexOutput* output); + +protected: + // number of levels in this skip list + int32_t numberOfSkipLevels; + + MultiLevelSkipListWriter(int32_t skipInterval, int32_t maxSkipLevels, int32_t df); + virtual ~MultiLevelSkipListWriter(); + void init(); + + void resetSkip(); + + /** + * Subclasses must implement the actual skip data encoding in this method. + * + * @param level the level skip data shall be writting for + * @param skipBuffer the skip buffer to write to + */ + virtual void writeSkipData(int32_t level, CL_NS(store)::IndexOutput* skipBuffer) = 0; + + friend class SegmentMerger; + friend class DocumentsWriter; +}; + +/** + * Implements the skip list writer for the default posting list format + * that stores positions and payloads. + * + */ +class DefaultSkipListWriter: public MultiLevelSkipListWriter { +private: + int32_t* lastSkipDoc; + int32_t* lastSkipPayloadLength; + int64_t* lastSkipFreqPointer; + int64_t* lastSkipProxPointer; + + CL_NS(store)::IndexOutput* freqOutput; + CL_NS(store)::IndexOutput* proxOutput; + + int32_t curDoc; + bool curStorePayloads; + int32_t curPayloadLength; + int64_t curFreqPointer; + int64_t curProxPointer; + + /** + * Sets the values for the current skip data. + */ + void setSkipData(int32_t doc, bool storePayloads, int32_t payloadLength); + +protected: + void resetSkip(); + + void writeSkipData(int32_t level, CL_NS(store)::IndexOutput* skipBuffer); +public: + + DefaultSkipListWriter(int32_t skipInterval, int32_t numberOfSkipLevels, int32_t docCount, + CL_NS(store)::IndexOutput* freqOutput, CL_NS(store)::IndexOutput* proxOutput); + ~DefaultSkipListWriter(); + + friend class SegmentMerger; + friend class DocumentsWriter; +}; + + +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/_Term.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/_Term.h new file mode 100644 index 0000000..28baf13 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/_Term.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_index_internal_Term_ +#define _lucene_index_internal_Term_ + +#include "Term.h" +#include + +CL_NS_DEF(index) + + +class Term_Equals:public CL_NS_STD(binary_function) +{ +public: + bool operator()( const Term* val1, const Term* val2 ) const{ + return val1->equals(val2); + } +}; + +class Term_Compare:LUCENE_BASE, public CL_NS(util)::Compare::_base // +{ +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/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/_TermInfo.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/_TermInfo.h new file mode 100644 index 0000000..7404117 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/_TermInfo.h @@ -0,0 +1,52 @@ +/*------------------------------------------------------------------------------ +* 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_TermInfo +#define _lucene_index_TermInfo + + +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(const int32_t df, const int64_t fp, const 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(const int32_t docFreq, const int64_t freqPointer, const 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/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/_TermInfosReader.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/_TermInfosReader.h new file mode 100644 index 0000000..f7fafaf --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/_TermInfosReader.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_index_TermInfosReader_ +#define _lucene_index_TermInfosReader_ + + +//#include "Terms.h" +#include "_SegmentTermEnum.h" +CL_CLASS_DEF(store,Directory) +//CL_CLASS_DEF(store,IndexInput) +#include "CLucene/util/_ThreadLocal.h" +//#include "FieldInfos.h" +//#include "TermInfo.h" +//#include "TermInfosWriter.h" + +CL_NS_DEF(index) +/** This stores a monotonically increasing set of pairs in a +* Directory. Pairs are accessed either by Term or by ordinal position the +* set. +* +* PORT STATUS: 365707 (jlucene 1.9) -- started port to JLucene 2.3.2 +*/ + class TermInfosReader :LUCENE_BASE{ + private: + CL_NS(store)::Directory* directory; + const char* segment; + FieldInfos* fieldInfos; + + CL_NS(util)::ThreadLocal > enumerators; + + SegmentTermEnum* getEnum(); + SegmentTermEnum* origEnum; + SegmentTermEnum* indexEnum; + int64_t _size; + + Term* indexTerms; //note: this is a list of objects, not arrays! + int32_t indexTermsLength; + TermInfo* indexInfos; + int64_t* indexPointers; + + int32_t indexDivisor; + int32_t totalIndexInterval; + + DEFINE_MUTEX(THIS_LOCK) + + public: + /** + * Constructor. + * Reads the TermInfos file (.tis) and eventually the Term Info Index file (.tii) + */ + TermInfosReader(CL_NS(store)::Directory* dir, const char* segment, FieldInfos* fis, + const int32_t readBufferSize = CL_NS(store)::BufferedIndexInput::BUFFER_SIZE); + ~TermInfosReader(); + + int32_t getSkipInterval() const; + int32_t getMaxSkipLevels() const; + + /** + *

Sets the indexDivisor, which subsamples the number + * of indexed terms loaded into memory. This has a + * similar effect as {@link + * IndexWriter#setTermIndexInterval} except that setting + * must be done at indexing time while this setting can be + * set per reader. When set to N, then one in every + * N*termIndexInterval terms in the index is loaded into + * memory. By setting this to a value > 1 you can reduce + * memory usage, at the expense of higher latency when + * loading a TermInfo. The default value is 1.

+ * + * NOTE: you must call this before the term + * index is loaded. If the index is already loaded, + * an IllegalStateException is thrown. + * + * @throws IllegalStateException if the term index has + * already been loaded into memory. + */ + void setIndexDivisor(const int32_t _indexDivisor); + + /** Returns the indexDivisor. + * @see #setIndexDivisor + */ + int32_t getIndexDivisor() const; + + /** Close the enumeration of TermInfos */ + void close(); + + /** Returns the number of term/value pairs in the set. */ + int64_t size() const; + + /** + * 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, or null. */ + 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 or equal to 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 or -1. */ + 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/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/_TermInfosWriter.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/_TermInfosWriter.h new file mode 100644 index 0000000..7ddf5c3 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/_TermInfosWriter.h @@ -0,0 +1,100 @@ +/*------------------------------------------------------------------------------ +* 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_TermInfosWriter_ +#define _lucene_index_TermInfosWriter_ + +#include "CLucene/util/Array.h" + +CL_CLASS_DEF(store,Directory) +//#include "FieldInfos.h" +//#include "TermInfo.h" +//#include "Term.h" + +CL_NS_DEF(index) +class FieldInfos; +class TermInfo; + + // This stores a monotonically increasing set of pairs in a + // Directory. A TermInfos can be written once, in order. + class TermInfosWriter :LUCENE_BASE{ + private: + FieldInfos* fieldInfos; + CL_NS(store)::IndexOutput* output; + TermInfo* lastTi; + int64_t size; + + int64_t lastIndexPointer; + bool isIndex; + CL_NS(util)::ValueArray lastTermText; + int32_t lastTermTextLength; + int32_t lastFieldNumber; + + CL_NS(util)::ValueArray termTextBuffer; + + TermInfosWriter* other; + + //inititalize + TermInfosWriter(CL_NS(store)::Directory* directory, const char* segment, FieldInfos* fis, int32_t interval, bool isIndex); + + int32_t compareToLastTerm(int32_t fieldNumber, const TCHAR* termText, int32_t length); + public: + /** Expert: The maximum number of skip levels. Smaller values result in + * slightly smaller indexes, but slower skipping in big posting lists. + */ + int32_t maxSkipLevels; + + /** The file format version, a negative number. */ + LUCENE_STATIC_CONSTANT(int32_t,FORMAT=-3); + + //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. */ + LUCENE_STATIC_CONSTANT(int32_t, DEFAULT_TERMDOCS_SKIP_INTERVAL=16); + + + /** + * 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 char* segment, FieldInfos* fis, int32_t interval); + + ~TermInfosWriter(); + + + void add(Term* term, TermInfo* ti); + + /** Adds a new <, 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(int32_t fieldNumber, const TCHAR* termText, int32_t termTextLength, const TermInfo* ti); + + /** Called to complete TermInfos creation. */ + void close(); + + private: + /** Helps constructors to initialize instances */ + void initialise(CL_NS(store)::Directory* directory, const char* segment, int32_t interval, bool IsIndex); + void writeTerm(int32_t fieldNumber, const TCHAR* termText, int32_t termTextLength); + }; +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/_TermVector.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/_TermVector.h new file mode 100644 index 0000000..faf165d --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/index/_TermVector.h @@ -0,0 +1,330 @@ +/*------------------------------------------------------------------------------ +* 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_internal_termvector_h +#define _lucene_index_internal_termvector_h + +#include "CLucene/util/Array.h" +#include "_FieldInfos.h" +#include "TermVector.h" +//#include "FieldInfos.h" + +CL_NS_DEF(index) + +class TermVectorsWriter:LUCENE_BASE { +private: + CL_NS(store)::IndexOutput* tvx, *tvd, *tvf; + FieldInfos* fieldInfos; + +public: + TermVectorsWriter(CL_NS(store)::Directory* directory, const char* segment, + FieldInfos* fieldInfos); + ~TermVectorsWriter(); + + /** + * 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(CL_NS(util)::ArrayBase* vectors); + + /** Close all streams. + * to suppress exceptions from being thrown, pass an error object to be filled in + */ + void close(CLuceneError* err = NULL); +}; + +/** + */ +class SegmentTermVector: public /*virtual*/ TermFreqVector { +private: + TCHAR* field; + CL_NS(util)::ArrayBase* terms; + CL_NS(util)::ArrayBase* termFreqs; + + int32_t binarySearch(const CL_NS(util)::ArrayBase& array, const TCHAR* key) const; +public: + //note: termFreqs must be the same length as terms + SegmentTermVector(const TCHAR* field, CL_NS(util)::ArrayBase* terms, + CL_NS(util)::ArrayBase* termFreqs); + virtual ~SegmentTermVector(); + + /** + * + * @return The number of the field this vector is associated with + */ + const TCHAR* getField(); + TCHAR* toString() const; + int32_t size(); + const CL_NS(util)::ArrayBase* getTerms(); + const CL_NS(util)::ArrayBase* getTermFrequencies(); + int32_t indexOf(const TCHAR* termText); + CL_NS(util)::ArrayBase* indexesOf(const CL_NS(util)::ArrayBase& termNumbers, const int32_t start, const int32_t len); + + virtual TermPositionVector* __asTermPositionVector(); +}; + + + +/** +* @version $Id: +*/ +class TermVectorMapper; // Forward declaration + +class CLUCENE_EXPORT TermVectorsReader:LUCENE_BASE { +public: + LUCENE_STATIC_CONSTANT(int32_t, FORMAT_VERSION = 2); + LUCENE_STATIC_CONSTANT(uint8_t, STORE_POSITIONS_WITH_TERMVECTOR = 0x1); + LUCENE_STATIC_CONSTANT(uint8_t, STORE_OFFSET_WITH_TERMVECTOR = 0x2); +private: + + //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); + + FieldInfos* fieldInfos; + + CL_NS(store)::IndexInput* tvx; + CL_NS(store)::IndexInput* tvd; + CL_NS(store)::IndexInput* tvf; + int64_t _size; // TODO: size_t ? + + // The docID offset where our docs begin in the index + // file. This will be 0 if we have our own private file. + int32_t docStoreOffset; + + int32_t tvdFormat; + int32_t tvfFormat; + +public: + TermVectorsReader(CL_NS(store)::Directory* d, const char* segment, FieldInfos* fieldInfos, + int32_t readBufferSize=LUCENE_STREAM_BUFFER_SIZE, int32_t docStoreOffset=-1, int32_t size=0); + ~TermVectorsReader(); + +private: + int32_t checkValidFormat(CL_NS(store)::IndexInput* in); + +public: + void close(); + + /** + * + * @return The number of documents in the reader + */ + int64_t size() const; + +public: + void get(const int32_t docNum, const TCHAR* field, TermVectorMapper* mapper); + + /** + * 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 + */ + CL_NS(util)::ArrayBase* get(const int32_t docNum); + //bool get(int32_t docNum, CL_NS(util)::ObjectArray& result); + + void get(const int32_t docNumber, TermVectorMapper* mapper); + +private: + CL_NS(util)::ObjectArray* readTermVectors(const int32_t docNum, + const TCHAR** fields, const int64_t* tvfPointers, const int32_t len); + + void readTermVectors(const TCHAR** fields, const int64_t* tvfPointers, + const int32_t len, TermVectorMapper* mapper); + + /** + * + * @param field The field to read in + * @param tvfPointer The pointer within the tvf file where we should start reading + * @param mapper The mapper used to map the TermVector + * @return The TermVector located at that position + * @throws IOException + */ + void readTermVector(const TCHAR* field, const int64_t tvfPointer, TermVectorMapper* mapper); + + + DEFINE_MUTEX(THIS_LOCK) + TermVectorsReader(const TermVectorsReader& copy); + +public: + TermVectorsReader* clone() const; +}; + + +class SegmentTermPositionVector: public SegmentTermVector, public TermPositionVector { +protected: + CL_NS(util)::ArrayBase< CL_NS(util)::ArrayBase* >* positions; + CL_NS(util)::ArrayBase< CL_NS(util)::ArrayBase* >* offsets; + static CL_NS(util)::ValueArray EMPTY_TERM_POS; +public: + SegmentTermPositionVector(const TCHAR* field, + CL_NS(util)::ArrayBase* terms, + CL_NS(util)::ArrayBase* termFreqs, + CL_NS(util)::ArrayBase< CL_NS(util)::ArrayBase* >* _positions, + CL_NS(util)::ArrayBase< CL_NS(util)::ArrayBase* >* _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 + */ + const CL_NS(util)::ArrayBase* getOffsets(const size_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 indexOf method. + */ + const CL_NS(util)::ArrayBase* getTermPositions(const size_t index); + + // disambiguation + const TCHAR* getField(){ return SegmentTermVector::getField(); } + TCHAR* toString() const{ return SegmentTermVector::toString(); } + int32_t size(){ return SegmentTermVector::size(); } + const CL_NS(util)::ArrayBase* getTerms(){ return SegmentTermVector::getTerms(); } + const CL_NS(util)::ArrayBase* getTermFrequencies(){ return SegmentTermVector::getTermFrequencies(); } + int32_t indexOf(const TCHAR* termText){ return SegmentTermVector::indexOf(termText); } + CL_NS(util)::ArrayBase* indexesOf(const CL_NS(util)::ArrayBase& termNumbers, const int32_t start, const int32_t len); + + virtual TermPositionVector* __asTermPositionVector(); +}; + +/** + * The TermVectorMapper can be used to map Term Vectors into your own + * structure instead of the parallel array structure used by + * {@link org.apache.lucene.index.IndexReader#getTermFreqVector(int,String)}. + *

+ * It is up to the implementation to make sure it is thread-safe. + * + * + **/ +class CLUCENE_EXPORT TermVectorMapper : LUCENE_BASE{ +private: + bool ignoringPositions; + bool ignoringOffsets; + +protected: + TermVectorMapper(); + virtual ~TermVectorMapper(){}; + + /** + * + * @param ignoringPositions true if this mapper should tell Lucene to ignore positions even if they are stored + * @param ignoringOffsets similar to ignoringPositions + */ + TermVectorMapper(const bool _ignoringPositions, const bool _ignoringOffsets); + +public: + /** + * Tell the mapper what to expect in regards to field, number of terms, offset and position storage. + * This method will be called once before retrieving the vector for a field. + * + * This method will be called before {@link #map(String,int,TermVectorOffsetInfo[],int[])}. + * @param field The field the vector is for + * @param numTerms The number of terms that need to be mapped + * @param storeOffsets true if the mapper should expect offset information + * @param storePositions true if the mapper should expect positions info + */ + virtual void setExpectations(const TCHAR* _field, const int32_t numTerms, const bool storeOffsets, + const bool storePositions) = 0; + + /** + * Map the Term Vector information into your own structure + * @param term The term to add to the vector + * @param frequency The frequency of the term in the document + * @param offsets null if the offset is not specified, otherwise the offset into the field of the term + * @param positions null if the position is not specified, otherwise the position in the field of the term + * @memory offset and position objects must be cleaned up by implementing class + */ + virtual void map(const TCHAR* term, const int32_t termLen, const int32_t frequency, + CL_NS(util)::ArrayBase* _offsets, + CL_NS(util)::ArrayBase* _positions) = 0; + + /** + * Indicate to Lucene that even if there are positions stored, this mapper is not interested in them and they + * can be skipped over. Derived classes should set this to true if they want to ignore positions. The default + * is false, meaning positions will be loaded if they are stored. + * @return false + */ + bool isIgnoringPositions() const; + + /** + * + * @see #isIgnoringPositions() Same principal as {@link #isIgnoringPositions()}, but applied to offsets. false by default. + * @return false + */ + bool isIgnoringOffsets() const; + + /** + * Passes down the index of the document whose term vector is currently being mapped, + * once for each top level call to a term vector reader. + *

+ * Default implementation IGNORES the document number. Override if your implementation needs the document number. + *

+ * NOTE: Document numbers are internal to Lucene and subject to change depending on indexing operations. + * + * @param documentNumber index of document currently being mapped + */ + virtual void setDocumentNumber(const int32_t documentNumber); +}; + +/** + * Models the existing parallel array structure + */ +class ParallelArrayTermVectorMapper : public TermVectorMapper +{ +private: + CL_NS(util)::ArrayBase* terms; + CL_NS(util)::ArrayBase* termFreqs; + CL_NS(util)::ArrayBase< CL_NS(util)::ArrayBase* >* positions; + CL_NS(util)::ArrayBase< CL_NS(util)::ArrayBase* >* offsets; + int32_t currentPosition; + bool storingOffsets; + bool storingPositions; + TCHAR* field; + +public: + ParallelArrayTermVectorMapper(); + virtual ~ParallelArrayTermVectorMapper(); + + void setExpectations(const TCHAR* _field, const int32_t numTerms, + const bool storeOffsets, const bool storePositions); + + void map(const TCHAR* term, const int32_t termLen, const int32_t frequency, + CL_NS(util)::ArrayBase* _offsets, + CL_NS(util)::ArrayBase* _positions); + + /** + * Construct the vector + * @return The {@link TermFreqVector} based on the mappings. + * @memory Caller is responsible for freeing up the returned object + */ + TermFreqVector* materializeVector(); + + void reset() + { + currentPosition = 0; + } +}; + +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/queryParser/FastCharStream.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/queryParser/FastCharStream.cpp new file mode 100644 index 0000000..007afd5 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/queryParser/FastCharStream.cpp @@ -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. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "_CharStream.h" +#include "_FastCharStream.h" +#include "CLucene/util/CLStreams.h" + +CL_NS_DEF(queryParser) + +FastCharStream::FastCharStream(CL_NS(util)::Reader* r, bool ownsReader) : + buffer(NULL), + _bufferSize(0), + bufferLength(0), + bufferPosition(0), + tokenStart(0), + bufferStart(0), + input(r), + _ownsReader(ownsReader) +{ +} + +FastCharStream::~FastCharStream() +{ + if (_ownsReader ){ + _CLLDELETE(input); + } + _CLDELETE_LCARRAY(buffer); +} + +TCHAR FastCharStream::readChar() { + if (bufferPosition >= bufferLength) + refill(); + return buffer[bufferPosition++]; +} + +void FastCharStream::refill() { + int32_t newPosition = bufferLength - tokenStart; + + if (tokenStart == 0) { // token won't fit in buffer + if (buffer == NULL) { // first time: alloc buffer + buffer = _CL_NEWARRAY(TCHAR, 2048); + _bufferSize = 2048; + } else if (bufferLength == _bufferSize) { // grow buffer + _bufferSize *= 2; + TCHAR* newBuffer = _CL_NEWARRAY(TCHAR, _bufferSize); + _tcsncpy(newBuffer, buffer, bufferLength); + _CLDELETE_LCARRAY(buffer); + buffer = newBuffer; + } + } else { // shift token to front + _tcsncpy(buffer, buffer+tokenStart,newPosition); + } + + bufferLength = newPosition; // update state + bufferPosition = newPosition; + bufferStart += tokenStart; + tokenStart = 0; + + const TCHAR* charBuf = NULL; + int32_t charsRead = // fill space in buffer + input->read(charBuf, newPosition, _bufferSize-newPosition); + if (charsRead == -1){ + _CLTHROWA(CL_ERR_IO, "read past eof"); + } + else { + memcpy(buffer, charBuf, charsRead * sizeof(TCHAR)); // TODO: Can we use the reader buffer instead of copying to our own? + bufferLength += charsRead; + } +} + +void FastCharStream::backup(const int32_t amount) { + bufferPosition -= amount; +} + +TCHAR* FastCharStream::GetImage() { + size_t len = bufferPosition - tokenStart; + TCHAR* ret = _CL_NEWARRAY(TCHAR, len + 1); + _tcsncpy(ret, buffer+tokenStart, len); + ret[len] = 0; // NULL terminated string + return ret; +} + +TCHAR* FastCharStream::GetSuffix(const int32_t len) { + TCHAR* value = _CL_NEWARRAY(TCHAR, len + 1); + _tcsncpy(value, buffer+(bufferPosition - len), len); + value[len] = 0; // NULL terminated string + return value; +} + +void FastCharStream::Done() { +} + +TCHAR FastCharStream::BeginToken() { + tokenStart = bufferPosition; + return readChar(); +} + +int32_t FastCharStream::getColumn() const { + return bufferStart + bufferPosition; +} +int32_t FastCharStream::getLine() const { + return 1; +} +int32_t FastCharStream::getEndColumn() const { + return bufferStart + bufferPosition; +} +int32_t FastCharStream::getEndLine() const { + return 1; +} +int32_t FastCharStream::getBeginColumn() const { + return bufferStart + tokenStart; +} +int32_t FastCharStream::getBeginLine() const { + return 1; +} + +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/queryParser/MultiFieldQueryParser.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/queryParser/MultiFieldQueryParser.cpp new file mode 100644 index 0000000..6566fa2 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/queryParser/MultiFieldQueryParser.cpp @@ -0,0 +1,181 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "MultiFieldQueryParser.h" +#include "CLucene/analysis/AnalysisHeader.h" +#include "CLucene/search/BooleanQuery.h" +#include "CLucene/search/BooleanClause.h" +#include "CLucene/search/PhraseQuery.h" +#include "CLucene/search/MultiPhraseQuery.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), fields(_fields), boosts(_boosts) +{ +} +MultiFieldQueryParser::~MultiFieldQueryParser(){ +} + +Query* MultiFieldQueryParser::getFieldQuery(const TCHAR* field, TCHAR* queryText, const int32_t slop){ + if (field == NULL) { + vector 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((TCHAR*)fields[i]); + if (itr != boosts->end()) { + q->setBoost(itr->second); + } + } + if (q->instanceOf(PhraseQuery::getClassName())) { + ((PhraseQuery*)q)->setSlop(slop); + } + if (q->instanceOf(MultiPhraseQuery::getClassName())) { + ((MultiPhraseQuery*) q)->setSlop(slop); + } + clauses.push_back(_CLNEW BooleanClause(q, true, BooleanClause::SHOULD)); + } + } + if (clauses.size() == 0) // happens for stopwords + return NULL; + return QueryParser::getBooleanQuery(clauses, true); + }else{ + return QueryParser::getFieldQuery(field, queryText); + } +} + +Query* MultiFieldQueryParser::getFuzzyQuery(const TCHAR* field, TCHAR* termStr, const float_t minSimilarity){ + if (field == NULL) { + vector clauses; + for (int i = 0; fields[i]!=NULL; ++i) { + Query* q = QueryParser::getFuzzyQuery(fields[i], termStr, minSimilarity); + if (q) clauses.push_back(_CLNEW BooleanClause(q,true, BooleanClause::SHOULD) ); + } + return QueryParser::getBooleanQuery(clauses, true); + } + return QueryParser::getFuzzyQuery(field, termStr, minSimilarity); +} + +Query* MultiFieldQueryParser::getPrefixQuery(const TCHAR* field, TCHAR* termStr){ + if (field == NULL) { + vector clauses; + for (int i = 0; fields[i]!=NULL; ++i) { + Query* q = QueryParser::getPrefixQuery(fields[i], termStr); + if (q) clauses.push_back(_CLNEW BooleanClause(q,true,BooleanClause::SHOULD)); + } + return QueryParser::getBooleanQuery(clauses, true); + } + return QueryParser::getPrefixQuery(field, termStr); +} + +Query* MultiFieldQueryParser::getWildcardQuery(const TCHAR* field, TCHAR* termStr){ + if (field == NULL) { + vector clauses; + for (int i = 0; fields[i]!=NULL; ++i) { + Query* q = QueryParser::getWildcardQuery(fields[i], termStr); + if (q) clauses.push_back(_CLNEW BooleanClause(q,true,BooleanClause::SHOULD)); + } + return QueryParser::getBooleanQuery(clauses, true); + } + return QueryParser::getWildcardQuery(field, termStr); +} + + +Query* MultiFieldQueryParser::getRangeQuery(const TCHAR* field, TCHAR* part1, TCHAR* part2, const bool inclusive){ + if (field == NULL) { + vector clauses; + for (int i = 0; fields[i]!=NULL; ++i) { + Query* q = QueryParser::getRangeQuery(fields[i], part1, part2, inclusive); + if (q) clauses.push_back(_CLNEW BooleanClause(q,true,BooleanClause::SHOULD)); + } + return QueryParser::getBooleanQuery(clauses, true); + }else{ + return QueryParser::getRangeQuery(field, part1, part2, inclusive); + } +} + +//static +Query* MultiFieldQueryParser::parse(const TCHAR** _queries, const TCHAR** _fields, Analyzer* analyzer) +{ + BooleanQuery* bQuery = _CLNEW BooleanQuery(); + for (size_t i = 0; _fields[i]!=NULL; i++) + { + if (_queries[i] == NULL) { + _CLLDELETE(bQuery); + _CLTHROWA(CL_ERR_IllegalArgument, "_queries.length != _fields.length"); + } + // TODO: Reuse qp instead of creating it over and over again + QueryParser* qp = _CLNEW QueryParser(_fields[i], analyzer); + Query* q = qp->parse(_queries[i]); + if (q!=NULL && // q never null, just being defensive + (!(q->instanceOf(BooleanQuery::getClassName()) || ((BooleanQuery*)q)->getClauseCount() > 0))) { + bQuery->add(q, true, BooleanClause::SHOULD); + } else + _CLLDELETE(q); + _CLLDELETE(qp); + } + return bQuery; +} + +// static +Query* MultiFieldQueryParser::parse(const TCHAR* query, const TCHAR** _fields, const uint8_t* flags, Analyzer* analyzer) { + BooleanQuery* bQuery = _CLNEW BooleanQuery(); + for (size_t i = 0; _fields[i]!=NULL; i++) { + //TODO: this is really confusing... why not refactor _fields and flags to use a array object. + //flags can be NULL since NULL == 0... + /*if (flags[i] == NULL) { + _CLLDELETE(bQuery); + _CLTHROWA(CL_ERR_IllegalArgument, "_fields.length != flags.length"); + }*/ + QueryParser* qp = _CLNEW QueryParser(_fields[i], analyzer); + Query* q = qp->parse(query); + if (q!=NULL && // q never null, just being defensive + (!(q->instanceOf(BooleanQuery::getClassName())) || ((BooleanQuery*)q)->getClauseCount()>0)) { + bQuery->add(q, true, (BooleanClause::Occur)flags[i]); + } else + _CLLDELETE(q); + _CLLDELETE(qp); + } + return bQuery; +} + +//static +Query* MultiFieldQueryParser::parse(const TCHAR** _queries, const TCHAR** _fields, const uint8_t* flags, Analyzer* analyzer){ + BooleanQuery* bQuery = _CLNEW BooleanQuery(); + for (size_t i = 0; _fields[i]!=NULL; i++) + { + //TODO: this is really confusing... why not refactor _fields and flags to use a array object. + //flags can be NULL since NULL == 0... + if (_queries[i] == NULL ) { //|| flags[i] == NULL + _CLLDELETE(bQuery); + _CLTHROWA(CL_ERR_IllegalArgument, "_queries, _fields, and flags array have have different length"); + } + QueryParser* qp = _CLNEW QueryParser(_fields[i], analyzer); + Query* q = qp->parse(_queries[i]); + if (q!=NULL && // q never null, just being defensive + (!(q->instanceOf(BooleanQuery::getClassName())) || ((BooleanQuery*)q)->getClauseCount()>0)) { + bQuery->add(q, true, (BooleanClause::Occur)flags[i]); + } else + _CLLDELETE(q); + _CLLDELETE(qp); + } + return bQuery; +} + +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/queryParser/MultiFieldQueryParser.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/queryParser/MultiFieldQueryParser.h new file mode 100644 index 0000000..a10168b --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/queryParser/MultiFieldQueryParser.h @@ -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. +------------------------------------------------------------------------------*/ +#ifndef _lucene_queryParser_MultiFieldQueryParser_ +#define _lucene_queryParser_MultiFieldQueryParser_ + +#include "QueryParser.h" +#include "CLucene/util/VoidMap.h" + + +CL_NS_DEF(queryParser) + +typedef CL_NS(util)::CLHashMap BoostMap; + +/** +* A QueryParser which constructs queries to search multiple fields. +* +*/ +class CLUCENE_EXPORT MultiFieldQueryParser: public QueryParser +{ +protected: + const TCHAR** fields; + BoostMap* boosts; +public: + /** + * Creates a MultiFieldQueryParser. + * Allows passing of a map with term to Boost, and the boost to apply to each term. + * + *

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 title and body):

+ * + * + * (title:term1 body:term1) (title:term2 body:term2) + * + * + *

When setDefaultOperator(AND_OPERATOR) is set, the result will be:

+ * + * + * +(title:term1 body:term1) +(title:term2 body:term2) + * + * + *

When you pass a boost (title=>5 body=>10) you can get

+ * + * + * +(title:term1^5.0 body:term1^10.0) +(title:term2^5.0 body:term2^10.0) + * + * + *

In other words, all the query's terms must appear, but it doesn't matter in + * what fields they appear.

+ */ + MultiFieldQueryParser(const TCHAR** _fields, CL_NS(analysis)::Analyzer* a, BoostMap* _boosts = NULL); + virtual ~MultiFieldQueryParser(); + + +protected: + CL_NS(search)::Query* getFieldQuery(const TCHAR* field, TCHAR* queryText, const int32_t slop); + CL_NS(search)::Query* getFieldQuery(const TCHAR* field, TCHAR* queryText) { return getFieldQuery(field,queryText,0); } + CL_NS(search)::Query* getFuzzyQuery(const TCHAR* field, TCHAR* termStr, const float_t minSimilarity); + CL_NS(search)::Query* getPrefixQuery(const TCHAR* field, TCHAR* termStr); + CL_NS(search)::Query* getWildcardQuery(const TCHAR* field, TCHAR* termStr); + CL_NS(search)::Query* getRangeQuery(const TCHAR* field, TCHAR* part1, TCHAR* part2, const bool inclusive); + +public: + /** + * Parses a query which searches on the fields specified. + *

+ * If x fields are specified, this effectively constructs: + *

+  * 
+  * (field1:query1) (field2:query2) (field3:query3)...(fieldx:queryx)
+  * 
+  * 
+ * @param queries Queries strings to parse + * @param fields Fields to search on + * @param analyzer Analyzer to use + * @throws ParseException if query parsing fails + * @throws IllegalArgumentException if the length of the queries array differs + * from the length of the fields array + */ + static CL_NS(search)::Query* parse(const TCHAR** _queries, const TCHAR** _fields, + CL_NS(analysis)::Analyzer* analyzer); + + /** + * Parses a query, searching on the fields specified. + * Use this if you need to specify certain fields as required, + * and others as prohibited. + *

+  * Usage:
+  * 
+  * String[] fields = {"filename", "contents", "description"};
+  * BooleanClause.Occur[] flags = {BooleanClause.Occur.SHOULD,
+  *                BooleanClause.Occur.MUST,
+  *                BooleanClause.Occur.MUST_NOT};
+  * MultiFieldQueryParser.parse("query", fields, flags, analyzer);
+  * 
+  * 
+ *

+ * The code above would construct a query: + *

+  * 
+  * (filename:query) +(contents:query) -(description:query)
+  * 
+  * 
+ * + * @param query Query string to parse + * @param fields Fields to search on + * @param flags Flags describing the fields + * @param analyzer Analyzer to use + * @throws ParseException if query parsing fails + * @throws IllegalArgumentException if the length of the fields array differs + * from the length of the flags array + */ + static CL_NS(search)::Query* parse(const TCHAR* query, const TCHAR** _fields, + const uint8_t* flags, CL_NS(analysis)::Analyzer* analyzer); + + /** + * Parses a query, searching on the fields specified. + * Use this if you need to specify certain fields as required, + * and others as prohibited. + *

+  * Usage:
+  * 
+  * String[] query = {"query1", "query2", "query3"};
+  * String[] fields = {"filename", "contents", "description"};
+  * BooleanClause.Occur[] flags = {BooleanClause.Occur.SHOULD,
+  *                BooleanClause.Occur.MUST,
+  *                BooleanClause.Occur.MUST_NOT};
+  * MultiFieldQueryParser.parse(query, fields, flags, analyzer);
+  * 
+  * 
+ *

+ * The code above would construct a query: + *

+  * 
+  * (filename:query1) +(contents:query2) -(description:query3)
+  * 
+  * 
+ * + * @param queries Queries string to parse + * @param fields Fields to search on + * @param flags Flags describing the fields + * @param analyzer Analyzer to use + * @throws ParseException if query parsing fails + * @throws IllegalArgumentException if the length of the queries, fields, + * and flags array differ + */ + static CL_NS(search)::Query* parse(const TCHAR** _queries, const TCHAR** _fields, const uint8_t* flags, + CL_NS(analysis)::Analyzer* analyzer); + + CL_NS(search)::Query* parse(const TCHAR* _query){return QueryParser::parse(_query);} +}; +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/queryParser/QueryParser.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/queryParser/QueryParser.cpp new file mode 100644 index 0000000..aa1d4ab --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/queryParser/QueryParser.cpp @@ -0,0 +1,1502 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "_CharStream.h" +#include "_FastCharStream.h" +#include "QueryParserConstants.h" +#include "QueryParserTokenManager.h" +#include "QueryParser.h" + +#include "CLucene/analysis/AnalysisHeader.h" + +#include "CLucene/search/SearchHeader.h" + +#include "CLucene/search/Query.h" +#include "CLucene/search/TermQuery.h" +#include "CLucene/search/BooleanQuery.h" +#include "CLucene/search/FuzzyQuery.h" +#include "CLucene/search/PhraseQuery.h" +#include "CLucene/search/WildcardQuery.h" +#include "CLucene/search/PrefixQuery.h" +#include "CLucene/search/RangeQuery.h" +#include "CLucene/search/MatchAllDocsQuery.h" +#include "CLucene/search/MultiPhraseQuery.h" +#include "CLucene/search/ConstantScoreQuery.h" + +#include "CLucene/document/DateField.h" +#include "CLucene/document/DateTools.h" + +#include "CLucene/index/Term.h" +#include "QueryToken.h" + +#include "CLucene/util/CLStreams.h" +#include "CLucene/util/StringBuffer.h" + +CL_NS_USE(util) +CL_NS_USE(index) +CL_NS_USE(analysis) +CL_NS_USE(search) + +CL_NS_DEF(queryParser) + +const TCHAR* QueryParserConstants::tokenImage[] = { + _T(""), + _T("<_NUM_CHAR>"), + _T("<_ESCAPED_CHAR>"), + _T("<_TERM_START_CHAR>"), + _T("<_TERM_CHAR>"), + _T("<_WHITESPACE>"), + _T(""), + _T(""), + _T(""), + _T(""), + _T("\"+\""), + _T("\"-\""), + _T("\"(\""), + _T("\")\""), + _T("\":\""), + _T("\"*\""), + _T("\"^\""), + _T(""), + _T(""), + _T(""), + _T(""), + _T(""), + _T("\"[\""), + _T("\"{\""), + _T(""), + _T("\"TO\""), + _T("\"]\""), + _T(""), + _T(""), + _T("\"TO\""), + _T("\"}\""), + _T(""), + _T("") +}; + +const int32_t QueryParser::jj_la1_0[] = {0x180,0x180,0xe00,0xe00,0x1f69f80,0x48000,0x10000,0x1f69000,0x1348000,0x80000,0x80000,0x10000,0x18000000,0x2000000,0x18000000,0x10000,int32_t(0x80000000),0x20000000,int32_t(0x80000000),0x10000,0x80000,0x10000,0x1f68000}; +const int32_t QueryParser::jj_la1_1[] = {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x0,0x0,0x0}; + +struct QueryParser::JJCalls { +public: + int32_t gen; + QueryToken* first; + int32_t arg; + JJCalls* next; + + JJCalls(); + ~JJCalls(); +}; + +QueryParser::QueryParser(const TCHAR* f, Analyzer* a) : _operator(OR_OPERATOR), + lowercaseExpandedTerms(true),useOldRangeQuery(false),allowLeadingWildcard(false),enablePositionIncrements(false), + analyzer(a),field(NULL),phraseSlop(0),fuzzyMinSim(FuzzyQuery::defaultMinSimilarity), + fuzzyPrefixLength(FuzzyQuery::defaultPrefixLength),/*locale(NULL),*/ + dateResolution(CL_NS(document)::DateTools::NO_RESOLUTION),fieldToDateResolution(NULL), + token_source(NULL),token(NULL),jj_nt(NULL),_firstToken(NULL),jj_ntk(-1),jj_scanpos(NULL),jj_lastpos(NULL),jj_la(0), + lookingAhead(false),jj_gen(0),jj_2_rtns(NULL),jj_rescan(false),jj_gc(0),jj_expentries(NULL),jj_expentry(NULL), + jj_kind(-1),jj_endpos(0) +{ + StringReader* rdr = _CLNEW StringReader(_T("")); + _init(_CLNEW FastCharStream(rdr, true)); + + if ( f ) + field = STRDUP_TtoT(f); +} + +void QueryParser::_deleteTokens(){ + QueryToken* t = _firstToken; + while (true){ + if (_firstToken == NULL) break; + t = _firstToken->next; + _CLLDELETE(_firstToken); + _firstToken = t; + } +} + +QueryParser::~QueryParser(){ + _CLLDELETE(fieldToDateResolution); + _CLLDELETE(token_source); + + _deleteTokens(); + + _CLLDELETE(jj_expentries); + _CLLDELETE(jj_expentry); + _CLLDELETE(jj_2_rtns); + + _CLDELETE_CARRAY(field); +} + +CL_NS(search)::Query* QueryParser::parse(const TCHAR* q, const TCHAR* f, CL_NS(analysis)::Analyzer* a){ + QueryParser* qp = _CLNEW QueryParser(f, a); + CL_NS(search)::Query* qry = qp->parse(q); + _CLDELETE(qp); + return qry; +} + +Query* QueryParser::parse(const TCHAR* _query) +{ + StringReader* rdr = _CLNEW StringReader(_query); + ReInit(_CLNEW FastCharStream(rdr, true)); + try { + // TopLevelQuery is a Query followed by the end-of-input (EOF) + Query* res = TopLevelQuery(field); + return (res!=NULL) ? res : _CLNEW BooleanQuery(); + } + catch (CLuceneError& e) { + // rethrow to include the original query: + if (e.number()==CL_ERR_Parse || e.number()==CL_ERR_TokenMgr) { + TCHAR* _twhat = e.twhat(); + const size_t errLen = _tcslen(_twhat) + _tcslen(_query) + 20; // make sure we have enough room for our error message + TCHAR *err = _CL_NEWARRAY(TCHAR,errLen); + cl_stprintf(err, errLen, _T("Cannot parse '%s': %s"), _query,_twhat); + _CLTHROWT_DEL(CL_ERR_Parse, err); + } else if (e.number()==CL_ERR_TooManyClauses) { + const size_t errLen = _tcslen(_query) + 25; // make sure we have enough room for our error message + TCHAR *err = _CL_NEWARRAY(TCHAR,errLen); + cl_stprintf(err, errLen, _T("Cannot parse '%s': too many boolean clauses"), _query); + _CLTHROWT_DEL(CL_ERR_Parse, err); + } else + throw e; + } +} + +Analyzer* QueryParser::getAnalyzer() const { + return analyzer; +} + +const TCHAR* QueryParser::getField() const { + return field; +} + +float_t QueryParser::getFuzzyMinSim() const { + return fuzzyMinSim; +} + +void QueryParser::setFuzzyMinSim(const float_t _fuzzyMinSim) { + fuzzyMinSim = _fuzzyMinSim; +} + +int32_t QueryParser::getFuzzyPrefixLength() const { + return fuzzyPrefixLength; +} + +void QueryParser::setFuzzyPrefixLength(const int32_t _fuzzyPrefixLength) { + fuzzyPrefixLength = _fuzzyPrefixLength; +} + +void QueryParser::setPhraseSlop(const int32_t _phraseSlop) { + phraseSlop = _phraseSlop; +} +int32_t QueryParser::getPhraseSlop() const { + return phraseSlop; +} +void QueryParser::setAllowLeadingWildcard(const bool _allowLeadingWildcard) { + allowLeadingWildcard = _allowLeadingWildcard; +} +bool QueryParser::getAllowLeadingWildcard() const { + return allowLeadingWildcard; +} +void QueryParser::setEnablePositionIncrements(const bool _enable) { + enablePositionIncrements = _enable; +} +bool QueryParser::getEnablePositionIncrements() const { + return enablePositionIncrements; +} +void QueryParser::setDefaultOperator(Operator _op) { + _operator = _op; +} +QueryParser::Operator QueryParser::getDefaultOperator() const { + return _operator; +} +void QueryParser::setLowercaseExpandedTerms(const bool _lowercaseExpandedTerms) { + lowercaseExpandedTerms = _lowercaseExpandedTerms; +} +bool QueryParser::getLowercaseExpandedTerms() const { + return lowercaseExpandedTerms; +} +void QueryParser::setUseOldRangeQuery(const bool _useOldRangeQuery) { + useOldRangeQuery = _useOldRangeQuery; +} +bool QueryParser::getUseOldRangeQuery() const { + return useOldRangeQuery; +} +void QueryParser::setDateResolution(const CL_NS(document)::DateTools::Resolution _dateResolution) { + dateResolution = _dateResolution; +} +void QueryParser::setDateResolution(const TCHAR* fieldName, const CL_NS(document)::DateTools::Resolution _dateResolution) { + if (fieldName == NULL) + _CLTHROWA(CL_ERR_IllegalArgument, "Field cannot be null."); + + if (fieldToDateResolution == NULL) { + // lazily initialize HashMap + fieldToDateResolution = _CLNEW FieldToDateResolutionType(); + } + + fieldToDateResolution->put(fieldName, _dateResolution); +} +CL_NS(document)::DateTools::Resolution QueryParser::getDateResolution(const TCHAR* fieldName) const { + if (fieldName == NULL) + _CLTHROWA(CL_ERR_IllegalArgument,"Field cannot be null."); + + if (fieldToDateResolution == NULL) { + // no field specific date resolutions set; return default date resolution instead + return dateResolution; + } + + CL_NS(document)::DateTools::Resolution resolution = fieldToDateResolution->get(fieldName); + if (resolution == CL_NS(document)::DateTools::NO_RESOLUTION) { + // no date resolutions set for the given field; return default date resolution instead + resolution = dateResolution; + } + + return resolution; +} + +void QueryParser::addClause(std::vector& clauses, int32_t conj, int32_t mods, Query* q){ + 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->isProhibited()) + c->setOccur(BooleanClause::MUST); + } + + if (nPreviousClauses > 0 && _operator == 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 parsed as +a OR b + BooleanClause* c = clauses[nPreviousClauses-1]; + if (!c->isProhibited()) + c->setOccur(BooleanClause::SHOULD); + } + + // We might have been passed a null query; the term might have been + // filtered away by the analyzer. + if (q == NULL) + return; + + if (_operator == 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) + clauses.push_back(_CLNEW BooleanClause(q,true, BooleanClause::MUST)); + else if (!required && !prohibited) + clauses.push_back(_CLNEW BooleanClause(q,true, BooleanClause::SHOULD)); + else if (!required && prohibited) + clauses.push_back(_CLNEW BooleanClause(q,true, BooleanClause::MUST_NOT)); + else { + _CLTHROWA(CL_ERR_Runtime, "Clause cannot be both required and prohibited"); + } +} + +Query* QueryParser::getFieldQuery(const TCHAR* _field, TCHAR* queryText) { + // Use the analyzer to get all the tokens, and then build a TermQuery, + // PhraseQuery, or nothing based on the term count + + StringReader reader(queryText); + TokenStream* source = analyzer->tokenStream(_field, &reader); + + CLVector > v; + CL_NS(analysis)::Token* t = NULL; + int32_t positionCount = 0; + bool severalTokensAtSamePosition = false; + + while (true) { + t = _CLNEW Token(); + try { + Token* _t = source->next(t); + if (_t == NULL) _CLDELETE(t); + }_CLCATCH_ERR(CL_ERR_IO, _CLLDELETE(source);_CLLDELETE(t);_CLDELETE_LCARRAY(queryText);,{ + t = NULL; + }); + if (t == NULL) + break; + v.push_back(t); + if (t->getPositionIncrement() != 0) + positionCount += t->getPositionIncrement(); + else + severalTokensAtSamePosition = true; + } + try { + source->close(); + } + _CLCATCH_ERR_CLEANUP(CL_ERR_IO, {_CLLDELETE(source);_CLLDELETE(t);_CLDELETE_LCARRAY(queryText);} ); /* cleanup */ + _CLLDELETE(source); + + if (v.size() == 0) + return NULL; + else if (v.size() == 1) { + Term* tm = _CLNEW Term(_field, v.at(0)->termBuffer()); + Query* ret = _CLNEW TermQuery( tm ); + _CLDECDELETE(tm); + return ret; + } else { + if (severalTokensAtSamePosition) { + if (positionCount == 1) { + // no phrase query: + BooleanQuery* q = _CLNEW BooleanQuery(true); + for(size_t i=0; itermBuffer()); + q->add(_CLNEW TermQuery(tm), true, BooleanClause::SHOULD); + _CLDECDELETE(tm); + } + return q; + }else { + MultiPhraseQuery* mpq = _CLNEW MultiPhraseQuery(); + mpq->setSlop(phraseSlop); + CLArrayList multiTerms; + int32_t position = -1; + for (size_t i = 0; i < v.size(); i++) { + t = v.at(i); + if (t->getPositionIncrement() > 0 && multiTerms.size() > 0) { + ValueArray termsArray(multiTerms.size()); + multiTerms.toArray(termsArray.values); + if (enablePositionIncrements) { + mpq->add(&termsArray,position); + } else { + mpq->add(&termsArray); + } + multiTerms.clear(); + } + position += t->getPositionIncrement(); + multiTerms.push_back(_CLNEW Term(field, t->termBuffer())); + } + ValueArray termsArray(multiTerms.size()); + multiTerms.toArray(termsArray.values); + if (enablePositionIncrements) { + mpq->add(&termsArray,position); + } else { + mpq->add(&termsArray); + } + return mpq; + } + }else { + PhraseQuery* pq = _CLNEW PhraseQuery(); + pq->setSlop(phraseSlop); + int32_t position = -1; + + for (size_t i = 0; i < v.size(); i++) { + t = v.at(i); + Term* tm = _CLNEW Term(_field, t->termBuffer()); + if (enablePositionIncrements) { + position += t->getPositionIncrement(); + pq->add(tm,position); + } else { + pq->add(tm); + } + _CLDECDELETE(tm); + } + return pq; + } + } +} + +Query* QueryParser::getFieldQuery(const TCHAR* _field, TCHAR* queryText, const int32_t slop) { + Query* query = getFieldQuery(_field, queryText); + + if (query) { + if ( query->instanceOf(PhraseQuery::getClassName()) ) { + static_cast(query)->setSlop(slop); + } else if ( query->instanceOf(MultiPhraseQuery::getClassName()) ) { + static_cast(query)->setSlop(slop); + } + } + return query; +} + +Query* QueryParser::getRangeQuery(const TCHAR* _field, TCHAR* part1, TCHAR* part2, const bool inclusive) +{ + if (lowercaseExpandedTerms) { + _tcslwr(part1); + _tcslwr(part2); + } + + TCHAR* _part1 = part1, *_part2 = part2; // just in case anything go wrong... + try { + /*DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, locale); // SHORT means completely numeric + df.setLenient(true); + Date d1 = df.parse(part1); + Date d2 = df.parse(part2); + */ + const int64_t d1 = CL_NS(document)::DateTools::stringToTime(part1); + int64_t d2 = CL_NS(document)::DateTools::stringToTime(part2); + if (inclusive) { + // The user can only specify the date, not the time, so make sure + // the time is set to the latest possible time of that date to really + // include all documents: + d2 = CL_NS(document)::DateTools::timeMakeInclusive(d2); + } + + CL_NS(document)::DateTools::Resolution resolution = getDateResolution(_field); + if (resolution == CL_NS(document)::DateTools::NO_RESOLUTION) { + // no default or field specific date resolution has been set, + // use deprecated DateField to maintain compatibilty with + // pre-1.9 Lucene versions. + _part1 = CL_NS(document)::DateField::timeToString(d1); + _part2 = CL_NS(document)::DateField::timeToString(d2); + } else { + _part1 = CL_NS(document)::DateTools::timeToString(d1, resolution); + _part2 = CL_NS(document)::DateTools::timeToString(d2, resolution); + } + } + catch (...) { } + + if(useOldRangeQuery) + { + Term* t1 = _CLNEW Term(_field,part1); + Term* t2 = _CLNEW Term(_field,part2); + Query* ret = _CLNEW RangeQuery(t1, t2, inclusive); + _CLDECDELETE(t1); + _CLDECDELETE(t2); + + // Make sure to delete the date strings we allocated only if we indeed allocated them + if (part1 != _part1) _CLDELETE_LCARRAY(_part1); + if (part2 != _part2) _CLDELETE_LCARRAY(_part2); + + return ret; + } + else + { + Query* q = _CLNEW ConstantScoreRangeQuery(_field,part1,part2,inclusive,inclusive); + + // Make sure to delete the date strings we allocated only if we indeed allocated them + if (part1 != _part1) _CLDELETE_LCARRAY(_part1); + if (part2 != _part2) _CLDELETE_LCARRAY(_part2); + + return q; + } +} + +Query* QueryParser::getBooleanQuery(std::vector& clauses, bool disableCoord) +{ + if (clauses.size()==0) { + return NULL; // all clause words were filtered away by the analyzer. + } + BooleanQuery* query = _CLNEW BooleanQuery(disableCoord); + + for (size_t i = 0; i < clauses.size(); i++) { + query->add(clauses[i]); + } + return query; +} + +Query* QueryParser::getWildcardQuery(const TCHAR* _field, TCHAR* termStr) +{ + if (_tcscmp(_T("*"), _field) == 0) { + if (_tcscmp(_T("*"), termStr) == 0) + return _CLNEW MatchAllDocsQuery(); + } + if (!allowLeadingWildcard && (termStr[0]==_T('*') || termStr[0]==_T('?'))){ + _CLDELETE_LCARRAY(termStr); + _CLTHROWT(CL_ERR_Parse,_T("'*' or '?' not allowed as first character in WildcardQuery")); + } + if (lowercaseExpandedTerms) { + _tcslwr(termStr); + } + + Term* t = _CLNEW Term(_field, termStr); + Query* q = _CLNEW WildcardQuery(t); + _CLDECDELETE(t); + + return q; +} + +Query* QueryParser::getPrefixQuery(const TCHAR* _field, TCHAR* _termStr) +{ + if (!allowLeadingWildcard && _termStr[0] == _T('*')){ + _CLDELETE_LCARRAY(_termStr); + _CLTHROWT(CL_ERR_Parse,_T("'*' not allowed as first character in PrefixQuery")); + } + if (lowercaseExpandedTerms) { + _tcslwr(_termStr); + } + Term* t = _CLNEW Term(_field, _termStr); + Query *q = _CLNEW PrefixQuery(t); + _CLDECDELETE(t); + return q; +} + +Query* QueryParser::getFuzzyQuery(const TCHAR* _field, TCHAR* termStr, const float_t minSimilarity) +{ + if (lowercaseExpandedTerms) { + _tcslwr(termStr); + } + + Term* t = _CLNEW Term(_field, termStr); + Query *q = _CLNEW FuzzyQuery(t, minSimilarity, fuzzyPrefixLength); + _CLDECDELETE(t); + return q; +} + +TCHAR* QueryParser::discardEscapeChar(TCHAR* input, TCHAR* output) { + // Create char array to hold unescaped char sequence + const size_t inputLen = _tcslen(input); + bool outputOwned=false; + if (output == NULL){ + // TODO: Perhaps we can re-use an inner buffer instead of creating new char arrays here and in several other places + output = _CL_NEWARRAY(TCHAR, inputLen + 1); + outputOwned=true; + } + + // The length of the output can be less than the input + // due to discarded escape chars. This variable holds + // the actual length of the output + int32_t length = 0; + + // We remember whether the last processed character was + // an escape character + bool lastCharWasEscapeChar = false; + + // The multiplier the current unicode digit must be multiplied with. + // E. g. the first digit must be multiplied with 16^3, the second with 16^2... + uint32_t codePointMultiplier = 0; + + // Used to calculate the codepoint of the escaped unicode character + int32_t codePoint = 0; + + for (size_t i = 0; i < inputLen; i++) { + TCHAR curChar = input[i]; + if (codePointMultiplier > 0) { + try { + codePoint += hexToInt(curChar) * codePointMultiplier; + } catch (CLuceneError& e) { + if (outputOwned)_CLDELETE_LCARRAY(output); + throw e; + } + codePointMultiplier = codePointMultiplier >> 4; + if (codePointMultiplier == 0) { + output[length++] = (TCHAR)codePoint; + codePoint = 0; + } + } else if (lastCharWasEscapeChar) { + if (curChar == _T('u')) { + // found an escaped unicode character + codePointMultiplier = 16 * 16 * 16; + } else { + // this character was escaped + output[length] = curChar; + length++; + } + lastCharWasEscapeChar = false; + } else { + if (curChar == _T('\\')) { + lastCharWasEscapeChar = true; + } else { + output[length] = curChar; + length++; + } + } + } + + if (codePointMultiplier > 0) { + if (outputOwned)_CLDELETE_LCARRAY(output); + _CLTHROWT(CL_ERR_Parse, _T("Truncated unicode escape sequence.")); + } + + if (lastCharWasEscapeChar) { + if (outputOwned)_CLDELETE_LCARRAY(output); + _CLTHROWT(CL_ERR_Parse,_T("Term can not end with escape character.")); + } + + output[length]=0; + return output; +} + +//static +int32_t QueryParser::hexToInt(TCHAR c) { + if (_T('0') <= c && c <= _T('9')) { + return c - _T('0'); + } else if (_T('a') <= c && c <= _T('f')){ + return c - _T('a') + 10; + } else if (_T('A') <= c && c <= _T('F')) { + return c - _T('A') + 10; + } else { + TCHAR err[50]; + cl_stprintf(err,50, _T("Non-hex character in unicode escape sequence: %c"), c); + _CLTHROWT(CL_ERR_Parse,err); + } +} + +//static +TCHAR* QueryParser::escape(const TCHAR* s) { + size_t len = _tcslen(s); + // Create a StringBuffer object a bit longer from the length of the query (to prevent some reallocations), + // and declare we are the owners of the buffer (to save on a copy) + // TODO: 1. Test to see what is the optimal initial length + // 2. Allow re-using the provided string buffer (argument s) instead of creating another one? + StringBuffer sb(len+5); + for (size_t i = 0; i < len; i++) { + const TCHAR c = s[i]; + // These characters are part of the query syntax and must be escaped + if (c == '\\' || c == '+' || c == '-' || c == '!' || c == '(' || c == ')' || c == ':' + || c == '^' || c == '[' || c == ']' || c == '"' || c == '{' || c == '}' || c == '~' + || c == '*' || c == '?' || c == '|' || c == '&') { + sb.appendChar(_T('\\')); + } + sb.appendChar(c); + } + return sb.giveBuffer(); +} + +int32_t QueryParser::Conjunction() { + int32_t ret = CONJ_NONE; + switch ((jj_ntk==-1)?f_jj_ntk():jj_ntk) + { + case AND: + case OR: + switch ((jj_ntk==-1)?f_jj_ntk():jj_ntk) + { + case AND: + jj_consume_token(AND); + ret = CONJ_AND; + break; + case OR: + jj_consume_token(OR); + ret = CONJ_OR; + break; + default: + jj_la1[0] = jj_gen; + jj_consume_token(-1); + _CLTHROWT(CL_ERR_Parse,_T("")); + } + break; + default: + jj_la1[1] = jj_gen; + } + return ret; +} + +int32_t QueryParser::Modifiers() { + int32_t ret = MOD_NONE; + switch ((jj_ntk==-1)?f_jj_ntk():jj_ntk) + { + case NOT: + case PLUS: + case MINUS: + switch ((jj_ntk==-1)?f_jj_ntk():jj_ntk) + { + case PLUS: + jj_consume_token(PLUS); + ret = MOD_REQ; + break; + case MINUS: + jj_consume_token(MINUS); + ret = MOD_NOT; + break; + case NOT: + jj_consume_token(NOT); + ret = MOD_NOT; + break; + default: + jj_la1[2] = jj_gen; + jj_consume_token(-1); + _CLTHROWT(CL_ERR_Parse,_T("")); + } + break; + default: + jj_la1[3] = jj_gen; + } + return ret; +} + +Query* QueryParser::TopLevelQuery(TCHAR* _field) { + Query* q = NULL;; + try { + q = fQuery(_field); + jj_consume_token(0); + } catch (CLuceneError& e) { + _CLLDELETE(q); + throw e; + } + return q; +} + +Query* QueryParser::fQuery(TCHAR* _field) { + CLVector > clauses; + Query *q, *firstQuery=NULL; + int32_t conj, mods; + mods = Modifiers(); + q = fClause(_field); + addClause(clauses, CONJ_NONE, mods, q); + if (mods == MOD_NONE) + firstQuery=q; + while (true) { + switch ((jj_ntk==-1)?f_jj_ntk():jj_ntk) + { + case AND: + case OR: + case NOT: + case PLUS: + case MINUS: + case LPAREN: + case STAR: + case QUOTED: + case TERM: + case PREFIXTERM: + case WILDTERM: + case RANGEIN_START: + case RANGEEX_START: + case NUMBER: + break; + default: + jj_la1[4] = jj_gen; + goto label_1_brk; + } + + conj = Conjunction(); + mods = Modifiers(); + q = fClause(_field); + addClause(clauses, conj, mods, q); + } + +label_1_brk: + if (clauses.size() == 1 && firstQuery != NULL){ + clauses[0]->deleteQuery = false; + return firstQuery; + }else{ + clauses.setDoDelete(false); + return getBooleanQuery(clauses); + } +} + +Query* QueryParser::fClause(TCHAR* _field) { + Query* q=NULL; + QueryToken *fieldToken=NULL, *boost=NULL; + TCHAR* tmpField=NULL; + if (jj_2_1(2)) { + switch ((jj_ntk==-1)?f_jj_ntk():jj_ntk) + { + case TERM: + { + fieldToken = jj_consume_token(TERM); + jj_consume_token(COLON); + // make sure to delete _field only if it's not contained already by the QP + tmpField=discardEscapeChar(fieldToken->image); + break; + } + case STAR: + jj_consume_token(STAR); + jj_consume_token(COLON); + tmpField=_CL_NEWARRAY(TCHAR,2); + tmpField[0]=_T('*'); + tmpField[1]=0; + break; + default: + jj_la1[5] = jj_gen; + jj_consume_token(-1); + _CLTHROWT(CL_ERR_Parse,_T("")); + } + } + + switch ((jj_ntk==-1)?f_jj_ntk():jj_ntk) + { + case STAR: + case QUOTED: + case TERM: + case PREFIXTERM: + case WILDTERM: + case RANGEIN_START: + case RANGEEX_START: + case NUMBER: + { + q = fTerm( tmpField==NULL ? _field : tmpField ); + break; + } + case LPAREN: + { + jj_consume_token(LPAREN); + q = fQuery( tmpField==NULL ? _field : tmpField ); + jj_consume_token(RPAREN); + if (((jj_ntk==-1)?f_jj_ntk():jj_ntk) == CARAT) + { + jj_consume_token(CARAT); + boost = jj_consume_token(NUMBER); + } + else + jj_la1[6] = jj_gen; + break; + } + default: + { + jj_la1[7] = jj_gen; + jj_consume_token(-1); + _CLDELETE_LCARRAY(tmpField); + _CLTHROWT(CL_ERR_Parse,_T("")); + } + } + _CLDELETE_LCARRAY(tmpField); + if (q && boost != NULL) { + float_t f = 1.0; + try { + f = _tcstod(boost->image, NULL); + q->setBoost(f); + } catch (...) { /* ignore errors */ } + } + return q; +} + +Query* QueryParser::fTerm(const TCHAR* _field) { + QueryToken *term, *boost=NULL, *fuzzySlop=NULL, *goop1, *goop2; + bool prefix = false; + bool wildcard = false; + bool fuzzy = false; + //bool rangein = false; + Query* q = NULL; + switch ((jj_ntk==-1)?f_jj_ntk():jj_ntk) + { + case STAR: + case TERM: + case PREFIXTERM: + case WILDTERM: + case NUMBER: + { + switch ((jj_ntk==-1)?f_jj_ntk():jj_ntk) + { + case TERM: + term = jj_consume_token(TERM); + break; + case STAR: + term = jj_consume_token(STAR); + wildcard=true; + break; + case PREFIXTERM: + term = jj_consume_token(PREFIXTERM); + prefix=true; + break; + case WILDTERM: + term = jj_consume_token(WILDTERM); + wildcard=true; + break; + case NUMBER: + term = jj_consume_token(NUMBER); + break; + default: + jj_la1[8] = jj_gen; + jj_consume_token(-1); + _CLTHROWT(CL_ERR_Parse,_T("")); + } + + if (((jj_ntk==-1)?f_jj_ntk():jj_ntk) == FUZZY_SLOP) + { + fuzzySlop = jj_consume_token(FUZZY_SLOP); + fuzzy=true; + } + else + jj_la1[9] = jj_gen; + + if (((jj_ntk==-1)?f_jj_ntk():jj_ntk) == CARAT) + { + jj_consume_token(CARAT); + boost = jj_consume_token(NUMBER); + if (((jj_ntk==-1)?f_jj_ntk():jj_ntk) == FUZZY_SLOP) + { + fuzzySlop = jj_consume_token(FUZZY_SLOP); + fuzzy=true; + } + else + jj_la1[10] = jj_gen; + } + else + jj_la1[11] = jj_gen; + + TCHAR* termImage=NULL; + if (wildcard) { + termImage=discardEscapeChar(term->image); + q = getWildcardQuery(_field, termImage); + } else if (prefix) { + termImage = STRDUP_TtoT(term->image); + size_t tiLen = _tcslen(termImage); + termImage[tiLen-1]=0; + q = getPrefixQuery(_field,discardEscapeChar(termImage, termImage)); + } else if (fuzzy) { + float_t fms = fuzzyMinSim; + try { + if (fuzzySlop->image[1] != 0) + fms = _tcstod(fuzzySlop->image + 1, NULL); + } catch (...) { /* ignore exceptions */ } + if(fms < 0.0f || fms > 1.0f){ + _CLTHROWT(CL_ERR_Parse, _T("Minimum similarity for a FuzzyQuery has to be between 0.0f and 1.0f !")); + } + termImage=discardEscapeChar(term->image); + q = getFuzzyQuery(_field, termImage,fms); + } else { + termImage=discardEscapeChar(term->image); + q = getFieldQuery(_field, termImage); + } + _CLDELETE_LCARRAY(termImage); + break; + } + case RANGEIN_START: + { + jj_consume_token(RANGEIN_START); + switch ((jj_ntk==-1)?f_jj_ntk():jj_ntk) + { + case RANGEIN_GOOP: + goop1 = jj_consume_token(RANGEIN_GOOP); + break; + case RANGEIN_QUOTED: + goop1 = jj_consume_token(RANGEIN_QUOTED); + break; + default: + jj_la1[12] = jj_gen; + jj_consume_token(-1); + _CLTHROWT(CL_ERR_Parse,_T("")); + } + if (((jj_ntk==-1)?f_jj_ntk():jj_ntk) == RANGEIN_TO) + jj_consume_token(RANGEIN_TO); + else + jj_la1[13] = jj_gen; + + switch ((jj_ntk==-1)?f_jj_ntk():jj_ntk) + { + case RANGEIN_GOOP: + goop2 = jj_consume_token(RANGEIN_GOOP); + break; + case RANGEIN_QUOTED: + goop2 = jj_consume_token(RANGEIN_QUOTED); + break; + default: + jj_la1[14] = jj_gen; + jj_consume_token(-1); + _CLTHROWT(CL_ERR_Parse,_T("")); + } + jj_consume_token(RANGEIN_END); + if (((jj_ntk==-1)?f_jj_ntk():jj_ntk) == CARAT) + { + jj_consume_token(CARAT); + boost = jj_consume_token(NUMBER); + } + else + jj_la1[15] = jj_gen; + + // TODO: Allow analysis::Term to accept ownership on a TCHAR* and save on extra dup's + if (goop1->kind == RANGEIN_QUOTED) { + _tcscpy(goop1->image, goop1->image+1); + goop1->image[_tcslen(goop1->image)-1]='\0'; + } + if (goop2->kind == RANGEIN_QUOTED) { + _tcscpy(goop2->image, goop2->image+1); + goop2->image[_tcslen(goop2->image)-1]='\0'; + } + TCHAR* t1 = discardEscapeChar(goop1->image); + TCHAR* t2 = discardEscapeChar(goop2->image); + q = getRangeQuery(_field, t1, t2, true); + _CLDELETE_LCARRAY(t1); + _CLDELETE_LCARRAY(t2); + break; + } + case RANGEEX_START: + { + jj_consume_token(RANGEEX_START); + switch ((jj_ntk==-1)?f_jj_ntk():jj_ntk) + { + case RANGEEX_GOOP: + goop1 = jj_consume_token(RANGEEX_GOOP); + break; + case RANGEEX_QUOTED: + goop1 = jj_consume_token(RANGEEX_QUOTED); + break; + default: + jj_la1[16] = jj_gen; + jj_consume_token(-1); + _CLTHROWT(CL_ERR_Parse,_T("")); + } + + if (((jj_ntk==-1)?f_jj_ntk():jj_ntk) == RANGEEX_TO) + jj_consume_token(RANGEEX_TO); + else + jj_la1[17] = jj_gen; + + switch ((jj_ntk==-1)?f_jj_ntk():jj_ntk) + { + case RANGEEX_GOOP: + goop2 = jj_consume_token(RANGEEX_GOOP); + break; + case RANGEEX_QUOTED: + goop2 = jj_consume_token(RANGEEX_QUOTED); + break; + default: + jj_la1[18] = jj_gen; + jj_consume_token(-1); + _CLTHROWT(CL_ERR_Parse,_T("")); + } + jj_consume_token(RANGEEX_END); + if (((jj_ntk==-1)?f_jj_ntk():jj_ntk) == CARAT) + { + jj_consume_token(CARAT); + boost = jj_consume_token(NUMBER); + } + else + jj_la1[19] = jj_gen; + + if (goop1->kind == RANGEEX_QUOTED) + goop1->image = goop1->image + 1; + + if (goop2->kind == RANGEEX_QUOTED) + goop2->image = goop2->image + 1; + + TCHAR* t1 = discardEscapeChar(goop1->image); + TCHAR* t2 = discardEscapeChar(goop2->image); + q = getRangeQuery(_field, t1, t2, false); + _CLDELETE_LCARRAY(t1); + _CLDELETE_LCARRAY(t2); + break; + } + case QUOTED: + { + term = jj_consume_token(QUOTED); + if (((jj_ntk==-1)?f_jj_ntk():jj_ntk) == FUZZY_SLOP) + fuzzySlop = jj_consume_token(FUZZY_SLOP); + else + jj_la1[20] = jj_gen; + + if (((jj_ntk==-1)?f_jj_ntk():jj_ntk) == CARAT) + { + jj_consume_token(CARAT); + boost = jj_consume_token(NUMBER); + } + else + jj_la1[21] = jj_gen; + + int32_t s = phraseSlop; + + if (fuzzySlop != NULL) { + try { + s = _ttoi(fuzzySlop->image + 1); + } + catch (...) { /* ignore exceptions */ } + } + // TODO: Make sure this hack, save an extra dup, is legal and not harmful + const size_t st = _tcslen(term->image); + term->image[st-1]='\0'; + TCHAR* tmp = discardEscapeChar(term->image+1); + q = getFieldQuery(_field, tmp, s); + _CLDELETE_LCARRAY(tmp); + break; + } + default: + { + jj_la1[22] = jj_gen; + jj_consume_token(-1); + _CLTHROWT(CL_ERR_Parse,_T("")); + } + } + if (boost != NULL) { + float_t f = 1.0; + try { + f = _tcstod(boost->image, NULL); + } + catch (...) { + /* Should this be handled somehow? (defaults to "no boost", if + * boost number is invalid) + */ + } + + // avoid boosting null queries, such as those caused by stop words + if (q != NULL) { + q->setBoost(f); + } + } + return q; +} + +bool QueryParser::jj_2_1(const int32_t xla) { + jj_la = xla; jj_lastpos = jj_scanpos = token; + try { return !jj_3_1(); } + catch(CLuceneError& e) { + // TODO: Improve this handling + if (e.number()==CL_ERR_Parse && _tcscmp(e.twhat(),_T("LookaheadSuccess"))==0) + return true; + else + throw e; + } + _CLFINALLY( jj_save(0, xla); ); +} + +bool QueryParser::jj_3R_2() { + if (jj_scan_token(TERM)) return true; + if (jj_scan_token(COLON)) return true; + return false; +} + +bool QueryParser::jj_3_1() { + QueryToken* xsp = jj_scanpos; + if (jj_3R_2()) { + jj_scanpos = xsp; + if (jj_3R_3()) return true; + } + return false; +} + +bool QueryParser::jj_3R_3() { + if (jj_scan_token(STAR)) return true; + if (jj_scan_token(COLON)) return true; + return false; +} + +QueryParser::QueryParser(CharStream* stream):_operator(OR_OPERATOR), + lowercaseExpandedTerms(true),useOldRangeQuery(false),allowLeadingWildcard(false),enablePositionIncrements(false), + analyzer(NULL),field(NULL),phraseSlop(0),fuzzyMinSim(FuzzyQuery::defaultMinSimilarity), + fuzzyPrefixLength(FuzzyQuery::defaultPrefixLength),/*locale(NULL),*/ + dateResolution(CL_NS(document)::DateTools::NO_RESOLUTION),fieldToDateResolution(NULL), + token_source(NULL),token(NULL),jj_nt(NULL),_firstToken(NULL),jj_ntk(-1),jj_scanpos(NULL),jj_lastpos(NULL),jj_la(0), + lookingAhead(false),jj_gen(0),jj_2_rtns(NULL),jj_rescan(false),jj_gc(0),jj_expentries(NULL),jj_expentry(NULL), + jj_kind(-1),jj_endpos(0) +{ + _init(stream); +} + +void QueryParser::_init(CharStream* stream){ + if (token_source == NULL) + token_source = _CLNEW QueryParserTokenManager(stream); + _firstToken = token = _CLNEW QueryToken(); + jj_ntk = -1; + jj_gen = 0; + for (int32_t i = 0; i < 23; i++) jj_la1[i] = -1; + jj_2_rtns = new JJCalls(); +} + +QueryToken* QueryParser::jj_consume_token(const int32_t kind) +{ + QueryToken* oldToken = token; + if (token->next != NULL) + token = token->next; + else + token = token->next = token_source->getNextToken(); + jj_ntk = -1; + if (token->kind == kind) { + jj_gen++; + if (++jj_gc > 100) { + jj_gc = 0; + JJCalls* c = jj_2_rtns; + while (c != NULL) { + if (c->gen < jj_gen) c->first = NULL; + c = c->next; + } + } + return token; + } + token = oldToken; + jj_kind = kind; + generateParseException(); + return NULL; +} + +bool QueryParser::jj_scan_token(const int32_t kind) { + if (jj_scanpos == jj_lastpos) { + jj_la--; + if (jj_scanpos->next == NULL) { + jj_lastpos = jj_scanpos = jj_scanpos->next = token_source->getNextToken(); + } else { + jj_lastpos = jj_scanpos = jj_scanpos->next; + } + } else { + jj_scanpos = jj_scanpos->next; + } + if (jj_rescan) { + int32_t i = 0; QueryToken* tok = token; + while (tok != NULL && tok != jj_scanpos) { i++; tok = tok->next; } + if (tok != NULL) jj_add_error_token(kind, i); + } + if (jj_scanpos->kind != kind) return true; + if (jj_la == 0 && jj_scanpos == jj_lastpos) _CLTHROWT(CL_ERR_Parse, _T("LookaheadSuccess")); + return false; +} + +void QueryParser::ReInit(CharStream* stream) { + token_source->ReInit(stream); + delete jj_2_rtns; + _deleteTokens(); + _init(NULL); +} + +QueryParser::QueryParser(QueryParserTokenManager* tm):_operator(OR_OPERATOR), + lowercaseExpandedTerms(true),useOldRangeQuery(false),allowLeadingWildcard(false),enablePositionIncrements(false), + analyzer(NULL),field(NULL),phraseSlop(0),fuzzyMinSim(FuzzyQuery::defaultMinSimilarity), + fuzzyPrefixLength(FuzzyQuery::defaultPrefixLength),/*locale(NULL),*/ + dateResolution(CL_NS(document)::DateTools::NO_RESOLUTION),fieldToDateResolution(NULL), + token_source(NULL),token(NULL),jj_nt(NULL),_firstToken(NULL),jj_ntk(-1),jj_scanpos(NULL),jj_lastpos(NULL),jj_la(0), + lookingAhead(false),jj_gen(0),jj_2_rtns(NULL),jj_rescan(false),jj_gc(0),jj_expentries(NULL),jj_expentry(NULL), + jj_kind(-1),jj_endpos(0) +{ + ReInit(tm); +} + +void QueryParser::ReInit(QueryParserTokenManager* tm){ + _CLLDELETE(token_source); + token_source = tm; + _deleteTokens(); + _firstToken = token = _CLNEW QueryToken(); + jj_ntk = -1; + jj_gen = 0; + for (int32_t i = 0; i < 23; i++) jj_la1[i] = -1; + delete jj_2_rtns; + jj_2_rtns = new JJCalls(); +} + +QueryToken* QueryParser::getNextToken() { + if (token->next != NULL) token = token->next; + else token = token->next = token_source->getNextToken(); + jj_ntk = -1; + jj_gen++; + return token; +} + +QueryToken* QueryParser::getToken(int32_t index) { + QueryToken* t = lookingAhead ? jj_scanpos : token; + for (int32_t i = 0; i < index; i++) { + if (t->next != NULL) t = t->next; + else t = t->next = token_source->getNextToken(); + } + return t; +} + +int32_t QueryParser::f_jj_ntk() { + if ((jj_nt=token->next) == NULL){ + token->next=token_source->getNextToken(); + jj_ntk = token->next->kind; + return jj_ntk; + } + else{ + jj_ntk = jj_nt->kind; + return jj_ntk; + } +} + +QueryParser::JJCalls::JJCalls():gen(0),first(NULL),arg(0),next(NULL) +{ +} +QueryParser::JJCalls::~JJCalls(){ + _CLLDELETE(first); + delete next; +} + +void QueryParser::jj_add_error_token(const int32_t kind, int32_t pos) { + if (pos >= 100) return; + if (pos == jj_endpos + 1) { + jj_lasttokens[jj_endpos++] = kind; + } else if (jj_endpos != 0) { + _CLLDELETE(jj_expentry); + jj_expentry = _CLNEW ValueArray(jj_endpos); + for (int32_t i = 0; i < jj_endpos; i++) { + jj_expentry->values[i] = jj_lasttokens[i]; + } + bool exists = false; + if (!jj_expentries) jj_expentries = _CLNEW CL_NS(util)::CLVector*, CL_NS(util)::Deletor::Object< CL_NS(util)::ValueArray > >(); + for (size_t i=0;isize();i++){ + const ValueArray* oldentry = jj_expentries->at(i); + if (oldentry->length == jj_expentry->length) { + exists = true; + for (size_t i = 0; i < jj_expentry->length; i++) { + if (oldentry->values[i] != jj_expentry->values[i]) { + exists = false; + break; + } + } + if (exists) break; + } + } + if (!exists) {jj_expentries->push_back(jj_expentry); jj_expentry=NULL;} + if (pos != 0) jj_lasttokens[(jj_endpos = pos) - 1] = kind; + } +} + +void QueryParser::generateParseException() { + // lazily create the vectors required for this operation + if (!jj_expentries) + jj_expentries = _CLNEW CL_NS(util)::CLVector*, CL_NS(util)::Deletor::Object< CL_NS(util)::ValueArray > >(); + else + jj_expentries->clear(); + bool la1tokens[33]; + for (int32_t i = 0; i < 33; i++) { + la1tokens[i] = false; + } + if (jj_kind >= 0) { + la1tokens[jj_kind] = true; + jj_kind = -1; + } + for (int32_t i = 0; i < 23; i++) { + if (jj_la1[i] == jj_gen) { + for (int32_t j = 0; j < 32; j++) { + if ((jj_la1_0[i] & (1<(1); + jj_expentry->values[0] = i; + jj_expentries->push_back(jj_expentry); + jj_expentry=NULL; + } + } + jj_endpos = 0; + jj_rescan_token(); + jj_add_error_token(0, 0); + + TCHAR* err = getParseExceptionMessage(token, jj_expentries, tokenImage); + _CLTHROWT_DEL(CL_ERR_Parse, err); +} + +void QueryParser::jj_rescan_token() { + jj_rescan = true; + JJCalls* p = jj_2_rtns; + do { + if (p->gen > jj_gen) { + jj_la = p->arg; jj_lastpos = jj_scanpos = p->first; + jj_3_1(); + } + p = p->next; + } while (p != NULL); + jj_rescan = false; +} + +void QueryParser::jj_save(const int32_t /*index*/, int32_t xla) { + JJCalls* p = jj_2_rtns; + while (p->gen > jj_gen) { + if (p->next == NULL) { p = p->next = new JJCalls(); break; } + p = p->next; + } + p->gen = jj_gen + xla - jj_la; + p->first = token; + p->arg = xla; +} + +TCHAR* QueryParserConstants::addEscapes(TCHAR* str) { + const size_t len = _tcslen(str); + StringBuffer retval(len * 2); + TCHAR ch; + for (size_t i = 0; i < len; i++) { + switch (str[i]) + { + case 0 : + continue; + case _T('\b'): + retval.append(_T("\\b")); + continue; + case _T('\t'): + retval.append(_T("\\t")); + continue; + case _T('\n'): + retval.append(_T("\\n")); + continue; + case _T('\f'): + retval.append(_T("\\f")); + continue; + case _T('\r'): + retval.append(_T("\\r")); + continue; + case _T('"'): + retval.append(_T("\\\"")); + continue; + case _T('\''): + retval.append(_T("\\'")); + continue; + case _T('\\'): + retval.append(_T("\\\\")); + continue; + default: + if ((ch = str[i]) < 0x20 || ch > 0x7e) { + TCHAR buf[4]; + _sntprintf(buf, 4, _T("%012X"), static_cast(ch)); + retval.append(_T("\\u")); + retval.append(buf); + } else { + retval.appendChar(ch); + } + continue; + } + } + return retval.giveBuffer(); +} + +TCHAR* QueryParser::getParseExceptionMessage(QueryToken* currentToken, + CL_NS(util)::CLVector< CL_NS(util)::ValueArray*, CL_NS(util)::Deletor::Object< CL_NS(util)::ValueArray > >* expectedTokenSequences, + const TCHAR* tokenImage[]) +{ + // TODO: Check to see what's a realistic initial value for the buffers here + // TODO: Make eol configurable (will be useful for PrintStream implementation as well later)? + const TCHAR* eol = _T("\n"); + + StringBuffer expected(CL_MAX_PATH); + size_t maxSize = 0; + for (size_t i = 0; i < expectedTokenSequences->size(); i++) { + if (maxSize < expectedTokenSequences->at(i)->length) { + maxSize = expectedTokenSequences->at(i)->length; + } + for (size_t j = 0; j < expectedTokenSequences->at(i)->length; j++) { + expected.append(tokenImage[expectedTokenSequences->at(i)->values[j]]); + expected.appendChar(_T(' ')); + } + if (expectedTokenSequences->at(i)->values[expectedTokenSequences->at(i)->length - 1] != 0) { + expected.append(_T("...")); + } + expected.append(eol); + expected.append(_T(" ")); + } + + StringBuffer retval(CL_MAX_PATH); + retval.append(_T("Encountered \"")); + QueryToken* tok = currentToken->next; + for (size_t i = 0; i < maxSize; i++) { + if (i != 0) retval.appendChar(' '); + if (tok->kind == 0) { + retval.append(tokenImage[0]); + break; + } + if (tok->image){ + TCHAR* buf = addEscapes(tok->image); + retval.append(buf); + _CLDELETE_CARRAY(buf); + } + tok = tok->next; + } + retval.append(_T("\" at line ")); + retval.appendInt(currentToken->next->beginLine); + retval.append(_T(", column ")); + retval.appendInt(currentToken->next->beginColumn); + retval.appendChar(_T('.')); + retval.append(eol); + if (expectedTokenSequences->size() == 1) { + retval.append(_T("Was expecting:")); + retval.append(eol); + retval.append(_T(" ")); + } else { + retval.append(_T("Was expecting one of:")); + retval.append(eol); + retval.append(_T(" ")); + } + retval.append(expected.getBuffer()); + + return retval.giveBuffer(); +} + +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/queryParser/QueryParser.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/queryParser/QueryParser.h new file mode 100644 index 0000000..3ca5c55 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/queryParser/QueryParser.h @@ -0,0 +1,530 @@ +/*------------------------------------------------------------------------------ +* 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_ + +#include "CLucene/util/Array.h" +#include "QueryParserTokenManager.h" +#include "CLucene/document/DateTools.h" +#include "CLucene/util/VoidMap.h" +#include "CLucene/util/VoidList.h" + +CL_CLASS_DEF(index,Term) +CL_CLASS_DEF(analysis,Analyzer) +CL_CLASS_DEF(search,Query) +CL_CLASS_DEF(search,BooleanClause) + +CL_NS_DEF(queryParser) + +class QueryParserConstants; + +/** + * This class is generated by JavaCC. The most important method is + * {@link #parse(String)}. + * + * The syntax for query strings is as follows: + * A Query is a series of clauses. + * A clause may be prefixed by: + *
    + *
  • a plus (+) or a minus (-) sign, indicating + * that the clause is required or prohibited respectively; or + *
  • a term followed by a colon, indicating the field to be searched. + * This enables one to construct queries which search multiple fields. + *
+ * + * A clause may be either: + *
    + *
  • a term, indicating all the documents that contain this term; or + *
  • a nested query, enclosed in parentheses. Note that this may be used + * with a +/- prefix to require any of a set of + * terms. + *
+ * + * Thus, in BNF, the query grammar is: + *
+ *   Query  ::= ( Clause )*
+ *   Clause ::= ["+", "-"] [<TERM> ":"] ( <TERM> | "(" Query ")" )
+ * 
+ * + *

+ * Examples of appropriately formatted queries can be found in the query syntax + * documentation. + *

+ * + *

+ * In {@link RangeQuery}s, QueryParser tries to detect date values, e.g. + * date:[6/1/2005 TO 6/4/2005] produces a range query that searches + * for "date" fields between 2005-06-01 and 2005-06-04. Note that the format + * of the accepted input depends on {@link #setLocale(Locale) the locale}. + * By default a date is converted into a search term using the deprecated + * {@link DateField} for compatibility reasons. + * To use the new {@link DateTools} to convert dates, a + * {@link org.apache.lucene.document.DateTools.Resolution} has to be set. + *

+ *

+ * The date resolution that shall be used for RangeQueries can be set + * using {@link #setDateResolution(DateTools.Resolution)} + * or {@link #setDateResolution(String, DateTools.Resolution)}. The former + * sets the default date resolution for all fields, whereas the latter can + * be used to set field specific date resolutions. Field specific date + * resolutions take, if set, precedence over the default date resolution. + *

+ *

+ * If you use neither {@link DateField} nor {@link DateTools} in your + * index, you can create your own + * query parser that inherits QueryParser and overwrites + * {@link #getRangeQuery(String, String, String, boolean)} to + * use a different method for date conversion. + *

+ * + *

Note that QueryParser is not thread-safe.

+ * + * @author Brian Goetz + * @author Peter Halacsy + * @author Tatu Saloranta + */ +class CLUCENE_EXPORT QueryParser : public virtual QueryParserConstants +{ +private: + LUCENE_STATIC_CONSTANT(int32_t, CONJ_NONE=0); + LUCENE_STATIC_CONSTANT(int32_t, CONJ_AND=1); + LUCENE_STATIC_CONSTANT(int32_t, CONJ_OR=2); + + LUCENE_STATIC_CONSTANT(int32_t, MOD_NONE=0); + LUCENE_STATIC_CONSTANT(int32_t, MOD_NOT=10); + LUCENE_STATIC_CONSTANT(int32_t, MOD_REQ=11); + +public: + /** The default operator for parsing queries. + * Use {@link QueryParser#setDefaultOperator} to change it. + */ + enum Operator { + OR_OPERATOR, + AND_OPERATOR + }; + +private: + /** The actual operator that parser uses to combine query terms */ + Operator _operator; + + bool lowercaseExpandedTerms; + bool useOldRangeQuery; + bool allowLeadingWildcard; + bool enablePositionIncrements; + + CL_NS(analysis)::Analyzer* analyzer; + TCHAR* field; + int32_t phraseSlop; + float_t fuzzyMinSim; + int32_t fuzzyPrefixLength; + //TODO: Locale locale = Locale.getDefault(); + + // the default date resolution + CL_NS(document)::DateTools::Resolution dateResolution; + // maps field names to date resolutions + typedef CL_NS(util)::CLHashMap FieldToDateResolutionType; + FieldToDateResolutionType* fieldToDateResolution; + +public: + /** Constructs a query parser. + * @param f the default field for query terms. + * @param a used to find terms in the query text. + */ + QueryParser(const TCHAR* f, CL_NS(analysis)::Analyzer* a); + virtual ~QueryParser(); + void _deleteTokens(); + + /** For backward compatibility */ + static CL_NS(search)::Query* parse(const TCHAR* q, const TCHAR* f, CL_NS(analysis)::Analyzer* a); + + /** Parses a query string, returning a {@link org.apache.lucene.search.Query}. + * @param query the query string to be parsed. + * @throws ParseException if the parsing fails + */ + CL_NS(search)::Query* parse(const TCHAR* _query); + + /** + * @return Returns the analyzer. + */ + CL_NS(analysis)::Analyzer* getAnalyzer() const; + + /** + * @return Returns the field. + */ + const TCHAR* getField() const; + + /** + * Get the minimal similarity for fuzzy queries. + */ + float_t getFuzzyMinSim() const; + + /** + * Set the minimum similarity for fuzzy queries. + * Default is 0.5f. + */ + void setFuzzyMinSim(const float_t _fuzzyMinSim); + + /** + * Get the prefix length for fuzzy queries. + * @return Returns the fuzzyPrefixLength. + */ + int32_t getFuzzyPrefixLength() const; + + /** + * Set the prefix length for fuzzy queries. Default is 0. + * @param fuzzyPrefixLength The fuzzyPrefixLength to set. + */ + void setFuzzyPrefixLength(const int32_t _fuzzyPrefixLength); + + /** + * Sets the default slop for phrases. If zero, then exact phrase matches + * are required. Default value is zero. + */ + void setPhraseSlop(const int32_t _phraseSlop); + + /** + * Gets the default slop for phrases. + */ + int32_t getPhraseSlop() const; + + /** + * Set to true to allow leading wildcard characters. + *

+ * When set, * or ? are allowed as + * the first character of a PrefixQuery and WildcardQuery. + * Note that this can produce very slow + * queries on big indexes. + *

+ * Default: false. + */ + void setAllowLeadingWildcard(const bool _allowLeadingWildcard); + + /** + * @see #setAllowLeadingWildcard(boolean) + */ + bool getAllowLeadingWildcard() const; + + /** + * Set to true to enable position increments in result query. + *

+ * When set, result phrase and multi-phrase queries will + * be aware of position increments. + * Useful when e.g. a StopFilter increases the position increment of + * the token that follows an omitted token. + *

+ * Default: false. + */ + void setEnablePositionIncrements(const bool _enable); + + /** + * @see #setEnablePositionIncrements(boolean) + */ + bool getEnablePositionIncrements() const; + + /** + * Sets the boolean operator of the QueryParser. + * In default mode (OR_OPERATOR) terms without any modifiers + * are considered optional: for example capital of Hungary is equal to + * capital OR of OR Hungary.
+ * In AND_OPERATOR mode terms are considered to be in conjuction: the + * above mentioned query is parsed as capital AND of AND Hungary + */ + void setDefaultOperator(Operator _op); + + /** + * Gets implicit operator setting, which will be either AND_OPERATOR + * or OR_OPERATOR. + */ + Operator getDefaultOperator() const; + + /** + * Whether terms of wildcard, prefix, fuzzy and range queries are to be automatically + * lower-cased or not. Default is true. + */ + void setLowercaseExpandedTerms(const bool _lowercaseExpandedTerms); + + /** + * @see #setLowercaseExpandedTerms(boolean) + */ + bool getLowercaseExpandedTerms() const; + + /** + * By default QueryParser uses new ConstantScoreRangeQuery in preference to RangeQuery + * for range queries. This implementation is generally preferable because it + * a) Runs faster b) Does not have the scarcity of range terms unduly influence score + * c) avoids any "TooManyBooleanClauses" exception. + * However, if your application really needs to use the old-fashioned RangeQuery and the above + * points are not required then set this option to true + * Default is false. + */ + void setUseOldRangeQuery(const bool _useOldRangeQuery); + + /** + * @see #setUseOldRangeQuery(boolean) + */ + bool getUseOldRangeQuery() const; + + /** + * Set locale used by date range parsing. + * + void setLocale(const Locale _locale) { + locale = _locale; + } + + + * Returns current locale, allowing access by subclasses. + * + Locale getLocale() const { + return locale; + } + */ + + /** + * Sets the default date resolution used by RangeQueries for fields for which no + * specific date resolutions has been set. Field specific resolutions can be set + * with {@link #setDateResolution(String, DateTools.Resolution)}. + * + * @param dateResolution the default date resolution to set + */ + void setDateResolution(const CL_NS(document)::DateTools::Resolution _dateResolution); + + /** + * Sets the date resolution used by RangeQueries for a specific field. + * + * @param fieldName field for which the date resolution is to be set + * @param dateResolution date resolution to set + */ + void setDateResolution(const TCHAR* fieldName, const CL_NS(document)::DateTools::Resolution _dateResolution); + + /** + * Returns the date resolution that is used by RangeQueries for the given field. + * Returns null (NO_RESOLUTION), if no default or field specific date resolution has been set + * for the given field. + * + */ + CL_NS(document)::DateTools::Resolution getDateResolution(const TCHAR* fieldName) const; + +protected: + void addClause(std::vector& clauses, int32_t conj, int32_t mods, CL_NS(search)::Query* q); + + /** + * @exception ParseException throw in overridden method to disallow + */ + virtual CL_NS(search)::Query* getFieldQuery(const TCHAR* _field, TCHAR* queryText); + + /** + * Base implementation delegates to {@link #getFieldQuery(String,String)}. + * This method may be overridden, for example, to return + * a SpanNearQuery instead of a PhraseQuery. + * + * @exception ParseException throw in overridden method to disallow + */ + virtual CL_NS(search)::Query* getFieldQuery(const TCHAR* _field, TCHAR* queryText, const int32_t slop); + + /** + * @exception ParseException throw in overridden method to disallow + */ + virtual CL_NS(search)::Query* getRangeQuery(const TCHAR* field, TCHAR* part1, TCHAR* part2, const bool inclusive); + + /** + * 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. + * @param disableCoord true if coord scoring should be disabled. + * + * @return Resulting {@link Query} object. + * @exception ParseException throw in overridden method to disallow + */ + CL_NS(search)::Query* getBooleanQuery(std::vector& clauses, bool disableCoord = false); + + /** + * 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) + *

+ * 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. + *

+ * 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 + * @exception ParseException throw in overridden method 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 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. + *

+ * 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. + *

+ * 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 + * (without trailing '*' character!) + * + * @return Resulting {@link Query} built for the term + * @exception ParseException throw in overridden method to disallow + */ + virtual CL_NS(search)::Query* getPrefixQuery(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 + * @exception ParseException throw in overridden method to disallow + */ + virtual CL_NS(search)::Query* getFuzzyQuery(const TCHAR* _field, TCHAR* termStr, const float_t minSimilarity); + +private: + /** + * Returns a String where the escape char has been + * removed, or kept only once if there was a double escape. + * + * Supports escaped unicode characters, e. g. translates + * A to A. + * + * @memory caller is responsible to free the returned string + * + */ + TCHAR* discardEscapeChar(TCHAR* input, TCHAR* output=NULL); + + /** Returns the numeric value of the hexadecimal character */ + static int32_t hexToInt(TCHAR c); + + struct JJCalls; + +public: + /** + * Returns a String where those characters that QueryParser + * expects to be escaped are escaped by a preceding \. + * + * @memory caller is responsible to free the returned string + */ + static TCHAR* escape(const TCHAR* s); + + // * Query ::= ( Clause )* + // * Clause ::= ["+", "-"] [ ":"] ( | "(" Query ")" ) + int32_t Conjunction(); + + int32_t Modifiers(); + + // This makes sure that there is no garbage after the query string + CL_NS(search)::Query* TopLevelQuery(TCHAR* _field); + + CL_NS(search)::Query* fQuery(TCHAR* _field); + + CL_NS(search)::Query* fClause(TCHAR* _field); + +public: + CL_NS(search)::Query* fTerm(const TCHAR* _field); + +private: + bool jj_2_1(const int32_t xla); + bool jj_3R_2(); + bool jj_3_1(); + bool jj_3R_3(); + +public: + QueryParserTokenManager* token_source; + QueryToken *token, *jj_nt; +private: + QueryToken *_firstToken; + int32_t jj_ntk; + QueryToken *jj_scanpos, *jj_lastpos; + int32_t jj_la; +public: + bool lookingAhead; +private: + bool jj_semLA; + int32_t jj_gen; + int32_t jj_la1[23]; + static const int32_t jj_la1_0[]; + static const int32_t jj_la1_1[]; + JJCalls* jj_2_rtns; + bool jj_rescan; + int32_t jj_gc; + +public: + QueryParser(CharStream* stream); + void ReInit(CharStream* stream); + QueryParser(QueryParserTokenManager* tm); + void ReInit(QueryParserTokenManager* tm); + +private: + void _init(CharStream* stream); + QueryToken* jj_consume_token(const int32_t kind); + bool jj_scan_token(const int32_t kind); + +public: + QueryToken* getNextToken(); + QueryToken* getToken(int32_t index); + +private: + int32_t f_jj_ntk(); + + CL_NS(util)::CLVector< CL_NS(util)::ValueArray*, + CL_NS(util)::Deletor::Object< CL_NS(util)::ValueArray > + >* jj_expentries; + CL_NS(util)::ValueArray* jj_expentry; + int32_t jj_kind; + int32_t jj_lasttokens[100]; + int32_t jj_endpos; + + void jj_add_error_token(const int32_t kind, int32_t pos); + +public: + void generateParseException(); + + //void enable_tracing() {} + //void disable_tracing() {} + +private: + void jj_rescan_token(); + void jj_save(const int32_t index, int32_t xla); + + TCHAR* getParseExceptionMessage(QueryToken* currentToken, + CL_NS(util)::CLVector< CL_NS(util)::ValueArray*, + CL_NS(util)::Deletor::Object< CL_NS(util)::ValueArray > >* expectedTokenSequences, + const TCHAR* tokenImage[]); +}; +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/queryParser/QueryParserConstants.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/queryParser/QueryParserConstants.h new file mode 100644 index 0000000..96accb4 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/queryParser/QueryParserConstants.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. +------------------------------------------------------------------------------*/ +#ifndef _lucene_queryParser_QueryParserConstants_ +#define _lucene_queryParser_QueryParserConstants_ + +CL_NS_DEF(queryParser) + +class CLUCENE_EXPORT QueryParserConstants { +public: + enum Types { + _EOF = 0, + _NUM_CHAR = 1, + _ESCAPED_CHAR = 2, + _TERM_START_CHAR = 3, + _TERM_CHAR = 4, + _WHITESPACE = 5, + AND = 7, + OR = 8, + NOT = 9, + PLUS = 10, + MINUS = 11, + LPAREN = 12, + RPAREN = 13, + COLON = 14, + STAR = 15, + CARAT = 16, + QUOTED = 17, + TERM = 18, + FUZZY_SLOP = 19, + PREFIXTERM = 20, + WILDTERM = 21, + RANGEIN_START = 22, + RANGEEX_START = 23, + NUMBER = 24, + RANGEIN_TO = 25, + RANGEIN_END = 26, + RANGEIN_QUOTED = 27, + RANGEIN_GOOP = 28, + RANGEEX_TO = 29, + RANGEEX_END = 30, + RANGEEX_QUOTED = 31, + RANGEEX_GOOP = 32 + }; + + enum LexStates { + Boost = 0, + RangeEx = 1, + RangeIn = 2, + DEFAULT = 3 + }; + + static const TCHAR* tokenImage[]; + +protected: + /** + * Used to convert raw characters to their escaped version + * when these raw version cannot be used as part of an ASCII + * string literal, while formatting an error message. + * Called internally only by error reporting tools. + */ + static TCHAR* addEscapes(TCHAR* str); +}; +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/queryParser/QueryParserTokenManager.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/queryParser/QueryParserTokenManager.cpp new file mode 100644 index 0000000..9e0c96d --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/queryParser/QueryParserTokenManager.cpp @@ -0,0 +1,1277 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "QueryParserTokenManager.h" +#include "_CharStream.h" +#include "_FastCharStream.h" +#include "QueryToken.h" + +#include "CLucene/util/StringBuffer.h" + +CL_NS_DEF(queryParser) + +const int64_t QueryParserTokenManager::jjbitVec2[]={0x0L, 0x0L, int64_t(_ILONGLONG(0xffffffffffffffff)), int64_t(_ILONGLONG(0xffffffffffffffff))}; +const int64_t QueryParserTokenManager::jjbitVec0[] = { + int64_t(_ILONGLONG(0xfffffffffffffffe)), int64_t(_ILONGLONG(0xffffffffffffffff)), int64_t(_ILONGLONG(0xffffffffffffffff)), int64_t(_ILONGLONG(0xffffffffffffffff)) +}; +const int32_t QueryParserTokenManager::jjnextStates[]={ + 15, 17, 18, 29, 32, 23, 33, 30, 20, 21, 32, 23, 33, 31, 34, 27, + 2, 4, 5, 0, 1 +}; +const TCHAR* QueryParserTokenManager::jjstrLiteralImages[]={ + _T(""), NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, _T("\53"), _T("\55)"), _T("\50)"), + _T("\51"), _T("\72"), _T("\52"), _T("\136"), NULL, NULL, NULL, NULL, NULL, _T("\133"), _T("\173"), NULL, + _T("\124\117"), _T("\135"), NULL, NULL, _T("\124\117"), _T("\175"), NULL, NULL +}; +const TCHAR* QueryParserTokenManager::lexStateNames [] = { + _T("Boost"), + _T("RangeEx"), + _T("RangeIn"), + _T("DEFAULT") +}; +const int32_t QueryParserTokenManager::jjnewLexState [] = { + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, -1, 2, 1, 3, + -1, 3, -1, -1, -1, 3, -1, -1 +}; +const int64_t QueryParserTokenManager::jjtoToken [] = { + _ILONGLONG(0x1ffffff81) +}; +const int64_t QueryParserTokenManager::jjtoSkip [] = { + _ILONGLONG(0x40) +}; + +QueryParserTokenManager::QueryParserTokenManager(CharStream* stream, const int32_t lexState) : + input_stream(stream), curChar(0), curLexState(3), defaultLexState(3),jjnewStateCnt(0),jjround(0), + jjmatchedPos(0),jjmatchedKind(0) +{ + if (lexState > -1) + SwitchTo(lexState); +} +QueryParserTokenManager::~QueryParserTokenManager() +{ + _CLLDELETE(input_stream); +} + +int32_t QueryParserTokenManager::jjStopStringLiteralDfa_3(const int32_t /*pos*/, int64_t /*active0*/) +{ + return -1; +} + +int32_t QueryParserTokenManager::jjStartNfa_3(int32_t pos, int64_t active0) +{ + return jjMoveNfa_3(jjStopStringLiteralDfa_3(pos, active0), pos + 1); +} + +int32_t QueryParserTokenManager::jjStopAtPos(const int32_t pos, const int32_t kind) +{ + jjmatchedKind = kind; + jjmatchedPos = pos; + return pos + 1; +} + +int32_t QueryParserTokenManager::jjStartNfaWithStates_3(int32_t pos, int32_t kind, int32_t state) +{ + jjmatchedKind = kind; + jjmatchedPos = pos; + try { curChar = input_stream->readChar(); } + catch(CLuceneError& e) { + if (e.number() != CL_ERR_IO) + { + throw e; + } + else + return pos + 1; + } + return jjMoveNfa_3(state, pos + 1); +} + +int32_t QueryParserTokenManager::jjMoveStringLiteralDfa0_3() +{ + switch(curChar) + { + case 40: + return jjStopAtPos(0, 12); + case 41: + return jjStopAtPos(0, 13); + case 42: + return jjStartNfaWithStates_3(0, 15, 36); + case 43: + return jjStopAtPos(0, 10); + case 45: + return jjStopAtPos(0, 11); + case 58: + return jjStopAtPos(0, 14); + case 91: + return jjStopAtPos(0, 22); + case 94: + return jjStopAtPos(0, 16); + case 123: + return jjStopAtPos(0, 23); + default : + return jjMoveNfa_3(0, 0); + } +} + +void QueryParserTokenManager::jjCheckNAdd(const int32_t state) +{ + if (jjrounds[state] != jjround) + { + jjstateSet[jjnewStateCnt++] = state; + jjrounds[state] = jjround; + } +} + +void QueryParserTokenManager::jjAddStates(int32_t start, const int32_t end) +{ + do { + jjstateSet[jjnewStateCnt++] = jjnextStates[start]; + } while (start++ != end); +} + +void QueryParserTokenManager::jjCheckNAddTwoStates(const int32_t state1, const int32_t state2) +{ + jjCheckNAdd(state1); + jjCheckNAdd(state2); +} + +void QueryParserTokenManager::jjCheckNAddStates(int32_t start, const int32_t end) +{ + do { + jjCheckNAdd(jjnextStates[start]); + } while (start++ != end); +} + +void QueryParserTokenManager::jjCheckNAddStates(const int32_t start) +{ + jjCheckNAdd(jjnextStates[start]); + jjCheckNAdd(jjnextStates[start + 1]); +} + +int32_t QueryParserTokenManager::jjMoveNfa_3(const int32_t startState, int32_t curPos) +{ + int32_t startsAt = 0; + jjnewStateCnt = 36; + int32_t i = 1; + jjstateSet[0] = startState; + int32_t kind = 0x7fffffff; + for (;;) + { + if (++jjround == 0x7fffffff) + ReInitRounds(); + if (curChar < 64) + { + uint64_t l = (uint64_t) (((uint64_t)1L) << ((int32_t)curChar)); + do + { + switch(jjstateSet[--i]) + { + case 36: + case 25: + if (( _ILONGLONG(0xfbfffcf8ffffd9ff) & l) == 0L) + break; + if (kind > 21) + kind = 21; + jjCheckNAddTwoStates(25, 26); + break; + case 0: + if (( _ILONGLONG(0xfbffd4f8ffffd9ff) & l) != 0L) + { + if (kind > 21) + kind = 21; + jjCheckNAddTwoStates(25, 26); + } + else if ((_ILONGLONG(0x100002600) & l) != 0L) + { + if (kind > 6) + kind = 6; + } + else if (curChar == 34) + jjCheckNAddStates(0, 2); + else if (curChar == 33) + { + if (kind > 9) + kind = 9; + } + if ((_ILONGLONG(0x7bffd0f8ffffd9ff) & l) != 0L) + { + if (kind > 18) + kind = 18; + jjCheckNAddStates(3, 7); + } + else if (curChar == 42) + { + if (kind > 20) + kind = 20; + } + if (curChar == 38) + jjstateSet[jjnewStateCnt++] = 4; + break; + case 4: + if (curChar == 38 && kind > 7) + kind = 7; + break; + case 5: + if (curChar == 38) + jjstateSet[jjnewStateCnt++] = 4; + break; + case 13: + if (curChar == 33 && kind > 9) + kind = 9; + break; + case 14: + case 16: + if (curChar == 34) + jjCheckNAddStates(0, 2); + break; + case 15: + if ((_ILONGLONG(0xfffffffbffffffff) & l) != 0L) + jjCheckNAddStates(0, 2); + break; + case 18: + if (curChar == 34 && kind > 17) + kind = 17; + break; + case 20: + if ((_ILONGLONG(0x3ff000000000000) & l) == 0L) + break; + if (kind > 19) + kind = 19; + jjAddStates(8, 9); + break; + case 21: + if (curChar == 46) + jjCheckNAdd(22); + break; + case 22: + if ((_ILONGLONG(0x3ff000000000000) & l) == 0L) + break; + if (kind > 19) + kind = 19; + jjCheckNAdd(22); + break; + case 23: + if (curChar == 42 && kind > 20) + kind = 20; + break; + case 24: + if ((_ILONGLONG(0xfbffd4f8ffffd9ff) & l) == 0L) + break; + if (kind > 21) + kind = 21; + jjCheckNAddTwoStates(25, 26); + break; + case 27: + if (kind > 21) + kind = 21; + jjCheckNAddTwoStates(25, 26); + break; + case 28: + if ((_ILONGLONG(0x7bffd0f8ffffd9ff) & l) == 0L) + break; + if (kind > 18) + kind = 18; + jjCheckNAddStates(3, 7); + break; + case 29: + if ((_ILONGLONG(0x7bfff8f8ffffd9ff) & l) == 0L) + break; + if (kind > 18) + kind = 18; + jjCheckNAddTwoStates(29, 30); + break; + case 31: + if (kind > 18) + kind = 18; + jjCheckNAddTwoStates(29, 30); + break; + case 32: + if ((_ILONGLONG(0x7bfff8f8ffffd9ff) & l) != 0L) + jjCheckNAddStates(10, 12); + break; + case 34: + jjCheckNAddStates(10, 12); + break; + default : break; + } + } while(i != startsAt); + } + else if (curChar < 128) + { + uint64_t l = ((uint64_t)1L) << (curChar & 63); + + do + { + switch(jjstateSet[--i]) + { + case 36: + if ((_ILONGLONG(0x97ffffff87ffffff) & l) != 0L) + { + if (kind > 21) + kind = 21; + jjCheckNAddTwoStates(25, 26); + } + else if (curChar == 92) + jjCheckNAddTwoStates(27, 27); + break; + case 0: + if ((_ILONGLONG(0x97ffffff87ffffff) & l) != 0L) + { + if (kind > 18) + kind = 18; + jjCheckNAddStates(3, 7); + } + else if (curChar == 92) + jjCheckNAddStates(13, 15); + else if (curChar == 126) + { + if (kind > 19) + kind = 19; + jjstateSet[jjnewStateCnt++] = 20; + } + if ((_ILONGLONG(0x97ffffff87ffffff) & l) != 0L) + { + if (kind > 21) + kind = 21; + jjCheckNAddTwoStates(25, 26); + } + if (curChar == 78) + jjstateSet[jjnewStateCnt++] = 11; + else if (curChar == 124) + jjstateSet[jjnewStateCnt++] = 8; + else if (curChar == 79) + jjstateSet[jjnewStateCnt++] = 6; + else if (curChar == 65) + jjstateSet[jjnewStateCnt++] = 2; + break; + case 1: + if (curChar == 68 && kind > 7) + kind = 7; + break; + case 2: + if (curChar == 78) + jjstateSet[jjnewStateCnt++] = 1; + break; + case 3: + if (curChar == 65) + jjstateSet[jjnewStateCnt++] = 2; + break; + case 6: + if (curChar == 82 && kind > 8) + kind = 8; + break; + case 7: + if (curChar == 79) + jjstateSet[jjnewStateCnt++] = 6; + break; + case 8: + if (curChar == 124 && kind > 8) + kind = 8; + break; + case 9: + if (curChar == 124) + jjstateSet[jjnewStateCnt++] = 8; + break; + case 10: + if (curChar == 84 && kind > 9) + kind = 9; + break; + case 11: + if (curChar == 79) + jjstateSet[jjnewStateCnt++] = 10; + break; + case 12: + if (curChar == 78) + jjstateSet[jjnewStateCnt++] = 11; + break; + case 15: + jjAddStates(0, 2); + break; + case 17: + if (curChar == 92) + jjstateSet[jjnewStateCnt++] = 16; + break; + case 19: + if (curChar != 126) + break; + if (kind > 19) + kind = 19; + jjstateSet[jjnewStateCnt++] = 20; + break; + case 24: + if ((_ILONGLONG(0x97ffffff87ffffff) & l) == 0L) + break; + if (kind > 21) + kind = 21; + jjCheckNAddTwoStates(25, 26); + break; + case 25: + if ((_ILONGLONG(0x97ffffff87ffffff) & l) == 0L) + break; + if (kind > 21) + kind = 21; + jjCheckNAddTwoStates(25, 26); + break; + case 26: + if (curChar == 92) + jjCheckNAddTwoStates(27, 27); + break; + case 27: + if (kind > 21) + kind = 21; + jjCheckNAddTwoStates(25, 26); + break; + case 28: + if ((_ILONGLONG(0x97ffffff87ffffff) & l) == 0L) + break; + if (kind > 18) + kind = 18; + jjCheckNAddStates(3, 7); + break; + case 29: + if ((_ILONGLONG(0x97ffffff87ffffff) & l) == 0L) + break; + if (kind > 18) + kind = 18; + jjCheckNAddTwoStates(29, 30); + break; + case 30: + if (curChar == 92) + jjCheckNAddTwoStates(31, 31); + break; + case 31: + if (kind > 18) + kind = 18; + jjCheckNAddTwoStates(29, 30); + break; + case 32: + if ((_ILONGLONG(0x97ffffff87ffffff) & l) != 0L) + jjCheckNAddStates(10, 12); + break; + case 33: + if (curChar == 92) + jjCheckNAddTwoStates(34, 34); + break; + case 34: + jjCheckNAddStates(10, 12); + break; + case 35: + if (curChar == 92) + jjCheckNAddStates(13, 15); + break; + default : break; + } + } while(i != startsAt); + } + else + { + int32_t hiByte = (int32_t)(curChar >> 8); + int32_t i1 = hiByte >> 6; + uint64_t l1 = ((uint64_t)1L) << (hiByte & 63); + int32_t i2 = (curChar & 0xff) >> 6; + uint64_t l2 = ((uint64_t)1L) << (curChar & 63); + + do + { + switch(jjstateSet[--i]) + { + case 36: + case 25: + case 27: + if (!jjCanMove_0(hiByte, i1, i2, l1, l2)) + break; + if (kind > 21) + kind = 21; + jjCheckNAddTwoStates(25, 26); + break; + case 0: + if (jjCanMove_0(hiByte, i1, i2, l1, l2)) + { + if (kind > 21) + kind = 21; + jjCheckNAddTwoStates(25, 26); + } + if (jjCanMove_0(hiByte, i1, i2, l1, l2)) + { + if (kind > 18) + kind = 18; + jjCheckNAddStates(3, 7); + } + break; + case 15: + if (jjCanMove_0(hiByte, i1, i2, l1, l2)) + jjAddStates(0, 2); + break; + case 24: + if (!jjCanMove_0(hiByte, i1, i2, l1, l2)) + break; + if (kind > 21) + kind = 21; + jjCheckNAddTwoStates(25, 26); + break; + case 28: + if (!jjCanMove_0(hiByte, i1, i2, l1, l2)) + break; + if (kind > 18) + kind = 18; + jjCheckNAddStates(3, 7); + break; + case 29: + case 31: + if (!jjCanMove_0(hiByte, i1, i2, l1, l2)) + break; + if (kind > 18) + kind = 18; + jjCheckNAddTwoStates(29, 30); + break; + case 32: + case 34: + if (jjCanMove_0(hiByte, i1, i2, l1, l2)) + jjCheckNAddStates(10, 12); + break; + default : break; + } + } while(i != startsAt); + } + if (kind != 0x7fffffff) + { + jjmatchedKind = kind; + jjmatchedPos = curPos; + kind = 0x7fffffff; + } + ++curPos; + i = jjnewStateCnt; + jjnewStateCnt = startsAt; + startsAt = 36 - jjnewStateCnt; + if (i == startsAt) + return curPos; + try { curChar = input_stream->readChar(); } + catch(CLuceneError& e) { + if (e.number() != CL_ERR_IO) + { + throw e; + } + else + return curPos; + } + } +} + +int32_t QueryParserTokenManager::jjStopStringLiteralDfa_1(const int32_t pos, const int64_t active0) +{ + switch (pos) + { + case 0: + if ((active0 & 0x20000000L) != 0L) + { + jjmatchedKind = 32; + return 6; + } + return -1; + default : + return -1; + } +} + +int32_t QueryParserTokenManager::jjStartNfa_1(int32_t pos, int64_t active0) +{ + return jjMoveNfa_1(jjStopStringLiteralDfa_1(pos, active0), pos + 1); +} + +int32_t QueryParserTokenManager::jjStartNfaWithStates_1(const int32_t pos, const int32_t kind, const int32_t state) +{ + jjmatchedKind = kind; + jjmatchedPos = pos; + try { curChar = input_stream->readChar(); } + catch(CLuceneError& e) { + if (e.number() != CL_ERR_IO) + { + throw e; + } + else + return pos + 1; + } + return jjMoveNfa_1(state, pos + 1); +} + +int32_t QueryParserTokenManager::jjMoveStringLiteralDfa0_1() +{ + switch(curChar) + { + case 84: + return jjMoveStringLiteralDfa1_1(0x20000000L); + case 125: + return jjStopAtPos(0, 30); + default : + return jjMoveNfa_1(0, 0); + } +} + +int32_t QueryParserTokenManager::jjMoveStringLiteralDfa1_1(int64_t active0) +{ + try { curChar = input_stream->readChar(); } + catch(CLuceneError& e) { + if (e.number() != CL_ERR_IO) + { + throw e; + } + else { + jjStopStringLiteralDfa_1(0, active0); + return 1; + } + } + switch(curChar) + { + case 79: + if ((active0 & 0x20000000L) != 0L) + return jjStartNfaWithStates_1(1, 29, 6); + break; + default : + break; + } + return jjStartNfa_1(0, active0); +} + +int32_t QueryParserTokenManager::jjMoveNfa_1(const int32_t startState, int32_t curPos) +{ + int32_t startsAt = 0; + jjnewStateCnt = 7; + int32_t i = 1; + jjstateSet[0] = startState; + int32_t kind = 0x7fffffff; + for (;;) + { + if (++jjround == 0x7fffffff) + ReInitRounds(); + if (curChar < 64) + { + uint64_t l = ((uint64_t)1L) << curChar; + + do + { + switch(jjstateSet[--i]) + { + case 0: + if ((_ILONGLONG(0xfffffffeffffffff) & l) != 0L) + { + if (kind > 32) + kind = 32; + jjCheckNAdd(6); + } + if ((_ILONGLONG(0x100002600) & l) != 0L) + { + if (kind > 6) + kind = 6; + } + else if (curChar == 34) + jjCheckNAddTwoStates(2, 4); + break; + case 1: + if (curChar == 34) + jjCheckNAddTwoStates(2, 4); + break; + case 2: + if ((_ILONGLONG(0xfffffffbffffffff) & l) != 0L) + jjCheckNAddStates(16, 18); + break; + case 3: + if (curChar == 34) + jjCheckNAddStates(16, 18); + break; + case 5: + if (curChar == 34 && kind > 31) + kind = 31; + break; + case 6: + if ((_ILONGLONG(0xfffffffeffffffff) & l) == 0L) + break; + if (kind > 32) + kind = 32; + jjCheckNAdd(6); + break; + default : break; + } + } while(i != startsAt); + } + else if (curChar < 128) + { + uint64_t l = ((uint64_t)1L) << (curChar & 63); + + do + { + switch(jjstateSet[--i]) + { + case 0: + case 6: + if ((_ILONGLONG(0xdfffffffffffffff) & l) == 0L) + break; + if (kind > 32) + kind = 32; + jjCheckNAdd(6); + break; + case 2: + jjAddStates(16, 18); + break; + case 4: + if (curChar == 92) + jjstateSet[jjnewStateCnt++] = 3; + break; + default : break; + } + } while(i != startsAt); + } + else + { + int32_t hiByte = (int32_t)(curChar >> 8); + int32_t i1 = hiByte >> 6; + uint64_t l1 = ((uint64_t)1L) << (hiByte & 63); + int32_t i2 = (curChar & 0xff) >> 6; + uint64_t l2 = ((uint64_t)1L) << (curChar & 63); + + do + { + switch(jjstateSet[--i]) + { + case 0: + case 6: + if (!jjCanMove_0(hiByte, i1, i2, l1, l2)) + break; + if (kind > 32) + kind = 32; + jjCheckNAdd(6); + break; + case 2: + if (jjCanMove_0(hiByte, i1, i2, l1, l2)) + jjAddStates(16, 18); + break; + default : break; + } + } while(i != startsAt); + } + if (kind != 0x7fffffff) + { + jjmatchedKind = kind; + jjmatchedPos = curPos; + kind = 0x7fffffff; + } + ++curPos; + i = jjnewStateCnt; + jjnewStateCnt = startsAt; + startsAt = 7 - jjnewStateCnt; + if (i == startsAt) + return curPos; + try { curChar = input_stream->readChar(); } + catch(CLuceneError& e) { + if (e.number() != CL_ERR_IO) + { + throw e; + } + else + return curPos; + } + } +} + +int32_t QueryParserTokenManager::jjMoveStringLiteralDfa0_0() +{ + return jjMoveNfa_0(0, 0); +} + +int32_t QueryParserTokenManager::jjMoveNfa_0(const int32_t startState, int32_t curPos) +{ + int32_t startsAt = 0; + jjnewStateCnt = 3; + int32_t i = 1; + jjstateSet[0] = startState; + int32_t kind = 0x7fffffff; + for (;;) + { + if (++jjround == 0x7fffffff) + ReInitRounds(); + if (curChar < 64) + { + uint64_t l = ((uint64_t)1L) << curChar; + + do + { + switch(jjstateSet[--i]) + { + case 0: + if ((_ILONGLONG(0x3ff000000000000) & l) == 0L) + break; + if (kind > 24) + kind = 24; + jjAddStates(19, 20); + break; + case 1: + if (curChar == 46) + jjCheckNAdd(2); + break; + case 2: + if ((_ILONGLONG(0x3ff000000000000) & l) == 0L) + break; + if (kind > 24) + kind = 24; + jjCheckNAdd(2); + break; + default : break; + } + } while(i != startsAt); + } + else if (curChar < 128) + { + /* + uint64_t l = ((uint64_t)1L) << (curChar & 63); + do + { + switch(jjstateSet[--i]) + { + default : break; + } + } while(i != startsAt);*/ + i = startsAt; + } + else + { + /* + int32_t hiByte = (int)(curChar >> 8); + int32_t i1 = hiByte >> 6; + uint64_t l1 = ((uint64_t)1L) << (hiByte & 63); + int32_t i2 = (curChar & 0xff) >> 6; + uint64_t l2 = ((uint64_t)1L) << (curChar & 63); + + do + { + switch(jjstateSet[--i]) + { + default : break; + } + } while(i != startsAt);*/ + i = startsAt; + } + if (kind != 0x7fffffff) + { + jjmatchedKind = kind; + jjmatchedPos = curPos; + kind = 0x7fffffff; + } + ++curPos; + i = jjnewStateCnt; + jjnewStateCnt = startsAt; + startsAt = 3 - jjnewStateCnt; + if (i == startsAt) + return curPos; + try { curChar = input_stream->readChar(); } + catch(CLuceneError& e) { + if (e.number() != CL_ERR_IO) + { + throw e; + } + else + return curPos; + } + } +} + +int32_t QueryParserTokenManager::jjStopStringLiteralDfa_2(const int32_t pos, const int64_t active0) +{ + switch (pos) + { + case 0: + if ((active0 & 0x2000000L) != 0L) + { + jjmatchedKind = 28; + return 6; + } + return -1; + default : + return -1; + } +} + +int32_t QueryParserTokenManager::jjStartNfa_2(int32_t pos, int64_t active0) +{ + return jjMoveNfa_2(jjStopStringLiteralDfa_2(pos, active0), pos + 1); +} + +int32_t QueryParserTokenManager::jjStartNfaWithStates_2(const int32_t pos, const int32_t kind, const int32_t state) +{ + jjmatchedKind = kind; + jjmatchedPos = pos; + try { curChar = input_stream->readChar(); } + catch(CLuceneError& e) { + if (e.number() != CL_ERR_IO) + { + throw e; + } + else + return pos+1; + } + return jjMoveNfa_2(state, pos + 1); +} + +int32_t QueryParserTokenManager::jjMoveStringLiteralDfa0_2() +{ + switch(curChar) + { + case 84: + return jjMoveStringLiteralDfa1_2(0x2000000L); + case 93: + return jjStopAtPos(0, 26); + default : + return jjMoveNfa_2(0, 0); + } +} + +int32_t QueryParserTokenManager::jjMoveStringLiteralDfa1_2(const int64_t active0) +{ + try { curChar = input_stream->readChar(); } + catch(CLuceneError& e) { + if (e.number() != CL_ERR_IO) + { + throw e; + } + else { + jjStopStringLiteralDfa_2(0, active0); + return 1; + } + } + switch(curChar) + { + case 79: + if ((active0 & 0x2000000L) != 0L) + return jjStartNfaWithStates_2(1, 25, 6); + break; + default : + break; + } + return jjStartNfa_2(0, active0); +} + +int32_t QueryParserTokenManager::jjMoveNfa_2(const int32_t startState, int32_t curPos) +{ + int32_t startsAt = 0; + jjnewStateCnt = 7; + int32_t i = 1; + jjstateSet[0] = startState; + int32_t kind = 0x7fffffff; + for (;;) + { + if (++jjround == 0x7fffffff) + ReInitRounds(); + if (curChar < 64) + { + uint64_t l = ((uint64_t)1L) << curChar; + + do + { + switch(jjstateSet[--i]) + { + case 0: + if ((_ILONGLONG(0xfffffffeffffffff) & l) != 0L) + { + if (kind > 28) + kind = 28; + jjCheckNAdd(6); + } + if ((_ILONGLONG(0x100002600) & l) != 0L) + { + if (kind > 6) + kind = 6; + } + else if (curChar == 34) + jjCheckNAddTwoStates(2, 4); + break; + case 1: + if (curChar == 34) + jjCheckNAddTwoStates(2, 4); + break; + case 2: + if ((_ILONGLONG(0xfffffffbffffffff) & l) != 0L) + jjCheckNAddStates(16, 18); + break; + case 3: + if (curChar == 34) + jjCheckNAddStates(16, 18); + break; + case 5: + if (curChar == 34 && kind > 27) + kind = 27; + break; + case 6: + if ((_ILONGLONG(0xfffffffeffffffff) & l) == 0L) + break; + if (kind > 28) + kind = 28; + jjCheckNAdd(6); + break; + default : break; + } + } while(i != startsAt); + } + else if (curChar < 128) + { + uint64_t l = ((uint64_t)1L) << (curChar & 63); + + do + { + switch(jjstateSet[--i]) + { + case 0: + case 6: + if ((_ILONGLONG(0xffffffffdfffffff) & l) == 0L) + break; + if (kind > 28) + kind = 28; + jjCheckNAdd(6); + break; + case 2: + jjAddStates(16, 18); + break; + case 4: + if (curChar == 92) + jjstateSet[jjnewStateCnt++] = 3; + break; + default : break; + } + } while(i != startsAt); + } + else + { + int32_t hiByte = (int32_t)(curChar >> 8); + int32_t i1 = hiByte >> 6; + uint64_t l1 = ((uint64_t)1L) << (hiByte & 63); + int32_t i2 = (curChar & 0xff) >> 6; + uint64_t l2 = ((uint64_t)1L) << (curChar & 63); + + do + { + switch(jjstateSet[--i]) + { + case 0: + case 6: + if (!jjCanMove_0(hiByte, i1, i2, l1, l2)) + break; + if (kind > 28) + kind = 28; + jjCheckNAdd(6); + break; + case 2: + if (jjCanMove_0(hiByte, i1, i2, l1, l2)) + jjAddStates(16, 18); + break; + default : break; + } + } while(i != startsAt); + } + if (kind != 0x7fffffff) + { + jjmatchedKind = kind; + jjmatchedPos = curPos; + kind = 0x7fffffff; + } + ++curPos; + i = jjnewStateCnt; + jjnewStateCnt = startsAt; + startsAt = 7 - jjnewStateCnt; + if (i == startsAt) + return curPos; + try { curChar = input_stream->readChar(); } + catch(CLuceneError& e) { + if (e.number() != CL_ERR_IO) + { + throw e; + } + else + return curPos; + } + } +} + +/*static*/ +bool QueryParserTokenManager::jjCanMove_0(const int32_t hiByte, const int32_t i1, const int32_t i2, const int64_t l1, const int64_t l2) +{ + switch(hiByte) + { + case 0: + return ((jjbitVec2[i2] & l2) != 0L); + default : + if ((jjbitVec0[i1] & l1) != 0L) + return true; + return false; + } +} + +void QueryParserTokenManager::ReInit(CharStream* stream) +{ + jjmatchedPos = jjnewStateCnt = 0; + curLexState = defaultLexState; + _CLLDELETE(input_stream); + input_stream = stream; + ReInitRounds(); +} + +void QueryParserTokenManager::ReInitRounds() +{ + jjround = 0x80000001; + for (int32_t i = 36; i-- > 0;) + jjrounds[i] = 0x80000000; +} + +void QueryParserTokenManager::ReInit(CharStream* stream, const int32_t lexState) +{ + ReInit(stream); + SwitchTo(lexState); +} + +void QueryParserTokenManager::SwitchTo(const int32_t lexState) +{ + if (lexState >= 4 || lexState < 0) { + TCHAR err[CL_MAX_PATH]; + // TODO: use TokenMgrError::INVALID_LEXICAL_STATE? + _sntprintf(err,CL_MAX_PATH,_T("Error: Ignoring invalid lexical state : %d. State unchanged."), lexState); + _CLTHROWA(CL_ERR_TokenMgr,err); + } + else + curLexState = lexState; +} + +QueryToken* QueryParserTokenManager::jjFillToken(){ + QueryToken* t = QueryToken::newToken(jjmatchedKind); + t->kind = jjmatchedKind; + const TCHAR* im = jjstrLiteralImages[jjmatchedKind]; + t->image = (im == NULL) ? input_stream->GetImage() : stringDuplicate(im); + t->beginLine = input_stream->getBeginLine(); + t->beginColumn = input_stream->getBeginColumn(); + t->endLine = input_stream->getEndLine(); + t->endColumn = input_stream->getEndColumn(); + return t; +} + +QueryToken* QueryParserTokenManager::getNextToken() { + QueryToken* matchedToken = NULL; + int32_t curPos = 0; + + for (;;) { + try + { + curChar = input_stream->BeginToken(); + } + _CLCATCH_ERR_ELSE(CL_ERR_IO, { /*else*/ + jjmatchedKind = 0; + matchedToken = jjFillToken(); + return matchedToken; + }); + + switch(curLexState){ + case 0: + jjmatchedKind = 0x7fffffff; + jjmatchedPos = 0; + curPos = jjMoveStringLiteralDfa0_0(); + break; + case 1: + jjmatchedKind = 0x7fffffff; + jjmatchedPos = 0; + curPos = jjMoveStringLiteralDfa0_1(); + break; + case 2: + jjmatchedKind = 0x7fffffff; + jjmatchedPos = 0; + curPos = jjMoveStringLiteralDfa0_2(); + break; + case 3: + jjmatchedKind = 0x7fffffff; + jjmatchedPos = 0; + curPos = jjMoveStringLiteralDfa0_3(); + break; + } + if (jjmatchedKind != 0x7fffffff){ + if (jjmatchedPos + 1 < curPos) + input_stream->backup(curPos - jjmatchedPos - 1); + if ((jjtoToken[jjmatchedKind >> 6] & ((uint64_t)(1L << (jjmatchedKind & 63)))) != (uint64_t)0L) + { + matchedToken = jjFillToken(); + if (jjnewLexState[jjmatchedKind] != -1) + curLexState = jjnewLexState[jjmatchedKind]; + return matchedToken; + } + else + { + if (jjnewLexState[jjmatchedKind] != -1) + curLexState = jjnewLexState[jjmatchedKind]; + continue; + } + } + int32_t error_line = input_stream->getEndLine(); + int32_t error_column = input_stream->getEndColumn(); + TCHAR* error_after = NULL; + bool EOFSeen = false; + try { input_stream->readChar(); input_stream->backup(1); } + _CLCATCH_ERR_ELSE(CL_ERR_IO, { /*else*/ + EOFSeen = true; + if (curPos <= 1) { + error_after = _CL_NEWARRAY(TCHAR,2); + error_after[0] = _T(' '); + error_after[1] = 0; + } else { + error_after = input_stream->GetImage(); + } + if (curChar == _T('\n') || curChar == _T('\r')) { + error_line++; + error_column = 0; + } + else + error_column++; + }); + if (!EOFSeen) { + input_stream->backup(1); + if (curPos <= 1) { + error_after = _CL_NEWARRAY(TCHAR,2); + error_after[0] = _T(' '); + error_after[1] = 0; + } else { + error_after = input_stream->GetImage(); + } + } + // TODO: TokenMgrError.LEXICAL_ERROR ? + TCHAR* err = getLexicalError(EOFSeen, curLexState, error_line, error_column, error_after, curChar); + _CLDELETE_LCARRAY(error_after); + _CLTHROWT_DEL(CL_ERR_TokenMgr,err); + } +} + +TCHAR* QueryParserTokenManager::getLexicalError(bool EOFSeen, int32_t /*lexState*/, int32_t errorLine, + int32_t errorColumn, TCHAR* errorAfter, TCHAR curChar) +{ + TCHAR* tmp = NULL; + CL_NS(util)::StringBuffer sb(100); + sb.append(_T("Lexical error at line ")); + sb.appendInt(errorLine); + sb.append(_T(", column ")); + sb.appendInt(errorColumn); + sb.append(_T(". Encountered: ")); + if (EOFSeen){ + sb.append(_T(" ")); + }else{ + sb.appendChar(_T('"')); + sb.appendChar(curChar); // TODO: addEscapes ? + sb.appendChar(_T('"')); + sb.append(_T(" (")); + sb.appendInt((int32_t)curChar); + sb.append(_T("), ")); + } + sb.append(_T("after : \"")); + + tmp = addEscapes(errorAfter); + sb.append(tmp); + _CLDELETE_LCARRAY(tmp); + + sb.appendChar(_T('"')); + return sb.giveBuffer(); +} + +CL_NS_END // QueryParserTokenManager diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/queryParser/QueryParserTokenManager.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/queryParser/QueryParserTokenManager.h new file mode 100644 index 0000000..834c324 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/queryParser/QueryParserTokenManager.h @@ -0,0 +1,112 @@ +/*------------------------------------------------------------------------------ +* 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_QueryParserTokenManager_ +#define _lucene_queryParser_QueryParserTokenManager_ + +#include "QueryParserConstants.h" + +CL_NS_DEF(queryParser) + +class CharStream; +class QueryToken; + +class CLUCENE_EXPORT QueryParserTokenManager: public virtual QueryParserConstants +{ +public: + // TODO: PrintStream debugStream = System.out; + // TODO: setDebugStream(PrintStream ds) { debugStream = ds; } + +private: + int32_t jjStopStringLiteralDfa_3(const int32_t pos, int64_t active0); + int32_t jjStartNfa_3(int32_t pos, int64_t active0); + int32_t jjStopAtPos(const int32_t pos, const int32_t kind); + + int32_t jjStartNfaWithStates_3(int32_t pos, int32_t kind, int32_t state); + + int32_t jjMoveStringLiteralDfa0_3(); + + void jjCheckNAdd(const int32_t state); + void jjAddStates(int32_t start, const int32_t end); + void jjCheckNAddTwoStates(const int32_t state1, const int32_t state2); + void jjCheckNAddStates(int32_t start, const int32_t end); + void jjCheckNAddStates(const int32_t start); + + static const int64_t jjbitVec0[]; + static const int64_t jjbitVec2[]; + + int32_t jjMoveNfa_3(const int32_t startState, int32_t curPos); + + int32_t jjStopStringLiteralDfa_1(const int32_t pos, const int64_t active0); + + int32_t jjStartNfa_1(int32_t pos, int64_t active0); + + int32_t jjStartNfaWithStates_1(const int32_t pos, const int32_t kind, const int32_t state); + + int32_t jjMoveStringLiteralDfa0_1(); + int32_t jjMoveStringLiteralDfa1_1(int64_t active0); + int32_t jjMoveNfa_1(const int32_t startState, int32_t curPos); + int32_t jjMoveStringLiteralDfa0_0(); + + int32_t jjMoveNfa_0(const int32_t startState, int32_t curPos); + int32_t jjStopStringLiteralDfa_2(const int32_t pos, const int64_t active0); + int32_t jjStartNfa_2(int32_t pos, int64_t active0); + + int32_t jjStartNfaWithStates_2(const int32_t pos, const int32_t kind, const int32_t state); + + int32_t jjMoveStringLiteralDfa0_2(); + int32_t jjMoveStringLiteralDfa1_2(const int64_t active0); + + int32_t jjMoveNfa_2(const int32_t startState, int32_t curPos); + + static const int32_t jjnextStates[]; + + static bool jjCanMove_0(const int32_t hiByte, const int32_t i1, const int32_t i2, const int64_t l1, + const int64_t l2); + +public: + static const TCHAR* jjstrLiteralImages []; + static const TCHAR* lexStateNames []; + static const int32_t jjnewLexState []; + static const int64_t jjtoToken []; + static const int64_t jjtoSkip []; +protected: + CharStream* input_stream; +private: + int32_t jjrounds[36]; + int32_t jjstateSet[72]; +protected: + TCHAR curChar; +public: + QueryParserTokenManager(CharStream* stream, const int32_t lexState = -1); + virtual ~QueryParserTokenManager(); + + void ReInit(CharStream* stream); +private: + void ReInitRounds(); +public: + void ReInit(CharStream* stream, const int32_t lexState); + void SwitchTo(const int32_t lexState); + +protected: + QueryToken* jjFillToken(); + + int32_t curLexState; + int32_t defaultLexState; + int32_t jjnewStateCnt; + uint32_t jjround; + int32_t jjmatchedPos; + int32_t jjmatchedKind; + +public: + QueryToken* getNextToken(); + +private: + static TCHAR* getLexicalError(bool EOFSeen, int32_t lexState, int32_t errorLine, int32_t errorColumn, + TCHAR* errorAfter, TCHAR curChar); +}; +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/queryParser/QueryToken.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/queryParser/QueryToken.cpp new file mode 100644 index 0000000..d16f1cd --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/queryParser/QueryToken.cpp @@ -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. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "QueryToken.h" + +CL_NS_DEF(queryParser) + + +QueryToken::QueryToken() : + kind(0), + beginLine(0), + beginColumn(0), + endLine(0), + endColumn(0), + image(NULL), + next(NULL), + specialToken(NULL) +{ +} + +QueryToken::~QueryToken() +{ +#ifndef LUCENE_TOKEN_WORD_LENGTH + _CLDELETE_LCARRAY( image ); +#endif +} + +TCHAR* QueryToken::toString() const +{ +#ifndef LUCENE_TOKEN_WORD_LENGTH + return image; +#else + return STRDUP_TtoT(image); +#endif +} + +/*static*/ +QueryToken* QueryToken::newToken(const int32_t /*ofKind*/) +{ + //switch(ofKind) + //{ + //default : return _CLNEW Token(); + //} + return _CLNEW QueryToken(); +} + +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/queryParser/QueryToken.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/queryParser/QueryToken.h new file mode 100644 index 0000000..5e3c91e --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/queryParser/QueryToken.h @@ -0,0 +1,94 @@ +/*------------------------------------------------------------------------------ +* 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_Token_ +#define _lucene_queryParser_Token_ + +CL_NS_DEF(queryParser) + +/** + * Describes the input token stream. + */ +class CLUCENE_EXPORT QueryToken{ +public: + QueryToken(); + ~QueryToken(); + + /** + * An integer that describes the kind of this token. This numbering + * system is determined by JavaCCParser, and a table of these numbers is + * stored in the file ...Constants.java. + */ + int32_t kind; + + /** + * beginLine and beginColumn describe the position of the first character + * of this token; endLine and endColumn describe the position of the + * last character of this token. + */ + int32_t beginLine, beginColumn, endLine, endColumn; + + /** + * The string image of the token. + */ + TCHAR* image; + + /* + TODO: If LUCENE_TOKEN_WORD_LENGTH is still necessary, use the #defines below + #ifdef LUCENE_TOKEN_WORD_LENGTH + TCHAR image[LUCENE_TOKEN_WORD_LENGTH+1]; + #else + TCHAR* image; + #endif + */ + + /** + * A reference to the next regular (non-special) token from the input + * stream. If this is the last token from the input stream, or if the + * token manager has not read tokens beyond this one, this field is + * set to null. This is true only if this token is also a regular + * token. Otherwise, see below for a description of the contents of + * this field. + */ + QueryToken* next; + + /** + * This field is used to access special tokens that occur prior to this + * token, but after the immediately preceding regular (non-special) token. + * If there are no such special tokens, this field is set to null. + * When there are more than one such special token, this field refers + * to the last of these special tokens, which in turn refers to the next + * previous special token through its specialToken field, and so on + * until the first special token (whose specialToken field is null). + * The next fields of special tokens refer to other special tokens that + * immediately follow it (without an intervening regular token). If there + * is no such token, this field is null. + */ + QueryToken* specialToken; + + /** + * Returns the image. + */ + TCHAR* toString() const; + + /** + * Returns a new Token object, by default. However, if you want, you + * can create and return subclass objects based on the value of ofKind. + * Simply add the cases to the switch for all those special cases. + * For example, if you have a subclass of Token called IDToken that + * you want to create if ofKind is ID, simlpy add something like : + * + * case MyParserConstants.ID : return new IDToken(); + * + * to the following switch statement. Then you can cast matchedToken + * variable to the appropriate type and use it in your lexical actions. + */ + static QueryToken* newToken(const int32_t ofKind); + +}; +CL_NS_END +#endif + diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/queryParser/_CharStream.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/queryParser/_CharStream.h new file mode 100644 index 0000000..74bfbba --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/queryParser/_CharStream.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_queryParser_CharStream_ +#define _lucene_queryParser_CharStream_ + +CL_NS_DEF(queryParser) + +/** + * This interface describes a character stream that maintains line and + * column number positions of the characters. It also has the capability + * to backup the stream to some extent. An implementation of this + * interface is used in the TokenManager implementation generated by + * JavaCCParser. + * + * All the methods except backup can be implemented in any fashion. backup + * needs to be implemented correctly for the correct operation of the lexer. + * Rest of the methods are all used to get information like line number, + * column number and the String that constitutes a token and are not used + * by the lexer. Hence their implementation won't affect the generated lexer's + * operation. + */ +class CharStream :LUCENE_BASE { +public: + /** + * Returns the next character from the selected input. The method + * of selecting the input is the responsibility of the class + * implementing this interface. Can throw any java.io.IOException. + */ + virtual TCHAR readChar() = 0; + + /** + * Returns the column position of the character last read. + * @deprecated + * @see #getEndColumn + */ + virtual int32_t getColumn() const = 0; + + /** + * Returns the line number of the character last read. + * @deprecated + * @see #getEndLine + */ + virtual int32_t getLine() const = 0; + + /** + * Returns the column number of the last character for current token (being + * matched after the last call to BeginTOken). + */ + virtual int32_t getEndColumn() const = 0; + + /** + * Returns the line number of the last character for current token (being + * matched after the last call to BeginTOken). + */ + virtual int32_t getEndLine() const = 0; + + /** + * Returns the column number of the first character for current token (being + * matched after the last call to BeginTOken). + */ + virtual int32_t getBeginColumn() const = 0; + + /** + * Returns the line number of the first character for current token (being + * matched after the last call to BeginTOken). + */ + virtual int32_t getBeginLine() const = 0; + + /** + * Backs up the input stream by amount steps. Lexer calls this method if it + * had already read some characters, but could not use them to match a + * (longer) token. So, they will be used again as the prefix of the next + * token and it is the implemetation's responsibility to do this right. + */ + virtual void backup(const int32_t amount) = 0; + + /** + * Returns the next character that marks the beginning of the next token. + * All characters must remain in the buffer between two successive calls + * to this method to implement backup correctly. + */ + virtual TCHAR BeginToken() = 0; + + /** + * Returns a string made up of characters from the marked token beginning + * to the current buffer position. Implementations have the choice of returning + * anything that they want to. For example, for efficiency, one might decide + * to just return null, which is a valid implementation. + */ + virtual TCHAR* GetImage() = 0; + + /** + * Returns an array of characters that make up the suffix of length 'len' for + * the currently matched token. This is used to build up the matched string + * for use in actions in the case of MORE. A simple and inefficient + * implementation of this is as follows : + * + * { + * String t = GetImage(); + * return t.substring(t.length() - len, t.length()).toCharArray(); + * } + */ + virtual TCHAR* GetSuffix(const int32_t len) = 0; + + /** + * The lexer calls this function to indicate that it is done with the stream + * and hence implementations can free any resources held by this class. + * Again, the body of this function can be just empty and it will not + * affect the lexer's operation. + */ + virtual void Done() = 0; + + //CharStream(){}; + //virtual ~CharStream(){}; +}; +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/queryParser/_FastCharStream.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/queryParser/_FastCharStream.h new file mode 100644 index 0000000..40d9fdc --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/queryParser/_FastCharStream.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_queryParser_FastCharStream_ +#define _lucene_queryParser_FastCharStream_ + +CL_CLASS_DEF(util,Reader) + +CL_NS_DEF(queryParser) + +class CharStream; + +/** An efficient implementation of JavaCC's CharStream interface.

Note that + * this does not do line-number counting, but instead keeps track of the + * character position of the token in the input, as required by Lucene's {@link + * org.apache.lucene.analysis.Token} API. */ +class FastCharStream : public CharStream { +protected: + TCHAR* buffer; + size_t _bufferSize; // To keep track of the buffer size in memory + + int32_t bufferLength; // end of valid chars + int32_t bufferPosition; // next char to read + + int32_t tokenStart; // offset in buffer + int32_t bufferStart; // position in file of buffer + + CL_NS(util)::Reader* input; // source of chars + bool _ownsReader; // Should we delete the reader once done with it, or in destructor? + + +public: + /** Constructs from a Reader. */ + FastCharStream(CL_NS(util)::Reader* r, bool ownsReader = false); + virtual ~FastCharStream(); + + TCHAR readChar(); + +private: + void refill(); + +public: + void backup(const int32_t amount); + + /*@memory Caller is responsible for deleting the returned string */ + TCHAR* GetImage(); + + /*@memory Caller is responsible for deleting the returned string */ + TCHAR* GetSuffix(const int32_t len); + + void Done(); + + TCHAR BeginToken(); + + int32_t getColumn() const; + int32_t getLine() const; + int32_t getEndColumn() const; + int32_t getEndLine() const; + int32_t getBeginColumn() const; + int32_t getBeginLine() const; +}; +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/BooleanClause.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/BooleanClause.h new file mode 100644 index 0000000..4071f35 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/BooleanClause.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. +------------------------------------------------------------------------------*/ +#ifndef _lucene_search_BooleanClause_ +#define _lucene_search_BooleanClause_ + +CL_CLASS_DEF(util,StringBuffer) +CL_CLASS_DEF(search,Query) + +CL_NS_DEF(search) + +// A clause in a BooleanQuery. +class CLUCENE_EXPORT BooleanClause:LUCENE_BASE { +public: + /** Specifies how clauses are to occur in matching documents. */ + enum Occur { + /** Use this operator for clauses that must appear in the matching documents. */ + MUST=1, + + /** Use this operator for clauses that should appear in the + * matching documents. For a BooleanQuery with no MUST + * clauses one or more SHOULD clauses must match a document + * for the BooleanQuery to match. + * @see BooleanQuery#setMinimumNumberShouldMatch + */ + SHOULD=2, + + /** Use this operator for clauses that must not appear in the matching documents. + * Note that it is not possible to search for queries that only consist + * of a MUST_NOT clause. */ + MUST_NOT=4 + }; +private: + /** The query whose matching documents are combined by the boolean query. + * @deprecated use {@link #setQuery(Query)} instead */ + Query* query; + + Occur occur; + + /* Middle layer for the Occur enum; will be removed soon enough. */ + void setFields(Occur occur); +public: + bool deleteQuery; + + + int32_t getClauseCount(); + + + /** Constructs a BooleanClause with query q, required + * r and prohibited p. + * @deprecated use BooleanClause(Query, Occur) instead + *

    + *
  • For BooleanClause(query, true, false) use BooleanClause(query, BooleanClause.Occur.MUST) + *
  • For BooleanClause(query, false, false) use BooleanClause(query, BooleanClause.Occur.SHOULD) + *
  • For BooleanClause(query, false, true) use BooleanClause(query, BooleanClause.Occur.MUST_NOT) + *
+ */ + BooleanClause(Query* q, const bool DeleteQuery,const bool req, const bool p); + + BooleanClause(const BooleanClause& clone); + + /** Constructs a BooleanClause. + */ + BooleanClause(Query* q, const bool DeleteQuery, Occur o); + + + BooleanClause* clone() const; + + ~BooleanClause(); + + + /** Returns true if o is equal to this. */ + bool equals(const BooleanClause* other) const; + + /** Returns a hash code value for this object.*/ + size_t hashCode() const; + + Occur getOccur() const; + void setOccur(Occur o); + + Query* getQuery() const; + void setQuery(Query* q); + + bool isProhibited() const; + bool isRequired() const; + + TCHAR* toString() const; + +public: // TODO: Make private and remove for CLucene 2.3.2 + /** If true, documents documents which do not + match this sub-query will not match the boolean query. + @deprecated use {@link #setOccur(BooleanClause.Occur)} instead */ + bool required; + + /** If true, documents documents which do + match this sub-query will not match the boolean query. + @deprecated use {@link #setOccur(BooleanClause.Occur)} instead */ + bool prohibited; +}; + + +CL_NS_END +#endif + diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/BooleanQuery.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/BooleanQuery.cpp new file mode 100644 index 0000000..29a1ef7 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/BooleanQuery.cpp @@ -0,0 +1,561 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.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 "_ConjunctionScorer.h" +#include "Similarity.h" +#include "Explanation.h" +#include "_BooleanScorer2.h" +#include "Scorer.h" + +#include + +CL_NS_USE(index) +CL_NS_USE(util) +CL_NS_DEF(search) + + class BooleanClause_Compare:public CL_NS_STD(binary_function) + { + public: + bool operator()( const BooleanClause* val1, const BooleanClause* val2 ) const { + return val1->equals(val2); + } + }; + + + class BooleanWeight: public Weight { + protected: + Searcher* searcher; + Similarity* similarity; + CL_NS(util)::CLVector > weights; + BooleanQuery::ClausesType* clauses; + BooleanQuery* parentQuery; + public: + BooleanWeight(Searcher* searcher, + CL_NS(util)::CLVector >* clauses, + BooleanQuery* parentQuery); + virtual ~BooleanWeight(); + Query* getQuery(); + float_t getValue(); + float_t sumOfSquaredWeights(); + void normalize(float_t norm); + Scorer* scorer(CL_NS(index)::IndexReader* reader); + Explanation* explain(CL_NS(index)::IndexReader* reader, int32_t doc); + };// BooleanWeight + + + BooleanQuery::BooleanQuery( bool disableCoord ): + clauses(_CLNEW BooleanQuery::ClausesType(true)) + { + this->minNrShouldMatch = 0; + this->disableCoord = disableCoord; + } + + Weight* BooleanQuery::_createWeight(Searcher* searcher) { + return _CLNEW BooleanWeight(searcher, clauses,this); + } + + BooleanQuery::BooleanQuery(const BooleanQuery& clone): + Query(clone), + clauses(_CLNEW ClausesType(true)), + disableCoord(clone.disableCoord) + { + minNrShouldMatch = clone.minNrShouldMatch; + for ( uint32_t i=0;isize();i++ ){ + BooleanClause* clause = (*clone.clauses)[i]->clone(); + clause->deleteQuery=true; + add(clause); + } + } + + BooleanQuery::~BooleanQuery(){ + clauses->clear(); + _CLDELETE(clauses); + } + + 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 char* BooleanQuery::getObjectName() const{ + return getClassName(); + } + const char* BooleanQuery::getClassName(){ + return "BooleanQuery"; + } + + /** + * Default value is 1024. Use org.apache.lucene.maxClauseCount + * system property to override. + */ + size_t BooleanQuery::maxClauseCount = LUCENE_BOOLEANQUERY_MAXCLAUSECOUNT; + size_t BooleanQuery::getMaxClauseCount(){ + return maxClauseCount; + } + + void BooleanQuery::setMaxClauseCount(const size_t maxClauseCount){ + if (maxClauseCount < 1) + _CLTHROWA(CL_ERR_IllegalArgument, "maxClauseCount must be >= 1"); + BooleanQuery::maxClauseCount = maxClauseCount; + } + + Similarity* BooleanQuery::getSimilarity( Searcher* searcher ) { + + Similarity* result = Query::getSimilarity( searcher ); + return result; + + } + + 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(Query* query, const bool deleteQuery, BooleanClause::Occur occur) { + BooleanClause* bc = _CLNEW BooleanClause(query,deleteQuery,occur); + 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); + } + + int32_t BooleanQuery::getMinNrShouldMatch(){ + return minNrShouldMatch; + } + bool BooleanQuery::getUseScorer14() { + return getAllowDocsOutOfOrder(); + } + + bool BooleanQuery::allowDocsOutOfOrder = false; + + void BooleanQuery::setUseScorer14( bool use14 ) { + setAllowDocsOutOfOrder(use14); + } + + void BooleanQuery::setAllowDocsOutOfOrder(bool allow) { + allowDocsOutOfOrder = allow; + } + + bool BooleanQuery::getAllowDocsOutOfOrder() { + return allowDocsOutOfOrder; + } + + + size_t BooleanQuery::getClauseCount() const { + return (int32_t) clauses->size(); + } + + TCHAR* BooleanQuery::toString(const TCHAR* field) const{ + StringBuffer buffer; + bool needParens=(getBoost() != 1.0) /* TODO: || (getMinimumNumberShouldMatch()>0)*/ ; + if (needParens) { + 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->getQuery()->instanceOf(BooleanQuery::getClassName()) ) { // wrap sub-bools in parens + buffer.append(_T("(")); + + TCHAR* buf = c->getQuery()->toString(field); + buffer.append(buf); + _CLDELETE_CARRAY( buf ); + + buffer.append(_T(")")); + } else { + TCHAR* buf = c->getQuery()->toString(field); + buffer.append(buf); + _CLDELETE_CARRAY( buf ); + } + if (i != clauses->size()-1) + buffer.append(_T(" ")); + } + + if (needParens) { + buffer.append(_T(")")); + } + + if (getBoost() != 1.0) { + buffer.appendChar(_T('^')); + buffer.appendFloat(getBoost(),1); + } + return buffer.toString(); + } + + bool BooleanQuery::isCoordDisabled() { return disableCoord; } + void BooleanQuery::setCoordDisabled( bool disableCoord ) { this->disableCoord = disableCoord; } + + 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;isize() == 1) { // optimize 1-clause queries + BooleanClause* c = (*clauses)[0]; + if (!c->prohibited) { // just return clause + Query* query = c->getQuery()->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->getQuery() ) + 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->getQuery()->rewrite(reader); + if (query != c->getQuery()) { // clause rewrote: must clone + if (clone == NULL) + clone = (BooleanQuery*)this->clone(); + clone->clauses->set (i, _CLNEW BooleanClause(query, true, c->getOccur())); + } + } + if (clone != NULL) { + return clone; // some clauses rewrote + } else + return this; // no clauses rewrote + } + + void BooleanQuery::extractTerms( TermSet * termset ) const + { + for (size_t i = 0 ; i < clauses->size(); i++) + { + BooleanClause* clause = (*clauses)[i]; + clause->getQuery()->extractTerms( termset ); + } + } + + Query* BooleanQuery::clone() const{ + BooleanQuery* clone = _CLNEW BooleanQuery(*this); + return clone; + } + + /** Returns true iff o 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 comp; + ret = comp.equals(this->clauses,other->clauses); + } + return ret; + } + + + float_t BooleanWeight::getValue() { return parentQuery->getBoost(); } + Query* BooleanWeight::getQuery() { return (Query*)parentQuery; } + + BooleanWeight::BooleanWeight(Searcher* searcher, + CLVector >* clauses, BooleanQuery* parentQuery) + { + this->searcher = searcher; + this->similarity = parentQuery->getSimilarity( searcher ); + this->parentQuery = parentQuery; + this->clauses = clauses; + for (uint32_t i = 0 ; i < clauses->size(); i++) { + weights.push_back((*clauses)[i]->getQuery()->_createWeight(searcher)); + } + } + BooleanWeight::~BooleanWeight(){ + this->weights.clear(); + } + + float_t BooleanWeight::sumOfSquaredWeights() { + float_t sum = 0.0f; + for (uint32_t i = 0 ; i < weights.size(); i++) { + BooleanClause* c = (*clauses)[i]; + Weight* w = weights[i]; + float_t s = w->sumOfSquaredWeights(); // sum sub weights + if (!c->isProhibited()) + // only add to sum for non-prohibited clauses + sum += s; + } + sum *= parentQuery->getBoost() * parentQuery->getBoost(); // boost each sub-weight + return sum ; + } + + void BooleanWeight::normalize(float_t norm) { + norm *= parentQuery->getBoost(); // incorporate boost + for (uint32_t i = 0 ; i < weights.size(); i++) { + Weight* w = weights[i]; + // normalize all clauses, (even if prohibited in case of side affects) + w->normalize(norm); + } + } + + Scorer* BooleanWeight::scorer(IndexReader* reader){ + BooleanScorer2* result = _CLNEW BooleanScorer2(similarity, + parentQuery->minNrShouldMatch, + parentQuery->allowDocsOutOfOrder); + + for (size_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->isRequired(), c->isProhibited()); + else if (c->isRequired()){ + _CLDELETE(result); + return NULL; + } + } + + return result; + + } + + Explanation* BooleanWeight::explain(IndexReader* reader, int32_t doc){ + const int32_t minShouldMatch = parentQuery->getMinNrShouldMatch(); + ComplexExplanation* sumExpl = _CLNEW ComplexExplanation(); + sumExpl->setDescription(_T("sum of:")); + int32_t coord = 0; + int32_t maxCoord = 0; + float_t sum = 0.0f; + bool fail = false; + int32_t shouldMatchCount = 0; + for (size_t i = 0 ; i < weights.size(); i++) { + BooleanClause* c = (*clauses)[i]; + Weight* w = weights[i]; + Explanation* e = w->explain(reader, doc); + if (!c->isProhibited()) maxCoord++; + if (e->isMatch()){ + if (!c->isProhibited()) { + sumExpl->addDetail(e); + sum += e->getValue(); + coord++; + } else { + StringBuffer buf(100); + buf.append(_T("match on prohibited clause (")); + TCHAR* tmp = c->getQuery()->toString(); + buf.append(tmp); + _CLDELETE_LCARRAY(tmp); + buf.appendChar(_T(')')); + + Explanation* r = _CLNEW Explanation(0.0f, buf.getBuffer()); + r->addDetail(e); + sumExpl->addDetail(r); + fail = true; + } + if (c->getOccur() == BooleanClause::SHOULD) + shouldMatchCount++; + } else if (c->isRequired()) { + StringBuffer buf(100); + buf.append(_T("no match on required clause (")); + TCHAR* tmp = c->getQuery()->toString(); + buf.append(tmp); + _CLDELETE_LCARRAY(tmp); + buf.appendChar(_T(')')); + + Explanation* r = _CLNEW Explanation(0.0f, buf.getBuffer()); + r->addDetail(e); + sumExpl->addDetail(r); + fail = true; + } else { + _CLLDELETE(e); + } + } + if (fail) { + sumExpl->setMatch(false); + sumExpl->setValue(0.0f); + sumExpl->setDescription(_T("Failure to meet condition(s) of required/prohibited clause(s)")); + return sumExpl; + } else if (shouldMatchCount < minShouldMatch) { + sumExpl->setMatch(false); + sumExpl->setValue(0.0f); + + StringBuffer buf(60); + buf.append(_T("Failure to match minimum number of optional clauses: ")); + buf.appendInt(minShouldMatch); + sumExpl->setDescription(buf.getBuffer()); + return sumExpl; + } + + sumExpl->setMatch(0 < coord ? true : false); + sumExpl->setValue(sum); + + float_t coordFactor = similarity->coord(coord, maxCoord); + if (coordFactor == 1.0f) // coord is no-op + return sumExpl; // eliminate wrapper + else { + ComplexExplanation* result = _CLNEW ComplexExplanation(sumExpl->isMatch(), + sum*coordFactor, + _T("product of:")); + result->addDetail(sumExpl); + + StringBuffer buf(30); + buf.append(_T("coord(")); + buf.appendInt(coord); + buf.appendChar(_T('/')); + buf.appendInt(maxCoord); + buf.appendChar(_T(')')); + result->addDetail(_CLNEW Explanation(coordFactor,buf.getBuffer())); + return result; + } + } + + BooleanClause::BooleanClause(Query* q, const bool DeleteQuery,const bool req, const bool p): + query(q), + occur(SHOULD), + deleteQuery(DeleteQuery), + required(req), + prohibited(p) + { + if (required) { + if (prohibited) { + // prohibited && required doesn't make sense, but we want the old behaviour: + occur = MUST_NOT; + } else { + occur = MUST; + } + } else { + if (prohibited) { + occur = MUST_NOT; + } else { + occur = SHOULD; + } + } + } + + BooleanClause::BooleanClause(const BooleanClause& clone): + query(clone.query->clone()), + occur(clone.occur), + deleteQuery(true), + required(clone.required), + prohibited(clone.prohibited) + { + } + + BooleanClause::BooleanClause(Query* q, const bool DeleteQuery, Occur o): + query(q), + occur(o), + deleteQuery(DeleteQuery) + { + setFields(occur); + } + + + BooleanClause* BooleanClause::clone() const { + BooleanClause* ret = _CLNEW BooleanClause(*this); + return ret; + } + + BooleanClause::~BooleanClause(){ + if ( deleteQuery ) + _CLDELETE( query ); + } + + + /** Returns true if o is equal to this. */ + bool BooleanClause::equals(const BooleanClause* other) const { + return this->query->equals(other->query) + && (this->required == other->required) + && (this->prohibited == other->prohibited) // TODO: Remove these + && (this->occur == other->getOccur() ); + } + + /** Returns a hash code value for this object.*/ + size_t BooleanClause::hashCode() const { + return query->hashCode() ^ ( (occur == MUST) ?1:0) ^ ( (occur == MUST_NOT)?2:0); + } + + BooleanClause::Occur BooleanClause::getOccur() const { return occur; } + void BooleanClause::setOccur(Occur o) { + occur = o; + setFields(o); + } + + Query* BooleanClause::getQuery() const { return query; } + void BooleanClause::setQuery(Query* q) { + if ( deleteQuery ) + _CLDELETE( query ); + query = q; + } + + bool BooleanClause::isProhibited() const { return prohibited; /* TODO: return (occur == MUST_NOT); */ } + bool BooleanClause::isRequired() const { return required; /* TODO: return (occur == MUST); */ } + + TCHAR* BooleanClause::toString() const { + CL_NS(util)::StringBuffer buffer; + if (occur == MUST) + buffer.append(_T("+")); + else if (occur == MUST_NOT) + buffer.append(_T("-")); + buffer.append( query->toString() ); + return buffer.toString(); + } + + void BooleanClause::setFields(Occur occur) { + if (occur == MUST) { + required = true; + prohibited = false; + } else if (occur == SHOULD) { + required = false; + prohibited = false; + } else if (occur == MUST_NOT) { + required = false; + prohibited = true; + } else { + _CLTHROWT (CL_ERR_UnknownOperator, _T("Unknown operator")); + } + } + +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/BooleanQuery.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/BooleanQuery.h new file mode 100644 index 0000000..9129265 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/BooleanQuery.h @@ -0,0 +1,157 @@ +/*------------------------------------------------------------------------------ +* 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_ + +CL_CLASS_DEF(util,StringBuffer) +CL_CLASS_DEF(search,Weight) +#include "Query.h" +#include "BooleanClause.h" +#include "CLucene/util/VoidList.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 CLUCENE_EXPORT BooleanQuery:public Query { + public: + typedef CL_NS(util)::CLVector > ClausesType; + private: + ClausesType* clauses; + static size_t maxClauseCount; + + /** Whether hit docs may be collected out of docid order. */ + static bool allowDocsOutOfOrder; + + bool disableCoord; + protected: + int32_t minNrShouldMatch; + Weight* _createWeight(Searcher* searcher); + BooleanQuery(const BooleanQuery& clone); + + public: + /** Constructs an empty boolean query. */ + BooleanQuery( bool disableCoord = false ); + + ~BooleanQuery(); + const char* getObjectName() const; + static const char* 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(const size_t maxClauseCount); + + /** Adds a clause to a boolean query. Clauses may be: + *
    + *
  • required which means that documents which do not + * match this sub-query will not match the boolean query; + *
  • prohibited which means that documents which do + * match this sub-query will not match the boolean query; or + *
  • 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. + *
+ * It is an error to specify a clause as both required and + * prohibited. + * + * @deprecated use {@link #add(Query, BooleanClause.Occur)} instead: + *
    + *
  • For add(query, true, false) use add(query, BooleanClause.Occur.MUST) + *
  • For add(query, false, false) use add(query, BooleanClause.Occur.SHOULD) + *
  • For add(query, false, true) use add(query, BooleanClause.Occur.MUST_NOT) + *
+ */ + 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); + + void add(Query* query, const bool deleteQuery, BooleanClause::Occur occur); + void add(Query* query, BooleanClause::Occur occur) { add(query,false,occur); }; + + /** 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; + + /** Expert: adds all terms occurring in this query to the termset set. */ + void extractTerms( TermSet * termset ) const; + + bool equals(Query* o) const; + Similarity* getSimilarity( Searcher* searcher ); + + bool isCoordDisabled(); + void setCoordDisabled( bool disableCoord ); + + static bool getUseScorer14(); + static void setUseScorer14( bool use14 ); + + /** + * Expert: Indicates whether hit docs may be collected out of docid + * order. + * + *

+ * Background: although the contract of the Scorer class requires that + * documents be iterated in order of doc id, this was not true in early + * versions of Lucene. Many pieces of functionality in the current + * Lucene code base have undefined behavior if this contract is not + * upheld, but in some specific simple cases may be faster. (For + * example: disjunction queries with less than 32 prohibited clauses; + * This setting has no effect for other queries.) + *

+ * + *

+ * Specifics: By setting this option to true, calls to + * {@link HitCollector#collect(int,float)} might be + * invoked first for docid N and only later for docid N-1. + * Being static, this setting is system wide. + *

+ */ + static void setAllowDocsOutOfOrder(bool allow); + + /** + * Whether hit docs may be collected out of docid order. + * @see #setAllowDocsOutOfOrder(boolean) + */ + static bool getAllowDocsOutOfOrder(); + + + /** 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; + + //internal + int32_t getMinNrShouldMatch(); + friend class BooleanWeight; + }; + +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/BooleanScorer.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/BooleanScorer.cpp new file mode 100644 index 0000000..d1d48a4 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/BooleanScorer.cpp @@ -0,0 +1,302 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "SearchHeader.h" +#include "_BooleanScorer.h" + +#include "Scorer.h" +#include "Similarity.h" +#include "CLucene/util/StringBuffer.h" + +CL_NS_USE(util) +CL_NS_DEF(search) + + BooleanScorer::BooleanScorer(Similarity* similarity, int32_t minNrShouldMatch, const bool isTakingOwnership ): + Scorer(similarity), + scorers(NULL), + maxCoord(1), + nextMask(1), + end(0), + current(NULL), + minNrShouldMatch(minNrShouldMatch), + requiredMask(0), + prohibitedMask(0), + coordFactors(NULL), + isTakingOwnership(isTakingOwnership) + { + 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; + } + + float_t BooleanScorer::score(){ + if (coordFactors == NULL) + computeCoordFactors(); + return current->score * coordFactors[current->coord]; + } + + void BooleanScorer::score( HitCollector* results ) { + next(); + score( results, LUCENE_INT32_MAX_SHOULDBE ); + } + + bool BooleanScorer::skipTo(int32_t /*target*/) { + _CLTHROWA(CL_ERR_UnsupportedOperation,"UnsupportedOperationException: BooleanScorer::skipTo"); + } + + Explanation* BooleanScorer::explain(int32_t /*doc*/) { + _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) { + TCHAR* tmp = sub->scorer->toString(); + buffer.append(tmp); + _CLDELETE_LCARRAY(tmp); + buffer.appendChar(_T(' ')); + } + buffer.appendChar(_T(')')); + 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, isTakingOwnership); + } + + void BooleanScorer::computeCoordFactors(){ + coordFactors = _CL_NEWARRAY(float_t,maxCoord); + for (int32_t i = 0; i < maxCoord; i++) + coordFactors[i] = getSimilarity()->coord(i, maxCoord-1); + } + + bool BooleanScorer::score( HitCollector* results, const int32_t maxDoc ) { + if ( coordFactors == NULL ) { + computeCoordFactors(); + } + + bool more; + Bucket* tmp; + + do { + bucketTable->first = NULL; + while ( current != NULL ) { + + if (( current->bits & prohibitedMask ) == 0 && + ( current->bits & requiredMask ) == requiredMask ) { + + if ( current->doc >= maxDoc ) { + tmp = current; + current = current->next; + tmp->next = bucketTable->first; + bucketTable->first = tmp; + continue; + } + + if ( current->coord >= minNrShouldMatch ) { + results->collect( current->doc, current->score * coordFactors[current->coord] ); + } + } + + current = current->next; + } + + if ( bucketTable->first != NULL ) { + current = bucketTable->first; + bucketTable->first = current->next; + return true; + } + + more = false; + end += BucketTable_SIZE; + + for ( SubScorer* sub = scorers; sub != NULL; sub = sub->next ) { + if ( !sub->done ) { + sub->done = !sub->scorer->score( sub->collector, end ); + if ( !sub->done ) + more = true; + } + } + current = bucketTable->first; + + } while ( current != NULL || more ); + + return false; + } + + + + BooleanScorer::SubScorer::SubScorer(Scorer* scr, const bool r, const bool p, HitCollector* c, SubScorer* nxt, const bool o): + scorer(scr), + required(r), + prohibited(p), + collector(c), + next(nxt), + hasOwnership(o) + { + //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; + } + if (hasOwnership) { + _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 = new Bucket[BucketTable_SIZE]; + } + BooleanScorer::BucketTable::~BucketTable(){ + clear(); + delete [] 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 float_t 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/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/BooleanScorer2.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/BooleanScorer2.cpp new file mode 100644 index 0000000..fcc9616 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/BooleanScorer2.cpp @@ -0,0 +1,690 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "_BooleanScorer2.h" + +#include "Scorer.h" +#include "SearchHeader.h" +#include "Similarity.h" +#include "ScorerDocQueue.h" +#include "Explanation.h" + +#include "_BooleanScorer.h" +#include "_BooleanScorer.h" +#include "_ConjunctionScorer.h" +#include "_DisjunctionSumScorer.h" + +CL_NS_USE(util) +CL_NS_DEF(search) + + +class BooleanScorer2::Coordinator { +public: + int32_t maxCoord; + int32_t nrMatchers; // to be increased by score() of match counting scorers. + float_t* coordFactors; + Scorer* parentScorer; + + Coordinator( Scorer* parent ): + maxCoord(0), + nrMatchers(0), + coordFactors(NULL), + parentScorer(parent) + { + } + + virtual ~Coordinator() + { + _CLDELETE_ARRAY(coordFactors); + } + + void init() + { + coordFactors = _CL_NEWARRAY( float_t, maxCoord+1 ); + Similarity* sim = parentScorer->getSimilarity(); + for ( int32_t i = 0; i <= maxCoord; i++ ) { + coordFactors[i] = sim->coord(i, maxCoord); + } + } + + + void initDoc() { + nrMatchers = 0; + } + + float_t coordFactor() { + return coordFactors[nrMatchers]; + } +}; + +class BooleanScorer2::SingleMatchScorer: public Scorer { +public: + Scorer* scorer; + Coordinator* coordinator; + int32_t lastScoredDoc; + + SingleMatchScorer( Scorer* _scorer, Coordinator* _coordinator ) : + Scorer( _scorer->getSimilarity() ), scorer(_scorer), coordinator(_coordinator), lastScoredDoc(-1) + { + } + + virtual ~SingleMatchScorer() + { + _CLDELETE( scorer ); + } + + float_t score() + { + if ( doc() >= lastScoredDoc ) { + lastScoredDoc = this->doc(); + coordinator->nrMatchers++; + } + return scorer->score(); + } + + int32_t doc() const { + return scorer->doc(); + } + + bool next() { + return scorer->next(); + } + + bool skipTo( int32_t docNr ) { + return scorer->skipTo( docNr ); + } + + virtual TCHAR* toString() { + return scorer->toString(); + } + + Explanation* explain(int32_t doc) { + return scorer->explain( doc ); + } + +}; + +/** A scorer that matches no document at all. */ +class BooleanScorer2::NonMatchingScorer: public Scorer { +public: + + NonMatchingScorer() : + Scorer( NULL ) + { + } + virtual ~NonMatchingScorer() {}; + + int32_t doc() const { + _CLTHROWA(CL_ERR_UnsupportedOperation, "UnsupportedOperationException: BooleanScorer2::NonMatchingScorer::doc"); + return 0; + } + bool next() { return false; } + float_t score() { + _CLTHROWA(CL_ERR_UnsupportedOperation, "UnsupportedOperationException: BooleanScorer2::NonMatchingScorer::score"); + return 0.0; + } + bool skipTo( int32_t /*target*/ ) { return false; } + virtual TCHAR* toString() { return stringDuplicate(_T("NonMatchingScorer")); } + + Explanation* explain( int32_t /*doc*/ ) { + Explanation* e = _CLNEW Explanation(); + e->setDescription(_T("No document matches.")); + return e; + } + +}; + +/** A Scorer for queries with a required part and an optional part. + * Delays skipTo() on the optional part until a score() is needed. + *
+ * This Scorer implements {@link Scorer#skipTo(int)}. + */ +class BooleanScorer2::ReqOptSumScorer: public Scorer { +private: + /** The scorers passed from the constructor. + * These are set to null as soon as their next() or skipTo() returns false. + */ + Scorer* reqScorer; + Scorer* optScorer; + bool firstTimeOptScorer; + +public: + /** Construct a ReqOptScorer. + * @param reqScorer The required scorer. This must match. + * @param optScorer The optional scorer. This is used for scoring only. + */ + ReqOptSumScorer( Scorer* _reqScorer, Scorer* _optScorer ) : + Scorer( NULL ), reqScorer(_reqScorer), optScorer(_optScorer), firstTimeOptScorer(true) + { + } + + virtual ~ReqOptSumScorer() + { + _CLDELETE( reqScorer ); + _CLDELETE( optScorer ); + } + + /** Returns the score of the current document matching the query. + * Initially invalid, until {@link #next()} is called the first time. + * @return The score of the required scorer, eventually increased by the score + * of the optional scorer when it also matches the current document. + */ + float_t score() + { + int32_t curDoc = reqScorer->doc(); + float_t reqScore = reqScorer->score(); + + if ( firstTimeOptScorer ) { + firstTimeOptScorer = false; + if ( !optScorer->skipTo( curDoc ) ) { + _CLDELETE(optScorer); + return reqScore; + } + } else if ( optScorer == NULL ) { + return reqScore; + } else if (( optScorer->doc() < curDoc ) && ( !optScorer->skipTo( curDoc ))) { + _CLDELETE(optScorer); + return reqScore; + } + + return ( optScorer->doc() == curDoc ) + ? reqScore + optScorer->score() + : reqScore; + } + + int32_t doc() const { + return reqScorer->doc(); + } + + bool next() { + return reqScorer->next(); + } + + bool skipTo( int32_t target ) { + return reqScorer->skipTo( target ); + } + + virtual TCHAR* toString() { + return stringDuplicate(_T("ReqOptSumScorer")); + } + + /** Explain the score of a document. + * @todo Also show the total score. + * See BooleanScorer.explain() on how to do this. + */ + Explanation* explain( int32_t doc ) { + Explanation* res = _CLNEW Explanation(); + res->setDescription(_T("required, optional")); + res->addDetail(reqScorer->explain(doc)); + res->addDetail(optScorer->explain(doc)); + return res; + } +}; + + +/** A Scorer for queries with a required subscorer and an excluding (prohibited) subscorer. +*
+* This Scorer implements {@link Scorer#skipTo(int)}, +* and it uses the skipTo() on the given scorers. +*/ +class BooleanScorer2::ReqExclScorer: public Scorer { +private: + Scorer* reqScorer; + Scorer* exclScorer; + bool firstTime; + +public: + /** Construct a ReqExclScorer. + * @param reqScorer The scorer that must match, except where + * @param exclScorer indicates exclusion. + */ + ReqExclScorer( Scorer* _reqScorer, Scorer* _exclScorer ) : + Scorer( NULL ), reqScorer(_reqScorer), exclScorer(_exclScorer), firstTime(true) + { + } + + virtual ~ReqExclScorer() + { + _CLDELETE( reqScorer ); + _CLDELETE( exclScorer ); + } + + int32_t doc() const { + return reqScorer->doc(); + } + + /** Returns the score of the current document matching the query. + * Initially invalid, until {@link #next()} is called the first time. + * @return The score of the required scorer. + */ + float_t score() { + return reqScorer->score(); + } + + virtual TCHAR* toString() { + return stringDuplicate(_T("ReqExclScorer")); + } + + Explanation* explain( int32_t doc ) { + Explanation* res = _CLNEW Explanation(); + if (exclScorer->skipTo(doc) && (exclScorer->doc() == doc)) { + res->setDescription(_T("excluded")); + } else { + res->setDescription(_T("not excluded")); + res->addDetail(reqScorer->explain(doc)); + } + return res; + } + + + bool next() + { + if ( firstTime ) { + if ( !exclScorer->next() ) { + _CLDELETE( exclScorer ); + } + firstTime = false; + } + if ( reqScorer == NULL ) { + return false; + } + if ( !reqScorer->next() ) { + _CLDELETE( reqScorer ); // exhausted, nothing left + return false; + } + if ( exclScorer == NULL ) { + return true;// reqScorer.next() already returned true + } + return toNonExcluded(); + } + + + /** Skips to the first match beyond the current whose document number is + * greater than or equal to a given target. + *
When this method is used the {@link #explain(int)} method should not be used. + * @param target The target document number. + * @return true iff there is such a match. + */ + bool skipTo( int32_t target ) + { + if ( firstTime ) { + firstTime = false; + if ( !exclScorer->skipTo( target )) { + _CLDELETE( exclScorer ); // exhausted + } + } + if ( reqScorer == NULL ) { + return false; + } + if ( exclScorer == NULL ) { + return reqScorer->skipTo( target ); + } + if ( !reqScorer->skipTo( target )) { + _CLDELETE( reqScorer ); + return false; + } + return toNonExcluded(); + } + + +private: + /** Advance to non excluded doc. + *
On entry: + *
    + *
  • reqScorer != null, + *
  • exclScorer != null, + *
  • reqScorer was advanced once via next() or skipTo() + * and reqScorer.doc() may still be excluded. + *
+ * Advances reqScorer a non excluded required doc, if any. + * @return true iff there is a non excluded required doc. + */ + bool toNonExcluded() + { + int32_t exclDoc = exclScorer->doc(); + + do { + int32_t reqDoc = reqScorer->doc(); + if ( reqDoc < exclDoc ) { + return true; // reqScorer advanced to before exclScorer, ie. not excluded + } else if ( reqDoc > exclDoc ) { + if (! exclScorer->skipTo(reqDoc)) { + _CLDELETE( exclScorer ); // exhausted, no more exclusions + return true; + } + exclDoc = exclScorer->doc(); + if ( exclDoc > reqDoc ) { + return true; // not excluded + } + } + } while ( reqScorer->next() ); + + _CLDELETE( reqScorer ); // exhausted, nothing left + return false; + } + +}; + +class BooleanScorer2::BSConjunctionScorer: public CL_NS(search)::ConjunctionScorer { +private: + CL_NS(search)::BooleanScorer2::Coordinator* coordinator; + int32_t lastScoredDoc; + int32_t requiredNrMatchers; + typedef CL_NS(util)::CLVector > ScorersType; +public: + BSConjunctionScorer( CL_NS(search)::BooleanScorer2::Coordinator* _coordinator, ScorersType* _requiredScorers, int32_t _requiredNrMatchers ): + ConjunctionScorer( Similarity::getDefault(), _requiredScorers ), + coordinator(_coordinator), + lastScoredDoc(-1), + requiredNrMatchers(_requiredNrMatchers) + { + } + + virtual ~BSConjunctionScorer(){ + } + float_t score() + { + if ( this->doc() >= lastScoredDoc ) { + lastScoredDoc = this->doc(); + coordinator->nrMatchers += requiredNrMatchers; + } + return ConjunctionScorer::score(); + } + virtual TCHAR* toString() {return stringDuplicate(_T("BSConjunctionScorer"));} +}; + +class BooleanScorer2::BSDisjunctionSumScorer: public CL_NS(search)::DisjunctionSumScorer { +private: + CL_NS(search)::BooleanScorer2::Coordinator* coordinator; + int32_t lastScoredDoc; + typedef CL_NS(util)::CLVector > ScorersType; +public: + BSDisjunctionSumScorer( + CL_NS(search)::BooleanScorer2::Coordinator* _coordinator, + ScorersType* subScorers, + int32_t minimumNrMatchers ): + DisjunctionSumScorer( subScorers, minimumNrMatchers ), + coordinator(_coordinator), + lastScoredDoc(-1) + { + } + + float_t score() { + if ( this->doc() >= lastScoredDoc ) { + lastScoredDoc = this->doc(); + coordinator->nrMatchers += _nrMatchers; + } + return DisjunctionSumScorer::score(); + } + + virtual ~BSDisjunctionSumScorer(){ + } + virtual TCHAR* toString() {return stringDuplicate(_T("BSDisjunctionSumScorer"));} +}; + +class BooleanScorer2::Internal{ +public: + typedef CL_NS(util)::CLVector > ScorersType; + + ScorersType requiredScorers; + ScorersType optionalScorers; + ScorersType prohibitedScorers; + + BooleanScorer2::Coordinator *coordinator; + Scorer* countingSumScorer; + + size_t minNrShouldMatch; + bool allowDocsOutOfOrder; + + + void initCountingSumScorer() + { + coordinator->init(); + countingSumScorer = makeCountingSumScorer(); + } + + Scorer* countingDisjunctionSumScorer( ScorersType* scorers, int32_t minNrShouldMatch ) + { + return _CLNEW BSDisjunctionSumScorer( coordinator, scorers, minNrShouldMatch ); + } + + Scorer* countingConjunctionSumScorer( ScorersType* requiredScorers ) + { + return _CLNEW BSConjunctionScorer( coordinator, requiredScorers, requiredScorers->size() ); + } + + Scorer* dualConjunctionSumScorer( Scorer* req1, Scorer* req2 ) + { + ValueArray scorers(2); + scorers[0] = req1; + scorers[1] = req2; + return _CLNEW CL_NS(search)::ConjunctionScorer( Similarity::getDefault(), &scorers ); + + } + + Scorer* makeCountingSumScorer() + { + return ( requiredScorers.size() == 0 ) ? + makeCountingSumScorerNoReq() : + makeCountingSumScorerSomeReq(); + } + + Scorer* makeCountingSumScorerNoReq() + { + if ( optionalScorers.size() == 0 ) { + optionalScorers.setDoDelete(true); + return _CLNEW NonMatchingScorer(); + } else { + size_t nrOptRequired = ( minNrShouldMatch < 1 ) ? 1 : minNrShouldMatch; + if ( optionalScorers.size() < nrOptRequired ) { + optionalScorers.setDoDelete(true); + return _CLNEW NonMatchingScorer(); + } else { + Scorer* requiredCountingSumScorer = + ( optionalScorers.size() > nrOptRequired ) + ? countingDisjunctionSumScorer( &optionalScorers, nrOptRequired ) + : + ( optionalScorers.size() == 1 ) + ? _CLNEW SingleMatchScorer((Scorer*) optionalScorers[0], coordinator) + : countingConjunctionSumScorer( &optionalScorers ); + return addProhibitedScorers( requiredCountingSumScorer ); + } + } + } + + Scorer* makeCountingSumScorerSomeReq() + { + if ( optionalScorers.size() < minNrShouldMatch ) { + requiredScorers.setDoDelete(true); + optionalScorers.setDoDelete(true); + return _CLNEW NonMatchingScorer(); + } else if ( optionalScorers.size() == minNrShouldMatch ) { + Internal::ScorersType allReq( false ); + for ( Internal::ScorersType::iterator it = requiredScorers.begin(); it != requiredScorers.end(); it++ ) { + allReq.push_back( *it ); + } + for ( Internal::ScorersType::iterator it2 = optionalScorers.begin(); it2 != optionalScorers.end(); it2++ ) { + allReq.push_back( *it2 ); + } + return addProhibitedScorers( countingConjunctionSumScorer( &allReq )); + } else { + Scorer* requiredCountingSumScorer = + ( requiredScorers.size() == 1 ) + ? _CLNEW SingleMatchScorer( (Scorer*)requiredScorers[0], coordinator ) + : countingConjunctionSumScorer( &requiredScorers ); + if ( minNrShouldMatch > 0 ) { + return addProhibitedScorers( + dualConjunctionSumScorer( + requiredCountingSumScorer, + countingDisjunctionSumScorer( + &optionalScorers, + minNrShouldMatch ))); + } else { + return _CLNEW ReqOptSumScorer( + addProhibitedScorers( requiredCountingSumScorer ), + (( optionalScorers.size() == 1 ) + ? _CLNEW SingleMatchScorer( (Scorer*)optionalScorers[0], coordinator ) + : countingDisjunctionSumScorer( &optionalScorers, 1 ))); + } + } + } + + Scorer* addProhibitedScorers( Scorer* requiredCountingSumScorer ) + { + return ( prohibitedScorers.size() == 0 ) + ? requiredCountingSumScorer + : _CLNEW ReqExclScorer( requiredCountingSumScorer, + (( prohibitedScorers.size() == 1 ) + ? (Scorer*)prohibitedScorers[0] + : _CLNEW CL_NS(search)::DisjunctionSumScorer( &prohibitedScorers ))); + } + + + Internal( BooleanScorer2* parent, int32_t _minNrShouldMatch, bool _allowDocsOutOfOrder ): + requiredScorers(false), + optionalScorers(false), + prohibitedScorers(false), + countingSumScorer(NULL), + minNrShouldMatch(_minNrShouldMatch), + allowDocsOutOfOrder(_allowDocsOutOfOrder) + { + if ( _minNrShouldMatch < 0 ) { + _CLTHROWA(CL_ERR_IllegalArgument, "Minimum number of optional scorers should not be negative"); + } + + this->coordinator = _CLNEW Coordinator( parent ); + + } + ~Internal(){ + _CLDELETE( coordinator ); + _CLDELETE( countingSumScorer ); + /* TODO: these leak memory... haven't figure out how it should be fixed though... + requiredScorers.clear(); + optionalScorers.clear(); + prohibitedScorers.clear(); + */ + } + +}; + + + + + +BooleanScorer2::BooleanScorer2( Similarity* similarity, int32_t minNrShouldMatch, bool allowDocsOutOfOrder ): + Scorer( similarity ) +{ + _internal = new Internal(this, minNrShouldMatch, allowDocsOutOfOrder); +} + +BooleanScorer2::~BooleanScorer2() +{ + delete _internal; +} + +void BooleanScorer2::add( Scorer* scorer, bool required, bool prohibited ) +{ + if ( !prohibited ) { + _internal->coordinator->maxCoord++; + } + + if ( required ) { + if ( prohibited ) { + _CLTHROWA(CL_ERR_IllegalArgument, "scorer cannot be required and prohibited"); + } + _internal->requiredScorers.push_back( scorer ); + } else if ( prohibited ) { + _internal->prohibitedScorers.push_back( scorer ); + } else { + _internal->optionalScorers.push_back( scorer ); + } + +} + +void BooleanScorer2::score( HitCollector* hc ) +{ + if ( _internal->allowDocsOutOfOrder && _internal->requiredScorers.size() == 0 && _internal->prohibitedScorers.size() < 32 ) { + _internal->prohibitedScorers.setDoDelete(true); + _internal->optionalScorers.setDoDelete(true); + BooleanScorer* bs = _CLNEW BooleanScorer( getSimilarity(), _internal->minNrShouldMatch, false ); + Internal::ScorersType::iterator si = _internal->optionalScorers.begin(); + while ( si != _internal->optionalScorers.end() ) { + bs->add( (*si), false /* required */, false /* prohibited */ ); + si++; + } + si = _internal->prohibitedScorers.begin(); + while ( si != _internal->prohibitedScorers.end() ) { + bs->add( (*si), false /* required */, true /* prohibited */ ); + si++; + } + bs->score( hc ); + _CLLDELETE(bs); + } else { + if ( _internal->countingSumScorer == NULL ) { + _internal->initCountingSumScorer(); + } + while ( _internal->countingSumScorer->next() ) { + hc->collect( _internal->countingSumScorer->doc(), score() ); + } + } +} + +int32_t BooleanScorer2::doc() const +{ + return _internal->countingSumScorer->doc(); +} + +bool BooleanScorer2::next() +{ + if ( _internal->countingSumScorer == NULL ) { + _internal->initCountingSumScorer(); + } + return _internal->countingSumScorer->next(); +} + +float_t BooleanScorer2::score() +{ + _internal->coordinator->initDoc(); + float_t sum = _internal->countingSumScorer->score(); + return sum * _internal->coordinator->coordFactor(); +} + +bool BooleanScorer2::skipTo( int32_t target ) +{ + if ( _internal->countingSumScorer == NULL ) { + _internal->initCountingSumScorer(); + } + return _internal->countingSumScorer->skipTo( target ); +} + +TCHAR* BooleanScorer2::toString() +{ + return stringDuplicate(_T("BooleanScorer2")); +} + +Explanation* BooleanScorer2::explain( int32_t /*doc*/ ) +{ + _CLTHROWA(CL_ERR_UnsupportedOperation,"UnsupportedOperationException: BooleanScorer2::explain"); + /* How to explain the coordination factor? + initCountingSumScorer(); + return countingSumScorer.explain(doc); // misses coord factor. + */ +} + +bool BooleanScorer2::score( HitCollector* hc, int32_t max ) +{ + int32_t docNr = _internal->countingSumScorer->doc(); + while ( docNr < max ) { + hc->collect( docNr, score() ); + if ( !_internal->countingSumScorer->next() ) { + return false; + } + docNr = _internal->countingSumScorer->doc(); + } + return true; +} +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/CachingSpanFilter.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/CachingSpanFilter.cpp new file mode 100644 index 0000000..9830077 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/CachingSpanFilter.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/_ApiHeader.h" +#include "CachingSpanFilter.h" +#include "CLucene/index/IndexReader.h" + + +CL_NS_DEF(search) + +/** + * Result wrapper for the cache + */ +class ResultHolder : LUCENE_BASE +{ + bool deleteResult; +public: + SpanFilterResult * result; + + ResultHolder(SpanFilterResult * result, bool deleteResult ) + { + this->result = result; + this->deleteResult = deleteResult; + } + ~ResultHolder() + { + if ( deleteResult ) + _CLDELETE( result ); + } +}; + +struct CachingSpanFilter::Internal +{ + typedef CL_NS(util)::CLHashMap< + CL_NS(index)::IndexReader *, + ResultHolder *, + CL_NS(util)::Compare::Void, + CL_NS(util)::Equals::Void, + CL_NS(util)::Deletor::Object, + CL_NS(util)::Deletor::Object + > ResultCacheType; + + ResultCacheType cache; + DEFINE_MUTEX(cache_LOCK) + + Internal() : cache(false,true) + {} +}; + +CachingSpanFilter::CachingSpanFilter( SpanFilter * filter, bool deleteFilter ) +{ + _internal = _CLNEW Internal(); + this->filter = filter; + this->deleteFilter = deleteFilter; +} + +CachingSpanFilter::CachingSpanFilter( const CachingSpanFilter& copy ) +{ + _internal = _CLNEW Internal(); + this->filter = (SpanFilter*)copy.filter->clone(); + this->deleteFilter = true; +} + +CachingSpanFilter::~CachingSpanFilter() +{ + _CLDELETE( _internal ); + if( deleteFilter ) + { + _CLDELETE( filter ); + } + else + filter = NULL; +} + +Filter* CachingSpanFilter::clone() const +{ + return _CLNEW CachingSpanFilter( *this ); +} + +CL_NS(util)::BitSet* CachingSpanFilter::bits( CL_NS(index)::IndexReader * reader ) +{ + SpanFilterResult * result = getCachedResult( reader ); + return result != NULL ? result->getBits() : NULL; +} + +SpanFilterResult * CachingSpanFilter::getCachedResult( CL_NS(index)::IndexReader * reader ) +{ + SCOPED_LOCK_MUTEX( _internal->cache_LOCK ) + + ResultHolder * resultHolder = _internal->cache.get( reader ); + if( ! resultHolder ) + { + SpanFilterResult * result = filter->bitSpans( reader ); + resultHolder = _CLNEW ResultHolder( result, true ); + _internal->cache.put( reader, resultHolder ); + } + + return resultHolder->result; +} + +SpanFilterResult * CachingSpanFilter::bitSpans( CL_NS(index)::IndexReader * reader ) +{ + return getCachedResult( reader ); +} + +TCHAR* CachingSpanFilter::toString() +{ + TCHAR* ft = filter->toString(); + size_t len = _tcslen( ft ) + 20; + TCHAR* ret = _CL_NEWARRAY( TCHAR, len ); + ret[0] = 0; + _sntprintf( ret, len, _T( "CachingSpanFilter(%s)" ), ft ); + _CLDELETE_CARRAY( ft ); + return ret; +} + +CL_NS_END \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/CachingSpanFilter.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/CachingSpanFilter.h new file mode 100644 index 0000000..abe32bb --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/CachingSpanFilter.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. + ------------------------------------------------------------------------------*/ +#ifndef _lucene_search_CachingSpanFilter_ +#define _lucene_search_CachingSpanFilter_ + +#include "SpanFilter.h" + +CL_NS_DEF(search) + +/** + * Wraps another SpanFilter's result and caches it. The purpose is to allow + * filters to simply filter, and then wrap with this class to add caching. + */ +class CachingSpanFilter : public SpanFilter +{ + struct Internal; + Internal* _internal; + +protected: + SpanFilter * filter; + bool deleteFilter; + +protected: + CachingSpanFilter( const CachingSpanFilter& copy ); + +public: + /** + * @param filter Filter to cache results of + */ + CachingSpanFilter( SpanFilter * filter, bool deleteFilter=true ); + + virtual ~CachingSpanFilter(); + + virtual Filter* clone() const; + + virtual CL_NS(util)::BitSet* bits( CL_NS(index)::IndexReader * reader ); + + virtual SpanFilterResult * bitSpans( CL_NS(index)::IndexReader * reader ); + + virtual TCHAR* toString(); + +private: + SpanFilterResult * getCachedResult( CL_NS(index)::IndexReader * reader ); + +// public boolean equals(Object o) { +// if (!(o instanceof CachingSpanFilter)) return false; +// return this.filter.equals(((CachingSpanFilter)o).filter); +// } +// +// public int hashCode() { +// return filter.hashCode() ^ 0x1117BF25; +// } +}; + +CL_NS_END +#endif // _lucene_search_CachingSpanFilter_ diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/CachingWrapperFilter.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/CachingWrapperFilter.cpp new file mode 100644 index 0000000..0fd5ff1 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/CachingWrapperFilter.cpp @@ -0,0 +1,114 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "CachingWrapperFilter.h" +#include "CLucene/util/BitSet.h" +#include "CLucene/index/IndexReader.h" + +CL_NS_DEF(search) +CL_NS_USE(index) +CL_NS_USE(util) + + +class BitSetHolder: LUCENE_BASE{ + bool deleteBs; +public: + CL_NS(util)::BitSet* bits; + + BitSetHolder(CL_NS(util)::BitSet* bits, bool deleteBs){ + this->bits = bits; + this->deleteBs = deleteBs; + } + ~BitSetHolder(){ + if ( deleteBs ) + _CLDELETE(bits); + } +}; + +struct AbstractCachingFilter::Internal{ + typedef CL_NS(util)::CLHashMap, + CL_NS(util)::Equals::Void, + CL_NS(util)::Deletor::Object, + CL_NS(util)::Deletor::Object > CacheType; + + CacheType cache; + DEFINE_MUTEX(cache_LOCK) + Internal(): + cache(false,true) + { + } +}; + +AbstractCachingFilter::AbstractCachingFilter(): + _internal(new Internal) +{ +} +AbstractCachingFilter::AbstractCachingFilter(const AbstractCachingFilter& /*copy*/): + _internal(new Internal) +{ +} +AbstractCachingFilter::~AbstractCachingFilter(){ + delete _internal; +} + +BitSet* AbstractCachingFilter::bits(IndexReader* reader){ + SCOPED_LOCK_MUTEX(_internal->cache_LOCK) + BitSetHolder* cached = _internal->cache.get(reader); + if ( cached != NULL ) + return cached->bits; + BitSet* bs = doBits(reader); + BitSetHolder* bsh = _CLNEW BitSetHolder(bs, doShouldDeleteBitSet(bs)); + _internal->cache.put(reader,bsh); + return bs; +} +void AbstractCachingFilter::closeCallback(CL_NS(index)::IndexReader* reader, void*){ + SCOPED_LOCK_MUTEX(_internal->cache_LOCK) + _internal->cache.remove(reader); +} + + + + +CachingWrapperFilter::CachingWrapperFilter(Filter* filter, bool deleteFilter): + AbstractCachingFilter() +{ + 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/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/CachingWrapperFilter.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/CachingWrapperFilter.h new file mode 100644 index 0000000..9647c96 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/CachingWrapperFilter.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_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 CLUCENE_EXPORT AbstractCachingFilter: public Filter +{ + struct Internal; + Internal* _internal; + void closeCallback(CL_NS(index)::IndexReader* reader, void* param); +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 CLUCENE_EXPORT 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/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/ChainedFilter.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/ChainedFilter.cpp new file mode 100644 index 0000000..8721473 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/ChainedFilter.cpp @@ -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. +------------------------------------------------------------------------------*/ + +#include "CLucene/_ApiHeader.h" +#include "CLucene/util/Misc.h" +#include "CLucene/util/BitSet.h" +#include "CLucene/util/StringBuffer.h" +#include "CLucene/index/IndexReader.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 ): + Filter(), + filters(_filters), + logicArray(NULL), + logic(_op) +{ +} +ChainedFilter::ChainedFilter( Filter** _filters, int* _array ): + Filter(), + filters(_filters), + logicArray(_array), + logic(-1) +{ +} +ChainedFilter::ChainedFilter( const ChainedFilter& copy ) : + Filter(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;iset(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;iset(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/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/ChainedFilter.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/ChainedFilter.h new file mode 100644 index 0000000..e7047cd --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/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 "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 CLUCENE_EXPORT 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/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/Compare.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/Compare.cpp new file mode 100644 index 0000000..bb85951 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/Compare.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/_ApiHeader.h" +#include "Compare.h" +#include "SearchHeader.h" + +CL_NS_DEF(search) + +ScoreDocComparators::ScoreDocComparators(){} +ScoreDocComparators::~ScoreDocComparators(){ +} + +int32_t ScoreDocComparators::Relevance::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* ScoreDocComparators::Relevance::sortValue (struct ScoreDoc* i) { + return _CLNEW CL_NS(util)::Compare::Float (i->score); +} +int32_t ScoreDocComparators::Relevance::sortType() { + return SortField::DOCSCORE; +} + + + +ScoreDocComparators::IndexOrder::IndexOrder(): + ScoreDocComparator() +{ + +} +int32_t ScoreDocComparators::IndexOrder::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* ScoreDocComparators::IndexOrder::sortValue (struct ScoreDoc* i) { + return _CLNEW CL_NS(util)::Compare::Int32(i->doc); +} +int32_t ScoreDocComparators::IndexOrder::sortType() { + return SortField::DOC; +} + + + +ScoreDocComparators::String::String(FieldCache::StringIndex* index, int32_t len) +{ + this->length = len; + this->index = index; +} + +int32_t ScoreDocComparators::String::compare (struct ScoreDoc* i, struct ScoreDoc* j) { + CND_PRECONDITION(i->docdoc>=length") + CND_PRECONDITION(j->docdoc>=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* ScoreDocComparators::String::sortValue (struct ScoreDoc* i) { + return _CLNEW CL_NS(util)::Compare::TChar(index->lookup[index->order[i->doc]]); +} + +int32_t ScoreDocComparators::String::sortType() { + return SortField::STRING; +} + + +ScoreDocComparators::Int32::Int32(int32_t* fieldOrder, int32_t len) +{ + this->fieldOrder = fieldOrder; + this->length = len; +} + + +int32_t ScoreDocComparators::Int32::compare (struct ScoreDoc* i, struct ScoreDoc* j) { + CND_PRECONDITION(i->docdoc>=length") + CND_PRECONDITION(j->docdoc>=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* ScoreDocComparators::Int32::sortValue (struct ScoreDoc* i) { + CND_PRECONDITION(i->docdoc>=length") + return _CLNEW CL_NS(util)::Compare::Int32(fieldOrder[i->doc]); +} + +int32_t ScoreDocComparators::Int32::sortType() { + return SortField::INT; +} + +ScoreDocComparators::Float::Float(float_t* fieldOrder, int32_t len) +{ + this->fieldOrder = fieldOrder; + this->length = len; +} + +int32_t ScoreDocComparators::Float::compare (struct ScoreDoc* i, struct ScoreDoc* j) { + CND_PRECONDITION(i->docdoc>=length") + CND_PRECONDITION(j->docdoc>=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* ScoreDocComparators::Float::sortValue (struct ScoreDoc* i) { + CND_PRECONDITION(i->docdoc>=length") + return _CLNEW CL_NS(util)::Compare::Float(fieldOrder[i->doc]); +} + +int32_t ScoreDocComparators::Float::sortType() { + return SortField::FLOAT; +} + +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/Compare.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/Compare.h new file mode 100644 index 0000000..e3122a5 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/Compare.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_search_Compare_ +#define _lucene_search_Compare_ + + +//#include "FieldSortedHitQueue.h" +#include "Sort.h" +#include "FieldCache.h" + +CL_NS_DEF(search) + + +class CLUCENE_EXPORT ScoreDocComparators:LUCENE_BASE { +protected: + ScoreDocComparators(); +public: + ~ScoreDocComparators(); + + class CLUCENE_EXPORT Relevance:public ScoreDocComparator { + public: + int32_t compare (struct ScoreDoc* i, struct ScoreDoc* j); + CL_NS(util)::Comparable* sortValue (struct ScoreDoc* i); + int32_t sortType(); + }; + + class CLUCENE_EXPORT IndexOrder:public ScoreDocComparator{ + public: + IndexOrder(); + int32_t compare (struct ScoreDoc* i, struct ScoreDoc* j); + CL_NS(util)::Comparable* sortValue (struct ScoreDoc* i); + int32_t sortType(); + }; + + + class CLUCENE_EXPORT String: public ScoreDocComparator { + FieldCache::StringIndex* index; + int32_t length; + public: + String(FieldCache::StringIndex* index, int32_t len); + int32_t compare (struct ScoreDoc* i, struct ScoreDoc* j); + CL_NS(util)::Comparable* sortValue (struct ScoreDoc* i); + + int32_t sortType(); + }; + + class CLUCENE_EXPORT Int32:public ScoreDocComparator{ + int32_t* fieldOrder; + int32_t length; + public: + Int32(int32_t* fieldOrder, int32_t len); + int32_t compare (struct ScoreDoc* i, struct ScoreDoc* j); + CL_NS(util)::Comparable* sortValue (struct ScoreDoc* i); + int32_t sortType(); + }; + + class CLUCENE_EXPORT Float:public ScoreDocComparator { + float_t* fieldOrder; + int32_t length; + public: + Float(float_t* fieldOrder, int32_t len); + int32_t compare (struct ScoreDoc* i, struct ScoreDoc* j); + CL_NS(util)::Comparable* sortValue (struct ScoreDoc* i); + int32_t sortType(); + }; +}; + + +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/ConjunctionScorer.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/ConjunctionScorer.cpp new file mode 100644 index 0000000..317faaa --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/ConjunctionScorer.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/_ApiHeader.h" +#include "_ConjunctionScorer.h" +#include "Similarity.h" +#include "CLucene/util/_Arrays.h" +#include +#include + +CL_NS_USE(index) +CL_NS_USE(util) +CL_NS_DEF(search) + + ConjunctionScorer::ConjunctionScorer(Similarity* similarity, ScorersType* _scorers): + Scorer(similarity), + firstTime(true), + more(false), + coord(0.0), + lastDoc(-1) + { + this->scorers = _CLNEW CL_NS(util)::ObjectArray(_scorers->size()); + _scorers->toArray(this->scorers->values); + coord = getSimilarity()->coord(this->scorers->length, this->scorers->length); + } + ConjunctionScorer::ConjunctionScorer(Similarity* similarity, const CL_NS(util)::ArrayBase* _scorers): + Scorer(similarity), + firstTime(true), + more(false), + coord(0.0), + lastDoc(-1) + { + this->scorers = _CLNEW CL_NS(util)::ObjectArray(_scorers->length); + memcpy(this->scorers->values, _scorers->values, _scorers->length * sizeof(Scorer*)); + coord = getSimilarity()->coord(this->scorers->length, this->scorers->length); + } + ConjunctionScorer::~ConjunctionScorer(){ + _CLLDELETE(scorers); + } + + TCHAR* ConjunctionScorer::toString(){ + return stringDuplicate(_T("ConjunctionScorer")); + } + + int32_t ConjunctionScorer::doc() const{ + return lastDoc; + } + + bool ConjunctionScorer::next() { + if (firstTime) { + init(0); + } else if (more) { + more = scorers->values[(scorers->length-1)]->next(); + } + return doNext(); + } + + bool ConjunctionScorer::doNext() { + int32_t first=0; + Scorer* lastScorer = scorers->values[scorers->length-1]; + Scorer* firstScorer; + while (more && (firstScorer=scorers->values[first])->doc() < (lastDoc=lastScorer->doc())) { + more = firstScorer->skipTo(lastDoc); + lastScorer = firstScorer; + first = (first == (scorers->length-1)) ? 0 : first+1; + } + return more; + } + + bool ConjunctionScorer::skipTo(int32_t target) { + if (firstTime) + return init(target); + else if (more) + more = scorers->values[(scorers->length-1)]->skipTo(target); + return doNext(); + } + int ConjunctionScorer_sort(const void* _elem1, const void* _elem2){ + const Scorer* elem1 = *(const Scorer**)_elem1; + const Scorer* elem2 = *(const Scorer**)_elem2; + return elem1->doc() - elem2->doc(); + } + + bool ConjunctionScorer::init(int32_t target) { + firstTime = false; + more = scorers->length>1; + + + for (size_t i=0; ilength; i++) { + more = target==0 ? scorers->values[i]->next() : scorers->values[i]->skipTo(target); + if (!more) + return false; + } + + // Sort the array the first time... + // We don't need to sort the array in any future calls because we know + // it will already start off sorted (all scorers on same doc). + + // note that this comparator is not consistent with equals! + qsort(scorers->values,scorers->length, sizeof(Scorer*), ConjunctionScorer_sort); + + doNext(); + + // If first-time skip distance is any predictor of + // scorer sparseness, then we should always try to skip first on + // those scorers. + // Keep last scorer in it's last place (it will be the first + // to be skipped on), but reverse all of the others so that + // they will be skipped on in order of original high skip. + int32_t end=(scorers->length-1)-1; + for (int32_t i=0; i<(end>>1); i++) { + Scorer* tmp = scorers->values[i]; + scorers->values[i] = scorers->values[end-i]; + scorers->values[end-i] = tmp; + } + return more; + } + + float_t ConjunctionScorer::score(){ + float_t sum = 0.0f; + for (size_t i = 0; i < scorers->length; i++) { + sum += scorers->values[i]->score(); + } + return sum * coord; + } + Explanation* ConjunctionScorer::explain(int32_t /*doc*/) { + _CLTHROWA(CL_ERR_UnsupportedOperation,"UnsupportedOperationException: ConjunctionScorer::explain"); + } + + +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/ConstantScoreQuery.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/ConstantScoreQuery.cpp new file mode 100644 index 0000000..98cda26 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/ConstantScoreQuery.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/_ApiHeader.h" +#include "ConstantScoreQuery.h" + +#include "SearchHeader.h" +#include "Scorer.h" +#include "RangeFilter.h" +#include "Similarity.h" +#include "CLucene/index/IndexReader.h" +#include "CLucene/util/BitSet.h" +#include "CLucene/util/StringBuffer.h" +#include "CLucene/util/_StringIntern.h" +#include "CLucene/util/Misc.h" + +CL_NS_USE(index) +CL_NS_USE(util) +CL_NS_DEF(search) + +class ConstantScorer : public Scorer { + BitSet* bits; + const float_t theScore; + int32_t _doc; + bool shouldDelete; + +public: + ConstantScorer(Similarity* similarity, IndexReader* reader, Weight* w, Filter* filter) : Scorer(similarity), + bits(filter->bits(reader)), theScore(w->getValue()), _doc(-1) + { + shouldDelete = filter->shouldDeleteBitSet(bits); + } + virtual ~ConstantScorer() { + if ( shouldDelete) + _CLLDELETE(bits); + } + + bool next() { + _doc = bits->nextSetBit(_doc+1); + return _doc >= 0; + } + + int32_t doc() const { + return _doc; + } + + float_t score() { + return theScore; + } + + bool skipTo(int32_t target) { + _doc = bits->nextSetBit(target); + return _doc >= 0; + } + + Explanation* explain(int32_t /*doc*/) { + _CLTHROWA(CL_ERR_UnsupportedOperation, "Unsupported operation at ConstantScoreQuery::explain"); + } + + TCHAR* toString(){ + return STRDUP_TtoT(_T("ConstantScorer")); + } + + friend class ConstantWeight; +}; + +class ConstantWeight : public Weight { +private: + Similarity* similarity; + float_t queryNorm; + float_t queryWeight; + const ConstantScoreQuery* parentQuery; + +public: + ConstantWeight(ConstantScoreQuery* enclosingInstance, Searcher* searcher) : + similarity(enclosingInstance->getSimilarity(searcher)), + queryNorm(0), queryWeight(0), + parentQuery(enclosingInstance) + { + } + virtual ~ConstantWeight(){} + + Query* getQuery() { + return (Query*)parentQuery; + } + + float_t getValue() { + return queryWeight; + } + + float_t sumOfSquaredWeights() { + queryWeight = parentQuery->getBoost(); + return queryWeight * queryWeight; + } + + void normalize(float_t norm) { + this->queryNorm = norm; + queryWeight *= this->queryNorm; + } + + Scorer* scorer(IndexReader* reader) { + return _CLNEW ConstantScorer(similarity, reader, this, parentQuery->filter); + } + + Explanation* explain(IndexReader* reader, int32_t doc) { + ConstantScorer* cs = (ConstantScorer*)scorer(reader); + bool exists = cs->bits->get(doc); + _CLDELETE(cs); + + ComplexExplanation* result = _CLNEW ComplexExplanation(); + + if (exists) { + StringBuffer buf(100); + buf.append(_T("ConstantScoreQuery(")); + + TCHAR* tmp = parentQuery->filter->toString(); + buf.append(tmp); + _CLDELETE_LCARRAY(tmp); + + buf.append(_T("), product of:")); + + result->setDescription(buf.getBuffer()); + result->setValue(queryWeight); + result->setMatch(true); + result->addDetail(_CLNEW Explanation(parentQuery->getBoost(), _T("boost"))); + result->addDetail(_CLNEW Explanation(queryNorm, _T("queryNorm"))); + } else { + StringBuffer buf(100); + buf.append(_T("ConstantScoreQuery(")); + + TCHAR* tmp = parentQuery->filter->toString(); + buf.append(tmp); + _CLDELETE_LCARRAY(tmp); + + buf.append(_T(") doesn't match id ")); + buf.appendInt(doc); + + result->setDescription(buf.getBuffer()); + result->setValue(0); + result->setMatch(true); + } + + _CLLDELETE(cs); + return result; + } +}; + +ConstantScoreQuery::ConstantScoreQuery(Filter* _filter) : filter(_filter) { +} + +ConstantScoreQuery::~ConstantScoreQuery() { + _CLLDELETE(filter); +} + +Filter* ConstantScoreQuery::getFilter() const { + return filter; +} + +Query* ConstantScoreQuery::rewrite(IndexReader* reader) { + return this; +} + +void ConstantScoreQuery::extractTerms( TermSet * termset ) const +{ + // OK to not add any terms when used for MultiSearcher, + // but may not be OK for highlighting +} + +Weight* ConstantScoreQuery::_createWeight(Searcher* searcher) { + return _CLNEW /*ConstantScoreQuery::*/ConstantWeight(this, searcher); +} + +TCHAR* ConstantScoreQuery::toString(const TCHAR* /*field*/) const +{ + StringBuffer buf; + buf.append(_T("ConstantScore(")); + TCHAR* tmp = filter->toString(); + buf.append(tmp); + _CLLDELETE(tmp); + buf.appendBoost(getBoost()); + buf.appendChar(_T(')')); + return buf.giveBuffer(); +} + +// TODO: Filter is missing an equals() function, hence this equals() is incomplete +bool ConstantScoreQuery::equals(Query* o) const { + if (this == o) return true; + if (!(o->instanceOf("ConstantScoreQuery"))) return false; + ConstantScoreQuery* other = (ConstantScoreQuery*)o; + return this->getBoost()==other->getBoost() + /*&& filter->equals(other->filter)*/; +} + +// TODO: Filter is missing hashCode() +size_t ConstantScoreQuery::hashCode() const { + // Simple add is OK since no existing filter hashcode has a float component. + //return filter->hashCode() + FloatToIntBits(getBoost()); + return 0; +} + +ConstantScoreQuery::ConstantScoreQuery( const ConstantScoreQuery& copy ) : filter(copy.getFilter()->clone()) +{ +} + +const char* ConstantScoreQuery::getObjectName() const { return "ConstantScoreQuery"; } +Query* ConstantScoreQuery::clone() const{ + return _CLNEW ConstantScoreQuery(*this); +} + +ConstantScoreRangeQuery::ConstantScoreRangeQuery( const ConstantScoreRangeQuery& copy ): + fieldName(const_cast(CLStringIntern::intern(copy.fieldName))), + lowerVal(STRDUP_TtoT(copy.lowerVal)), upperVal(STRDUP_TtoT(copy.upperVal)), + includeLower(copy.includeLower),includeUpper(copy.includeUpper) +{ +} + +ConstantScoreRangeQuery::ConstantScoreRangeQuery(const TCHAR* _fieldName, const TCHAR* _lowerVal, const TCHAR* _upperVal, + bool _includeLower, bool _includeUpper) : fieldName(NULL), lowerVal(NULL), upperVal(NULL) +{ + // do a little bit of normalization... + // open ended range queries should always be inclusive. + if (_lowerVal==NULL) { + _includeLower=true; + } else if (_includeLower && _tcscmp(_lowerVal, _T(""))==0) { + _lowerVal=NULL; + } + if (_upperVal==NULL) { + _includeUpper=true; + } + + this->fieldName = const_cast(CLStringIntern::intern(_fieldName)); // intern it, just like terms... + if (_lowerVal != NULL) + this->lowerVal = STRDUP_TtoT(_lowerVal); + if (_upperVal != NULL) + this->upperVal = STRDUP_TtoT(_upperVal); + this->includeLower = _includeLower; + this->includeUpper = _includeUpper; +} +ConstantScoreRangeQuery::~ConstantScoreRangeQuery(){ + _CLDELETE_LCARRAY(lowerVal); + _CLDELETE_LCARRAY(upperVal); + CLStringIntern::unintern(this->fieldName); +} + +Query* ConstantScoreRangeQuery::rewrite(CL_NS(index)::IndexReader* reader) { + // Map to RangeFilter semantics which are slightly different... + const TCHAR* lowerSafe = lowerVal!=NULL?lowerVal:_T(""); + RangeFilter* rangeFilt = _CLNEW RangeFilter(fieldName, + lowerSafe, + upperVal, + (_tcscmp(lowerSafe, _T(""))==0)?false:includeLower, + upperVal==NULL?false:includeUpper); + Query* q = _CLNEW ConstantScoreQuery(rangeFilt); + q->setBoost(getBoost()); + return q; +} + +TCHAR* ConstantScoreRangeQuery::toString(const TCHAR* field) const +{ + StringBuffer buffer(30); + if (_tcscmp(getField(), field) != 0) + { + buffer.append(getField()); + buffer.appendChar(_T(':')); + } + buffer.appendChar(includeLower ? _T('[') : _T('{')); + buffer.append(lowerVal != NULL ? lowerVal : _T("*")); + buffer.append(_T(" TO ")); + buffer.append(upperVal != NULL ? upperVal : _T("*")); + buffer.appendChar(includeUpper ? _T(']') : _T('}')); + buffer.appendBoost(getBoost()); + return buffer.giveBuffer(); +} + +bool ConstantScoreRangeQuery::equals(Query* o) const { + if (this == o) return true; + if (!(o->instanceOf("ConstantScoreRangeQuery"))) return false; + ConstantScoreRangeQuery* other = (ConstantScoreRangeQuery*) o; + + if (this->fieldName != other->fieldName // interned comparison + || this->includeLower != other->includeLower + || this->includeUpper != other->includeUpper + ) { return false; } + if (this->lowerVal != NULL ? _tcscmp(this->lowerVal, other->lowerVal) != 0 : other->lowerVal != NULL) return false; + if (this->upperVal != NULL ? _tcscmp(this->upperVal, other->upperVal) != 0 : other->upperVal != NULL) return false; + return this->getBoost() == other->getBoost(); +} + +// TODO: Complete this +size_t ConstantScoreRangeQuery::hashCode() const +{ + int32_t h = Similarity::floatToByte( getBoost() ) ^ Misc::thashCode( fieldName ); + // hashCode of "" is 0, so don't use that for null... + + h ^= ( lowerVal != NULL ) ? Misc::thashCode( lowerVal ) : 0x965a965a; + // don't just XOR upperVal with out mixing either it or h, as it will cancel + // out lowerVal if they are equal. + + h ^= (h << 17) | (h >> 16); // a reversible (one to one) 32 bit mapping mix + h ^= (upperVal != NULL) ? Misc::thashCode( upperVal ) : 0x5a695a69; + h ^= (includeLower ? 0x665599aa : 0) ^ (includeUpper ? 0x99aa5566 : 0); + + return h; +} + +const char* ConstantScoreRangeQuery::getObjectName() const { return "ConstantScoreRangeQuery"; } +Query* ConstantScoreRangeQuery::clone() const{ + return _CLNEW ConstantScoreRangeQuery(*this); +} + +CL_NS_END + diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/ConstantScoreQuery.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/ConstantScoreQuery.h new file mode 100644 index 0000000..e6278db --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/ConstantScoreQuery.h @@ -0,0 +1,125 @@ +/*------------------------------------------------------------------------------ +* 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_ConstantScoreQuery_ +#define _lucene_search_ConstantScoreQuery_ + +CL_CLASS_DEF(index,IndexReader) + +#include "Query.h" +#include "Filter.h" +#include "Explanation.h" + +CL_NS_DEF(search) + +/** + * A query that wraps a filter and simply returns a constant score equal to the + * query boost for every document in the filter. + * + */ +class CLUCENE_EXPORT ConstantScoreQuery : public Query { +protected: + Filter* filter; + +public: + /** + * Constructs a new ConstantScoreQuery, and takes ownership of the filter object + * + * @memory this object consumes _filter + */ + ConstantScoreQuery(Filter* _filter); + virtual ~ConstantScoreQuery(); + + /** Returns the encapsulated filter */ + Filter* getFilter() const; + + Query* rewrite(CL_NS(index)::IndexReader* reader); + + /** Constant score query does not return any terms */ + void extractTerms( TermSet * termset ) const; + +protected: + Weight* _createWeight(Searcher* searcher); + +public: + /** Prints a user-readable version of this query. */ + TCHAR* toString(const TCHAR* field) const; + + /** Returns true if o is equal to this. */ + bool equals(Query* o) const; + + /** Returns a hash code value for this object. */ + size_t hashCode() const; + + const char* getObjectName() const; + static const char* getClassName(){ return "ConstantScoreQuery"; } + Query* clone() const; + + friend class ConstantWeight; + +protected: + ConstantScoreQuery( const ConstantScoreQuery& copy ); +}; + + +/** + * A range query that returns a constant score equal to its boost for + * all documents in the range. + *

+ * It does not have an upper bound on the number of clauses covered in the range. + *

+ * If an endpoint is null, it is said to be "open". + * Either or both endpoints may be open. Open endpoints may not be exclusive + * (you can't select all but the first or last term without explicitly specifying the term to exclude.) + * + */ +class CLUCENE_EXPORT ConstantScoreRangeQuery : public Query +{ +private: + TCHAR* fieldName; + TCHAR* lowerVal; + TCHAR* upperVal; + bool includeLower; + bool includeUpper; + +public: + ConstantScoreRangeQuery(const TCHAR* _fieldName, const TCHAR* _lowerVal, const TCHAR* _upperVal, + bool _includeLower, bool _includeUpper); + virtual ~ConstantScoreRangeQuery(); + + /** Returns the field name for this query */ + TCHAR* getField() const { return fieldName; } + /** Returns the value of the lower endpoint of this range query, null if open ended */ + TCHAR* getLowerVal() const { return lowerVal; } + /** Returns the value of the upper endpoint of this range query, null if open ended */ + TCHAR* getUpperVal() const { return upperVal; } + /** Returns true if the lower endpoint is inclusive */ + bool includesLower() const { return includeLower; } + /** Returns true if the upper endpoint is inclusive */ + bool includesUpper() const { return includeUpper; } + + Query* rewrite(CL_NS(index)::IndexReader* reader); + + /** Prints a user-readable version of this query. */ + TCHAR* toString(const TCHAR* field) const; + + /** Returns true if o is equal to this. */ + bool equals(Query* o) const; + + /** Returns a hash code value for this object.*/ + size_t hashCode() const; + + const char* getObjectName() const; + static const char* getClassName(){ return "ConstantScoreRangeQuery"; } + Query* clone() const; +protected: + ConstantScoreRangeQuery( const ConstantScoreRangeQuery& copy ); +}; + +CL_NS_END + +#endif + diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/DateFilter.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/DateFilter.cpp new file mode 100644 index 0000000..a8a2825 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/DateFilter.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/_ApiHeader.h" +#include "DateFilter.h" +#include "CLucene/document/DateField.h" +#include "CLucene/index/Term.h" +#include "CLucene/index/IndexReader.h" +#include "CLucene/index/Terms.h" +#include "CLucene/util/BitSet.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 f matching times between + from and to. */ + 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 f matching times before + time. */ + DateFilter* DateFilter::Before(const TCHAR* field, int64_t time) { + return _CLNEW DateFilter(field, 0,time); + } + + /** Constructs a filter for field f matching times after + time. */ + 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/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/DateFilter.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/DateFilter.h new file mode 100644 index 0000000..91b3da8 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/DateFilter.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_DateFilter_ +#define _lucene_search_DateFilter_ + + +//#include "CLucene/document/DateField.h" +CL_CLASS_DEF(index,Term) +//#include "CLucene/index/Terms.h" +//#include "CLucene/index/IndexReader.h" +//#include "CLucene/util/BitSet.h" +#include "Filter.h" + +CL_NS_DEF(search) + + +// Deprecated. Instead, use RangeFilter combined with DateTools. + + + /** + * A Filter that restricts search results to a range of time. + * + *

For this to work, documents must have been indexed with a + * {@link DateField}. + */ + class CLUCENE_EXPORT 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 f matching times between + from and to. */ + DateFilter(const TCHAR* f, int64_t from, int64_t to); + + /** Constructs a filter for field f matching times before + time. */ + static DateFilter* Before(const TCHAR* field, int64_t time) ; + + /** Constructs a filter for field f matching times after + time. */ + 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/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/DisjunctionSumScorer.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/DisjunctionSumScorer.cpp new file mode 100644 index 0000000..6e45658 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/DisjunctionSumScorer.cpp @@ -0,0 +1,201 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "Scorer.h" +#include "ScorerDocQueue.h" +#include "SearchHeader.h" +#include "Explanation.h" + +#include "CLucene/util/StringBuffer.h" + +#include "_DisjunctionSumScorer.h" + + +CL_NS_DEF(search) + +DisjunctionSumScorer::DisjunctionSumScorer( DisjunctionSumScorer::ScorersType* _subScorers, const int32_t _minimumNrMatchers ) : + Scorer( NULL ), + minimumNrMatchers(_minimumNrMatchers), + scorerDocQueue(NULL), + queueSize(-1), + currentDoc(-1), + currentScore(-1.0f), + nrScorers(0), + _nrMatchers(-1) +{ + if ( minimumNrMatchers <= 0 ) { + _CLTHROWA(CL_ERR_IllegalArgument,"Minimum nr of matchers must be positive"); + } + + nrScorers = _subScorers->size(); + + if ( nrScorers <= 1 ) { + _CLTHROWA(CL_ERR_IllegalArgument,"There must be at least 2 subScorers"); + } + + for ( DisjunctionSumScorer::ScorersType::iterator itr = _subScorers->begin(); itr != _subScorers->end(); itr++ ) { + subScorers.push_back( *itr ); + } +} + +DisjunctionSumScorer::~DisjunctionSumScorer() +{ + _CLLDELETE( scorerDocQueue ); +} + +void DisjunctionSumScorer::score( HitCollector* hc ) +{ + while( next() ) { + hc->collect( currentDoc, currentScore ); + } +} + +bool DisjunctionSumScorer::next() +{ + if ( scorerDocQueue == NULL ) { + initScorerDocQueue(); + } + return ( scorerDocQueue->size() >= minimumNrMatchers ) && advanceAfterCurrent(); +} + +float_t DisjunctionSumScorer::score() +{ + return currentScore; +} +int32_t DisjunctionSumScorer::doc() const +{ + return currentDoc; +} + +int32_t DisjunctionSumScorer::nrMatchers() const +{ + return _nrMatchers; +} + +bool DisjunctionSumScorer::skipTo( int32_t target ) +{ + if ( scorerDocQueue == NULL ) { + initScorerDocQueue(); + } + if ( queueSize < minimumNrMatchers ) { + return false; + } + if ( target <= currentDoc ) { + return true; + } + do { + if ( scorerDocQueue->topDoc() >= target ) { + return advanceAfterCurrent(); + } else if ( !scorerDocQueue->topSkipToAndAdjustElsePop( target )) { + if ( --queueSize < minimumNrMatchers ) { + return false; + } + } + } while ( true ); +} + +TCHAR* DisjunctionSumScorer::toString() +{ + return stringDuplicate(_T("DisjunctionSumScorer")); +} + +Explanation* DisjunctionSumScorer::explain( int32_t doc ){ + Explanation* res = _CLNEW Explanation(); + float_t sumScore = 0.0f; + int32_t nrMatches = 0; + ScorersType::iterator ssi = subScorers.begin(); + while (ssi != subScorers.end()) { + Explanation* es = reinterpret_cast(*ssi)->explain(doc); + if (es->getValue() > 0.0f) { // indicates match + sumScore += es->getValue(); + nrMatches++; + } + res->addDetail(es); + ++ssi; + } + + CL_NS(util)::StringBuffer buf(50); + if (_nrMatchers >= minimumNrMatchers) { + buf.append(_T("sum over at least ")); + buf.appendInt(minimumNrMatchers); + buf.append(_T(" of ")); + buf.appendInt(subScorers.size()); + buf.appendChar(_T(':')); + + res->setValue(sumScore); + res->setDescription(buf.getBuffer()); + } else { + buf.appendInt(nrMatches); + buf.append(_T(" match(es) but at least ")); + buf.appendInt(minimumNrMatchers); + buf.append(_T(" of ")); + buf.appendInt(subScorers.size()); + buf.append(_T(" needed")); + + res->setValue(0.0f); + res->setDescription(buf.getBuffer()); + } + return res; +} + +bool DisjunctionSumScorer::score( HitCollector* hc, const int32_t max ) +{ + while ( currentDoc < max ) { + hc->collect( currentDoc, currentScore ); + if ( !next() ) { + return false; + } + } + return true; +} + +bool DisjunctionSumScorer::advanceAfterCurrent() +{ + do { // repeat until minimum nr of matchers + currentDoc = scorerDocQueue->topDoc(); + currentScore = scorerDocQueue->topScore(); + + _nrMatchers = 1; + do { // Until all subscorers are after currentDoc + if ( !scorerDocQueue->topNextAndAdjustElsePop() ) { + if ( --queueSize == 0 ) { + break; // nothing more to advance, check for last match. + } + } + if ( scorerDocQueue->topDoc() != currentDoc ) { + break; // All remaining subscorers are after currentDoc. + } + currentScore += scorerDocQueue->topScore(); + _nrMatchers++; + } while( true ); + + if ( _nrMatchers >= minimumNrMatchers ) { + return true; + } else if ( queueSize < minimumNrMatchers ) { + return false; + } + } while( true ); +} + +void DisjunctionSumScorer::initScorerDocQueue() +{ + // No need to _CLLDELETE here since this function since this function is only called if scorerDocQueue==NULL + scorerDocQueue = _CLNEW ScorerDocQueue( nrScorers ); + queueSize = 0; + + for ( ScorersType::iterator it = subScorers.begin(); it != subScorers.end(); ++it ) { + Scorer* scorer = (Scorer*)(*it); + if ( scorer->next() ) { // doc() method will be used in scorerDocQueue. + if ( scorerDocQueue->insert( scorer )) { + queueSize++; + } + } + } +} + +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/ExactPhraseScorer.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/ExactPhraseScorer.cpp new file mode 100644 index 0000000..6856784 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/ExactPhraseScorer.cpp @@ -0,0 +1,91 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "CLucene/index/Terms.h" +#include "SearchHeader.h" +#include "SearchHeader.h" +#include "Scorer.h" +#include "_ExactPhraseScorer.h" + +CL_NS_USE(index) +CL_NS_DEF(search) + + ExactPhraseScorer::ExactPhraseScorer(Weight* weight, TermPositions** tps, + int32_t* offsets, Similarity* similarity, uint8_t* norms): + PhraseScorer(weight, tps, offsets, 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 + + } + + ExactPhraseScorer::~ExactPhraseScorer(){} + + float_t 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"); + + // sort list with pq + pq->clear(); + + //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(); + + // for counting how many times the exact phrase is found in current document, + // just count how many times all PhrasePosition's have exactly the same position. + int32_t freq = 0; + do { //find position with all terms + while (first->position < last->position){ //scan forward in first + do{ + if (!first->nextPosition()){ + return (float_t)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 (float_t)freq; + } + + TCHAR* ExactPhraseScorer::toString(){ + return stringDuplicate(_T("ExactPhraseScorer")); + } +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/Explanation.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/Explanation.cpp new file mode 100644 index 0000000..57a77ba --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/Explanation.cpp @@ -0,0 +1,176 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "Explanation.h" +#include "CLucene/util/StringBuffer.h" + +CL_NS_USE(util) +CL_NS_DEF(search) + + +Explanation::Explanation(float_t _value, const TCHAR* _description):value(_value),details(NULL) +{ + _tcsncpy(this->description,_description,LUCENE_SEARCH_EXPLANATION_DESC_LEN); +} + +Explanation::Explanation():value(0), details(NULL) +{ + this->description[0]=0; +} + +Explanation::Explanation(const Explanation& copy):details(NULL) +{ + set(copy); +} +void Explanation::set(const Explanation& copy){ + this->value = copy.value; + _tcsncpy(description,copy.description,LUCENE_SEARCH_EXPLANATION_DESC_LEN); + + _CLDELETE(this->details); + + if (copy.details != NULL) { + this->details = _CLNEW CL_NS(util)::CLArrayList >(true); + CL_NS(util)::CLArrayList >::const_iterator itr; + itr = copy.details->begin(); + while ( itr != copy.details->end() ){ + details->push_back( (*itr)->clone() ); + ++itr; + } + } +} +Explanation* Explanation::clone() const{ + return _CLNEW Explanation(*this); +} + +Explanation::~Explanation(){ + _CLLDELETE(this->details); +} + +bool Explanation::isMatch() const { + return (0.0f < getValue()); +} + +float_t Explanation::getValue() const{ + return value; +} +void Explanation::setValue(const float_t value) { + this->value = value; +} + +const TCHAR* Explanation::getDescription() const { + return description; +} +void Explanation::setDescription(const TCHAR* description) { + _tcsncpy(this->description,description,LUCENE_SEARCH_EXPLANATION_DESC_LEN); +} + +TCHAR* Explanation::getSummary() { + StringBuffer buf(210); + buf.appendFloat(getValue(), 2); + buf.append(_T(" = ")); + buf.append(getDescription()); + return buf.giveBuffer(); +} + +size_t Explanation::getDetailsLength() const {return (details==NULL)?0:details->size();} +void Explanation::getDetails(Explanation** ret) { + if (details==NULL){ + ret[0]=NULL; + return; + } + size_t size = details->size(); + for ( size_t i=0;iclone(); + } + ret[size] = NULL; +} +Explanation* Explanation::getDetail(const size_t i){return (*details)[i];} + +void Explanation::addDetail(Explanation* detail) { + if (details==NULL) details = _CLNEW CL_NS(util)::CLArrayList >(true); + details->push_back(detail); +} + +TCHAR* Explanation::toString() { + return toString(0); +} + +TCHAR* Explanation::toString(int32_t depth) { + StringBuffer buffer; + for (int32_t i = 0; i < depth; i++) { + buffer.append(_T(" ")); + } + TCHAR* tSum = getSummary(); + buffer.append(tSum); + _CLDELETE_LCARRAY(tSum); + buffer.appendChar(_T('\n')); + + if (details != NULL){ + for ( size_t j=0;jsize();j++ ){ + TCHAR* tmp = (*details)[j]->toString(depth+1); + buffer.append(tmp); + _CLDELETE_LCARRAY(tmp); + } + } + return buffer.toString(); +} + +TCHAR* Explanation::toHtml() { + StringBuffer buffer; + TCHAR* tmp; + buffer.append(_T("

    \n")); + + buffer.append(_T("
  • ")); + TCHAR* tSum = getSummary(); + buffer.append(tSum); + _CLDELETE_LCARRAY(tSum); + buffer.append(_T("
    \n")); + + if (details != NULL){ + for ( size_t i=0;isize();i++ ){ + tmp = (*details)[i]->toHtml(); + buffer.append(tmp); + _CLDELETE_LCARRAY(tmp); + } + } + buffer.append(_T("
  • \n")); + buffer.append(_T("
\n")); + + return buffer.toString(); +} + +ComplexExplanation::ComplexExplanation():Explanation(){} +ComplexExplanation::ComplexExplanation(const ComplexExplanation& copy): + Explanation(copy) +{ + this->match = copy.match; +} +ComplexExplanation::ComplexExplanation(const bool _match, const float_t _value, const TCHAR* _description): + Explanation(_value, _description), match(_match) +{ +} +ComplexExplanation::~ComplexExplanation(){ +} + +bool ComplexExplanation::getMatch() const { return match; } +void ComplexExplanation::setMatch(const bool _match) { this->match = _match; } +bool ComplexExplanation::isMatch() const {return getMatch();} + +TCHAR* ComplexExplanation::getSummary() { + StringBuffer buf(220); + buf.appendFloat(getValue(),2); + buf.append(_T(" = ")); + buf.append(isMatch() ? _T("(MATCH) ") : _T("(NON-MATCH) ")); + buf.append(getDescription()); + return buf.giveBuffer(); +} + +Explanation* ComplexExplanation::clone() const{ + return _CLNEW ComplexExplanation(*this); +} + +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/Explanation.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/Explanation.h new file mode 100644 index 0000000..a99ba8e --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/Explanation.h @@ -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. +------------------------------------------------------------------------------*/ +#ifndef _lucene_search_Explanation +#define _lucene_search_Explanation + +#include "CLucene/util/VoidList.h" + +CL_NS_DEF(search) + +#define LUCENE_SEARCH_EXPLANATION_DESC_LEN 200 + +/** Expert: Describes the score computation for document and query. */ +class CLUCENE_EXPORT Explanation { +private: + float_t value; // the value of this node + TCHAR description[LUCENE_SEARCH_EXPLANATION_DESC_LEN]; // what it represents + CL_NS(util)::CLArrayList >* details; // sub-explanations + +public: + Explanation(); + Explanation(float_t _value, const TCHAR* _description); + virtual ~Explanation(); + + /** + * Indicates whether or not this Explanation models a good match. + * + *

+ * By default, an Explanation represents a "match" if the value is positive. + *

+ * @see #getValue + */ + virtual bool isMatch() const; + + /** The value assigned to this explanation node. */ + float_t getValue() const; + /** Sets the value assigned to this explanation node. */ + void setValue(const float_t value); + + /** A description of this explanation node. */ + const TCHAR* getDescription() const; /// + * If the match statis is explicitly set (ie: not null) this method + * uses it; otherwise it defers to the superclass. + *

+ * @see #getMatch + */ + bool isMatch() const; + + Explanation* clone() const; + +protected: + TCHAR* getSummary(); +}; + +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/FieldCache.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/FieldCache.cpp new file mode 100644 index 0000000..f2f3a28 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/FieldCache.cpp @@ -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. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "FieldCache.h" +#include "_FieldCacheImpl.h" +#include "Sort.h" + +CL_NS_DEF(search) + +FieldCache* FieldCache_DEFAULT = NULL; +int32_t FieldCache::STRING_INDEX = -1; + +FieldCache* FieldCache::DEFAULT(){ + if ( FieldCache_DEFAULT == NULL ) + FieldCache_DEFAULT = _CLNEW FieldCacheImpl(); + return FieldCache_DEFAULT; +} +void FieldCache::_shutdown(){ + _CLDELETE(FieldCache_DEFAULT); +} + +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;ifield as integers and returns an array + * of size reader.maxDoc() 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 field as floats and returns an array + * of size reader.maxDoc() 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 field and returns an array + * of size reader.maxDoc() 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 field 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 field 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 AUTO and the actual found type. + * @param reader Used to get field values. + * @param field Which field contains the values. + * @return int32_t[], float_t[] 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 field and calls the given SortComparator + * to get the sort values. A hit in the cache will happen if reader, + * field, and comparator are the same (using equals()) + * 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; + + /** Cleanup static data */ + static CLUCENE_LOCAL void _shutdown(); +}; + +/** 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 CLUCENE_EXPORT 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 + float_t* 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/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/FieldCacheImpl.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/FieldCacheImpl.cpp new file mode 100644 index 0000000..bc3a29c --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/FieldCacheImpl.cpp @@ -0,0 +1,577 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "_FieldCacheImpl.h" +#include "CLucene/index/IndexReader.h" +#include "CLucene/index/Term.h" +#include "CLucene/index/Terms.h" +#include "CLucene/util/_StringIntern.h" +#include "CLucene/util/Misc.h" +#include "Sort.h" + +CL_NS_USE(util) +CL_NS_USE(index) +CL_NS_DEF(search) + +///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, + CL_NS(util)::Deletor::Object >{ +public: + fieldcacheCacheReaderType(){ + setDeleteKey(false); + setDeleteValue(false); + } + ~fieldcacheCacheReaderType(){ + iterator itr = begin(); + while ( itr != end() ){ + FieldCacheImpl::FileEntry* f = itr->first; + if ( f->getType() != SortField::AUTO ) + _CLDELETE( itr->second ); + _CLDELETE( f ); + ++itr; + } + clear(); + } +}; + +//note: typename gets too long if using cacheReaderType as a typename +class fieldcacheCacheType: public CL_NS(util)::CLHashMap< + CL_NS(index)::IndexReader*, + fieldcacheCacheReaderType*, + CL_NS(util)::Compare::Void, + CL_NS(util)::Equals::Void, + CL_NS(util)::Deletor::Object, + CL_NS(util)::Deletor::Object >{ +public: + fieldcacheCacheType ( const bool deleteKey, const bool deleteValue) + { + setDeleteKey(deleteKey); + setDeleteValue(deleteValue); + } + virtual ~fieldcacheCacheType(){ + + } +}; + +FieldCache::StringIndex::StringIndex (int32_t* values, TCHAR** lookup, int count) { + this->count = count; + this->order = values; + this->lookup = lookup; +} + +FieldCache::StringIndex::~StringIndex(){ + _CLDELETE_ARRAY(order); + + for ( int i=0;iclear(); + _CLDELETE(cache); +} + +FieldCacheImpl::FileEntry::FileEntry (const TCHAR* field, int32_t type) { + this->field = CLStringIntern::intern(field); + 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); + 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); + 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; + + int32_t termval = _ttoi(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::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); + FieldCacheAuto* ret = lookup (reader, field, SortField::FLOAT); + if (ret == NULL) { + int32_t retLen = reader->maxDoc(); + float_t* retArray = _CL_NEWARRAY(float_t,retLen); + memset(retArray,0,sizeof(float_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: make richer error + field); + } + do { + Term* term = termEnum->term(false); + if (term->field() != field) + break; + + float_t termval = _tcstod(term->text(),NULL); + 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); + 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); + 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(tclose(); + _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); + 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;iclose(); _CLDELETE(enumerator) ); + + } + CLStringIntern::unintern(field); + return ret; + } + + + // inherit javadocs + FieldCacheAuto* FieldCacheImpl::getCustom (IndexReader* reader, const TCHAR* field, SortComparator* comparator){ + field = CLStringIntern::intern(field); + + 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; + } + + +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/FieldDoc.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/FieldDoc.h new file mode 100644 index 0000000..07835c9 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/FieldDoc.h @@ -0,0 +1,52 @@ +/*------------------------------------------------------------------------------ +* 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_ + +#include "SearchHeader.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 fields 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 CLUCENE_EXPORT 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, float_t score); + /** Expert: Creates one of these objects with the given sort information. */ + FieldDoc (int32_t doc, float_t score, CL_NS(util)::Comparable** fields); + ~FieldDoc(); +}; + +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/FieldDocSortedHitQueue.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/FieldDocSortedHitQueue.cpp new file mode 100644 index 0000000..67e4939 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/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/_ApiHeader.h" +#include "_FieldDocSortedHitQueue.h" + + +CL_NS_USE(util) +CL_NS_DEF(search) + + +FieldDoc::FieldDoc (int32_t doc, float_t score) +{ + this->scoreDoc.doc = doc; + this->scoreDoc.score = score; + fields=NULL; +} + +FieldDoc::FieldDoc (int32_t doc, float_t 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) { + const int32_t n = fieldsLen; + int32_t c = 0; + float_t f1,f2,r1,r2; + int32_t i1,i2; + const TCHAR *s1, *s2; + + for (int32_t i=0; igetType(); + if (fields[i]->getReverse()) { + switch (type) { + case SortField::DOCSCORE: + r1 = reinterpret_cast(docA->fields[i])->getValue(); + r2 = reinterpret_cast(docB->fields[i])->getValue(); + if (r1 < r2) c = -1; + if (r1 > r2) c = 1; + break; + case SortField::DOC: + case SortField::INT: + i1 = reinterpret_cast(docA->fields[i])->getValue(); + i2 = reinterpret_cast(docB->fields[i])->getValue(); + if (i1 > i2) c = -1; + if (i1 < i2) c = 1; + break; + case SortField::STRING: + s1 = reinterpret_cast(docA->fields[i])->getValue(); + s2 = reinterpret_cast(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(docA->fields[i])->getValue(); + f2 = reinterpret_cast(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 (float_t or + // Integer), we don't necessarily know how to compare them (both SCORE and + // float_t 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(docA->fields[i])->getValue(); + r2 = reinterpret_cast(docB->fields[i])->getValue(); + if (r1 > r2) c = -1; + if (r1 < r2) c = 1; + break; + case SortField::DOC: + case SortField::INT: + i1 = reinterpret_cast(docA->fields[i])->getValue(); + i2 = reinterpret_cast(docB->fields[i])->getValue(); + if (i1 < i2) c = -1; + if (i1 > i2) c = 1; + break; + case SortField::STRING: + s1 = reinterpret_cast(docA->fields[i])->getValue(); + s2 = reinterpret_cast(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(docA->fields[i])->getValue(); + f2 = reinterpret_cast(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 (float_t or + // Integer), we don't necessarily know how to compare them (both SCORE and + // float_t 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/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/FieldSortedHitQueue.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/FieldSortedHitQueue.cpp new file mode 100644 index 0000000..ef6100c --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/FieldSortedHitQueue.cpp @@ -0,0 +1,258 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "FieldSortedHitQueue.h" +#include "_FieldDocSortedHitQueue.h" +#include "_FieldCacheImpl.h" +#include "Compare.h" +#include "CLucene/index/IndexReader.h" + +CL_NS_USE(util) +CL_NS_USE(index) +CL_NS_DEF(search) + + +//note: typename gets too long if using cacheReaderType as a typename +class hitqueueCacheType: public CL_NS(util)::CLHashMap, + CL_NS(util)::Equals::Void, + CL_NS(util)::Deletor::Object, + CL_NS(util)::Deletor::Object >{ +public: + hitqueueCacheType(bool deleteKey, bool deleteValue){ + setDeleteKey(deleteKey); + setDeleteValue(deleteValue); + } + ~hitqueueCacheType(){ + clear(); + } +}; + + +///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, + CL_NS(util)::Deletor::Object >{ + +public: + hitqueueCacheReaderType(bool deleteValue){ + setDeleteKey(true); + setDeleteValue(deleteValue); + } + ~hitqueueCacheReaderType(){ + clear(); + } +}; + +hitqueueCacheType* FieldSortedHitQueue::Comparators = _CLNEW hitqueueCacheType(false,true); +DEFINE_MUTEX(FieldSortedHitQueue::Comparators_LOCK) + +void FieldSortedHitQueue::_shutdown(){ + Comparators->clear(); + _CLDELETE(Comparators); +} + +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; igetField(); + //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 && igetReverse()) ? 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); + 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); + 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); + 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); + 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; isortValue(&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_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_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_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/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/FieldSortedHitQueue.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/FieldSortedHitQueue.h new file mode 100644 index 0000000..4a82762 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/FieldSortedHitQueue.h @@ -0,0 +1,196 @@ +/*------------------------------------------------------------------------------ +* 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_ + + +CL_CLASS_DEF(search,FieldDoc) +CL_CLASS_DEF(search,SortComparatorSource) +CL_CLASS_DEF(search,SortField) +#include "FieldDoc.h" //required to expose destructor +#include "CLucene/util/PriorityQueue.h" +#include "CLucene/util/Equators.h" +#include "CLucene/LuceneThreads.h" + +CL_CLASS_DEF(index,IndexReader) + +CL_NS_DEF(search) + +class hitqueueCacheReaderType; +class hitqueueCacheType; +class ScoreDocComparator; + +/** + * Expert: A hit queue for sorting by hits by terms in more than one field. + * Uses FieldCache.DEFAULT for maintaining internal term lookup tables. + * + * @see Searchable#search(Query,Filter,int32_t,Sort) + * @see FieldCache + */ +class CLUCENE_EXPORT FieldSortedHitQueue: public CL_NS(util)::PriorityQueue > { + +public: //todo: remove this and below after close callback is implemented + + /** Internal cache of comparators. Similar to FieldCache, only + * caches comparators instead of term values. + */ + static hitqueueCacheType* Comparators; + STATIC_DEFINE_MUTEX(Comparators_LOCK) + + /** Cleanup static data */ + static CLUCENE_LOCAL void _shutdown(); +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. */ + float_t maxscore; + + /** + * Returns whether a is less relevant than b. + * @param a ScoreDoc + * @param b ScoreDoc + * @return true if document a should be sorted after document b. + */ + 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 null 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/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/Filter.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/Filter.h new file mode 100644 index 0000000..a2c35fc --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/Filter.h @@ -0,0 +1,42 @@ +/*------------------------------------------------------------------------------ +* 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_ + +CL_CLASS_DEF(util,BitSet) +CL_CLASS_DEF(index,IndexReader) + +CL_NS_DEF(search) + // Abstract base class providing a mechanism to restrict searches to a subset + // of an index. + class CLUCENE_EXPORT 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 see {@link #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*) 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/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/FilteredTermEnum.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/FilteredTermEnum.cpp new file mode 100644 index 0000000..9ac7f31 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/FilteredTermEnum.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. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "FilteredTermEnum.h" +#include "CLucene/index/Term.h" + +CL_NS_USE(index) +CL_NS_DEF(search) + + +FilteredTermEnum::FilteredTermEnum():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(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"); + + _CLLDELETE(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/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/FilteredTermEnum.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/FilteredTermEnum.h new file mode 100644 index 0000000..39385df --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/FilteredTermEnum.h @@ -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. +------------------------------------------------------------------------------*/ +#ifndef _lucene_search_FilteredTermEnum_ +#define _lucene_search_FilteredTermEnum_ + + +CL_CLASS_DEF(index,Term) +#include "CLucene/index/Terms.h" + +CL_NS_DEF(search) +/** 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 CLUCENE_EXPORT FilteredTermEnum: public CL_NS(index)::TermEnum { +public: + FilteredTermEnum(); + virtual ~FilteredTermEnum(); + + /** Equality measure on the term */ + virtual float_t difference() = 0; + + /** + * Returns the docFreq of the current Term in the enumeration. + * Returns -1 if no Term matches or all terms have been enumerated. + */ + int32_t docFreq() const; + + /** Increments the enumeration to the next element. True if one exists. */ + bool next() ; + + /** Returns the current Term in the enumeration. + * Returns null if no Term matches or all terms have been enumerated. */ + CL_NS(index)::Term* term(bool pointer=true); + + /** 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; + + /** Indicates 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/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/FuzzyQuery.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/FuzzyQuery.cpp new file mode 100644 index 0000000..16071a0 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/FuzzyQuery.cpp @@ -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. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "CLucene/index/Term.h" +#include "CLucene/index/IndexReader.h" +#include "Similarity.h" +#include "FuzzyQuery.h" +#include "BooleanQuery.h" +#include "BooleanClause.h" +#include "TermQuery.h" + +#include "CLucene/util/StringBuffer.h" +#include "CLucene/util/PriorityQueue.h" + +CL_NS_USE(index) +CL_NS_USE(util) +CL_NS_DEF(search) + + +/** 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; + + + FuzzyTermEnum::FuzzyTermEnum(IndexReader* reader, Term* term, float_t minSimilarity, size_t _prefixLength): + FilteredTermEnum(),d(NULL),dLen(0),_similarity(0),_endEnum(false),searchTerm(_CL_POINTER(term)), + text(NULL),textLen(0),prefix(NULL)/* ISH: was STRDUP_TtoT(LUCENE_BLANK_STRING)*/,prefixLength(0), + minimumSimilarity(minSimilarity) + { + CND_PRECONDITION(term != NULL,"term is NULL"); + + if (minSimilarity >= 1.0f) + _CLTHROWA(CL_ERR_IllegalArgument,"minimumSimilarity cannot be greater than or equal to 1"); + else if (minSimilarity < 0.0f) + _CLTHROWA(CL_ERR_IllegalArgument,"minimumSimilarity cannot be less than 0"); + + scale_factor = 1.0f / (1.0f - minimumSimilarity); // only now we are safe from a division by zero + //TODO: this.field = searchTerm.field(); + + //The prefix could be longer than the word. + //It's kind of silly though. It means we must match the entire word. + const size_t fullSearchTermLength = searchTerm->textLength(); + const size_t realPrefixLength = _prefixLength > fullSearchTermLength ? fullSearchTermLength : _prefixLength; + + text = STRDUP_TtoT(searchTerm->text() + realPrefixLength); + textLen = fullSearchTermLength - realPrefixLength; + + prefix = _CL_NEWARRAY(TCHAR,realPrefixLength+1); + _tcsncpy(prefix, searchTerm->text(), realPrefixLength); + prefix[realPrefixLength]='\0'; + prefixLength = realPrefixLength; + + initializeMaxDistances(); + + Term* trm = _CLNEW Term(searchTerm->field(), prefix); // _CLNEW Term(term, prefix); -- not intern'd? + setEnum(reader->terms(trm)); + _CLLDECDELETE(trm); + + + /* LEGACY: + //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'; + } + */ + } + + FuzzyTermEnum::~FuzzyTermEnum(){ + close(); + } + + const char* FuzzyTermEnum::getObjectName() const{ return getClassName(); } + const char* FuzzyTermEnum::getClassName(){ return "FuzzyTermEnum"; } + + bool FuzzyTermEnum::endEnum() { + return _endEnum; + } + + void FuzzyTermEnum::close(){ + + FilteredTermEnum::close(); + + //Finalize the searchTerm + _CLDECDELETE(searchTerm); + + free(d); + d=NULL; + + _CLDELETE_CARRAY(text); + + _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(); + const 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; + const size_t targetLen = termTextLen-prefixLength; + _similarity = similarity(target, targetLen); + return (_similarity > minimumSimilarity); + } + _endEnum = true; + return false; + } + + float_t FuzzyTermEnum::difference() { + return (float_t)((_similarity - minimumSimilarity) * scale_factor ); + } + + // TODO: had synchronized in definition + float_t FuzzyTermEnum::similarity(const TCHAR* target, const size_t m) { + const size_t n = textLen; // TODO: remove after replacing n with textLen + if (n == 0) { + //we don't have anything to compare. That means if we just add + //the letters for m we get the new word + return prefixLength == 0 ? 0.0f : 1.0f - ((float_t) m / prefixLength); + } + if (m == 0) { + return prefixLength == 0 ? 0.0f : 1.0f - ((float_t) n / prefixLength); + } + + const uint32_t maxDistance = getMaxDistance(m); + + if ( maxDistance < (uint32_t)(abs((int32_t)(m-n))) ) { + //just adding the characters of m to n or vice-versa results in + //too many edits + //for example "pre" length is 3 and "prefixes" length is 8. We can see that + //given this optimal circumstance, the edit distance cannot be less than 5. + //which is 8-3 or more precisesly Math.abs(3-8). + //if our maximum edit distance is 4, then we can discard this word + //without looking at it. + return 0.0f; + } + + //let's make sure we have enough room in our array to do the distance calculations. + //Check if the array must be reallocated because it is too small or does not exist + size_t dWidth = n+1; + size_t dHeight = m+1; + if (d == NULL){ + dLen = dWidth*dHeight; + d = (int32_t*)(malloc(sizeof(int32_t)*dLen)); + } else if (dLen < dWidth*dHeight) { + dLen = dWidth*dHeight; + d = (int32_t*)(realloc(d, sizeof(int32_t)*dLen)); + } + memset(d,0,dLen); + + size_t i; // iterates through the source string + size_t j; // iterates through the target string + + // init matrix d + for (i = 0; i <= n; i++){ + d[i + (0*dWidth)] = i; + } + for (j = 0; j <= m; j++){ + d[0 + (j*dWidth)] = j; + } + + int32_t __t; //temporary variable for min3 + + // start computing edit distance + TCHAR s_i; // ith character of s + for (i = 1; i <= n; i++) { + size_t bestPossibleEditDistance = m; + s_i = text[i - 1]; + for (j = 1; j <= m; j++) { + if (s_i != target[j-1]) { + min3(d[i-1 + (j*dWidth)], d[i + ((j-1)*dWidth)], d[i-1 + ((j-1)*dWidth)]); + d[i + (j*dWidth)] = __t+1; + } + else { + min3(d[i-1 + (j*dWidth)]+1, d[i + ((j-1)*dWidth)]+1, d[i-1 + ((j-1)*dWidth)]); + d[i + (j*dWidth)] = __t; + } + bestPossibleEditDistance = cl_min(bestPossibleEditDistance, d[i + (j*dWidth)]); + } + + //After calculating row i, the best possible edit distance + //can be found by finding the smallest value in a given column. + //If the bestPossibleEditDistance is greater than the max distance, abort. + + if (i > maxDistance && bestPossibleEditDistance > maxDistance) { //equal is okay, but not greater + //the closest the target can be to the text is just too far away. + //this target is leaving the party early. + return 0.0f; + } + } + + // this will return less than 0.0 when the edit distance is + // greater than the number of characters in the shorter word. + // but this was the formula that was previously used in FuzzyTermEnum, + // so it has not been changed (even though minimumSimilarity must be + // greater than 0.0) + return 1.0f - ((float_t)d[n + m*dWidth] / (float_t) (prefixLength + cl_min(n, m))); + } + + int32_t FuzzyTermEnum::getMaxDistance(const size_t m) { + return (m < LUCENE_TYPICAL_LONGEST_WORD_IN_INDEX) ? maxDistances[m] : calculateMaxDistance(m); + } + + void FuzzyTermEnum::initializeMaxDistances() { + for (int32_t i = 0; i < LUCENE_TYPICAL_LONGEST_WORD_IN_INDEX; i++) { + maxDistances[i] = calculateMaxDistance(i); + } + } + + int32_t FuzzyTermEnum::calculateMaxDistance(const size_t m) const { + return (int32_t) ((1-minimumSimilarity) * (cl_min(textLen, m) + prefixLength)); + } + + // TODO: Make ScoreTerm and ScoreTermQueue reside under FuzzyQuery + class ScoreTerm { + public: + Term* term; + float_t score; + + ScoreTerm(Term* _term, float_t _score):term(_term),score(_score){ + } + virtual ~ScoreTerm(){ + _CLLDECDELETE(term); + } + }; + + class ScoreTermQueue : public PriorityQueue > { + public: + ScoreTermQueue(int32_t size){ + initialize(size, true); + } + virtual ~ScoreTermQueue(){ + } + + protected: + bool lessThan(ScoreTerm* termA, ScoreTerm* termB) { + if (termA->score == termB->score) + return termA->term->compareTo(termB->term) > 0; + else + return termA->score < termB->score; + } + }; + + + FuzzyQuery::FuzzyQuery(Term* term, float_t _minimumSimilarity, size_t _prefixLength): + MultiTermQuery(term), + minimumSimilarity(_minimumSimilarity), + prefixLength(_prefixLength) + { + if ( minimumSimilarity < 0 ) + minimumSimilarity = defaultMinSimilarity; + + 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"); + } + + float_t FuzzyQuery::defaultMinSimilarity = 0.5f; + int32_t FuzzyQuery::defaultPrefixLength = 0; + + FuzzyQuery::~FuzzyQuery(){ + } + + float_t FuzzyQuery::getMinSimilarity() const { + return minimumSimilarity; + } + + size_t FuzzyQuery::getPrefixLength() const { + return prefixLength; + } + + TCHAR* FuzzyQuery::toString(const TCHAR* field) const{ + StringBuffer buffer(100); // TODO: Have a better estimation for the initial buffer length + Term* term = getTerm(false); // no need to increase ref count + if ( field==NULL || _tcscmp(term->field(),field)!=0 ) { + buffer.append(term->field()); + buffer.appendChar( _T(':')); + } + buffer.append(term->text()); + buffer.appendChar( _T('~') ); + buffer.appendFloat(minimumSimilarity,1); + buffer.appendBoost(getBoost()); + return buffer.giveBuffer(); + } + + const char* FuzzyQuery::getObjectName() const{ + //Func - Returns the name of the query + //Pre - true + //post - The string FuzzyQuery has been returned + + return getClassName(); + } + const char* FuzzyQuery::getClassName(){ + //Func - Returns the name of the query + //Pre - true + //post - The string FuzzyQuery has been returned + + return "FuzzyQuery"; + } + + 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 + // TODO: does not conform with JL + 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 (this == other) return true; + if (!(other->instanceOf(FuzzyQuery::getClassName()))) + return false; + + FuzzyQuery* fq = static_cast(other); + return (this->getBoost() == fq->getBoost()) + && this->minimumSimilarity == fq->getMinSimilarity() + && this->prefixLength == fq->getPrefixLength() + && getTerm()->equals(fq->getTerm()); + } + + FilteredTermEnum* FuzzyQuery::getEnum(IndexReader* reader){ + Term* term = getTerm(false); + FuzzyTermEnum* ret = _CLNEW FuzzyTermEnum(reader, term, minimumSimilarity, prefixLength); + return ret; + } + + Query* FuzzyQuery::rewrite(IndexReader* reader) { + FilteredTermEnum* enumerator = getEnum(reader); + const size_t maxClauseCount = BooleanQuery::getMaxClauseCount(); + ScoreTermQueue* stQueue = _CLNEW ScoreTermQueue(maxClauseCount); + ScoreTerm* reusableST = NULL; + + try { + do { + float_t score = 0.0f; + Term* t = enumerator->term(); + if (t != NULL) { + score = enumerator->difference(); + if (reusableST == NULL) { + reusableST = _CLNEW ScoreTerm(t, score); + } else if (score >= reusableST->score) { + // reusableST holds the last "rejected" entry, so, if + // this new score is not better than that, there's no + // need to try inserting it + reusableST->score = score; + reusableST->term = t; + } else { + continue; + } + + reusableST = stQueue->insertWithOverflow(reusableST); + } + } while (enumerator->next()); + } _CLFINALLY({ + enumerator->close(); + _CLLDELETE(enumerator); + //_CLLDELETE(reusableST); + }); + + BooleanQuery* query = _CLNEW BooleanQuery(true); + const size_t size = stQueue->size(); + for(size_t i = 0; i < size; i++){ + ScoreTerm* st = stQueue->pop(); + TermQuery* tq = _CLNEW TermQuery(st->term); // found a match + tq->setBoost(getBoost() * st->score); // set the boost + query->add(tq, true, BooleanClause::SHOULD); // add to query + _CLLDELETE(st); + } + _CLLDELETE(stQueue); + + return query; + } + + +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/FuzzyQuery.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/FuzzyQuery.h new file mode 100644 index 0000000..9c8a58a --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/FuzzyQuery.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_search_FuzzyQuery_ +#define _lucene_search_FuzzyQuery_ + +#include "MultiTermQuery.h" +#include "FilteredTermEnum.h" + +CL_CLASS_DEF(index,Term) + +CL_NS_DEF(search) + +/** Implements the fuzzy search query. The similiarity measurement +* is based on the Levenshtein (edit distance) algorithm. +*/ +class CLUCENE_EXPORT FuzzyQuery : public MultiTermQuery { +private: + float_t minimumSimilarity; + size_t prefixLength; +protected: + FuzzyQuery(const FuzzyQuery& clone); +public: + static float_t defaultMinSimilarity; + static int32_t defaultPrefixLength; + + /** + * Create a new FuzzyQuery that will match terms with a similarity + * of at least minimumSimilarity to term. + * If a prefixLength > 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 + * minimumSimilarity of 0.5 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 length(term)*0.5 + * @param prefixLength length of common (non-fuzzy) prefix + * @throws IllegalArgumentException if minimumSimilarity is > 1 or < 0 + * or if prefixLength < 0 or > term.text().length(). + */ + FuzzyQuery(CL_NS(index)::Term* term, float_t minimumSimilarity=-1, size_t prefixLength=0); + virtual ~FuzzyQuery(); + + /** + * Returns the minimum similarity that is required for this query to match. + * @return float value between 0.0 and 1.0 + */ + float_t 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; + + Query* rewrite(CL_NS(index)::IndexReader* reader); + + TCHAR* toString(const TCHAR* field) const; + + //Returns the name "FuzzyQuery" + static const char* getClassName(); + const char* getObjectName() const; + + Query* clone() const; + bool equals(Query * other) const; + size_t hashCode() const; + +protected: + FilteredTermEnum* getEnum(CL_NS(index)::IndexReader* reader); +}; + +/** 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 CLUCENE_EXPORT FuzzyTermEnum: public FilteredTermEnum { +private: + /* Allows us save time required to create a new array + * everytime similarity is called. + */ + int32_t* d; + size_t dLen; + + //float_t distance; + float_t _similarity; + bool _endEnum; + + CL_NS(index)::Term* searchTerm; + //String field; + TCHAR* text; + size_t textLen; + TCHAR* prefix; + size_t prefixLength; + + float_t minimumSimilarity; + double scale_factor; + int32_t maxDistances[LUCENE_TYPICAL_LONGEST_WORD_IN_INDEX]; + + /****************************** + * Compute Levenshtein distance + ******************************/ + + /** + *

Similarity returns a number that is 1.0f or less (including negative numbers) + * based on how similar the Term is compared to a target term. It returns + * exactly 0.0f when + *

+	*    editDistance < maximumEditDistance
+ * Otherwise it returns: + *
+	*    1 - (editDistance / length)
+ * where length is the length of the shortest term (text or target) including a + * prefix that are identical and editDistance is the Levenshtein distance for + * the two words.

+ * + *

Embedded within this algorithm is a fail-fast Levenshtein distance + * algorithm. The fail-fast algorithm differs from the standard Levenshtein + * distance algorithm in that it is aborted if it is discovered that the + * mimimum distance between the words is greater than some threshold. + * + *

To calculate the maximum distance threshold we use the following formula: + *

+	*     (1 - minimumSimilarity) * length
+ * where length is the shortest term including any prefix that is not part of the + * similarity comparision. This formula was derived by solving for what maximum value + * of distance returns false for the following statements: + *
+	*   similarity = 1 - ((float)distance / (float) (prefixLength + Math.min(textlen, targetlen)));
+	*   return (similarity > minimumSimilarity);
+ * where distance is the Levenshtein distance for the two words. + *

+ *

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. + * @param target the target word or phrase + * @return the similarity, 0.0 or less indicates that it matches less than the required + * threshold and 1.0 indicates that the text and target are identical + */ + float_t similarity(const TCHAR* target, const size_t targetLen); + + /** + * The max Distance is the maximum Levenshtein distance for the text + * compared to some other value that results in score that is + * better than the minimum similarity. + * @param m the length of the "other value" + * @return the maximum levenshtein distance that we care about + */ + int32_t getMaxDistance(const size_t m); + + void initializeMaxDistances(); + + int32_t calculateMaxDistance(const size_t m) const; + +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: + + /** + * Constructor for enumeration of all terms from specified reader which share a prefix of + * length prefixLength with term and which have a fuzzy similarity > + * minSimilarity. + *

+ * After calling the constructor the enumeration is already pointing to the first + * valid term if such a term exists. + * + * @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(CL_NS(index)::IndexReader* reader, CL_NS(index)::Term* term, float_t minSimilarity=FuzzyQuery::defaultMinSimilarity, size_t prefixLength=0); + virtual ~FuzzyTermEnum(); + + /** Close the enumeration */ + void close(); + + /** Returns the difference between the distance and the fuzzy threshold + * multiplied by the scale factor + */ + float_t difference(); + + const char* getObjectName() const; + static const char* getClassName(); +}; + +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/HitQueue.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/HitQueue.cpp new file mode 100644 index 0000000..0d4191b --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/HitQueue.cpp @@ -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. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "SearchHeader.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 = new ScoreDoc[heapSize]; +} +HitQueue::~HitQueue(){ + delete [] 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/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/Hits.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/Hits.cpp new file mode 100644 index 0000000..3fe3de9 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/Hits.cpp @@ -0,0 +1,218 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "Hits.h" +#include "SearchHeader.h" +#include "CLucene/document/Document.h" +#include "CLucene/index/IndexReader.h" +#include "Filter.h" +#include "CLucene/search/SearchHeader.h" +#include "CLucene/search/IndexSearcher.h" + +CL_NS_USE(document) +CL_NS_USE(util) +CL_NS_USE(index) + +CL_NS_DEF(search) + + + + HitDoc::HitDoc(const float_t 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 + + _CLLDELETE(doc); + } + + + Hits::Hits(Searcher* s, Query* q, Filter* f, const Sort* _sort): + query(q), searcher(s), filter(f), sort(_sort) , _length(0), first(NULL), last(NULL), + numDocs(0), maxDocs(200), nDeletedHits(0), debugCheckedForDeletions(false) + { + //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 + + hitDocs = _CLNEW CL_NS(util)::CLVector >; + nDeletions = countDeletions(s); + + //retrieve 100 initially + getMoreDocs(50); + + _lengthAtStart = _length; + } + + Hits::~Hits(){ + _CLLDELETE(hitDocs); + } + + // count # deletions, return -1 if unknown. + int32_t Hits::countDeletions(CL_NS(search)::Searcher* s) { + int32_t cnt = -1; + if ( s->getObjectName() == IndexSearcher::getClassName() ) { + cnt = s->maxDoc() - static_cast(s)->getReader()->numDocs(); + } + return cnt; + } + + size_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 + + _CLLDELETE( 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; + } + + float_t Hits::score(const int32_t n){ + return getHitDoc(n)->score; + } + + void Hits::getMoreDocs(const size_t m){ + size_t _min = m; + if ( hitDocs->size() > _min) + _min = hitDocs->size(); + + 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; + size_t scoreDocsLength = topDocs->scoreDocsLength; + + float_t 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 start = hitDocs->size() - nDeletedHits; + + // any new deletions? + int32_t nDels2 = countDeletions(searcher); + debugCheckedForDeletions = false; + if (nDeletions < 0 || nDels2 > nDeletions) { + // either we cannot count deletions, or some "previously valid hits" might have been deleted, so find exact start point + nDeletedHits = 0; + debugCheckedForDeletions = true; + size_t i2 = 0; + for (size_t i1=0; i1size() && i2 < scoreDocsLength; i1++) { + int32_t id1 = ((*hitDocs)[i1])->id; + int32_t id2 = scoreDocs[i2].doc; + if (id1 == id2) { + i2++; + } else { + nDeletedHits++; + } + } + start = i2; + } + + size_t end = scoreDocsLength < _length ? scoreDocsLength : _length; + _length += nDeletedHits; + for (size_t i = start; i < end; i++) { + hitDocs->push_back(_CLNEW HitDoc(scoreDocs[i].score * scoreNorm, scoreDocs[i].doc)); + } + + nDeletions = nDels2; + } + + _CLDELETE(topDocs); + } + + HitDoc* Hits::getHitDoc(const size_t n){ + if (n >= _lengthAtStart){ + TCHAR buf[100]; + _sntprintf(buf, 100,_T("Not a valid hit number: %d"), (int)n); + _CLTHROWT(CL_ERR_IndexOutOfBounds, buf ); + } + if (n >= hitDocs->size()) + getMoreDocs(n); + + if (n >= _length) { + TCHAR buf[100]; + _sntprintf(buf, 100,_T("Not a valid hit number: %d"), (int)n); + _CLTHROWT(CL_ERR_ConcurrentModification, buf ); + } + + 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/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/Hits.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/Hits.h new file mode 100644 index 0000000..7dfb85b --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/Hits.h @@ -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. +------------------------------------------------------------------------------*/ +#ifndef _lucene_search_Hits_h +#define _lucene_search_Hits_h + +#include "CLucene/util/VoidList.h" +CL_CLASS_DEF(index,Term) +CL_CLASS_DEF(document,Document) + +CL_NS_DEF(search) + + class Query; + class Searcher; + class Filter; + class HitDoc; + class Sort; + + /** A ranked list of documents, used to hold search results. + *

+ * Caution: Iterate only over the hits needed. Iterating over all + * hits is generally not desirable and may be the source of + * performance issues. If you need to iterate over many or all hits, consider + * using the search method that takes a {@link HitCollector}. + *

+ *

Note: Deleting matching documents concurrently with traversing + * the hits, might, when deleting hits that were not yet retrieved, decrease + * {@link #length()}. In such case, + * {@link java.util.ConcurrentModificationException ConcurrentModificationException} + * is thrown when accessing hit n ≥ current_{@link #length()} + * (but n < {@link #length()}_at_start). + */ + class CLUCENE_EXPORT Hits { + private: + Query* query; + Searcher* searcher; + Filter* filter; + const Sort* sort; + + size_t _length; // the total number of hits + CL_NS(util)::CLVector >* 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 + + int32_t nDeletions; // # deleted docs in the index. + size_t _lengthAtStart; // this is the number apps usually count on (although deletions can bring it down). + int32_t nDeletedHits; // # of already collected hits that were meanwhile deleted. + + bool debugCheckedForDeletions; // for test purposes. + + /** + * Tries to add new documents to hitDocs. + * Ensures that the hit numbered _min has been retrieved. + */ + void getMoreDocs(const size_t _min); + + /** Returns the score for the nth document in this set. */ + HitDoc* getHitDoc(const size_t n); + + void addToFront(HitDoc* hitDoc); + + void remove(const HitDoc* hitDoc); + + public: + Hits(Searcher* s, Query* q, Filter* f, const Sort* sort=NULL); + virtual ~Hits(); + + /** Returns the total number of hits available in this set. */ + size_t length() const; + + /** Returns the stored fields of the nth document in this set. + *

Documents are cached, so that repeated requests for the same element may + * return the same Document object. + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + * + * @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. + * Note that ids may change when the index changes, so you cannot + * rely on the id to be stable. + */ + int32_t id (const int32_t n); + + /** Returns the score for the nth document in this set. */ + float_t score(const int32_t n); + + /** count # deletions, return -1 if unknown. */ + int32_t countDeletions(CL_NS(search)::Searcher* s); + }; + +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/IndexSearcher.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/IndexSearcher.cpp new file mode 100644 index 0000000..04dbbe1 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/IndexSearcher.cpp @@ -0,0 +1,385 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "IndexSearcher.h" + +#include "SearchHeader.h" +#include "Scorer.h" +#include "_HitQueue.h" +#include "Query.h" +#include "Filter.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" +#include "Explanation.h" + +CL_NS_USE(index) +CL_NS_USE(util) +CL_NS_USE(document) + +CL_NS_DEF(search) + + class SimpleTopDocsCollector:public HitCollector{ + private: + float_t 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 float_t ms=-1.0f): + minScore(ms), + bits(bs), + hq(hitQueue), + nDocs(ndocs), + totalHits(totalhits) + { + } + ~SimpleTopDocsCollector(){} + void collect(const int32_t doc, const float_t 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 float_t score){ + if (score > 0.0f && // ignore zeroed buckets + (bits==NULL || bits->get(doc))) { // skip docs not in bits + ++totalHits[0]; + FieldDoc* fd = _CLNEW FieldDoc(doc, score); //todo: see jlucene way... with fields def??? + 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 float_t score){ + if (bits->get(doc)) { // skip docs not in bits + results->collect(doc, score); + } + } + }; + + + IndexSearcher::IndexSearcher(const char* 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 != NULL, "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); + } + + _CL_DEPRECATED( doc(i, document) ) CL_NS(document)::Document* IndexSearcher::doc(int32_t i){ + CL_NS(document)::Document* ret = _CLNEW CL_NS(document)::Document; + if (!doc(i,ret) ) + _CLDELETE(ret); + return ret; + } + + // 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); + } + 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(); + } + + //todo: find out why we are passing Query* and not Weight*, as Weight is being extracted anyway from Query* + 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) { + Query* wq = weight->getQuery(); + if (wq != query) + _CLLDELETE(wq); + _CLLDELETE(weight); + 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 = new 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); + _CLLDELETE(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); + _CLLDELETE(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) ) + _CLLDELETE(bits); + _CLDELETE_LARRAY(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); + } + + _CLLDELETE(fc); + Query* wq = weight->getQuery(); + if (wq != query) // query was rewritten + _CLLDELETE(wq); + _CLLDELETE(weight); + if ( bits != NULL && filter->shouldDeleteBitSet(bits) ) + _CLLDELETE(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 ){ + _CLLDELETE(last); + } + last = query; + } + return query; + } + + void IndexSearcher::explain(Query* query, int32_t doc, Explanation* ret){ + Weight* weight = query->weight(this); + ret->addDetail(weight->explain(reader, doc)); // TODO: A hack until this function will return Explanation* as well + + Query* wq = weight->getQuery(); + if ( query != wq ) //query was re-written + _CLLDELETE(wq); + _CLDELETE(weight); + } + + CL_NS(index)::IndexReader* IndexSearcher::getReader(){ + return reader; + } + + const char* IndexSearcher::getClassName(){ + return "IndexSearcher"; + } + const char* IndexSearcher::getObjectName() const{ + return IndexSearcher::getClassName(); + } + +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/IndexSearcher.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/IndexSearcher.h new file mode 100644 index 0000000..4f267c9 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/IndexSearcher.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_IndexSearcher_ +#define _lucene_search_IndexSearcher_ + + +#include "Searchable.h" +CL_CLASS_DEF(store,Directory) +CL_CLASS_DEF(document,Document) +CL_CLASS_DEF(index,Term) +CL_CLASS_DEF(search,TopDocs) +CL_CLASS_DEF(search,TopFieldDocs) +CL_CLASS_DEF(search,Query) +CL_CLASS_DEF(search,Filter) +CL_CLASS_DEF(search,Sort) +CL_CLASS_DEF(search,HitCollector) +CL_CLASS_DEF(search,Explanation) +CL_CLASS_DEF(index,IndexReader) +//#include "CLucene/index/IndexReader.h" +//#include "CLucene/util/BitSet.h" +//#include "HitQueue.h" +//#include "FieldSortedHitQueue.h" + +CL_NS_DEF(search) +/** Implements search over a single IndexReader. +* +*

Applications usually need only call the inherited {@link search(Query*)} +* or {@link search(Query*,Filter*)} methods. +*/ +class CLUCENE_EXPORT IndexSearcher:public Searcher{ + CL_NS(index)::IndexReader* reader; + bool readerOwner; + +public: + /** Creates a searcher searching the index in the named directory. + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + IndexSearcher(const char* path); + + /** Creates a searcher searching the index in the provided directory. + * @throws CorruptIndexException if the index is corrupt + * @throws IOException if there is a low-level IO error + */ + IndexSearcher(CL_NS(store)::Directory* directory); + + /** Creates a searcher searching the provided index. */ + IndexSearcher(CL_NS(index)::IndexReader* r); + + ~IndexSearcher(); + + /** + * Note that the underlying IndexReader is not closed, if + * IndexSearcher was constructed with IndexSearcher(IndexReader r). + * If the IndexReader was supplied implicitly by specifying a directory, then + * the IndexReader gets closed. + */ + void close(); + + int32_t docFreq(const CL_NS(index)::Term* term) const; + + bool doc(int32_t i, CL_NS(document)::Document& document); + bool doc(int32_t i, CL_NS(document)::Document* document); + _CL_DEPRECATED( doc(i, document) ) CL_NS(document)::Document* doc(int32_t i); + + 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(); + + Query* rewrite(Query* original); + void explain(Query* query, int32_t doc, Explanation* ret); + + virtual const char* getObjectName() const; + static const char* getClassName(); +}; +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/MatchAllDocsQuery.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/MatchAllDocsQuery.cpp new file mode 100644 index 0000000..79f194a --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/MatchAllDocsQuery.cpp @@ -0,0 +1,201 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "Query.h" +#include "MatchAllDocsQuery.h" +#include "Explanation.h" +#include "SearchHeader.h" +#include "Searchable.h" + +#include "CLucene/index/IndexReader.h" +#include "CLucene/util/StringBuffer.h" + +CL_NS_DEF(search) + +class MatchAllDocsQuery::MatchAllDocsWeight : public Weight { +private: + Similarity* similarity; + float_t queryWeight; + float_t queryNorm; + MatchAllDocsQuery* parentQuery; + +public: + MatchAllDocsWeight(MatchAllDocsQuery* enclosingInstance, Searcher* searcher); + virtual ~MatchAllDocsWeight(){} + + virtual TCHAR* toString(); + + Query* getQuery(); + + float_t getValue(); + + float_t sumOfSquaredWeights(); + + void normalize(float_t _queryNorm); + + Scorer* scorer(CL_NS(index)::IndexReader* reader); + + Explanation* explain(CL_NS(index)::IndexReader* reader, int32_t doc); +}; + +class MatchAllDocsQuery::MatchAllScorer : public Scorer { + CL_NS(index)::IndexReader* reader; + int32_t id; + int32_t maxId; + float_t _score; + +public: + MatchAllScorer(CL_NS(index)::IndexReader* _reader, Similarity* similarity, Weight* w); + virtual ~MatchAllScorer(){} + + Explanation* explain(int32_t doc); + + int32_t doc() const; + + bool next(); + + float_t score(); + + bool skipTo(int32_t target); + + virtual TCHAR* toString(); +}; + +MatchAllDocsQuery::MatchAllScorer::MatchAllScorer(CL_NS(index)::IndexReader* _reader, Similarity* similarity, Weight* w) + :Scorer(similarity),reader(_reader),id(-1) +{ + maxId = reader->maxDoc() - 1; + _score = w->getValue(); +} + +Explanation* MatchAllDocsQuery::MatchAllScorer::explain(int32_t doc) { + // not called... see MatchAllDocsWeight::explain() + return NULL; +} + +int32_t MatchAllDocsQuery::MatchAllScorer::doc() const { + return id; +} + +bool MatchAllDocsQuery::MatchAllScorer::next() { + while (id < maxId) { + id++; + if (!reader->isDeleted(id)) { + return true; + } + } + return false; +} + +float_t MatchAllDocsQuery::MatchAllScorer::score() { + return _score; +} + +bool MatchAllDocsQuery::MatchAllScorer::skipTo(int32_t target) { + id = target - 1; + return next(); +} + +TCHAR* MatchAllDocsQuery::MatchAllScorer::toString(){ + return stringDuplicate(_T("MatchAllScorer")); +} + +MatchAllDocsQuery::MatchAllDocsWeight::MatchAllDocsWeight(MatchAllDocsQuery* enclosingInstance, Searcher* searcher): + parentQuery(enclosingInstance){ + this->similarity = searcher->getSimilarity(); +} + +TCHAR* MatchAllDocsQuery::MatchAllDocsWeight::toString() { + CL_NS(util)::StringBuffer buf(50); + buf.append(_T("weight(")); + + TCHAR* t = parentQuery->toString(); + buf.append(t); + _CLDELETE_LCARRAY(t); + + buf.appendChar(_T(')')); + return buf.giveBuffer(); +} + +Query* MatchAllDocsQuery::MatchAllDocsWeight::getQuery() { + return parentQuery; +} + +float_t MatchAllDocsQuery::MatchAllDocsWeight::getValue() { + return queryWeight; +} + +float_t MatchAllDocsQuery::MatchAllDocsWeight::sumOfSquaredWeights() { + queryWeight = parentQuery->getBoost(); + return queryWeight * queryWeight; +} + +void MatchAllDocsQuery::MatchAllDocsWeight::normalize(float_t _queryNorm) { + this->queryNorm = _queryNorm; + queryWeight *= this->queryNorm; +} + +Scorer* MatchAllDocsQuery::MatchAllDocsWeight::scorer(CL_NS(index)::IndexReader* reader) { + return _CLNEW MatchAllScorer(reader, similarity, this); +} + +Explanation* MatchAllDocsQuery::MatchAllDocsWeight::explain(CL_NS(index)::IndexReader* reader, int32_t doc) { + // explain query weight + Explanation* queryExpl = _CLNEW ComplexExplanation(true, getValue(), _T("MatchAllDocsQuery, product of:")); + if (parentQuery->getBoost() != 1.0f) { + queryExpl->addDetail(_CLNEW Explanation(parentQuery->getBoost(),_T("boost"))); + } + queryExpl->addDetail(_CLNEW Explanation(queryNorm,_T("queryNorm"))); + return queryExpl; +} + +MatchAllDocsQuery::MatchAllDocsQuery(){} +MatchAllDocsQuery::~MatchAllDocsQuery(){} + +Weight* MatchAllDocsQuery::_createWeight(Searcher* searcher){ + return _CLNEW MatchAllDocsWeight(this, searcher); +} + +const char* MatchAllDocsQuery::getClassName() { + return "MatchAllDocsQuery"; +} +const char* MatchAllDocsQuery::getObjectName() const{ + return getClassName(); +} + +TCHAR* MatchAllDocsQuery::toString(const TCHAR* /*field*/) const{ + CL_NS(util)::StringBuffer buffer(25); + buffer.append(_T("MatchAllDocsQuery")); + buffer.appendBoost(getBoost()); + return buffer.giveBuffer(); +} + +MatchAllDocsQuery::MatchAllDocsQuery(const MatchAllDocsQuery& clone): + Query(clone) +{ +} + +Query* MatchAllDocsQuery::clone() const{ + return _CLNEW MatchAllDocsQuery(*this); +} + +void MatchAllDocsQuery::extractTerms( TermSet * termset ) const +{ +} + +bool MatchAllDocsQuery::equals(Query* o) const{ + if (!(o->instanceOf(MatchAllDocsQuery::getClassName()))) + return false; + MatchAllDocsQuery* other = static_cast(o); + return this->getBoost() == other->getBoost(); +} + +size_t MatchAllDocsQuery::hashCode() const{ + return (static_cast(getBoost())) ^ 0x1AA71190; +} + +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/MatchAllDocsQuery.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/MatchAllDocsQuery.h new file mode 100644 index 0000000..febe6f7 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/MatchAllDocsQuery.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_search_MatchAllDocsQuery_h +#define _lucene_search_MatchAllDocsQuery_h + +#include "Scorer.h" +#include "SearchHeader.h" +#include "Query.h" + +CL_CLASS_DEF(search,Explanation) +CL_CLASS_DEF(search,Similarity) +CL_CLASS_DEF(index,IndexReader) + +CL_NS_DEF(search) + class Weight; + + /** + * A query that matches all documents. + * + */ + class CLUCENE_EXPORT MatchAllDocsQuery : public Query { + protected: + MatchAllDocsQuery(const MatchAllDocsQuery& clone); + public: + MatchAllDocsQuery(); + virtual ~MatchAllDocsQuery(); + + class MatchAllScorer; + class MatchAllDocsWeight; + + /** Prints a query to a string, with field assumed to be the + * default field and omitted. + *

The representation used is one that is supposed to be readable + * by {@link org.apache.lucene.queryParser.QueryParser QueryParser}. However, + * there are the following limitations: + *

    + *
  • If the query was created by the parser, the printed + * representation may not be exactly what was parsed. For example, + * characters that need to be escaped will be represented without + * the required backslash.
  • + *
  • Some of the more complicated queries (e.g. span queries) + * don't have a representation that can be parsed by QueryParser.
  • + *
+ */ + virtual TCHAR* toString(const TCHAR* field = NULL) const; + + protected: + /** Expert: Constructs an appropriate Weight implementation for this query. + * + *

Only implemented by primitive queries, which re-write to themselves. + * This is an Internal function + */ + virtual Weight* _createWeight(Searcher* searcher); + + public: + /** Returns a clone of this query. */ + virtual Query* clone() const; + + /** Expert: MatchAllDocsQuery provides no terms at all. */ + void extractTerms( TermSet * termset ) const; + + virtual bool equals(Query* o) const; + virtual size_t hashCode() const; + + static const char* getClassName(); + const char* getObjectName() const; + }; + +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/MultiPhraseQuery.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/MultiPhraseQuery.cpp new file mode 100644 index 0000000..0bd5acb --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/MultiPhraseQuery.cpp @@ -0,0 +1,445 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "MultiPhraseQuery.h" +#include "SearchHeader.h" + +#include "BooleanClause.h" +#include "BooleanQuery.h" +#include "TermQuery.h" +#include "Explanation.h" +#include "Similarity.h" + +#include "CLucene/index/_Term.h" +#include "CLucene/index/Term.h" +#include "CLucene/index/Terms.h" +#include "CLucene/index/IndexReader.h" +#include "CLucene/index/MultipleTermPositions.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) + +class MultiPhraseWeight : public Weight { +private: + Similarity* similarity; + float_t value; + float_t idf; + float_t queryNorm; + float_t queryWeight; + + MultiPhraseQuery* parentQuery; + +public: + MultiPhraseWeight(Searcher* searcher, MultiPhraseQuery* _parentQuery) : similarity(_parentQuery->getSimilarity(searcher)), + value(0), idf(0), queryNorm(0), queryWeight(0), parentQuery(_parentQuery) { + + // compute idf + for (size_t i = 0; i < parentQuery->termArrays->size(); i++){ + ArrayBase* terms = parentQuery->termArrays->at(i); + for ( size_t j=0;jlength;j++ ){ + idf += parentQuery->getSimilarity(searcher)->idf(terms->values[j], searcher); + } + } + } + virtual ~MultiPhraseWeight(){}; + + Query* getQuery() { return parentQuery; } + float_t getValue() { return value; } + + float_t sumOfSquaredWeights() { + queryWeight = idf * parentQuery->getBoost(); // compute query weight + return queryWeight * queryWeight; // square it + } + + void normalize(float_t _queryNorm) { + this->queryNorm = _queryNorm; + queryWeight *= _queryNorm; // normalize query weight + value = queryWeight * idf; // idf for document + } + + Scorer* scorer(IndexReader* reader) { + const size_t termArraysSize = parentQuery->termArrays->size(); + if (termArraysSize == 0) // optimize zero-term case + return NULL; + + TermPositions** tps = _CL_NEWARRAY(TermPositions*,termArraysSize+1); + for (size_t i=0; i* terms = parentQuery->termArrays->at(i); + + TermPositions* p; + if (terms->length > 1 ) + p = _CLNEW MultipleTermPositions(reader, terms); + else + p = reader->termPositions((*terms)[0]); + + if (p == NULL) + return NULL; + + tps[i] = p; + } + tps[termArraysSize] = NULL; + + Scorer* ret = NULL; + + ValueArray positions; + parentQuery->getPositions(positions); + const int32_t slop = parentQuery->getSlop(); + if (slop == 0) + ret = _CLNEW ExactPhraseScorer(this, tps, positions.values, similarity, + reader->norms(parentQuery->field)); + else + ret = _CLNEW SloppyPhraseScorer(this, tps, positions.values, similarity, + slop, reader->norms(parentQuery->field)); + + positions.deleteArray(); + + //tps can be deleted safely. SloppyPhraseScorer or ExactPhraseScorer will take care + //of its values + _CLDELETE_LARRAY(tps); + + return ret; + } + + Explanation* explain(IndexReader* reader, int32_t doc){ + ComplexExplanation* result = _CLNEW ComplexExplanation(); + + StringBuffer buf(100); + buf.append(_T("weight(")); + TCHAR* queryString = getQuery()->toString(); + buf.append(queryString); + buf.append(_T(" in ")); + buf.appendInt(doc); + buf.append(_T("), product of:")); + result->setDescription(buf.getBuffer()); + buf.clear(); + + buf.append(_T("idf(")); + buf.append(queryString); + buf.appendChar(_T(')')); + Explanation* idfExpl = _CLNEW Explanation(idf, buf.getBuffer()); + buf.clear(); + + // explain query weight + Explanation* queryExpl = _CLNEW Explanation(); + buf.append(_T("queryWeight(")); + buf.append(queryString); + buf.append(_T("), product of:")); + queryExpl->setDescription(buf.getBuffer()); + buf.clear(); + + Explanation* boostExpl = _CLNEW Explanation(parentQuery->getBoost(), _T("boost")); + if (parentQuery->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 + ComplexExplanation* fieldExpl = _CLNEW ComplexExplanation(); + buf.append(_T("fieldWeight(")); + buf.append(queryString); + buf.append(_T(" in ")); + buf.appendInt(doc); + buf.append(_T("), product of:")); + fieldExpl->setDescription(buf.getBuffer()); + buf.clear(); + _CLDELETE_LCARRAY(queryString); + + Explanation* tfExpl = scorer(reader)->explain(doc); + fieldExpl->addDetail(tfExpl); + if( idfExpl ) + { + Explanation* idfExpl2 = _CLNEW Explanation(*idfExpl); + fieldExpl->addDetail(idfExpl2); + } + + Explanation* fieldNormExpl = _CLNEW Explanation(); + uint8_t* fieldNorms = reader->norms(parentQuery->field); + float_t fieldNorm = + fieldNorms!=NULL ? Similarity::decodeNorm(fieldNorms[doc]) : 0.0f; + fieldNormExpl->setValue(fieldNorm); + + buf.append(_T("fieldNorm(field=")); + buf.append(parentQuery->field); + buf.append(_T(", doc=")); + buf.appendInt(doc); + buf.appendChar(_T(')')); + fieldNormExpl->setDescription(buf.getBuffer()); + buf.clear(); + + fieldExpl->addDetail(fieldNormExpl); + + fieldExpl->setMatch(tfExpl->isMatch()); + fieldExpl->setValue(tfExpl->getValue() * + idfExpl->getValue() * + fieldNormExpl->getValue()); + + if (queryExpl->getValue() == 1.0f){ + _CLLDELETE(result); + return fieldExpl; + } + + result->addDetail(fieldExpl); + result->setMatch(fieldExpl->getMatch()); + + // combine them + result->setValue(queryExpl->getValue() * fieldExpl->getValue()); + + return result; + } +}; + +Query* MultiPhraseQuery::rewrite(IndexReader* /*reader*/) { + if (termArrays->size() == 1) { // optimize one-term case + ArrayBase* terms = termArrays->at(0); + BooleanQuery* boq = _CLNEW BooleanQuery(true); + for ( size_t i=0;ilength;i++ ){ + boq->add(_CLNEW TermQuery((*terms)[i]), BooleanClause::SHOULD); + } + boq->setBoost(getBoost()); + return boq; + } else { + return this; + } +} + +void MultiPhraseQuery::extractTerms( TermSet * termset ) const +{ + for( size_t i = 0; i < termArrays->size(); i++ ) + { + ArrayBase * terms = termArrays->at( i ); + for( size_t j=0; j < terms->length; j++ ) + { + Term * pTerm = terms->values[ j ]; + if( pTerm && termset->end() == termset->find( pTerm )) + termset->insert( _CL_POINTER( pTerm )); + } + } +} + +MultiPhraseQuery::MultiPhraseQuery(): + field(NULL), + termArrays(_CLNEW CL_NS(util)::CLArrayList*>), + positions(_CLNEW CL_NS(util)::CLVector), + slop(0) +{ +} + +MultiPhraseQuery::MultiPhraseQuery( const MultiPhraseQuery& clone ): + Query(clone) +{ + this->field = clone.field ? STRDUP_TtoT( clone.field ) : NULL; + this->slop = clone.slop; + + this->termArrays = _CLNEW CL_NS(util)::CLArrayList*>(); + this->positions = _CLNEW CL_NS(util)::CLVector(); + + size_t size = clone.positions->size(); + for( size_t i = 0; i < size; i++ ) + { + int32_t n = (*clone.positions)[i]; + this->positions->push_back( n ); + } + + size = clone.termArrays->size(); + for( size_t j = 0; j < size; j++ ) + { + CL_NS(util)::ArrayBase* termsToClone = (*clone.termArrays)[ j ]; + CL_NS(util)::ArrayBase* terms = _CLNEW CL_NS(util)::ValueArray( termsToClone->length ); + for( size_t t = 0; t < termsToClone->length; t++ ) + terms->values[ t ] = _CL_POINTER( termsToClone->values[ t ] ); + + this->termArrays->push_back( terms ); + } +} + +MultiPhraseQuery::~MultiPhraseQuery(){ + for (size_t i = 0; i < termArrays->size(); i++){ + for ( size_t j=0;jat(i)->length;j++ ) { + _CLLDECDELETE(termArrays->at(i)->values[j]); + } + _CLLDELETE(termArrays->at(i)); + } + _CLLDELETE(termArrays); + _CLLDELETE(positions); + _CLDELETE_LCARRAY(field); +} + +Query * MultiPhraseQuery::clone() const +{ + return _CLNEW MultiPhraseQuery( *this ); +} + +void MultiPhraseQuery::setSlop(const int32_t s) { slop = s; } + +int32_t MultiPhraseQuery::getSlop() const { return slop; } + +void MultiPhraseQuery::add(CL_NS(index)::Term* term) { + ValueArray _terms(1); + _terms[0] = term; + add(&_terms); +} + +void MultiPhraseQuery::add(const CL_NS(util)::ArrayBase* terms) { + int32_t position = 0; + if (positions->size() > 0) + position = (*positions)[positions->size()-1] + 1; + + add(terms, position); +} + +void MultiPhraseQuery::add(const CL_NS(util)::ArrayBase* _terms, const int32_t position) { + if (termArrays->size() == 0) + field = STRDUP_TtoT((*_terms)[0]->field()); + + CL_NS(util)::ArrayBase* terms = _CLNEW CL_NS(util)::ValueArray(_terms->length); + for ( size_t i=0;i<_terms->length;i++ ){ + if ( _tcscmp(_terms->values[i]->field(), field) != 0) { + TCHAR buf[250]; + _sntprintf(buf,250,_T("All phrase terms must be in the same field (%s): %s"),field, (*terms)[i]->field()); + _CLTHROWT(CL_ERR_IllegalArgument,buf); + } + terms->values[i] = _CL_POINTER(_terms->values[i]); + } + termArrays->push_back(terms); + positions->push_back(position); +} +const CL_NS(util)::CLArrayList*>* MultiPhraseQuery::getTermArrays() { + return termArrays; +} + +void MultiPhraseQuery::getPositions(ValueArray& result) const { + result.length = positions->size(); + result.values = _CL_NEWARRAY(int32_t,result.length); + for (size_t i = 0; i < result.length; i++) + result.values[i] = (*positions)[i]; +} + +Weight* MultiPhraseQuery::_createWeight(Searcher* searcher) { + return _CLNEW MultiPhraseWeight(searcher, this); +} + +TCHAR* MultiPhraseQuery::toString(const TCHAR* f) const { + StringBuffer buffer(100); + if (_tcscmp(f, field)!=0) { + buffer.append(field); + buffer.appendChar(_T(':')); + } + + buffer.appendChar(_T('"')); + + CL_NS(util)::CLArrayList*>::iterator i; + i = termArrays->begin(); + while (i != termArrays->end()){ + CL_NS(util)::ArrayBase& terms = *(*i); + if (terms.length > 1) { + buffer.appendChar(_T('(')); + for (size_t j = 0; j < terms.length; j++) { + buffer.append(terms[j]->text()); + if (j < terms.length-1) + buffer.appendChar(_T(' ')); + } + buffer.appendChar(_T(')')); + } else { + buffer.append(terms[0]->text()); + } + if (i+1 != termArrays->end() ) + buffer.appendChar(_T(' ')); + + i++; + } + buffer.appendChar(_T('"')); + + if (slop != 0) { + buffer.appendChar(_T('~')); + buffer.appendInt(slop); + } + + buffer.appendBoost(getBoost()); + + return buffer.giveBuffer(); +} + +class TermArray_Equals:public CL_NS_STD(binary_function) +{ +public: + bool operator()( CL_NS(util)::ArrayBase* val1, CL_NS(util)::ArrayBase* val2 ) const{ + if ( val1->length != val2->length ) + return false; + for ( size_t i=0;ilength;i++ ){ + if (!val1->values[i]->equals(val2->values[i])) return false; + } + return true; + } +}; + +bool MultiPhraseQuery::equals(Query* o) const { + if (!(o->instanceOf(MultiPhraseQuery::getObjectName()))) return false; + MultiPhraseQuery* other = static_cast(o); + bool ret = (this->getBoost() == other->getBoost()) && (this->slop == other->slop); + + if (ret){ + CLListEquals, + const CL_NS(util)::CLVector > comp; + ret = comp.equals(this->positions,other->positions); + } + + if (ret){ + if (this->termArrays->size() != other->termArrays->size()) + return false; + + for (size_t i=0; itermArrays->size();i++){ + CLListEquals*>, + const CL_NS(util)::CLVector*> > comp; + ret = comp.equals(this->termArrays,other->termArrays); + } + } + return ret; +} + +// TODO: Test hashed value if conforms with JL +size_t MultiPhraseQuery::hashCode() const { + size_t ret = Similarity::floatToByte(getBoost()) ^ slop; + + { //msvc6 scope fix + for( size_t i = 0; i < termArrays->size(); i++ ) + { + for( size_t j = 0; j < termArrays->at( i )->length; j++ ) + { + ret = 31 * ret + termArrays->at(i)->values[j]->hashCode(); + } + } + } + { //msvc6 scope fix + for ( size_t i=0;isize();i++ ) + ret = 31 * ret + (*positions)[i]; + } + ret ^= 0x4AC65113; + + return ret; +} + +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/MultiPhraseQuery.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/MultiPhraseQuery.h new file mode 100644 index 0000000..86419e5 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/MultiPhraseQuery.h @@ -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. +------------------------------------------------------------------------------*/ +#ifndef _lucene_search_MultiPhraseQuery_ +#define _lucene_search_MultiPhraseQuery_ + +#include "Query.h" +#include "CLucene/util/Array.h" +#include "CLucene/util/VoidList.h" + +CL_CLASS_DEF(index,Term) + +CL_NS_DEF(search) + +class MultiPhraseWeight; + +/** +* MultiPhraseQuery is a generalized version of PhraseQuery, with an added +* method {@link #add(Term[])}. +* To use this class, to search for the phrase "Microsoft app*" first use +* add(Term) on the term "Microsoft", then find all terms that have "app" as +* prefix using IndexReader.terms(Term), and use MultiPhraseQuery.add(Term[] +* terms) to add them to the query. +* +* @author Anders Nielsen +* @version 1.0 +*/ +class CLUCENE_EXPORT MultiPhraseQuery : public Query { +private: + TCHAR* field; + CL_NS(util)::CLArrayList*>* termArrays; + CL_NS(util)::CLVector* positions; + + int32_t slop; + +protected: + MultiPhraseQuery( const MultiPhraseQuery& clone ); + +public: + MultiPhraseQuery(); + virtual ~MultiPhraseQuery(); + friend class MultiPhraseWeight; + + /** Sets the phrase slop for this query. + * @see PhraseQuery#setSlop(int) + */ + void setSlop(const int32_t s); + + /** Sets the phrase slop for this query. + * @see PhraseQuery#getSlop() + */ + int32_t getSlop() const; + + /** Add a single term at the next position in the phrase. + * @see PhraseQuery#add(Term) + * @memory A pointer is taken to term + */ + void add(CL_NS(index)::Term* term); + + /** Add multiple terms at the next position in the phrase. Any of the terms + * may match. + * @memory A pointer is taken of each term, the array memory must be cleaned up by calle + * @see PhraseQuery#add(Term) + */ + void add(const CL_NS(util)::ArrayBase* terms); + + /** + * Allows to specify the relative position of terms within the phrase. + * + * @see PhraseQuery#add(Term, int) + * @param terms + * @param position + * @memory A pointer is taken of each term, the array memory must be cleaned up by calle + */ + void add(const CL_NS(util)::ArrayBase* terms, const int32_t position); + + /** + * Returns a ArrayBase of the terms in the multiphrase. + * Do not modify the List or its contents. + */ + const CL_NS(util)::CLArrayList*>* getTermArrays(); + + + /** + * Returns the relative positions of terms in this phrase. + */ + void getPositions(CL_NS(util)::ValueArray& result) const; + + Query* rewrite(CL_NS(index)::IndexReader* reader); + + /** Expert: adds all terms occurring in this query to the terms set. */ + void extractTerms( TermSet * termset ) const; + +protected: + Weight* _createWeight(Searcher* searcher); + +public: + /** Prints a user-readable version of this query. */ + TCHAR* toString(const TCHAR* f) const; + + /** Returns true if o is equal to this. */ + bool equals(Query* o) const; + + /** Returns a hash code value for this object.*/ + size_t hashCode() const; + + Query* clone() const; + + const char* getObjectName() const { return getClassName(); } + static const char* getClassName(){ return "MultiPhraseQuery"; } +}; +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/MultiSearcher.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/MultiSearcher.cpp new file mode 100644 index 0000000..0f2a686 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/MultiSearcher.cpp @@ -0,0 +1,244 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "CLucene/index/IndexReader.h" +#include "MultiSearcher.h" +#include "SearchHeader.h" +#include "Query.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) + + class MultiHitCollector: public HitCollector{ + private: + HitCollector* results; + int32_t start; + public: + MultiHitCollector(HitCollector* _results, int32_t _start); + void collect(const int32_t doc, const float_t score) ; + }; + + + /** Creates a searcher which searches searchers. */ + 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); + } + + int32_t* MultiSearcher::getStarts() { + return starts; + } + int32_t MultiSearcher::getLength() { + return searchablesLen; + } + + // 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 n 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 n 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 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 = new 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. + * + *

{@link HitCollector#collect(int32_t,float_t)} is called for every non-zero + * scoring document. + * + *

Applications should only use this if they need all 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;jscoreDocsLength;++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;xsize(); + 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* query) { + // this is a bit of a hack. We know that a query which + // creates a Weight based on this Dummy-Searcher is + // always already rewritten (see preparedWeight()). + // Therefore we just return the unmodified query here + return query; + } + + 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 float_t score) { + results->collect(doc + start, score); + } + +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/MultiSearcher.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/MultiSearcher.h new file mode 100644 index 0000000..17adba0 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/MultiSearcher.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_multisearcher +#define _lucene_search_multisearcher + + +//#include "SearchHeader.h" +#include "Searchable.h" +CL_CLASS_DEF(document,Document) +CL_CLASS_DEF(index,Term) + +CL_NS_DEF(search) + + /** Implements search over a set of Searchables. + * + *

Applications usually need only call the inherited {@link #search(Query)} + * or {@link #search(Query,Filter)} methods. + */ + class CLUCENE_EXPORT MultiSearcher: public Searcher { + private: + Searchable** searchables; + int32_t searchablesLen; + int32_t* starts; + int32_t _maxDoc; + protected: + int32_t* getStarts(); + int32_t getLength(); + public: + /** Creates a searcher which searches Searchables. */ + MultiSearcher(Searchable** searchables); + + ~MultiSearcher(); + + /** Frees resources associated with this Searcher. */ + 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. + * + *

{@link HitCollector#collect(int32_t,float_t)} is called for every non-zero + * scoring document. + * + *

Applications should only use this if they need all 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/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/MultiTermQuery.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/MultiTermQuery.cpp new file mode 100644 index 0000000..c781c40 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/MultiTermQuery.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/_ApiHeader.h" +#include "MultiTermQuery.h" +#include "BooleanQuery.h" +#include "FilteredTermEnum.h" +#include "TermQuery.h" +#include "CLucene/index/Term.h" +#include "CLucene/util/StringBuffer.h" + +CL_NS_USE(index) +CL_NS_USE(util) +CL_NS_DEF(search) + +/** Constructs a query for terms matching term. */ + + 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( true ); + 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->getQuery(); + + _CLDELETE(query); + return ret; + } + } + return query; + } + + Query* MultiTermQuery::combine(CL_NS(util)::ArrayBase* 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()); + // todo: use ToStringUtils.boost() + if (getBoost() != 1.0f) { + buffer.appendChar ( '^' ); + buffer.appendFloat( getBoost(),1); + } + return buffer.toString(); + } + +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/MultiTermQuery.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/MultiTermQuery.h new file mode 100644 index 0000000..c92f65f --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/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_ + + +CL_CLASS_DEF(util,StringBuffer) +//#include "CLucene/index/IndexReader.h" +CL_CLASS_DEF(index,Term) +CL_CLASS_DEF(search,FilteredTermEnum) +CL_CLASS_DEF(index,IndexReader) +//#include "CLucene/index/Terms.h" +//#include "FilteredTermEnum.h" +//#include "SearchHeader.h" +//#include "BooleanQuery.h" +//#include "TermQuery.h" +#include "Query.h" + +CL_NS_DEF(search) + /** + * A {@link lucene::search::Query} that matches documents containing a subset of terms provided + * by a {@link lucene::search::FilteredTermEnum} enumeration. + *

+ * MultiTermQuery is not designed to be used by itself. + *
+ * The reason being that it is not intialized with a {@link FilteredTermEnum} + * enumeration. A {@link FilteredTermEnum} enumeration needs to be provided. + *

+ * For example, {@link WildcardQuery} and {@link FuzzyQuery} extend + * MultiTermQuery to provide {@link WildcardTermEnum} and + * {@link FuzzyTermEnum}, respectively. + */ + class CLUCENE_EXPORT 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 term. */ + MultiTermQuery(CL_NS(index)::Term* t); + + virtual ~MultiTermQuery(); + + /** Returns the pattern term. */ + CL_NS(index)::Term* getTerm(bool pointer=true) const; + + Query* combine(CL_NS(util)::ArrayBase* queries); + + /** Prints a user-readable version of this query. */ + TCHAR* toString(const TCHAR* field) const; + + virtual Query* rewrite(CL_NS(index)::IndexReader* reader); + }; +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/PhrasePositions.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/PhrasePositions.cpp new file mode 100644 index 0000000..b8d1773 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/PhrasePositions.cpp @@ -0,0 +1,114 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "_PhrasePositions.h" + +CL_NS_USE(index) +CL_NS_DEF(search) + +PhrasePositions::PhrasePositions(TermPositions* t, const int32_t OffSet) { + //Func - Constructor + //Pre - t != NULL + // OffSet != NULL + //Post - The instance has been created + + CND_PRECONDITION(t != NULL,"Tp is NULL"); + CND_PRECONDITION(OffSet >= 0 ,"OffSet is a negative number"); + + tp = t; + 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 = LUCENE_INT32_MAX_SHOULDBE; + 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/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/PhraseQuery.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/PhraseQuery.cpp new file mode 100644 index 0000000..2942d0d --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/PhraseQuery.cpp @@ -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. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "PhraseQuery.h" + +#include "SearchHeader.h" +#include "Scorer.h" +#include "BooleanQuery.h" +#include "TermQuery.h" +#include "Similarity.h" +#include "Searchable.h" +#include "Explanation.h" + +#include "CLucene/index/_Term.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" + +#include + +CL_NS_USE(index) +CL_NS_USE(util) +CL_NS_DEF(search) + + + + class PhraseWeight: public Weight { + private: + Searcher* searcher; + float_t value; + float_t idf; + float_t queryNorm; + float_t queryWeight; + + PhraseQuery* parentQuery; + public: + PhraseWeight(Searcher* searcher, PhraseQuery* parentQuery); + virtual ~PhraseWeight(); + TCHAR* toString(); + + Query* getQuery(); + float_t getValue(); + + float_t sumOfSquaredWeights(); + void normalize(float_t queryNorm); + Scorer* scorer(CL_NS(index)::IndexReader* reader); + Explanation* explain(CL_NS(index)::IndexReader* reader, int32_t doc); + TCHAR* toString(TCHAR* f); + bool equals(PhraseWeight* o); + }; + + PhraseQuery::PhraseQuery(): + field(NULL), terms(_CLNEW CL_NS(util)::CLVector(false) ), + positions(_CLNEW CL_NS(util)::CLVector), slop(0) + { + } + + PhraseQuery::PhraseQuery(const PhraseQuery& clone): + Query(clone), + terms(_CLNEW CL_NS(util)::CLVector(false) ), + positions(_CLNEW CL_NS(util)::CLVector) + { + slop = clone.slop; + field = clone.field; + int32_t size=clone.positions->size(); + { //msvc6 scope fix + for ( int32_t i=0;ipositions->push_back( n ); + } + } + size=clone.terms->size(); + { //msvc6 scope fix + for ( int32_t i=0;iterms->push_back( _CL_POINTER((*clone.terms)[i])); + } + } + } + Query* PhraseQuery::clone() const{ + return _CLNEW PhraseQuery(*this); + } + + const TCHAR* PhraseQuery::getFieldName() const{ return field; } + + void PhraseQuery::setSlop(const int32_t s) { slop = s; } + int32_t PhraseQuery::getSlop() const { return slop; } + + 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, + const CL_NS(util)::CLVector > comp; + ret = comp.equals(this->terms,pq->terms); + } + + if ( ret ){ + CLListEquals, + const CL_NS(util)::CLVector > 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 (size_t i = 0; i < terms->size(); i++){ + _CLLDECDELETE((*terms)[i]); + } + _CLLDELETE(terms); + _CLLDELETE(positions); + } + + 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 ( size_t i=0;isize();i++ ) + ret = 31 * ret + (*terms)[i]->hashCode(); + } + { //msvc6 scope fix + for ( size_t i=0;isize();i++ ) + ret = 31 * ret + (*positions)[i]; + } + return ret; + } + + const char* PhraseQuery::getClassName(){ + return "PhraseQuery"; + } + const char* PhraseQuery::getObjectName() const{ + //Func - Returns the string "PhraseQuery" + //Pre - true + //Post - The string "PhraseQuery" has been returned + return getClassName(); + } + + 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) { + + 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){ + 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(ValueArray& result) const{ + result.length = positions->size(); + result.values = _CL_NEWARRAY(int32_t,result.length); + for(size_t i = 0; i < result.length; i++){ + result.values[i] = (*positions)[i]; + } + } + + 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); + _CLLDELETE(termQuery); + return ret; + } + return _CLNEW PhraseWeight(searcher,this); + } + + + Term** PhraseQuery::getTerms() const{ + //Func - added by search highlighter + + //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;isize()== 0 ) + return NULL; + + StringBuffer buffer(32); + if ( f==NULL || _tcscmp(field,f)!=0) { + buffer.append(field); + buffer.appendChar(_T(':')); + } + + buffer.appendChar( _T('"') ); + + Term *T = NULL; + + //iterate through all terms + for (size_t i = 0; i < terms->size(); i++) { + //Get the i-th term + T = (*terms)[i]; + + buffer.append( T->text() ); + //Check if i is at the end of terms + if (i != terms->size()-1){ + buffer.appendChar(_T(' ')); + } + } + buffer.appendChar( _T('"') ); + + if (slop != 0) { + buffer.appendChar(_T('~')); + buffer.appendFloat(slop, 0); + } + + buffer.appendBoost(getBoost()); + + return buffer.giveBuffer(); + } + +void PhraseQuery::extractTerms( TermSet * termset ) const +{ + for( size_t i = 0; i < terms->size(); i++ ) + { + Term * pTerm = (*terms)[i]; + if( pTerm && termset->end() == termset->find( pTerm )) + termset->insert( _CL_POINTER( pTerm )); + } +} + + + PhraseWeight::PhraseWeight(Searcher* searcher, PhraseQuery* _parentQuery) { + this->parentQuery=_parentQuery; + this->value = 0; + this->idf = 0; + this->queryNorm = 0; + this->queryWeight = 0; + this->searcher = searcher; + } + + TCHAR* PhraseWeight::toString() { + return STRDUP_TtoT(_T("weight(PhraseQuery)")); + } + PhraseWeight::~PhraseWeight(){ + } + + + Query* PhraseWeight::getQuery() { return parentQuery; } + float_t PhraseWeight::getValue() { return value; } + + float_t PhraseWeight::sumOfSquaredWeights(){ + idf = parentQuery->getSimilarity(searcher)->idf(parentQuery->terms, searcher); + queryWeight = idf * parentQuery->getBoost(); // compute query weight + return queryWeight * queryWeight; // square it + } + + void PhraseWeight::normalize(float_t queryNorm) { + this->queryNorm = queryNorm; + queryWeight *= queryNorm; // normalize query weight + value = queryWeight * idf; // idf for document + } + + Scorer* PhraseWeight::scorer(IndexReader* reader) { + //Func - + //Pre - + //Post - + + //Get the length of terms + const int32_t tpsLength = (const int32_t)parentQuery->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 + for (int32_t i = 0; i < tpsLength; i++) { + //Get the termPostitions for the i-th term + p = reader->termPositions((*parentQuery->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; + + ValueArray positions; + parentQuery->getPositions(positions); + int32_t slop = parentQuery->getSlop(); + if ( slop != 0) + // optimize exact case + //todo: need to pass these: this, tps, + ret = _CLNEW SloppyPhraseScorer(this,tps,positions.values, + parentQuery->getSimilarity(searcher), + slop, reader->norms(parentQuery->field)); + else + ret = _CLNEW ExactPhraseScorer(this, tps, positions.values, + parentQuery->getSimilarity(searcher), + reader->norms(parentQuery->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_LARRAY(tps); + return ret; + } + + Explanation* PhraseWeight::explain(IndexReader* reader, int32_t doc){ + Explanation* result = _CLNEW Explanation(); + 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_LCARRAY(tmp); + result->setDescription(descbuf); + + StringBuffer docFreqs; + StringBuffer query; + query.appendChar('"'); + for (size_t i = 0; i < parentQuery->terms->size(); i++) { + if (i != 0) { + docFreqs.appendChar(' '); + query.appendChar(' '); + } + + Term* term = (*parentQuery->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)"),parentQuery->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_LCARRAY(tmp); + queryExpl->setDescription(descbuf); + + Explanation* boostExpl = _CLNEW Explanation(parentQuery->getBoost(), _T("boost")); + bool deleteBoostExpl = false; + if (parentQuery->getBoost() != 1.0f) + queryExpl->addDetail(boostExpl); + else + deleteBoostExpl = true; + queryExpl->addDetail(idfExpl); + + Explanation* queryNormExpl = _CLNEW Explanation(queryNorm,_T("queryNorm")); + queryExpl->addDetail(queryNormExpl); + + queryExpl->setValue(boostExpl->getValue() * + idfExpl->getValue() * + queryNormExpl->getValue()); + + if (deleteBoostExpl) + _CLLDELETE(boostExpl); + + 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:"), + parentQuery->field,query.getBuffer(),doc); + fieldExpl->setDescription(descbuf); + + + Scorer* sc = scorer(reader); + Explanation* tfExpl = sc->explain(doc); + _CLLDELETE(sc); + fieldExpl->addDetail(tfExpl); + fieldExpl->addDetail( _CLNEW Explanation(idfExpl->getValue(), idfExpl->getDescription()) ); + + Explanation* fieldNormExpl = _CLNEW Explanation(); + uint8_t* fieldNorms = reader->norms(parentQuery->field); + float_t 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)"),parentQuery->field,doc); + fieldNormExpl->setDescription(descbuf); + fieldExpl->addDetail(fieldNormExpl); + + fieldExpl->setValue(tfExpl->getValue() * + idfExpl->getValue() * + fieldNormExpl->getValue()); + + if (queryExpl->getValue() == 1.0f){ + _CLLDELETE(result); + return fieldExpl; + } + + result->addDetail(fieldExpl); + + // combine them + result->setValue(queryExpl->getValue() * fieldExpl->getValue()); + + return result; + } + + +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/PhraseQuery.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/PhraseQuery.h new file mode 100644 index 0000000..33c7a8b --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/PhraseQuery.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. +------------------------------------------------------------------------------*/ +#ifndef _lucene_search_PhraseQuery_ +#define _lucene_search_PhraseQuery_ + +#include "Query.h" +CL_CLASS_DEF(index,Term) +CL_CLASS_DEF(search,Scorer) +#include "CLucene/util/Array.h" +#include "CLucene/util/VoidList.h" + +CL_NS_DEF(search) + /** A Query that matches documents containing a particular sequence of terms. + * A PhraseQuery is built by QueryParser for input like "new york". + * + *

This query may be combined with other terms or queries with a {@link BooleanQuery}. + */ + class CLUCENE_EXPORT PhraseQuery: public Query { + private: + const TCHAR* field; + CL_NS(util)::CLVector* terms; + CL_NS(util)::CLVector* positions; + int32_t slop; + + friend class PhraseWeight; + protected: + Weight* _createWeight(Searcher* searcher); + PhraseQuery(const PhraseQuery& clone); + public: + /** Constructs an empty phrase query. */ + PhraseQuery(); + virtual ~PhraseQuery(); + + /** 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); + + /** Returns the slop. See setSlop(). */ + int32_t getSlop() const; + + /** + * 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 add(CL_NS(index)::Term* term); + + /** + * Adds a term to the end of the query phrase. + * The relative position of the term within the phrase is specified explicitly. + * This allows e.g. phrases with more than one term at the same position + * or phrases with gaps (e.g. in connection with stopwords). + * + * @param term + * @param position + */ + void add(CL_NS(index)::Term* term, int32_t position); + + /** Returns the set of terms in this phrase. */ + CL_NS(index)::Term** getTerms() const; + + /** + * Returns the relative positions of terms in this phrase. + */ + void getPositions(CL_NS(util)::ValueArray& result) const; + + //Returns the sum of squared weights + float_t sumOfSquaredWeights(Searcher* searcher); + + //Normalizes the Weight + void normalize(const float_t norm); + + Scorer* scorer(CL_NS(index)::IndexReader* reader); + + const TCHAR* getFieldName() const; + + /** Prints a user-readable version of this query. */ + TCHAR* toString(const TCHAR* f) const; + + Query* clone() const; + bool equals(Query *) const; + + size_t hashCode() const; + + const char* getObjectName() const; + static const char* getClassName(); + + /** Expert: adds all terms occurring in this query to the terms set. */ + void extractTerms( TermSet * termset ) const; + }; +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/PhraseScorer.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/PhraseScorer.cpp new file mode 100644 index 0000000..06d8836 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/PhraseScorer.cpp @@ -0,0 +1,223 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "Scorer.h" +#include "Explanation.h" +#include "Similarity.h" +#include "SearchHeader.h" +#include "CLucene/util/StringBuffer.h" +#include "CLucene/index/Terms.h" +#include "_PhraseQueue.h" +#include "_PhraseScorer.h" + +CL_NS_USE(index) +CL_NS_USE(util) +CL_NS_DEF(search) + + + PhraseScorer::PhraseScorer(Weight* _weight, TermPositions** tps, + int32_t* offsets, Similarity* similarity, uint8_t* _norms): + Scorer(similarity), weight(_weight), norms(_norms), value(_weight->getValue()), firstTime(true), more(true), freq(0.0f), + first(NULL), last(NULL) + { + //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"); + + // convert tps to a list of phrase positions. + // note: phrase-position differs from term-position in that its position + // reflects the phrase offset: pp.pos = tp.pos - offset. + // this allows to easily identify a matching (exact) phrase + // when all PhrasePositions have exactly the same position. + int32_t i = 0; + while(tps[i] != NULL){ + PhrasePositions *pp = _CLNEW PhrasePositions(tps[i], offsets[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. + _CLLDELETE(first); + _CLLDELETE(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 + } + + float_t PhraseScorer::score(){ + //System.out.println("scoring " + first.doc); + float_t raw = getSimilarity()->tf(freq) * value; // raw score + return raw * Similarity::decodeNorm(norms[first->doc]); // normalize + } + + bool PhraseScorer::skipTo(int32_t target) { + firstTime = false; + 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; + } + } + + + Explanation* PhraseScorer::explain(int32_t _doc) { + Explanation* tfExplanation = _CLNEW Explanation(); + + while (next() && doc() < _doc){ + } + + float_t 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()); + + return tfExplanation; + } + + 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(); + } + + int32_t PhraseScorer::doc() const { return first->doc; } + +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/PrefixQuery.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/PrefixQuery.cpp new file mode 100644 index 0000000..7dc9afb --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/PrefixQuery.cpp @@ -0,0 +1,311 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "CLucene/index/Term.h" +#include "CLucene/index/Terms.h" +#include "CLucene/index/IndexReader.h" +#include "Similarity.h" +#include "PrefixQuery.h" +#include "BooleanClause.h" +#include "BooleanQuery.h" +#include "TermQuery.h" +#include "CLucene/util/BitSet.h" +#include "CLucene/util/StringBuffer.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 char* PrefixQuery::getObjectName()const{ + //Func - Returns the name "PrefixQuery" + //Pre - true + //Post - The string "PrefixQuery" has been returned + + return getClassName(); + } + const char* PrefixQuery::getClassName(){ + //Func - Returns the name "PrefixQuery" + //Pre - true + //Post - The string "PrefixQuery" has been returned + + return "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( true ); + 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; + size_t prefixLen = prefix->textLength(); + do { + lastTerm = enumerator->term(); + if (lastTerm != NULL && + lastTerm->field() == prefixField ) // interned comparison + { + + //now see if term->text() starts with prefixText + size_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->getQuery(); + + _CLDELETE(query); + return ret; + } + } + + return query; + } + + Query* PrefixQuery::combine(CL_NS(util)::ArrayBase* 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(); + } + + + + + +//todo: this needs to be exposed, but java is still a bit confused about how... +class PrefixFilter::PrefixGenerator{ + const Term* prefix; +public: + PrefixGenerator(const Term* prefix){ + this->prefix = prefix; + } + virtual ~PrefixGenerator(){ + } + + virtual void handleDoc(int doc) = 0; + + void generate(IndexReader* reader) { + TermEnum* enumerator = reader->terms(prefix); + TermDocs* termDocs = reader->termDocs(); + const TCHAR* prefixText = prefix->text(); + const TCHAR* prefixField = prefix->field(); + const TCHAR* tmp; + size_t i; + size_t prefixLen = prefix->textLength(); + Term* term = NULL; + + try{ + do{ + term = enumerator->term(false); + if (term != NULL && + term->field() == prefixField // interned comparison + ){ + //now see if term->text() starts with prefixText + size_t termLen = term->textLength(); + if ( prefixLen>termLen ) + break; //the prefix is longer than the term, can't be matched + + tmp = term->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; + + termDocs->seek(enumerator); + while (termDocs->next()) { + handleDoc(termDocs->doc()); + } + } + }while(enumerator->next()); + } _CLFINALLY( + termDocs->close(); + _CLDELETE(termDocs); + enumerator->close(); + _CLDELETE(enumerator); + ) + } +}; + +class DefaultPrefixGenerator: public PrefixFilter::PrefixGenerator{ +public: + BitSet* bts; + DefaultPrefixGenerator(BitSet* bts, const Term* prefix): + PrefixGenerator(prefix) + { + this->bts = bts; + } + virtual ~DefaultPrefixGenerator(){ + } + void handleDoc(int doc) { + bts->set(doc); + } +}; + +PrefixFilter::PrefixFilter( Term* prefix ) +{ + this->prefix = _CL_POINTER(prefix); +} + +PrefixFilter::~PrefixFilter() +{ + _CLDECDELETE(prefix); +} + +PrefixFilter::PrefixFilter( const PrefixFilter& copy ) : + Filter(), + 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; + buffer.append(_T("PrefixFilter(")); + buffer.append(prefix->field()); + 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() ); + DefaultPrefixGenerator gen(bts, prefix); + gen.generate(reader); + return bts; +} + +CL_NS(index)::Term* PrefixFilter::getPrefix() const { return prefix; } + +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/PrefixQuery.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/PrefixQuery.h new file mode 100644 index 0000000..c5d5767 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/PrefixQuery.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_PrefixQuery +#define _lucene_search_PrefixQuery + +CL_CLASS_DEF(index,Term) +//#include "CLucene/index/Terms.h" +//#include "CLucene/index/IndexReader.h" +//#include "SearchHeader.h" +//#include "BooleanQuery.h" +//#include "TermQuery.h" +#include "Query.h" +#include "Filter.h" +CL_CLASS_DEF(util,StringBuffer) + +CL_NS_DEF(search) +/** A Query that matches documents containing terms with a specified prefix. A PrefixQuery +* is built by QueryParser for input like app*. */ + class CLUCENE_EXPORT 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 char* getObjectName() const; + static const char* getClassName(); + + /** Returns the prefix of this query. */ + CL_NS(index)::Term* getPrefix(bool pointer=true); + + Query* combine(CL_NS(util)::ArrayBase* 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 CLUCENE_EXPORT PrefixFilter: public Filter + { + private: + CL_NS(index)::Term* prefix; + protected: + PrefixFilter( const PrefixFilter& copy ); + public: + class PrefixGenerator; + + 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; + + /** Prints a user-readable version of this query. */ + TCHAR* toString(); + + // Returns a reference of internal prefix + CL_NS(index)::Term* getPrefix() const; + }; +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/Query.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/Query.h new file mode 100644 index 0000000..389cffe --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/Query.h @@ -0,0 +1,154 @@ +/*------------------------------------------------------------------------------ +* 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_Query_h +#define _lucene_search_Query_h + + +#include "CLucene/util/Array.h" +#include "CLucene/index/Term.h" +#include "CLucene/util/Equators.h" + +CL_CLASS_DEF(index,IndexReader) + + +CL_NS_DEF(search) + class Weight; + class Similarity; + class Searcher; + + typedef std::set TermSet; + + /** The abstract base class for queries. +

Instantiable subclasses are: +

    +
  • {@link TermQuery} +
  • {@link MultiTermQuery} +
  • {@link BooleanQuery} +
  • {@link WildcardQuery} +
  • {@link PhraseQuery} +
  • {@link PrefixQuery} +
  • {@link PhrasePrefixQuery} +
  • {@link FuzzyQuery} +
  • {@link RangeQuery} +
  • {@link spans.SpanQuery} +
+

A parser for queries is contained in: +

    +
  • {@link queryParser.QueryParser QueryParser} +
+ */ + class CLUCENE_EXPORT Query : public CL_NS(util)::NamedObject { + private: + // query boost factor + float_t boost; + protected: + Query(); + Query(const Query& clone); + public: + virtual ~Query(); + + /** Sets the boost for this query clause to b. Documents + * matching this clause will (in addition to the normal weightings) have + * their score multiplied by b. + */ + void setBoost(float_t b); + + /** Gets the boost for this clause. Documents matching + * this clause will (in addition to the normal weightings) have their score + * multiplied by b. The boost is 1.0 by default. + */ + float_t 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. + * + * @memory: + * The caller has to clean up. When rewrite() returns a pointer which + * differs from the pointer to the initial query, the pointer points + * to a newly allocated object and has also to be cleaned up. */ + virtual Query* rewrite(CL_NS(index)::IndexReader* reader); + + /** Expert: called when re-writing queries under MultiSearcher. + * + * Create a single query suitable for use by all subsearchers (in 1-1 + * correspondence with queries). This is an optimization of the OR of + * all queries. We handle the common optimization cases of equal + * queries and overlapping clauses of boolean OR queries (as generated + * by MultiTermQuery.rewrite() and RangeQuery.rewrite()). + * Be careful overriding this method as queries[0] determines which + * method will be called and is not necessarily of the same type as + * the other queries. + */ + virtual Query* combine(CL_NS(util)::ArrayBase* queries); + + /** Expert: adds all terms occurring in this query to the terms set. Only + * works if this query is in its {@link #rewrite rewritten} form. + * + * @memory: + * CLucene specific - all terms in the list have their reference counter + * increased by one. + * + * @throws CLuceneError with CL_ERR_UnsupportedOperation + */ + virtual void extractTerms( TermSet * termset ) const; + + /** Expert: merges the clauses of a set of BooleanQuery's into a single + * BooleanQuery. + * + *

A utility for use by {@link #combine(Query[])} implementations. + */ + static Query* mergeBooleanQueries(CL_NS(util)::ArrayBase* 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; + _CL_DEPRECATED(getObjectName) const char* getQueryName() const; + + /** Prints a query to a string, with field assumed to be the + * default field and omitted. + *

The representation used is one that is supposed to be readable + * by {@link org.apache.lucene.queryParser.QueryParser QueryParser}. However, + * there are the following limitations: + *

    + *
  • If the query was created by the parser, the printed + * representation may not be exactly what was parsed. For example, + * characters that need to be escaped will be represented without + * the required backslash.
  • + *
  • Some of the more complicated queries (e.g. span queries) + * don't have a representation that can be parsed by QueryParser.
  • + *
+ * + * @memory always returns a newly allocated string, which the caller is + * responsible for deleting + * + */ + 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. + * + *

Only implemented by primitive queries, which re-write to themselves. + * This is an Internal function + */ + virtual Weight* _createWeight(Searcher* searcher); + }; + +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/QueryFilter.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/QueryFilter.cpp new file mode 100644 index 0000000..7da64f1 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/QueryFilter.cpp @@ -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. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "QueryFilter.h" +#include "IndexSearcher.h" +#include "CLucene/index/IndexReader.h" +#include "CLucene/util/BitSet.h" +#include "SearchHeader.h" +#include "Query.h" + +CL_NS_DEF(search) +CL_NS_USE(util) +CL_NS_USE(index) + + +class QFHitCollector: public HitCollector{ + CL_NS(util)::BitSet* bits; +public: + QFHitCollector(CL_NS(util)::BitSet* bits){ + this->bits = bits; + } + void collect(const int32_t doc, const float_t /*score*/){ + bits->set(doc); // set bit for hit + } +}; + + +QueryFilter::QueryFilter( const Query* query ) +{ + this->query = query->clone(); + bDeleteQuery = true; +} + +QueryFilter::QueryFilter( Query* query, bool bDeleteQuery ) +{ + this->query = query; + this->bDeleteQuery = bDeleteQuery; +} + +QueryFilter::~QueryFilter() +{ + if( bDeleteQuery ) + _CLDELETE( query ); +} + + +QueryFilter::QueryFilter( const QueryFilter& copy ) +{ + this->query = copy.query->clone(); + bDeleteQuery = true; +} + + +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; +} + + +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/QueryFilter.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/QueryFilter.h new file mode 100644 index 0000000..452dd4e --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/QueryFilter.h @@ -0,0 +1,40 @@ +/*------------------------------------------------------------------------------ +* 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 "Filter.h" +CL_CLASS_DEF(search,Query) +//#include "CachingWrapperFilter.h" + +CL_NS_DEF(search) + +class CLUCENE_EXPORT QueryFilter: public Filter +{ +private: + Query* query; + bool bDeleteQuery; +protected: + QueryFilter( const QueryFilter& copy ); +public: + QueryFilter( const Query* query ); + QueryFilter( Query* query, bool bDeleteQuery ); + + ~QueryFilter(); + + CL_NS(util)::BitSet* bits( CL_NS(index)::IndexReader* reader ); + + Filter *clone() const; + + TCHAR *toString(); +}; + +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/RangeFilter.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/RangeFilter.cpp new file mode 100644 index 0000000..f802ea9 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/RangeFilter.cpp @@ -0,0 +1,148 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "CLucene/index/Term.h" +#include "CLucene/index/Terms.h" +#include "CLucene/index/IndexReader.h" +#include "CLucene/util/BitSet.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 ) + : fieldName(NULL), lowerTerm(NULL), upperTerm(NULL) + , includeLower(_includeLower), includeUpper(_includeUpper) +{ + if (NULL == _lowerTerm && NULL == _upperTerm) { + _CLTHROWT(CL_ERR_IllegalArgument, _T("At least one value must be non-null")); + } + if (_includeLower && NULL == _lowerTerm) { + _CLTHROWT(CL_ERR_IllegalArgument, _T("The lower bound must be non-null to be inclusive")); + } + if (_includeUpper && NULL == _upperTerm) { + _CLTHROWT(CL_ERR_IllegalArgument, _T("The upper bound must be non-null to be inclusive")); + } + + this->fieldName = STRDUP_TtoT(_fieldName); + if ( _lowerTerm != NULL ) + this->lowerTerm = STRDUP_TtoT(_lowerTerm); + if ( _upperTerm != NULL ) + this->upperTerm = STRDUP_TtoT(_upperTerm); +} + +RangeFilter::RangeFilter( const RangeFilter& copy ) : + fieldName( STRDUP_TtoT(copy.fieldName) ), + lowerTerm( STRDUP_TtoT(copy.lowerTerm) ), + upperTerm( STRDUP_TtoT(copy.upperTerm) ), + includeLower( copy.includeLower ), + includeUpper( copy.includeUpper ) +{ +} + +RangeFilter::~RangeFilter() +{ + _CLDELETE_LCARRAY( fieldName ); + _CLDELETE_LCARRAY( lowerTerm ); + _CLDELETE_LCARRAY( upperTerm ); +} + +RangeFilter* RangeFilter::Less( const TCHAR* _fieldName, const TCHAR* _upperTerm ) { + return _CLNEW RangeFilter( _fieldName, NULL, _upperTerm, false, true ); +} + +RangeFilter* RangeFilter::More( const TCHAR* _fieldName, const TCHAR* _lowerTerm ) { + return _CLNEW RangeFilter( _fieldName, _lowerTerm, NULL, true, false ); +} + +BitSet* RangeFilter::bits( IndexReader* reader ) +{ + BitSet* bts = _CLNEW BitSet( reader->maxDoc() ); + Term* term = NULL; + + Term* t = _CLNEW Term( fieldName, (lowerTerm ? lowerTerm : _T("")), false ); + TermEnum* enumerator = reader->terms( t ); // get enumeration of all terms after lowerValue + _CLDECDELETE( t ); + + if( enumerator->term(false) == NULL ) { + _CLLDELETE( enumerator ); + return bts; + } + + bool checkLower = false; + if( !includeLower ) // make adjustments to set to exclusive + checkLower = true; + + TermDocs* termDocs = reader->termDocs(); + + #define CLEANUP \ + _CLLDECDELETE( term ); \ + termDocs->close(); \ + _CLLDELETE( termDocs ); \ + enumerator->close(); \ + _CLLDELETE( enumerator ) + + try + { + do + { + term = enumerator->term(); + + if( term == NULL || _tcscmp(term->field(), fieldName) ) + break; + + if( !checkLower || lowerTerm == NULL || _tcscmp(term->text(), lowerTerm) > 0 ) + { + checkLower = false; + if( upperTerm != NULL ) + { + int compare = _tcscmp( upperTerm, 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() ); + }catch(CLuceneError& err){ + _CLDELETE(bts); + CLEANUP; + throw err; + } + CLEANUP; + + return bts; +} + +TCHAR* RangeFilter::toString() +{ + size_t len = (fieldName ? _tcslen(fieldName) : 0) + (lowerTerm ? _tcslen(lowerTerm) : 0) + (upperTerm ? _tcslen(upperTerm) : 0) + 8; + TCHAR* ret = _CL_NEWARRAY( TCHAR, len ); + ret[0] = 0; + _sntprintf( ret, len, _T("%s: [%s-%s]"), fieldName, (lowerTerm?lowerTerm:_T("")), (upperTerm?upperTerm:_T("")) ); + + return ret; +} + +Filter* RangeFilter::clone() const { + return _CLNEW RangeFilter(*this ); +} + +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/RangeFilter.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/RangeFilter.h new file mode 100644 index 0000000..e30925e --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/RangeFilter.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_RangeFilter_ +#define _lucene_search_RangeFilter_ + +#include "Filter.h" + +CL_CLASS_DEF(index,Term) + +CL_NS_DEF(search) + +/** + * A Filter that restricts search results to a range of values in a given + * field. + * + *

+ * This code borrows heavily from {@link RangeQuery}, but is implemented as a Filter + * + *

+ */ +class CLUCENE_EXPORT RangeFilter: public Filter +{ +private: + TCHAR* fieldName; + TCHAR* lowerTerm; + TCHAR* upperTerm; + bool includeLower; + bool includeUpper; + +public: + /** + * @param fieldName The field this range applies to + * @param lowerTerm The lower bound on this range + * @param upperTerm The upper bound on this range + * @param includeLower Does this range include the lower bound? + * @param includeUpper Does this range include the upper bound? + */ + RangeFilter( const TCHAR* fieldName, const TCHAR* lowerTerm, const TCHAR* upperTerm, + bool includeLower, bool includeUpper ); + virtual ~RangeFilter(); + + /** + * Constructs a filter for field fieldName matching + * less than or equal to upperTerm. + */ + static RangeFilter* Less( const TCHAR* fieldName, const TCHAR* upperTerm ); + + /** + * Constructs a filter for field fieldName matching + * more than or equal to lowerTerm. + */ + static RangeFilter* More( const TCHAR* fieldName, const TCHAR* lowerTerm ); + + /** + * 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(); + +protected: + RangeFilter( const RangeFilter& copy ); +}; + +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/RangeQuery.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/RangeQuery.cpp new file mode 100644 index 0000000..8fe5643 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/RangeQuery.cpp @@ -0,0 +1,194 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "RangeQuery.h" + +#include "SearchHeader.h" +#include "Scorer.h" +#include "BooleanQuery.h" +#include "TermQuery.h" +#include "Similarity.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 char* RangeQuery::getObjectName() const{ + return getClassName(); + } + const char* RangeQuery::getClassName(){ + return "RangeQuery"; + } + + Query* RangeQuery::combine(CL_NS(util)::ArrayBase* 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; + } + + + Query* RangeQuery::rewrite(IndexReader* reader){ + + BooleanQuery* query = _CLNEW BooleanQuery( true ); + 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; + } + + 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()); + } + + Term* RangeQuery::getLowerTerm(bool pointer) const { + if ( pointer ) + return _CL_POINTER(lowerTerm); + else + return lowerTerm; + } + + Term* RangeQuery::getUpperTerm(bool pointer) const { + if ( pointer ) + return _CL_POINTER(upperTerm); + else + return upperTerm; + } + + bool RangeQuery::isInclusive() const { return inclusive; } + + +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/RangeQuery.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/RangeQuery.h new file mode 100644 index 0000000..841ff25 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/RangeQuery.h @@ -0,0 +1,92 @@ +/*------------------------------------------------------------------------------ +* 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_ + +//#include "SearchHeader.h" +//#include "Scorer.h" +//#include "TermQuery.h" +#include "Query.h" + +CL_CLASS_DEF(index,Term) +//#include "CLucene/index/Terms.h" + +CL_CLASS_DEF(util,StringBuffer) + + +CL_NS_DEF(search) + +/** + * A Query that matches documents within an exclusive range. A RangeQuery + * is built by QueryParser for input like [010 TO 120] but only if the QueryParser has + * the useOldRangeQuery property set to true. The QueryParser default behaviour is to use + * the newer ConstantScoreRangeQuery class. This is generally preferable because: + *
    + *
  • It is faster than RangeQuery
  • + *
  • Unlike RangeQuery, it does not cause a BooleanQuery.TooManyClauses exception if the range of values is large
  • + *
  • Unlike RangeQuery it does not influence scoring based on the scarcity of individual terms that may match
  • + *
+ * + * + * @see ConstantScoreRangeQuery + * + * + * @version $Id: RangeQuery.java 520891 2007-03-21 13:58:47Z yonik $ + */ +class CLUCENE_EXPORT 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 + * lowerTerm but less than upperTerm. + * 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 must be for the same field. + */ + RangeQuery(CL_NS(index)::Term* LowerTerm, CL_NS(index)::Term* UpperTerm, const bool Inclusive); + ~RangeQuery(); + + const char* getObjectName() const; + static const char* getClassName(); + + /** + * FIXME: Describe rewrite method here. + * + * @param reader an IndexReader value + * @return a Query value + * @exception IOException if an error occurs + */ + Query* rewrite(CL_NS(index)::IndexReader* reader); + + Query* combine(CL_NS(util)::ArrayBase* queries); + + /** Prints a user-readable version of this query. */ + TCHAR* toString(const TCHAR* field) const; + + Query* clone() const; + + bool equals(Query * other) const; + + /** Returns the lower term of this range query */ + CL_NS(index)::Term* getLowerTerm(bool pointer=true) const; + /** Returns the upper term of this range query */ + CL_NS(index)::Term* getUpperTerm(bool pointer=true) const; + bool isInclusive() const; + /** Returns true if the range query is inclusive */ + const TCHAR* getField() const; + + size_t hashCode() const; +}; + +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/Scorer.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/Scorer.cpp new file mode 100644 index 0000000..9aa20fd --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/Scorer.cpp @@ -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. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "Scorer.h" +#include "SearchHeader.h" + +CL_NS_DEF(search) + +Scorer::Scorer(Similarity* _similarity) : similarity(_similarity){ +} + +Scorer::~Scorer(){ +} + +Similarity* Scorer::getSimilarity() const{ + return this->similarity; +} + +void Scorer::score(HitCollector* hc) { + while (next()) { + hc->collect(doc(), score()); + } +} + +bool Scorer::score( HitCollector* results, const int32_t maxDoc ) { + while( doc() < maxDoc ) { + results->collect( doc(), score() ); + if ( !next() ) + return false; + } + return true; +} +bool Scorer::sort(const Scorer* elem1, const Scorer* elem2){ + return elem1->doc() < elem2->doc(); +} + +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/Scorer.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/Scorer.h new file mode 100644 index 0000000..dab85fb --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/Scorer.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. +------------------------------------------------------------------------------*/ +#ifndef _lucene_search_Scorer_ +#define _lucene_search_Scorer_ + +CL_CLASS_DEF(search,Similarity) +CL_CLASS_DEF(search,HitCollector) +CL_CLASS_DEF(search,Explanation) + +CL_NS_DEF(search) + +/** +* Expert: Common scoring functionality for different types of queries. +* +*

+* A Scorer either iterates over documents matching a +* query in increasing order of doc Id, or provides an explanation of +* the score for a query for a given document. +*

+*

+* Document scores are computed using a given Similarity +* implementation. +*

+* @see BooleanQuery#setAllowDocsOutOfOrder +*/ +class CLUCENE_EXPORT Scorer { +private: + Similarity* similarity; +protected: + /** Constructs a Scorer. + * @param similarity The Similarity implementation used by this scorer. + */ + Scorer(Similarity* _similarity); + +public: + virtual ~Scorer(); + + /** Returns the Similarity implementation used by this scorer. */ + Similarity* getSimilarity() const; + + /** Scores and collects all matching documents. + * @param hc The collector to which all matching documents are passed through + * {@link HitCollector#collect(int, float)}. + *
When this method is used the {@link #explain(int)} method should not be used. + */ + virtual void score(HitCollector* hc) ; + + /** Expert: Collects matching documents in a range. Hook for optimization. + * Note that {@link #next()} must be called once before this method is called + * for the first time. + * @param hc The collector to which all matching documents are passed through + * {@link HitCollector#collect(int, float)}. + * @param max Do not score documents past this. + * @return true if more matching documents may remain. + */ + virtual bool score( HitCollector* results, const int32_t maxDoc ); + + /** + * Advances to the document matching this Scorer with the lowest doc Id + * greater than the current value of {@link #doc()} (or to the matching + * document with the lowest doc Id if next has never been called on + * this Scorer). + * + *

+ * When this method is used the {@link #explain(int)} method should not + * be used. + *

+ * + * @return true iff there is another document matching the query. + * @see BooleanQuery#setAllowDocsOutOfOrder + */ + virtual bool next() = 0; + + /** Returns the current document number matching the query. + * Initially invalid, until {@link #next()} is called the first time. + */ + virtual int32_t doc() const = 0; + + /** Returns the score of the current document matching the query. + * Initially invalid, until {@link #next()} or {@link #skipTo(int)} + * is called the first time. + */ + virtual float_t score() = 0; + + /** + * Skips to the document matching this Scorer with the lowest doc Id + * greater than or equal to a given target. + * + *

+ * The behavior of this method is undefined if the target specified is + * less than or equal to the current value of {@link #doc()}. + *

+ * Behaves as if written: + *

+	*   boolean skipTo(int target) {
+	*     do {
+	*       if (!next())
+	* 	     return false;
+	*     } while (target > doc());
+	*     return true;
+	*   }
+	* 
+ * Most implementations are considerably more efficient than that. + *

+ * + *

+ * When this method is used the {@link #explain(int)} method should not + * be used. + *

+ * + * @param target The target document number. + * @return true iff there is such a match. + * @see BooleanQuery#setAllowDocsOutOfOrder + */ + virtual bool skipTo(int32_t target) = 0; + + /** Returns an explanation of the score for a document. + *
When this method is used, the {@link #next()}, {@link #skipTo(int)} and + * {@link #score(HitCollector)} methods should not be used. + * @param doc The document number for the explanation. + */ + virtual Explanation* explain(int32_t doc) = 0; + + /** Returns a string which explains the object */ + virtual TCHAR* toString() = 0; + + static bool sort(const Scorer* elem1, const Scorer* elem2); +}; +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/ScorerDocQueue.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/ScorerDocQueue.cpp new file mode 100644 index 0000000..514d1af --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/ScorerDocQueue.cpp @@ -0,0 +1,191 @@ +#include "CLucene/_ApiHeader.h" +#include "ScorerDocQueue.h" +#include "Scorer.h" + +CL_NS_DEF(util) + +class ScorerDocQueue::HeapedScorerDoc:LUCENE_BASE { +public: + Scorer* _scorer; + int32_t _doc; + + HeapedScorerDoc( Scorer* s ); + HeapedScorerDoc( Scorer* s, int32_t doc ); + ~HeapedScorerDoc(); + + void adjust(); +}; + +ScorerDocQueue::HeapedScorerDoc::HeapedScorerDoc( Scorer* scorer ) : _scorer(scorer), _doc(scorer->doc()) +{ +} + +ScorerDocQueue::HeapedScorerDoc::HeapedScorerDoc( Scorer* scorer, int32_t doc ) : _scorer(scorer), _doc(doc) +{ +} + +ScorerDocQueue::HeapedScorerDoc::~HeapedScorerDoc() +{ +} + +void ScorerDocQueue::HeapedScorerDoc::adjust() +{ + this->_doc = _scorer->doc(); +} + +ScorerDocQueue::ScorerDocQueue( int32_t maxSize ) : maxSize(maxSize), _size(0) +{ + int heapSize = maxSize + 1; + heap = _CL_NEWARRAY( HeapedScorerDoc*, heapSize ); + for ( int32_t i = 0; i < heapSize; i++ ) { + heap[i] = NULL; + } + topHsd = heap[1]; +} + +ScorerDocQueue::~ScorerDocQueue() +{ + clear(); + _CLDELETE_ARRAY( heap ); +} + +void ScorerDocQueue::put( Scorer* scorer ) +{ + _size++; + heap[ _size ] = _CLNEW HeapedScorerDoc( scorer ); + upHeap(); +} + +bool ScorerDocQueue::insert( Scorer* scorer ) +{ + if ( _size < maxSize ) { + put( scorer ); + return true; + } else { + int32_t docNr = scorer->doc(); + if (( _size > 0 ) && ( !( docNr < topHsd->_doc ))) { + _CLDELETE( heap[1] ); + heap[1] = _CLNEW HeapedScorerDoc( scorer, docNr ); + downHeap(); + return true; + } else { + return false; + } + } +} + +Scorer* ScorerDocQueue::pop() +{ + Scorer* result = topHsd->_scorer; + popNoResult(); + return result; +} + +void ScorerDocQueue::adjustTop() +{ + topHsd->adjust(); + downHeap(); +} + +int32_t ScorerDocQueue::size() +{ + return _size; +} + +void ScorerDocQueue::clear() +{ + for ( int32_t i = 0; i <= _size; i++ ) { + _CLDELETE( heap[i] ); + } + _size = 0; +} + +Scorer* ScorerDocQueue::top() +{ + return topHsd->_scorer; +} + +int32_t ScorerDocQueue::topDoc() +{ + return topHsd->_doc; +} + +float_t ScorerDocQueue::topScore() +{ + return topHsd->_scorer->score(); +} + +bool ScorerDocQueue::topNextAndAdjustElsePop() +{ + return checkAdjustElsePop( topHsd->_scorer->next() ); +} + +bool ScorerDocQueue::topSkipToAndAdjustElsePop( int32_t target ) +{ + return checkAdjustElsePop( topHsd->_scorer->skipTo( target )); +} + +bool ScorerDocQueue::checkAdjustElsePop( bool cond ) +{ + if ( cond ) { + topHsd->_doc = topHsd->_scorer->doc(); + } else { + _CLLDELETE( heap[1] ); + heap[1] = heap[_size]; + heap[_size] = NULL; + _size--; + } + downHeap(); + return cond; +} + +void ScorerDocQueue::popNoResult() +{ + _CLLDELETE( heap[1] ); + heap[1] = heap[_size]; + heap[_size] = NULL; + _size--; + downHeap(); +} + +void ScorerDocQueue::upHeap() +{ + int32_t i = _size; + HeapedScorerDoc* node = heap[i]; + int32_t j = i >> 1; + while (( j > 0 ) && ( node->_doc < heap[j]->_doc )) { + heap[i] = heap[j]; + i = j; + j = j >> 1; + } + heap[i] = node; + topHsd = heap[1]; +} + +void ScorerDocQueue::downHeap() +{ + int32_t i = 1; + HeapedScorerDoc* node = heap[i]; + int32_t j = i << 1; + int32_t k = j + 1; + + if (( k <= _size ) && ( heap[k]->_doc < heap[j]->_doc )) { + j = k; + } + + while (( j <= _size ) && ( heap[j]->_doc < node->_doc )) { + heap[i] = heap[j]; + i = j; + j = i << 1; + k = j + 1; + if (( k <= _size ) && ( heap[k]->_doc < heap[j]->_doc )) { + j = k; + } + } + + heap[i] = node; + topHsd = heap[1]; +} + +CL_NS_END + diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/ScorerDocQueue.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/ScorerDocQueue.h new file mode 100644 index 0000000..34e8c81 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/ScorerDocQueue.h @@ -0,0 +1,54 @@ +/*------------------------------------------------------------------------------ +* 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_ScorerDocQueue_ +#define _lucene_util_ScorerDocQueue_ + + +CL_CLASS_DEF(search,Scorer) + +CL_NS_USE(search) +CL_NS_DEF(util) + +class CLUCENE_EXPORT ScorerDocQueue:LUCENE_BASE { +private: + class HeapedScorerDoc; + + HeapedScorerDoc** heap; + HeapedScorerDoc* topHsd; + + int32_t maxSize; + int32_t _size; + +public: + + ScorerDocQueue( int32_t maxSize ); + virtual ~ScorerDocQueue(); + + void put( Scorer* scorer ); + bool insert( Scorer* scorer ); + Scorer* pop(); + void adjustTop(); + int32_t size(); + void clear(); + + Scorer* top(); + int32_t topDoc(); + float_t topScore(); + bool topNextAndAdjustElsePop(); + bool topSkipToAndAdjustElsePop( int32_t target ); + +private: + + bool checkAdjustElsePop( bool cond ); + void popNoResult(); + void upHeap(); + void downHeap(); + +}; + +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/SearchHeader.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/SearchHeader.cpp new file mode 100644 index 0000000..3c48083 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/SearchHeader.cpp @@ -0,0 +1,232 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "SearchHeader.h" +#include "CLucene/document/Document.h" +#include "Similarity.h" +#include "BooleanQuery.h" +#include "Searchable.h" +#include "Hits.h" +#include "_FieldDocSortedHitQueue.h" +#include + +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(CL_NS(util)::ArrayBase* queries) { + std::vector allClauses; + + CL_NS(util)::ValueArray clauses; + for (size_t i = 0; i < queries->length; i++) { + assert(BooleanQuery::getClassName() == queries->values[i]->getObjectName()); + BooleanQuery* booleanQuery = (BooleanQuery*)queries->values[i]; + clauses.resize((booleanQuery->getClauseCount())); + booleanQuery->getClauses(clauses.values); + for (size_t j = 0; j < clauses.length; j++) { + allClauses.push_back(clauses.values[j]->clone()); + } + } + + bool coordDisabled = ( queries->length == 0 ) ? false : ((BooleanQuery*)queries->values[0])->isCoordDisabled(); + BooleanQuery* result = _CLNEW BooleanQuery(coordDisabled); + std::vector::iterator i = allClauses.begin(); + while ( i != allClauses.end() ){ + result->add(*i); + i++; + } + return result; +} + +Query::Query(const Query& clone):boost(clone.boost){ +} +Weight* Query::_createWeight(Searcher* /*searcher*/){ + _CLTHROWA(CL_ERR_UnsupportedOperation,"UnsupportedOperationException: Query::_createWeight"); +} + +Query::Query(): + boost(1.0f) +{ +} +Query::~Query(){ +} + +const char* Query::getQueryName() const{ return getObjectName(); } +/** Expert: called to re-write queries into primitive queries. */ +Query* Query::rewrite(CL_NS(index)::IndexReader* /*reader*/){ + return this; +} + +Query* Query::combine(CL_NS(util)::ArrayBase* queries){ + std::vector uniques; + for (size_t i = 0; i < queries->length; i++) { + Query* query = queries->values[i]; + CL_NS(util)::ValueArray clauses; + // check if we can split the query into clauses + bool splittable = query->instanceOf(BooleanQuery::getClassName()); + if(splittable){ + BooleanQuery* bq = (BooleanQuery*) query; + splittable = bq->isCoordDisabled(); + clauses.resize(bq->getClauseCount()); + bq->getClauses(clauses.values); + for (size_t j = 0; splittable && j < clauses.length; j++) { + splittable = (clauses[j]->getOccur() == BooleanClause::SHOULD); + } + } + if(splittable){ + for (size_t j = 0; j < clauses.length; j++) { + uniques.push_back(clauses[j]->getQuery()); + } + } else { + uniques.push_back(query); + } + } + // optimization: if we have just one query, just return it + if(uniques.size() == 1){ + return *uniques.begin(); + } + std::vector::iterator it = uniques.begin(); + BooleanQuery* result = _CLNEW BooleanQuery(true); + while (it != uniques.end() ){ + result->add(*it, BooleanClause::SHOULD); + + it++; + } + return result; +} +Similarity* Query::getSimilarity(Searcher* searcher) { + return searcher->getSimilarity(); +} +TCHAR* Query::toString() const{ + return toString(LUCENE_BLANK_STRING); +} + +void Query::setBoost(float_t b) { boost = b; } + +float_t Query::getBoost() const { return boost; } + +Weight* Query::weight(Searcher* searcher){ + Query* query = searcher->rewrite(this); + Weight* weight = query->_createWeight(searcher); + float_t sum = weight->sumOfSquaredWeights(); + float_t norm = getSimilarity(searcher)->queryNorm(sum); + weight->normalize(norm); + return weight; +} + +void Query::extractTerms( TermSet * termset ) const +{ + _CLTHROWA( CL_ERR_UnsupportedOperation,"UnsupportedOperationException: Query::extractTerms" ); +} + +TopFieldDocs::TopFieldDocs (int32_t totalHits, FieldDoc** fieldDocs, int32_t scoreDocsLen, SortField** fields): + TopDocs (totalHits, NULL, scoreDocsLen) +{ + this->fields = fields; + this->fieldDocs = fieldDocs; + this->scoreDocs = new ScoreDoc[scoreDocsLen]; + for (int32_t i=0;iscoreDocs[i] = this->fieldDocs[i]->scoreDoc; +} +TopFieldDocs::~TopFieldDocs(){ + if ( fieldDocs ){ + for (int32_t i=0;i= 0 +//Post - The instance has been created + +} + +TopDocs::~TopDocs(){ +//Func - Destructor +//Pre - true +//Post - The instance has been destroyed + + delete[] scoreDocs; +} + + + +Searcher::Searcher(){ + similarity = Similarity::getDefault(); +} +Searcher::~Searcher(){ +} + +Hits* Searcher::search(Query* query) { + return search(query, (Filter*)NULL ); +} + +Hits* Searcher::search(Query* query, Filter* filter) { + return _CLNEW Hits(this, query, filter); +} + +Hits* Searcher::search(Query* query, const Sort* sort){ + return _CLNEW Hits(this, query, NULL, sort); +} + +Hits* Searcher::search(Query* query, Filter* filter, const Sort* sort){ + return _CLNEW Hits(this, query, filter, sort); +} + +void Searcher::_search(Query* query, HitCollector* results) { + _search(query, NULL, results); +} + +void Searcher::setSimilarity(Similarity* similarity) { + this->similarity = similarity; +} + +Similarity* Searcher::getSimilarity(){ + return this->similarity; +} + +const char* Searcher::getClassName(){ + return "Searcher"; +} + +const char* Searcher::getObjectName() const{ + return Searcher::getClassName(); +} + + +Weight::~Weight(){ +} + +TCHAR* Weight::toString(){ + return STRDUP_TtoT(_T("Weight")); +} + + +Searchable::~Searchable(){ +} + + +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/SearchHeader.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/SearchHeader.h new file mode 100644 index 0000000..c7aa941 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/SearchHeader.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_search_SearchHeader_ +#define _lucene_search_SearchHeader_ + + +//#include "CLucene/index/IndexReader.h" +CL_CLASS_DEF(index,Term) +CL_CLASS_DEF(index,IndexReader) +//#include "Filter.h" +CL_CLASS_DEF(document,Document) +CL_CLASS_DEF(util,Comparable) +//#include "Sort.h" +//#include "CLucene/util/VoidList.h" +//#include "Explanation.h" +//#include "Similarity.h" + +CL_NS_DEF(search) + + class Query; + class Scorer; + class Explanation; + class Hits; + class Sort; + class FieldDoc; + class TopFieldDocs; + + /** Expert: Returned by low-level search implementations. + * @see TopDocs */ + struct CLUCENE_EXPORT ScoreDoc { + /** Expert: A hit document's number. + * @see Searcher#doc(int32_t) + */ + int32_t doc; + + /** Expert: The score of this document for the query. */ + float_t score; + }; + + /** Expert: Returned by low-level search implementations. + * @see Searcher#search(Query,Filter,int32_t) */ + class CLUCENE_EXPORT 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); + virtual ~TopDocs(); + + private: + /** Expert: Stores the maximum score value encountered, needed for normalizing. */ + //float_t maxScore; + }; + + /** Lower-level search API. + *
HitCollectors are primarily meant to be used to implement queries, + * sorting and filtering. + * @see Searcher#search(Query,HitCollector) + */ + class CLUCENE_EXPORT HitCollector: LUCENE_BASE { + public: + /** Called once for every non-zero scoring document, with the document number + * and its score. + * + *

If, for example, an application wished to collect all of the hits for a + * query in a BitSet, then it might:

+      *   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);
+      *       }
+      *     });
+      * 
+ * + *

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. + *

Note: The score 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 float_t score) = 0; + virtual ~HitCollector(){} + }; + + /** Expert: Calculate query weights and build query scorers. + * + *

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(float_t)}). This factor is then passed to + * {@link #normalize(float_t)}. At this point the weighting is complete and a + * scorer may be constructed by calling {@link #scorer(IndexReader)}. + */ + class CLUCENE_EXPORT Weight + { + public: + virtual ~Weight(); + + /** The query that this concerns. */ + virtual Query* getQuery() = 0; + + /** The weight for this query. */ + virtual float_t getValue() = 0; + + /** The sum of squared weights of contained query clauses. */ + virtual float_t sumOfSquaredWeights() = 0; + + /** Assigns the query normalization factor to this. */ + virtual void normalize(float_t 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 Explanation* explain(CL_NS(index)::IndexReader* reader, int32_t doc) = 0; + + virtual TCHAR* toString(); + }; + + class CLUCENE_EXPORT HitDoc + { + public: + float_t score; + int32_t id; + CL_NS(document)::Document* doc; + + HitDoc* next; // in doubly-linked cache + HitDoc* prev; // in doubly-linked cache + + HitDoc(const float_t s, const int32_t i); + virtual ~HitDoc(); + }; + + +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/Searchable.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/Searchable.h new file mode 100644 index 0000000..86ab605 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/Searchable.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_Searcher_ +#define _lucene_search_Searcher_ + + +//#include "CLucene/index/IndexReader.h" +CL_CLASS_DEF(index,Term) +//#include "Filter.h" +CL_CLASS_DEF(document,Document) +//#include "Sort.h" +//#include "CLucene/util/VoidList.h" +//#include "Explanation.h" +//#include "Similarity.h" + +CL_NS_DEF(search) + + //predefine classes + class Query; + class Filter; + class HitCollector; + class TopDocs; + class Explanation; + class Hits; + class Similarity; + class TopFieldDocs; + class Sort; + + + /** The interface for search implementations. + * + *

Implementations provide search over a single index, over multiple + * indices, and over indices on remote servers. + */ + class CLUCENE_EXPORT Searchable: LUCENE_BASE { + public: + virtual ~Searchable(); + + /** Lower-level search API. + * + *

{@link HitCollector#collect(int32_t,float_t)} is called for every non-zero + * scoring document. + * + *

Applications should only use this if they need all 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 term. + * 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 n + * hits for query, applying filter if non-null. + * + *

Called by {@link Hits}. + * + *

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 i. + * 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 doc scored against + * query. + * + *

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 n hits for query, applying + * filter if non-null, and sorting the hits by the criteria in + * sort. + * + *

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 CLUCENE_EXPORT Searcher:public Searchable { + private: + /** The Similarity implementation used by this searcher. */ + Similarity* similarity; + public: + Searcher(); + virtual ~Searcher(); + + // Returns the documents matching query. + Hits* search(Query* query); + + // Returns the documents matching query and + // filter. + Hits* search(Query* query, Filter* filter); + + /** Returns documents matching query sorted by + * sort. + */ + Hits* search(Query* query, const Sort* sort); + + /** Returns documents matching query and filter, + * sorted by sort. + */ + Hits* search(Query* query, Filter* filter, const Sort* sort); + + /** Lower-level search API. + * + *

{@link HitCollector#collect(int32_t ,float_t)} is called for every non-zero + * scoring document. + * + *

Applications should only use this if they need all of the + * matching documents. The high-level search API ({@link + * Searcher#search(Query*)}) is usually more efficient, as it skips + * non-high-scoring hits. + *

Note: The score 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); + + /** Expert: Set the Similarity implementation used by this Searcher. + * + * @see Similarity#setDefault(Similarity) + */ + void setSimilarity(Similarity* similarity); + + /** Expert: Return the Similarity implementation used by this Searcher. + * + *

This defaults to the current value of {@link Similarity#getDefault()}. + */ + Similarity* getSimilarity(); + + virtual const char* getObjectName() const; + static const char* getClassName(); + + virtual void _search(Query* query, Filter* filter, HitCollector* results) = 0; + }; + +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/Similarity.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/Similarity.cpp new file mode 100644 index 0000000..21da809 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/Similarity.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. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "Similarity.h" + +#include "CLucene/index/Term.h" +#include "SearchHeader.h" +#include "Searchable.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. + float_t 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 + }; + + float_t Similarity::byteToFloat(uint8_t b) { + return NORM_TABLE[b]; + } + + uint8_t Similarity::floatToByte(float_t f) { + return Similarity::encodeNorm(f); + } + +#else + + /** Cache of decoded bytes. */ + float_t 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(float_t 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; + } + + float_t intBitsToFloat(int32_t bits) + { + clvalue u; + u.i = bits; + return u.f; + } + + + float_t 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(float_t 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 float_t 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* Similarity_defaultImpl=NULL; + + void Similarity::setDefault(Similarity* similarity) { + _CLDELETE(Similarity_defaultImpl); + Similarity_defaultImpl = similarity; + } + + Similarity* Similarity::getDefault() { + if ( Similarity_defaultImpl == NULL ){ + Similarity_defaultImpl = _CLNEW DefaultSimilarity(); + } + return Similarity_defaultImpl; + } + void Similarity::_shutdown(){ + _CLDELETE(Similarity_defaultImpl); + } + + float_t 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(float_t 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 + } + + + float_t Similarity::idf(Term* term, Searcher* searcher) { + return idf(searcher->docFreq(term), searcher->maxDoc()); + } + + + float_t Similarity::idf(CL_NS(util)::CLVector* terms, Searcher* searcher) { + float_t _idf = 0.0f; + for (CL_NS(util)::CLVector::iterator i = terms->begin(); i != terms->end(); i++ ) { + _idf += idf((Term*)*i, searcher); + } + return _idf; + } + + Similarity::~Similarity(){ + } + + + + + DefaultSimilarity::DefaultSimilarity(){ + } + DefaultSimilarity::~DefaultSimilarity(){ + } + + float_t DefaultSimilarity::lengthNorm(const TCHAR* /*fieldName*/, int32_t numTerms) { + if ( numTerms == 0 ) //prevent div by zero + return 0; + return (1.0 / sqrt((float_t)numTerms)); + } + + float_t DefaultSimilarity::queryNorm(float_t sumOfSquaredWeights) { + if ( sumOfSquaredWeights == 0 ) //prevent div by zero + return 0.0f; + return (float_t)(1.0 / sqrt(sumOfSquaredWeights)); + } + + float_t DefaultSimilarity::tf(float_t freq) { + return sqrt(freq); + } + + float_t DefaultSimilarity::sloppyFreq(int32_t distance) { + return 1.0f / (distance + 1); + } + + float_t DefaultSimilarity::idf(int32_t docFreq, int32_t numDocs) { + return (float_t)(log(numDocs/(float_t)(docFreq+1)) + 1.0); + } + + float_t DefaultSimilarity::coord(int32_t overlap, int32_t maxOverlap) { + if ( maxOverlap == 0 ) + return 0.0f; + return overlap / (float_t)maxOverlap; + } +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/Similarity.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/Similarity.h new file mode 100644 index 0000000..388898a --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/Similarity.h @@ -0,0 +1,279 @@ +/*------------------------------------------------------------------------------ +* 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_ + +#include "CLucene/util/VoidList.h" +CL_CLASS_DEF(index,Term) + +CL_NS_DEF(search) + +class Searcher; +class DefaultSimilarity; + +/** Expert: Scoring API. +*

Subclasses implement search scoring. +* +*

The score of query q for document d is defined +* in terms of these methods as follows: +* +* +* +* +* +* +* +* +* +* +* +*
score(q,d) =
+* Σ +* {@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) +*  * +* {@link #coord(int32_t,int32_t) coord}(q,d) * +* {@link #queryNorm(float_t) queryNorm}(q) +*
+* t in q +*
+* +* @see #setDefault(Similarity) +* @see IndexWriter#setSimilarity(Similarity) +* @see Searcher#setSimilarity(Similarity) +*/ +class CLUCENE_EXPORT 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. + * + *

This is initially an instance of {@link DefaultSimilarity}. + * + * @see Searcher#setSimilarity(Similarity) + * @see IndexWriter#setSimilarity(Similarity) + */ + static Similarity* getDefault(); + + /** Cleanup static data */ + static CLUCENE_LOCAL void _shutdown(); + + /** Encodes a normalization factor for storage in an index. + * + *

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(float_t) + */ + static uint8_t encodeNorm(float_t f); + + /** Decodes a normalization factor stored in an index. + * @see #encodeNorm(float_t) + */ + static float_t decodeNorm(uint8_t b); + + static uint8_t floatToByte(float_t f); + static float_t byteToFloat(uint8_t b); + + /** Computes a score factor for a phrase. + * + *

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 + */ + float_t idf(CL_NS(util)::CLVector* terms, Searcher* searcher); + + template + float_t idf( TermIterator first, TermIterator last, Searcher* searcher ) + { + float_t _idf = 0.0f; + for( ; first != last; first++ ) { + _idf += idf(*first, searcher); + } + return _idf; + } + + //float_t idf(Term** terms, Searcher* searcher); + + + /** Computes a score factor for a simple term. + * + *

The default implementation is:

+   *   return idf(searcher.docFreq(term), searcher.maxDoc());
+   * 
+ * + * 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 + */ + float_t 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. + * + *

Terms and phrases repeated in a document indicate the topic of the + * document, so implementations of this method usually return larger values + * when freq is large, and smaller values when freq + * is small. + * + *

The default implementation calls {@link #tf(float_t)}. + * + * @param freq the frequency of a term within a document + * @return a score factor based on a term's within-document frequency + */ + inline float_t tf(int32_t freq){ return tf((float_t)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. + * + *

Matches in longer fields are less precise, so implemenations of this + * method usually return smaller values when numTokens is large, + * and larger values when numTokens is small. + * + *

That these values are computed under {@link + * IndexWriter#addDocument(Document)} and stored then using + * {#encodeNorm(float_t)}. 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 + * fieldName of doc. + * @return a normalization factor for hits on this field of this document + * + * @see Field#setBoost(float_t) + */ + virtual float_t 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. + * + *

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 float_t queryNorm(float_t 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(float_t)}. + * + *

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 float_t 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. + * + *

Terms and phrases repeated in a document indicate the topic of the + * document, so implemenations of this method usually return larger values + * when freq is large, and smaller values when freq + * 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 float_t tf(float_t 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. + * + *

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 float_t 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. + * + *

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 float_t coord(int32_t overlap, int32_t maxOverlap) = 0; +}; + + +/** Expert: Default scoring implementation. */ +class CLUCENE_EXPORT DefaultSimilarity: public Similarity { +public: + DefaultSimilarity(); + ~DefaultSimilarity(); + + /** Implemented as 1/sqrt(numTerms). */ + float_t lengthNorm(const TCHAR* fieldName, int32_t numTerms); + + /** Implemented as 1/sqrt(sumOfSquaredWeights). */ + float_t queryNorm(float_t sumOfSquaredWeights); + + /** Implemented as sqrt(freq). */ + inline float_t tf(float_t freq); + + /** Implemented as 1 / (distance + 1). */ + float_t sloppyFreq(int32_t distance); + + /** Implemented as log(numDocs/(docFreq+1)) + 1. */ + float_t idf(int32_t docFreq, int32_t numDocs); + + /** Implemented as overlap / maxOverlap. */ + float_t coord(int32_t overlap, int32_t maxOverlap); +}; + +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/SloppyPhraseScorer.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/SloppyPhraseScorer.cpp new file mode 100644 index 0000000..be9d38c --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/SloppyPhraseScorer.cpp @@ -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. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "Scorer.h" +#include "CLucene/index/Terms.h" +#include "SearchHeader.h" +#include "_PhrasePositions.h" +#include "_SloppyPhraseScorer.h" +#include "Similarity.h" + +CL_NS_USE(index) +CL_NS_DEF(search) + + SloppyPhraseScorer::SloppyPhraseScorer(Weight* _weight, TermPositions** tps, int32_t* offsets, + Similarity* similarity, int32_t _slop, uint8_t* norms): + PhraseScorer(_weight,tps,offsets,similarity,norms),slop(_slop),repeats(NULL),repeatsLen(0){ + //Func - Constructor + //Pre - tps != NULL + // tpsLength >= 0 + // n != NULL + //Post - Instance has been created + + CND_PRECONDITION(tps != NULL, "tps is NULL"); + } + + SloppyPhraseScorer::~SloppyPhraseScorer(){ + _CLDELETE_LARRAY(repeats); + } + + float_t SloppyPhraseScorer::phraseFreq() { + + CND_PRECONDITION(first != NULL,"first is NULL"); + CND_PRECONDITION(last != NULL,"last is NULL"); + CND_PRECONDITION(pq != NULL,"pq is NULL"); + + int32_t end = initPhrasePositions(); + float_t freq = 0.0f; + bool done = (end<0); + + while (!done) { + PhrasePositions* pp = pq->pop(); + int32_t start = pp->position; + int32_t next = pq->top()->position; + + bool tpsDiffer = true; + for (int32_t pos = start; pos <= next || !tpsDiffer; pos = pp->position) { + if (pos<=next && tpsDiffer) + start = pos; // advance pp to min window + if (!pp->nextPosition()) { + done = true; // ran out of a term -- done + break; + } + tpsDiffer = !pp->repeats || termPositionsDiffer(pp); + } + + const int32_t matchLength = end - start; + if (matchLength <= slop) + freq += getSimilarity()->sloppyFreq(matchLength); // score match + + if (pp->position > end) + end = pp->position; + pq->put(pp); // restore pq + + } + return freq; + } + + int32_t SloppyPhraseScorer::initPhrasePositions() { + int32_t end = 0; + PhrasePositions* pp = NULL; // used in order to solve msvc6 scope issues + + // no repeats at all (most common case is also the simplest one) + if (checkedRepeats && repeats==NULL) { + // build queue from list + pq->clear(); + for (pp = first; pp != NULL; pp = pp->_next) { + pp->firstPosition(); + if (pp->position > end) + end = pp->position; + pq->put(pp); // build pq from list + } + return end; + } + + // position the pp's + for (pp = first; pp != NULL; pp = pp->_next) + pp->firstPosition(); + + // one time initializatin for this scorer + if (!checkedRepeats) { + checkedRepeats = true; + // check for repeats + // TODO: is this correct, filtering clones using CLHashMap??? + PhrasePositionsMap* m = NULL; + for (pp = first; pp != NULL; pp = pp->_next) { + int32_t tpPos = pp->position + pp->offset; + for (PhrasePositions* pp2 = pp->_next; pp2 != NULL; pp2 = pp2->_next) { + int32_t tpPos2 = pp2->position + pp2->offset; + if (tpPos2 == tpPos) { + if (m == NULL) + m = new PhrasePositionsMap(false,false); + pp->repeats = true; + pp2->repeats = true; + m->put(pp,NULL); + m->put(pp2,NULL); + } + } + } + if (m!=NULL) { + repeatsLen = m->size(); + repeats = _CL_NEWARRAY(PhrasePositions*, repeatsLen + 1); + PhrasePositionsMap::iterator itr = m->begin(); + size_t pos = 0; + while ( itr!=m->end() ){ + repeats[pos] = itr->first; + ++itr; + ++pos; + } + repeats[repeatsLen + 1] = NULL; // NULL terminate the array + } + delete m; + } + + // with repeats must advance some repeating pp's so they all start with differing tp's + if (repeats!=NULL) { + // must propagate higher offsets first (otherwise might miss matches). + qsort(repeats, repeatsLen, sizeof(PhrasePositions*), comparePhrasePositions); + // now advance them + for (size_t i = 0; i < repeatsLen; i++) { + PhrasePositions* pp = repeats[i]; + while (!termPositionsDiffer(pp)) { + if (!pp->nextPosition()) + return -1; // ran out of a term -- done + } + } + } + + // build queue from list + pq->clear(); + for (pp = first; pp != NULL; pp = pp->_next) { + if (pp->position > end) + end = pp->position; + pq->put(pp); // build pq from list + } + + return end; + } + + // disalow two pp's to have the same tp position, so that same word twice + // in query would go elswhere in the matched doc + bool SloppyPhraseScorer::termPositionsDiffer(PhrasePositions* pp) { + // efficiency note: a more efficient implemention could keep a map between repeating + // pp's, so that if pp1a, pp1b, pp1c are repeats term1, and pp2a, pp2b are repeats + // of term2, pp2a would only be checked against pp2b but not against pp1a, pp1b, pp1c. + // However this would complicate code, for a rather rare case, so choice is to compromise here. + const int32_t tpPos = pp->position + pp->offset; + for (size_t i = 0; i < repeatsLen; i++) { + PhrasePositions* pp2 = repeats[i]; + if (pp2 == pp) + continue; + const int32_t tpPos2 = pp2->position + pp2->offset; + if (tpPos2 == tpPos) + return false; + } + return true; + } + + TCHAR* SloppyPhraseScorer::toString(){ + return stringDuplicate(_T("SloppyPhraseScorer")); + } +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/Sort.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/Sort.cpp new file mode 100644 index 0000000..03e0af5 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/Sort.cpp @@ -0,0 +1,340 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "Sort.h" +#include "Compare.h" +#include "SearchHeader.h" +#include "CLucene/util/_StringIntern.h" +#include "CLucene/util/StringBuffer.h" + +CL_NS_USE(util) +CL_NS_DEF(search) + + + SortField* SortField_FIELD_SCORE = NULL; + SortField* SortField_FIELD_DOC = NULL; + SortField* SortField::FIELD_SCORE(){ + if ( SortField_FIELD_SCORE == NULL ) + SortField_FIELD_SCORE = _CLNEW SortField (NULL, DOCSCORE,false); + return SortField_FIELD_SCORE; + } + SortField* SortField::FIELD_DOC(){ + if ( SortField_FIELD_DOC == NULL ) + SortField_FIELD_DOC = _CLNEW SortField (NULL, DOC,false); + return SortField_FIELD_DOC; + } + void SortField::_shutdown(){ + _CLDELETE(SortField_FIELD_SCORE); + _CLDELETE(SortField_FIELD_DOC); + } + + Sort* Sort_RELEVANCE = NULL; + Sort* Sort_INDEXORDER = NULL; + Sort* Sort::RELEVANCE(){ + if ( Sort_RELEVANCE == NULL ) + Sort_RELEVANCE = _CLNEW Sort(); + return Sort_RELEVANCE; + } + Sort* Sort::INDEXORDER(){ + if ( Sort_INDEXORDER == NULL ) + Sort_INDEXORDER = _CLNEW Sort (SortField::FIELD_DOC()); + return Sort_INDEXORDER; + } + void Sort::_shutdown(){ + _CLDELETE(Sort_RELEVANCE); + _CLDELETE(Sort_INDEXORDER); + } + + ScoreDocComparator* ScoreDocComparator_INDEXORDER = NULL; + ScoreDocComparator* ScoreDocComparator_RELEVANCE = NULL; + ScoreDocComparator* ScoreDocComparator::INDEXORDER(){ + if ( ScoreDocComparator_INDEXORDER == NULL ) + ScoreDocComparator_INDEXORDER = _CLNEW ScoreDocComparators::IndexOrder; + return ScoreDocComparator_INDEXORDER; + } + ScoreDocComparator* ScoreDocComparator::RELEVANCE(){ + if ( ScoreDocComparator_RELEVANCE == NULL ) + ScoreDocComparator_RELEVANCE = _CLNEW ScoreDocComparators::Relevance; + return ScoreDocComparator_RELEVANCE; + } + void ScoreDocComparator::_shutdown(){ + _CLDELETE(ScoreDocComparator_INDEXORDER); + _CLDELETE(ScoreDocComparator_RELEVANCE); + } + + + + SortField::SortField (const TCHAR* field) { + this->type = AUTO; + this->reverse = false; + this->field = CLStringIntern::intern(field); + this->factory = NULL; + } + + SortField::SortField (const TCHAR* field, int32_t type, bool reverse) { + this->field = (field != NULL) ? CLStringIntern::intern(field) : field; + this->type = type; + this->reverse = reverse; + this->factory = NULL; + } + + SortField::SortField(const SortField& clone){ + this->field = (clone.field != NULL) ? CLStringIntern::intern(clone.field) : clone.field; + this->type = clone.type; + this->reverse = clone.reverse; + this->factory = clone.factory; + } + SortField* SortField::clone() const{ + return _CLNEW SortField(*this); + } + + const TCHAR* SortField::getField() const { + return field; + } + int32_t SortField::getType() const { + return type; + } + bool SortField::getReverse() const { + return reverse; + } + SortComparatorSource* SortField::getFactory() const { + return factory; + } + + /** 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 null. + * @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 null. + * @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; + }*/ + + + SortField::SortField (const TCHAR* field, SortComparatorSource* comparator, bool reverse) { + this->field = (field != NULL) ? CLStringIntern::intern(field): 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("")); + break; + + case DOC: + buffer.append(_T("")); + break; + + case CUSTOM: + buffer.append (_T("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(); + } + + + + + + + + + + + + + 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); + } + } + + Sort::Sort (const TCHAR* field, bool reverse) { + this->fields=NULL; + setSort (field, reverse); + } + + Sort::Sort (const TCHAR** fields) { + this->fields=NULL; + setSort (fields); + } + Sort::Sort (SortField* field) { + this->fields=NULL; + setSort (field); + } + + Sort::Sort (SortField** fields) { + this->fields=NULL; + setSort (fields); + } + + 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; + } + + 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; + } + + + void Sort::setSort (SortField* field) { + clear(); + + this->fields = _CL_NEWARRAY(SortField*,2); + this->fields[0] = field; + this->fields[1] = NULL; + } + + 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;ifields[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(','); + + TCHAR* p = fields[i]->toString(); + buffer.append(p); + _CLDELETE_CARRAY(p); + + i++; + } + + return buffer.toString(); + } + + + + + + + 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/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/Sort.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/Sort.h new file mode 100644 index 0000000..e917293 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/Sort.h @@ -0,0 +1,426 @@ +/*------------------------------------------------------------------------------ +* 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_ + + +//#include "CLucene/index/IndexReader.h" +//#include "SearchHeader.h" +//#include "CLucene/util/Equator.h" +CL_CLASS_DEF(index,IndexReader) +CL_CLASS_DEF(util,Comparable) + +CL_NS_DEF(search) + +//predefine + class SortField; + class Sort; + +/** + * Expert: Compares two ScoreDoc objects for sorting. + * + */ + class CLUCENE_EXPORT ScoreDocComparator { + protected: + ScoreDocComparator(){} + public: + virtual ~ScoreDocComparator(); + + /** + * Compares two ScoreDoc objects and returns a result indicating their + * sort order. + * @param i First ScoreDoc + * @param j Second ScoreDoc + * @return a negative integer if i should come before j
+ * a positive integer if i should come after j
+ * 0 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 SortField.SCORE, + * SortField.DOC, SortField.STRING, + * SortField.INTEGER, SortField.FLOAT or + * SortField.CUSTOM. It is not valid to return + * SortField.AUTO. + * 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(); + + /** Cleanup static data */ + static CLUCENE_LOCAL void _shutdown(); + }; + +/** + * Expert: returns a comparator for sorting ScoreDocs. + * + */ +class CLUCENE_EXPORT 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 Name of the 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. + * + *

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 CLUCENE_EXPORT 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. + *

For example, if the Terms contained integer values, this method + * would return new Integer(termtext). 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 termtext that sorts + * according to the natural order of termtext. + * @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 CLUCENE_EXPORT 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 term values as encoded Longs. Sort values are Long and + * lower values are at the front. */ + LUCENE_STATIC_CONSTANT(int32_t, LONG=6); + + /** Sort using term values as encoded Doubles. Sort values are Double and + * lower values are at the front. */ + LUCENE_STATIC_CONSTANT(int32_t, DOUBLE=7); + + + /** 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(); + + /** Cleanup static data */ + static CLUCENE_LOCAL void _shutdown(); + + /** 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 null. + */ + 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 + + /** 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 null if + * type is SCORE or DOC. + * @param type Type of values in the terms. + * @param reverse True if natural order should be reversed (default=false). + */ + SortField (const TCHAR* field, int32_t type, bool reverse); + + /* + SortField (TCHAR* field, Locale* locale) { + SortField (TCHAR* field, Locale* locale, bool reverse);*/ + + /** Creates a sort, possibly in reverse, with a custom comparison function. + * @param field Name of field to sort by; cannot be null. + * @param comparator Returns a comparator for sorting hits. + * @param reverse True if natural order should be reversed (default=false). + */ + SortField (const TCHAR* field, SortComparatorSource* comparator, bool reverse=false); + + /** Returns the name of the field. Could return null + * if the sort is by SCORE or DOC. + * @return Name of field, possibly null. + */ + const TCHAR* getField() const; + + 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; + + /** Returns the Locale by which term values are interpreted. + * May return null if no Locale was specified. + * @return Locale, or null. + */ + /*Locale getLocale() { + return locale; + }*/ + + /** Returns whether the sort should be reversed. + * @return True if natural order should be reversed. + */ + bool getReverse() const; + + SortComparatorSource* getFactory() const; + + TCHAR* toString() const; +}; + + + +/** + * Encapsulates sort criteria for returned hits. + * + *

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: + * + *

document.add (new Field ("byNumber", Integer.toString(x), false, true, false)); + *
+ * + *

Valid Types of Values

+ * + *

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. + * + *

Integer term values should contain only digits and an optional + * preceeding negative sign. Values must be base 10 and in the range + * Integer.MIN_VALUE and Integer.MAX_VALUE 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 1..n where + * 1 is the first and n the last). + * + *

Float term values should conform to values accepted by + * {@link Float Float.valueOf(String)} (except that NaN + * and Infinity are not supported). + * Documents which should appear first in the sort + * should have low values, later documents high values. + * + *

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. + * + *

Object Reuse

+ * + *

One of these objects can be + * used multiple times and the sort order changed between usages. + * + *

This class is thread safe. + * + *

Memory Usage

+ * + *

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 IndexReader.maxDoc() for each field + * name for which a sort is performed. In other words, the size of the + * cache in bytes is: + * + *

4 * IndexReader.maxDoc() * (# of different fields actually used to sort) + * + *

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. + * + *

Note that the size of the cache is not affected by how many + * fields are in the index and might be used to sort - only by + * the ones actually used to sort a result set. + * + *

The cache is cleared each time a new IndexReader is + * passed in, or if the value returned by maxDoc() + * 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 CLUCENE_EXPORT 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(); + + /** Cleanup static data */ + static CLUCENE_LOCAL void _shutdown(); + + + /** 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(); + + /** Sorts possibly in reverse by the terms in field then by + * index order (document number). The type of value in field is determined + * automatically. + * @see SortField#AUTO + */ + Sort (const TCHAR* field, bool reverse=false); + + /** Sorts in succession by the terms in each field. + * The type of value in field is determined + * automatically. + * @see SortField#AUTO + */ + Sort (const TCHAR** fields); + + /** Sorts by the criteria in the given SortField. */ + Sort (SortField* field); + + /** Sorts in succession by the criteria in each SortField. */ + Sort (SortField** fields); + + /** Sets the sort to the terms in field possibly in reverse, + * then by index order (document number). */ + void setSort (const TCHAR* field, bool reverse=false); + + /** Sets the sort to the terms in each field in succession. */ + void setSort (const TCHAR** fieldnames); + + /** Sets the sort to the given criteria. */ + void setSort (SortField* field); + + /** Sets the sort to the given criteria in succession. */ + 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/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/SpanFilter.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/SpanFilter.h new file mode 100644 index 0000000..88721cf --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/SpanFilter.h @@ -0,0 +1,39 @@ +/*------------------------------------------------------------------------------ + * 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_SpanFilter_ +#define _lucene_search_SpanFilter_ + +#include "Filter.h" +#include "SpanFilterResult.h" + +CL_NS_DEF(search) + +/** Abstract base class providing a mechanism to restrict searches to a subset + of an index and also maintains and returns position information. + + This is useful if you want to compare the positions from a SpanQuery with the positions of items in + a filter. For instance, if you had a SpanFilter that marked all the occurrences of the word "foo" in documents, + and then you entered a new SpanQuery containing bar, you could not only filter by the word foo, but you could + then compare position information for post processing. + */ +class CLUCENE_EXPORT SpanFilter : public Filter +{ +public: + virtual ~SpanFilter() {} + + /** Returns a SpanFilterResult with true for documents which should be permitted in + * search results, and false for those that should not and Spans for where the true docs match. + * @param reader The {@link org.apache.lucene.index.IndexReader} to load position and bitset information from + * @return A {@link SpanFilterResult} + * @throws CLuceneError if there was an issue accessing the necessary information + */ + virtual SpanFilterResult * bitSpans( CL_NS(index)::IndexReader * reader ) = 0; + +}; + +CL_NS_END +#endif // _lucene_search_SpanFilter_ diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/SpanFilterResult.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/SpanFilterResult.h new file mode 100644 index 0000000..c262282 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/SpanFilterResult.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_search_SpanFilterResult_ +#define _lucene_search_SpanFilterResult_ + +#include "CLucene/util/BitSet.h" +#include "CLucene/util/VoidList.h" + +CL_NS_DEF(search) + +/** + * The results of a SpanQueryFilter. + * Wraps the BitSet and the position information from the SpanQuery + * + * NOTE: This API is still experimental and subject to change. + **/ +class CLUCENE_EXPORT SpanFilterResult +{ +public: + class StartEnd + { + private: + int32_t start; + int32_t end; + + public: + StartEnd( int32_t _start, int32_t _end ) : start(_start), end(_end) + {} + + virtual ~StartEnd() + {} + + /** + * @return The end position of this match + */ + int32_t getEnd() + { + return end; + } + + /** + * The Start position + * @return The start position of this match + */ + int32_t getStart() + { + return start; + } + }; + + + class PositionInfo + { + private: + int32_t doc; + CL_NS(util)::CLList* positions; + + public: + PositionInfo( int32_t _doc ) : doc(_doc) + { + positions = _CLNEW CL_NS(util)::CLList(); + } + + virtual ~PositionInfo() + { + _CLLDELETE( positions ); + } + + void addPosition( int32_t start, int32_t end ) + { + positions->push_back( _CLNEW StartEnd( start, end )); + } + + int32_t getDoc() + { + return doc; + } + + /** + * @return A List of {@link org.apache.lucene.search.SpanFilterResult.StartEnd} objects + */ + CL_NS(util)::CLList* getPositions() + { + return positions; + } + }; + + +private: + CL_NS(util)::BitSet * bits; + CL_NS(util)::CLList * positions; //Spans spans; + +public: + /** + * Constructor + * @param bits The bits for the Filter + * @param positions A List of {@link org.apache.lucene.search.SpanFilterResult.PositionInfo} objects + */ + SpanFilterResult( CL_NS(util)::BitSet * _bits, CL_NS(util)::CLList * _positions ) : + bits( _bits ), positions( _positions ) + {} + + virtual ~SpanFilterResult() + {} + + /** + * The first entry in the array corresponds to the first "on" bit. + * Entries are increasing by document order + * @return A List of PositionInfo objects + */ + CL_NS(util)::CLList * getPositions() + { + return positions; + } + + CL_NS(util)::BitSet * getBits() + { + return bits; + } +}; + +CL_NS_END +#endif // _lucene_search_SpanFilterResult_ + + + diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/SpanQueryFilter.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/SpanQueryFilter.cpp new file mode 100644 index 0000000..2d55f42 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/SpanQueryFilter.cpp @@ -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. + ------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "SpanQueryFilter.h" +#include "CLucene/index/IndexReader.h" +#include "CLucene/search/spans/Spans.h" + + +CL_NS_DEF(search) + +SpanQueryFilter::SpanQueryFilter() : query( NULL ) +{} + +SpanQueryFilter::SpanQueryFilter( const CL_NS2(search,spans)::SpanQuery * query ) +{ + this->query = (CL_NS2(search,spans)::SpanQuery *) query->clone(); + bDeleteQuery = true; +} + +SpanQueryFilter::SpanQueryFilter( CL_NS2(search,spans)::SpanQuery * query, bool bDeleteQuery ) +{ + this->query = query; + this->bDeleteQuery = bDeleteQuery; +} + +SpanQueryFilter::SpanQueryFilter( const SpanQueryFilter& copy ) +{ + this->query = (CL_NS2(search,spans)::SpanQuery *) copy.query->clone(); + bDeleteQuery = true; +} + +SpanQueryFilter::~SpanQueryFilter() +{ + if( bDeleteQuery ) + _CLDELETE( query ); +} + +Filter* SpanQueryFilter::clone() const +{ + return _CLNEW SpanQueryFilter( *this ); +} + +CL_NS(util)::BitSet * SpanQueryFilter::bits( CL_NS(index)::IndexReader * reader ) +{ + SpanFilterResult * result = bitSpans( reader ); + CL_NS(util)::BitSet * bits = result->getBits(); + _CLLDELETE( result ); + return bits; +} + +SpanFilterResult * SpanQueryFilter::bitSpans( CL_NS(index)::IndexReader * reader ) +{ + CL_NS(util)::BitSet * bits = _CLNEW CL_NS(util)::BitSet( reader->maxDoc() ); + CL_NS2(search,spans)::Spans * spans = query->getSpans( reader ); + CL_NS(util)::CLList * tmp = new CL_NS(util)::CLList(); + int32_t currentDoc = -1; + SpanFilterResult::PositionInfo * currentInfo = NULL; + + while( spans->next() ) + { + int32_t doc = spans->doc(); + bits->set( doc ); + if( currentDoc != doc ) + { + currentInfo = _CLNEW SpanFilterResult::PositionInfo( doc ); + tmp->push_back( currentInfo ); + currentDoc = doc; + } + currentInfo->addPosition( spans->start(), spans->end() ); + } + return _CLNEW SpanFilterResult( bits, tmp ); +} + +TCHAR* SpanQueryFilter::toString() +{ + TCHAR* qt = query->toString(); + size_t len = _tcslen( qt ) + 21; + TCHAR* ret = _CL_NEWARRAY( TCHAR, len ); + ret[0] = 0; + _sntprintf( ret, len, _T( "QueryWrapperFilter(%s)" ), qt ); + _CLDELETE_CARRAY( qt ); + return ret; +} + +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/SpanQueryFilter.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/SpanQueryFilter.h new file mode 100644 index 0000000..33cbbac --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/SpanQueryFilter.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_search_SpanQueryFilter_ +#define _lucene_search_SpanQueryFilter_ + +#include "SpanFilter.h" +#include "spans/SpanQuery.h" + +CL_NS_DEF(search) + +/** + * Constrains search results to only match those which also match a provided + * query. Also provides position information about where each document matches + * at the cost of extra space compared with the QueryWrapperFilter. + * There is an added cost to this above what is stored in a {@link QueryWrapperFilter}. Namely, + * the position information for each matching document is stored. + *

+ * This filter does not cache. See the {@link org.apache.lucene.search.CachingSpanFilter} for a wrapper that + * caches. + * + * @version $Id:$ + */ +class CLUCENE_EXPORT SpanQueryFilter : public SpanFilter +{ +protected: + CL_NS2(search,spans)::SpanQuery * query; + bool bDeleteQuery; + +protected: + SpanQueryFilter(); + SpanQueryFilter( const SpanQueryFilter& copy ); + +public: + /** Constructs a filter which only matches documents matching + * query. + * @param query The {@link org.apache.lucene.search.spans.SpanQuery} to use as the basis for the Filter. + */ + SpanQueryFilter( const CL_NS2(search,spans)::SpanQuery * query ); + + SpanQueryFilter( CL_NS2(search,spans)::SpanQuery * query, bool bDeleteQuery ); + + virtual ~SpanQueryFilter(); + + virtual Filter* clone() const; + + virtual CL_NS(util)::BitSet* bits( CL_NS(index)::IndexReader * reader ); + + virtual SpanFilterResult * bitSpans( CL_NS(index)::IndexReader * reader ); + + CL_NS2(search,spans)::SpanQuery * getQuery(); + + virtual TCHAR* toString(); + + +// public boolean equals( Object o ) { +// return o instanceof SpanQueryFilter && this.query.equals(((SpanQueryFilter) o).query); +// } +// +// public int hashCode() { +// return query.hashCode() ^ 0x923F64B9; +// } +}; + +inline CL_NS2(search,spans)::SpanQuery * SpanQueryFilter::getQuery() +{ + return query; +} + +CL_NS_END +#endif // _lucene_search_SpanQueryFilter_ diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/TermQuery.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/TermQuery.cpp new file mode 100644 index 0000000..79b4fd5 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/TermQuery.cpp @@ -0,0 +1,251 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "TermQuery.h" + +#include "SearchHeader.h" +#include "Scorer.h" +#include "CLucene/index/Term.h" +#include "Explanation.h" +#include "Similarity.h" +#include "Searchable.h" +#include "_TermScorer.h" +#include "CLucene/index/IndexReader.h" +#include "CLucene/util/StringBuffer.h" +#include "CLucene/index/Terms.h" + +#include + +CL_NS_USE(index) +CL_NS_DEF(search) + + + + class TermWeight: public Weight { + private: + Similarity* similarity; // ISH: was Searcher*, for no apparent reason + float_t value; + float_t idf; + float_t queryNorm; + float_t queryWeight; + + TermQuery* parentQuery; // CLucene specific + CL_NS(index)::Term* _term; + + public: + TermWeight(Searcher* searcher, TermQuery* parentQuery, CL_NS(index)::Term* _term); + virtual ~TermWeight(); + + // return a *new* string describing this object + TCHAR* toString(); + Query* getQuery() { return (Query*)parentQuery; } + float_t getValue() { return value; } + + float_t sumOfSquaredWeights(); + void normalize(float_t queryNorm); + Scorer* scorer(CL_NS(index)::IndexReader* reader); + Explanation* explain(CL_NS(index)::IndexReader* reader, int32_t doc); + }; + + + /** Constructs a query for the term t. */ + TermQuery::TermQuery(Term* t): + term( _CL_POINTER(t) ) + { + } + TermQuery::TermQuery(const TermQuery& clone): + Query(clone){ + this->term=_CL_POINTER(clone.term); + } + TermQuery::~TermQuery(){ + _CLLDECDELETE(term); + } + + Query* TermQuery::clone() const{ + return _CLNEW TermQuery(*this); + } + + const char* TermQuery::getClassName(){ + return "TermQuery"; + } + const char* TermQuery::getObjectName() 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; + } + + 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(); + } + + 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); + } + + TermWeight::TermWeight(Searcher* _searcher, TermQuery* _parentQuery, Term* term):similarity(_searcher->getSimilarity()), + value(0), queryNorm(0),queryWeight(0), parentQuery(_parentQuery),_term(term) + { + idf = similarity->idf(term, _searcher); // compute idf + } + + TermWeight::~TermWeight(){ + } + + // + TCHAR* TermWeight::toString() { + int32_t size=strlen(parentQuery->getObjectName()) + 10; + TCHAR* tmp = _CL_NEWARRAY(TCHAR, size); + _sntprintf(tmp,size,_T("weight(%S)"),parentQuery->getObjectName()); + return tmp; + } + + float_t TermWeight::sumOfSquaredWeights() { + // legacy // idf = parentQuery->getSimilarity(searcher)->idf(_term, searcher); // compute idf + queryWeight = idf * parentQuery->getBoost(); // compute query weight + return queryWeight * queryWeight; // square it + } + + void TermWeight::normalize(float_t _queryNorm) { + this->queryNorm = _queryNorm; + queryWeight *= queryNorm; // normalize query weight + value = queryWeight * idf; // idf for document + } + + Scorer* TermWeight::scorer(IndexReader* reader) { + TermDocs* termDocs = reader->termDocs(_term); + + if (termDocs == NULL) + return NULL; + + return _CLNEW TermScorer(this, termDocs, similarity, + reader->norms(_term->field())); + } + + Explanation* TermWeight::explain(IndexReader* reader, int32_t doc){ + ComplexExplanation* result = _CLNEW ComplexExplanation(); + + 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_LCARRAY(tmp); + result->setDescription(buf); + + _sntprintf(buf,LUCENE_SEARCH_EXPLANATION_DESC_LEN, + _T("idf(docFreq=%d, numDocs=%d)"), reader->docFreq(_term), reader->numDocs() ); + 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_LCARRAY(tmp); + queryExpl->setDescription(buf); + + Explanation* boostExpl = _CLNEW Explanation(parentQuery->getBoost(), _T("boost")); + if (parentQuery->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(parentQuery->getBoost()* // always 1.0 | TODO: original Java code is boostExpl.getValue() + idfExpl->getValue() * + queryNormExpl->getValue()); + result->addDetail(queryExpl); + + // explain field weight + const TCHAR* field = _term->field(); + ComplexExplanation* fieldExpl = _CLNEW ComplexExplanation(); + + tmp = _term->toString(); + _sntprintf(buf,LUCENE_SEARCH_EXPLANATION_DESC_LEN, + _T("fieldWeight(%s in %d), product of:"),tmp,doc); + _CLDELETE_LCARRAY(tmp); + fieldExpl->setDescription(buf); + + Scorer* sc = scorer(reader); + Explanation* tfExpl = sc->explain(doc); + _CLLDELETE(sc); + fieldExpl->addDetail(tfExpl); + fieldExpl->addDetail(idfExpl); + + Explanation* fieldNormExpl = _CLNEW Explanation(); + uint8_t* fieldNorms = reader->norms(field); + float_t 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->setMatch(tfExpl->isMatch()); + fieldExpl->setValue(tfExpl->getValue() * + idfExpl->getValue() * + fieldNormExpl->getValue()); + + if (queryExpl->getValue() == 1.0f){ + _CLLDELETE(result); + return fieldExpl; + } + + // combine them + result->setValue(queryExpl->getValue() * fieldExpl->getValue()); + + result->addDetail(fieldExpl); + result->setMatch(fieldExpl->getMatch()); + + return result; + } + + Weight* TermQuery::_createWeight(Searcher* _searcher) { + return _CLNEW TermWeight(_searcher,this,term); + } + + void TermQuery::extractTerms( TermSet * termset ) const + { + if( term && termset->end() == termset->find( term )) + termset->insert( _CL_POINTER( term )); + } + + +CL_NS_END + diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/TermQuery.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/TermQuery.h new file mode 100644 index 0000000..da4170d --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/TermQuery.h @@ -0,0 +1,52 @@ +/*------------------------------------------------------------------------------ +* 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_ + +CL_CLASS_DEF(index,Term) +CL_CLASS_DEF(util,StringBuffer) + +#include "Query.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 CLUCENE_EXPORT TermQuery: public Query { + private: + CL_NS(index)::Term* term; + protected: + Weight* _createWeight(Searcher* searcher); + TermQuery(const TermQuery& clone); + public: + // Constructs a query for the term t. + TermQuery(CL_NS(index)::Term* t); + virtual ~TermQuery(); + + static const char* getClassName(); + const char* getObjectName() const; + + /** Returns the term of this query. */ + CL_NS(index)::Term* getTerm(bool pointer=true) const; + + /** Prints a user-readable version of this query. */ + TCHAR* toString(const TCHAR* field) const; + + /** Returns true if o is equal to this. */ + bool equals(Query* other) const; + Query* clone() const; + + /** Returns a hash code value for this object.*/ + size_t hashCode() const; + + /** Expert: adds all terms occurring in this query to the termset set. */ + void extractTerms( TermSet * termset ) const; + + }; +CL_NS_END +#endif + diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/TermScorer.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/TermScorer.cpp new file mode 100644 index 0000000..2433fc4 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/TermScorer.cpp @@ -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. +------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "_TermScorer.h" +#include "SearchHeader.h" +#include "Explanation.h" +#include "CLucene/index/Term.h" +#include "CLucene/index/Terms.h" +#include "TermQuery.h" +#include "Similarity.h" +#include "Explanation.h" + +CL_NS_USE(index) +CL_NS_DEF(search) + + 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(){ + _CLLDELETE(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; + } + + Explanation* TermScorer::explain(int32_t doc) { + TermQuery* query = (TermQuery*)weight->getQuery(); + Explanation* tfExplanation = _CLNEW Explanation(); + int32_t tf = 0; + while (pointer < pointerMax) { + if (docs[pointer] == doc) + tf = freqs[pointer]; + pointer++; + } + if (tf == 0) { + if (termDocs->skipTo(doc)) { + 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_LCARRAY(termToString); + tfExplanation->setDescription(buf); + return tfExplanation; + } + + 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_LCARRAY(wb); + return ret; + } + + float_t TermScorer::score(){ + int32_t f = freqs[pointer]; + float_t 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 + } + + int32_t TermScorer::doc() const { return _doc; } + +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/WildcardQuery.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/WildcardQuery.cpp new file mode 100644 index 0000000..fd9c8c9 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/WildcardQuery.cpp @@ -0,0 +1,151 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "WildcardQuery.h" +#include "TermQuery.h" +#include "WildcardTermEnum.h" +#include "Similarity.h" +#include "CLucene/index/Term.h" +#include "CLucene/util/BitSet.h" +#include "CLucene/util/StringBuffer.h" +#include "CLucene/index/IndexReader.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 + termContainsWildcard = (_tcschr(term->text(), _T('*')) != NULL || _tcschr(term->text(), _T('?')) != NULL); +} + +WildcardQuery::~WildcardQuery(){ + //Func - Destructor + //Pre - true + //Post - true + +} + +const char* WildcardQuery::getObjectName() const{ + //Func - Returns the string "WildcardQuery" + //Pre - true + //Post - The string "WildcardQuery" has been returned + return getClassName(); +} + +const char* WildcardQuery::getClassName(){ + return "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()); +} + + +Query* WildcardQuery::rewrite(CL_NS(index)::IndexReader* reader) { + if (termContainsWildcard) + return MultiTermQuery::rewrite(reader); + + return _CLNEW TermQuery( getTerm(false) ); +} + + +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/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/WildcardQuery.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/WildcardQuery.h new file mode 100644 index 0000000..38ff226 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/WildcardQuery.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_WildcardQuery_ +#define _lucene_search_WildcardQuery_ + +//#include "CLucene/index/IndexReader.h" +CL_CLASS_DEF(index,Term) +#include "MultiTermQuery.h" +#include "Filter.h" +//#include "WildcardTermEnum.h" + +CL_NS_DEF(search) + +/** Implements the wildcard search query. Supported wildcards are *, which + * matches any character sequence (including the empty one), and ?, + * 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 * or + * ?. + * + * @see WildcardTermEnum + */ +class CLUCENE_EXPORT WildcardQuery: public MultiTermQuery { +protected: + FilteredTermEnum* getEnum(CL_NS(index)::IndexReader* reader); + WildcardQuery(const WildcardQuery& clone); +public: + WildcardQuery(CL_NS(index)::Term* term); + ~WildcardQuery(); + + const char* getObjectName() const; + static const char* getClassName(); + + size_t hashCode() const; + bool equals(Query* other) const; + Query* clone() const; + + Query* rewrite(CL_NS(index)::IndexReader* reader); +private: + bool termContainsWildcard; +}; + + + +class CLUCENE_EXPORT 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/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/WildcardTermEnum.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/WildcardTermEnum.cpp new file mode 100644 index 0000000..3b52f6e --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/WildcardTermEnum.cpp @@ -0,0 +1,155 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "WildcardTermEnum.h" +#include "CLucene/index/Term.h" +#include "CLucene/index/IndexReader.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 = cl_min(sidx, cidx); + CND_PRECONDITION(tidx != NULL, "tidx==NULL"); + int32_t idx = (int32_t)(tidx - pre); + preLen = idx; + CND_PRECONDITION(preLentextLength(), "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(); + } + + float_t WildcardTermEnum::difference() { + return 1.0f; + } + + bool WildcardTermEnum::endEnum() { + return _endEnum; + } + const char* WildcardTermEnum::getObjectName() const{ return getClassName(); } + const char* WildcardTermEnum::getClassName(){ return "WildcardTermEnum"; } + + 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/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/WildcardTermEnum.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/WildcardTermEnum.h new file mode 100644 index 0000000..370d9ce --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/WildcardTermEnum.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_WildcardTermEnum_ +#define _lucene_search_WildcardTermEnum_ + +//#include "CLucene/index/IndexReader.h" +CL_CLASS_DEF(index,Term) +CL_CLASS_DEF(index,IndexReader) +//#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-> + *

+ * Term enumerations are always ordered by term->compareTo(). Each term in + * the enumeration is greater than all that precede it. + */ + class CLUCENE_EXPORT 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 WildcardTermEnum. Passing in a + * {@link Term Term} that does not contain a + * LUCENE_WILDCARDTERMENUM_WILDCARD_STRING or + * LUCENE_WILDCARDTERMENUM_WILDCARD_CHAR will cause an exception to be thrown. + */ + WildcardTermEnum(CL_NS(index)::IndexReader* reader, CL_NS(index)::Term* term); + ~WildcardTermEnum(); + + float_t 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() const; + static const char* getClassName(); + }; +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/_BooleanScorer.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/_BooleanScorer.h new file mode 100644 index 0000000..5935a76 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/_BooleanScorer.h @@ -0,0 +1,103 @@ +/*------------------------------------------------------------------------------ +* 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_BooleanScorer_ +#define _lucene_search_BooleanScorer_ + + +#include "Scorer.h" + +CL_NS_DEF(search) + + class BooleanScorer: public Scorer { + private: + + class Bucket { + public: + int32_t doc; // tells if bucket is valid + float_t score; // incremental score + int32_t bits; // used for bool constraints + int32_t coord; // count of terms in score + Bucket* next; // next valid bucket + + Bucket(); + virtual ~Bucket(); + }; + + class SubScorer { + public: + bool done; + Scorer* scorer; + bool required; + bool prohibited; + const bool hasOwnership; + HitCollector* collector; + SubScorer* next; + SubScorer(Scorer* scr, const bool r, const bool p, HitCollector* c, SubScorer* nxt, const bool o); + virtual ~SubScorer(); + }; + + class BucketTable { + 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(); + virtual ~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 float_t score); + }; + + SubScorer* scorers; + BucketTable* bucketTable; + + int32_t maxCoord; + int32_t nextMask; + + int32_t end; + Bucket* current; + + int32_t minNrShouldMatch; + bool isTakingOwnership; + + public: + LUCENE_STATIC_CONSTANT(int32_t,BucketTable_SIZE=1024); + int32_t requiredMask; + int32_t prohibitedMask; + float_t* coordFactors; + + BooleanScorer( Similarity* similarity, int32_t minNrShouldMatch = 1, const bool isTakingOwnership = true ); + virtual ~BooleanScorer(); + void add(Scorer* scorer, const bool required, const bool prohibited); + int32_t doc() const { return current->doc; } + bool next(); + float_t score(); + void score( HitCollector* hc ); + bool skipTo(int32_t target); + Explanation* explain(int32_t doc); + virtual TCHAR* toString(); + void computeCoordFactors(); + + protected: + bool score( HitCollector* hc, const int32_t max ); + + }; + +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/_BooleanScorer2.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/_BooleanScorer2.h new file mode 100644 index 0000000..ce0b258 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/_BooleanScorer2.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_BooleanScorer2_ +#define _lucene_search_BooleanScorer2_ + +#include "Scorer.h" + +CL_NS_DEF(search) + + class CLUCENE_EXPORT BooleanScorer2: public Scorer { + private: + class Internal; + friend class Internal; + Internal* _internal; + + class Coordinator; + class SingleMatchScorer; + class NonMatchingScorer; + class ReqOptSumScorer; + class ReqExclScorer; + class BSConjunctionScorer; + class BSDisjunctionSumScorer; + protected: + bool score( HitCollector* hc, const int32_t max ); + public: + + BooleanScorer2( Similarity* similarity, int32_t minNrShouldMatch = 0, bool allowDocsOutOfOrder = false ); + virtual ~BooleanScorer2(); + + void add( Scorer* scorer, bool required, bool prohibited ); + void score( HitCollector* hc ); + int32_t doc() const; + bool next(); + float_t score(); + bool skipTo( int32_t target ); + Explanation* explain( int32_t doc ); + virtual TCHAR* toString(); + }; + +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/_ConjunctionScorer.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/_ConjunctionScorer.h new file mode 100644 index 0000000..e02bec7 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/_ConjunctionScorer.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_ConjunctionScorer_ +#define _lucene_search_ConjunctionScorer_ + +#include "Scorer.h" +#include "CLucene/util/Array.h" +CL_NS_DEF(search) + +/** Scorer for conjunctions, sets of queries, all of which are required. */ +class ConjunctionScorer: public Scorer { +private: + CL_NS(util)::ArrayBase* scorers; + typedef CL_NS(util)::CLVector > ScorersType; + bool firstTime; + bool more; + float_t coord; + int32_t lastDoc; + + Scorer* last(); + bool doNext(); + + bool init(int32_t target); +public: + ConjunctionScorer(Similarity* similarity, ScorersType* scorers); + ConjunctionScorer(Similarity* similarity, const CL_NS(util)::ArrayBase* scorers); + virtual ~ConjunctionScorer(); + virtual TCHAR* toString(); + int32_t doc() const; + bool next(); + bool skipTo(int32_t target); + virtual float_t score(); + virtual Explanation* explain(int32_t doc); +}; + +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/_DisjunctionSumScorer.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/_DisjunctionSumScorer.h new file mode 100644 index 0000000..5f25d3b --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/_DisjunctionSumScorer.h @@ -0,0 +1,139 @@ +/*------------------------------------------------------------------------------ +* 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_DisjunctionSumScorer_ +#define _lucene_search_DisjunctionSumScorer_ + +CL_NS_USE(util) +CL_NS_DEF(search) + +/** A Scorer for OR like queries, counterpart of ConjunctionScorer. +* This Scorer implements {@link Scorer#skipTo(int)} and uses skipTo() on the given Scorers. +* @java-todo Implement score(HitCollector, int). +*/ +class DisjunctionSumScorer : public Scorer { +public: + typedef CL_NS(util)::CLVector > ScorersType; +private: + /** The minimum number of scorers that should match. */ + int32_t minimumNrMatchers; + + /** The scorerDocQueue contains all subscorers ordered by their current doc(), + * with the minimum at the top. + *
The scorerDocQueue is initialized the first time next() or skipTo() is called. + *
An exhausted scorer is immediately removed from the scorerDocQueue. + *
If less than the minimumNrMatchers scorers + * remain in the scorerDocQueue next() and skipTo() return false. + *

+ * After each to call to next() or skipTo() + * currentSumScore is the total score of the current matching doc, + * nrMatchers is the number of matching scorers, + * and all scorers are after the matching doc, or are exhausted. + */ + ScorerDocQueue* scorerDocQueue; + int32_t queueSize; // used to avoid size() method calls on scorerDocQueue + + /** The document number of the current match. */ + int32_t currentDoc; + float_t currentScore; + + /** Called the first time next() or skipTo() is called to + * initialize scorerDocQueue. + */ + void initScorerDocQueue(); + +protected: + /** The number of subscorers. */ + int32_t nrScorers; + + /** The subscorers. */ + DisjunctionSumScorer::ScorersType subScorers; + + /** The number of subscorers that provide the current match. */ + int32_t _nrMatchers; + + /** Expert: Collects matching documents in a range. Hook for optimization. + * Note that {@link #next()} must be called once before this method is called + * for the first time. + * @param hc The collector to which all matching documents are passed through + * {@link HitCollector#collect(int, float)}. + * @param max Do not score documents past this. + * @return true if more matching documents may remain. + */ + bool score( HitCollector* hc, const int32_t max ); + + /** Advance all subscorers after the current document determined by the + * top of the scorerDocQueue. + * Repeat until at least the minimum number of subscorers match on the same + * document and all subscorers are after that document or are exhausted. + *
On entry the scorerDocQueue has at least minimumNrMatchers + * available. At least the scorer with the minimum document number will be advanced. + * @return true iff there is a match. + *
In case there is a match, currentDoc, currentSumScore, + * and nrMatchers describe the match. + * + * @todo Investigate whether it is possible to use skipTo() when + * the minimum number of matchers is bigger than one, ie. try and use the + * character of ConjunctionScorer for the minimum number of matchers. + * Also delay calling score() on the sub scorers until the minimum number of + * matchers is reached. + *
For this, a Scorer array with minimumNrMatchers elements might + * hold Scorers at currentDoc that are temporarily popped from scorerQueue. + */ + bool advanceAfterCurrent(); + +public: + /** Construct a DisjunctionScorer, using one as the minimum number + * of matching subscorers. + * @param subScorers A collection of at least two subscorers. + * @param minimumNrMatchers The positive minimum number of subscorers that should + * match to match this query. + *
When minimumNrMatchers is bigger than + * the number of subScorers, + * no matches will be produced. + *
When minimumNrMatchers equals the number of subScorers, + * it more efficient to use ConjunctionScorer. + */ + DisjunctionSumScorer( DisjunctionSumScorer::ScorersType* _subScorers, const int32_t _minimumNrMatchers = 1); + virtual ~DisjunctionSumScorer(); + + /** Scores and collects all matching documents. + * @param hc The collector to which all matching documents are passed through + * {@link HitCollector#collect(int, float)}. + *
When this method is used the {@link #explain(int)} method should not be used. + */ + void score( HitCollector* hc ); + bool next(); + + /** Returns the score of the current document matching the query. + * Initially invalid, until {@link #next()} is called the first time. + */ + virtual float_t score(); + + int32_t doc() const; + + /** Returns the number of subscorers matching the current document. + * Initially invalid, until {@link #next()} is called the first time. + */ + int32_t nrMatchers() const; + + /** Skips to the first match beyond the current whose document number is + * greater than or equal to a given target. + *
When this method is used the {@link #explain(int)} method should not be used. + *
The implementation uses the skipTo() method on the subscorers. + * @param target The target document number. + * @return true iff there is such a match. + */ + bool skipTo( int32_t target ); + + virtual TCHAR* toString(); + + /** @return An explanation for the score of a given document. */ + Explanation* explain( int32_t doc ); +}; + +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/_ExactPhraseScorer.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/_ExactPhraseScorer.h new file mode 100644 index 0000000..c88dcaa --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/_ExactPhraseScorer.h @@ -0,0 +1,28 @@ +/*------------------------------------------------------------------------------ +* 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_ + +#include "_PhraseScorer.h" + +CL_NS_DEF(search) + + class ExactPhraseScorer: public PhraseScorer { + public: + ExactPhraseScorer(Weight* weight, CL_NS(index)::TermPositions** tps, int32_t* offsets, + Similarity* similarity, uint8_t* norms ); + + virtual ~ExactPhraseScorer(); + + virtual TCHAR* toString(); + + protected: + //Returns the exact freqency of the phrase + float_t phraseFreq(); + }; +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/_FieldCacheImpl.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/_FieldCacheImpl.h new file mode 100644 index 0000000..98bbcdd --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/_FieldCacheImpl.h @@ -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. +------------------------------------------------------------------------------*/ +#ifndef _lucene_search_FieldCacheImpl_ +#define _lucene_search_FieldCacheImpl_ + +CL_CLASS_DEF(index,IndexReader) +CL_CLASS_DEF(search,SortComparator) +CL_CLASS_DEF(search,SortComparatorSource) +#include "FieldCache.h" +#include "CLucene/LuceneThreads.h" +CL_NS_DEF(search) + +class fieldcacheCacheType; + +/** + * 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 // + { + 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 // + { + public: + bool operator()( FileEntry* f1, FileEntry* f2 ) const{ + return ( f1->compareTo(f2) == 0 ); + } + }; + }; + + FieldCacheImpl(); + virtual ~FieldCacheImpl(); +private: + /** 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/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/_FieldDocSortedHitQueue.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/_FieldDocSortedHitQueue.h new file mode 100644 index 0000000..a4dae1b --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/_FieldDocSortedHitQueue.h @@ -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. +------------------------------------------------------------------------------*/ +#ifndef _lucene_search_FieldDocSortedHitQueue_ +#define _lucene_search_FieldDocSortedHitQueue_ + + +#include "Sort.h" +#include "FieldDoc.h" +#include "CLucene/util/PriorityQueue.h" + +CL_NS_DEF(search) + +/** + * 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 > +{ +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 NULL. + * 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 NULL. The collators + * correspond to any SortFields which were given a specific locale. + * @param fields Array of sort fields. + * @return Array, possibly NULL. + + private Collator[] hasCollators (SortField[] fields) { + if (fields == NULL) return NULL; + Collator[] ret = new Collator[fields.length]; + for (int32_t i=0; ia is less relevant than b. + * @param a FieldDoc + * @param b FieldDoc + * @return true if document a should be sorted after document b. + */ + 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/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/_HitQueue.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/_HitQueue.h new file mode 100644 index 0000000..3058aab --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/_HitQueue.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_HitQueue_ +#define _lucene_search_HitQueue_ + +CL_NS_DEF(search) +struct ScoreDoc; + +/** +* 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/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/_PhrasePositions.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/_PhrasePositions.h new file mode 100644 index 0000000..db1f517 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/_PhrasePositions.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_PhrasePositions_ +#define _lucene_search_PhrasePositions_ + +#include "CLucene/index/Terms.h" + +CL_NS_DEF(search) + +/** + * Position of a term in a document that takes into account the term offset within the phrase. + */ +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 + bool repeats; // there's other pp for same term (e.g. query="1st word 2nd word"~1) + + PhrasePositions(CL_NS(index)::TermPositions* Tp, const int32_t o); + ~PhrasePositions(); + + bool next(); + bool skipTo(int32_t target); + + void firstPosition(); + + /** + * Go to next location of this term current document, and set + * position as location - offset, so that a + * matching exact phrase is easily identified when all PhrasePositions + * have exactly the same position. + */ + bool nextPosition(); +}; +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/_PhraseQueue.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/_PhraseQueue.h new file mode 100644 index 0000000..3f7ea3d --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/_PhraseQueue.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_search_PhraseQueue_ +#define _lucene_search_PhraseQueue_ + + +#include "CLucene/util/PriorityQueue.h" +#include "_PhrasePositions.h" + +CL_NS_DEF(search) + class PhraseQueue: public CL_NS(util)::PriorityQueue > { + public: + PhraseQueue(const int32_t size) { + initialize(size,false); + } + virtual ~PhraseQueue(){ + } + + protected: + bool lessThan(PhrasePositions* pp1, PhrasePositions* pp2) { + if (pp1->doc == pp2->doc){ + if (pp1->position == pp2->position) + // same doc and pp.position, so decide by actual term positions. + // rely on: pp.position == tp.position - offset. + return pp1->offset < pp2->offset; + else + return pp1->position < pp2->position; + }else + return pp1->doc < pp2->doc; + } + }; +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/_PhraseScorer.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/_PhraseScorer.h new file mode 100644 index 0000000..1760596 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/_PhraseScorer.h @@ -0,0 +1,78 @@ +/*------------------------------------------------------------------------------ +* 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_ + +#include "_PhraseQueue.h" +#include "Scorer.h" + +CL_NS_DEF(search) + +class Explanation; +/** Expert: Scoring functionality for phrase queries. +*
A document is considered matching if it contains the phrase-query terms +* at "valid" positons. What "valid positions" are +* depends on the type of the phrase query: for an exact phrase query terms are required +* to appear in adjacent locations, while for a sloppy phrase query some distance between +* the terms is allowed. The abstract method {@link #phraseFreq()} of extending classes +* is invoked for each document containing all the phrase query terms, in order to +* compute the frequency of the phrase query in that document. A non zero frequency +* means a match. +*/ +class PhraseScorer: public Scorer { +private: + Weight* weight; +protected: + uint8_t* norms; + float_t value; +private: + bool firstTime; + bool more; +protected: + float_t freq; //phrase frequency in current doc as computed by phraseFreq(). + + 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* offsets, Similarity* similarity, uint8_t* _norms); + virtual ~PhraseScorer(); + + int32_t doc() const; + bool next(); + float_t score(); + bool skipTo(int32_t target); + + + Explanation* explain(int32_t doc); + virtual TCHAR* toString(); +protected: + /** + * For a document containing all the phrase query terms, compute the + * frequency of the phrase in that document. + * A non zero frequency means a match. + *
Note, that containing all phrase terms does not guarantee a match - they have to be found in matching locations. + * @return frequency of the phrase in current doc, 0 if not found. + */ + virtual float_t 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/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/_SloppyPhraseScorer.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/_SloppyPhraseScorer.h new file mode 100644 index 0000000..6498475 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/_SloppyPhraseScorer.h @@ -0,0 +1,78 @@ +/*------------------------------------------------------------------------------ +* 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_ + +#include "_PhraseScorer.h" + +CL_NS_DEF(search) + class SloppyPhraseScorer: public PhraseScorer { + private: + int32_t slop; + PhrasePositions** repeats; + size_t repeatsLen; + bool checkedRepeats; + public: + SloppyPhraseScorer(Weight* weight, CL_NS(index)::TermPositions** tps, + int32_t* offsets, Similarity* similarity, + int32_t _slop, uint8_t* norms); + virtual ~SloppyPhraseScorer(); + protected: + /** + * Score a candidate doc for all slop-valid position-combinations (matches) + * encountered while traversing/hopping the PhrasePositions. + *
The score contribution of a match depends on the distance: + *
- highest score for distance=0 (exact match). + *
- score gets lower as distance gets higher. + *
Example: for query "a b"~2, a document "x a b a y" can be scored twice: + * once for "a b" (distance=0), and once for "b a" (distance=2). + *
Pssibly not all valid combinations are encountered, because for efficiency + * we always propagate the least PhrasePosition. This allows to base on + * PriorityQueue and move forward faster. + * As result, for example, document "a b c b a" + * would score differently for queries "a b c"~4 and "c b a"~4, although + * they really are equivalent. + * Similarly, for doc "a b c b a f g", query "c b"~2 + * would get same score as "g f"~2, although "c b"~2 could be matched twice. + * We may want to fix this in the future (currently not, for performance reasons). + */ + float_t phraseFreq(); + private: + typedef CL_NS(util)::CLHashMap, + CL_NS(util)::Equals::Void > + PhrasePositionsMap; + static int comparePhrasePositions(const void* x, const void* y){ + return static_cast(y)->offset - static_cast(x)->offset; + } + + /** + * Init PhrasePositions in place. + * There is a one time initializatin for this scorer: + *
- Put in repeats[] each pp that has another pp with same position in the doc. + *
- Also mark each such pp by pp.repeats = true. + *
Later can consult with repeats[] in termPositionsDiffer(pp), making that check efficient. + * In particular, this allows to score queries with no repetiotions with no overhead due to this computation. + *
- Example 1 - query with no repetitions: "ho my"~2 + *
- Example 2 - query with repetitions: "ho my my"~2 + *
- Example 3 - query with repetitions: "my ho my"~2 + *
Init per doc w/repeats in query, includes propagating some repeating pp's to avoid false phrase detection. + * @return end (max position), or -1 if any term ran out (i.e. done) + * @throws IOException + */ + int32_t initPhrasePositions(); + + // disalow two pp's to have the same tp position, so that same word twice + // in query would go elswhere in the matched doc + bool termPositionsDiffer(PhrasePositions* pp); + + public: + virtual TCHAR* toString(); + }; +CL_NS_END +#endif + diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/_TermScorer.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/_TermScorer.h new file mode 100644 index 0000000..2095cb2 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/_TermScorer.h @@ -0,0 +1,82 @@ +/*------------------------------------------------------------------------------ +* 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_ + + +#include "Scorer.h" +#include "CLucene/index/Terms.h" +CL_CLASS_DEF(search,Similarity) +#include "SearchHeader.h" + +CL_NS_DEF(search) + +/** Expert: A Scorer for documents matching a Term. +*/ +class TermScorer: public Scorer { +private: + CL_NS(index)::TermDocs* termDocs; + uint8_t* norms; + Weight* weight; + const float_t weightValue; + int32_t _doc; + + int32_t docs[32]; // buffered doc numbers + int32_t freqs[32]; // buffered term freqs + int32_t pointer; + int32_t pointerMax; + + float_t scoreCache[LUCENE_SCORE_CACHE_SIZE]; +public: + + /** Construct a TermScorer. + * @param weight The weight of the Term in the query. + * @param td An iterator over the documents matching the Term. + * @param similarity The Similarity implementation to be used for score computations. + * @param norms The field norms of the document fields for the Term. + * + * @memory TermScorer takes TermDocs and deletes it when TermScorer is cleaned up */ + TermScorer(Weight* weight, CL_NS(index)::TermDocs* td, + Similarity* similarity, uint8_t* _norms); + + virtual ~TermScorer(); + + /** Returns the current document number matching the query. + * Initially invalid, until {@link #next()} is called the first time. + */ + int32_t doc() const; + + + /** Advances to the next document matching the query. + *
The iterator over the matching documents is buffered using + * {@link TermDocs#read(int[],int[])}. + * @return true iff there is another document matching the query. + */ + bool next(); + + float_t score(); + + /** Skips to the first match beyond the current whose document number is + * greater than or equal to a given target. + *
The implementation uses {@link TermDocs#skipTo(int)}. + * @param target The target document number. + * @return true iff there is such a match. + */ + bool skipTo(int32_t target); + + /** Returns an explanation of the score for a document. + *
When this method is used, the {@link #next()} method + * and the {@link #score(HitCollector)} method should not be used. + * @param doc The document number for the explanation. + */ + Explanation* explain(int32_t doc); + + /** Returns a string representation of this TermScorer. */ + virtual TCHAR* toString(); +}; +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/spans/NearSpansOrdered.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/spans/NearSpansOrdered.cpp new file mode 100644 index 0000000..a745ec2 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/spans/NearSpansOrdered.cpp @@ -0,0 +1,285 @@ +/*------------------------------------------------------------------------------ + * 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/_ApiHeader.h" +#include "CLucene/index/IndexReader.h" +#include "CLucene/util/StringBuffer.h" + +#include +#include + +#include "_NearSpansOrdered.h" +#include "SpanNearQuery.h" + + +CL_NS_DEF2( search, spans ) + +bool spanDocCompare( Spans * s1, Spans * s2 ) +{ + return s1->doc() < s2->doc(); +} + +NearSpansOrdered::NearSpansOrdered( SpanNearQuery * spanNearQuery, CL_NS(index)::IndexReader * reader ) +{ + firstTime = true; + more = false; + + inSameDoc = false; + + matchDoc = -1; + matchStart = -1; + matchEnd = -1; + + if( spanNearQuery->getClausesCount() < 2 ) + { + TCHAR * tszQry = spanNearQuery->toString(); + size_t bBufLen = _tcslen( tszQry ) + 25; + TCHAR * tszMsg = _CL_NEWARRAY( TCHAR, bBufLen ); + _sntprintf( tszMsg, bBufLen, _T( "Less than 2 clauses: %s" ), tszQry ); + _CLDELETE_LCARRAY( tszQry ); + _CLTHROWT_DEL( CL_ERR_IllegalArgument, tszMsg ); + } + + allowedSlop = spanNearQuery->getSlop(); + + subSpansCount = spanNearQuery->getClausesCount(); + subSpans = _CL_NEWARRAY( Spans *, subSpansCount ); + subSpansByDoc = _CL_NEWARRAY( Spans *, subSpansCount ); + + SpanQuery ** clauses = spanNearQuery->getClauses(); + for( size_t i = 0; i < subSpansCount; i++ ) + { + subSpans[ i ] = clauses[ i ]->getSpans( reader ); + subSpansByDoc[ i ] = subSpans[ i ]; // used in toSameDoc() + } + clauses = NULL; + + query = spanNearQuery; // kept for toString() only. +} + +NearSpansOrdered::~NearSpansOrdered() +{ + for( size_t i = 0; i < subSpansCount; i++ ) + _CLLDELETE( subSpans[ i ] ); + + _CLDELETE_LARRAY( subSpans ); + _CLDELETE_LARRAY( subSpansByDoc ); +} + +bool NearSpansOrdered::next() +{ + if( firstTime ) + { + firstTime = false; + for( size_t i = 0; i < subSpansCount; i++ ) + { + if( ! subSpans[ i ]->next() ) + { + more = false; + return false; + } + } + more = true; + } + return advanceAfterOrdered(); +} + +bool NearSpansOrdered::skipTo( int32_t target ) +{ + if( firstTime ) + { + firstTime = false; + for( size_t i = 0; i < subSpansCount; i++ ) + { + if( ! subSpans[ i ]->skipTo( target )) + { + more = false; + return false; + } + } + more = true; + } + else if( more && ( subSpans[ 0 ]->doc() < target )) + { + if( subSpans[ 0 ]->skipTo( target )) + { + inSameDoc = false; + } + else + { + more = false; + return false; + } + } + return advanceAfterOrdered(); +} + +bool NearSpansOrdered::advanceAfterOrdered() +{ + while( more && ( inSameDoc || toSameDoc() )) + { + if( stretchToOrder() && shrinkToAfterShortestMatch() ) + return true; + } + return false; // no more matches +} + +bool NearSpansOrdered::toSameDoc() +{ + sort( subSpansByDoc, subSpansByDoc + subSpansCount, spanDocCompare ); + size_t firstIndex = 0; + int32_t maxDoc = subSpansByDoc[ subSpansCount-1 ]->doc(); + while( subSpansByDoc[ firstIndex ]->doc() != maxDoc ) + { + if( ! subSpansByDoc[ firstIndex ]->skipTo( maxDoc )) + { + more = false; + inSameDoc = false; + return false; + } + maxDoc = subSpansByDoc[ firstIndex ]->doc(); + if( ++firstIndex == subSpansCount ) + firstIndex = 0; + } + +#ifdef _DEBUG + for( size_t i = 0; i < subSpansCount; i++ ) + { + assert( subSpansByDoc[ i ]->doc() == maxDoc ); +// : " NearSpansOrdered.toSameDoc() spans " + subSpansByDoc[0] +// + "\n at doc " + subSpansByDoc[i].doc() +// + ", but should be at " + maxDoc; + } +#endif //_DEBUG + + inSameDoc = true; + return true; +} + +bool NearSpansOrdered::docSpansOrdered( Spans * spans1, Spans * spans2 ) +{ + assert( spans1->doc() == spans2->doc() ); // "doc1 " + spans1.doc() + " != doc2 " + spans2.doc(); + int32_t start1 = spans1->start(); + int32_t start2 = spans2->start(); + + /* Do not call docSpansOrdered(int,int,int,int) to avoid invoking .end() : */ // CLucene - why? + return ( start1 == start2 ) ? ( spans1->end() < spans2->end() ) : ( start1 < start2 ); +} + +bool NearSpansOrdered::docSpansOrdered(int start1, int end1, int start2, int end2) +{ + return ( start1 == start2 ) ? ( end1 < end2 ) : ( start1 < start2 ); +} + +bool NearSpansOrdered::stretchToOrder() +{ + matchDoc = subSpans[ 0 ]->doc(); + for( size_t i = 1; inSameDoc && ( i < subSpansCount ); i++ ) + { + while( ! docSpansOrdered( subSpans[ i-1 ], subSpans[ i ] )) + { + if( ! subSpans[ i ]->next() ) + { + inSameDoc = false; + more = false; + break; + } + else if( matchDoc != subSpans[ i ]->doc() ) + { + inSameDoc = false; + break; + } + } + } + return inSameDoc; +} + +bool NearSpansOrdered::shrinkToAfterShortestMatch() +{ + matchStart = subSpans[ subSpansCount - 1 ]->start(); + matchEnd = subSpans[ subSpansCount - 1]->end(); + + int32_t matchSlop = 0; + int32_t lastStart = matchStart; + int32_t lastEnd = matchEnd; + + for( int32_t i = (int32_t)subSpansCount - 2; i >= 0; i-- ) + { + Spans * prevSpans = subSpans[ i ]; + int32_t prevStart = prevSpans->start(); + int32_t prevEnd = prevSpans->end(); + + while( true ) // Advance prevSpans until after (lastStart, lastEnd) + { + if( ! prevSpans->next() ) + { + inSameDoc = false; + more = false; + break; // Check remaining subSpans for final match. + } + else if( matchDoc != prevSpans->doc() ) + { + inSameDoc = false; // The last subSpans is not advanced here. + break; // Check remaining subSpans for last match in this document. + } + else + { + int32_t ppStart = prevSpans->start(); + int32_t ppEnd = prevSpans->end(); // Cannot avoid invoking .end() + if( ! docSpansOrdered( ppStart, ppEnd, lastStart, lastEnd )) + { + break; // Check remaining subSpans. + } + else + { // prevSpans still before (lastStart, lastEnd) + prevStart = ppStart; + prevEnd = ppEnd; + } + } + } + + assert( prevStart <= matchStart ); + if( matchStart > prevEnd ) // Only non overlapping spans add to slop. + matchSlop += ( matchStart - prevEnd ); + + /* Do not break on (matchSlop > allowedSlop) here to make sure + * that subSpans[0] is advanced after the match, if any. + */ + matchStart = prevStart; + lastStart = prevStart; + lastEnd = prevEnd; + } + + return matchSlop <= allowedSlop; // ordered and allowed slop +} + +TCHAR* NearSpansOrdered::toString() const +{ + CL_NS(util)::StringBuffer buffer; + TCHAR * tszQuery = query->toString(); + + buffer.append( _T( "NearSpansOrdered(" )); + buffer.append( tszQuery ); + buffer.append( _T( ")@" )); + if( firstTime ) + buffer.append( _T( "START" )); + else if( more ) + { + buffer.appendInt( doc() ); + buffer.append( _T( ":" )); + buffer.appendInt( start() ); + buffer.append( _T( "-" )); + buffer.appendInt( end() ); + } + else + buffer.append( _T( "END" )); + + _CLDELETE_ARRAY( tszQuery ); + + return buffer.toString(); +} + +CL_NS_END2 diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/spans/NearSpansUnordered.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/spans/NearSpansUnordered.cpp new file mode 100644 index 0000000..1fb4733 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/spans/NearSpansUnordered.cpp @@ -0,0 +1,271 @@ +/*------------------------------------------------------------------------------ + * 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/_ApiHeader.h" +#include "CLucene/index/IndexReader.h" +#include "CLucene/util/StringBuffer.h" + +#include "_NearSpansUnordered.h" +#include "_NearSpansOrdered.h" +#include "SpanNearQuery.h" + +CL_NS_DEF2( search, spans ) + + +///////////////////////////////////////////////////////////////////////////// +NearSpansUnordered::SpansCell::SpansCell( NearSpansUnordered * parentSpans, Spans * spans, int32_t index ) +{ + this->parentSpans = parentSpans; + this->spans = spans; + this->index = index; + this->length = -1; +} + +NearSpansUnordered::SpansCell::~SpansCell() +{ + _CLLDELETE( spans ); +} + +bool NearSpansUnordered::SpansCell::adjust( bool condition ) +{ + if( length != -1 ) + parentSpans->totalLength -= length; // subtract old length + + if( condition ) + { + length = end() - start(); + parentSpans->totalLength += length; // add new length + + if( ! parentSpans->max + || doc() > parentSpans->max->doc() + || ( doc() == parentSpans->max->doc() && end() > parentSpans->max->end())) + { + parentSpans->max = this; + } + } + parentSpans->more = condition; + return condition; +} + +TCHAR* NearSpansUnordered::SpansCell::toString() const +{ + CL_NS(util)::StringBuffer buffer; + TCHAR * tszSpans = spans->toString(); + + buffer.append( tszSpans ); + buffer.append( _T( "#" )); + buffer.appendInt( index ); + + _CLDELETE_LARRAY( tszSpans ); + return buffer.toString(); +} + + +///////////////////////////////////////////////////////////////////////////// +bool NearSpansUnordered::CellQueue::lessThan(SpansCell * spans1, SpansCell* spans2 ) +{ + if( spans1->doc() == spans2->doc() ) + return NearSpansOrdered::docSpansOrdered( spans1, spans2 ); + else + return spans1->doc() < spans2->doc(); +} + + +///////////////////////////////////////////////////////////////////////////// +NearSpansUnordered::NearSpansUnordered( SpanNearQuery * query, CL_NS(index)::IndexReader * reader ) +{ + // this->ordered = new ArrayList(); + this->more = true; + this->firstTime = true; + + this->max = NULL; // CLucene specific, SpansCell::adjust tests this member to NULL + this->first = NULL; // CLucene specific + this->last = NULL; // CLucene specific, addToList test this member to NULL + this->totalLength = 0; // CLucene specific + + this->query = query; + this->slop = query->getSlop(); + + SpanQuery ** clauses = query->getClauses(); + this->queue = _CLNEW CellQueue( query->getClausesCount() ); + for( size_t i = 0; i < query->getClausesCount(); i++ ) + { + SpansCell * cell = _CLNEW SpansCell( this, clauses[ i ]->getSpans( reader ), i ); + ordered.push_back( cell ); + } + clauses = NULL; +} + +NearSpansUnordered::~NearSpansUnordered() +{ + for( list::iterator iCell = ordered.begin(); iCell != ordered.end(); iCell++ ) + _CLLDELETE( *iCell ); + + _CLLDELETE( queue ); +} + +bool NearSpansUnordered::next() +{ + if( firstTime ) + { + initList( true ); + listToQueue(); // initialize queue + firstTime = false; + } + else if( more ) + { + if( min()->next() ) // trigger further scanning + queue->adjustTop(); // maintain queue + else + more = false; + } + + while( more ) + { + bool queueStale = false; + if( min()->doc() != max->doc() ) // maintain list + { + queueToList(); + queueStale = true; + } + + // skip to doc w/ all clauses + while( more && first->doc() < last->doc() ) + { + more = first->skipTo( last->doc() );// skip first upto last + firstToLast(); // and move it to the end + queueStale = true; + } + + if( ! more ) + return false; + + // found doc w/ all clauses + if( queueStale ) // maintain the queue + { + listToQueue(); + queueStale = false; + } + + if( atMatch() ) + return true; + + more = min()->next(); + if( more ) + queue->adjustTop(); // maintain queue + } + + return false; // no more matches +} + +bool NearSpansUnordered::skipTo( int32_t target ) +{ + if( firstTime ) // initialize + { + initList( false ); + for( SpansCell * cell = first; more && cell; cell = cell->nextCell ) + { + more = cell->skipTo( target ); // skip all + } + + if( more ) + listToQueue(); + + firstTime = false; + } + else + { // normal case + while( more && min()->doc() < target ) // skip as needed + { + if( min()->skipTo( target )) + queue->adjustTop(); + else + more = false; + } + } + + return more && ( atMatch() || next() ); +} + +TCHAR* NearSpansUnordered::toString() const +{ + CL_NS(util)::StringBuffer buffer; + TCHAR * tszQuery = query->toString(); + + buffer.append( _T( "NearSpansUnordered(" )); + buffer.append( tszQuery ); + buffer.append( _T( ")@" )); + if( firstTime ) + buffer.append( _T( "START" )); + else if( more ) + { + buffer.appendInt( doc() ); + buffer.append( _T( ":" )); + buffer.appendInt( start() ); + buffer.append( _T( "-" )); + buffer.appendInt( end() ); + } + else + buffer.append( _T( "END" )); + + _CLDELETE_ARRAY( tszQuery ); + + return buffer.toString(); +} + +void NearSpansUnordered::initList( bool next ) +{ + for( list::iterator iCell = ordered.begin(); more && iCell != ordered.end(); iCell++ ) + { + if( next ) + more = (*iCell)->next(); // move to first entry + + if( more ) + addToList( *iCell ); // add to list + } +} + +void NearSpansUnordered::addToList( SpansCell * cell ) +{ + if( last ) // add next to end of list + last->nextCell = cell; + else + first = cell; + + last = cell; + cell->nextCell = NULL; +} + +void NearSpansUnordered::firstToLast() +{ + last->nextCell = first; // move first to end of list + last = first; + first = first->nextCell; + last->nextCell = NULL; +} + +void NearSpansUnordered::queueToList() +{ + last = NULL; + first = NULL; + while( queue->top() ) + addToList( queue->pop() ); +} + +void NearSpansUnordered::listToQueue() +{ + queue->clear(); // rebuild queue + for( SpansCell * cell = first; cell; cell = cell->nextCell ) + queue->put( cell ); // add to queue from list +} + +bool NearSpansUnordered::atMatch() +{ + return ( min()->doc() == max->doc() ) + && (( max->end() - min()->start() - totalLength ) <= slop ); +} + +CL_NS_END2 diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/spans/SpanFirstQuery.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/spans/SpanFirstQuery.cpp new file mode 100644 index 0000000..6921b4b --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/spans/SpanFirstQuery.cpp @@ -0,0 +1,205 @@ +/*------------------------------------------------------------------------------ + * 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/_ApiHeader.h" +#include "CLucene/index/IndexReader.h" +#include "CLucene/search/Similarity.h" +#include "CLucene/util/StringBuffer.h" + +#include "SpanFirstQuery.h" +#include "Spans.h" + +CL_NS_DEF2( search, spans ) + + +///////////////////////////////////////////////////////////////////////////// +class SpanFirstQuery::SpanFirstQuerySpans : public Spans +{ +private: + Spans * spans; + int32_t end_; + SpanFirstQuery * parentQuery; + +public: + SpanFirstQuerySpans( SpanFirstQuery * parentQuery, CL_NS(index)::IndexReader * reader ); + virtual ~SpanFirstQuerySpans(); + + bool next(); + bool skipTo( int32_t target ); + + int32_t doc() const { return spans->doc(); } + int32_t start() const { return spans->start(); } + int32_t end() const { return spans->end(); } + + TCHAR* toString() const; +}; + +SpanFirstQuery::SpanFirstQuerySpans::SpanFirstQuerySpans( SpanFirstQuery * parentQuery, CL_NS(index)::IndexReader * reader ) +{ + this->parentQuery = parentQuery; + this->end_ = parentQuery->end; + this->spans = parentQuery->match->getSpans( reader ); +} + +SpanFirstQuery::SpanFirstQuerySpans::~SpanFirstQuerySpans() +{ + _CLLDELETE( spans ); +} + +bool SpanFirstQuery::SpanFirstQuerySpans::next() +{ + while( spans->next() ) // scan to next match + { + if( spans->end() <= end_ ) + return true; + } + return false; +} + +bool SpanFirstQuery::SpanFirstQuerySpans::skipTo( int32_t target ) +{ + if( ! spans->skipTo( target )) + return false; + + if( spans->end() <= end_ ) // there is a match + return true; + + return next(); // scan to next match +} + +TCHAR* SpanFirstQuery::SpanFirstQuerySpans::toString() const +{ + CL_NS(util)::StringBuffer buffer; + TCHAR * tszQry = parentQuery->toString(); + + buffer.append( _T( "spans(" )); + buffer.append( tszQry ); + buffer.append( _T( ")" )); + + _CLDELETE_LARRAY( tszQry ); + return buffer.toString(); +} + + +///////////////////////////////////////////////////////////////////////////// +SpanFirstQuery::SpanFirstQuery( SpanQuery * match, int32_t end, bool bDeleteQuery ) +{ + this->match = match; + this->end = end; + this->bDeleteQuery = bDeleteQuery; +} + +SpanFirstQuery::SpanFirstQuery( const SpanFirstQuery& clone ) : + SpanQuery( clone ) +{ + this->match = (SpanQuery *) clone.match->clone(); + this->end = clone.end; + this->bDeleteQuery = true; +} + +SpanFirstQuery::~SpanFirstQuery() +{ + if( bDeleteQuery ) + { + _CLLDELETE( match ); + } +} + +CL_NS(search)::Query * SpanFirstQuery::clone() const +{ + return _CLNEW SpanFirstQuery( *this ); +} + +const char * SpanFirstQuery::getClassName() +{ + return "SpanFirstQuery"; +} + +const char * SpanFirstQuery::getObjectName() const +{ + return getClassName(); +} + +SpanQuery * SpanFirstQuery::getMatch() const +{ + return match; +} + +int32_t SpanFirstQuery::getEnd() const +{ + return end; +} + +const TCHAR * SpanFirstQuery::getField() const +{ + return match->getField(); +} + +void SpanFirstQuery::extractTerms( CL_NS(search)::TermSet * terms ) const +{ + match->extractTerms( terms ); +} + +CL_NS(search)::Query * SpanFirstQuery::rewrite( CL_NS(index)::IndexReader * reader ) +{ + SpanFirstQuery * clone = NULL; + + SpanQuery * rewritten = (SpanQuery *) match->rewrite( reader ); + if( rewritten != match ) + { + clone = (SpanFirstQuery *) this->clone(); + _CLLDELETE( clone->match ); + clone->match = rewritten; + } + + if( clone ) + return clone; // some clauses rewrote + else + return this; // no clauses rewrote +} + +TCHAR* SpanFirstQuery::toString( const TCHAR* field ) const +{ + CL_NS(util)::StringBuffer buffer; + TCHAR * tszMatch = match->toString( field ); + + buffer.append( _T( "spanFirst(" )); + buffer.append( tszMatch ); + buffer.append( _T( ", " )); + buffer.appendInt( end ); + buffer.append( _T( ")" )); + buffer.appendBoost( getBoost() ); + _CLDELETE_LARRAY( tszMatch ); + + return buffer.toString(); +} + +bool SpanFirstQuery::equals( Query * other ) const +{ + if( this == other ) return true; + if( other == NULL || !( other->instanceOf( SpanFirstQuery::getClassName() ))) + return false; + + SpanFirstQuery * that = (SpanFirstQuery *) other; + return end == that->end + && getBoost() == that->getBoost() + && match->equals( that->match ); +} + +size_t SpanFirstQuery::hashCode() const +{ + size_t h = match->hashCode(); + h ^= (h << 8) | (h >> 25); // reversible + h ^= Similarity::floatToByte( getBoost() ) ^ end; + return h; +} + +Spans * SpanFirstQuery::getSpans( CL_NS(index)::IndexReader * reader ) +{ + return _CLNEW SpanFirstQuerySpans( this, reader ); +} + +CL_NS_END2 diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/spans/SpanFirstQuery.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/spans/SpanFirstQuery.h new file mode 100644 index 0000000..4b62b9e --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/spans/SpanFirstQuery.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_spans_FirstSpanQuery_ +#define _lucene_search_spans_FirstSpanQuery_ + +CL_CLASS_DEF(index, IndexReader); +#include "SpanQuery.h" + +CL_NS_DEF2( search, spans ) + +/** Matches spans near the beginning of a field. */ +class CLUCENE_EXPORT SpanFirstQuery : public SpanQuery +{ +private: + class SpanFirstQuerySpans; + +private: + SpanQuery * match; + bool bDeleteQuery; + int32_t end; + +protected: + SpanFirstQuery( const SpanFirstQuery& clone ); + +public: + /** Construct a SpanFirstQuery matching spans in match whose end + * position is less than or equal to end. */ + SpanFirstQuery( SpanQuery * match, int32_t end, bool bDeleteQuery ); + virtual ~SpanFirstQuery(); + + CL_NS(search)::Query * clone() const; + + static const char * getClassName(); + const char * getObjectName() const; + + /** Return the SpanQuery whose matches are filtered. */ + SpanQuery * getMatch() const; + + /** Return the maximum end position permitted in a match. */ + int32_t getEnd() const; + + const TCHAR * getField() const; + + /** Returns a collection of all terms matched by this query. + * @deprecated use extractTerms instead + * @see #extractTerms(Set) + */ +// public Collection getTerms() { return match.getTerms(); } + void extractTerms( CL_NS(search)::TermSet * terms ) const; + + CL_NS(search)::Query * rewrite( CL_NS(index)::IndexReader * reader ); + + using Query::toString; + TCHAR* toString( const TCHAR* field ) const; + bool equals( Query* other ) const; + size_t hashCode() const; + + Spans * getSpans( CL_NS(index)::IndexReader * reader ); +}; + +CL_NS_END2 +#endif // _lucene_search_spans_FirstSpanQuery_ diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/spans/SpanNearQuery.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/spans/SpanNearQuery.cpp new file mode 100644 index 0000000..ae67658 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/spans/SpanNearQuery.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/_ApiHeader.h" +#include "CLucene/search/Similarity.h" +#include "CLucene/util/StringBuffer.h" + +#include "SpanNearQuery.h" +#include "_EmptySpans.h" +#include "_NearSpansOrdered.h" +#include "_NearSpansUnordered.h" + +CL_NS_DEF2( search, spans ) + +SpanNearQuery::SpanNearQuery( const SpanNearQuery& clone ) : + SpanQuery( clone ) +{ + this->clauses = _CL_NEWARRAY( SpanQuery *, clone.clausesCount ); + for( size_t i = 0; i < clone.clausesCount; i++ ) + this->clauses[ i ] = (SpanQuery *) clone.clauses[ i ]->clone(); + + this->clausesCount = clone.clausesCount; + this->bDeleteClauses = true; + + this->slop = clone.slop; + this->inOrder = clone.inOrder; + + this->field = NULL; + setField( clone.field ); +} + +SpanNearQuery::~SpanNearQuery() +{ + if( bDeleteClauses ) + { + for( size_t i = 0; i < clausesCount; i++ ) + _CLLDELETE( clauses[ i ] ); + } + + clausesCount = 0; + _CLDELETE_LARRAY( clauses ); + _CLDELETE_LARRAY( field ); +} + +CL_NS(search)::Query * SpanNearQuery::clone() const +{ + return _CLNEW SpanNearQuery( *this ); +} + +const char * SpanNearQuery::getClassName() +{ + return "SpanNearQuery"; +} + +const char * SpanNearQuery::getObjectName() const +{ + return getClassName(); +} + +SpanQuery ** SpanNearQuery::getClauses() const +{ + return clauses; +} + +size_t SpanNearQuery::getClausesCount() const +{ + return clausesCount; +} + +void SpanNearQuery::setField( const TCHAR * field ) +{ + _CLDELETE_LARRAY( this->field ); + this->field = STRDUP_TtoT( field ); +} + +const TCHAR * SpanNearQuery::getField() const +{ + return field; +} + +int32_t SpanNearQuery::getSlop() const +{ + return slop; +} + +bool SpanNearQuery::isInOrder() const +{ + return inOrder; +} + +void SpanNearQuery::extractTerms( CL_NS(search)::TermSet * terms ) const +{ + for( size_t i = 0; i < clausesCount; i++ ) + clauses[ i ]->extractTerms( terms ); +} + +CL_NS(search)::Query * SpanNearQuery::rewrite( CL_NS(index)::IndexReader * reader ) +{ + SpanNearQuery * clone = NULL; + + for( size_t i = 0; i < clausesCount; i++ ) + { + SpanQuery * c = clauses[ i ]; + SpanQuery * query = (SpanQuery *) c->rewrite( reader ); + if( query != c ) + { // clause rewrote: must clone + if( clone == NULL ) + clone = (SpanNearQuery *) this->clone(); + + _CLLDELETE( clone->clauses[ i ] ); + clone->clauses[ i ] = query; + } + } + if( clone ) + return clone; // some clauses rewrote + else + return this; // no clauses rewrote +} + +TCHAR* SpanNearQuery::toString( const TCHAR* field ) const +{ + CL_NS(util)::StringBuffer buffer; + + buffer.append( _T( "spanNear([" )); + for( size_t i = 0; i < clausesCount; i++ ) + { + if( i != 0 ) + buffer.append( _T( ", " )); + + TCHAR * tszClause = clauses[ i ]->toString( field ); + buffer.append( tszClause ); + _CLDELETE_ARRAY( tszClause ); + } + + buffer.append( _T( "], " )); + buffer.appendInt( slop ); + buffer.append( _T( ", " )); + buffer.appendBool( inOrder ); + buffer.append( _T( ")" )); + buffer.appendBoost( getBoost() ); + + return buffer.toString(); +} + +bool SpanNearQuery::equals( Query* other ) const +{ + if( this == other ) return true; + if( other == NULL || !( other->instanceOf( SpanNearQuery::getClassName() ))) + return false; + + SpanNearQuery * that = (SpanNearQuery *) other; + if( inOrder != that->inOrder + || slop != that->slop + || getBoost() != that->getBoost() + || 0 != _tcscmp( field, that->field ) ) // CLucene: java version does not compare field names + { + return false; + } + + if( clausesCount != that->clausesCount ) + return false; + for( size_t i = 0; i < clausesCount; i++ ) + { + if( ! clauses[ i ]->equals( that->clauses[ i ] )) + return false; + } + + return true; +} + +size_t SpanNearQuery::hashCode() const +{ + size_t result = 1; + for( size_t i = 0; i < clausesCount; i++ ) + result = 31*result + clauses[ i ]->hashCode(); + + // Mix bits before folding in things like boost, since it could cancel the + // last element of clauses. This particular mix also serves to + // differentiate SpanNearQuery hash codes from others. + result ^= (result << 14) | (result >> 19); // reversible + result += Similarity::floatToByte( getBoost() ); + result += slop; + result ^= ( inOrder ? 0x99AFD3BD : 0 ); + + return result; +} + +Spans * SpanNearQuery::getSpans( CL_NS(index)::IndexReader * reader ) +{ + if( clausesCount == 0 ) + return _CLNEW EmptySpans(); // CLucene: 0-clause case - different to java version, because java creates SpanOrQuery to call its function to create empty spans + + if( clausesCount == 1 ) // optimize 1-clause case + return clauses[ 0 ]->getSpans( reader ); + + return inOrder + ? (Spans *) _CLNEW NearSpansOrdered( this, reader ) + : (Spans *) _CLNEW NearSpansUnordered( this, reader ); +} + +CL_NS_END2 diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/spans/SpanNearQuery.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/spans/SpanNearQuery.h new file mode 100644 index 0000000..c88b5f7 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/spans/SpanNearQuery.h @@ -0,0 +1,112 @@ +/*------------------------------------------------------------------------------ + * 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_spans_SpanNearQuery_ +#define _lucene_search_spans_SpanNearQuery_ + +CL_CLASS_DEF(index, IndexReader); +#include "SpanQuery.h" + +CL_NS_DEF2( search, spans ) + +/** Matches spans which are near one another. One can specify slop, the + * maximum number of intervening unmatched positions, as well as whether + * matches are required to be in-order. */ +class CLUCENE_EXPORT SpanNearQuery : public SpanQuery +{ +private: + SpanQuery ** clauses; + size_t clausesCount; + bool bDeleteClauses; + + int32_t slop; + bool inOrder; + + TCHAR * field; + +protected: + SpanNearQuery( const SpanNearQuery& clone ); + +public: + /** Construct a SpanNearQuery. Matches spans matching a span from each + * clause, with up to slop total unmatched positions between + * them. * When inOrder is true, the spans from each clause + * must be * ordered as in clauses. */ + template + SpanNearQuery( ClauseIterator first, ClauseIterator last, int32_t slop, bool inOrder, bool bDeleteClauses ) + { + // CLucene specific: at least one clause must be here + if( first == last ) + _CLTHROWA( CL_ERR_IllegalArgument, "Missing query clauses." ); + + this->bDeleteClauses = bDeleteClauses; + this->clausesCount = last - first; + this->clauses = _CL_NEWARRAY( SpanQuery *, clausesCount ); + this->field = NULL; + + // copy clauses array into an array and check fields + for( size_t i = 0; first != last; first++, i++ ) + { + SpanQuery * clause = *first; + if( i == 0 ) + { + setField( clause->getField() ); + } + else if( 0 != _tcscmp( clause->getField(), field )) + { + _CLTHROWA( CL_ERR_IllegalArgument, "Clauses must have same field." ); + } + this->clauses[ i ] = clause; + } + + this->slop = slop; + this->inOrder = inOrder; + } + + virtual ~SpanNearQuery(); + + CL_NS(search)::Query * clone() const; + + static const char * getClassName(); + const char * getObjectName() const; + + /** Return the clauses whose spans are matched. + * CLucene: pointer to the internal array + */ + SpanQuery ** getClauses() const; + size_t getClausesCount() const; + + /** Return the maximum number of intervening unmatched positions permitted.*/ + int32_t getSlop() const; + + /** Return true if matches are required to be in-order.*/ + bool isInOrder() const; + + const TCHAR * getField() const; + + /** Returns a collection of all terms matched by this query. + * @deprecated use extractTerms instead + * @see #extractTerms(Set) + */ +// public Collection getTerms() + + void extractTerms( CL_NS(search)::TermSet * terms ) const; + + CL_NS(search)::Query * rewrite( CL_NS(index)::IndexReader * reader ); + + using Query::toString; + TCHAR* toString( const TCHAR* field ) const; + bool equals( Query* other ) const; + size_t hashCode() const; + + Spans * getSpans( CL_NS(index)::IndexReader * reader ); + +protected: + void setField( const TCHAR * field ); +}; + +CL_NS_END2 +#endif // _lucene_search_spans_SpanNearQuery_ diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/spans/SpanNotQuery.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/spans/SpanNotQuery.cpp new file mode 100644 index 0000000..d751258 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/spans/SpanNotQuery.cpp @@ -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. + ------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "CLucene/index/IndexReader.h" +#include "CLucene/search/Similarity.h" +#include "CLucene/util/StringBuffer.h" + +#include "SpanNotQuery.h" +#include "Spans.h" + +CL_NS_DEF2( search, spans ) + + +///////////////////////////////////////////////////////////////////////////// +class SpanNotQuery::SpanNotQuerySpans : public Spans +{ +private: + SpanNotQuery * parentQuery; + Spans * includeSpans; + bool moreInclude; + + Spans * excludeSpans; + bool moreExclude; + +public: + SpanNotQuerySpans( SpanNotQuery * parentQuery, CL_NS(index)::IndexReader * reader ); + virtual ~SpanNotQuerySpans(); + + bool next(); + bool skipTo( int32_t target ); + + int32_t doc() const { return includeSpans->doc(); } + int32_t start() const { return includeSpans->start(); } + int32_t end() const { return includeSpans->end(); } + + TCHAR* toString() const; +}; + +SpanNotQuery::SpanNotQuerySpans::SpanNotQuerySpans( SpanNotQuery * parentQuery, CL_NS(index)::IndexReader * reader ) +{ + this->parentQuery = parentQuery; + + includeSpans = parentQuery->include->getSpans( reader ); + moreInclude = true; + + excludeSpans = parentQuery->exclude->getSpans( reader ); + moreExclude = excludeSpans->next(); +} + +SpanNotQuery::SpanNotQuerySpans::~SpanNotQuerySpans() +{ + _CLLDELETE( includeSpans ); + _CLLDELETE( excludeSpans ); +} + +bool SpanNotQuery::SpanNotQuerySpans::next() +{ + if( moreInclude ) // move to next include + moreInclude = includeSpans->next(); + + while( moreInclude && moreExclude ) + { + if( includeSpans->doc() > excludeSpans->doc() ) // skip exclude + moreExclude = excludeSpans->skipTo( includeSpans->doc() ); + + while( moreExclude // while exclude is before + && includeSpans->doc() == excludeSpans->doc() + && excludeSpans->end() <= includeSpans->start()) + { + moreExclude = excludeSpans->next(); // increment exclude + } + + if( ! moreExclude // if no intersection + || includeSpans->doc() != excludeSpans->doc() + || includeSpans->end() <= excludeSpans->start()) + break; // we found a match + + moreInclude = includeSpans->next(); // intersected: keep scanning + } + + return moreInclude; +} + + +bool SpanNotQuery::SpanNotQuerySpans::skipTo( int32_t target ) +{ + if( moreInclude ) // skip include + moreInclude = includeSpans->skipTo( target ); + + if( ! moreInclude ) + return false; + + if( moreExclude // skip exclude + && includeSpans->doc() > excludeSpans->doc()) + { + moreExclude = excludeSpans->skipTo( includeSpans->doc() ); + } + + while( moreExclude // while exclude is before + && includeSpans->doc() == excludeSpans->doc() + && excludeSpans->end() <= includeSpans->start()) + { + moreExclude = excludeSpans->next(); // increment exclude + } + + if( ! moreExclude // if no intersection + || includeSpans->doc() != excludeSpans->doc() + || includeSpans->end() <= excludeSpans->start()) + { + return true; // we found a match + } + + return next(); // scan to next match +} + +TCHAR* SpanNotQuery::SpanNotQuerySpans::toString() const +{ + CL_NS(util)::StringBuffer buffer; + TCHAR * tszQry = parentQuery->toString(); + + buffer.append( _T( "spans(" )); + buffer.append( tszQry ); + buffer.append( _T( ")" )); + + _CLDELETE_LARRAY( tszQry ); + return buffer.toString(); +} + + +///////////////////////////////////////////////////////////////////////////// +SpanNotQuery::SpanNotQuery( SpanQuery * include, SpanQuery * exclude, bool bDeleteQueries ) +{ + this->include = include; + this->exclude = exclude; + this->bDeleteQueries = bDeleteQueries; + + if( 0 != _tcscmp( include->getField(), exclude->getField())) + _CLTHROWA( CL_ERR_IllegalArgument, "Clauses must have same field." ); +} + +SpanNotQuery::SpanNotQuery( const SpanNotQuery& clone ) : + SpanQuery( clone ) +{ + include = (SpanQuery *) clone.include->clone(); + exclude = (SpanQuery *) clone.exclude->clone(); + bDeleteQueries = true; +} + +SpanNotQuery::~SpanNotQuery() +{ + if( bDeleteQueries ) + { + _CLLDELETE( include ); + _CLLDELETE( exclude ); + } +} + +CL_NS(search)::Query * SpanNotQuery::clone() const +{ + return _CLNEW SpanNotQuery( *this ); +} + +const char * SpanNotQuery::getClassName() +{ + return "SpanNotQuery"; +} + +const char * SpanNotQuery::getObjectName() const +{ + return getClassName(); +} + +SpanQuery * SpanNotQuery::getInclude() const +{ + return include; +} + +SpanQuery * SpanNotQuery::getExclude() const +{ + return exclude; +} + +const TCHAR * SpanNotQuery::getField() const +{ + return include->getField(); +} + +void SpanNotQuery::extractTerms( CL_NS(search)::TermSet * terms ) const +{ + include->extractTerms( terms ); +} + +TCHAR* SpanNotQuery::toString( const TCHAR* field ) const +{ + CL_NS(util)::StringBuffer buffer; + + TCHAR * tmp; + + buffer.append( _T( "spanNot(" )); + tmp = include->toString( field ); + buffer.append( tmp ); + _CLDELETE_ARRAY( tmp ); + + buffer.append( _T( ", " )); + tmp = exclude->toString( field ); + buffer.append( tmp ); + _CLDELETE_ARRAY( tmp ); + + buffer.append( _T( ")" )); + buffer.appendFloat( getBoost(), 1 ); + + return buffer.toString(); +} + +CL_NS(search)::Query * SpanNotQuery::rewrite( CL_NS(index)::IndexReader * reader ) +{ + SpanNotQuery * clone = NULL; + + SpanQuery * rewrittenInclude = (SpanQuery *) include->rewrite( reader ); + if( rewrittenInclude != include ) + { + clone = (SpanNotQuery *) this->clone(); + _CLLDELETE( clone->include ); + clone->include = rewrittenInclude; + } + + SpanQuery * rewrittenExclude = (SpanQuery *) exclude->rewrite( reader ); + if( rewrittenExclude != exclude ) + { + if( ! clone ) + clone = (SpanNotQuery *) this->clone(); + _CLLDELETE( clone->exclude ); + clone->exclude = rewrittenExclude; + } + + if( clone ) + return clone; // some clauses rewrote + else + return this; // no clauses rewrote +} + +bool SpanNotQuery::equals( Query* other ) const +{ + if( this == other ) return true; + if( other == NULL || !( other->instanceOf( SpanNotQuery::getClassName() ))) + return false; + + SpanNotQuery * that = (SpanNotQuery *) other; + return include->equals( that->include ) + && exclude->equals( that->exclude ) + && getBoost() == that->getBoost(); +} + +size_t SpanNotQuery::hashCode() const +{ + size_t h = include->hashCode(); + h = (h << 1) | (h >> 31); // rotate left + h ^= exclude->hashCode(); + h = (h << 1) | (h >> 31); // rotate left + h ^= Similarity::floatToByte( getBoost() ); + + return h; +} + +Spans * SpanNotQuery::getSpans( CL_NS(index)::IndexReader * reader ) +{ + return _CLNEW SpanNotQuerySpans( this, reader ); +} + +CL_NS_END2 diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/spans/SpanNotQuery.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/spans/SpanNotQuery.h new file mode 100644 index 0000000..2254105 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/spans/SpanNotQuery.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_spans_SpanNotQuery_ +#define _lucene_search_spans_SpanNotQuery_ + +CL_CLASS_DEF(index, IndexReader); +#include "SpanQuery.h" + +CL_NS_DEF2( search, spans ) + +/** Removes matches which overlap with another SpanQuery. */ +class CLUCENE_EXPORT SpanNotQuery : public SpanQuery +{ +private: + class SpanNotQuerySpans; + +private: + SpanQuery * include; + SpanQuery * exclude; + bool bDeleteQueries; + +protected: + SpanNotQuery( const SpanNotQuery& clone ); + +public: + /** Construct a SpanNotQuery matching spans from include which + * have no overlap with spans from exclude.*/ + SpanNotQuery( SpanQuery * include, SpanQuery * exclude, bool bDeleteQueries ); + virtual ~SpanNotQuery(); + + CL_NS(search)::Query * clone() const; + + static const char * getClassName(); + const char * getObjectName() const; + + /** Return the SpanQuery whose matches are filtered. */ + SpanQuery * getInclude() const; + + /** Return the SpanQuery whose matches must not overlap those returned. */ + SpanQuery * getExclude() const; + + const TCHAR * getField() const; + + /** Returns a collection of all terms matched by this query. + * @deprecated use extractTerms instead + * @see #extractTerms(Set) + */ +// public Collection getTerms() { return include.getTerms(); } + + void extractTerms( CL_NS(search)::TermSet * terms ) const; + + CL_NS(search)::Query * rewrite( CL_NS(index)::IndexReader * reader ); + + using Query::toString; + TCHAR* toString( const TCHAR* field ) const; + bool equals( Query* other ) const; + size_t hashCode() const; + + Spans * getSpans( CL_NS(index)::IndexReader * reader ); +}; + +CL_NS_END2 +#endif // _lucene_search_spans_SpanNotQuery_ diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/spans/SpanOrQuery.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/spans/SpanOrQuery.cpp new file mode 100644 index 0000000..05209d5 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/spans/SpanOrQuery.cpp @@ -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. + ------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "CLucene/search/Similarity.h" +#include "CLucene/util/StringBuffer.h" +#include "CLucene/util/PriorityQueue.h" + +#include "SpanOrQuery.h" +#include "_EmptySpans.h" + + +CL_NS_DEF2( search, spans ) + + +///////////////////////////////////////////////////////////////////////////// +class SpanOrQuery::SpanQueue : public CL_NS(util)::PriorityQueue > +{ +public: + SpanQueue( int32_t size ) { initialize( size, true ); } + virtual ~SpanQueue() {} + +protected: + bool lessThan(Spans* spans1, Spans* spans2 ) + { + if( spans1->doc() == spans2->doc() ) + { + if( spans1->start() == spans2->start()) + return spans1->end() < spans2->end(); + else + return spans1->start() < spans2->start(); + } + else + return spans1->doc() < spans2->doc(); + } +}; + + +///////////////////////////////////////////////////////////////////////////// +class SpanOrQuery::SpanOrQuerySpans : public Spans +{ +private: + SpanQueue * queue; + SpanOrQuery * parentQuery; + CL_NS(index)::IndexReader * reader; + +public: + SpanOrQuerySpans( SpanOrQuery * parentQuery, CL_NS(index)::IndexReader * reader ); + virtual ~SpanOrQuerySpans(); + + bool next(); + bool skipTo( int32_t target ); + + int32_t doc() const { return top()->doc(); } + int32_t start() const { return top()->start(); } + int32_t end() const { return top()->end(); } + + TCHAR* toString() const; + +private: + Spans * top() const { return queue->top(); } + bool initSpanQueue( int32_t target ); +}; + + +SpanOrQuery::SpanOrQuerySpans::SpanOrQuerySpans( SpanOrQuery * parentQuery, CL_NS(index)::IndexReader * reader ) +{ + this->parentQuery = parentQuery; + this->reader = reader; + this->queue = NULL; +} + +SpanOrQuery::SpanOrQuerySpans::~SpanOrQuerySpans() +{ + _CLLDELETE( queue ); +} + +bool SpanOrQuery::SpanOrQuerySpans::next() +{ + if( ! queue ) + return initSpanQueue( -1 ); + + if( queue->size() == 0 ) // all done + return false; + + if( top()->next() ) // move to next + { + queue->adjustTop(); + return true; + } + + _CLLDELETE( queue->pop() ); // exhausted a clause + return queue->size() != 0; +} + +bool SpanOrQuery::SpanOrQuerySpans::skipTo( int32_t target ) +{ + if( ! queue ) + return initSpanQueue( target ); + + while( queue->size() != 0 && top()->doc() < target ) + { + if( top()->skipTo( target )) + queue->adjustTop(); + else + _CLLDELETE( queue->pop() ); + } + + return queue->size() != 0; +} + +TCHAR* SpanOrQuery::SpanOrQuerySpans::toString() const +{ + CL_NS(util)::StringBuffer buffer; + TCHAR * tszQry = parentQuery->toString(); + + buffer.append( _T( "spans(" )); + buffer.append( tszQry ); + buffer.append( _T( ")" )); + + _CLDELETE_LARRAY( tszQry ); + return buffer.toString(); +} + +bool SpanOrQuery::SpanOrQuerySpans::initSpanQueue( int32_t target ) +{ + queue = _CLNEW SpanQueue( parentQuery->clausesCount ); + + for( size_t i = 0; i < parentQuery->clausesCount; i++ ) + { + Spans * spans = parentQuery->clauses[ i ]->getSpans( reader ); + if(( target == -1 && spans->next()) || ( target != -1 && spans->skipTo( target ))) + queue->put( spans ); + else + _CLLDELETE( spans ); + } + return ( queue->size() != 0 ); +} + + +///////////////////////////////////////////////////////////////////////////// +SpanOrQuery::SpanOrQuery( const SpanOrQuery& clone ) : + SpanQuery( clone ) +{ + this->clauses = _CL_NEWARRAY( SpanQuery *, clone.clausesCount ); + for( size_t i = 0; i < clone.clausesCount; i++ ) + this->clauses[ i ] = (SpanQuery *) clone.clauses[ i ]->clone(); + + this->clausesCount = clone.clausesCount; + this->bDeleteClauses = true; + + this->field = NULL; + setField( clone.field ); +} + +SpanOrQuery::~SpanOrQuery() +{ + if( bDeleteClauses ) + { + for( size_t i = 0; i < clausesCount; i++ ) + _CLLDELETE( clauses[ i ] ); + } + + clausesCount = 0; + _CLDELETE_LARRAY( clauses ); + _CLDELETE_LARRAY( field ); +} + +CL_NS(search)::Query * SpanOrQuery::clone() const +{ + return _CLNEW SpanOrQuery( *this ); +} + +const char * SpanOrQuery::getClassName() +{ + return "SpanOrQuery"; +} + +const char * SpanOrQuery::getObjectName() const +{ + return getClassName(); +} + +SpanQuery ** SpanOrQuery::getClauses() const +{ + return clauses; +} + +size_t SpanOrQuery::getClausesCount() const +{ + return clausesCount; +} + +void SpanOrQuery::setField( const TCHAR * field ) +{ + _CLDELETE_LARRAY( this->field ); + this->field = STRDUP_TtoT( field ); +} + +const TCHAR * SpanOrQuery::getField() const +{ + return field; +} + +void SpanOrQuery::extractTerms( CL_NS(search)::TermSet * terms ) const +{ + for( size_t i = 0; i < clausesCount; i++ ) + clauses[ i ]->extractTerms( terms ); +} + +CL_NS(search)::Query * SpanOrQuery::rewrite( CL_NS(index)::IndexReader * reader ) +{ + SpanOrQuery * clone = NULL; + for( size_t i = 0; i < clausesCount; i++ ) + { + SpanQuery * c = clauses[ i ]; + SpanQuery * query = (SpanQuery *) c->rewrite( reader ); + if( query != c ) + { // clause rewrote: must clone + if( clone == NULL ) + clone = (SpanOrQuery *) this->clone(); + + _CLLDELETE( clone->clauses[ i ] ); + clone->clauses[ i ] = query; + } + } + if( clone ) + return clone; // some clauses rewrote + else + return this; // no clauses rewrote +} + +TCHAR* SpanOrQuery::toString( const TCHAR* field ) const +{ + CL_NS(util)::StringBuffer buffer; + + buffer.append( _T( "spanOr([" )); + for( size_t i = 0; i < clausesCount; i++ ) + { + if( i != 0 ) + buffer.append( _T( ", " )); + + TCHAR * tszClause = clauses[ i ]->toString( field ); + buffer.append( tszClause ); + _CLDELETE_ARRAY( tszClause ); + } + + buffer.append( _T( "])" )); + buffer.appendBoost( getBoost() ); + + return buffer.toString(); +} + +bool SpanOrQuery::equals( Query* other ) const +{ + if( this == other ) return true; + if( other == NULL || !( other->instanceOf( SpanOrQuery::getClassName() ))) + return false; + + SpanOrQuery * that = (SpanOrQuery *) other; + if( 0 != _tcscmp( field, that->field ) + || getBoost() != that->getBoost()) + { + return false; + } + + if( clausesCount != that->clausesCount ) + return false; + for( size_t i = 0; i < clausesCount; i++ ) + { + if( ! clauses[ i ]->equals( that->clauses[ i ] )) + return false; + } + + return true; +} + +size_t SpanOrQuery::hashCode() const +{ + size_t h = 1; + for( size_t i = 0; i < clausesCount; i++ ) + h = 31*h + clauses[ i ]->hashCode(); + + h ^= (h << 10) | (h >> 23); + h ^= Similarity::floatToByte( getBoost() ); + + return h; +} + +Spans * SpanOrQuery::getSpans( CL_NS(index)::IndexReader * reader ) +{ + if( clausesCount == 0 ) + return _CLNEW EmptySpans(); // CLucene: 0-clause case + + if( clausesCount == 1 ) // optimize 1-clause case + return clauses[ 0 ]->getSpans( reader ); + + return _CLNEW SpanOrQuerySpans( this, reader ); +} + +CL_NS_END2 diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/spans/SpanOrQuery.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/spans/SpanOrQuery.h new file mode 100644 index 0000000..ade7a5d --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/spans/SpanOrQuery.h @@ -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. + ------------------------------------------------------------------------------*/ +#ifndef _lucene_search_spans_SpanOrQuery_ +#define _lucene_search_spans_SpanOrQuery_ + +CL_CLASS_DEF(index, IndexReader); +#include "SpanQuery.h" + +CL_NS_DEF2( search, spans ) + +/** + * Matches the union of its clauses. + */ +class CLUCENE_EXPORT SpanOrQuery : public SpanQuery +{ +private: + class SpanQueue; + class SpanOrQuerySpans; + +private: + SpanQuery ** clauses; + size_t clausesCount; + bool bDeleteClauses; + + TCHAR * field; + +protected: + SpanOrQuery( const SpanOrQuery& clone ); + +public: + /** Construct a SpanOrQuery merging the provided clauses. */ + template + SpanOrQuery( ClauseIterator first, ClauseIterator last, bool bDeleteClauses ) + { + // CLucene specific: at least one clause must be here + if( first == last ) + _CLTHROWA( CL_ERR_IllegalArgument, "Missing query clauses." ); + + this->bDeleteClauses = bDeleteClauses; + this->clausesCount = last - first; + this->clauses = _CL_NEWARRAY( SpanQuery *, clausesCount ); + this->field = NULL; + + // copy clauses array into an array and check fields + for( size_t i = 0; first != last; first++, i++ ) + { + SpanQuery * clause = *first; + if( i == 0 ) + { + setField( clause->getField() ); + } + else if( 0 != _tcscmp( clause->getField(), field )) + { + _CLTHROWA( CL_ERR_IllegalArgument, "Clauses must have same field." ); + } + this->clauses[ i ] = clause; + } + } + + virtual ~SpanOrQuery(); + + CL_NS(search)::Query * clone() const; + + static const char * getClassName(); + const char * getObjectName() const; + + /** Return the clauses whose spans are matched. + * CLucene: pointer to the internal array + */ + SpanQuery ** getClauses() const; + size_t getClausesCount() const; + + const TCHAR * getField() const; + + /** Returns a collection of all terms matched by this query. + * @deprecated use extractTerms instead + * @see #extractTerms(Set) + */ +// public Collection getTerms() + + void extractTerms( CL_NS(search)::TermSet * terms ) const; + + CL_NS(search)::Query * rewrite( CL_NS(index)::IndexReader * reader ); + + using Query::toString; + TCHAR* toString( const TCHAR* field ) const; + bool equals( Query* other ) const; + size_t hashCode() const; + + /** This returns some kind of lazy spans. The set will be evaluated with the first call + * and this query and the given reader must exists at this time + */ + Spans * getSpans( CL_NS(index)::IndexReader * reader ); + +protected: + void setField( const TCHAR * field ); +}; + +CL_NS_END2 +#endif // _lucene_search_spans_SpanOrQuery_ diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/spans/SpanQuery.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/spans/SpanQuery.h new file mode 100644 index 0000000..cb7f20b --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/spans/SpanQuery.h @@ -0,0 +1,40 @@ +/*------------------------------------------------------------------------------ + * 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_spans_SpanQuery_ +#define _lucene_search_spans_SpanQuery_ + +#include "CLucene/search/Query.h" +#include "CLucene/search/spans/SpanWeight.h" +CL_CLASS_DEF2( search, spans, Spans ) + +CL_NS_DEF2( search, spans ) + +/** Base class for span-based queries. */ +class CLUCENE_EXPORT SpanQuery : public CL_NS(search)::Query +{ +public: + /** Expert: Returns the matches for this query in an index. Used internally + * to search for spans. */ + virtual Spans * getSpans( CL_NS(index)::IndexReader * reader ) = 0; + + /** Returns the name of the field matched by this query.*/ + virtual const TCHAR* getField() const = 0; + + /** Returns a collection of all terms matched by this query. + * @deprecated use extractTerms instead + * @see Query#extractTerms(Set) + */ +// public abstract Collection getTerms(); + + Weight * _createWeight( CL_NS(search)::Searcher * searcher ) + { + return _CLNEW SpanWeight( this, searcher ); + } +}; + +CL_NS_END2 +#endif // _lucene_search_spans_SpanQuery_ diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/spans/SpanScorer.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/spans/SpanScorer.cpp new file mode 100644 index 0000000..feee566 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/spans/SpanScorer.cpp @@ -0,0 +1,122 @@ +/*------------------------------------------------------------------------------ + * 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/_ApiHeader.h" +#include "CLucene/search/SearchHeader.h" +#include "CLucene/search/Similarity.h" +#include "CLucene/search/Explanation.h" +#include "CLucene/util/StringBuffer.h" + +#include "SpanScorer.h" +#include "Spans.h" + +CL_NS_DEF2(search, spans) + +SpanScorer::SpanScorer( Spans * spans, Weight * weight, Similarity * similarity, uint8_t* norms ) : +Scorer( similarity ), firstTime( true ), more( true ) +{ + this->spans = spans; + this->norms = norms; + this->weight = weight; + this->value = weight->getValue(); + doc_ = -1; +} + +SpanScorer::~SpanScorer() +{ + _CLLDELETE( spans ); +} + +bool SpanScorer::next() +{ + if( firstTime ) + { + more = spans->next(); + firstTime = false; + } + return setFreqCurrentDoc(); +} + +bool SpanScorer::skipTo( int32_t target ) +{ + if( firstTime ) + { + more = spans->skipTo( target ); + firstTime = false; + } + + if( ! more ) + return false; + + if( spans->doc() < target ) + { + // setFreqCurrentDoc() leaves spans.doc() ahead + more = spans->skipTo( target ); + } + + return setFreqCurrentDoc(); +} + +bool SpanScorer::setFreqCurrentDoc() +{ + if( ! more ) + return false; + + doc_ = spans->doc(); + freq = 0.0f; + while( more && doc_ == spans->doc() ) + { + int32_t matchLength = spans->end() - spans->start(); + freq += getSimilarity()->sloppyFreq( matchLength ); + more = spans->next(); + } + + return more || ( freq != 0 ); +} + +int32_t SpanScorer::doc() const +{ + return doc_; +} + +float_t SpanScorer::score() +{ + float_t raw = getSimilarity()->tf( freq ) * value; // raw score + return raw * Similarity::decodeNorm( norms[ doc_ ]); // normalize +} + +CL_NS(search)::Explanation * SpanScorer::explain( int32_t docIn ) +{ + Explanation * tfExplanation = _CLNEW Explanation(); + + skipTo( docIn ); + float_t phraseFreq = (doc() == docIn ) ? freq : 0.0f; + tfExplanation->setValue( getSimilarity()->tf( phraseFreq )); + + CL_NS(util)::StringBuffer strBuf( 50 ); + strBuf.append( _T( "tf(phraseFreq=" )); + strBuf.appendFloat( phraseFreq, 2 ); + strBuf.append( _T( ")" )); + tfExplanation->setDescription( strBuf.getBuffer() ); + + return tfExplanation; +} + +TCHAR* SpanScorer::toString() +{ + CL_NS(util)::StringBuffer buf; + buf.append( _T( "SpanScorer(" )); + + TCHAR* tmp = weight->toString(); + buf.append( tmp ); + _CLDELETE_CARRAY( tmp ); + + buf.append( _T( ")" )); + + return buf.toString(); +} + +CL_NS_END2 diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/spans/SpanScorer.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/spans/SpanScorer.h new file mode 100644 index 0000000..bd775f6 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/spans/SpanScorer.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_spans_SpanScorer_ +#define _lucene_search_spans_SpanScorer_ + +#include "CLucene/search/Scorer.h" +CL_CLASS_DEF2(search,spans,Spans) +CL_CLASS_DEF(search,Explanation) +CL_CLASS_DEF(search,Weight) + +CL_NS_DEF2(search, spans) + +/** + * Public for extension only. + */ +class CLUCENE_EXPORT SpanScorer : public CL_NS(search)::Scorer +{ +protected: + Spans * spans; + CL_NS(search)::Weight * weight; + uint8_t* norms; + float_t value; + + bool firstTime; + bool more; + + int32_t doc_; + float_t freq; + + +public: + SpanScorer( Spans * spans, Weight * weight, Similarity * similarity, uint8_t* norms ); + virtual ~SpanScorer(); + + bool next(); + bool skipTo( int32_t target ); + int32_t doc() const; + float_t score(); + CL_NS(search)::Explanation* explain( int32_t docIn ); + TCHAR* toString(); + +protected: + bool setFreqCurrentDoc(); +}; + +CL_NS_END2 +#endif // _lucene_search_spans_SpanScorer_ diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/spans/SpanTermQuery.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/spans/SpanTermQuery.cpp new file mode 100644 index 0000000..e7dcc32 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/spans/SpanTermQuery.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/_ApiHeader.h" +#include "CLucene/index/IndexReader.h" +#include "CLucene/index/Term.h" +#include "CLucene/search/Similarity.h" +#include "CLucene/util/StringBuffer.h" + +#include "SpanTermQuery.h" +#include "_TermSpans.h" + +CL_NS_DEF2( search, spans ) + +SpanTermQuery::SpanTermQuery( CL_NS(index)::Term * term ) +{ + this->term = _CL_POINTER( term ); +} + +SpanTermQuery::SpanTermQuery( const SpanTermQuery& clone ) : + SpanQuery( clone ) +{ + this->term = _CL_POINTER( clone.term ); +} + +SpanTermQuery::~SpanTermQuery() +{ + _CLLDECDELETE( term ); +} + +CL_NS(search)::Query * SpanTermQuery::clone() const +{ + return _CLNEW SpanTermQuery( *this ); +} + +const char* SpanTermQuery::getClassName() +{ + return "SpanTermQuery"; +} + +const char* SpanTermQuery::getObjectName() const +{ + return getClassName(); +} + +size_t SpanTermQuery::hashCode() const +{ + return Similarity::floatToByte(getBoost()) ^ term->hashCode() ^ 0xD23FE494; +} + +CL_NS(index)::Term * SpanTermQuery::getTerm( bool pointer ) const +{ + if ( pointer ) + return _CL_POINTER( term ); + else + return term; +} + +const TCHAR * SpanTermQuery::getField() const +{ + return term->field(); +} + +void SpanTermQuery::extractTerms( CL_NS(search)::TermSet * terms ) const +{ + if( term && terms->end() == terms->find( term )) + terms->insert( _CL_POINTER( term )); +} + +Spans * SpanTermQuery::getSpans( CL_NS(index)::IndexReader * reader ) +{ + return _CLNEW TermSpans( reader->termPositions( term ), term ); +} + +TCHAR* SpanTermQuery::toString( const TCHAR* field ) const +{ + CL_NS(util)::StringBuffer buffer; + + if( field && 0 == _tcscmp( term->field(), field )) + buffer.append( term->text() ); + else + { + TCHAR * tszTerm = term->toString(); + buffer.append( tszTerm ); + buffer.appendBoost( getBoost() ); + _CLDELETE_CARRAY( tszTerm ); + } + return buffer.toString(); +} + +bool SpanTermQuery::equals( Query* other ) const +{ + if( !( other->instanceOf( SpanTermQuery::getClassName() ))) + return false; + + SpanTermQuery * that = (SpanTermQuery *) other; + return ( this->getBoost() == that->getBoost() ) + && this->term->equals( that->term ); +} + +CL_NS_END2 diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/spans/SpanTermQuery.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/spans/SpanTermQuery.h new file mode 100644 index 0000000..6adf27b --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/spans/SpanTermQuery.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_spans_SpanTermQuery_ +#define _lucene_search_spans_SpanTermQuery_ + +CL_CLASS_DEF(index, Term); +CL_CLASS_DEF(index, IndexReader); +#include "SpanQuery.h" + +CL_NS_DEF2( search, spans ) + +/** Matches spans containing a term. */ +class CLUCENE_EXPORT SpanTermQuery : public SpanQuery +{ +protected: + CL_NS(index)::Term * term; + +protected: + SpanTermQuery( const SpanTermQuery& clone ); + +public: + /** Construct a SpanTermQuery matching the named term's spans. */ + SpanTermQuery( CL_NS(index)::Term * term ); + virtual ~SpanTermQuery(); + + static const char * getClassName(); + const char * getObjectName() const; + + /** Return the term whose spans are matched. */ + CL_NS(index)::Term * getTerm( bool pointer=true ) const; + + const TCHAR * getField() const; + + /** Returns a collection of all terms matched by this query. + * @deprecated use extractTerms instead + * @see #extractTerms(Set) + */ +// public Collection getTerms() + + void extractTerms( CL_NS(search)::TermSet * terms ) const; + Spans * getSpans( CL_NS(index)::IndexReader * reader ); + + CL_NS(search)::Query * clone() const; + + /** Returns true iff o is equal to this. */ + bool equals( Query* other ) const; + + /** Returns a hash code value for this object.*/ + size_t hashCode() const; + + TCHAR* toString( const TCHAR* field ) const; +}; + +CL_NS_END2 +#endif //_lucene_search_spans_SpanTermQuery_ diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/spans/SpanWeight.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/spans/SpanWeight.cpp new file mode 100644 index 0000000..767721f --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/spans/SpanWeight.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. + ------------------------------------------------------------------------------*/ +#include "CLucene/_ApiHeader.h" +#include "CLucene/index/IndexReader.h" +#include "CLucene/search/Similarity.h" +#include "CLucene/search/Explanation.h" +#include "CLucene/search/Scorer.h" +#include "CLucene/util/StringBuffer.h" + +#include "SpanWeight.h" +#include "SpanQuery.h" +#include "SpanScorer.h" + +CL_NS_USE(util) +CL_NS_DEF2(search, spans) + +SpanWeight::SpanWeight( SpanQuery * query, CL_NS(search)::Searcher * searcher ) +{ + this->similarity = query->getSimilarity( searcher ); + this->query = query; + + terms = _CLNEW TermSet(); + query->extractTerms( terms ); + idf = similarity->idf( terms->begin(), terms->end(), searcher ); +} + +SpanWeight::~SpanWeight() +{ + for( TermSet::iterator iTerm = terms->begin(); iTerm != terms->end(); iTerm++ ) + _CLLDECDELETE( *iTerm ); + + _CLDELETE( terms ); +} + +CL_NS(search)::Query * SpanWeight::getQuery() +{ + return query; +} + +float_t SpanWeight::getValue() +{ + return value; +} + +float_t SpanWeight::sumOfSquaredWeights() +{ + queryWeight = idf * query->getBoost(); // compute query weight + return queryWeight * queryWeight; // square it +} + +void SpanWeight::normalize( float_t norm ) +{ + queryNorm = norm; + queryWeight *= queryNorm; // normalize query weight + value = queryWeight * idf; // idf for document +} + +CL_NS(search)::Scorer * SpanWeight::scorer( CL_NS(index)::IndexReader* reader ) +{ + return _CLNEW SpanScorer( query->getSpans( reader ), + this, + similarity, + reader->norms( query->getField() )); +} + +CL_NS(search)::Explanation * SpanWeight::explain( CL_NS(index)::IndexReader* reader, int32_t doc ) +{ + ComplexExplanation * result = _CLNEW ComplexExplanation(); + StringBuffer strBuf(100); + + const TCHAR * field = ((SpanQuery *)getQuery())->getField(); + TCHAR * tQry = getQuery()->toString(); + TCHAR * tQryF = getQuery()->toString( field ); + + strBuf.append( _T( "weight(" )); + strBuf.append( tQry ); + strBuf.append( _T( " in " )); + strBuf.appendInt( doc ); + strBuf.append( _T( "), product of:" )); + result->setDescription( strBuf.getBuffer() ); + + CL_NS(util)::StringBuffer docFreqs; + for( TermSet::iterator itTerms = terms->begin(); itTerms != terms->end(); itTerms++ ) + { + CL_NS(index)::Term * term = (*itTerms); + docFreqs.append( term->text()); + docFreqs.append( _T( "=" )); + docFreqs.appendInt( reader->docFreq( term )); + if( itTerms != terms->end() ) + docFreqs.append( _T( " " )); + } + + strBuf.clear(); + strBuf.append( _T( "idf(" )); + strBuf.append( field ); + strBuf.append( _T( ": " )); + strBuf.append( docFreqs.getBuffer()); + strBuf.append( _T( ")" )); + Explanation * idfExpl = _CLNEW Explanation( idf, strBuf.getBuffer() ); + + // explain query weight + Explanation * queryExpl = _CLNEW Explanation(); + strBuf.clear(); + strBuf.append( _T( "queryWeight(" )); + strBuf.append( tQry ); + strBuf.append( _T( "), product of:" )); + queryExpl->setDescription( strBuf.getBuffer() ); + + if( getQuery()->getBoost() != 1.0f ) + queryExpl->addDetail( _CLNEW Explanation( getQuery()->getBoost(), _T( "boost" ))); + + queryExpl->addDetail( idfExpl ); + + Explanation * queryNormExpl = _CLNEW Explanation( queryNorm, _T( "queryNorm" )); + queryExpl->addDetail( queryNormExpl ); + queryExpl->setValue( getQuery()->getBoost() * + idfExpl->getValue() * + queryNormExpl->getValue()); + result->addDetail( queryExpl ); + + // explain field weight + ComplexExplanation * fieldExpl = _CLNEW ComplexExplanation(); + strBuf.clear(); + strBuf.append( _T( "fieldWeight(" )); + strBuf.append( field ); + strBuf.append( _T( ":" )); + strBuf.append( tQryF ); + strBuf.append( _T( " in " )); + strBuf.appendInt( doc ); + strBuf.append( _T( "), product of:" )); + fieldExpl->setDescription( strBuf.getBuffer() ); + + Scorer * pScorer = scorer( reader ); + Explanation * tfExpl = pScorer->explain( doc ); + fieldExpl->addDetail( tfExpl ); + fieldExpl->addDetail( idfExpl->clone() ); + + Explanation * fieldNormExpl = _CLNEW Explanation(); + uint8_t * fieldNorms = reader->norms( field ); + float_t fieldNorm = fieldNorms != NULL ? Similarity::decodeNorm( fieldNorms[ doc ] ) : 0.0f; + fieldNormExpl->setValue( fieldNorm ); + strBuf.clear(); + strBuf.append( _T( "fieldNorm(field=" )); + strBuf.append( field ); + strBuf.append( _T( ", doc=" )); + strBuf.appendInt( doc ); + strBuf.append( _T( ")" )); + fieldNormExpl->setDescription( strBuf.getBuffer()); + fieldExpl->addDetail( fieldNormExpl ); + + fieldExpl->setMatch( tfExpl->isMatch() ); + fieldExpl->setValue( tfExpl->getValue() * + idfExpl->getValue() * + fieldNormExpl->getValue() ); + + _CLLDELETE( pScorer ); + _CLDELETE_LCARRAY( tQry ); + _CLDELETE_LCARRAY( tQryF ); + + if( queryExpl->getValue() == 1.0f ) + { + _CLLDELETE( result ); + return fieldExpl; + } + else + { + result->addDetail( fieldExpl ); + result->setMatch( fieldExpl->getMatch() ); + + // combine them + result->setValue( queryExpl->getValue() * fieldExpl->getValue() ); + return result; + } +} + +CL_NS_END2 diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/spans/SpanWeight.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/spans/SpanWeight.h new file mode 100644 index 0000000..dddd56a --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/spans/SpanWeight.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_spans_SpanWeight_ +#define _lucene_search_spans_SpanWeight_ + +#include "CLucene/search/SearchHeader.h" +#include "CLucene/search/Query.h" +CL_CLASS_DEF2(search,spans,SpanQuery) +CL_CLASS_DEF(search,Similarity) +CL_CLASS_DEF(search,Searcher) + +CL_NS_DEF2(search, spans) + +/** + * Expert-only. Public for use by other weight implementations + */ +class CLUCENE_EXPORT SpanWeight : public CL_NS(search)::Weight +{ +protected: + CL_NS(search)::Similarity * similarity; + float_t value; + float_t idf; + float_t queryNorm; + float_t queryWeight; + + CL_NS(search)::TermSet * terms; + SpanQuery * query; + +public: + SpanWeight( SpanQuery * query, CL_NS(search)::Searcher * searcher ); + virtual ~SpanWeight(); + + CL_NS(search)::Scorer * scorer( CL_NS(index)::IndexReader* reader ); + CL_NS(search)::Explanation * explain( CL_NS(index)::IndexReader* reader, int32_t doc ); + CL_NS(search)::Query * getQuery(); + float_t getValue(); + float_t sumOfSquaredWeights(); + void normalize( float_t norm ); +}; + +CL_NS_END2 +#endif // _lucene_search_spans_SpanWeight_ diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/spans/Spans.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/spans/Spans.h new file mode 100644 index 0000000..f552fc2 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/spans/Spans.h @@ -0,0 +1,54 @@ +/*------------------------------------------------------------------------------ + * 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_spans_Spans_ +#define _lucene_search_spans_Spans_ + +CL_NS_DEF2( search, spans ) + +/** Expert: an enumeration of span matches. Used to implement span searching. + * Each span represents a range of term positions within a document. Matches + * are enumerated in order, by increasing document number, within that by + * increasing start position and finally by increasing end position. */ +class CLUCENE_EXPORT Spans +{ +public: + /** Empty base destructor */ + virtual ~Spans() {}; + + /** Move to the next match, returning true iff any such exists. */ + virtual bool next() = 0; + + /** Skips to the first match beyond the current, whose document number is + * greater than or equal to target.

Returns true iff there is such + * a match.

Behaves as if written:

+     *   boolean skipTo(int target) {
+     *     do {
+     *       if (!next())
+     * 	     return false;
+     *     } while (target > doc());
+     *     return true;
+     *   }
+     * 
+ * Most implementations are considerably more efficient than that. + */ + virtual bool skipTo( int32_t target ) = 0; + + /** Returns the document number of the current match. Initially invalid. */ + virtual int32_t doc() const = 0; + + /** Returns the start position of the current match. Initially invalid. */ + virtual int32_t start() const = 0; + + /** Returns the end position of the current match. Initially invalid. */ + virtual int32_t end() const = 0; + + /** Returns the string representation of the spans */ + virtual TCHAR* toString() const = 0; +}; + +CL_NS_END2 +#endif // _lucene_search_spans_Spans_ diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/spans/TermSpans.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/spans/TermSpans.cpp new file mode 100644 index 0000000..969207b --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/spans/TermSpans.cpp @@ -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. + ------------------------------------------------------------------------------*/ +#include +#include "CLucene/_ApiHeader.h" + +#include + +#include "CLucene/index/Terms.h" +#include "CLucene/index/Term.h" +#include "CLucene/util/StringBuffer.h" + +#include "_TermSpans.h" + +CL_NS_DEF2(search, spans) + +TermSpans::TermSpans( CL_NS(index)::TermPositions * positions, CL_NS(index)::Term * term ) +{ + this->positions = positions; + this->term = _CL_POINTER( term ); + doc_ = -1; + freq = 0; + count = 0; + position = 0; +} + +TermSpans::~TermSpans() +{ + _CLLDELETE( positions ); + _CLLDECDELETE( term ); +} + +bool TermSpans::next() +{ + if( count == freq ) + { + if( ! positions->next()) + { + doc_ = INT_MAX; + return false; + } + doc_ = positions->doc(); + freq = positions->freq(); + count = 0; + } + position = positions->nextPosition(); + count++; + return true; +} + +bool TermSpans::skipTo( int32_t target ) +{ + // are we already at the correct position? + if( doc_ >= target ) + return true; + + if( !positions->skipTo( target )) + { + doc_ = INT_MAX; + return false; + } + + doc_ = positions->doc(); + freq = positions->freq(); + count = 0; + + position = positions->nextPosition(); + count++; + + return true; +} + +TCHAR* TermSpans::toString() const +{ + CL_NS(util)::StringBuffer strBuf( 50 ); + + TCHAR * tszTerm = term->toString(); + strBuf.append( _T( "spans(" )); + strBuf.append( tszTerm ); + strBuf.append( _T( ")@" )); + if( doc_ == -1 ) + strBuf.append( _T( "START" )); + else if( doc_ == INT_MAX ) + strBuf.append( _T( "END" )); + else + { + strBuf.appendInt( doc_ ); + strBuf.append( _T( "-" )); + strBuf.appendInt( position ); + } + _CLDELETE_CARRAY( tszTerm ); + + return strBuf.toString(); +} + +CL_NS_END2 diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/spans/_EmptySpans.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/spans/_EmptySpans.h new file mode 100644 index 0000000..65b0e01 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/spans/_EmptySpans.h @@ -0,0 +1,35 @@ +/*------------------------------------------------------------------------------ + * 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_spans_EmptySpans_ +#define _lucene_search_spans_EmptySpans_ + +#include "Spans.h" +#include + +CL_NS_DEF2( search, spans ) + +/** CLucene specific: Empty span enumeration, used for optimized cases + * when there are no clauses in SpanNearQuery or SpanOrQuery + */ +class EmptySpans : public Spans +{ +public: + EmptySpans() {} + virtual ~ EmptySpans() {} + + bool next() { return false; } + bool skipTo( int32_t target ) { return false; } + + int32_t doc() const { assert( false ); return -1; } + int32_t start() const { assert( false ); return 0; } + int32_t end() const { assert( false ); return 1; } + + TCHAR* toString() const { return STRDUP_TtoT( _T( "spans()" )); } +}; + +CL_NS_END2 +#endif // _lucene_search_spans_EmptySpans_ diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/spans/_NearSpansOrdered.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/spans/_NearSpansOrdered.h new file mode 100644 index 0000000..092b507 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/spans/_NearSpansOrdered.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 _lucene_search_spans_NearSpansOrdered_ +#define _lucene_search_spans_NearSpansOrdered_ + +CL_CLASS_DEF(index, IndexReader) +CL_CLASS_DEF2(search, spans, SpanNearQuery) +#include "Spans.h" + +CL_NS_DEF2( search, spans ) + +/** A Spans that is formed from the ordered subspans of a SpanNearQuery + * where the subspans do not overlap and have a maximum slop between them. + *

+ * The formed spans only contains minimum slop matches.
+ * The matching slop is computed from the distance(s) between + * the non overlapping matching Spans.
+ * Successive matches are always formed from the successive Spans + * of the SpanNearQuery. + *

+ * The formed spans may contain overlaps when the slop is at least 1. + * For example, when querying using + *

t1 t2 t3
+ * with slop at least 1, the fragment: + *
t1 t2 t1 t3 t2 t3
+ * matches twice: + *
t1 t2 .. t3      
+ *
      t1 .. t2 t3
+ */ +class NearSpansOrdered : public Spans +{ +private: + int32_t allowedSlop; + bool firstTime; + bool more; + + /** The spans in the same order as the SpanNearQuery */ + Spans ** subSpans; + size_t subSpansCount; + + /** Indicates that all subSpans have same doc() */ + bool inSameDoc; + + int32_t matchDoc; + int32_t matchStart; + int32_t matchEnd; + + Spans ** subSpansByDoc; + + SpanNearQuery * query; + +public: + NearSpansOrdered( SpanNearQuery * spanNearQuery, CL_NS(index)::IndexReader * reader ); + virtual ~NearSpansOrdered(); + + bool next(); + bool skipTo( int32_t target ); + + int32_t doc() const { return matchDoc; } + int32_t start() const { return matchStart; } + int32_t end() const { return matchEnd; } + + TCHAR* toString() const; + + /** Check whether two Spans in the same document are ordered. + * @param spans1 + * @param spans2 + * @return true iff spans1 starts before spans2 + * or the spans start at the same position, + * and spans1 ends before spans2. + */ + static bool docSpansOrdered( Spans * spans1, Spans * spans2 ); + +private: + /** Advances the subSpans to just after an ordered match with a minimum slop + * that is smaller than the slop allowed by the SpanNearQuery. + * @return true iff there is such a match. + */ + bool advanceAfterOrdered(); + + /** Advance the subSpans to the same document */ + bool toSameDoc(); + + /** Like {@link #docSpansOrdered(Spans,Spans)}, but use the spans + * starts and ends as parameters. + */ + static bool docSpansOrdered( int32_t start1, int32_t end1, int32_t start2, int32_t end2 ); + + /** Order the subSpans within the same document by advancing all later spans + * after the previous one. + */ + bool stretchToOrder(); + + /** The subSpans are ordered in the same doc, so there is a possible match. + * Compute the slop while making the match as short as possible by advancing + * all subSpans except the last one in reverse order. + */ + bool shrinkToAfterShortestMatch(); +}; + +CL_NS_END2 +#endif // _lucene_search_spans_NearSpansOrdered_ diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/spans/_NearSpansUnordered.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/spans/_NearSpansUnordered.h new file mode 100644 index 0000000..a9912f1 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/spans/_NearSpansUnordered.h @@ -0,0 +1,103 @@ +/*------------------------------------------------------------------------------ + * 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_spans_NearSpansUnordered_ +#define _lucene_search_spans_NearSpansUnordered_ + +CL_CLASS_DEF(index, IndexReader) +CL_CLASS_DEF2(search, spans, SpanNearQuery) +#include "CLucene/util/PriorityQueue.h" +#include "Spans.h" + +CL_NS_DEF2( search, spans ) + +class NearSpansUnordered : public Spans +{ +private: + ///////////////////////////////////////////////////////////////////////////// + class SpansCell : public Spans + { + private: + NearSpansUnordered * parentSpans; + Spans * spans; + int32_t length; + int32_t index; + + public: + SpansCell * nextCell; + + public: + SpansCell( NearSpansUnordered * parentSpans, Spans * spans, int32_t index ); + virtual ~SpansCell(); + + bool next() { return adjust( spans->next() ); } + bool skipTo( int32_t target ) { return adjust( spans->skipTo( target )); } + + int32_t doc() const { return spans->doc(); } + int32_t start() const { return spans->start(); } + int32_t end() const { return spans->end(); } + + TCHAR* toString() const; + + private: + bool adjust( bool condition ); + + }; + + ///////////////////////////////////////////////////////////////////////////// + class CellQueue : public CL_NS(util)::PriorityQueue > + { + public: + CellQueue( int32_t size ) { initialize( size, false ); } // All the span cells will be freed in ~NearSpansUnordered() while frein ordered member + virtual ~CellQueue() {} + + protected: + bool lessThan( SpansCell * spans1, SpansCell* spans2 ); + }; + +private: + SpanNearQuery * query; + + list ordered; // spans in query order + int32_t slop; // from query + + SpansCell * first; // linked list of spans + SpansCell * last; // sorted by doc only + + int32_t totalLength; // sum of current lengths + + CellQueue * queue; // sorted queue of spans + SpansCell * max; // max element in queue + + bool more; // true iff not done + bool firstTime; // true before first next() + +public: + NearSpansUnordered( SpanNearQuery * query, CL_NS(index)::IndexReader * reader ); + virtual ~NearSpansUnordered(); + + bool next(); + bool skipTo( int32_t target ); + + int32_t doc() const { return min()->doc(); } + int32_t start() const { return min()->start(); } + int32_t end() const { return max->end(); } + + TCHAR* toString() const; + +private: + SpansCell * min() const { return queue->top(); } + + void initList( bool next ); + void addToList( SpansCell * cell ); + void firstToLast(); + void queueToList(); + void listToQueue(); + bool atMatch(); +}; + +CL_NS_END2 +#endif // _lucene_search_spans_NearSpansUnordered_ diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/spans/_TermSpans.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/spans/_TermSpans.h new file mode 100644 index 0000000..5a7356a --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/search/spans/_TermSpans.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_search_spans_TermSpans_ +#define _lucene_search_spans_TermSpans_ + +#include "CLucene/search/spans/Spans.h" +CL_CLASS_DEF(index, TermPositions) +CL_CLASS_DEF(index, Term) + +CL_NS_DEF2(search, spans) + +/** + * Expert: + * Public for extension only + */ +class TermSpans : public Spans +{ +protected: + CL_NS(index)::TermPositions * positions; + CL_NS(index)::Term * term; + int32_t doc_; + int32_t freq; + int32_t count; + int32_t position; + +public: + TermSpans( CL_NS(index)::TermPositions * positions, CL_NS(index)::Term * term ); + virtual ~TermSpans(); + + bool next(); + bool skipTo( int32_t target ); + + int32_t doc() const { return doc_; } + int32_t start() const { return position; } + int32_t end() const { return position + 1; } + + TCHAR* toString() const; + + CL_NS(index)::TermPositions * getPositions() { return positions; } +}; + +CL_NS_END2 +#endif // _lucene_search_spans_TermSpans_ diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/store/Directory.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/store/Directory.cpp new file mode 100644 index 0000000..7fbf495 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/store/Directory.cpp @@ -0,0 +1,78 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" + +#include "Directory.h" +#include "LockFactory.h" +#include "CLucene/util/Misc.h" + +CL_NS_DEF(store) + + +Directory::Directory(){ + this->lockFactory = NULL; +} +Directory::~Directory(){ + if (lockFactory != NULL) + _CLDELETE(lockFactory); +} + +LuceneLock* Directory::makeLock(const char* name) { + return lockFactory->makeLock( name ); +} + +void Directory::setLockFactory( LockFactory* lockFactory ) { + this->lockFactory = lockFactory; + lockFactory->setLockPrefix( getLockID().c_str() ); +} + +LockFactory* Directory::getLockFactory() { + return lockFactory; +} + +string Directory::getLockID() { + return toString(); +} + +void Directory::clearLock(const char* name) { + if ( lockFactory != NULL ) { + lockFactory->clearLock( name ); + } +} + +bool Directory::deleteFile(const char* name, const bool throwError){ + bool ret = doDeleteFile(name); + if ( !ret && throwError ){ + char buffer[200]; + _snprintf(buffer,200,"couldn't delete %s",name); + _CLTHROWA(CL_ERR_IO, buffer ); + } + return ret; +} +IndexInput* Directory::openInput(const char* name, int32_t bufferSize){ + IndexInput* ret; + CLuceneError err; + if ( ! openInput(name, ret, err, bufferSize) ) + throw err; + return ret; +} +char** Directory::list() const{ + vector names; + + list(&names); + + size_t size = names.size(); + char** ret = _CL_NEWARRAY(char*,size+1); + for ( size_t i=0;i& names) const{ + return list(&names); +} +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/store/Directory.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/store/Directory.h new file mode 100644 index 0000000..a13cc91 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/store/Directory.h @@ -0,0 +1,100 @@ +/*------------------------------------------------------------------------------ +* 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_Directory +#define _lucene_store_Directory + +#include "CLucene/util/Equators.h" +#include "CLucene/LuceneThreads.h" +#include +#include + +CL_CLASS_DEF(store,Lock) +CL_CLASS_DEF(store,IndexInput) +CL_CLASS_DEF(store,IndexOutput) +CL_CLASS_DEF(store,LockFactory) +CL_CLASS_DEF(store,LuceneLock) + +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. + * + *

Direct i/o is not used directly, but rather all i/o is + * through this API. This permits things such as:

    + *
  • implementation of RAM-based indices; + *
  • implementation indices stored in a database, via a database; + *
  • implementation of an index as a single file; + *
+ * + */ +class CLUCENE_EXPORT Directory: LUCENE_REFBASE, public CL_NS(util)::NamedObject { + protected: + LockFactory* lockFactory; + + Directory(); + // Removes an existing file in the directory. + virtual bool doDeleteFile(const char* name) = 0; + public: + DEFINE_MUTEX(THIS_LOCK) + + virtual ~Directory(); + + // Returns an null terminated array of strings, one for each file in the directory. + char** list() const; + virtual bool list(std::vector* names) const = 0; //todo: deprecate this... + bool list(std::vector& names) const; + + // Returns true iff a file with the given name exists. + virtual bool fileExists(const char* name) const = 0; + + // Returns the time the named file was last modified. + virtual int64_t fileModified(const char* name) const = 0; + + // Returns the length of a file in the directory. + virtual int64_t fileLength(const char* name) const = 0; + + // An advanced overload to avoid throwing an error. if result is false, error is filled with the reason + virtual bool openInput(const char* name, IndexInput*& ret, CLuceneError& error, int32_t bufferSize = -1) = 0; + + // Returns a stream reading an existing file. + IndexInput* openInput(const char* name, int32_t bufferSize=-1); + + /// Set the modified time of an existing file to now. */ + virtual void touchFile(const char* name) = 0; + + // Removes an existing file in the directory. + virtual bool deleteFile(const char* name, const bool throwError=true); + + // 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. + virtual void renameFile(const char* from, const char* to) = 0; + + // Creates a new, empty file in the directory with the given name. + // Returns a stream writing this file. + virtual IndexOutput* createOutput(const char* name) = 0; + + // Construct a {@link Lock}. + // @param name the name of the lock file + virtual LuceneLock* makeLock(const char* name); + + virtual void clearLock(const char* name); + + // Closes the store. + virtual void close() = 0; + + virtual std::string toString() const = 0; + + void setLockFactory( LockFactory* lockFactory ); + + LockFactory* getLockFactory(); + + virtual std::string getLockID(); + }; +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/store/FSDirectory.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/store/FSDirectory.cpp new file mode 100644 index 0000000..c094292 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/store/FSDirectory.cpp @@ -0,0 +1,692 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" + +#include +#ifdef _CL_HAVE_IO_H + #include +#endif +#ifdef _CL_HAVE_SYS_STAT_H + #include +#endif +#ifdef _CL_HAVE_UNISTD_H + #include +#endif +#ifdef _CL_HAVE_DIRECT_H + #include +#endif +#include + +#include + +#include "FSDirectory.h" +#include "LockFactory.h" +#include "CLucene/index/IndexReader.h" +#include "CLucene/index/IndexWriter.h" +#include "CLucene/util/Misc.h" +#include "CLucene/util/_MD5Digester.h" + +#ifdef LUCENE_FS_MMAP + #include "_MMapIndexInput.h" +#endif + +CL_NS_DEF(store) +CL_NS_USE(util) + + /** 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 DIRECTORIES(false,false); + STATIC_DEFINE_MUTEX(DIRECTORIES_LOCK) + + bool FSDirectory::disableLocks=false; + + class FSDirectory::FSIndexInput:public BufferedIndexInput { + /** + * 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. + * TODO: get rid of this and dup/fctnl or something like that... + */ + class SharedHandle: LUCENE_REFBASE{ + public: + int32_t fhandle; + int64_t _length; + int64_t _fpos; + DEFINE_MUTEX(*SHARED_LOCK) + char path[CL_MAX_DIR]; //todo: this is only used for cloning, better to get information from the fhandle + SharedHandle(const char* path); + ~SharedHandle(); + }; + SharedHandle* handle; + int64_t _pos; + FSIndexInput(SharedHandle* handle, int32_t __bufferSize): + BufferedIndexInput(__bufferSize) + { + this->_pos = 0; + this->handle = handle; + }; + protected: + FSIndexInput(const FSIndexInput& clone); + public: + static bool open(const char* path, IndexInput*& ret, CLuceneError& error, int32_t bufferSize=-1); + ~FSIndexInput(); + + IndexInput* clone() const; + void close(); + int64_t length() const { return handle->_length; } + + const char* getDirectoryType() const{ return FSDirectory::getClassName(); } + const char* getObjectName() const{ return getClassName(); } + static const char* getClassName() { return "FSIndexInput"; } + protected: + // Random-access methods + void seekInternal(const int64_t position); + // IndexInput methods + void readInternal(uint8_t* b, const int32_t len); + }; + + class FSDirectory::FSIndexOutput: public BufferedIndexOutput { + private: + int32_t fhandle; + protected: + // output methods: + void flushBuffer(const uint8_t* b, const int32_t size); + public: + FSIndexOutput(const char* path, int filemode); + ~FSIndexOutput(); + + // output methods: + void close(); + + // Random-access methods + void seek(const int64_t pos); + int64_t length() const; + }; + + bool FSDirectory::FSIndexInput::open(const char* path, IndexInput*& ret, CLuceneError& error, int32_t __bufferSize ) { + //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"); + + if ( __bufferSize == -1 ) + __bufferSize = CL_NS(store)::BufferedIndexOutput::BUFFER_SIZE; + SharedHandle* handle = _CLNEW SharedHandle(path); + + //Open the file + handle->fhandle = ::_cl_open(path, _O_BINARY | O_RDONLY | _O_RANDOM, _S_IREAD ); + + //Check if a valid handle was retrieved + if (handle->fhandle >= 0){ + //Store the file length + handle->_length = fileSize(handle->fhandle); + if ( handle->_length == -1 ) + error.set( CL_ERR_IO,"fileStat error" ); + else{ + handle->_fpos = 0; + ret = _CLNEW FSIndexInput(handle, __bufferSize); + return true; + } + }else{ + int err = errno; + if ( err == ENOENT ) + error.set(CL_ERR_IO, "File does not exist"); + else if ( err == EACCES ) + error.set(CL_ERR_IO, "File Access denied"); + else if ( err == EMFILE ) + error.set(CL_ERR_IO, "Too many open files"); + else + error.set(CL_ERR_IO, "Could not open file"); + } +#ifndef _CL_DISABLE_MULTITHREADING + delete handle->SHARED_LOCK; +#endif + _CLDECDELETE(handle); + return false; + } + + FSDirectory::FSIndexInput::FSIndexInput(const FSIndexInput& other): BufferedIndexInput(other){ + //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 + if ( other.handle == NULL ) + _CLTHROWA(CL_ERR_NullPointer, "other handle is null"); + + SCOPED_LOCK_MUTEX(*other.handle->SHARED_LOCK) + handle = _CL_POINTER(other.handle); + _pos = other.handle->_fpos; //note where we are currently... + } + + FSDirectory::FSIndexInput::SharedHandle::SharedHandle(const char* path){ + fhandle = 0; + _length = 0; + _fpos = 0; + strcpy(this->path,path); + +#ifndef _CL_DISABLE_MULTITHREADING + SHARED_LOCK = new _LUCENE_THREADMUTEX; +#endif + } + FSDirectory::FSIndexInput::SharedHandle::~SharedHandle() { + if ( fhandle >= 0 ){ + if ( ::_close(fhandle) != 0 ) + _CLTHROWA(CL_ERR_IO, "File IO Close error"); + else + fhandle = -1; + } + } + + FSDirectory::FSIndexInput::~FSIndexInput(){ + //Func - Destructor + //Pre - True + //Post - The file for which this instance is responsible has been closed. + // The instance has been destroyed + + FSIndexInput::close(); + } + + IndexInput* FSDirectory::FSIndexInput::clone() const + { + return _CLNEW FSDirectory::FSIndexInput(*this); + } + void FSDirectory::FSIndexInput::close() { + BufferedIndexInput::close(); +#ifndef _CL_DISABLE_MULTITHREADING + if ( handle != NULL ){ + //here we have a bit of a problem... we need to lock the handle to ensure that we can + //safely delete the handle... but if we delete the handle, then the scoped unlock, + //won't be able to unlock the mutex... + + //take a reference of the lock object... + _LUCENE_THREADMUTEX* mutex = handle->SHARED_LOCK; + //lock the mutex + mutex->lock(); + + //determine if we are about to delete the handle... + bool dounlock = ( _LUCENE_ATOMIC_INT_GET(handle->__cl_refcount) > 1 ); + + //decdelete (deletes if refcount is down to 0 + _CLDECDELETE(handle); + + //printf("handle=%d\n", handle->__cl_refcount); + mutex->unlock(); + if ( !dounlock ) { + delete mutex; + } + } +#else + _CLDECDELETE(handle); +#endif + } + + void FSDirectory::FSIndexInput::seekInternal(const int64_t position) { + CND_PRECONDITION(position>=0 &&position_length,"Seeking out of range") + _pos = position; + } + +/** IndexInput methods */ +void FSDirectory::FSIndexInput::readInternal(uint8_t* b, const int32_t len) { + CND_PRECONDITION(handle!=NULL,"shared file handle has closed"); + CND_PRECONDITION(handle->fhandle>=0,"file is not open"); + SCOPED_LOCK_MUTEX(*handle->SHARED_LOCK) + + if ( handle->_fpos != _pos ){ + if ( fileSeek(handle->fhandle,_pos,SEEK_SET) != _pos ){ + _CLTHROWA( CL_ERR_IO, "File IO Seek error"); + } + handle->_fpos = _pos; + } + + bufferLength = _read(handle->fhandle,b,len); // 2004.10.31:SF 1037836 + if (bufferLength == 0){ + _CLTHROWA(CL_ERR_IO, "read past EOF"); + } + if (bufferLength == -1){ + //if (EINTR == errno) we could do something else... but we have + //to guarantee some return, or throw EOF + + _CLTHROWA(CL_ERR_IO, "read error"); + } + _pos+=bufferLength; + handle->_fpos=_pos; +} + + FSDirectory::FSIndexOutput::FSIndexOutput(const char* path, int filemode){ + //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; + if ( filemode <= 0 ){ + filemode = 0644; + } + if ( Misc::dir_Exists(path) ) + fhandle = _cl_open( path, _O_BINARY | O_RDWR | _O_RANDOM | O_TRUNC, filemode); + else // added by JBP + fhandle = _cl_open( path, _O_BINARY | O_RDWR | _O_RANDOM | O_CREAT, filemode); + + if ( fhandle < 0 ){ + int err = errno; + if ( err == ENOENT ) + _CLTHROWA(CL_ERR_IO, "File does not exist"); + else if ( err == EACCES ) + _CLTHROWA(CL_ERR_IO, "File Access denied"); + else if ( err == EMFILE ) + _CLTHROWA(CL_ERR_IO, "Too many open files"); + } + } + FSDirectory::FSIndexOutput::~FSIndexOutput(){ + if ( fhandle >= 0 ){ + try { + FSIndexOutput::close(); + }catch(CLuceneError& err){ + //ignore IO errors... + if ( err.number() != CL_ERR_IO ) + throw; + } + } + } + + /** output methods: */ + void FSDirectory::FSIndexOutput::flushBuffer(const uint8_t* b, const int32_t size) { + CND_PRECONDITION(fhandle>=0,"file is not open"); + if ( size > 0 && _write(fhandle,b,size) != size ) + _CLTHROWA(CL_ERR_IO, "File IO Write error"); + } + void FSDirectory::FSIndexOutput::close() { + try{ + BufferedIndexOutput::close(); + }catch(CLuceneError& err){ + //ignore IO errors... + if ( err.number() != CL_ERR_IO ) + throw; + } + + if ( ::_close(fhandle) != 0 ) + _CLTHROWA(CL_ERR_IO, "File IO Close error"); + else + fhandle = -1; //-1 now indicates closed + } + + void FSDirectory::FSIndexOutput::seek(const int64_t pos) { + CND_PRECONDITION(fhandle>=0,"file is not open"); + BufferedIndexOutput::seek(pos); + int64_t ret = fileSeek(fhandle,pos,SEEK_SET); + if ( ret != pos ){ + _CLTHROWA(CL_ERR_IO, "File IO Seek error"); + } + } + int64_t FSDirectory::FSIndexOutput::length() const { + CND_PRECONDITION(fhandle>=0,"file is not open"); + return fileSize(fhandle); + } + + + const char* FSDirectory::LOCK_DIR=NULL; + const char* FSDirectory::getLockDir(){ + #ifdef LUCENE_LOCK_DIR + LOCK_DIR = LUCENE_LOCK_DIR; + #else + #ifdef LUCENE_LOCK_DIR_ENV_1 + if ( LOCK_DIR == NULL ) + LOCK_DIR = getenv(LUCENE_LOCK_DIR_ENV_1); + #endif + #ifdef LUCENE_LOCK_DIR_ENV_2 + if ( LOCK_DIR == NULL ) + LOCK_DIR = getenv(LUCENE_LOCK_DIR_ENV_2); + #endif + #ifdef LUCENE_LOCK_DIR_ENV_FALLBACK + if ( LOCK_DIR == NULL ) + LOCK_DIR=LUCENE_LOCK_DIR_ENV_FALLBACK; + #endif + if ( LOCK_DIR == NULL ) + _CLTHROWA(CL_ERR_IO, "Couldn't get determine lock dir"); + #endif + + return LOCK_DIR; + } + + FSDirectory::FSDirectory(): + Directory(), + refCount(0), + useMMap(LUCENE_USE_MMAP) + { + filemode = 0644; + this->lockFactory = NULL; + } + + void FSDirectory::init(const char* _path, LockFactory* lockFactory) + { + directory = _path; + bool doClearLockID = false; + + if ( lockFactory == NULL ) { + if ( disableLocks ) { + lockFactory = NoLockFactory::getNoLockFactory(); + } else { + lockFactory = _CLNEW FSLockFactory( directory.c_str(), this->filemode ); + doClearLockID = true; + } + } + + setLockFactory( lockFactory ); + + if ( doClearLockID ) { + lockFactory->setLockPrefix(NULL); + } + + if (!Misc::dir_Exists(directory.c_str())){ + char* err = _CL_NEWARRAY(char,19+directory.length()+1); //19: len of " is not a directory" + strcpy(err,directory.c_str()); + strcat(err," is not a directory"); + _CLTHROWA_DEL(CL_ERR_IO, err ); + } + } + + + void FSDirectory::create(){ + SCOPED_LOCK_MUTEX(THIS_LOCK) + + //clear old files + vector files; + Misc::listFiles(directory.c_str(), files, false); + vector::iterator itr = files.begin(); + while ( itr != files.end() ){ + if ( CL_NS(index)::IndexReader::isLuceneFile(itr->c_str()) ){ + if ( _unlink( (directory + PATH_DELIMITERA + *itr).c_str() ) == -1 ) { + _CLTHROWA(CL_ERR_IO, "Couldn't delete file "); //todo: make richer error + } + } + itr++; + } + lockFactory->clearLock( CL_NS(index)::IndexWriter::WRITE_LOCK_NAME ); + + } + + void FSDirectory::priv_getFN(char* buffer, const char* name) const{ + buffer[0] = 0; + strcpy(buffer,directory.c_str()); + strcat(buffer, PATH_DELIMITERA ); + strcat(buffer,name); + } + + FSDirectory::~FSDirectory(){ + } + + void FSDirectory::setFileMode(int mode){ + this->filemode = mode; + } + int FSDirectory::getFileMode(){ + return this->filemode; + } + void FSDirectory::setUseMMap(bool value){ useMMap = value; } + bool FSDirectory::getUseMMap() const{ return useMMap; } + const char* FSDirectory::getClassName(){ + return "FSDirectory"; + } + const char* FSDirectory::getObjectName() const{ + return getClassName(); + } + + void FSDirectory::setDisableLocks(bool doDisableLocks) { disableLocks = doDisableLocks; } + bool FSDirectory::getDisableLocks() { return disableLocks; } + + + bool FSDirectory::list(vector* names) const{ //todo: fix this, ugly!!! + CND_PRECONDITION(!directory.empty(),"directory is not open"); + return Misc::listFiles(directory.c_str(), *names, false); + } + + bool FSDirectory::fileExists(const char* name) const { + CND_PRECONDITION(directory[0]!=0,"directory is not open"); + char fl[CL_MAX_DIR]; + priv_getFN(fl, name); + return Misc::dir_Exists( fl ); + } + + const char* FSDirectory::getDirName() const{ + return directory.c_str(); + } + + FSDirectory* FSDirectory::getDirectory(const char* file, bool create, LockFactory* lockFactory){ + FSDirectory* dir = getDirectory(file, (LockFactory*)NULL); + + // This is now deprecated (creation should only be done + // by IndexWriter): + if (create) { + dir->create(); + } + + return dir; + } + //static + FSDirectory* FSDirectory::getDirectory(const char* _file, LockFactory* lockFactory){ + FSDirectory* dir = NULL; + { + if ( !_file || !*_file ) + _CLTHROWA(CL_ERR_IO,"Invalid directory"); + + char buf[CL_MAX_PATH]; + char* file = _realpath(_file,buf);//set a realpath so that if we change directory, we can still function + if ( !file || !*file ){ + strncpy(buf, _file, CL_MAX_PATH); + file = buf; + } + + struct cl_stat_t fstat; + if ( fileStat(file,&fstat) == 0 && !(fstat.st_mode & S_IFDIR) ){ + char tmp[1024]; + _snprintf(tmp,1024,"%s not a directory", file); + _CLTHROWA(CL_ERR_IO,tmp); + } + + if ( fileStat(file,&fstat) != 0 ) { + //todo: should construct directory using _mkdirs... have to write replacement + if ( _mkdir(file) == -1 ){ + string err = "Couldn't create directory: "; + err += string(file); + _CLTHROWA(CL_ERR_IO, err.c_str() ); + } + } + + + SCOPED_LOCK_MUTEX(DIRECTORIES_LOCK) + dir = DIRECTORIES.get(file); + if ( dir == NULL ){ + dir = _CLNEW FSDirectory(); + dir->init(file,lockFactory); + DIRECTORIES.put( dir->directory.c_str(), dir); + } else { + if ( lockFactory != NULL && lockFactory != dir->getLockFactory() ) { + _CLTHROWA(CL_ERR_IO,"Directory was previously created with a different LockFactory instance, please pass NULL as the lockFactory instance and use setLockFactory to change it"); + } + } + + { + SCOPED_LOCK_MUTEX(dir->THIS_LOCK) + dir->refCount++; + } + } + + return _CL_POINTER(dir); // TODO: Isn't this a double ref increment? + } + + int64_t FSDirectory::fileModified(const char* name) const { + CND_PRECONDITION(directory[0]!=0,"directory is not open"); + struct cl_stat_t buf; + char buffer[CL_MAX_DIR]; + priv_getFN(buffer,name); + if (fileStat( buffer, &buf ) == -1 ) + return 0; + else + return buf.st_mtime; + } + + //static + int64_t FSDirectory::fileModified(const char* dir, const char* name){ + struct cl_stat_t buf; + char buffer[CL_MAX_DIR]; + _snprintf(buffer,CL_MAX_DIR,"%s%s%s",dir,PATH_DELIMITERA,name); + fileStat( buffer, &buf ); + return buf.st_mtime; + } + + void FSDirectory::touchFile(const char* name){ + CND_PRECONDITION(directory[0]!=0,"directory is not open"); + char buffer[CL_MAX_DIR]; + _snprintf(buffer,CL_MAX_DIR,"%s%s%s",directory.c_str(),PATH_DELIMITERA,name); + + int32_t r = _cl_open(buffer, O_RDWR, this->filemode); + if ( r < 0 ) + _CLTHROWA(CL_ERR_IO,"IO Error while touching file"); + ::_close(r); + } + + int64_t FSDirectory::fileLength(const char* name) const { + CND_PRECONDITION(directory[0]!=0,"directory is not open"); + struct cl_stat_t buf; + char buffer[CL_MAX_DIR]; + priv_getFN(buffer,name); + if ( fileStat( buffer, &buf ) == -1 ) + return 0; + else + return buf.st_size; + } + + bool FSDirectory::openInput(const char * name, IndexInput *& ret, CLuceneError& error, int32_t bufferSize) + { + CND_PRECONDITION(directory[0]!=0,"directory is not open") + char fl[CL_MAX_DIR]; + priv_getFN(fl, name); +#ifdef LUCENE_FS_MMAP + //todo: do some tests here... like if the file + //is >2gb, then some system cannot mmap the file + //also some file systems mmap will fail?? could detect here too + if ( useMMap && Misc::file_Size(fl) < LUCENE_INT32_MAX_SHOULDBE ) //todo: would this be bigger on 64bit systems?. i suppose it would be...test first + return MMapIndexInput::open( fl, ret, error, bufferSize ); + else +#endif + return FSIndexInput::open( fl, ret, error, bufferSize ); + } + + void FSDirectory::close(){ + SCOPED_LOCK_MUTEX(DIRECTORIES_LOCK) + { + THIS_LOCK.lock(); + + CND_PRECONDITION(directory[0]!=0,"directory is not open"); + + if (--refCount <= 0 ) {//refcount starts at 1 + Directory* dir = DIRECTORIES.get(getDirName()); + if(dir){ + DIRECTORIES.remove( getDirName() ); //this will be removed in ~FSDirectory + _CLDECDELETE(dir); + //NOTE: Don't unlock the mutex, since it has been destroyed now... + return; + } + } + THIS_LOCK.unlock(); + } + } + + /** + * So we can do some byte-to-hexchar conversion below + */ + char HEX_DIGITS[] = + {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'}; + + char* FSDirectory::getLockPrefix() const{ + char dirName[CL_MAX_PATH]; // name to be hashed + if ( _realpath(directory.c_str(),dirName) == NULL ){ + _CLTHROWA(CL_ERR_Runtime,"Invalid directory path"); + } + + //to make a compatible name with jlucene, we need to make some changes... + if ( dirName[1] == ':' ) + dirName[0] = (char)_totupper((char)dirName[0]); + + char* smd5 = MD5String(dirName); + + char* ret=_CL_NEWARRAY(char,32+7+1); //32=2*16, 7=strlen("lucene-") + strcpy(ret,"lucene-"); + strcat(ret,smd5); + + _CLDELETE_CaARRAY(smd5); + + return ret; + } + + bool FSDirectory::doDeleteFile(const char* name) { + CND_PRECONDITION(directory[0]!=0,"directory is not open"); + char fl[CL_MAX_DIR]; + priv_getFN(fl, name); + return _unlink(fl) != -1; + } + + void FSDirectory::renameFile(const char* from, const char* to){ + CND_PRECONDITION(directory[0]!=0,"directory is not open"); + SCOPED_LOCK_MUTEX(THIS_LOCK) + char old[CL_MAX_DIR]; + priv_getFN(old, from); + + char nu[CL_MAX_DIR]; + priv_getFN(nu, to); + + /* This is not atomic. If the program crashes between the call to + delete() and the call to renameTo() then we're screwed, but I've + been unable to figure out how else to do this... */ + + if ( Misc::dir_Exists(nu) ){ + //we run this sequence of unlinking an arbitary 100 times + //on some platforms (namely windows), there can be a + //delay between unlink and dir_exists==false + if( Misc::file_Unlink( nu ) == -1 ) { + char* err = _CL_NEWARRAY(char,16+strlen(to)+1); //16: len of "couldn't delete " + strcpy(err,"couldn't delete "); + strcat(err,to); + _CLTHROWA_DEL(CL_ERR_IO, err ); + } + } + if ( _rename(old,nu) != 0 ){ + //todo: jlucene has some extra rename code - if the rename fails, it copies + //the whole file to the new file... might want to implement that if renaming + //fails on some platforms + char buffer[20+CL_MAX_PATH+CL_MAX_PATH]; + strcpy(buffer,"couldn't rename "); + strcat(buffer,from); + strcat(buffer," to "); + strcat(buffer,nu); + _CLTHROWA(CL_ERR_IO, buffer ); + } + } + + IndexOutput* FSDirectory::createOutput(const char* name) { + CND_PRECONDITION(directory[0]!=0,"directory is not open"); + char fl[CL_MAX_DIR]; + priv_getFN(fl, name); + if ( Misc::dir_Exists(fl) ){ + if ( Misc::file_Unlink( fl, 1 ) == -1 ) { + char tmp[1024]; + strcpy(tmp, "Cannot overwrite: "); + strcat(tmp, name); + _CLTHROWA(CL_ERR_IO, tmp); + } + assert( ! Misc::dir_Exists(fl) ); + } + return _CLNEW FSIndexOutput( fl, this->filemode ); + } + + string FSDirectory::toString() const{ + return string("FSDirectory@") + this->directory; + } + +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/store/FSDirectory.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/store/FSDirectory.h new file mode 100644 index 0000000..13b5f78 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/store/FSDirectory.h @@ -0,0 +1,168 @@ +/*------------------------------------------------------------------------------ +* 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_FSDirectory_ +#define _lucene_store_FSDirectory_ + +#include "Directory.h" +#include "IndexInput.h" +#include "IndexOutput.h" +#include +#include + +CL_CLASS_DEF(util,StringBuffer) + + CL_NS_DEF(store) + + /** + * Straightforward implementation of {@link lucene::store::Directory} as a directory of files. + *

If the system property 'disableLuceneLocks' has the String value of + * "true", lock creation will be disabled. + * + * @see Directory + */ + class CLUCENE_EXPORT FSDirectory:public Directory{ + private: + class FSIndexOutput; + class FSIndexInput; + friend class FSDirectory::FSIndexOutput; + friend class FSDirectory::FSIndexInput; + + int filemode; + protected: + FSDirectory(); + virtual void init(const char* path, LockFactory* lockFactory = NULL); + void priv_getFN(char* buffer, const char* name) const; + private: + std::string directory; + int refCount; + void create(); + + static const char* LOCK_DIR; + static const char* getLockDir(); + char* getLockPrefix() const; + static bool disableLocks; + + bool useMMap; + + protected: + /// Removes an existing file in the directory. + bool doDeleteFile(const char* name); + + public: + ///Destructor - only call this if you are sure the directory + ///is not being used anymore. Otherwise use the ref-counting + ///facilities of _CLDECDELETE + virtual ~FSDirectory(); + + /// Get a list of strings, one for each file in the directory. + bool list(std::vector* names) const; + + /// Returns true iff a file with the given name exists. + bool fileExists(const char* name) const; + + /// Returns the text name of the directory + const char* getDirName() const; ///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 char* file, LockFactory* lockFactory=NULL); + + /// Returns the time the named file was last modified. + int64_t fileModified(const char* name) const; + + //static + /// Returns the time the named file was last modified. + static int64_t fileModified(const char* dir, const char* name); + + //static + /// Returns the length in bytes of a file in the directory. + int64_t fileLength(const char* name) const; + + /// Returns a stream reading an existing file. + virtual bool openInput(const char* name, IndexInput*& ret, CLuceneError& err, int32_t bufferSize = -1); + + /// Renames an existing file in the directory. + void renameFile(const char* from, const char* to); + + /** Set the modified time of an existing file to now. */ + void touchFile(const char* name); + + /// Creates a new, empty file in the directory with the given name. + /// Returns a stream writing this file. + virtual IndexOutput* createOutput(const char* 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); + /** + * Gets whether the directory is using MMap for inputstreams. + */ + bool getUseMMap() const; + + std::string toString() const; + + static const char* getClassName(); + const char* getObjectName() const; + + /** + * 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); + + /** + * Returns whether Lucene's use of lock files is disabled. + * @return true if locks are disabled, false if locks are enabled. + */ + static bool getDisableLocks(); + + /** + * Sets the file mode for new files. This is passed to new output streams + * and to the lock factory. The mode should be a valid octal file mode for + * the 3rd parameter of the file open function (such as 0644) + * + * Tip: _tcstoi64(_T("644"), NULL, 8) is also a valid way of + * creating a file mode + */ + void setFileMode(int mode); + + /** + * Gets the file mode for new files + */ + int getFileMode(); + }; + +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/store/IndexInput.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/store/IndexInput.cpp new file mode 100644 index 0000000..42aacad --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/store/IndexInput.cpp @@ -0,0 +1,306 @@ + /*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "IndexInput.h" +#include "IndexOutput.h" +#include "CLucene/util/Misc.h" + +CL_NS_DEF(store) +CL_NS_USE(util) + + IndexInput::IndexInput(): + NamedObject() + { + } + 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() { + uint64_t i = ((uint64_t)readInt() << 32); + return (i | ((uint64_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(); + } + } +} + + #ifdef _UCS2 + int32_t IndexInput::readString(char* buffer, const int32_t maxLength){ + TCHAR* buf = _CL_NEWARRAY(TCHAR,maxLength); + int32_t ret = -1; + try{ + ret = readString(buf,maxLength); + STRCPY_TtoA(buffer,buf,ret+1); + }_CLFINALLY ( _CLDELETE_CARRAY(buf); ) + return ret; + } + #endif + + 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(){ + int32_t len = readVInt(); + + if ( len == 0){ + return stringDuplicate(LUCENE_BLANK_STRING); + } + + TCHAR* ret = _CL_NEWARRAY(TCHAR,len+1); + readChars(ret, 0, len); + ret[len] = 0; + + return ret; + } + + void IndexInput::readBytes( uint8_t* b, const int32_t len, bool /*useBuffer*/) { + // Default to ignoring useBuffer entirely + readBytes(b, len); + } + + 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>=0?_bufferSize:CL_NS(store)::BufferedIndexOutput::BUFFER_SIZE), + 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)); + } + } + + const char* BufferedIndexInput::getObjectName(){ return getClassName(); } + const char* BufferedIndexInput::getClassName(){ return "BufferedIndexInput"; } + + void BufferedIndexInput::readBytes(uint8_t* b, const int32_t len){ + readBytes(b, len, true); + } + void BufferedIndexInput::readBytes(uint8_t* _b, const int32_t _len, bool useBuffer){ + int32_t len = _len; + uint8_t* b = _b; + + if(len <= (bufferLength-bufferPosition)){ + // the buffer contains enough data to satisfy this request + if(len>0) // to allow b to be null if len is 0... + memcpy(b, buffer + bufferPosition, len); + bufferPosition+=len; + } else { + // the buffer does not have enough data. First serve all we've got. + int32_t available = bufferLength - bufferPosition; + if(available > 0){ + memcpy(b, buffer + bufferPosition, available); + b += available; + len -= available; + bufferPosition += available; + } + // and now, read the remaining 'len' bytes: + if (useBuffer && len length()) + _CLTHROWA(CL_ERR_IO, "read past EOF"); + readInternal(b, len); + bufferStart = after; + 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; + } + + void BufferedIndexInput::setBufferSize( int32_t newSize ) { + + if ( newSize != bufferSize ) { + bufferSize = newSize; + if ( buffer != NULL ) { + + uint8_t* newBuffer = _CL_NEWARRAY( uint8_t, newSize ); + int32_t leftInBuffer = bufferLength - bufferPosition; + int32_t numToCopy; + + if ( leftInBuffer > newSize ) { + numToCopy = newSize; + } else { + numToCopy = leftInBuffer; + } + + memcpy( (void*)newBuffer, (void*)(buffer + bufferPosition), numToCopy ); + + bufferStart += bufferPosition; + bufferPosition = 0; + bufferLength = numToCopy; + + _CLDELETE_ARRAY( buffer ); + buffer = newBuffer; + + } + } + + } + +CL_NS_END + diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/store/IndexInput.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/store/IndexInput.h new file mode 100644 index 0000000..8a43d59 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/store/IndexInput.h @@ -0,0 +1,196 @@ +/*------------------------------------------------------------------------------ +* 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_IndexInput_ +#define _lucene_store_IndexInput_ + +#include "CLucene/LuceneThreads.h" +#include "CLucene/util/Equators.h" + +CL_NS_DEF(store) + + /** Abstract base class for input from a file in a {@link lucene::store::Directory}. A + * random-access input stream. Used for all Lucene index input operations. + * @see Directory + * @see IndexOutput + */ + class CLUCENE_EXPORT IndexInput: LUCENE_BASE, public CL_NS(util)::NamedObject { + 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[],int) + */ + virtual void readBytes(uint8_t* b, const int32_t len) = 0; + + /** Reads a specified number of bytes into an array at the + * specified offset with control over whether the read + * should be buffered (callers who have their own buffer + * should pass in "false" for useBuffer). Currently only + * {@link BufferedIndexInput} respects this parameter. + * @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 + * @param useBuffer set to false if the caller will handle + * buffering. + * @see IndexOutput#writeBytes(byte[],int32_t) + */ + virtual void readBytes(uint8_t* b, const int32_t len, bool useBuffer); + + /** 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); + + #ifdef _UCS2 + /** Reads a string and converts to ascii. + * @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(char* buffer, const int32_t maxlength); + #endif + + /** Reads a string. + * @see IndexOutput#writeString(String) + */ + TCHAR* readString(); + + /** 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); + + void skipChars( const int32_t count); + + /** 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(int64_t) + */ + 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() const = 0; + + virtual const char* getDirectoryType() const = 0; + virtual const char* getObjectName() 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 CLUCENE_EXPORT 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. + * + *

Clones of a stream access the same data, and are positioned at the same + * point as the stream they were cloned from. + * + *

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 = -1); + public: + LUCENE_STATIC_CONSTANT(int32_t, BUFFER_SIZE=LUCENE_STREAM_BUFFER_SIZE); + + 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); + void readBytes(uint8_t* b, const int32_t len, bool useBuffer); + int64_t getFilePointer() const; + void seek(const int64_t pos); + + void setBufferSize( int32_t newSize ); + + const char* getObjectName(); + static const char* getClassName(); + + 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; + }; +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/store/IndexOutput.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/store/IndexOutput.cpp new file mode 100644 index 0000000..4c9ff61 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/store/IndexOutput.cpp @@ -0,0 +1,197 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "IndexOutput.h" +#include "IndexInput.h" +#include "CLucene/util/Misc.h" + +CL_NS_USE(util) +CL_NS_DEF(store) + + + IndexOutput::IndexOutput() + { + copyBuffer = NULL; + } + + IndexOutput::~IndexOutput(){ + _CLDELETE_LARRAY(copyBuffer); + } + + 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 = (int32_t)(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 string& s ) { + writeString(s.c_str(),s.length()); + } + +#ifdef _UCS2 + void IndexOutput::writeString(const char* s, const int32_t length ) { + TCHAR* buf = _CL_NEWARRAY(TCHAR,length+1); + STRCPY_AtoT(buf,s,length); + try{ + writeString(buf,length); + }_CLFINALLY ( _CLDELETE_CARRAY(buf); ) + } +#endif + + void IndexOutput::writeString(const TCHAR* s, const int32_t length ) { + writeVInt(length); + writeChars(s, length); + } + + void IndexOutput::writeChars(const TCHAR* s, const int32_t length){ + if ( length < 0 ) + _CLTHROWA(CL_ERR_IllegalArgument, "IO Argument Error. Value must be a positive value."); + + const int32_t end = length; + for (int32_t i = 0; 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 IndexOutput::copyBytes(CL_NS(store)::IndexInput* input, int64_t numBytes) + { + int64_t left = numBytes; + if (copyBuffer == NULL) + copyBuffer = _CL_NEWARRAY(uint8_t, COPY_BUFFER_SIZE); + while(left > 0) { + int32_t toCopy; + if (left > COPY_BUFFER_SIZE) + toCopy = COPY_BUFFER_SIZE; + else + toCopy = (int32_t) left; + input->readBytes(copyBuffer, toCopy); + writeBytes(copyBuffer, toCopy); + left -= toCopy; + } + } + + 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/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/store/IndexOutput.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/store/IndexOutput.h new file mode 100644 index 0000000..e49ef2d --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/store/IndexOutput.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. +------------------------------------------------------------------------------*/ +#ifndef _lucene_store_IndexOutput_ +#define _lucene_store_IndexOutput_ + +CL_NS_DEF(store) + +class IndexInput; + +/** 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 CLUCENE_EXPORT 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(uint8_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); + void writeString(const std::string& s); + + #ifdef _UCS2 + /** Writes an ascii string. converts to TCHAR* before writing + * @see IndexInput#readString() + */ + void writeString(const char* s, const int32_t length); + #endif + + /** 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 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() const = 0; + + /** Forces any buffered output to be written. */ + virtual void flush() = 0; + +private: + LUCENE_STATIC_CONSTANT(int32_t, COPY_BUFFER_SIZE = 16384); + uint8_t* copyBuffer; + +public: + /** Copy numBytes bytes from input to ourself. */ + void copyBytes(CL_NS(store)::IndexInput* input, int64_t numBytes); +}; + +/** Base implementation class for buffered {@link IndexOutput}. */ +class CLUCENE_EXPORT BufferedIndexOutput : public IndexOutput{ +public: + LUCENE_STATIC_CONSTANT(int32_t, BUFFER_SIZE=16384); +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() const = 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/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/store/Lock.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/store/Lock.cpp new file mode 100644 index 0000000..ae7c25b --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/store/Lock.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/_ApiHeader.h" +#include "Lock.h" +#include "_Lock.h" +#include "CLucene/util/Misc.h" + +#ifdef _CL_HAVE_IO_H + #include +#endif +#ifdef _CL_HAVE_SYS_STAT_H + #include +#endif +#ifdef _CL_HAVE_UNISTD_H + #include +#endif +#ifdef _CL_HAVE_DIRECT_H + #include +#endif +#include + + +CL_NS_USE(util) +CL_NS_DEF(store) + + LuceneLock::~LuceneLock() + { + } + bool LuceneLock::obtain(int64_t lockWaitTimeout) { + bool locked = obtain(); + if ( lockWaitTimeout < 0 && lockWaitTimeout != LOCK_OBTAIN_WAIT_FOREVER ) { + _CLTHROWA(CL_ERR_IllegalArgument,"lockWaitTimeout should be LOCK_OBTAIN_WAIT_FOREVER or a non-negative number"); + } + + int64_t maxSleepCount = lockWaitTimeout / LOCK_POLL_INTERVAL; + int64_t sleepCount = 0; + + while (!locked) { + if ( lockWaitTimeout != LOCK_OBTAIN_WAIT_FOREVER && sleepCount++ == maxSleepCount ) { + _CLTHROWA(CL_ERR_IO,"Lock obtain timed out"); + } + _LUCENE_SLEEP(LOCK_POLL_INTERVAL); + locked = obtain(); + } + + return locked; + } + std::string NoLock::toString() + { + return "NoLock"; + } + bool NoLock::obtain() { return true; } + void NoLock::release() {} + bool NoLock::isLocked() { return false; } + + const char* NoLock::getClassName(){ + return "NoLock"; + } + const char* NoLock::getObjectName() const{ + return getClassName(); + } + + + + SingleInstanceLock::SingleInstanceLock( LocksType* locks, _LUCENE_THREADMUTEX* locks_LOCK, const char* lockName ) + { + this->locks = locks; +#ifndef _CL_DISABLE_MULTITHREADING + this->locks_LOCK = locks_LOCK; +#endif + this->lockName = lockName; + } + SingleInstanceLock::~SingleInstanceLock(){ + } + const char* SingleInstanceLock::getClassName(){ + return "SingleInstanceLock"; + } + const char* SingleInstanceLock::getObjectName() const{ + return getClassName(); + } + + bool SingleInstanceLock::obtain() + { + SCOPED_LOCK_MUTEX(*locks_LOCK); + return locks->insert( lockName ).second; + } + + void SingleInstanceLock::release() + { + SCOPED_LOCK_MUTEX(*locks_LOCK); + LocksType::iterator itr = locks->find( lockName ); + if ( itr != locks->end() ) { + locks->remove(itr, true); + } + } + + bool SingleInstanceLock::isLocked() + { + SCOPED_LOCK_MUTEX(*locks_LOCK); + return locks->find( lockName ) == locks->end(); + } + + string SingleInstanceLock::toString() + { + return string("SingleInstanceLock:") + lockName; + } + + + FSLock::FSLock( const char* _lockDir, const char* name, int filemode ) + { + if ( filemode <= 0 ) + this->filemode = 0644; //must do this or file will be created Read only + else + this->filemode = filemode; + + this->lockFile = _CL_NEWARRAY(char,CL_MAX_PATH); + this->lockDir = STRDUP_AtoA(_lockDir); + strcpy(lockFile,_lockDir); + strcat(lockFile,PATH_DELIMITERA); + strcat(lockFile,name); + } + + FSLock::~FSLock() + { + _CLDELETE_ARRAY( lockFile ); + _CLDELETE_LCaARRAY( lockDir ); + } + + const char* FSLock::getClassName(){ + return "FSLock"; + } + const char* FSLock::getObjectName() const{ + return getClassName(); + } + + bool FSLock::obtain() + { + if ( !Misc::dir_Exists(lockDir) ){ + if ( _mkdir(lockDir) == -1 ){ + char* err = _CL_NEWARRAY(char,34+strlen(lockDir)+1); //34: len of "Couldn't create lock directory: " + strcpy(err,"Couldn't create lock directory: "); + strcat(err,lockDir); + _CLTHROWA_DEL(CL_ERR_IO, err ); + } + } + int32_t r = _cl_open(lockFile, O_RDWR | O_CREAT | _O_RANDOM | O_EXCL, this->filemode); + if ( r < 0 ) { + return false; + } else { + _close(r); + return true; + } + } + + void FSLock::release() + { + _unlink( lockFile ); + } + + bool FSLock::isLocked() + { + return Misc::dir_Exists(lockFile); + } + + string FSLock::toString() + { + return string("SimpleFSLock@") + lockFile; + } + +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/store/Lock.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/store/Lock.h new file mode 100644 index 0000000..069672d --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/store/Lock.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_store_Lock_ +#define _lucene_store_Lock_ + +#include +#include "CLucene/util/Equators.h" + +CL_NS_DEF(store) + class LocksType; + + class CLUCENE_EXPORT LuceneLock: public CL_NS(util)::NamedObject{ + public: + LUCENE_STATIC_CONSTANT(int64_t, LOCK_POLL_INTERVAL = 1000); + LUCENE_STATIC_CONSTANT(int64_t, LOCK_OBTAIN_WAIT_FOREVER = -1); + + /** Attempts to obtain exclusive access and immediately return + * upon success or failure. + * @return true iff 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 ~LuceneLock(); + + virtual std::string toString() = 0; + }; + + +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/store/LockFactory.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/store/LockFactory.cpp new file mode 100644 index 0000000..6b2cfe2 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/store/LockFactory.cpp @@ -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. +------------------------------------------------------------------------------*/ + +#include "CLucene/_ApiHeader.h" +#include "LockFactory.h" +#include "_Lock.h" +#include "CLucene/util/Misc.h" + +#ifdef _CL_HAVE_SYS_STAT_H + #include +#endif +#ifdef _CL_HAVE_UNISTD_H + #include +#endif + +CL_NS_USE(util) +CL_NS_DEF(store) + + +LockFactory::LockFactory() +{ +} + +LockFactory::~LockFactory() +{ +} + +void LockFactory::setLockPrefix( const char* lockPrefix ) +{ + if ( lockPrefix != NULL ) + this->lockPrefix = lockPrefix; + else + this->lockPrefix.clear(); +} + +const char* LockFactory::getLockPrefix() +{ + return lockPrefix.c_str(); +} + +SingleInstanceLockFactory::SingleInstanceLockFactory() +{ + locks = _CLNEW LocksType(); +} + +SingleInstanceLockFactory::~SingleInstanceLockFactory() +{ + _CLDELETE( locks ); +} + +LuceneLock* SingleInstanceLockFactory::makeLock( const char* lockName ) +{ +#ifdef _CL_DISABLE_MULTITHREADING + return _CLNEW SingleInstanceLock( locks, NULL, lockName ); +#else + return _CLNEW SingleInstanceLock( locks, &locks_LOCK, lockName ); +#endif +} + +void SingleInstanceLockFactory::clearLock( const char* lockName ) +{ + SCOPED_LOCK_MUTEX(locks_LOCK); + LocksType::iterator itr = locks->find( lockName ); + if ( itr != locks->end() ) { + locks->remove( itr ); + } +} + + +NoLockFactory* NoLockFactory::singleton = NULL; +NoLock* NoLockFactory::singletonLock = NULL; + +void NoLockFactory::_shutdown(){ + _CLDELETE(NoLockFactory::singleton); + _CLDELETE(NoLockFactory::singletonLock); +} + +NoLockFactory* NoLockFactory::getNoLockFactory() +{ + if ( singleton == NULL ) { + singleton = _CLNEW NoLockFactory(); + } + return singleton; +} + +LuceneLock* NoLockFactory::makeLock( const char* /*lockName*/ ) +{ + if ( singletonLock == NULL ) { + singletonLock = _CLNEW NoLock(); + } + return singletonLock; +} + +void NoLockFactory::clearLock( const char* /*lockName*/ ) +{ +} + + +FSLockFactory::FSLockFactory( const char* lockDir, int filemode ) +{ + setLockDir( lockDir ); + if ( filemode > 0 ) + this->filemode = filemode; + else + this->filemode = 0644; +} + +FSLockFactory::~FSLockFactory() +{ +} + +void FSLockFactory::setLockDir( const char* lockDir ) +{ + this->lockDir = lockDir; +} + +LuceneLock* FSLockFactory::makeLock( const char* lockName ) +{ + char name[CL_MAX_DIR]; + + if ( !lockPrefix.empty() ) { + cl_sprintf(name, CL_MAX_DIR, "%s-%s", lockPrefix.c_str(), lockName); + } else { + cl_strcpy(name,lockName,CL_MAX_DIR); + } + + return _CLNEW FSLock( lockDir.c_str(), name, this->filemode ); +} + +void FSLockFactory::clearLock( const char* lockName ) +{ + if ( Misc::dir_Exists( lockDir.c_str() )) { + char name[CL_MAX_DIR]; + char path[CL_MAX_DIR]; + struct cl_stat_t buf; + + if ( !lockPrefix.empty() ) { + STRCPY_AtoA(name,lockPrefix.c_str(),lockPrefix.length()+1); + strcat(name,"-"); + strcat(name,lockName); + } else { + strcpy(name,lockName); + } + + _snprintf(path,CL_MAX_DIR,"%s/%s",lockDir.c_str(),name); + + int32_t ret = fileStat(path,&buf); + if ( ret==0 && !(buf.st_mode & S_IFDIR) && _unlink( path ) == -1 ) { + _CLTHROWA(CL_ERR_IO, "Couldn't delete file" ); // TODO: make richer error + } + } +} + + +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/store/LockFactory.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/store/LockFactory.h new file mode 100644 index 0000000..95ab3c9 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/store/LockFactory.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_store_LockFactory_ +#define _lucene_store_LockFactory_ + +#include "CLucene/LuceneThreads.h" + +CL_CLASS_DEF(store,LuceneLock) +CL_CLASS_DEF(store,NoLock) + +CL_NS_DEF(store) +class LocksType; + +class CLUCENE_EXPORT LockFactory: LUCENE_BASE { +protected: + std::string lockPrefix; +public: + + LockFactory(); + virtual ~LockFactory(); + + void setLockPrefix( const char* lockPrefix ); + const char* getLockPrefix(); + + virtual LuceneLock* makeLock( const char* lockName )=0; + virtual void clearLock( const char* lockName )=0; +}; + +class CLUCENE_EXPORT SingleInstanceLockFactory: public LockFactory { +private: + LocksType* locks; + DEFINE_MUTEX(locks_LOCK) +public: + SingleInstanceLockFactory(); + ~SingleInstanceLockFactory(); + + LuceneLock* makeLock( const char* lockName ); + void clearLock( const char* lockName ); +}; + +class CLUCENE_EXPORT NoLockFactory: public LockFactory { +public: + static NoLockFactory* singleton; + static NoLock* singletonLock; + + static NoLockFactory* getNoLockFactory(); + LuceneLock* makeLock( const char* lockName ); + void clearLock( const char* lockName ); + + /** called when lucene_shutdown is called */ + static CLUCENE_LOCAL void _shutdown(); +}; + +class CLUCENE_EXPORT FSLockFactory: public LockFactory { +private: + std::string lockDir; + int filemode; +public: + /** Constructs a FS Lock factory. The default file mode is user writable */ + FSLockFactory( const char* lockDir=NULL, int filemode=-1 ); + ~FSLockFactory(); + + void setLockDir( const char* lockDir ); + + LuceneLock* makeLock( const char* lockName ); + void clearLock( const char* lockName ); + + static const char* getClassName(); + const char* getObjectName(); +}; + +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/store/MMapInput.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/store/MMapInput.cpp new file mode 100644 index 0000000..c30d46b --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/store/MMapInput.cpp @@ -0,0 +1,298 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" + +#include "FSDirectory.h" +#include "_MMapIndexInput.h" +#include "CLucene/util/Misc.h" + +#include +#ifdef _CL_HAVE_IO_H + #include +#endif +#ifdef _CL_HAVE_SYS_STAT_H + #include +#endif +#ifdef _CL_HAVE_UNISTD_H + #include +#endif +#ifdef _CL_HAVE_DIRECT_H + #include +#endif +#ifdef _CL_HAVE_SYS_MMAN_H + #include +#endif +#ifdef _CL_HAVE_WINERROR_H + #include +#endif +#include + +#if defined(_CL_HAVE_FUNCTION_MAPVIEWOFFILE) + typedef int HANDLE; + + #define GENERIC_READ (0x80000000L) + #define FILE_SHARE_READ 0x00000001 + #define OPEN_EXISTING 3 + #define PAGE_READONLY 0x02 + #define SECTION_MAP_READ 0x0004 + #define FILE_MAP_READ SECTION_MAP_READ + + typedef struct _SECURITY_ATTRIBUTES + { + _cl_dword_t nLength; + void* lpSecurityDescriptor; + bool bInheritHandle; + } SECURITY_ATTRIBUTES; + + extern "C" __declspec(dllimport) _cl_dword_t __stdcall GetFileSize( HANDLE hFile, _cl_dword_t* lpFileSizeHigh ); + + extern "C" __declspec(dllimport) bool __stdcall UnmapViewOfFile( void* lpBaseAddress ); + + extern "C" __declspec(dllimport) bool __stdcall CloseHandle( HANDLE hObject ); + extern "C" __declspec(dllimport) HANDLE __stdcall CreateFileA( + const char* lpFileName, + _cl_dword_t dwDesiredAccess, + _cl_dword_t dwShareMode, + SECURITY_ATTRIBUTES* lpSecurityAttributes, + _cl_dword_t dwCreationDisposition, + _cl_dword_t dwFlagsAndAttributes, + HANDLE hTemplateFile + ); + extern "C" __declspec(dllimport) HANDLE __stdcall CreateFileMappingA( + HANDLE hFile, + SECURITY_ATTRIBUTES* lpFileMappingAttributes, + _cl_dword_t flProtect, + _cl_dword_t dwMaximumSizeHigh, + _cl_dword_t dwMaximumSizeLow, + const char* lpName + ); + extern "C" __declspec(dllimport) void* __stdcall MapViewOfFile( + HANDLE hFileMappingObject, + _cl_dword_t dwDesiredAccess, + _cl_dword_t dwFileOffsetHigh, + _cl_dword_t dwFileOffsetLow, + _cl_dword_t dwNumberOfBytesToMap + ); + extern "C" __declspec(dllimport) _cl_dword_t __stdcall GetLastError(); +#endif + + +CL_NS_DEF(store) +CL_NS_USE(util) + + class MMapIndexInput::Internal: LUCENE_BASE{ + public: + uint8_t* data; + int64_t pos; +#if defined(_CL_HAVE_FUNCTION_MAPVIEWOFFILE) + HANDLE mmaphandle; + HANDLE fhandle; +#elif defined(_CL_HAVE_FUNCTION_MMAP) + int fhandle; +#else + #error no mmap implementation set +#endif + bool isClone; + int64_t _length; + + Internal(): + data(NULL), + pos(0), + isClone(false), + _length(0) + { + } + ~Internal(){ + } + }; + + MMapIndexInput::MMapIndexInput(Internal* __internal): + _internal(__internal) + { + } + + bool MMapIndexInput::open(const char* path, IndexInput*& ret, CLuceneError& error, int32_t __bufferSize ) { + + //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"); + + Internal* _internal = _CLNEW Internal; + +#if defined(_CL_HAVE_FUNCTION_MAPVIEWOFFILE) + _internal->mmaphandle = NULL; + _internal->fhandle = CreateFileA(path,GENERIC_READ,FILE_SHARE_READ, 0,OPEN_EXISTING,0,0); + + //Check if a valid fhandle was retrieved + if (_internal->fhandle < 0){ + _cl_dword_t err = GetLastError(); + if ( err == ERROR_FILE_NOT_FOUND ) + error.set(CL_ERR_IO, "File does not exist"); + else if ( err == ERROR_ACCESS_DENIED ) + error.set(CL_ERR_IO, "File Access denied"); + else if ( err == ERROR_TOO_MANY_OPEN_FILES ) + error.set(CL_ERR_IO, "Too many open files"); + else + error.set(CL_ERR_IO, "Could not open file"); + } + + _cl_dword_t dummy=0; + _internal->_length = GetFileSize(_internal->fhandle, &dummy); + + if ( _internal->_length > 0 ){ + _internal->mmaphandle = CreateFileMappingA(_internal->fhandle,NULL,PAGE_READONLY,0,0,NULL); + if ( _internal->mmaphandle != NULL ){ + void* address = MapViewOfFile(_internal->mmaphandle,FILE_MAP_READ,0,0,0); + if ( address != NULL ){ + _internal->data = (uint8_t*)address; + ret = _CLNEW MMapIndexInput(_internal); + return true; + } + } + + //failure: + int errnum = GetLastError(); + + CloseHandle(_internal->mmaphandle); + + char* lpMsgBuf=strerror(errnum); + size_t len = strlen(lpMsgBuf)+80; + char* errstr = _CL_NEWARRAY(char, len); + cl_sprintf(errstr, len, "MMapIndexInput::MMapIndexInput failed with error %d: %s", errnum, lpMsgBuf); + + error.set(CL_ERR_IO, errstr); + _CLDELETE_CaARRAY(errstr); + } + +#else //_CL_HAVE_FUNCTION_MAPVIEWOFFILE + _internal->fhandle = ::_cl_open (path, _O_BINARY | O_RDONLY | _O_RANDOM, _S_IREAD); + if (_internal->fhandle < 0){ + error.set(CL_ERR_IO, strerror(errno)); + }else{ + // stat it + struct stat sb; + if (::fstat (_internal->fhandle, &sb)){ + error.set(CL_ERR_IO, strerror(errno)); + }else{ + // get length from stat + _internal->_length = sb.st_size; + + // mmap the file + void* address = ::mmap(0, _internal->_length, PROT_READ, MAP_SHARED, _internal->fhandle, 0); + if (address == MAP_FAILED){ + error.set(CL_ERR_IO, strerror(errno)); + }else{ + _internal->data = (uint8_t*)address; + ret = _CLNEW MMapIndexInput(_internal); + return true; + } + } + } +#endif + + _CLDELETE(_internal); + return false; + } + + 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 + _internal = _CLNEW Internal; + +#if defined(_CL_HAVE_FUNCTION_MAPVIEWOFFILE) + _internal->mmaphandle = NULL; + _internal->fhandle = NULL; +#endif + + _internal->data = clone._internal->data; + _internal->pos = clone._internal->pos; + + //clone the file length + _internal->_length = clone._internal->_length; + //Keep in mind that this instance is a clone + _internal->isClone = true; + } + + uint8_t MMapIndexInput::readByte(){ + return *(_internal->data+(_internal->pos++)); + } + + void MMapIndexInput::readBytes(uint8_t* b, const int32_t len){ + memcpy(b, _internal->data+_internal->pos, len); + _internal->pos+=len; + } + int32_t MMapIndexInput::readVInt(){ + uint8_t b = *(_internal->data+(_internal->pos++)); + int32_t i = b & 0x7F; + for (int shift = 7; (b & 0x80) != 0; shift += 7) { + b = *(_internal->data+(_internal->pos++)); + i |= (b & 0x7F) << shift; + } + return i; + } + int64_t MMapIndexInput::getFilePointer() const{ + return _internal->pos; + } + void MMapIndexInput::seek(const int64_t pos){ + this->_internal->pos=pos; + } + int64_t MMapIndexInput::length() const{ return _internal->_length; } + + MMapIndexInput::~MMapIndexInput(){ + //Func - Destructor + //Pre - True + //Post - The file for which this instance is responsible has been closed. + // The instance has been destroyed + + close(); + _CLDELETE(_internal); + } + + IndexInput* MMapIndexInput::clone() const + { + return _CLNEW MMapIndexInput(*this); + } + void MMapIndexInput::close() { + if ( !_internal->isClone ){ +#if defined(_CL_HAVE_FUNCTION_MAPVIEWOFFILE) + if ( _internal->data != NULL ){ + if ( ! UnmapViewOfFile(_internal->data) ){ + CND_PRECONDITION( false, "UnmapViewOfFile(data) failed"); //todo: change to rich error + } + } + + if ( _internal->mmaphandle != NULL ){ + if ( ! CloseHandle(_internal->mmaphandle) ){ + CND_PRECONDITION( false, "CloseHandle(mmaphandle) failed"); + } + } + if ( _internal->fhandle != NULL ){ + if ( !CloseHandle(_internal->fhandle) ){ + CND_PRECONDITION( false, "CloseHandle(fhandle) failed"); + } + } + _internal->mmaphandle = NULL; + _internal->fhandle = NULL; +#else + if ( _internal->data != NULL ) + ::munmap(_internal->data, _internal->_length); + if ( _internal->fhandle > 0 ) + ::close(_internal->fhandle); + _internal->fhandle = 0; +#endif + } + _internal->data = NULL; + _internal->pos = 0; + } + + +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/store/RAMDirectory.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/store/RAMDirectory.cpp new file mode 100644 index 0000000..cea5f1a --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/store/RAMDirectory.cpp @@ -0,0 +1,570 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "RAMDirectory.h" +#include "_RAMDirectory.h" +#include "Lock.h" +#include "LockFactory.h" +#include "Directory.h" +#include "FSDirectory.h" +#include "CLucene/index/IndexReader.h" +//#include "CLucene/util/VoidMap.h" +#include "CLucene/util/Misc.h" +#include + +CL_NS_USE(util) +CL_NS_DEF(store) + + + // ***** + // Lock acquisition sequence: RAMDirectory, then RAMFile + // ***** + + class RAMLock: public LuceneLock{ + private: + RAMDirectory* directory; + char* fname; + public: + RAMLock(const char* name, RAMDirectory* dir); + virtual ~RAMLock(); + bool obtain(); + void release(); + bool isLocked(); + virtual std::string toString(); + }; + + + + RAMFile::RAMFile( RAMDirectory* _directory ) + { + length = 0; + lastModified = Misc::currentTimeMillis(); + this->directory = _directory; + sizeInBytes = 0; + } + + RAMFile::~RAMFile(){ + } + + int64_t RAMFile::getLength() + { + SCOPED_LOCK_MUTEX(THIS_LOCK); + return length; + } + + void RAMFile::setLength( int64_t length ) + { + SCOPED_LOCK_MUTEX(THIS_LOCK); + this->length = length; + } + + uint64_t RAMFile::getLastModified() + { + SCOPED_LOCK_MUTEX(THIS_LOCK); + return lastModified; + } + + void RAMFile::setLastModified( const uint64_t lastModified ) + { + SCOPED_LOCK_MUTEX(THIS_LOCK); + this->lastModified = lastModified; + } + + uint8_t* RAMFile::addBuffer( const int32_t size ) + { + SCOPED_LOCK_MUTEX(THIS_LOCK); + uint8_t* buffer = newBuffer(size); + RAMFileBuffer* rfb = _CLNEW RAMFileBuffer(buffer, size); + if ( directory != NULL ) { + SCOPED_LOCK_MUTEX(directory->THIS_LOCK); + buffers.push_back( rfb ); + directory->sizeInBytes += size; + sizeInBytes += size; + } else { + buffers.push_back(rfb); + } + return buffer; + } + + uint8_t* RAMFile::getBuffer( const int32_t index ) + { + SCOPED_LOCK_MUTEX(THIS_LOCK); + return buffers[index]->_buffer; + } + + int32_t RAMFile::numBuffers() const + { + return buffers.size(); + } + + uint8_t* RAMFile::newBuffer( const int32_t size ) + { + return _CL_NEWARRAY( uint8_t, size ); + } + + int64_t RAMFile::getSizeInBytes() const + { + if ( directory != NULL ) { + SCOPED_LOCK_MUTEX(directory->THIS_LOCK); + return sizeInBytes; + } + return 0; + } + + + RAMOutputStream::~RAMOutputStream(){ + if ( deleteFile ){ + _CLDELETE(file); + }else{ + file = NULL; + } + } + RAMOutputStream::RAMOutputStream(RAMFile* f): + file(f), + deleteFile(false), + currentBuffer(NULL), + currentBufferIndex(-1), + bufferPosition(0), + bufferStart(0), + bufferLength(0) + { + } + + RAMOutputStream::RAMOutputStream(): + file(_CLNEW RAMFile), + deleteFile(true), + currentBuffer(NULL), + currentBufferIndex(-1), + bufferPosition(0), + bufferStart(0), + bufferLength(0) + { + } + + void RAMOutputStream::writeTo(IndexOutput* out){ + flush(); + const int64_t end = file->getLength(); + int64_t pos = 0; + int32_t p = 0; + while (pos < end) { + int32_t length = BUFFER_SIZE; + int64_t nextPos = pos + length; + if (nextPos > end) { // at the last buffer + length = (int32_t)(end - pos); + } + out->writeBytes(file->getBuffer(p++), length); + pos = nextPos; + } + } + + void RAMOutputStream::reset(){ + seek((int64_t)0); + file->setLength((int64_t)0); + } + + void RAMOutputStream::close() { + flush(); + } + + /** Random-at methods */ + void RAMOutputStream::seek( const int64_t pos ) { + // set the file length in case we seek back + // and flush() has not been called yet + setFileLength(); + if ( pos < bufferStart || pos >= bufferStart + bufferLength ) { + currentBufferIndex = (int32_t)(pos / BUFFER_SIZE); + switchCurrentBuffer(); + } + + bufferPosition = (int32_t)( pos % BUFFER_SIZE ); + } + + int64_t RAMOutputStream::length() const { + return file->getLength(); + } + + void RAMOutputStream::writeByte( const uint8_t b ) { + if ( bufferPosition == bufferLength ) { + currentBufferIndex++; + switchCurrentBuffer(); + } + currentBuffer[bufferPosition++] = b; + } + + void RAMOutputStream::writeBytes( const uint8_t* b, const int32_t len ) { + int32_t srcOffset = 0; + + while ( srcOffset != len ) { + if ( bufferPosition == bufferLength ) { + currentBufferIndex++; + switchCurrentBuffer(); + } + + int32_t remainInSrcBuffer = len - srcOffset; + int32_t bytesInBuffer = bufferLength - bufferPosition; + int32_t bytesToCopy = bytesInBuffer >= remainInSrcBuffer ? remainInSrcBuffer : bytesInBuffer; + + memcpy( currentBuffer+bufferPosition, b+srcOffset, bytesToCopy * sizeof(uint8_t) ); + + srcOffset += bytesToCopy; + bufferPosition += bytesToCopy; + } + } + + void RAMOutputStream::switchCurrentBuffer() { + + if ( currentBufferIndex == file->numBuffers() ) { + currentBuffer = file->addBuffer( BUFFER_SIZE ); + bufferLength = BUFFER_SIZE; + } else { + currentBuffer = file->getBuffer( currentBufferIndex ); + bufferLength = file->getBufferLen(currentBufferIndex); + } + assert(bufferLength >=0);// + + bufferPosition = 0; + bufferStart = (int64_t)BUFFER_SIZE * (int64_t)currentBufferIndex; + } + + + + void RAMOutputStream::setFileLength() { + int64_t pointer = bufferStart + bufferPosition; + if ( pointer > file->getLength() ) { + file->setLength( pointer ); + } + } + + void RAMOutputStream::flush() { + file->setLastModified( Misc::currentTimeMillis() ); + setFileLength(); + } + + int64_t RAMOutputStream::getFilePointer() const { + return currentBufferIndex < 0 ? 0 : bufferStart + bufferPosition; + } + + + RAMInputStream::RAMInputStream(RAMFile* f): + file(f), + currentBuffer(NULL), + currentBufferIndex(-1), + bufferPosition(0), + bufferStart(0), + bufferLength(0) + { + _length = f->getLength(); + + if ( _length/BUFFER_SIZE >= 0x7FFFFFFFL ) { + // TODO: throw exception + } + } + + RAMInputStream::RAMInputStream(const RAMInputStream& other): + IndexInput(other) + { + file = other.file; + _length = other._length; + currentBufferIndex = other.currentBufferIndex; + currentBuffer = other.currentBuffer; + bufferPosition = other.bufferPosition; + bufferStart = other.bufferStart; + bufferLength = other.bufferLength; + } + + RAMInputStream::~RAMInputStream(){ + RAMInputStream::close(); + } + + IndexInput* RAMInputStream::clone() const + { + return _CLNEW RAMInputStream(*this); + } + + int64_t RAMInputStream::length() const { + return _length; + } + + const char* RAMInputStream::getDirectoryType() const{ + return RAMDirectory::getClassName(); + } + const char* RAMIndexInput::getObjectName() const{ return getClassName(); } + const char* RAMIndexInput::getClassName(){ return "RAMIndexInput"; } + + uint8_t RAMInputStream::readByte() + { + if ( bufferPosition >= bufferLength ) { + currentBufferIndex++; + switchCurrentBuffer(); + } + return currentBuffer[bufferPosition++]; + } + + void RAMInputStream::readBytes( uint8_t* _dest, const int32_t _len ) { + + uint8_t* dest = _dest; + int32_t len = _len; + + while ( len > 0 ) { + if ( bufferPosition >= bufferLength ) { + currentBufferIndex++; + switchCurrentBuffer(); + } + + int32_t remainInBuffer = bufferLength - bufferPosition; + int32_t bytesToCopy = len < remainInBuffer ? len : remainInBuffer; + memcpy( dest, currentBuffer+bufferPosition, bytesToCopy * sizeof(uint8_t) ); + + dest += bytesToCopy; + len -= bytesToCopy; + bufferPosition += bytesToCopy; + } + + } + + int64_t RAMInputStream::getFilePointer() const { + return currentBufferIndex < 0 ? 0 : bufferStart + bufferPosition; + } + + void RAMInputStream::seek( const int64_t pos ) { + if ( currentBuffer == NULL || pos < bufferStart || pos >= bufferStart + BUFFER_SIZE ) { + currentBufferIndex = (int32_t)( pos / BUFFER_SIZE ); + switchCurrentBuffer(); + } + bufferPosition = (int32_t)(pos % BUFFER_SIZE); + } + + void RAMInputStream::close() { + } + + void RAMInputStream::switchCurrentBuffer() { + if ( currentBufferIndex >= file->numBuffers() ) { + // end of file reached, no more buffers left + _CLTHROWA(CL_ERR_IO, "Read past EOF"); + } else { + currentBuffer = file->getBuffer( currentBufferIndex ); + bufferPosition = 0; + bufferStart = (int64_t)BUFFER_SIZE * (int64_t)currentBufferIndex; + int64_t bufLen = _length - bufferStart; + bufferLength = bufLen > BUFFER_SIZE ? BUFFER_SIZE : static_cast(bufLen); + } + assert (bufferLength >=0); + } + + + + + bool RAMDirectory::list(vector* names) const{ + SCOPED_LOCK_MUTEX(files_mutex); + + FileMap::const_iterator itr = files->begin(); + while (itr != files->end()){ + names->push_back( string(itr->first) ); + ++itr; + } + return true; + } + + RAMDirectory::RAMDirectory(): + Directory(),files(_CLNEW FileMap(true,true)) + { + this->sizeInBytes = 0; + setLockFactory( _CLNEW SingleInstanceLockFactory() ); + } + + RAMDirectory::~RAMDirectory(){ + //todo: should call close directory? + _CLDELETE( lockFactory ); + _CLDELETE( files ); + } + + void RAMDirectory::_copyFromDir(Directory* dir, bool closeDir) + { + vector names; + dir->list(&names); + uint8_t buf[CL_NS(store)::BufferedIndexOutput::BUFFER_SIZE]; + + for (size_t i=0;iopenInput(names[i].c_str()); + // and copy to ram disk + //todo: this could be a problem when copying from big indexes... + int64_t len = is->length(); + int64_t readCount = 0; + while (readCount < len) { + int32_t toRead = (int32_t)(readCount + CL_NS(store)::BufferedIndexOutput::BUFFER_SIZE > len ? len - readCount : CL_NS(store)::BufferedIndexOutput::BUFFER_SIZE); + 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( _CLNEW FileMap(true,true) ) + { + this->sizeInBytes = 0; + setLockFactory( _CLNEW SingleInstanceLockFactory() ); + _copyFromDir(dir,false); + } + + RAMDirectory::RAMDirectory(const char* dir): + Directory(),files( _CLNEW FileMap(true,true) ) + { + this->sizeInBytes = 0; + setLockFactory( _CLNEW SingleInstanceLockFactory() ); + Directory* fsdir = FSDirectory::getDirectory(dir); + try{ + _copyFromDir(fsdir,false); + }_CLFINALLY( + fsdir->close(); + _CLDECDELETE(fsdir); + ); + } + + bool RAMDirectory::fileExists(const char* name) const { + SCOPED_LOCK_MUTEX(files_mutex); + return files->exists((char*)name); + } + + int64_t RAMDirectory::fileModified(const char* name) const { + SCOPED_LOCK_MUTEX(files_mutex); + RAMFile* f = files->get((char*)name); + return f->getLastModified(); + } + + int64_t RAMDirectory::fileLength(const char* name) const { + SCOPED_LOCK_MUTEX(files_mutex); + RAMFile* f = files->get((char*)name); + return f->getLength(); + } + + + bool RAMDirectory::openInput(const char* name, IndexInput*& ret, CLuceneError& error, int32_t /*bufferSize*/) { + SCOPED_LOCK_MUTEX(files_mutex); + RAMFile* file = files->get((char*)name); + if (file == NULL) { + error.set(CL_ERR_IO, "[RAMDirectory::open] The requested file does not exist."); + return false; + } + ret = _CLNEW RAMInputStream( file ); + return true; + } + + void RAMDirectory::close(){ + SCOPED_LOCK_MUTEX(files_mutex); + files->clear(); + _CLDELETE(files); + } + + bool RAMDirectory::doDeleteFile(const char* name) { + SCOPED_LOCK_MUTEX(files_mutex); + FileMap::iterator itr = files->find((char*)name); + if (itr != files->end()) { + SCOPED_LOCK_MUTEX(this->THIS_LOCK); + sizeInBytes -= itr->second->sizeInBytes; + files->removeitr(itr); + return true; + } else { + return false; + } + } + + void RAMDirectory::renameFile(const char* from, const char* to) { + SCOPED_LOCK_MUTEX(files_mutex); + FileMap::iterator itr = files->find((char*)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((char*)to)) { + FileMap::iterator itr1 = files->find((char*)to); + SCOPED_LOCK_MUTEX(this->THIS_LOCK); + sizeInBytes -= itr1->second->sizeInBytes; + files->removeitr( itr1 ); + } + if ( itr == files->end() ){ + char tmp[1024]; + _snprintf(tmp,1024,"cannot rename %s, file does not exist",from); + _CLTHROWT(CL_ERR_IO,tmp); + } + CND_PRECONDITION(itr != files->end(), "itr==files->end()") + RAMFile* file = itr->second; + files->removeitr(itr,false,true); + files->put(STRDUP_AtoA(to), file); + } + + + void RAMDirectory::touchFile(const char* name) { + RAMFile* file = NULL; + { + SCOPED_LOCK_MUTEX(files_mutex); + file = files->get((char*)name); + } + const uint64_t ts1 = file->getLastModified(); + uint64_t ts2 = Misc::currentTimeMillis(); + + //make sure that the time has actually changed + while ( ts1==ts2 ) { + _LUCENE_SLEEP(1); + ts2 = Misc::currentTimeMillis(); + }; + + file->setLastModified(ts2); + } + + IndexOutput* RAMDirectory::createOutput(const char* 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); + + // get the actual pointer to the output name + char* n = NULL; + FileMap::const_iterator itr = files->find(const_cast(name)); + if ( itr!=files->end() ) { + n = itr->first; + RAMFile* rf = itr->second; + SCOPED_LOCK_MUTEX(this->THIS_LOCK); + sizeInBytes -= rf->sizeInBytes; + _CLDELETE(rf); + } else { + n = STRDUP_AtoA(name); + } + + RAMFile* file = _CLNEW RAMFile(); + (*files)[n] = file; + + return _CLNEW RAMOutputStream(file); + } + + std::string RAMDirectory::toString() const{ + return "RAMDirectory"; + } + + const char* RAMDirectory::getClassName(){ + return "RAMDirectory"; + } + const char* RAMDirectory::getObjectName() const{ + return getClassName(); + } + +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/store/RAMDirectory.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/store/RAMDirectory.h new file mode 100644 index 0000000..ba01a49 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/store/RAMDirectory.h @@ -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. +------------------------------------------------------------------------------*/ +#ifndef _lucene_store_RAMDirectory_ +#define _lucene_store_RAMDirectory_ + + +#include "CLucene/util/VoidMap.h" +#include "Directory.h" +CL_CLASS_DEF(store,RAMFile) + +CL_NS_DEF(store) + + /** + * A memory-resident {@link Directory} implementation. Locking + * implementation is by default the {@link SingleInstanceLockFactory} + * but can be changed with {@link #setLockFactory}. + * + */ + class CLUCENE_EXPORT RAMDirectory:public Directory{ + protected: + typedef CL_NS(util)::CLHashMap > FileMap; + /// Removes an existing file in the directory. + virtual bool doDeleteFile(const char* name); + + /** + * Creates a new RAMDirectory instance from a different + * Directory implementation. This can be used to load + * a disk-based index into memory. + *

+ * This should be used only with indices that can fit into memory. + * + * @param dir a Directory 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: + int64_t sizeInBytes; //todo + + DEFINE_MUTABLE_MUTEX(files_mutex) // mutable: const methods must also be able to synchronize properly + + /// Returns a null terminated array of strings, one for each file in the directory. + bool list(std::vector* names) 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 RAMDirectory instance from the {@link FSDirectory}. + * + * @param dir a String specifying the full index directory path + */ + RAMDirectory(const char* dir); + + /// Returns true iff the named file exists in this directory. + bool fileExists(const char* name) const; + + /// Returns the time the named file was last modified. + int64_t fileModified(const char* name) const; + + /// Returns the length in bytes of a file in the directory. + int64_t fileLength(const char* name) const; + + /// Removes an existing file in the directory. + virtual void renameFile(const char* from, const char* to); + + /** Set the modified time of an existing file to now. */ + void touchFile(const char* name); + + /// Creates a new, empty file in the directory with the given name. + /// Returns a stream writing this file. + virtual IndexOutput* createOutput(const char* name); + + /// Returns a stream reading an existing file. + bool openInput(const char* name, IndexInput*& ret, CLuceneError& error, int32_t bufferSize = -1); + + virtual void close(); + + std::string toString() const; + + static const char* getClassName(); + const char* getObjectName() const; + }; +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/store/_Lock.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/store/_Lock.h new file mode 100644 index 0000000..b44d05d --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/store/_Lock.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. +------------------------------------------------------------------------------*/ +#ifndef _lucene_store_intlLock_ +#define _lucene_store_intlLock_ + +#include "Lock.h" +#include + +CL_NS_DEF(store) + + +class LocksType: public CL_NS(util)::CLHashSet +{ +public: + LocksType() + { + setDoDelete(false); + } + virtual ~LocksType(){ + } +}; + + class SingleInstanceLock: public LuceneLock { + private: + const char* lockName; + LocksType* locks; + DEFINE_MUTEX(*locks_LOCK) + + public: + SingleInstanceLock( LocksType* locks, _LUCENE_THREADMUTEX* locks_LOCK, const char* lockName ); + virtual ~SingleInstanceLock(); + bool obtain(); + void release(); + bool isLocked(); + std::string toString(); + + static const char* getClassName(); + const char* getObjectName() const; + }; + + + + class NoLock: public LuceneLock { + public: + bool obtain(); + void release(); + bool isLocked(); + std::string toString(); + + static const char* getClassName(); + const char* getObjectName() const; + }; + + class FSLock: public LuceneLock { + private: + char* lockFile; + char* lockDir; + int filemode; + public: + FSLock( const char* _lockDir, const char* name, int filemode = -1 ); + ~FSLock(); + + bool obtain(); + void release(); + bool isLocked(); + std::string toString(); + + static const char* getClassName(); + const char* getObjectName() const; + }; + + // Utility class for executing code with exclusive access. + template + class LuceneLockWith { + private: + LuceneLock* lock; + int64_t lockWaitTimeout; + + protected: + // Code to execute with exclusive access. + virtual T doBody() = 0; + + // Constructs an executor that will grab the named lock. + 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 lock 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(); + ); + } + }; + +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/store/_MMapIndexInput.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/store/_MMapIndexInput.h new file mode 100644 index 0000000..885c697 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/store/_MMapIndexInput.h @@ -0,0 +1,39 @@ +/*------------------------------------------------------------------------------ +* 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_MMap_ +#define _lucene_store_MMap_ + +#include "IndexInput.h" + +CL_NS_DEF(store) + +class MMapIndexInput : public IndexInput { + class Internal; + Internal* _internal; + + MMapIndexInput(const MMapIndexInput& clone); + MMapIndexInput(Internal* _internal); +public: + static bool open(const char* path, IndexInput*& ret, CLuceneError& error, int32_t __bufferSize); + + ~MMapIndexInput(); + IndexInput* clone() const; + + inline uint8_t readByte(); + int32_t readVInt(); + void readBytes(uint8_t* b, const int32_t len); + void close(); + int64_t getFilePointer() const; + void seek(const int64_t pos); + int64_t length() const; + + const char* getObjectName() const{ return MMapIndexInput::getClassName(); } + static const char* getClassName(){ return "MMapIndexInput"; } + const char* getDirectoryType() const{ return "MMapDirectory"; } +}; +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/store/_RAMDirectory.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/store/_RAMDirectory.h new file mode 100644 index 0000000..7a85ef2 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/store/_RAMDirectory.h @@ -0,0 +1,155 @@ +/*------------------------------------------------------------------------------ +* 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_intl_RAMDirectory_ +#define _lucene_store_intl_RAMDirectory_ + + +#include "IndexInput.h" +#include "IndexOutput.h" +#include "RAMDirectory.h" +//#include "Lock.h" +//#include "Directory.h" +//#include "CLucene/util/VoidMap.h" +//#include "CLucene/util/Arrays.h" + +CL_NS_DEF(store) + + class CLUCENE_EXPORT RAMFile:LUCENE_BASE { + private: + struct RAMFileBuffer:LUCENE_BASE { + uint8_t* _buffer; size_t _len; + RAMFileBuffer(uint8_t* buf = NULL, size_t len=0) : _buffer(buf), _len(len) {}; + virtual ~RAMFileBuffer() { _CLDELETE_LARRAY(_buffer); }; + }; + + + CL_NS(util)::CLVector > buffers; + + + int64_t length; + int64_t sizeInBytes; // Only maintained if in a directory; updates synchronized on directory + + // This is publicly modifiable via Directory::touchFile(), so direct access not supported + uint64_t lastModified; + + protected: + RAMDirectory* directory; + + public: + DEFINE_MUTEX(THIS_LOCK) + + // File used as buffer, in no RAMDirectory + RAMFile( RAMDirectory* directory=NULL ); + virtual ~RAMFile(); + + // For non-stream access from thread that might be concurrent with writing + int64_t getLength(); + void setLength( const int64_t _length ); + + // For non-stream access from thread that might be concurrent with writing + uint64_t getLastModified(); + void setLastModified( const uint64_t lastModified ); + + uint8_t* addBuffer( const int32_t size ); + uint8_t* getBuffer( const int32_t index ); + size_t getBufferLen(const int32_t index) const { return buffers[index]->_len; } + int32_t numBuffers() const; + uint8_t* newBuffer( const int32_t size ); + + int64_t getSizeInBytes() const; + + friend class RAMDirectory; + }; + + class CLUCENE_EXPORT RAMOutputStream: public IndexOutput { + protected: + RAMFile* file; + bool deleteFile; + + uint8_t* currentBuffer; + int32_t currentBufferIndex; + + int32_t bufferPosition; + int64_t bufferStart; + int32_t bufferLength; + + void switchCurrentBuffer(); + void setFileLength(); + + public: + LUCENE_STATIC_CONSTANT(int32_t,BUFFER_SIZE=1024); + + RAMOutputStream(RAMFile* f); + RAMOutputStream(); + /** Construct an empty output buffer. */ + virtual ~RAMOutputStream(); + + virtual void close(); + + int64_t length() const; + /** Resets this to an empty buffer. */ + void reset(); + /** Copy the current contents of this buffer to the named output. */ + void writeTo(IndexOutput* output); + + void writeByte(const uint8_t b); + void writeBytes(const uint8_t* b, const int32_t len); + + void seek(const int64_t pos); + + void flush(); + + int64_t getFilePointer() const; + + const char* getObjectName(); + static const char* getClassName(); + + }; + typedef RAMOutputStream RAMIndexOutput; //deprecated + + class CLUCENE_EXPORT RAMInputStream:public IndexInput { + private: + RAMFile* file; + int64_t _length; + + uint8_t* currentBuffer; + int32_t currentBufferIndex; + + int32_t bufferPosition; + int64_t bufferStart; + int32_t bufferLength; + + void switchCurrentBuffer(); + + protected: + /** IndexInput methods */ + RAMInputStream(const RAMInputStream& clone); + + public: + LUCENE_STATIC_CONSTANT(int32_t,BUFFER_SIZE=RAMOutputStream::BUFFER_SIZE); + + RAMInputStream(RAMFile* f); + virtual ~RAMInputStream(); + IndexInput* clone() const; + + void close(); + int64_t length() const; + + uint8_t readByte(); + void readBytes( uint8_t* dest, const int32_t len ); + + int64_t getFilePointer() const; + + void seek(const int64_t pos); + const char* getDirectoryType() const; + const char* getObjectName() const; + static const char* getClassName(); + }; + typedef RAMInputStream RAMIndexInput; //deprecated + +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/util/Array.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/util/Array.h new file mode 100644 index 0000000..969426a --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/util/Array.h @@ -0,0 +1,338 @@ +/*------------------------------------------------------------------------------ +* 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_Array_ +#define _lucene_util_Array_ + +#include +#include + +CL_NS_DEF(util) + +template +class CLUCENE_INLINE_EXPORT ArrayBase: LUCENE_BASE{ +public: + T* values; + size_t length; + + /** + * Delete's the values in the array. + * This won't do anything if deleteArray or takeArray is called first. + * This is overridden in various implementations to provide the appropriate deletor function. + */ + virtual void deleteValues(){ + if ( this->values == NULL ) + return; + for (size_t i=0;ilength;i++){ + deleteValue(this->values[i]); + } + } + /** + * Delete's a single value. Used when resizing... + */ + virtual void deleteValue(T) = 0; + + /** + * Delete's the values in the array and then calls deleteArray(). + * This won't do anything if deleteArray or takeArray is called first. + * This is overridden in various implementations to provide the appropriate deletor function. + */ + void deleteAll(){ + this->deleteValues(); + this->deleteArray(); + } + + /** + * Deletes the array holding the values. Do this if you want to take + * ownership of the array's values, but not the array containing the values. + */ + void deleteArray(){ + free(this->values); + this->values = NULL; + } + /** + * Empties the array. Do this if you want to take ownership of the array + * and the array's values. + */ + T* takeArray(){ + T* ret = values; + values = NULL; + return ret; + } + + ArrayBase(const size_t initialLength = 0) + : values(NULL), length(initialLength) + { + if (initialLength > 0) + { + this->values = (T*)malloc(sizeof(T)*length); + memset(this->values,0,sizeof(T)*length); + } + } + ArrayBase(T* _values, const size_t _length) + : values(_values), length(_length) + { + } + virtual ~ArrayBase(){ + } + + const T& operator[](const size_t _Pos) const + { + if (length <= _Pos){ + _CLTHROWA(CL_ERR_IllegalArgument,"vector subscript out of range"); + } + return (*(values + _Pos)); + } + T& operator[](const size_t _Pos) + { + if (length <= _Pos){ + _CLTHROWA(CL_ERR_IllegalArgument,"vector subscript out of range"); + } + return (*(values + _Pos)); + } + + /** + * Resize the array + * @param deleteValues if shrinking, delete the values that are lost. + */ + void resize(const size_t newSize, const bool deleteValues=false){ + if ( length == newSize ) return; + + if ( values == NULL ) + { + values = (T*)malloc(sizeof(T)*newSize); + memset(values,0,sizeof(T) * newSize); + length = newSize; + return; + } + + if (length < newSize) + { + values = (T*)realloc(values, sizeof(T) * newSize); + memset(values + length,0,sizeof(T) * (newSize-length)); + } + else // length > newSize, including newSize == 0 + { + if ( deleteValues ){ + for ( size_t i=newSize;i +class CLUCENE_INLINE_EXPORT ObjectArray: public ArrayBase{ +public: + ObjectArray():ArrayBase(){} + ObjectArray(T** values, size_t length):ArrayBase(values,length){} + ObjectArray(size_t length):ArrayBase(length){} + + void deleteValues(){ + if ( this->values == NULL ) + return; + for (size_t i=0;ilength;++i){ + _CLLDELETE(this->values[i]); + } + this->deleteArray(); + } + void deleteUntilNULL(){ + if ( this->values == NULL ) + return; + for (size_t i=0;ilength && this->values[i] != NULL;++i){ + _CLLDELETE(this->values[i]); + } + this->deleteArray(); + } + void deleteValue(T* v){ + _CLLDELETE(v); + } + virtual ~ObjectArray(){ + deleteValues(); + } + + /* Initializes all cells in the array with a NULL value */ + void initArray(){ + for (size_t i=0;ilength;i++){ + this->values[i]=NULL; + } + } +}; + +/** +* Legacy code... don't use, remove all instances of this! +*/ +template +class CLUCENE_INLINE_EXPORT Array: public ArrayBase{ +public: + _CL_DEPRECATED(ObjectArray or ValueArray) Array():ArrayBase(){} + _CL_DEPRECATED(ObjectArray or ValueArray) Array(T* values, size_t length):ArrayBase(values,length){} + _CL_DEPRECATED(ObjectArray or ValueArray) Array(size_t length):ArrayBase(length){} + void deleteValues(){ + if ( this->values == NULL ) + return; + this->deleteArray(); + } + void deleteValue(T v){} //nothing to do... + virtual ~Array(){ + } +}; + +/** +* An array where the values do not need to be deleted +*/ +template +class CLUCENE_INLINE_EXPORT ValueArray: public ArrayBase{ +public: + ValueArray():ArrayBase(){} + ValueArray(T* values, size_t length):ArrayBase(values,length){} + ValueArray(size_t length):ArrayBase(length){} + + void deleteValues(){ + if ( this->values == NULL ) + return; + this->deleteArray(); + } + void deleteValue(T /*v*/){} //nothing to do... + virtual ~ValueArray(){ + deleteValues(); + } +}; + +/** A value array for const values (never deleted) */ +template +class CLUCENE_INLINE_EXPORT ConstValueArray: public ArrayBase{ +public: + ConstValueArray():ArrayBase(){} + ConstValueArray(T* values, size_t length):ArrayBase(values,length){} + ConstValueArray(size_t length):ArrayBase(length){} + + void deleteValues(){} + void deleteValue(T /*v*/){} //nothing to do... + virtual ~ConstValueArray(){} +}; + + +/** +* An array of TCHAR strings +*/ +class CLUCENE_INLINE_EXPORT TCharArray: public ArrayBase{ +public: + TCharArray():ArrayBase(){} + TCharArray(size_t length):ArrayBase(length){} + + void deleteValues(){ + if ( this->values == NULL ) + return; + for (size_t i=0;ilength;i++) + _CLDELETE_CARRAY(this->values[i]); + this->deleteArray(); + } + void deleteValue(TCHAR* v){ + _CLDELETE_LCARRAY(v); + } + virtual ~TCharArray(){ + deleteValues(); + } +}; + +/** +* An array of char strings +*/ +class CLUCENE_INLINE_EXPORT CharArray: public ArrayBase{ +public: + CharArray():ArrayBase(){} + CharArray(size_t length):ArrayBase(length){} + + void deleteValues(){ + if ( this->values == NULL ) + return; + for (size_t i=0;ilength;i++) + _CLDELETE_CaARRAY(this->values[i]); + this->deleteArray(); + } + virtual ~CharArray(){ + deleteValues(); + } +}; + +/** +* An array of const TCHAR strings +*/ +class CLUCENE_INLINE_EXPORT TCharConstArray: public ArrayBase{ +public: + TCharConstArray():ArrayBase(){} + TCharConstArray(size_t length):ArrayBase(length){} + + void deleteValues(){ + if ( this->values == NULL ) + return; + this->deleteArray(); + } + virtual ~TCharConstArray(){ + deleteValues(); + } +}; + +/** +* An array of const char strings +*/ +class CLUCENE_INLINE_EXPORT CharConstArray: public ArrayBase{ +public: + CharConstArray():ArrayBase(){} + CharConstArray(size_t length):ArrayBase(length){} + + void deleteValues(){ + if ( this->values == NULL ) + return; + this->deleteArray(); + } + virtual ~CharConstArray(){ + deleteValues(); + } +}; + +/** An array that uses _CLDECDELETE for deletion */ +template +class CLUCENE_INLINE_EXPORT RefCountArray: public ArrayBase{ +public: + RefCountArray():ArrayBase(){} + RefCountArray(T* values, size_t length):ArrayBase(values,length){} + RefCountArray(size_t length):ArrayBase(length){} + + void deleteValues(){ + if ( this->values == NULL ) + return; + ArrayBase::deleteValues(); + this->deleteArray(); + } + void deleteValue(T v){ + _CLDECDELETE(v); + } //nothing to do... + virtual ~RefCountArray(){ + deleteValues(); + } +}; + + +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/util/BitSet.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/util/BitSet.cpp new file mode 100644 index 0000000..a505b21 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/util/BitSet.cpp @@ -0,0 +1,230 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "BitSet.h" +#include "CLucene/store/Directory.h" +#include "CLucene/store/IndexInput.h" +#include "CLucene/store/IndexOutput.h" + +CL_NS_USE(store) +CL_NS_DEF(util) + + +const uint8_t BitSet::BYTE_COUNTS[256] = { + 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}; + +const uint8_t BitSet::BYTE_OFFSETS[256] = { + 8, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, + 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, + 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, + 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, + 6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, + 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, + 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, + 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, + 7, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, + 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, + 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, + 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, + 6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, + 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, + 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, + 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0}; + + +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 char* name) +{ + _count=-1; + CL_NS(store)::IndexInput* input = d->openInput( name ); + try { + _size = input->readInt(); // read size + if (_size == -1) { + readDgaps(input); + } else { + readBits(input); + } + } _CLFINALLY ( + input->close(); + _CLDELETE(input ); + ); +} + +void BitSet::write(CL_NS(store)::Directory* d, const char* name) { + CL_NS(store)::IndexOutput* output = d->createOutput(name); + try { + if (isSparse()) { + writeDgaps(output); // sparse bit-set more efficiently saved as d-gaps. + } else { + writeBits(output); + } + } _CLFINALLY ( + output->close(); + _CLDELETE(output); + ); +} +BitSet::~BitSet(){ + _CLDELETE_ARRAY(bits); +} + + +void BitSet::set(const int32_t bit, bool val){ + if (bit >= _size) { + _CLTHROWA(CL_ERR_IndexOutOfBounds, "bit out of range"); + } + + _count = -1; + + if (val) + bits[bit >> 3] |= 1 << (bit & 7); + else + bits[bit >> 3] &= ~(1 << (bit & 7)); +} + +int32_t BitSet::size() const { + return _size; +} +int32_t BitSet::count(){ + // if the BitSet has been modified + if (_count == -1) { + + 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 ); +} + + /** Read as a bit set */ + void BitSet::readBits(IndexInput* input) { + _count = input->readInt(); // read count + bits = _CL_NEWARRAY(uint8_t,(_size >> 3) + 1); // allocate bits + input->readBytes(bits, (_size >> 3) + 1); // read bits + } + + /** read as a d-gaps list */ + void BitSet::readDgaps(IndexInput* input) { + _size = input->readInt(); // (re)read size + _count = input->readInt(); // read count + bits = _CL_NEWARRAY(uint8_t,(_size >> 3) + 1); // allocate bits + int32_t last=0; + int32_t n = count(); + while (n>0) { + last += input->readVInt(); + bits[last] = input->readByte(); + n -= BYTE_COUNTS[bits[last] & 0xFF]; + } + } + + /** Write as a bit set */ + void BitSet::writeBits(IndexOutput* output) { + output->writeInt(size()); // write size + output->writeInt(count()); // write count + output->writeBytes(bits, (_size >> 3) + 1); // write bits + } + + /** Write as a d-gaps list */ + void BitSet::writeDgaps(IndexOutput* output) { + output->writeInt(-1); // mark using d-gaps + output->writeInt(size()); // write size + output->writeInt(count()); // write count + int32_t last=0; + int32_t n = count(); + int32_t m = (_size >> 3) + 1; + for (int32_t i=0; i0; i++) { + if (bits[i]!=0) { + output->writeVInt(i-last); + output->writeByte(bits[i]); + last = i; + n -= BYTE_COUNTS[bits[i] & 0xFF]; + } + } + } + + /** Indicates if the bit vector is sparse and should be saved as a d-gaps list, or dense, and should be saved as a bit set. */ + bool BitSet::isSparse() { + // note: order of comparisons below set to favor smaller values (no binary range search.) + // note: adding 4 because we start with ((int) -1) to indicate d-gaps format. + // note: we write the d-gap for the byte number, and the byte (bits[i]) itself, therefore + // multiplying count by (8+8) or (8+16) or (8+24) etc.: + // - first 8 for writing bits[i] (1 byte vs. 1 bit), and + // - second part for writing the byte-number d-gap as vint. + // note: factor is for read/write of byte-arrays being faster than vints. + int32_t factor = 10; + if ((_size >> 3) < (1<< 7)) return factor * (4 + (8+ 8)*count()) < size(); + if ((_size >> 3) < (1<<14)) return factor * (4 + (8+16)*count()) < size(); + if ((_size >> 3) < (1<<21)) return factor * (4 + (8+24)*count()) < size(); + if ((_size >> 3) < (1<<28)) return factor * (4 + (8+32)*count()) < size(); + return factor * (4 + (8+40)*count()) < size(); + } + + int32_t BitSet::nextSetBit(int32_t fromIndex) const + { + if (fromIndex < 0) + _CLTHROWT(CL_ERR_IndexOutOfBounds, _T("fromIndex < 0")); + + if (fromIndex >= _size) + return -1; + + int _max = ( _size+7 ) >> 3; + + unsigned int i = (int)( fromIndex>>3 ); + unsigned int subIndex = fromIndex & 0x7; // index within the byte + uint8_t byte = bits[i] >> subIndex; // skip all the bits to the right of index + + if ( byte != 0 ) + { + return ( ( i<<3 ) + subIndex + BYTE_OFFSETS[ byte ] ); + } + + while( ++i < _max ) + { + byte = bits[i]; + if ( byte != 0 ) + return ( ( i<<3 ) + BYTE_OFFSETS[ byte ] ); + } + return -1; + } + +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/util/BitSet.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/util/BitSet.h new file mode 100644 index 0000000..57118d3 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/util/BitSet.h @@ -0,0 +1,100 @@ +/*------------------------------------------------------------------------------ +* 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_BitSet_ +#define _lucene_util_BitSet_ + + +CL_CLASS_DEF(store,Directory) +CL_CLASS_DEF(store,IndexInput) +CL_CLASS_DEF(store,IndexOutput) + +CL_NS_DEF(util) + + +/** Optimized implementation of a vector of bits. This is more-or-less like + java.util.BitSet, but also includes the following: +

    +
  • a count() method, which efficiently computes the number of one bits;
  • +
  • optimized read from and write to disk;
  • +
  • inlinable get() method;
  • +
  • store and load, as bit set or d-gaps, depending on sparseness;
  • +
+ */ +class CLUCENE_EXPORT BitSet:LUCENE_BASE { + int32_t _size; + int32_t _count; + uint8_t *bits; + + void readBits(CL_NS(store)::IndexInput* input); + /** read as a d-gaps list */ + void readDgaps(CL_NS(store)::IndexInput* input); + /** Write as a bit set */ + void writeBits(CL_NS(store)::IndexOutput* output); + /** Write as a d-gaps list */ + void writeDgaps(CL_NS(store)::IndexOutput* output); + /** Indicates if the bit vector is sparse and should be saved as a d-gaps list, or dense, and should be saved as a bit set. */ + bool isSparse(); + static const uint8_t BYTE_COUNTS[256]; + static const uint8_t BYTE_OFFSETS[256]; +protected: + BitSet( const BitSet& copy ); + +public: + ///Create a bitset with the specified size + BitSet ( int32_t size ); + BitSet(CL_NS(store)::Directory* d, const char* name); + void write(CL_NS(store)::Directory* d, const char* name); + + ///Destructor for the bit set + ~BitSet(); + + ///get the value of the specified bit + ///get the value of the specified bit + inline bool get(const int32_t bit) const{ + if (bit >= _size) { + _CLTHROWA(CL_ERR_IndexOutOfBounds, "bit out of range"); + } + return (bits[bit >> 3] & (1 << (bit & 7))) != 0; + } + + /** + * Returns the index of the first bit that is set to {@code true} + * that occurs on or after the specified starting index. If no such + * bit exists then {@code -1} is returned. + * + *

To iterate over the {@code true} bits in a {@code BitSet}, + * use the following loop: + * + *

 {@code
+    * for (int i = bs.nextSetBit(0); i >= 0; i = bs.nextSetBit(i+1)) {
+    *     // operate on index i here
+    * }}
+ * + * @param fromIndex the index to start checking from (inclusive) + * @return the index of the next set bit, or {@code -1} if there + * is no such bit + * @throws IndexOutOfBounds if the specified index is negative + * + */ + int32_t nextSetBit(int32_t fromIndex) const; + + ///set the value of the specified bit + void set(const 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; +}; +typedef BitSet BitVector; //Lucene now calls the BitSet a BitVector... + +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/util/CLStreams.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/util/CLStreams.h new file mode 100644 index 0000000..3af9e2f --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/util/CLStreams.h @@ -0,0 +1,295 @@ +/*------------------------------------------------------------------------------ +* 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_CLStreams_ +#define _lucene_util_CLStreams_ + +CL_NS_DEF(util) + +template +class CLUCENE_EXPORT CLStream{ +public: + virtual ~CLStream(){} + + inline int read(){ + const T* buffer; + const int32_t nread = read(buffer,1, 1); + if ( nread < 0 ) + return -1; + else + return buffer[0]; + } + + /** Read one line, return the length of the line read. + * If the string is longer than len, only len of that line will be copied + */ + inline int32_t readLine(T* buffer, size_t len){ + size_t i = 0; + while (true && i 0) + break; + else + continue; + } + buffer[i++] = b; + } + buffer[i] = 0; + return i; + } + + /** + * @brief Reads items from the stream and sets @p start to point to + * the first item that was read. + * + * Note: unless stated otherwise in the documentation for that method, + * this pointer will no longer be valid after calling another method of + * this class. The pointer will also no longer be valid after the class + * is destroyed. + * + * At least @p min items will be read from the stream, unless an error occurs + * or the end of the stream is reached. Under no circumstances will more than + * @p max items be read. + * + * If the end of the stream is reached before @p min items are read, the + * read is still considered successful and the number of items read will + * be returned. + * + * @param start pointer passed by reference that will be set to point to + * the retrieved array of items. If the end of the stream + * is encountered or an error occurs, the value of @p start + * is undefined + * @param min the minimal number of items to read from the stream. This + * value should be larger than 0. If it is 0 or smaller, the + * result is undefined + * @param max the maximal number of items to read from the stream. + * If this value is smaller than @p min, there is no limit on + * the number of items that can be read + * @return the number of items that were read. @c -1 is returned if + * end of the stream has already been reached. An error is thrown + * if an error occurs. + **/ + virtual int32_t read(const T*& start, int32_t min, int32_t max) = 0; + /** + * @brief Skip @p ntoskip items. + * + * If an error occurs, or the end of the stream is encountered, fewer + * than @p ntoskip items may be skipped. This can be checked by comparing + * the return value to @p ntoskip. + * + * Calling this function invalidates the data pointer that was obtained from + * StreamBase::read. + * + * @param ntoskip the number of items that should be skipped + * @return the number of items skipped + **/ + virtual int64_t skip(int64_t ntoskip) = 0; + /** + * @brief Get the current position in the stream. + * The value obtained from this function can be used to reset the stream. + **/ + virtual int64_t position() = 0; + int64_t getPosition(){ return this->position(); } + + virtual size_t size() = 0; +}; + +template +class CLUCENE_EXPORT BufferedStream{ +public: + virtual ~BufferedStream(){} + /** + * @brief Repositions this stream to a given position. + * + * A call to reset is only guaranteed to be successful when + * the requested position lies within the segment of a stream + * corresponding to a valid pointer obtained from read. + * In this case, the pointer will not be invalidated. + * + * Calling this function invalidates the data pointer that was obtained from + * StreamBase::read unless the conditions outlined above apply. + * + * To read n items, leaving the stream at the same position as before, you + * can do the following: + * @code + * int64_t start = stream.position(); + * if ( stream.read(data, min, max) > 0 ) { + * stream.reset(start); + * // The data pointer is still valid here + * } + * @endcode + * + * @param pos the position in the stream you want to go to, relative to + * the start of the stream + * @return the new position in the stream + **/ + virtual int64_t reset(int64_t) = 0; + /** + * @brief Sets the minimum size of the buffer + */ + virtual void setMinBufSize(int32_t s) = 0; +}; + +class BufferedReader; +class CLUCENE_EXPORT Reader: public CLStream{ +public: + ~Reader(){} + virtual BufferedReader* __asBufferedReader(){ return NULL; } +}; +class CLUCENE_EXPORT BufferedReader: public Reader, public BufferedStream{ +public: + _CL_DEPRECATED( setMinBufSize ) int64_t mark(int32_t readAheadlimit){ + this->setMinBufSize(readAheadlimit); + return this->position(); + } + ~BufferedReader(){} + BufferedReader* __asBufferedReader(){ return this; } +}; +typedef CLStream InputStream; +class CLUCENE_EXPORT BufferedInputStream: public InputStream, public BufferedStream{ +public: + virtual ~BufferedInputStream(){} +}; + + +class CLUCENE_EXPORT FilteredBufferedReader: public BufferedReader{ + class Internal; + Internal* _internal; +public: + FilteredBufferedReader(Reader* reader, bool deleteReader); + virtual ~FilteredBufferedReader(); + + int32_t read(const TCHAR*& start, int32_t min, int32_t max); + int64_t position(); + int64_t reset(int64_t); + int64_t skip(int64_t ntoskip); + size_t size(); + void setMinBufSize(int32_t minbufsize); +}; + +class CLUCENE_EXPORT FilteredBufferedInputStream: public BufferedInputStream{ + class Internal; + Internal* _internal; +public: + FilteredBufferedInputStream(InputStream* input, bool deleteInput); + virtual ~FilteredBufferedInputStream(); + + int32_t read(const signed char*& start, int32_t min, int32_t max); + int64_t position(); + int64_t reset(int64_t); + int64_t skip(int64_t ntoskip); + size_t size(); + void setMinBufSize(int32_t minbufsize); +}; + + +class CLUCENE_EXPORT StringReader: public BufferedReader{ +protected: + const TCHAR* value; + bool ownValue; + int64_t pos; + size_t m_size; + size_t buffer_size; +public: + StringReader ( const TCHAR* value, const int32_t length = -1, bool copyData = true ); + void init ( const TCHAR* value, const int32_t length, bool copyData = true ); + virtual ~StringReader(); + + int32_t read(const TCHAR*& start, int32_t min, int32_t max); + int64_t position(); + int64_t reset(int64_t); + int64_t skip(int64_t ntoskip); + void setMinBufSize(int32_t s); + size_t size(); +}; +class CLUCENE_EXPORT AStringReader: public BufferedInputStream{ + signed char* value; + bool ownValue; + int64_t pos; +protected: + size_t m_size; +public: + AStringReader ( const char* value, const int32_t length = -1 ); + AStringReader ( char* value, const int32_t length, bool copyData = true ); + virtual ~AStringReader(); + + int32_t read(const signed char*& start, int32_t min, int32_t max); + int32_t read(const unsigned char*& start, int32_t min, int32_t max); + int64_t position(); + int64_t reset(int64_t); + int64_t skip(int64_t ntoskip); + void setMinBufSize(int32_t s); + size_t size(); +}; + +/** +* A helper class which constructs a FileReader with a specified +* simple encodings, or a given inputstreamreader +*/ +class CLUCENE_EXPORT FileInputStream: public BufferedInputStream { + class Internal; + Internal* _internal; +protected: + void init(InputStream *i, int encoding); +public: + LUCENE_STATIC_CONSTANT(int32_t, DEFAULT_BUFFER_SIZE=4096); + FileInputStream ( const char* path, int32_t buflen = -1 ); + virtual ~FileInputStream (); + + int32_t read(const signed char*& start, int32_t min, int32_t max); + int64_t position(); + int64_t reset(int64_t); + int64_t skip(int64_t ntoskip); + size_t size(); + void setMinBufSize(int32_t minbufsize); +}; + +class CLUCENE_EXPORT SimpleInputStreamReader: public BufferedReader{ + class Internal; + Internal* _internal; +protected: + void init(InputStream *i, int encoding); +public: + enum{ + ASCII=1, + UTF8=2, + UCS2_LE=3 + }; + + SimpleInputStreamReader(); + SimpleInputStreamReader(InputStream *i, int encoding); + virtual ~SimpleInputStreamReader(); + + int32_t read(const TCHAR*& start, int32_t min, int32_t max); + int64_t position(); + int64_t reset(int64_t); + int64_t skip(int64_t ntoskip); + void setMinBufSize(int32_t s); + size_t size(); +}; + +/** +* A helper class which constructs a FileReader with a specified +* simple encodings, or a given inputstreamreader. +* It is recommended that you use the contribs package for proper +* decoding using iconv. This class is provided only as a dependency-less +* replacement. +*/ +class CLUCENE_EXPORT FileReader: public SimpleInputStreamReader{ +public: + FileReader(const char* path, int encoding, int32_t buflen = -1); + FileReader(const char* path, const char* encoding, int32_t buflen = -1); + virtual ~FileReader(); +}; + +CL_NS_END + +#define jstreams CL_NS(util) + +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/util/Equators.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/util/Equators.cpp new file mode 100644 index 0000000..9d113e2 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/util/Equators.cpp @@ -0,0 +1,172 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "Equators.h" +#include "CLucene/util/Misc.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 + +AbstractDeletor::~AbstractDeletor(){ +} + +//////////////////////////////////////////////////////////////////////////////// +// Comparors +//////////////////////////////////////////////////////////////////////////////// +int32_t compare(Comparable* o1, Comparable* o2){ + if ( o1 == NULL && o2 == NULL ) + return 0; + else if ( o1 == NULL ) + return 1; + else if ( o2 == NULL ) + return -1; + else + return o1->compareTo(o2); +} +NamedObject::~NamedObject(){ +} +bool NamedObject::instanceOf(const char* other) const{ + const char* t = this->getObjectName(); + if ( t==other || strcmp( t, other )==0 ) + return true; + else + return false; +} + +int32_t Compare::Int32::getValue() const{ return value; } +Compare::Int32::Int32(int32_t val){ + value = val; +} +Compare::Int32::Int32(){ + value = 0; +} +const char* Compare::Int32::getClassName(){ + return "Compare::Int32::getClassName"; +} +const char* Compare::Int32::getObjectName() const{ + return getClassName(); +} +int32_t Compare::Int32::compareTo(NamedObject* o){ + if ( o->getObjectName() != Int32::getClassName() ) return -1; + + 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; +} + +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; +} + + +float_t Compare::Float::getValue() const{ + return value; +} +Compare::Float::Float(float_t val){ + value = val; +} +const char* Compare::Float::getClassName(){ + return "Compare::Float::getClassName"; +} +const char* Compare::Float::getObjectName() const{ + return getClassName(); +} +int32_t Compare::Float::compareTo(NamedObject* o){ + if ( o->getObjectName() != Float::getClassName() ) return -1; + 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; +} + + +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); +} +const char* Compare::Char::getValue() const{ return s; } + +Compare::Char::Char(){ + s=NULL; +} + Compare::Char::Char(const char* str){ + this->s = str; +} +const char* Compare::Char::getClassName(){ + return "Compare::Char::getClassName"; +} +const char* Compare::Char::getObjectName() const{ + return getClassName(); +} +int32_t Compare::Char::compareTo(NamedObject* o){ + if ( o->getObjectName() != Char::getClassName() ) return -1; + Char* os = (Char*)o; + return strcmp(s,os->s); +} + +#ifdef _UCS2 +bool Compare::WChar::operator()( const wchar_t* val1, const wchar_t* val2 ) const{ + if ( val1==val2) + return false; + bool ret = (_tcscmp( val1,val2 ) < 0); + return ret; +} +size_t Compare::WChar::operator()( const wchar_t* val1) const{ + return CL_NS(util)::Misc::whashCode(val1); +} + +const wchar_t* Compare::WChar::getValue() const{ return s; } + +Compare::WChar::WChar(){ + s=NULL; +} + Compare::WChar::WChar(const wchar_t* str){ + this->s = str; +} +const char* Compare::WChar::getClassName(){ + return "Compare::WChar::getClassName"; +} +const char* Compare::WChar::getObjectName() const{ + return getClassName(); +} +int32_t Compare::WChar::compareTo(NamedObject* o){ + if ( o->getObjectName() != WChar::getClassName() ) return -1; + TChar* os = (TChar*)o; + return _tcscmp(s,os->s); +} + +#endif + + +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/util/Equators.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/util/Equators.h new file mode 100644 index 0000000..8cc85db --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/util/Equators.h @@ -0,0 +1,283 @@ +/*------------------------------------------------------------------------------ +* 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_Equators_ +#define _lucene_util_Equators_ + +#include +#include +#include +#include +#include +//#include "CLucene/LuceneThreads.h" + +CL_NS_DEF(util) + +//////////////////////////////////////////////////////////////////////////////// +// Equators +//////////////////////////////////////////////////////////////////////////////// +/** @internal */ +class CLUCENE_INLINE_EXPORT Equals{ +public: + class CLUCENE_INLINE_EXPORT Int32:public CL_NS_STD(binary_function) + { + public: + bool operator()( const int32_t val1, const int32_t val2 ) const; + }; + + class CLUCENE_INLINE_EXPORT Char:public CL_NS_STD(binary_function) + { + public: + bool operator()( const char* val1, const char* val2 ) const; + }; +#ifdef _UCS2 + class CLUCENE_INLINE_EXPORT WChar: public CL_NS_STD(binary_function) + { + public: + bool operator()( const wchar_t* val1, const wchar_t* val2 ) const; + }; + class CLUCENE_INLINE_EXPORT TChar: public WChar{ + }; +#else + class CLUCENE_INLINE_EXPORT TChar: public Char{ + }; +#endif + + + template + class CLUCENE_INLINE_EXPORT Void:public CL_NS_STD(binary_function) + { + public: + bool operator()( _cl* val1, _cl* val2 ) const{ + return val1==val2; + } + }; +}; + + +//////////////////////////////////////////////////////////////////////////////// +// Comparors +//////////////////////////////////////////////////////////////////////////////// +class CLUCENE_EXPORT NamedObject{ +public: + virtual ~NamedObject(); + virtual const char* getObjectName() const = 0; + virtual bool instanceOf(const char* otherobject) const; +}; +class CLUCENE_EXPORT Comparable:public NamedObject{ +public: + virtual ~Comparable(){ + } + + virtual int32_t compareTo(NamedObject* o) = 0; +}; + +/** @internal */ +class CLUCENE_INLINE_EXPORT Compare{ +public: + class CLUCENE_EXPORT _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 CLUCENE_INLINE_EXPORT Int32:public _base, public Comparable{ + int32_t value; + public: + int32_t getValue() const; + Int32(int32_t val); + Int32(); + int32_t compareTo(NamedObject* o); + bool operator()( int32_t t1, int32_t t2 ) const; + size_t operator()( int32_t t ) const; + static const char* getClassName(); + const char* getObjectName() const; + }; + + + class CLUCENE_INLINE_EXPORT Float:public Comparable{ + float_t value; + public: + float_t getValue() const; + Float(float_t val); + int32_t compareTo(NamedObject* o); + static const char* getClassName(); + const char* getObjectName() const; + }; + + + class CLUCENE_EXPORT Char: public _base, public Comparable // + { + const char* s; + public: + const char* getValue() const; + Char(); + Char(const char* str); + int32_t compareTo(NamedObject* o); + + bool operator()( const char* val1, const char* val2 ) const; + size_t operator()( const char* val1) const; + static const char* getClassName(); + const char* getObjectName() const; + }; + +#ifdef _UCS2 + class CLUCENE_EXPORT WChar: public _base, public Comparable // + { + const wchar_t* s; + public: + const wchar_t* getValue() const; + WChar(); + WChar(const wchar_t* str); + int32_t compareTo(NamedObject* o); + + bool operator()( const wchar_t* val1, const wchar_t* val2 ) const; + size_t operator()( const wchar_t* val1) const; + static const char* getClassName(); + const char* getObjectName() const; + }; + typedef WChar TChar; +#else + typedef Char TChar; +#endif + + template + class CLUCENE_INLINE_EXPORT Void:public _base // + { + 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; + } + }; +}; + + + + +int32_t compare(Comparable* o1, Comparable* o2); + +//////////////////////////////////////////////////////////////////////////////// +// allocators +//////////////////////////////////////////////////////////////////////////////// +/** @internal */ +class CLUCENE_INLINE_EXPORT AbstractDeletor{ +public: + virtual void Delete(void*) = 0; + virtual ~AbstractDeletor(); +}; +class CLUCENE_INLINE_EXPORT Deletor{ +public: + class CLUCENE_INLINE_EXPORT tcArray: public AbstractDeletor{ + public: + void Delete(void* _arr){ + doDelete((TCHAR*)_arr); + } + static void doDelete(TCHAR* arr){ + _CLDELETE_CARRAY(arr); + } + }; + + template + class CLUCENE_INLINE_EXPORT vArray: public AbstractDeletor{ + public: + void Delete(void* arr){ + doDelete((_kt*)arr); + } + static void doDelete(_kt* arr){ + _CLDELETE_LARRAY(arr); + } + }; + class CLUCENE_INLINE_EXPORT acArray: public AbstractDeletor{ + public: + void Delete(void* arr){ + doDelete((char*)arr); + } + static void doDelete(char* arr){ + _CLDELETE_CaARRAY(arr); + } + }; + + template + class CLUCENE_INLINE_EXPORT Object: public AbstractDeletor{ + public: + void Delete(void* obj){ + doDelete((_kt*)obj); + } + static void doDelete(_kt* obj){ + _CLDELETE(obj); + } + }; + template + class CLUCENE_INLINE_EXPORT Void: public AbstractDeletor{ + public: + void Delete(void* obj){ + doDelete((_kt*)obj); + } + static void doDelete(_kt* obj){ + _CLVDELETE(obj); + } + }; + class CLUCENE_INLINE_EXPORT Dummy: public AbstractDeletor{ + public: + void Delete(void*){} + static void doDelete(const void*){ + //todo: remove all occurances where it hits this point + //CND_WARNING(false,"Deletor::Dummy::doDelete run, set deleteKey or deleteValue to false"); + } + }; + class CLUCENE_INLINE_EXPORT DummyInt32: public AbstractDeletor{ + public: + void Delete(void*){} + static void doDelete(const int32_t){ + } + }; + class CLUCENE_INLINE_EXPORT DummyFloat: public AbstractDeletor{ + public: + void Delete(void*){} + static void doDelete(const float_t){ + } + }; + template + class CLUCENE_INLINE_EXPORT ConstNullVal: public AbstractDeletor{ + public: + void Delete(void*){} + static void doDelete(const _type){ + //todo: remove all occurances where it hits this point + //CND_WARNING(false,"Deletor::Dummy::doDelete run, set deleteKey or deleteValue to false"); + } + }; + + template + class CLUCENE_INLINE_EXPORT NullVal: public AbstractDeletor{ + public: + void Delete(void*){} + static void doDelete(_type){ + //todo: remove all occurances where it hits this point + //CND_WARNING(false,"Deletor::Dummy::doDelete run, set deleteKey or deleteValue to false"); + } + }; +}; +//////////////////////////////////////////////////////////////////////////////// + +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/util/FastCharStream.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/util/FastCharStream.cpp new file mode 100644 index 0000000..590a3bd --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/util/FastCharStream.cpp @@ -0,0 +1,109 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "_FastCharStream.h" + +#include "CLucene/util/CLStreams.h" + +CL_NS_DEF(util) + +const int32_t FastCharStream::maxRewindSize = LUCENE_MAX_WORD_LEN*2; + + FastCharStream::FastCharStream(BufferedReader* reader): + pos(0), + rewindPos(0), + resetPos(0), + col(1), + line(1), + input(reader) + { + input->setMinBufSize(maxRewindSize); + } + FastCharStream::~FastCharStream(){ + } + + void FastCharStream::reset() + { + pos = 0; + rewindPos = 0; + resetPos = 0; + col = 1; + line = 1; + input->setMinBufSize(maxRewindSize); + } + + 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() + { + 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; + 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/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/util/MD5Digester.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/util/MD5Digester.cpp new file mode 100644 index 0000000..53227ec --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/util/MD5Digester.cpp @@ -0,0 +1,335 @@ +///////////////////////////////////////////////////////////////////////// +// MD5.cpp +// Implementation file for MD5 class +// +// This C++ Class implementation of the original RSA Data Security, Inc. +// MD5 Message-Digest Algorithm is copyright (c) 2002, Gary McNickle. +// All rights reserved. This software is a derivative of the "RSA Data +// Security, Inc. MD5 Message-Digest Algorithm" +// +// You may use this software free of any charge, but without any +// warranty or implied warranty, provided that you follow the terms +// of the original RSA copyright, listed below. +// +// Original RSA Data Security, Inc. Copyright notice +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All +// rights reserved. +// +// License to copy and use this software is granted provided that it +// is identified as the "RSA Data Security, Inc. MD5 Message-Digest +// Algorithm" in all material mentioning or referencing this software +// or this function. +// License is also granted to make and use derivative works provided +// that such works are identified as "derived from the RSA Data +// Security, Inc. MD5 Message-Digest Algorithm" in all material +// mentioning or referencing the derived work. +// RSA Data Security, Inc. makes no representations concerning either +// the merchantability of this software or the suitability of this +// software for any particular purpose. It is provided "as is" +// without express or implied warranty of any kind. +// These notices must be retained in any copies of any part of this +// documentation and/or software. +///////////////////////////////////////////////////////////////////////// + +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "_MD5Digester.h" +CL_NS_DEF(util) + +static unsigned char PADDING[64] = +{ + 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +}; + +#define S11 7 +#define S12 12 +#define S13 17 +#define S14 22 +#define S21 5 +#define S22 9 +#define S23 14 +#define S24 20 +#define S31 4 +#define S32 11 +#define S33 16 +#define S34 23 +#define S41 6 +#define S42 10 +#define S43 15 +#define S44 21 + + +// PrintMD5: Converts a completed md5 digest into a char* string. +char* PrintMD5(uint8_t md5Digest[16]) +{ + const char toHex[] = "0123456789abcdef"; + char chBuffer[16 * 2 + 1]; + int nCount; + + for (nCount = 0; nCount < 16; nCount++) + { + chBuffer[nCount * 2] = toHex[(md5Digest[nCount] & 0xf0) >> 4]; + chBuffer[nCount * 2 + 1] = toHex[md5Digest[nCount] & 0x0f]; + } + chBuffer[nCount * 2] = '\0'; + + return STRDUP_AtoA(chBuffer); +} + +// MD5String: Performs the MD5 algorithm on a char* string, returning +// the results as a char*. +char* MD5String(char* szString) +{ + int nLen = strlen(szString); + md5 alg; + + alg.Update((unsigned char*)szString, (unsigned int)nLen); + alg.Finalize(); + + return PrintMD5(alg.Digest()); + +} + +// MD5File: Performs the MD5 algorithm on a file (binar or text), +// returning the results as a char*. Returns NULL if it fails. +char* MD5File(char* szFilename) +{ + FILE* file; + md5 alg; + int nLen; + unsigned char chBuffer[1024]; + + try + { + memset(chBuffer, 0, 1024); + + if ((file = fopen (szFilename, "rb")) != NULL) + { + while ((nLen = fread (chBuffer, 1, 1024, file))) + alg.Update(chBuffer, nLen); + + alg.Finalize(); + + fclose (file); + + return PrintMD5(alg.Digest()); + } + } + catch(...) //todo: only catch IO Err??? + { + + } + + return NULL; // failed +} + + +// md5::Init +// Initializes a new context. +void md5::Init() +{ + memset(m_Count, 0, 2 * sizeof(uint32_t)); + + m_State[0] = 0x67452301; + m_State[1] = 0xefcdab89; + m_State[2] = 0x98badcfe; + m_State[3] = 0x10325476; +} + +// md5::Update +// MD5 block update operation. Continues an MD5 message-digest +// operation, processing another message block, and updating the +// context. +void md5::Update(uint8_t* chInput, uint32_t nInputLen) +{ + uint32_t i, index, partLen; + + // Compute number of bytes mod 64 + index = (unsigned int)((m_Count[0] >> 3) & 0x3F); + + // Update number of bits + if ((m_Count[0] += (nInputLen << 3)) < (nInputLen << 3)) + m_Count[1]++; + + m_Count[1] += (nInputLen >> 29); + + partLen = 64 - index; + + // Transform as many times as possible. + if (nInputLen >= partLen) + { + memcpy( &m_Buffer[index], chInput, partLen ); + Transform(m_Buffer); + + for (i = partLen; i + 63 < nInputLen; i += 64) + Transform(&chInput[i]); + + index = 0; + } + else + i = 0; + + // Buffer remaining input + memcpy( &m_Buffer[index], &chInput[i], nInputLen-i ); +} + +// md5::Finalize +// MD5 finalization. Ends an MD5 message-digest operation, writing +// the message digest and zeroizing the context. +void md5::Finalize() +{ + uint8_t bits[8]; + uint32_t index, padLen; + + // Save number of bits + Encode (bits, m_Count, 8); + + // Pad out to 56 mod 64 + index = (unsigned int)((m_Count[0] >> 3) & 0x3f); + padLen = (index < 56) ? (56 - index) : (120 - index); + Update(PADDING, padLen); + + // Append length (before padding) + Update (bits, 8); + + // Store state in digest + Encode (m_Digest, m_State, 16); + + memset(m_Count, 0, 2 * sizeof(uint32_t)); + memset(m_State, 0, 4 * sizeof(uint32_t)); + memset(m_Buffer,0, 64 * sizeof(uint8_t)); +} + +// md5::Transform +// MD5 basic transformation. Transforms state based on block. +void md5::Transform (uint8_t* block) +{ + uint32_t a = m_State[0], b = m_State[1], c = m_State[2], d = m_State[3], x[16]; + + Decode (x, block, 64); + + // Round 1 + FF (a, b, c, d, x[ 0], S11, 0xd76aa478); + FF (d, a, b, c, x[ 1], S12, 0xe8c7b756); + FF (c, d, a, b, x[ 2], S13, 0x242070db); + FF (b, c, d, a, x[ 3], S14, 0xc1bdceee); + FF (a, b, c, d, x[ 4], S11, 0xf57c0faf); + FF (d, a, b, c, x[ 5], S12, 0x4787c62a); + FF (c, d, a, b, x[ 6], S13, 0xa8304613); + FF (b, c, d, a, x[ 7], S14, 0xfd469501); + FF (a, b, c, d, x[ 8], S11, 0x698098d8); + FF (d, a, b, c, x[ 9], S12, 0x8b44f7af); + FF (c, d, a, b, x[10], S13, 0xffff5bb1); + FF (b, c, d, a, x[11], S14, 0x895cd7be); + FF (a, b, c, d, x[12], S11, 0x6b901122); + FF (d, a, b, c, x[13], S12, 0xfd987193); + FF (c, d, a, b, x[14], S13, 0xa679438e); + FF (b, c, d, a, x[15], S14, 0x49b40821); + + // Round 2 + GG (a, b, c, d, x[ 1], S21, 0xf61e2562); + GG (d, a, b, c, x[ 6], S22, 0xc040b340); + GG (c, d, a, b, x[11], S23, 0x265e5a51); + GG (b, c, d, a, x[ 0], S24, 0xe9b6c7aa); + GG (a, b, c, d, x[ 5], S21, 0xd62f105d); + GG (d, a, b, c, x[10], S22, 0x2441453); + GG (c, d, a, b, x[15], S23, 0xd8a1e681); + GG (b, c, d, a, x[ 4], S24, 0xe7d3fbc8); + GG (a, b, c, d, x[ 9], S21, 0x21e1cde6); + GG (d, a, b, c, x[14], S22, 0xc33707d6); + GG (c, d, a, b, x[ 3], S23, 0xf4d50d87); + GG (b, c, d, a, x[ 8], S24, 0x455a14ed); + GG (a, b, c, d, x[13], S21, 0xa9e3e905); + GG (d, a, b, c, x[ 2], S22, 0xfcefa3f8); + GG (c, d, a, b, x[ 7], S23, 0x676f02d9); + GG (b, c, d, a, x[12], S24, 0x8d2a4c8a); + + // Round 3 + HH (a, b, c, d, x[ 5], S31, 0xfffa3942); + HH (d, a, b, c, x[ 8], S32, 0x8771f681); + HH (c, d, a, b, x[11], S33, 0x6d9d6122); + HH (b, c, d, a, x[14], S34, 0xfde5380c); + HH (a, b, c, d, x[ 1], S31, 0xa4beea44); + HH (d, a, b, c, x[ 4], S32, 0x4bdecfa9); + HH (c, d, a, b, x[ 7], S33, 0xf6bb4b60); + HH (b, c, d, a, x[10], S34, 0xbebfbc70); + HH (a, b, c, d, x[13], S31, 0x289b7ec6); + HH (d, a, b, c, x[ 0], S32, 0xeaa127fa); + HH (c, d, a, b, x[ 3], S33, 0xd4ef3085); + HH (b, c, d, a, x[ 6], S34, 0x4881d05); + HH (a, b, c, d, x[ 9], S31, 0xd9d4d039); + HH (d, a, b, c, x[12], S32, 0xe6db99e5); + HH (c, d, a, b, x[15], S33, 0x1fa27cf8); + HH (b, c, d, a, x[ 2], S34, 0xc4ac5665); + + // Round 4 + II (a, b, c, d, x[ 0], S41, 0xf4292244); + II (d, a, b, c, x[ 7], S42, 0x432aff97); + II (c, d, a, b, x[14], S43, 0xab9423a7); + II (b, c, d, a, x[ 5], S44, 0xfc93a039); + II (a, b, c, d, x[12], S41, 0x655b59c3); + II (d, a, b, c, x[ 3], S42, 0x8f0ccc92); + II (c, d, a, b, x[10], S43, 0xffeff47d); + II (b, c, d, a, x[ 1], S44, 0x85845dd1); + II (a, b, c, d, x[ 8], S41, 0x6fa87e4f); + II (d, a, b, c, x[15], S42, 0xfe2ce6e0); + II (c, d, a, b, x[ 6], S43, 0xa3014314); + II (b, c, d, a, x[13], S44, 0x4e0811a1); + II (a, b, c, d, x[ 4], S41, 0xf7537e82); + II (d, a, b, c, x[11], S42, 0xbd3af235); + II (c, d, a, b, x[ 2], S43, 0x2ad7d2bb); + II (b, c, d, a, x[ 9], S44, 0xeb86d391); + + m_State[0] += a; + m_State[1] += b; + m_State[2] += c; + m_State[3] += d; + + memset(x, 0, sizeof(x)); +} + +// md5::Encode +// Encodes input (uint32_t) into output (uint8_t). Assumes nLength is +// a multiple of 4. +void md5::Encode(uint8_t* dest, uint32_t* src, uint32_t nLength) +{ + uint32_t i, j; + + CND_PRECONDITION(nLength % 4 == 0,"nLength % 4 != 0") + + for (i = 0, j = 0; j < nLength; i++, j += 4) + { + dest[j] = (uint8_t)(src[i] & 0xff); + dest[j+1] = (uint8_t)((src[i] >> 8) & 0xff); + dest[j+2] = (uint8_t)((src[i] >> 16) & 0xff); + dest[j+3] = (uint8_t)((src[i] >> 24) & 0xff); + } +} + +// md5::Decode +// Decodes input (uint8_t) into output (uint32_t). Assumes nLength is +// a multiple of 4. +void md5::Decode(uint32_t* dest, uint8_t* src, uint32_t nLength) +{ + uint32_t i, j; + + CND_PRECONDITION(nLength % 4 == 0, "nLength % 4 != 0"); + + for (i = 0, j = 0; j < nLength; i++, j += 4) + { + dest[i] = ((uint32_t)src[j]) | (((uint32_t)src[j+1])<<8) | + (((uint32_t)src[j+2])<<16) | (((uint32_t)src[j+3])<<24); + } +} + +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/util/PriorityQueue.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/util/PriorityQueue.h new file mode 100644 index 0000000..ac25cde --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/util/PriorityQueue.h @@ -0,0 +1,199 @@ +/*------------------------------------------------------------------------------ +* 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_ + +#include + +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 CLUCENE_INLINE_EXPORT PriorityQueue { + private: + size_t _size; + bool dk; + size_t maxSize; + protected: + _type* heap; //(was object[]) + + private: + 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():_size(0),dk(false),maxSize(0),heap(NULL){ + } + + // 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; + if (0 == maxSize) + // We allocate 1 extra to avoid if statement in top() + heapSize = 2; + else + heapSize = maxSize + 1; + heap = _CL_NEWARRAY(_type,heapSize); + this->maxSize = maxSize; + } + + public: + virtual ~PriorityQueue(){ + clear(); + _CLDELETE_LARRAY(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){ + _type t = insertWithOverflow(element); + if (t != element) { + if (t) _valueDeletor::doDelete(t); + return true; + } + return false; + } + + /** + * insertWithOverflow() is the same as insert() except its + * return value: it returns the object (if any) that was + * dropped off the heap because it was full. This can be + * the given parameter (in case it is smaller than the + * full heap's minimum, and couldn't be added), or another + * object that was previously the smallest value in the + * heap and now has been replaced by a larger one, or null + * if the queue wasn't yet full with maxSize elements. + * NOTE: value is not being deleted - its the user responsibilty + * to dispose the returned _type (only if != NULL && != element). + */ + _type insertWithOverflow(_type element) { + if(_size < maxSize){ + put(element); + return NULL; + }else if(_size > 0 && !lessThan(element, heap[1])){ + _type ret = heap[1]; + heap[1] = element; + adjustTop(); + return ret; + }else + return element; + } + + /** + * Returns the least element of the PriorityQueue in constant time. + */ + _type top(){ + // We don't need to check size here: if maxSize is 0, + // then heap is length 2 array with both entries null. + // If size is 0 then heap[1] is already null. + return heap[1]; + } + + /** 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
+		    { pq.top().change(); pq.adjustTop(); }
+		   
instead of
+		    { o = pq.pop(); o.change(); pq.push(o); }
+		   
+ */ + 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/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/util/Reader.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/util/Reader.cpp new file mode 100644 index 0000000..8693995 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/util/Reader.cpp @@ -0,0 +1,550 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "CLStreams.h" +#include "CLucene/util/Misc.h" + +#include +#ifdef _CL_HAVE_IO_H + #include +#endif +#ifdef _CL_HAVE_SYS_STAT_H + #include +#endif +#ifdef _CL_HAVE_UNISTD_H + #include +#endif +#ifdef _CL_HAVE_DIRECT_H + #include +#endif +#include + +#include "_bufferedstream.h" + +CL_NS_DEF(util) + +StringReader::StringReader ( const TCHAR* _value, const int32_t _length, bool copyData ) +{ + this->m_size = 0; + this->value = NULL; + this->ownValue = true; + this->buffer_size = 0; + this->init(_value,_length,copyData); +} + +void StringReader::init ( const TCHAR* _value, const int32_t _length, bool copyData ){ + const size_t length = ( _length < 0 ? _tcslen(_value) : _length ); + this->pos = 0; + if ( copyData ){ + TCHAR* tmp = (TCHAR*)this->value; + if ( tmp == NULL || !this->ownValue ){ + tmp = _CL_NEWARRAY(TCHAR, length+1); + this->buffer_size = length; + }else if ( length > this->buffer_size || length < (this->buffer_size/2) ){ //expand, or shrink + tmp = (TCHAR*)realloc(tmp, sizeof(TCHAR) * (length+1)); + this->buffer_size = length; + } + _tcsncpy(tmp, _value, length+1); + this->value = tmp; + }else{ + if ( ownValue && this->value != NULL) + _CLDELETE_LARRAY( (TCHAR*)this->value); + this->value = _value; + this->buffer_size = 0; + } + this->m_size = length; + this->ownValue = copyData; +} + +StringReader::~StringReader(){ + if ( ownValue && this->value != NULL){ + TCHAR* value = (TCHAR*) this->value; + _CLDELETE_LARRAY(value); + this->value = NULL; + } +} + +size_t StringReader::size(){ + return m_size; +} +int32_t StringReader::read(const TCHAR*& start, int32_t min, int32_t max){ + if ( m_size == pos ) + return -1; + start = this->value + pos; + int32_t r = (int32_t)cl_min(cl_max(min,max),m_size-pos); + pos += r; + return r; +} +int64_t StringReader::position(){ + return pos; +} +void StringReader::setMinBufSize(int32_t /*s*/){ +} +int64_t StringReader::reset(int64_t pos){ + if ( pos >= 0 && pos < this->m_size ) + this->pos = pos; + return this->pos; +} +int64_t StringReader::skip(int64_t ntoskip){ + int64_t s = cl_min(ntoskip, m_size-pos); + this->pos += s; + return s; +} + + + + +AStringReader::AStringReader ( char* value, const int32_t length, bool copyData ) +{ + this->m_size = length; + this->pos = 0; + if ( copyData ){ + this->value = _CL_NEWARRAY(signed char, this->m_size); + strncpy((char*)this->value, value, this->m_size); + }else{ + this->value = (signed char*)value; + } + this->ownValue = copyData; +} + +AStringReader::AStringReader ( const char* value, const int32_t length ){ + if ( length >= 0 ) + this->m_size = length; + else + this->m_size = strlen(value); + this->pos = 0; + this->value = _CL_NEWARRAY(signed char, this->m_size); + strncpy((char*)this->value, value, this->m_size); + this->ownValue = true; +} +AStringReader::~AStringReader(){ + if ( ownValue ) + _CLDELETE_ARRAY(this->value); +} + +size_t AStringReader::size(){ + return m_size; +} +int32_t AStringReader::read(const signed char*& start, int32_t min, int32_t max){ + if ( m_size == pos ) + return -1; + start = this->value + pos; + int32_t r = (int32_t)cl_min(cl_max(min,max),m_size-pos); + pos += r; + return r; +} +int32_t AStringReader::read(const unsigned char*& start, int32_t min, int32_t max){ + if ( m_size == pos ) + return -1; + start = (unsigned char*)(this->value + pos); + int32_t r = (int32_t)cl_min(cl_max(min,max),m_size-pos); + pos += r; + return r; +} +int64_t AStringReader::position(){ + return pos; +} +void AStringReader::setMinBufSize(int32_t /*s*/){ +} +int64_t AStringReader::reset(int64_t pos){ + if ( pos >= 0 && pos < this->m_size ) + this->pos = pos; + return this->pos; +} +int64_t AStringReader::skip(int64_t ntoskip){ + int64_t s = cl_min(ntoskip, m_size-pos); + this->pos += s; + return s; +} + +class FileInputStream::Internal{ +public: + class JStreamsBuffer: public BufferedInputStreamImpl{ + int32_t fhandle; + protected: + int32_t fillBuffer(signed char* start, int32_t space){ + if (fhandle == 0) return -1; + // read into the buffer + int32_t nwritten = ::_read(fhandle, start, space); + + // check the file stream status + if (nwritten == -1 ) { + m_error = "Could not read from file"; + m_status = CL_NS(util)::Error; + if ( fhandle > 0 ){ + ::_close(fhandle); + fhandle = 0; + } + return -1; + }else if ( nwritten == 0 ) { + ::_close(fhandle); + fhandle = 0; + } + return nwritten; + } + public: + int encoding; + + JStreamsBuffer(int32_t fhandle, int32_t buffersize){ + this->fhandle = fhandle; + + m_size = fileSize(fhandle); // no need to know the file length... + + // allocate memory in the buffer + int32_t bufsize = (int32_t)((m_size <= buffersize) ?m_size+1 :buffersize); + setMinBufSize(bufsize); + } + void _setMinBufSize(int32_t bufsize){ + this->setMinBufSize(bufsize); + } + + ~JStreamsBuffer(){ + if ( fhandle > 0 ){ + if ( ::_close(fhandle) != 0 ) + _CLTHROWA(CL_ERR_IO, "File IO Close error"); + } + } + }; + + JStreamsBuffer* jsbuffer; + + Internal(const char* path, int32_t buffersize){ + int32_t fhandle = _cl_open(path, _O_BINARY | O_RDONLY | _O_RANDOM, _S_IREAD ); + + //Check if a valid handle was retrieved + if (fhandle < 0){ + int err = errno; + if ( err == ENOENT ) + _CLTHROWA(CL_ERR_IO, "File does not exist"); + else if ( err == EACCES ) + _CLTHROWA(CL_ERR_IO, "File Access denied"); + else if ( err == EMFILE ) + _CLTHROWA(CL_ERR_IO, "Too many open files"); + else + _CLTHROWA(CL_ERR_IO, "Could not open file"); + } + jsbuffer = new JStreamsBuffer(fhandle, buffersize); + + } + ~Internal(){ + delete jsbuffer; + } +}; + + +FileInputStream::FileInputStream ( const char* path, int32_t buflen ) +{ + if ( buflen == -1 ) + buflen = DEFAULT_BUFFER_SIZE; + _internal = new Internal(path, buflen); +} + +size_t FileInputStream::size(){ + return (size_t)_internal->jsbuffer->size(); +} + +FileInputStream::~FileInputStream () +{ + delete _internal; +} + +int32_t FileInputStream::read(const signed char*& start, int32_t min, int32_t max){ + return _internal->jsbuffer->read(start,min,max); +} +int64_t FileInputStream::position(){ + return _internal->jsbuffer->position(); +} +int64_t FileInputStream::reset(int64_t to){ + return _internal->jsbuffer->reset(to); +} +int64_t FileInputStream::skip(int64_t ntoskip){ + return _internal->jsbuffer->skip(ntoskip); +} +void FileInputStream::setMinBufSize(int32_t minbufsize){ + _internal->jsbuffer->_setMinBufSize(minbufsize); +} + + +FileReader::FileReader(const char *path, const char *enc, int32_t buflen) +{ + int encoding; + 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"); + init( _CLNEW FileInputStream(path, buflen), encoding); +} +FileReader::FileReader(const char *path, int encoding, int32_t buflen) +{ + init(_CLNEW FileInputStream(path, buflen), encoding); +} +FileReader::~FileReader(){ +} + +class SimpleInputStreamReader::Internal{ +public: + + class JStreamsBuffer: public BufferedReaderImpl{ + InputStream* input; + char utf8buf[6]; //< buffer used for converting utf8 characters + protected: + int readChar(){ + const signed char* buf; + if ( encoding == ASCII ){ + int32_t ret = this->input->read(buf, 1, 1) ; + if ( ret == 1 ){ + return buf[0]; + }else + return -1; + + }else if ( encoding == UCS2_LE ){ + int32_t ret = this->input->read(buf, 2, 2); + if ( ret < 0 ) + return -1; + else if ( ret == 1 ){ + return buf[0]; + }else{ + uint8_t c1 = *buf; + uint8_t c2 = *(buf+1); + return c1 | (c2<<8); + } + }else if ( encoding == UTF8 ){ + int32_t ret = this->input->read(buf, 1, 1); + + if ( ret == 1 ){ + int len = lucene_utf8charlen(buf[0]); + if ( len > 1 ){ + *utf8buf = buf[0]; + ret = this->input->read(buf, len-1, len-1); + }else + return buf[0]; + + if ( ret >= 0 ){ + if ( ret == len-1 ){ + memcpy(utf8buf+1,buf,ret); + wchar_t wcbuf=0; + lucene_utf8towc(wcbuf, utf8buf); + return wcbuf; + } + } + }else if ( ret == -1 ) + return -1; + this->m_error = "Invalid multibyte sequence."; + this->m_status = CL_NS(util)::Error; + }else{ + this->m_error = "Unexpected encoding"; + this->m_status = CL_NS(util)::Error; + } + return -1; + } + int32_t fillBuffer(TCHAR* start, int32_t space){ + if ( input == NULL ) return -1; + + int c; + int32_t i; + for(i=0;im_status == CL_NS(util)::Ok ){ + if ( i == 0 ) + return -1; + break; + } + return -1; + } + start[i] = c; + } + return i; + } + public: + int encoding; + + JStreamsBuffer(InputStream* input, int encoding){ + this->input = input; + this->encoding = encoding; + setMinBufSize(1024); + } + virtual ~JStreamsBuffer(){ + _CLDELETE(input); + } + void _setMinBufSize(int32_t min){ + this->setMinBufSize(min); + } + }; + + JStreamsBuffer* jsbuffer; + + Internal(InputStream* input, int encoding){ + jsbuffer = new JStreamsBuffer(input, encoding); + } + ~Internal(){ + delete jsbuffer; + } +}; + +SimpleInputStreamReader::SimpleInputStreamReader(){ + _internal = NULL; +} +SimpleInputStreamReader::SimpleInputStreamReader(InputStream *i, int encoding){ + _internal = new Internal(i, encoding); +} +void SimpleInputStreamReader::init(InputStream *i, int encoding){ + _internal = new Internal(i, encoding); +} +SimpleInputStreamReader::~SimpleInputStreamReader(){ + delete _internal; +} + +int32_t SimpleInputStreamReader::read(const TCHAR*& start, int32_t min, int32_t max){ + return _internal->jsbuffer->read(start, min, max); +} +int64_t SimpleInputStreamReader::position(){ + return _internal->jsbuffer->position(); +} +int64_t SimpleInputStreamReader::reset(int64_t to){ + return _internal->jsbuffer->reset(to); +} +int64_t SimpleInputStreamReader::skip(int64_t ntoskip){ + return _internal->jsbuffer->skip(ntoskip); +} +size_t SimpleInputStreamReader::size(){ + return (size_t)_internal->jsbuffer->size(); +} +void SimpleInputStreamReader::setMinBufSize(int32_t minbufsize){ + _internal->jsbuffer->_setMinBufSize(minbufsize); +} + +class FilteredBufferedReader::Internal{ +public: + class JStreamsFilteredBuffer: public BufferedReaderImpl{ + Reader* input; + bool deleteInput; + protected: + int32_t fillBuffer(TCHAR* start, int32_t space){ + const TCHAR* buffer; + int32_t r = input->read(buffer, 1, space); + if ( r > 0 ) + _tcsncpy(start, buffer, r); + return r; + } + public: + JStreamsFilteredBuffer(Reader* input, bool deleteInput){ + this->input = input; + this->deleteInput = deleteInput; + } + ~JStreamsFilteredBuffer(){ + if ( deleteInput ) + _CLDELETE(input); + } + void _setMinBufSize(int32_t min){ + this->setMinBufSize(min); + } + }; + JStreamsFilteredBuffer* jsbuffer; + + Internal(Reader* reader, bool deleteReader){ + this->jsbuffer = new JStreamsFilteredBuffer(reader, deleteReader); + } + ~Internal(){ + delete jsbuffer; + } +}; +FilteredBufferedReader::FilteredBufferedReader(Reader* reader, bool deleteReader){ + _internal = new Internal(reader, deleteReader); +} +FilteredBufferedReader::~FilteredBufferedReader(){ + delete _internal; +} +int32_t FilteredBufferedReader::read(const TCHAR*& start, int32_t min, int32_t max){ + return _internal->jsbuffer->read(start,min,max); +} +int64_t FilteredBufferedReader::position(){ + return _internal->jsbuffer->position(); +} +int64_t FilteredBufferedReader::reset(int64_t p){ + return _internal->jsbuffer->reset(p); +} +int64_t FilteredBufferedReader::skip(int64_t ntoskip){ + return _internal->jsbuffer->skip(ntoskip); +} +size_t FilteredBufferedReader::size(){ + return (size_t)_internal->jsbuffer->size(); +} +void FilteredBufferedReader::setMinBufSize(int32_t minbufsize){ + return _internal->jsbuffer->_setMinBufSize(minbufsize); +} + + + + +class FilteredBufferedInputStream::Internal{ +public: + class JStreamsFilteredBuffer: public BufferedInputStreamImpl{ + InputStream* input; + bool deleteInput; + protected: + int32_t fillBuffer(signed char* start, int32_t space){ + const signed char* buffer; + int32_t r = input->read(buffer, 1, space); + if ( r > 0 ) + memcpy(start, buffer, r); + return r; + } + public: + JStreamsFilteredBuffer(InputStream* input, bool deleteInput){ + this->input = input; + this->deleteInput = deleteInput; + } + ~JStreamsFilteredBuffer(){ + if ( deleteInput ) + _CLDELETE(input); + } + void _setMinBufSize(int32_t min){ + this->setMinBufSize(min); + } + }; + JStreamsFilteredBuffer* jsbuffer; + + Internal(InputStream* input, bool deleteInput){ + this->jsbuffer = new JStreamsFilteredBuffer(input, deleteInput); + } + ~Internal(){ + delete jsbuffer; + } +}; +FilteredBufferedInputStream::FilteredBufferedInputStream(InputStream* input, bool deleteInput){ + _internal = new Internal(input, deleteInput); +} +FilteredBufferedInputStream::~FilteredBufferedInputStream(){ + delete _internal; +} +int32_t FilteredBufferedInputStream::read(const signed char*& start, int32_t min, int32_t max){ + return _internal->jsbuffer->read(start,min,max); +} +int64_t FilteredBufferedInputStream::position(){ + return _internal->jsbuffer->position(); +} +int64_t FilteredBufferedInputStream::reset(int64_t p){ + return _internal->jsbuffer->reset(p); +} +int64_t FilteredBufferedInputStream::skip(int64_t ntoskip){ + return _internal->jsbuffer->skip(ntoskip); +} +size_t FilteredBufferedInputStream::size(){ + return (size_t)_internal->jsbuffer->size(); +} +void FilteredBufferedInputStream::setMinBufSize(int32_t minbufsize){ + return _internal->jsbuffer->_setMinBufSize(minbufsize); +} + +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/util/Reader.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/util/Reader.h new file mode 100644 index 0000000..a523d33 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/util/Reader.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. +------------------------------------------------------------------------------*/ +#ifndef _lucene_util_Reader_ +#define _lucene_util_Reader_ + +#include "CLucene/util/CLStreams.h" +CL_NS_DEF(util) + +#error Reader has been refactored. It is recommended that you use strigi streams +#error for all input into CLucene. If, however, you dont want to use that dependency, +#error then you'll have to refactor your current code. The jstreams namespace +#error was completely removed + +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/util/StringIntern.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/util/StringIntern.cpp new file mode 100644 index 0000000..69199e6 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/util/StringIntern.cpp @@ -0,0 +1,122 @@ + /*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "_StringIntern.h" +CL_NS_DEF(util) + +typedef CL_NS(util)::CLHashMap __wcsintrntype; +typedef CL_NS(util)::CLHashMap __strintrntype; +__wcsintrntype StringIntern_stringPool(true); +__strintrntype StringIntern_stringaPool(true); + +bool StringIntern_blanksinitd=false; +__wcsintrntype::iterator StringIntern_wblank; + +//STATIC_DEFINE_MUTEX(StringIntern_THIS_LOCK); +DEFINE_MUTEX(StringIntern_THIS_LOCK) + + + void CLStringIntern::_shutdown(){ + #ifdef _DEBUG + SCOPED_LOCK_MUTEX(StringIntern_THIS_LOCK) + if ( StringIntern_stringaPool.size() > 0 ){ + printf("WARNING: stringaPool still contains intern'd strings (refcounts):\n"); + __strintrntype::iterator itr = StringIntern_stringaPool.begin(); + while ( itr != StringIntern_stringaPool.end() ){ + printf(" %s (%d)\n",(itr->first), (itr->second)); + ++itr; + } + } + + if ( StringIntern_stringPool.size() > 0 ){ + printf("WARNING: stringPool still contains intern'd strings (refcounts):\n"); + __wcsintrntype::iterator itr = StringIntern_stringPool.begin(); + while ( itr != StringIntern_stringPool.end() ){ + _tprintf(_T(" %s (%d)\n"),(itr->first), (itr->second)); + ++itr; + } + } + #endif + } + + const TCHAR* CLStringIntern::intern(const TCHAR* str){ + if ( str == NULL ) + return NULL; + if ( str[0] == 0 ) + return LUCENE_BLANK_STRING; + + SCOPED_LOCK_MUTEX(StringIntern_THIS_LOCK) + + __wcsintrntype::iterator itr = StringIntern_stringPool.find((TCHAR*)str); + if ( itr==StringIntern_stringPool.end() ){ + TCHAR* ret = STRDUP_TtoT(str); + StringIntern_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; // warning: a possible memory leak, since str may be never freed! + + SCOPED_LOCK_MUTEX(StringIntern_THIS_LOCK) + + __wcsintrntype::iterator itr = StringIntern_stringPool.find((TCHAR*)str); + if ( itr != StringIntern_stringPool.end() ){ + if ( (itr->second) == 1 ){ + StringIntern_stringPool.removeitr(itr); + return true; + }else + (itr->second)--; + } + return false; + } + + const char* CLStringIntern::internA(const char* str, const int8_t count, const bool use_provided){ + if ( str == NULL ) + return NULL; + if ( str[0] == 0 ) + return _LUCENE_BLANK_ASTRING; + + SCOPED_LOCK_MUTEX(StringIntern_THIS_LOCK) + + __strintrntype::iterator itr = StringIntern_stringaPool.find((char*)str); + if ( itr==StringIntern_stringaPool.end() ){ + char* ret = (use_provided) ? const_cast(str) : STRDUP_AtoA(str); + StringIntern_stringaPool[ret] = count; + return ret; + }else{ + if (use_provided) _CLDELETE_LCaARRAY((char*)str); // delete the provided string if already exists + (itr->second) = (itr->second) + count; + return itr->first; + } + } + + bool CLStringIntern::uninternA(const char* str, const int8_t count){ + if ( str == NULL ) + return false; + if ( str[0] == 0 ) + return false; // warning: a possible memory leak, since str may be never freed! + + SCOPED_LOCK_MUTEX(StringIntern_THIS_LOCK) + + __strintrntype::iterator itr = StringIntern_stringaPool.find((char*)str); + if ( itr!=StringIntern_stringaPool.end() ){ + if ( (itr->second) == count ){ + StringIntern_stringaPool.removeitr(itr); + return true; + }else + (itr->second) = (itr->second) - count; + } + return false; + } +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/util/ThreadLocal.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/util/ThreadLocal.cpp new file mode 100644 index 0000000..ed1b0eb --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/util/ThreadLocal.cpp @@ -0,0 +1,266 @@ +/*------------------------------------------------------------------------------ +* 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 + +#include "CLucene/_ApiHeader.h" +#include "CLucene/LuceneThreads.h" +#include "_ThreadLocal.h" +#include "CLucene/config/_threads.h" +#include + +CL_NS_DEF ( util ) + +/* +* The concept of ThreadLocal is that a ThreadLocal class stores specific values for each unique thread. +* Several thread-end detection techniques are used to delete the thread data if the thread dies before the ThreadLocal class is shut. +* +* The class->thread data mapping is stored in the _ThreadLocal class. +* The thread->datas mapping is in ThreadData. +*/ + + +//predefine for the shared code... +#if defined(_CL_HAVE_WIN32_THREADS) + #define INIT_THREAD(ret) ret=true + extern "C"{ + + //todo: move this to StdHeader and make it usable by other functions... + bool __stdcall DllMain( unsigned short hinstDLL, // DLL module handle + _cl_dword_t fdwReason, // reason called + void*) // reserved + { + if ( fdwReason == 3 ) + _ThreadLocal::UnregisterCurrentThread(); + + return true; + } + } +#elif defined(_CL_HAVE_PTHREAD) + pthread_key_t pthread_threadlocal_key; + pthread_once_t pthread_threadlocal_key_once = PTHREAD_ONCE_INIT; + #define INIT_THREAD(ret) \ + pthread_once(&pthread_threadlocal_key_once, pthread_threadlocal_make_key); \ + if (pthread_getspecific(pthread_threadlocal_key) == NULL) { pthread_setspecific(pthread_threadlocal_key, (void*)1); } \ + ret = true; + + //the function that is called when the thread shutsdown + void pthread_threadlocal_destructor(void* /*_holder*/){ + _ThreadLocal::UnregisterCurrentThread(); + } + //the key initialiser function + void pthread_threadlocal_make_key() + { + (void) pthread_key_create(&pthread_threadlocal_key, &pthread_threadlocal_destructor); + } +#endif + +class _ThreadLocal; + +/** +* List that holds the list of ThreadLocals that this thread has data in. +*/ +class ThreadLocals : private std::set<_ThreadLocal*> +{ +public: + void UnregisterThread(); + void add(_ThreadLocal* thread); + void remove(_ThreadLocal* thread); +}; + +//map of thread<>ThreadLocals +typedef CL_NS ( util ) ::CLMultiMap<_LUCENE_THREADID_TYPE, ThreadLocals*, + CL_NS ( util ) ::CLuceneThreadIdCompare, + CL_NS ( util ) ::Deletor::ConstNullVal<_LUCENE_THREADID_TYPE>, + CL_NS ( util ) ::Deletor::Object > ThreadDataType; +static ThreadDataType* threadData = NULL; + +#ifndef _CL_DISABLE_MULTITHREADING + //the lock for locking ThreadData + //we don't use STATIC_DEFINE_MUTEX, because then the initialization order will be undefined. + static _LUCENE_THREADMUTEX *threadData_LOCK = NULL; +#endif + + +class _ThreadLocal::Internal +{ + public: + typedef CL_NS ( util ) ::CLSet<_LUCENE_THREADID_TYPE, void*, + CL_NS ( util ) ::CLuceneThreadIdCompare, + CL_NS ( util ) ::Deletor::ConstNullVal<_LUCENE_THREADID_TYPE>, + CL_NS ( util ) ::Deletor::ConstNullVal > LocalsType; + LocalsType locals; + DEFINE_MUTEX ( locals_LOCK ) + AbstractDeletor* _deletor; + + Internal ( AbstractDeletor* _deletor ) : + locals ( false,false ) + { + this->_deletor = _deletor; + } + ~Internal() + { + //remove all the thread local data for this object + LocalsType::iterator itr = locals.begin(); + while ( itr != locals.end() ) + { + void* val = itr->second; + locals.removeitr ( itr ); + _deletor->Delete ( val ); + itr = locals.begin(); + } + + delete _deletor; + } +}; + +_ThreadLocal::_ThreadLocal ( CL_NS ( util ) ::AbstractDeletor* _deletor ) : + _internal ( _CLNEW Internal ( _deletor ) ) +{ + +} + +_ThreadLocal::~_ThreadLocal() +{ + setNull(); + UnregisterCurrentThread(); + RemoveThreadLocal( this ); + delete _internal; +} + + +void* _ThreadLocal::get() +{ + SCOPED_LOCK_MUTEX(_internal->locals_LOCK) + return _internal->locals.get ( _LUCENE_CURRTHREADID ); +} + +void _ThreadLocal::setNull() +{ + //just delete this thread from the locals list + _LUCENE_THREADID_TYPE id = _LUCENE_CURRTHREADID; + SCOPED_LOCK_MUTEX(_internal->locals_LOCK) + Internal::LocalsType::iterator itr = _internal->locals.find ( id ); + if ( itr != _internal->locals.end() ) + { + void* val = itr->second; + _internal->locals.removeitr ( itr ); + _internal->_deletor->Delete ( val ); + } +} + +void _ThreadLocal::set ( void* t ) +{ + if ( t == NULL ){ + setNull(); + return; + } + //make sure we have a threadlocal context (for cleanup) + bool ret; + INIT_THREAD(ret); + assert(ret); + + _LUCENE_THREADID_TYPE id = _LUCENE_CURRTHREADID; + + //drop a reference to this ThreadLocal in ThreadData + { +#ifndef _CL_DISABLE_MULTITHREADING + //slightly un-usual way of initialising mutex, + //because otherwise our initialisation order would be undefined + if ( threadData_LOCK == NULL ) + threadData_LOCK = _CLNEW _LUCENE_THREADMUTEX; + SCOPED_LOCK_MUTEX ( *threadData_LOCK ); +#endif + + if ( threadData == NULL ) + threadData = _CLNEW ThreadDataType ( false, true ); + + ThreadLocals* threadLocals = threadData->get(id); + if ( threadLocals == NULL ){ + threadLocals = _CLNEW ThreadLocals; + threadData->insert( std::pair(id,threadLocals)); + } + threadLocals->add(this); + } + + { + SCOPED_LOCK_MUTEX(_internal->locals_LOCK) + Internal::LocalsType::iterator itr = _internal->locals.find ( id ); + if ( itr != _internal->locals.end() ) + { + void* val = itr->second; + _internal->locals.removeitr ( itr ); + _internal->_deletor->Delete ( val ); + } + + if ( t != NULL ) + _internal->locals.put ( id, t ); + } + +} + +void _ThreadLocal::UnregisterCurrentThread() +{ + if ( threadData == NULL ) + return; + _LUCENE_THREADID_TYPE id = _LUCENE_CURRTHREADID; + SCOPED_LOCK_MUTEX ( *threadData_LOCK ); + + ThreadDataType::iterator itr = threadData->find(id); + if ( itr != threadData->end() ){ + ThreadLocals* threadLocals = itr->second; + threadLocals->UnregisterThread(); + threadData->removeitr(itr); + } +} + +void _ThreadLocal::RemoveThreadLocal( _ThreadLocal * tl ) +{ + if ( threadData == NULL ) + return; + + SCOPED_LOCK_MUTEX ( *threadData_LOCK ); + + ThreadDataType::iterator itr = threadData->begin(); + for( ThreadDataType::iterator itr = threadData->begin(); itr != threadData->end(); itr++ ) + { + ThreadLocals* threadLocals = itr->second; + threadLocals->remove( tl ); + // Remove empty threadLocals + } +} + +void _ThreadLocal::_shutdown() +{ +#ifndef _CL_DISABLE_MULTITHREADING + _CLDELETE(threadData_LOCK); +#endif + _CLDELETE(threadData); +} + + + +void ThreadLocals::UnregisterThread() +{ + //this should only be accessed from its own thread... if this changes, then this access has to be locked. + for( ThreadLocals::iterator iTLocal = begin(); iTLocal != end(); iTLocal++ ) + (*iTLocal)->setNull(); + clear(); +} +void ThreadLocals::add(_ThreadLocal* thread) +{ + //this should only be accessed from its own thread... if this changes, then this access has to be locked. + if( end() == find( thread ) ) + insert( thread ); +} +void ThreadLocals::remove(_ThreadLocal* thread) +{ + ThreadLocals::iterator iTLocal = find( thread ); + if( iTLocal != end() ) + erase( iTLocal ); +} + +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/util/VoidList.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/util/VoidList.h new file mode 100644 index 0000000..5abdd45 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/util/VoidList.h @@ -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. +------------------------------------------------------------------------------*/ +#ifndef _lucene_util_VoidList_ +#define _lucene_util_VoidList_ + +#include "Equators.h" +#include "CLucene/LuceneThreads.h" + +CL_NS_DEF(util) + +/** +* A template to encapsulate various list type classes +* @internal +*/ +template +class CLUCENE_INLINE_EXPORT __CLList:public _base,LUCENE_BASE { +private: + bool dv; +protected: + typedef _base base; +public: + 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 + void toArray(_kt* into) const{ + int i=0; + for ( const_iterator itr=base::begin();itr!=base::end();itr++ ){ + into[i] = *itr; + i++; + } + } + + //sets array to the contents of this array, terminating with a NULL pointer + //array must be size+1 + void toArray_nullTerminated(_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(size_t i, _kt val) { + if ( dv && i < base::size() ) + _valueDeletor::doDelete((*this)[i]); + if ( i+1 > base::size() ) base::resize(i+1); + (*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(size_t i, bool dontDelete=false){ + if ( i < base::size() ){ + 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 +class CLUCENE_INLINE_EXPORT 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 +//(This class is roughly equivalent to Vector, except that it is unsynchronized.) +#define CLArrayList CLVector +#define CLHashSet CLHashList +#define CLList CLVector + +//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 +#ifdef LUCENE_DISABLE_HASHING + #define CLHashList CLSetList +#else + +template +class CLUCENE_INLINE_EXPORT CLHashList:public __CLList<_kt, CL_NS_HASHING(_CL_HASH_SET)<_kt,_Comparator> , _valueDeletor> +{ +public: + CLHashList ( const bool deleteValue=true ): + __CLList<_kt, CL_NS_HASHING(_CL_HASH_SET)<_kt,_Comparator> , _valueDeletor>(deleteValue) + { + } +}; +#endif + +template +class CLUCENE_INLINE_EXPORT 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 +class CLUCENE_INLINE_EXPORT 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/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/util/VoidMap.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/util/VoidMap.h new file mode 100644 index 0000000..6917e41 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/util/VoidMap.h @@ -0,0 +1,333 @@ +/*------------------------------------------------------------------------------ +* 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_ + +#include "Equators.h" +#include "CLucene/LuceneThreads.h" + +#if defined(_CL_HAVE_TR1_UNORDERED_MAP) && defined(_CL_HAVE_TR1_UNORDERED_SET) +#if defined(_LIBCPP_VERSION) + #include + #include +#else + #include + #include +#endif +#elif defined(_CL_HAVE_HASH_MAP) && defined(_CL_HAVE_HASH_SET) + //hashing is all or nothing! + #include + #include +#elif defined(_CL_HAVE_EXT_HASH_MAP) && defined(_CL_HAVE_EXT_HASH_SET) + #include + #include +#elif !defined(LUCENE_DISABLE_HASHING) + #define LUCENE_DISABLE_HASHING +#endif + +CL_NS_DEF(util) + +/** +* A template to encapsulate various map type classes +* @internal +*/ +template +class CLUCENE_INLINE_EXPORT __CLMap:public _base,LUCENE_BASE { +protected: + bool dk; + bool dv; + typedef _base base; +public: + 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; + } + + ///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 static_cast<_vt>(0); + 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 NULL; + else + return itr->first; + }*/ + + void removeitr (iterator itr, const bool dontDeleteKey = false, const bool dontDeleteValue = false){ + if ( itr == base::end() ) return; + + //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(LUCENE_DISABLE_HASHING) + + //a CLSet with CLHashMap traits +template +class CLUCENE_INLINE_EXPORT 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); + } + + ///put the specified pair into the map. remove any old items first + ///\param k the key + ///\param v the value + virtual 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 ( _this::dk || _this::dv ) + _this::remove(k); + + (*this)[k] = v;; + } + +}; +#elif defined(_CL_HAVE_EXT_HASH_MAP) + //ext/hash_map syntax +//HashMap class is roughly equivalent to Hashtable, except that it is unsynchronized +template +class CLUCENE_INLINE_EXPORT CLHashMap:public __CLMap<_kt,_vt, + CL_NS_HASHING(_CL_HASH_MAP)<_kt,_vt, _Hasher,_Equals>, + _KeyDeletor,_ValueDeletor> +{ + typedef __CLMap<_kt,_vt, CL_NS_HASHING(_CL_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); + } + ///put the specified pair into the map. remove any old items first + ///\param k the key + ///\param v the value + virtual 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 ( _this::dk || _this::dv ) + _this::remove(k); + + (*this)[k] = v;; + } + +}; + +#elif defined(_CL_HAVE_HASH_MAP) + +//HashMap class is roughly equivalent to Hashtable, except that it is unsynchronized +template +class CLUCENE_INLINE_EXPORT CLHashMap:public __CLMap<_kt,_vt, + CL_NS_HASHING(_CL_HASH_MAP)<_kt,_vt, _Hasher>, + _KeyDeletor,_ValueDeletor> +{ + typedef __CLMap<_kt,_vt, CL_NS_HASHING(_CL_HASH_MAP)<_kt,_vt, _Hasher>, + _KeyDeletor,_ValueDeletor> _this; +public: + CLHashMap ( const bool deleteKey=false, const bool deleteValue=false ) + { + _this::setDeleteKey(deleteKey); + _this::setDeleteValue(deleteValue); + } + ///put the specified pair into the map. remove any old items first + ///\param k the key + ///\param v the value + virtual 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 ( _this::dk || _this::dv ) + _this::remove(k); + + (*this)[k] = v;; + } + +}; +#endif + +//A collection that contains no duplicates +//does not guarantee that the order will remain constant over time +template +class CLUCENE_INLINE_EXPORT 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); + } + ///put the specified pair into the map. remove any old items first + ///\param k the key + ///\param v the value + virtual 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 ( _this::dk || _this::dv ) + _this::remove(k); + + (*this)[k] = v;; + } + +}; + + +//A collection that can contains duplicates +template +class CLUCENE_INLINE_EXPORT 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); + } + + ///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 ( _this::dk || _this::dv ) + _this::remove(k); + + (*this)[k] = v;; + } +}; + + +//*** need to create a class that allows duplicates - use +//#define CLSet __CLMap +CL_NS_END + +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/util/_Arrays.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/util/_Arrays.h new file mode 100644 index 0000000..cd446bf --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/util/_Arrays.h @@ -0,0 +1,155 @@ +/*------------------------------------------------------------------------------ +* 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_ + + +CL_NS_DEF(util) + template + class Arrays{ + Arrays(){} + public: + static void fill( _type* a, int32_t alen, _type value ) { + for ( int32_t i = 0; i < alen; i++ ) { + a[i] = value; + } + } + static void sort(_type* a, int32_t alen, int32_t fromIndex, int32_t toIndex){ + 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 = cl_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 = cl_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 + class CLListEquals: + public CL_NS_STD(binary_function) + { + 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; + int32_t size = (int32_t)val1->size(); + if ( size != (int32_t)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/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/util/_FastCharStream.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/util/_FastCharStream.h new file mode 100644 index 0000000..ddb2b82 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/util/_FastCharStream.h @@ -0,0 +1,54 @@ +/*------------------------------------------------------------------------------ +* 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_ + + +CL_CLASS_DEF(util,BufferedReader) + +CL_NS_DEF(util) + + /** Ported implementation of the FastCharStream class. */ + class FastCharStream + { + static const int32_t maxRewindSize; + int32_t pos; + int32_t rewindPos; + int64_t resetPos; + int32_t col; + int32_t line; + // read character from stream throws an exception on error + void readChar(TCHAR &); + public: + BufferedReader* input; + + /// Initializes a new instance of the FastCharStream class LUCENE_EXPORT. + FastCharStream(BufferedReader* reader); + virtual ~FastCharStream(); + + void reset(); + + /// 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 True 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/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/util/_MD5Digester.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/util/_MD5Digester.h new file mode 100644 index 0000000..aff913a --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/util/_MD5Digester.h @@ -0,0 +1,110 @@ +///////////////////////////////////////////////////////////////////////// +// MD5.cpp +// Implementation file for MD5 class +// +// This C++ Class implementation of the original RSA Data Security, Inc. +// MD5 Message-Digest Algorithm is copyright (c) 2002, Gary McNickle. +// All rights reserved. This software is a derivative of the "RSA Data +// Security, Inc. MD5 Message-Digest Algorithm" +// +// You may use this software free of any charge, but without any +// warranty or implied warranty, provided that you follow the terms +// of the original RSA copyright, listed below. +// +// Original RSA Data Security, Inc. Copyright notice +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All +// rights reserved. +// +// License to copy and use this software is granted provided that it +// is identified as the "RSA Data Security, Inc. MD5 Message-Digest +// Algorithm" in all material mentioning or referencing this software +// or this function. +// License is also granted to make and use derivative works provided +// that such works are identified as "derived from the RSA Data +// Security, Inc. MD5 Message-Digest Algorithm" in all material +// mentioning or referencing the derived work. +// RSA Data Security, Inc. makes no representations concerning either +// the merchantability of this software or the suitability of this +// software for any particular purpose. It is provided "as is" +// without express or implied warranty of any kind. +// These notices must be retained in any copies of any part of this +// documentation and/or software. +///////////////////////////////////////////////////////////////////////// + +/*------------------------------------------------------------------------------ +* 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_MD5Digester_H +#define _lucene_util_MD5Digester_H + + +CL_NS_DEF(util) + +typedef unsigned short int uint2; + +char* PrintMD5(uint8_t md5Digest[16]); +char* MD5String(char* szString); +char* MD5File(char* szFilename); + +class md5 +{ +// Methods +public: + md5() { Init(); } + void Init(); + void Update(uint8_t* chInput, uint32_t nInputLen); + void Finalize(); + uint8_t* Digest() { return m_Digest; } + +private: + + void Transform(uint8_t* block); + void Encode(uint8_t* dest, uint32_t* src, uint32_t nLength); + void Decode(uint32_t* dest, uint8_t* src, uint32_t nLength); + + + inline uint32_t rotate_left(uint32_t x, uint32_t n) + { return ((x << n) | (x >> (32-n))); } + + inline uint32_t F(uint32_t x, uint32_t y, uint32_t z) + { return ((x & y) | (~x & z)); } + + inline uint32_t G(uint32_t x, uint32_t y, uint32_t z) + { return ((x & z) | (y & ~z)); } + + inline uint32_t H(uint32_t x, uint32_t y, uint32_t z) + { return (x ^ y ^ z); } + + inline uint32_t I(uint32_t x, uint32_t y, uint32_t z) + { return (y ^ (x | ~z)); } + + inline void FF(uint32_t& a, uint32_t b, uint32_t c, uint32_t d, uint32_t x, uint32_t s, uint32_t ac) + { a += F(b, c, d) + x + ac; a = rotate_left(a, s); a += b; } + + inline void GG(uint32_t& a, uint32_t b, uint32_t c, uint32_t d, uint32_t x, uint32_t s, uint32_t ac) + { a += G(b, c, d) + x + ac; a = rotate_left(a, s); a += b; } + + inline void HH(uint32_t& a, uint32_t b, uint32_t c, uint32_t d, uint32_t x, uint32_t s, uint32_t ac) + { a += H(b, c, d) + x + ac; a = rotate_left(a, s); a += b; } + + inline void II(uint32_t& a, uint32_t b, uint32_t c, uint32_t d, uint32_t x, uint32_t s, uint32_t ac) + { a += I(b, c, d) + x + ac; a = rotate_left(a, s); a += b; } + +// Data +private: + uint32_t m_State[4]; + uint32_t m_Count[2]; + uint8_t m_Buffer[64]; + uint8_t m_Digest[16]; + uint8_t m_Finalized; + +}; + +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/util/_StringIntern.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/util/_StringIntern.h new file mode 100644 index 0000000..6e4c66c --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/util/_StringIntern.h @@ -0,0 +1,56 @@ +/*------------------------------------------------------------------------------ +* 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 + +//#include "Equators.h" +//#include "_VoidMap.h" + +CL_NS_DEF(util) + /** 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{ + public: + + /** + * Internalise the specified string. + * \return Returns a pointer to the internalised string + */ + static const char* internA(const char* str, const int8_t count=1, const bool use_provided=false); + + /** + * 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, const int8_t count=1); + + /** + * Internalise the specified string. + * \return Returns a pointer to the internalised string + */ + static const TCHAR* intern(const TCHAR* str); + + /** + * 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); + + /** Cleanup static data */ + static CLUCENE_LOCAL void _shutdown(); + }; + +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/util/_ThreadLocal.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/util/_ThreadLocal.h new file mode 100644 index 0000000..cd07757 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/util/_ThreadLocal.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. +------------------------------------------------------------------------------*/ +#ifndef _lucene_util_ThreadLocal_H +#define _lucene_util_ThreadLocal_H + +CL_NS_DEF ( util ) + + +/** +* A class which holds thread specific data. Calls to get() or set() or to the data kept in the _ThreadLocal +* is invalid after _ThreadLocal has been destroyed. +*/ +class _ThreadLocal +{ + private: + class Internal; + Internal* _internal; + public: + _ThreadLocal ( CL_NS ( util ) ::AbstractDeletor* _deletor ); + void* get(); + + /** + * 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. + */ + void setNull(); + void set ( void* t ); + virtual ~_ThreadLocal(); + + /** + * For early cleanup of thread data, call this function. It will clear out any + * thread specific data. Useful if you have a long running thread that doesn't + * need to access clucene anymore. + * The thread local code tries to call this automatically when a thread ends. + * Some implementations may be impossible (or not implemented) to detect thread + * endings... then you would have to run this function yourself. + */ + static void UnregisterCurrentThread(); + + static void RemoveThreadLocal( _ThreadLocal * tl ); + + + /** + * Call this function to shutdown CLucene + */ + static CLUCENE_LOCAL void _shutdown(); + + /** + * 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 ); +}; + + +/** +* A templated class of _ThreadLocal +* @see _ThreadLocal +*/ +template +class ThreadLocal: public _ThreadLocal +{ + public: + ThreadLocal() : + _ThreadLocal ( _CLNEW _deletor ) + { + + } + virtual ~ThreadLocal() + { + } + T get() + { + return ( T ) _ThreadLocal::get(); + } + void set ( T t ) + { + _ThreadLocal::set ( ( T ) t ); + } +}; +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/util/_VoidList.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/util/_VoidList.h new file mode 100644 index 0000000..00db373 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/util/_VoidList.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. +------------------------------------------------------------------------------*/ +#ifndef _lucene_util_VoidsList_ +#define _lucene_util_VoidsList_ + + /*#if defined(_LUCENE_PRAGMA_WARNINGS) + #pragma message ("==================Deprecated!!!==================") + #else + //#warning "==================Deprecated!!!==================" + #endif + + #include "VoidMapSetDefinitions.h"*/ + + #include "VoidList.h" +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/util/_VoidMap.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/util/_VoidMap.h new file mode 100644 index 0000000..e3860b9 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/util/_VoidMap.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. +------------------------------------------------------------------------------*/ +#ifndef _lucene_util_VoidsMap_ +#define _lucene_util_VoidsMap_ + + /*#if defined(_LUCENE_PRAGMA_WARNINGS) + #pragma message ("==================Deprecated!!!==================") + #else + //#warning "==================Deprecated!!!==================" + #endif + + #include "VoidMapSetDefinitions.h"*/ + + #include "VoidMap.h" +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/util/_bufferedstream.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/util/_bufferedstream.h new file mode 100644 index 0000000..8cb8243 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/util/_bufferedstream.h @@ -0,0 +1,185 @@ +/*------------------------------------------------------------------------------ +* 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. +------------------------------------------------------------------------------*/ +#ifndef JSTREAMS_BUFFEREDSTREAM_H +#define JSTREAMS_BUFFEREDSTREAM_H + +#include "_streambase.h" +#include "_streambuffer.h" +#include + +CL_NS_DEF(util) + +/** + * @brief Abstract implementation class providing a buffered input stream. + * + * You can inherit this class to provide buffered access to a + * resource. You just need to implement fillBuffer, and + * BufferedStream will do the rest. + */ +template +class BufferedStreamImpl : public StreamBase { +private: + StreamBuffer buffer; + bool finishedWritingToBuffer; + + void writeToBuffer(int32_t minsize, int32_t maxsize); +protected: + /** + * @brief Fill the buffer with the provided data + * + * This function should be implemented by subclasses. + * It should write up to @p space characters from the + * stream to the buffer position pointed to by @p start. + * + * If the end of the stream is encountered, -1 should be + * returned. + * + * If an error occurs, the status should be set to Error, + * an error message should be set and -1 should be returned. + * + * You should @em not call this function yourself. + * + * @param start where the data should be written to + * @param space the maximum amount of data to write + * @return Number of characters written, or -1 on error + **/ + virtual int32_t fillBuffer(T* start, int32_t space) = 0; + /** + * @brief Resets the buffer, allowing it to be used again + * + * This function resets the buffer, allowing it to be re-used. + */ + void resetBuffer() { + StreamBase::m_size = -1; + StreamBase::m_position = 0; + StreamBase::m_error.assign(""); + StreamBase::m_status = Ok; + buffer.readPos = buffer.start; + buffer.avail = 0; + finishedWritingToBuffer = false; + } + /** + * @brief Sets the minimum size of the buffer + */ + void setMinBufSize(int32_t s) { + buffer.makeSpace(s); + } + BufferedStreamImpl(); +public: + int32_t read(const T*& start, int32_t min, int32_t max); + int64_t reset(int64_t pos); + virtual int64_t skip(int64_t ntoskip); +}; + + +/** Abstract class for a buffered stream of bytes */ +typedef BufferedStreamImpl BufferedInputStreamImpl; + +/** Abstract class for a buffered stream of Unicode characters */ +typedef BufferedStreamImpl BufferedReaderImpl; + + +template +BufferedStreamImpl::BufferedStreamImpl() { + finishedWritingToBuffer = false; +} + +template +void +BufferedStreamImpl::writeToBuffer(int32_t ntoread, int32_t maxread) { + int32_t missing = ntoread - buffer.avail; + int32_t nwritten = 0; + while (missing > 0 && nwritten >= 0) { + int32_t space; + space = buffer.makeSpace(missing); + if (maxread >= ntoread && space > maxread) { + space = maxread; + } + T* start = buffer.readPos + buffer.avail; + nwritten = fillBuffer(start, space); + assert(StreamBase::m_status != Eof); + if (nwritten > 0) { + buffer.avail += nwritten; + missing = ntoread - buffer.avail; + } + } + if (nwritten < 0) { + finishedWritingToBuffer = true; + } +} +template +int32_t +BufferedStreamImpl::read(const T*& start, int32_t min, int32_t max) { + if (StreamBase::m_status == Error) return -2; + if (StreamBase::m_status == Eof) return -1; + + // do we need to read data into the buffer? + if (min > max) max = 0; + if (!finishedWritingToBuffer && min > buffer.avail) { + // do we have enough space in the buffer? + writeToBuffer(min, max); + if (StreamBase::m_status == Error) return -2; + } + + int32_t nread = buffer.read(start, max); + + StreamBase::m_position += nread; + if (StreamBase::m_position > StreamBase::m_size + && StreamBase::m_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 + StreamBase::m_status = Error; + StreamBase::m_error = "Stream is longer than specified."; + nread = -2; + } else if (StreamBase::m_status == Ok && buffer.avail == 0 + && finishedWritingToBuffer) { + StreamBase::m_status = Eof; + if (StreamBase::m_size == -1) { + StreamBase::m_size = StreamBase::m_position; + } + // save one call to read() by already returning -1 if no data is there + if (nread == 0) nread = -1; + } + return nread; +} +template +int64_t +BufferedStreamImpl::reset(int64_t newpos) { + assert(newpos >= 0); + if (StreamBase::m_status == Error) return -2; + // check to see if we have this position + int64_t d = StreamBase::m_position - newpos; + if (buffer.readPos - d >= buffer.start && -d < buffer.avail) { + StreamBase::m_position -= d; + buffer.avail += (int32_t)d; + buffer.readPos -= d; + StreamBase::m_status = Ok; + } + return StreamBase::m_position; +} +template +int64_t +BufferedStreamImpl::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; +} + +CL_NS_END + +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/util/_streambase.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/util/_streambase.h new file mode 100644 index 0000000..fba1a73 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/util/_streambase.h @@ -0,0 +1,210 @@ +/*------------------------------------------------------------------------------ +* 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. +------------------------------------------------------------------------------*/ +#ifndef JSTREAMS_STREAMBASE_H +#define JSTREAMS_STREAMBASE_H + +#include +#include + +#define INT32MAX 0x7FFFFFFFL + +CL_NS_DEF(util) + +/** Used to indicate the current status of a Stream */ +enum StreamStatus { + Ok /**< Stream is capable of being read from */, + Eof /**< The end of the Stream has been reached */, + Error /**< An error occurred. Use error() to find out more information */ +}; + +// java mapping: long=int64, int=int32, byte=uint8_t +/** + * The base of all Streams. Do not inherit directly from this class, + * but from (an instance of) StreamBase + * + * This class contains all the non-virtual StreamBase methods + * that don't depend on a specific Stream type + * + * Developer comment: This is needed because of win32 compilation. + * When we want to access a function outside a lib, we have to export them, + * but we can't export the template class because this would be somewhat + * stupid / does not work by design :) + * Because of this I've introduced this StreamBaseBase class + */ +class StreamBaseBase { //krazy:exclude=dpointer +protected: + /** The size of the stream (-1 if unknown) */ + int64_t m_size; + /** The position of the stream */ + int64_t m_position; + /** + * @brief String representation of the last error, or + * an empty string otherwise + */ + std::string m_error; + /** The status of the stream - see StreamStatus */ + StreamStatus m_status; +public: + /** + * @brief Constructor: initialises everything to sane defaults + **/ + StreamBaseBase() :m_size(-1), m_position(0), m_status(Ok) {} + /** + * @brief Destructor + **/ + virtual ~StreamBaseBase() {} + /** + * @brief Return a string representation of the last error. + * If no error has occurred, an empty string is returned. + **/ + const char* error() const { return m_error.c_str(); } + /** + * @brief Return the status of the stream. + **/ + StreamStatus status() const { return m_status; } + /** + * @brief Get the current position in the stream. + * The value obtained from this function can be used to reset the stream. + **/ + int64_t position() const { return m_position; } + /** + * @brief Return the size of the stream. + * + * The size of the stream is always known if the end of the stream + * has been reached. In all other cases, this may return -1 to + * indicate the size of the stream is unknown. + * + * @return the size of the stream, if it is known, or -1 if the size + * of the stream is unknown + **/ + int64_t size() const { return m_size; } +}; + +/** + * @brief Base class for stream read access to a data source. + * + * This class is based on the interface java.io.InputStream. It provides + * a uniform interface for accessing 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 filters or + * transformers. + */ +template +class StreamBase : public StreamBaseBase { +public: + StreamBase() { } + virtual ~StreamBase(){} + /** + * @brief Reads items from the stream and sets @p start to point to + * the first item that was read. + * + * Note: unless stated otherwise in the documentation for that method, + * this pointer will no longer be valid after calling another method of + * this class. The pointer will also no longer be valid after the class + * is destroyed. + * + * The functions inherited from StreamBaseBase do not invalidate the pointer. + * + * At least @p min items will be read from the stream, unless an error occurs + * or the end of the stream is reached. Under no circumstances will more than + * @p max items be read. + * + * If the end of the stream is reached before @p min items are read, the + * read is still considered successful and the number of items read will + * be returned. + * + * @param start pointer passed by reference that will be set to point to + * the retrieved array of items. If the end of the stream + * is encountered or an error occurs, the value of @p start + * is undefined + * @param min the minimal number of items to read from the stream. This + * value should be larger than 0. If it is 0 or smaller, the + * result is undefined + * @param max the maximal number of items to read from the stream. + * If this value is smaller than @p min, there is no limit on + * the number of items that can be read + * @return the number of items that were read. @c -1 is returned if + * end of the stream has already been reached. @c -2 is returned + * if an error has occurred + **/ + virtual int32_t read(const T*& start, int32_t min, int32_t max) = 0; + /** + * @brief Skip @p ntoskip items. + * + * If an error occurs, or the end of the stream is encountered, fewer + * than @p ntoskip items may be skipped. This can be checked by comparing + * the return value to @p ntoskip. + * + * Calling this function invalidates the data pointer that was obtained from + * StreamBase::read. + * + * @param ntoskip the number of items that should be skipped + * @return the number of items skipped + **/ + virtual int64_t skip(int64_t ntoskip); + /** + * @brief Repositions this stream to a given position. + * + * A call to StreamBase::reset is only guaranteed to be successful when + * the requested position lies within the segment of a stream + * corresponding to a valid pointer obtained from StreamBase::read. + * In this case, the pointer will not be invalidated. + * + * Calling this function invalidates the data pointer that was obtained from + * StreamBase::read unless the conditions outlined above apply. + * + * To read n items, leaving the stream at the same position as before, you + * can do the following: + * @code + * int64_t start = stream.position(); + * if ( stream.read(data, min, max) > 0 ) { + * stream.reset(start); + * // The data pointer is still valid here + * } + * @endcode + * + * @param pos the position in the stream you want to go to, relative to + * the start of the stream + * @return the new position in the stream + **/ + virtual int64_t reset(int64_t pos) = 0; +}; + + +template +int64_t +StreamBase::skip(int64_t ntoskip) { + const T* begin; + int32_t nread; + int64_t skipped = 0; + while (ntoskip > 0) { + // make sure we do not overflow uint32_t + int32_t maxstep = (int32_t)((ntoskip > 10000000) + ?10000000 :ntoskip); + // the default implementation is to simply read the data that we want + // to skip + nread = read(begin, 1, maxstep); + if (nread < -1 ) { + // an error occurred + return nread; + } else if (nread < 1) { + // the end of the stream was encountered + ntoskip = 0; + } else { + skipped += nread; + ntoskip -= nread; + } + } + return skipped; +} + +CL_NS_END + +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/util/_streambuffer.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/util/_streambuffer.h new file mode 100644 index 0000000..3967cc3 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/core/CLucene/util/_streambuffer.h @@ -0,0 +1,167 @@ +/*------------------------------------------------------------------------------ +* 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. +------------------------------------------------------------------------------*/ +#ifndef JSTREAM_STREAMBUFFER_H +#define JSTREAM_STREAMBUFFER_H + +#include +#include + +CL_NS_DEF(util) + +/** + * @internal + * @brief Provides a buffer for the use of BufferedStream + */ +template +class StreamBuffer { +private: +public: + /** + * @internal + * @brief Pointer to the start of the buffer. + */ + T* start; + /** + * @internal + * @brief Size of the buffer. + * + * Size of the memory pointed to by @p start, + * in multiples of sizeof(T) + */ + int32_t size; + /** + * @internal + * @brief Pointer to the current position the buffer. + */ + T* readPos; + /** + * @internal + * @brief The amount of data available in the buffer. + * + * The size of the used memory in the buffer, starting + * from @p readPos. @p readPos + @p avail must be + * greater than @p start + @p size. + */ + int32_t avail; + + /** + * @internal + * @brief Constructor: initialises members to sane defaults. + */ + StreamBuffer(); + /** + * @internal + * @brief Destructor: frees the memory used by the buffer. + */ + ~StreamBuffer(); + /** + * @internal + * @brief Sets the size of the buffer, allocating the necessary memory + * + * @param size the size that the buffer should be, in multiples + * of sizeof(T) + */ + void setSize(int32_t size); + /** + * @internal + * @brief Read data from the buffer + * + * Sets @p start to point to the data, starting + * at the item of data following the last item + * of data read. + * + * @param start pointer passed by reference. It will + * be set to point to the data read from the buffer + * @param max the maximum amount of data to read from + * the buffer + * @return the size of the data pointed to by @p start + * (always less than or equal to @p max) + */ + int32_t read(const T*& start, int32_t max=0); + + /** + * @internal + * @brief Prepares the buffer for a new write. + * + * This function invalidates any pointers + * previously obtained from read. + * + * @return the number of available places + **/ + int32_t makeSpace(int32_t needed); +}; + +template +StreamBuffer::StreamBuffer() { + readPos = start = 0; + size = avail = 0; +} +template +StreamBuffer::~StreamBuffer() { + std::free(start); +} +template +void +StreamBuffer::setSize(int32_t size) { + // store pointer information + int32_t offset = readPos - start; + + // allocate memory in the buffer + start = (T*)std::realloc(start, size*sizeof(T)); + this->size = size; + + // restore pointer information + readPos = start + offset; +} +template +int32_t +StreamBuffer::makeSpace(int32_t needed) { + // determine how much space is available for writing + int32_t space = size - (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 + std::memmove(start, readPos, avail*sizeof(T)); + space += 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 +int32_t +StreamBuffer::read(const T*& start, int32_t max) { + start = readPos; + if (max <= 0 || max > avail) { + max = avail; + } + readPos += max; + avail -= max; + return max; +} + +CL_NS_END + +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/shared/CLucene/LuceneThreads.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/shared/CLucene/LuceneThreads.h new file mode 100644 index 0000000..403a2e0 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/shared/CLucene/LuceneThreads.h @@ -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. +------------------------------------------------------------------------------*/ +#ifndef _LuceneThreads_h +#define _LuceneThreads_h + +#if defined(_CL_HAVE_PTHREAD) +#include +#endif + +CL_NS_DEF(util) +class CLuceneThreadIdCompare; + +#if defined(_CL_DISABLE_MULTITHREADING) + #define SCOPED_LOCK_MUTEX(theMutex) + #define DEFINE_MUTEX(x) + #define DEFINE_MUTABLE_MUTEX(x) + #define DEFINE_CONDITION(x) + #define STATIC_DEFINE_MUTEX(x) + #define CONDITION_WAIT(theMutex, theCondition) + #define CONDITION_NOTIFYALL(theCondition) + #define _LUCENE_CURRTHREADID 1 + #define _LUCENE_THREADID_TYPE int + #define _LUCENE_THREAD_FUNC(name, argName) int name(void* argName) + #define _LUCENE_THREAD_FUNC_RETURN(val) return (int)val; + #define _LUCENE_THREAD_CREATE(func, arg) (*func)(arg) + #define _LUCENE_THREAD_JOIN(value) //nothing to do... + #define _LUCENE_THREADMUTEX void* + + #define _LUCENE_ATOMIC_INC(theInteger) (++(*theInteger)) + #define _LUCENE_ATOMIC_DEC(theInteger) (--(*theInteger)) + #define _LUCENE_ATOMIC_INT int +#else + #if defined(_LUCENE_DONTIMPLEMENT_THREADMUTEX) + //do nothing + #else + class mutexGuard; + + #if defined(_CL_HAVE_PTHREAD) + #define _LUCENE_THREADID_TYPE pthread_t + #define _LUCENE_THREAD_FUNC(name, argName) void* name(void* argName) //< use this macro to correctly define the thread start routine + #define _LUCENE_THREAD_FUNC_RETURN(val) return (void*)val; + typedef void* (luceneThreadStartRoutine)(void* lpThreadParameter ); + + class CLUCENE_SHARED_EXPORT mutex_thread + { + public: + struct Internal; + Internal* _internal; + + mutex_thread(const mutex_thread& clone); + mutex_thread(); + ~mutex_thread(); + void lock(); + void unlock(); + static _LUCENE_THREADID_TYPE _GetCurrentThreadId(); + static _LUCENE_THREADID_TYPE CreateThread(luceneThreadStartRoutine* func, void* arg); + static void JoinThread(_LUCENE_THREADID_TYPE id); + void Wait(mutex_thread* shared_lock); + void NotifyAll(); + }; + class CLUCENE_SHARED_EXPORT shared_condition{ + private: + class Internal; + Internal* _internal; + public: + shared_condition(); + ~shared_condition(); + void Wait(mutex_thread* shared_lock); + void NotifyAll(); + }; + + #ifdef _CL_HAVE_GCC_ATOMIC_FUNCTIONS + #define _LUCENE_ATOMIC_INT uint32_t + #define _LUCENE_ATOMIC_INT_SET(x,v) x=v + #define _LUCENE_ATOMIC_INT_GET(x) x + #else + class CLUCENE_SHARED_EXPORT __LUCENE_ATOMIC_INT{ + public: + int value; + CL_NS(util)::mutex_thread THIS_LOCK; + }; + #define _LUCENE_ATOMIC_INT CL_NS(util)::__LUCENE_ATOMIC_INT + #define _LUCENE_ATOMIC_INT_SET(x,v) x.value=v + #define _LUCENE_ATOMIC_INT_GET(x) x.value + #endif + + class CLUCENE_SHARED_EXPORT atomic_threads{ + public: + static int32_t atomic_increment(_LUCENE_ATOMIC_INT* theInteger); + static int32_t atomic_decrement(_LUCENE_ATOMIC_INT* theInteger); + }; + + #define _LUCENE_ATOMIC_INC(theInteger) CL_NS(util)::atomic_threads::atomic_increment(theInteger) + #define _LUCENE_ATOMIC_DEC(theInteger) CL_NS(util)::atomic_threads::atomic_decrement(theInteger) + + #elif defined(_CL_HAVE_WIN32_THREADS) + #define _LUCENE_THREADID_TYPE uint64_t + #define _LUCENE_THREAD_FUNC(name, argName) void __stdcall name(void* argName) //< use this macro to correctly define the thread start routine + #define _LUCENE_THREAD_FUNC_RETURN(val) CL_NS(util)::mutex_thread::_exitThread(val) + + #define _LUCENE_ATOMIC_INC(theInteger) CL_NS(util)::mutex_thread::atomic_increment(theInteger) + #define _LUCENE_ATOMIC_DEC(theInteger) CL_NS(util)::mutex_thread::atomic_decrement(theInteger) +#ifdef _M_X64 + #define _LUCENE_ATOMIC_INT long long +#else + #define _LUCENE_ATOMIC_INT long +#endif + #define _LUCENE_ATOMIC_INT_SET(x,v) x=v + #define _LUCENE_ATOMIC_INT_GET(x) x + + typedef void (__stdcall luceneThreadStartRoutine)(void* lpThreadParameter ); + class CLUCENE_SHARED_EXPORT mutex_thread + { + private: + struct Internal; + Internal* _internal; + public: + mutex_thread(const mutex_thread& clone); + mutex_thread(); + ~mutex_thread(); + void lock(); + void unlock(); + static void _exitThread(int ret); + static _LUCENE_THREADID_TYPE _GetCurrentThreadId(); + static _LUCENE_THREADID_TYPE CreateThread(luceneThreadStartRoutine* func, void* arg); + static void JoinThread(_LUCENE_THREADID_TYPE id); + + static int32_t atomic_increment(_LUCENE_ATOMIC_INT* theInteger); + static int32_t atomic_decrement(_LUCENE_ATOMIC_INT* theInteger); + }; + class CLUCENE_SHARED_EXPORT shared_condition{ + private: + class Internal; + Internal* _internal; + public: + shared_condition(); + ~shared_condition(); + void Wait(mutex_thread* shared_lock); + void NotifyAll(); + }; + #else + #error A valid thread library was not found + #endif //mutex types + + #define _LUCENE_THREAD_CREATE(func, arg) CL_NS(util)::mutex_thread::CreateThread(func,arg) + #define _LUCENE_THREAD_JOIN(id) CL_NS(util)::mutex_thread::JoinThread(id) + #define _LUCENE_CURRTHREADID CL_NS(util)::mutex_thread::_GetCurrentThreadId() + #define _LUCENE_THREADMUTEX CL_NS(util)::mutex_thread + #define _LUCENE_THREADCOND CL_NS(util)::shared_condition + #endif //don't implement + + /** @internal */ + class CLUCENE_SHARED_EXPORT mutexGuard + { + private: + _LUCENE_THREADMUTEX* mrMutex; + mutexGuard(const mutexGuard& clone); + public: + mutexGuard( _LUCENE_THREADMUTEX& rMutex ); + ~mutexGuard(); + }; + + #define SCOPED_LOCK_MUTEX(theMutex) CL_NS(util)::mutexGuard theMutexGuard(theMutex); + #define DEFINE_MUTEX(theMutex) _LUCENE_THREADMUTEX theMutex; + #define DEFINE_CONDITION(theCondition) _LUCENE_THREADCOND theCondition; + #define DEFINE_MUTABLE_MUTEX(theMutex) mutable _LUCENE_THREADMUTEX theMutex; + #define STATIC_DEFINE_MUTEX(theMutex) static _LUCENE_THREADMUTEX theMutex; + + #define CONDITION_WAIT(theMutex, theCondition) theCondition.Wait(&theMutex); + #define CONDITION_NOTIFYALL(theCondition) theCondition.NotifyAll(); + +#endif //_CL_DISABLE_MULTITHREADING +CL_NS_END + +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/shared/CLucene/SharedHeader.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/shared/CLucene/SharedHeader.cpp new file mode 100644 index 0000000..61036f9 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/shared/CLucene/SharedHeader.cpp @@ -0,0 +1,33 @@ +/*------------------------------------------------------------------------------ +* 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/_SharedHeader.h" + + +#ifdef _CL_HAVE_SYS_STAT_H + #include +#endif + + +const TCHAR* _LUCENE_BLANK_STRING=_T(""); +const char* _LUCENE_BLANK_ASTRING=""; + + +#if defined(_ASCII) + #if defined(_LUCENE_PRAGMA_WARNINGS) + #pragma message ("==================Using ascii mode!!!==================") + #else + #warning "==================Using ascii mode!!!==================" + #endif +#endif + +wchar_t* lucene_wcsdup( const wchar_t* str ){ + size_t len = wcslen(str); + wchar_t* ret = (wchar_t*)malloc( (len + 1) * sizeof(wchar_t) ); + wcscpy(ret, str); + return ret; +} diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/shared/CLucene/SharedHeader.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/shared/CLucene/SharedHeader.h new file mode 100644 index 0000000..d43a149 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/shared/CLucene/SharedHeader.h @@ -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. +------------------------------------------------------------------------------*/ +#ifndef lucene_sharedheader_h +#define lucene_sharedheader_h + +/** +* This header contains definitions and macros for helping create cross-platform code. +* It is primarily for use by the clucene-core library, but is split off so that +* other applications such as the demo, test, benchmarks, etc can benefit from the +* cross platform code. Cross platform code is not distributed with the clucene-core +* and is not available through the shared library. +*/ + +#include "CLucene/clucene-config.h" + +//some early definitions +#if defined(_MSC_VER) || defined(__BORLANDC__) + #define _LUCENE_PRAGMA_WARNINGS //tell lucene to display warnings using pragmas instead of #warning +#endif + + +//////////////////////////////////////////////////////// +//Are we in unicode mode? +//////////////////////////////////////////////////////// +#if defined(_MBCS) || defined(_ASCII) + #undef _ASCII + #undef _UCS2 + #define _ASCII +#elif defined(_UNICODE) + #ifndef _UCS2 + #define _UCS2 + #endif +#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 +//////////////////////////////////////////////////////// + + + +//////////////////////////////////////////////////////// +//platform includes that MUST be included for the public headers to work... +//////////////////////////////////////////////////////// +#include //need this for wchar_t, size_t, NULL +#ifdef _CL_HAVE_STDINT_H + #include //need this for int32_t, etc +#endif +#include //required for float_t +#include //need to include this really early... + +#ifdef _CL_HAVE_TCHAR_H + #include //required for _T and TCHAR +#endif + +//////////////////////////////////////////////////////// +//namespace helper +//////////////////////////////////////////////////////// +#if defined(_LUCENE_DONTIMPLEMENT_NS_MACROS) + //do nothing +#elif !defined(DISABLE_NAMESPACE) && defined(_CL_HAVE_NAMESPACES) + #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 + + #define CL_STRUCT_DEF(sub,clazz) namespace lucene { namespace sub{ struct clazz; } } + #define CL_CLASS_DEF(sub,clazz) namespace lucene { namespace sub{ class clazz; } } + #define CL_CLASS_DEF2(sub,sub2, clazz) namespace lucene { namespace sub{ namespace sub2{ class clazz; } } } + + #define CL_TEMPATE_DEF(sub, clazz, typedefs) namespace lucene { namespace sub{ template class clazz; }} + #define CL_TYPE_DEF(sub, clazz, def) namespace lucene { namespace sub{ typedef def clazz; }} +#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) + #define CL_CLASS_DEF(sub,clazz) class clazz; + #define CL_CLASS_DEF2(sub,sub2, clazz) class clazz; +#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 +// +//////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////// +// EXPORTS definition +//////////////////////////////////////////////////////// +#if defined(_WIN32) || defined(_WIN64) + #define CLUCENE_EXPORT_DECL __declspec(dllexport) + #define CLUCENE_IMPORT_DECL __declspec(dllimport) + #define CLUCENE_LOCAL_DECL +#elif defined(_CL_HAVE_GCCVISIBILITYPATCH) + #define CLUCENE_EXPORT_DECL __attribute__ ((visibility("default"))) + #define CLUCENE_LOCAL_DECL __attribute__ ((visibility("hidden"))) + #define CLUCENE_IMPORT_DECL +#else + #define CLUCENE_EXPORT_DECL + #define CLUCENE_IMPORT_DECL + #define CLUCENE_LOCAL_DECL +#endif + +//define for the libraries +#if defined(clucene_shared_EXPORTS) + #define CLUCENE_SHARED_EXPORT CLUCENE_EXPORT_DECL + #define CLUCENE_LOCAL CLUCENE_LOCAL_DECL +#elif defined(MAKE_CLUCENE_SHARED_LIB) + #define CLUCENE_SHARED_EXPORT //don't export if we are building a static library +#else + #define CLUCENE_SHARED_EXPORT CLUCENE_IMPORT_DECL +#endif +#if defined(clucene_core_EXPORTS) + #define CLUCENE_EXPORT CLUCENE_EXPORT_DECL + #define CLUCENE_LOCAL CLUCENE_LOCAL_DECL +#elif defined(MAKE_CLUCENE_CORE_LIB) + #define CLUCENE_EXPORT +#else + #define CLUCENE_EXPORT CLUCENE_IMPORT_DECL +#endif +#if defined(clucene_contribs_lib_EXPORTS) + #define CLUCENE_CONTRIBS_EXPORT CLUCENE_EXPORT_DECL + #define CLUCENE_LOCAL CLUCENE_LOCAL_DECL +#elif defined(MAKE_CLUCENE_CONTRIBS_LIB) + #define CLUCENE_CONTRIBS_EXPORT +#else + #define CLUCENE_CONTRIBS_EXPORT CLUCENE_IMPORT_DECL +#endif +#ifndef CLUCENE_LOCAL + #define CLUCENE_LOCAL +#endif + +//inline definitions +#if defined(__MINGW32__) || defined(_MSC_VER) + #define CLUCENE_SHARED_INLINE_EXPORT + #define CLUCENE_INLINE_EXPORT + #define CLUCENE_CONTRIBS_INLINE_EXPORT +#else + #define CLUCENE_SHARED_INLINE_EXPORT CLUCENE_SHARED_EXPORT + #define CLUCENE_INLINE_EXPORT CLUCENE_EXPORT + #define CLUCENE_CONTRIBS_INLINE_EXPORT CLUCENE_CONTRIBS_EXPORT +#endif +//////////////////////////////////////////////////////// + + +//todo: put this logic in cmake +#if defined(_MSC_VER) + #if _MSC_FULL_VER >= 140050320 + #define _CL_DEPRECATE_TEXT(_Text) __declspec(deprecated(_Text)) + #elif _MSC_VER >= 1300 + #define _CL_DEPRECATE_TEXT(_Text) __declspec(deprecated) + #else + #define _CL_DEPRECATE_TEXT(_Text) + #endif +#elif (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1)) + #define _CL_DEPRECATE_TEXT(_Text) __attribute__((__deprecated__)) +#else + #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.") +// +//////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////// +// boost stuff +//////////////////////////////////////////////////////// +#if defined(_MSC_VER) +# pragma warning (disable : 4251) // disable exported dll function +# endif + +//////////////////////////////////////////////////////// +//Class interfaces +//////////////////////////////////////////////////////// +#include "CLucene/debug/lucenebase.h" +//////////////////////////////////////////////////////// + +//memory handling macros/functions +#include "CLucene/debug/mem.h" + +#ifdef DMALLOC + #include + #include + #include +#endif + +#endif //lucene_sharedheader_h diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/shared/CLucene/_SharedHeader.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/shared/CLucene/_SharedHeader.h new file mode 100644 index 0000000..26d2633 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/shared/CLucene/_SharedHeader.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. +------------------------------------------------------------------------------*/ +#ifndef lucene_internal_sharedheader_h +#define lucene_internal_sharedheader_h + +#define LUCENE_INT32_MAX_SHOULDBE 0x7FFFFFFFL + +#include "CLucene/_clucene-config.h" +#include "CLucene/SharedHeader.h" + +//don't show deprecated warnings while building internally... +#undef _CL_DEPRECATE_TEXT +#define _CL_DEPRECATE_TEXT(_Text) + +#define LUCENE_INT64_MAX_SHOULDBE _ILONGLONG(0x7FFFFFFFFFFFFFFF) +#define LUCENE_INT64_MIN_SHOULDBE (-LUCENE_INT64_MAX_SHOULDBE - _ILONGLONG(1) ) + +//required globally (internally only) +#include +#include + +//we always need this stuff.... +#include "CLucene/debug/_condition.h" +#include "CLucene/LuceneThreads.h" +#include "CLucene/config/repl_tchar.h" +#include "CLucene/config/repl_wchar.h" +#include "CLucene/config/repl_wctype.h" //replacements for functions + +#define cl_min(a,b) ((a)>(b) ? (b) : (a)) +#define cl_min3(a,b,c) ((a)<(b) ? ((a)<(c) ? (a) : (c)) : ((b)<(c) ? (b) : (c))) +#define cl_max(a,b) ((a)>(b) ? (a): (b)) +#define cl_max3(a,b,c) ((a)>(b) ? ((a)>(c) ? (a) : (c)) : ((b)>(c) ? (b) : (c))) + +#ifdef _CL_HAVE_SAFE_CRT + #define cl_sprintf sprintf_s + #define cl_stprintf _stprintf_s + #define cl_strcpy(Dst,Src,DstLen) strcpy_s(Dst,DstLen,Src) +#else + #define cl_sprintf _snprintf + #define cl_stprintf _sntprintf + #define cl_strcpy(Dst,Src,DstLen) strcpy(Dst,Src) +#endif + + +///a blank string... +CLUCENE_SHARED_EXPORT extern const TCHAR* _LUCENE_BLANK_STRING; +#define LUCENE_BLANK_STRING _LUCENE_BLANK_STRING +CLUCENE_SHARED_EXPORT extern const char* _LUCENE_BLANK_ASTRING; +#define LUCENE_BLANK_ASTRING _LUCENE_BLANK_ASTRING + +#if defined(_WIN32) || defined(_WIN64) + #define PATH_DELIMITERA "\\" +#else + #define PATH_DELIMITERA "/" +#endif + +#define _LUCENE_SLEEP(ms) CL_NS(util)::Misc::sleep(ms) + +//if a wide character is being converted to a ascii character and it +//cannot fit, this character is used instead. +#define LUCENE_OOR_CHAR(c) ((char)(((unsigned short)c)&0xFF)) + + +#endif //lucene_internal_sharedheader_h diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/shared/CLucene/config/_gunichartables.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/shared/CLucene/config/_gunichartables.h new file mode 100644 index 0000000..182a870 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/shared/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/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/shared/CLucene/config/_threads.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/shared/CLucene/config/_threads.h new file mode 100644 index 0000000..b86dd24 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/shared/CLucene/config/_threads.h @@ -0,0 +1,125 @@ +/*------------------------------------------------------------------------------ +* 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 _config_threads_h +#define _config_threads_h + +#ifndef _CL_DISABLE_MULTITHREADING + #if defined(_LUCENE_DONTIMPLEMENT_THREADMUTEX) + //do nothing + #elif defined(_CL_HAVE_WIN32_THREADS) + //we have not explicity included windows.h and windows.h has + //not been included (check _WINBASE_), then we must define + //our own definitions to the thread locking functions: + #ifndef _WINBASE_ + extern "C"{ + struct CRITICAL_SECTION + { + struct critical_section_debug * DebugInfo; + long LockCount; + long RecursionCount; + void * OwningThread; + void * LockSemaphore; + _cl_dword_t SpinCount; + }; + + __declspec(dllimport) void __stdcall InitializeCriticalSection(CRITICAL_SECTION *); + __declspec(dllimport) void __stdcall EnterCriticalSection(CRITICAL_SECTION *); + __declspec(dllimport) void __stdcall LeaveCriticalSection(CRITICAL_SECTION *); + __declspec(dllimport) void __stdcall DeleteCriticalSection(CRITICAL_SECTION *); + __declspec(dllimport) void __stdcall ExitThread(_cl_dword_t); + + __declspec(dllimport) unsigned long __stdcall GetCurrentThreadId(); + +#ifdef _M_X64 + __declspec(dllimport) long long __stdcall _InterlockedIncrement64(__inout long long volatile*); + __declspec(dllimport) long long __stdcall _InterlockedDecrement64(__inout long long volatile*); +#else + __declspec(dllimport) long __stdcall InterlockedIncrement(long volatile*); + __declspec(dllimport) long __stdcall InterlockedDecrement(long volatile*); +#endif + typedef struct _SECURITY_ATTRIBUTES + { + _cl_dword_t nLength; + void* lpSecurityDescriptor; + bool bInheritHandle; + } SECURITY_ATTRIBUTES; + __declspec(dllimport) _cl_dword_t __stdcall WaitForSingleObject( void* hHandle, _cl_dword_t dwMilliseconds ); + __declspec(dllimport) void* __stdcall CreateEventA( SECURITY_ATTRIBUTES* lpEventAttributes, + bool bManualReset, bool bInitialState, char* lpName ); + __declspec(dllimport) bool __stdcall SetEvent(void* hEvent); + __declspec(dllimport) bool __stdcall CloseHandle(void* hObject); + void* _beginthread( void( __stdcall *start_address )( void * ), unsigned stack_size, void *arglist ); + } + #endif //_WINBASE_ + #elif defined(_CL_HAVE_PTHREAD) + #include + #endif +#endif + +CL_NS_DEF(util) + +#ifndef _CL_DISABLE_MULTITHREADING + +#if defined(_LUCENE_DONTIMPLEMENT_THREADMUTEX) + +#elif defined(_CL_HAVE_WIN32_THREADS) + 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()( uint64_t t1, uint64_t t2 ) const{ + return t1 < t2; + } + }; + + +#elif defined(_CL_HAVE_PTHREAD) + + 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{ + //pthread_equal should be used, but it returns only non-zero if equal, so we can't use it for order compare + return t1 < t2; + } + }; + +#endif //thread impl choice + + +#else //!_CL_DISABLE_MULTITHREADING + 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; + } + }; +#endif //!_CL_DISABLE_MULTITHREADING + +CL_NS_END + + +#endif //_config_threads_h diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/shared/CLucene/config/gunichartables.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/shared/CLucene/config/gunichartables.cpp new file mode 100644 index 0000000..a0cfb78 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/shared/CLucene/config/gunichartables.cpp @@ -0,0 +1,377 @@ +/* + * 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. + */ + #include "CLucene/_SharedHeader.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 ("===== Note: using internal character function for compatibility =====") +#else + #warning "===== Note: using internal character function for compatibility =====" +#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; + wchar_t ret=0; + lucene_utf8towc(ret,p); +#ifdef _UCS2 + return ret; +#else + return LUCENE_OOR_CHAR(ret); +#endif + }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); +#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); + + #ifdef _UCS2 + return ret; + #else + return 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/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/shared/CLucene/config/repl_lltot.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/shared/CLucene/config/repl_lltot.cpp new file mode 100644 index 0000000..37f2331 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/shared/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/_SharedHeader.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 = (int)(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/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/shared/CLucene/config/repl_tchar.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/shared/CLucene/config/repl_tchar.h new file mode 100644 index 0000000..159dcc1 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/shared/CLucene/config/repl_tchar.h @@ -0,0 +1,181 @@ +/*------------------------------------------------------------------------------ +* 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 _REPL_TCHAR_H +#define _REPL_TCHAR_H + +#ifndef _CL_HAVE_TCHAR_H + #if defined(_UCS2) + + //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 _tcsncat wcsncat + #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 + + //string compare + #ifdef _CL_HAVE_FUNCTION_WCSICMP + #define _tcsicmp wcsicmp //* case insensitive compare two string + #else + #define _tcsicmp wcscasecmp //* case insensitive compare two string + #endif + #if defined(_CL_HAVE_FUNCTION_WCSDUP) + #define _tcsdup wcsdup + #else + #define _tcsdup lucene_wcsdup + #endif + + //conversion functions + #define _tcstod wcstod //convert a string to a double + #define _tcstoi64 wcstoll //* convers a string to an 64bit bit integer + #define _itot _i64tot + #define _i64tot lltow //* converts a 64 bit integer to a string (with base) + #else //if defined(_ASCII) + + //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 _tcsncat strncat + #define _tcschr strchr + #define _tcsstr strstr + #define _tcslen strlen + #define _tcscmp strcmp + #define _tcsncmp strncmp + #define _tcsicmp strcasecmp + #define _tcscspn strcspn + #define _tcsdup strdup //string duplicate + //converstion methods + #define _tcstod strtod + #define _tcstoi64 strtoll + #define _itot _i64tot + #define _i64tot lltoa + + #endif + +#else //HAVE_TCHAR_H + #include + + //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 + +#ifndef _ttoi + #define _ttoi(x) (int)_tcstoi64(x,NULL,10) +#endif + +#ifndef _itot + #define _itot(i, buf, radix) lucene_i64tot(i, buf, radix) +#endif + +namespace std +{ +#ifndef tstring + #ifdef _UNICODE + typedef wstring tstring; + #else + typedef string tstring; + #endif +#endif +}; + +#define STRCPY_AtoA(target,src,len) strncpy(target,src,len) +#define STRDUP_AtoA(x) strdup(x) + +#if defined(_UCS2) + #define stringDuplicate(x) _tcsdup(x) + + #if defined(_CL_HAVE_FUNCTION_WCSDUP) + #define STRDUP_WtoW wcsdup + #else + #define STRDUP_WtoW lucene_wcsdup + #endif + #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) + #define STRDUP_AtoT STRDUP_AtoW + + #define STRDUP_WtoA(x) CL_NS(util)::Misc::_wideToChar(x) + #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 _tcscpy 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 stringDuplicate(x) strdup(x) + #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 _tcscpy STRCPY_AtoA +#endif + + +#endif //_REPL_TCHAR_H diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/shared/CLucene/config/repl_tcscasecmp.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/shared/CLucene/config/repl_tcscasecmp.cpp new file mode 100644 index 0000000..b2e27e8 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/shared/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/_SharedHeader.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/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/shared/CLucene/config/repl_tcslwr.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/shared/CLucene/config/repl_tcslwr.cpp new file mode 100644 index 0000000..90a9d2e --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/shared/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/_SharedHeader.h" + +TCHAR* lucene_tcslwr( TCHAR* str ) +{ + TCHAR* ret = str; + for ( ; *str; str++) *str = _totlower(*str); + return ret; +} diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/shared/CLucene/config/repl_tcstod.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/shared/CLucene/config/repl_tcstod.cpp new file mode 100644 index 0000000..0c52a59 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/shared/CLucene/config/repl_tcstod.cpp @@ -0,0 +1,24 @@ +/*------------------------------------------------------------------------------ +* 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/_SharedHeader.h" +#include "CLucene/util/Misc.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/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/shared/CLucene/config/repl_tcstoll.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/shared/CLucene/config/repl_tcstoll.cpp new file mode 100644 index 0000000..5798fbd --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/shared/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/_SharedHeader.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=str;p-- ){ + int i=LUCENE_TCSTOI64_RADIX(p[0],radix); + if ( pos == 0 ) + ret=i; + else + ret += (int64_t)pow((float_t)radix,(float_t)pos) * i; //todo: might be quicker with a different pow overload + + pos++; + } + return sign*ret; +} diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/shared/CLucene/config/repl_tprintf.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/shared/CLucene/config/repl_tprintf.cpp new file mode 100644 index 0000000..bbf0c93 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/shared/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/_SharedHeader.h" +#include "CLucene/util/StringBuffer.h" + +#include //MB_LEN_MAX + +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 + const 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((float_t)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 0 ){ + ob[v]='\0'; + fputs(ob,stdout); + } + pointer++; + } + + +#else + fputs(tmp->getBuffer(),stdout); +#endif + _CLDELETE(tmp); + } +} + +#ifdef _UCS2 +//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 = cl_min(count,(size_t)(buffer.length()+1)); + wcsncpy(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 = cl_min((size_t)count,buffer.length()+1); + wcsncpy(strbuf,buffer.getBuffer(),ret); + return ret; +} +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/shared/CLucene/config/repl_wchar.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/shared/CLucene/config/repl_wchar.h new file mode 100644 index 0000000..c3c0e61 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/shared/CLucene/config/repl_wchar.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. +------------------------------------------------------------------------------*/ +#ifndef _lucene_repl_wchar_h +#define _lucene_repl_wchar_h + +#include +#include "repl_tchar.h" +#ifdef _CL_HAVE_STRING_H + #include +#endif +#ifdef _CL_HAVE_WCHAR_H + #include +#endif + + +CLUCENE_SHARED_EXPORT int cl_tcscasefoldcmp(const TCHAR * dst, const TCHAR * src); +CLUCENE_SHARED_EXPORT TCHAR* cl_tcscasefold( TCHAR * str, int len=-1 ); + +//we provide utf8 conversion functions +CLUCENE_SHARED_EXPORT size_t lucene_utf8towc (wchar_t& ret, const char *s); +CLUCENE_SHARED_EXPORT size_t lucene_utf8towcs(wchar_t *, const char *, size_t maxslen); +CLUCENE_SHARED_EXPORT size_t lucene_wctoutf8 (char * ret, const wchar_t str); +CLUCENE_SHARED_EXPORT size_t lucene_wcstoutf8 (char *, const wchar_t *, size_t maxslen); +#ifdef _ASCII +#define lucene_wcstoutf8string(str,strlen) str +#else +CLUCENE_SHARED_EXPORT std::string lucene_wcstoutf8string(const wchar_t* str, size_t strlen); +#endif +CLUCENE_SHARED_EXPORT size_t lucene_utf8charlen(const unsigned char p); //< the number of characters that this first utf8 character will expect + +//string function replacements +#if defined(LUCENE_USE_INTERNAL_CHAR_FUNCTIONS) || (defined(_UCS2) && !defined(_CL_HAVE_FUNCTION_WCSCASECMP)) || (defined(_ASCII) && !defined(_CL_HAVE_FUNCTION_STRCASECMP)) + CLUCENE_SHARED_EXPORT 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_FUNCTION_WCSLWR)) || (defined(_ASCII) && !defined(_CL_HAVE_FUNCTION_STRLWR)) + CLUCENE_SHARED_EXPORT TCHAR* lucene_tcslwr( TCHAR* str ); + #undef _tcslwr + #define _tcslwr lucene_tcslwr +#endif + +//conversion functions +#if (defined(_ASCII) && !defined(_CL_HAVE_FUNCTION_LLTOA)) || (defined(_UCS2) && !defined(_CL_HAVE_FUNCTION_LLTOW)) + CLUCENE_SHARED_EXPORT TCHAR* lucene_i64tot( int64_t value, TCHAR* str, int radix); + #undef _i64tot + #define _i64tot lucene_i64tot +#endif +#if !defined(_CL_HAVE_FUNCTION_WCSDUP) + CLUCENE_SHARED_EXPORT wchar_t* lucene_wcsdup( const wchar_t* str); +#endif +#if (defined(_UCS2) && !defined(_CL_HAVE_FUNCTION_WCSTOLL)) || (defined(_ASCII) && !defined(_CL_HAVE_FUNCTION_STRTOLL)) + CLUCENE_SHARED_EXPORT int64_t lucene_tcstoi64(const TCHAR* str, TCHAR**end, int radix); + #undef _tcstoi64 + #define _tcstoi64 lucene_tcstoi64 +#endif +#if defined(_UCS2) && !defined(_CL_HAVE_FUNCTION_WCSTOD) + CLUCENE_SHARED_EXPORT double lucene_tcstod(const TCHAR *value, TCHAR **end); + #undef _tcstod + #define _tcstod lucene_tcstod +#endif + +//printf functions +#if (defined(_UCS2) && (!defined(_CL_HAVE_FUNCTION__SNWPRINTF)) || defined(_CL_HAVE_SNWPRINTF_BUG) ) + #undef _sntprintf + #define _sntprintf lucene_snwprintf + CLUCENE_SHARED_EXPORT int lucene_snwprintf(wchar_t* strbuf, size_t count, const wchar_t * format, ...); +#endif +#if defined(_UCS2) && !defined(_CL_HAVE_FUNCTION_WPRINTF) + #undef _tprintf + #define _tprintf lucene_wprintf + CLUCENE_SHARED_EXPORT void lucene_wprintf(const wchar_t * format, ...); +#endif +#if defined(_UCS2) && (!defined(_CL_HAVE_FUNCTION__VSNWPRINTF) || defined(_CL_HAVE_SNWPRINTF_BUG) ) + #undef _vsntprintf + #define _vsntprintf lucene_vsnwprintf + CLUCENE_SHARED_EXPORT int lucene_vsnwprintf(wchar_t * strbuf, size_t count, const wchar_t * format, va_list& ap); +#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/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/shared/CLucene/config/repl_wctype.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/shared/CLucene/config/repl_wctype.h new file mode 100644 index 0000000..f706428 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/shared/CLucene/config/repl_wctype.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_repl_wctype_h +#define _lucene_repl_wctype_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; +CLUCENE_SHARED_EXPORT bool cl_isletter(clunichar c); +CLUCENE_SHARED_EXPORT bool cl_isalnum(clunichar c); +CLUCENE_SHARED_EXPORT bool cl_isdigit(clunichar c); +CLUCENE_SHARED_EXPORT bool cl_isspace (clunichar c); +CLUCENE_SHARED_EXPORT TCHAR cl_tolower (TCHAR c); +CLUCENE_SHARED_EXPORT TCHAR cl_toupper (TCHAR c); + +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/shared/CLucene/config/threads.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/shared/CLucene/config/threads.cpp new file mode 100644 index 0000000..0b5f30a --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/shared/CLucene/config/threads.cpp @@ -0,0 +1,292 @@ +/*------------------------------------------------------------------------------ +* 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/_SharedHeader.h" +#include "CLucene/LuceneThreads.h" +#include "_threads.h" +#include + +CL_NS_DEF(util) + +#ifndef _CL_DISABLE_MULTITHREADING + +#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) + struct mutex_thread::Internal{ + CRITICAL_SECTION mtx; + }; + + mutex_thread::mutex_thread(const mutex_thread& clone): + _internal(new Internal) + { + InitializeCriticalSection(&_internal->mtx); + } + mutex_thread::mutex_thread(): + _internal(new Internal) + { + InitializeCriticalSection(&_internal->mtx); + } + + mutex_thread::~mutex_thread() + { + DeleteCriticalSection(&_internal->mtx); + delete _internal; + } + + void mutex_thread::lock() + { + EnterCriticalSection(&_internal->mtx); + } + + void mutex_thread::unlock() + { + LeaveCriticalSection(&_internal->mtx); + } + + _LUCENE_THREADID_TYPE mutex_thread::_GetCurrentThreadId(){ + return GetCurrentThreadId(); + } + void mutex_thread::_exitThread(int val){ + ExitThread(val); + } + + int32_t mutex_thread::atomic_increment(_LUCENE_ATOMIC_INT *theInteger){ +#ifdef _M_X64 + return _InterlockedIncrement64(theInteger); +#else + return InterlockedIncrement(theInteger); +#endif + } + int32_t mutex_thread::atomic_decrement(_LUCENE_ATOMIC_INT *theInteger){ +#ifdef _M_X64 + return _InterlockedDecrement64(theInteger); +#else + return InterlockedDecrement(theInteger); +#endif + } + + + + class shared_condition::Internal{ + public: + void* _event; + Internal(){ + _event = CreateEventA( NULL, false, false, NULL ); + } + ~Internal(){ + CloseHandle( _event ); + } + }; + shared_condition::shared_condition(){ + _internal = new Internal; + } + shared_condition::~shared_condition(){ + delete _internal; + } + void shared_condition::Wait(mutex_thread* shared_lock){ + shared_lock->unlock(); + _cl_dword_t dwRes = WaitForSingleObject( _internal->_event, 0xFFFFFFFF ); + assert ( 0x0 == dwRes ); + shared_lock->lock(); + } + void shared_condition::NotifyAll(){ + bool bRes = SetEvent(_internal->_event); + assert( bRes ); + } + + _LUCENE_THREADID_TYPE mutex_thread::CreateThread(luceneThreadStartRoutine* func, void* arg){ + return (_LUCENE_THREADID_TYPE) ::_beginthread (func, 0, arg); + } + void mutex_thread::JoinThread(_LUCENE_THREADID_TYPE id){ + WaitForSingleObject((void*)id, 0xFFFFFFFF); + } + + +#elif defined(_CL_HAVE_PTHREAD) + #ifndef _REENTRANT + #error ACK! You need to compile with _REENTRANT defined since this uses threads + #endif + + #ifdef _CL_HAVE_PTHREAD_MUTEX_RECURSIVE + bool mutex_pthread_attr_initd=false; + pthread_mutexattr_t mutex_thread_attr; + #endif + + #ifdef _CL__CND_DEBUG + #define _CLPTHREAD_CHECK(c,m) CND_PRECONDITION(c==0,m) + #else + #define _CLPTHREAD_CHECK(c,m) c; + #endif + + struct mutex_thread::Internal{ + pthread_mutex_t mtx; + #ifndef _CL_HAVE_PTHREAD_MUTEX_RECURSIVE + pthread_t lockOwner; + unsigned int lockCount; + #endif + }; + + mutex_thread::mutex_thread(const mutex_thread& /*clone*/): + _internal(new Internal) + { + #ifdef _CL_HAVE_PTHREAD_MUTEX_RECURSIVE + _CLPTHREAD_CHECK(pthread_mutex_init(&_internal->mtx, &mutex_thread_attr), "mutex_thread(clone) constructor failed") + #else + #if defined(__hpux) && defined(_DECTHREADS_) + _CLPTHREAD_CHECK(pthread_mutex_init(&_internal->mtx, pthread_mutexattr_default), "mutex_thread(clone) constructor failed") + #else + _CLPTHREAD_CHECK(pthread_mutex_init(&_internal->mtx, 0), "mutex_thread(clone) constructor failed") + #endif + _internal->lockCount=0; + _internal->lockOwner=0; + #endif + } + mutex_thread::mutex_thread(): + _internal(new Internal) + { + #ifdef _CL_HAVE_PTHREAD_MUTEX_RECURSIVE + if ( mutex_pthread_attr_initd == false ){ + pthread_mutexattr_init(&mutex_thread_attr); + pthread_mutexattr_settype(&mutex_thread_attr, PTHREAD_MUTEX_RECURSIVE); + mutex_pthread_attr_initd = true; + } + _CLPTHREAD_CHECK(pthread_mutex_init(&_internal->mtx, &mutex_thread_attr), "mutex_thread(clone) constructor failed") + #else + #if defined(__hpux) && defined(_DECTHREADS_) + _CLPTHREAD_CHECK(pthread_mutex_init(&_internal->mtx, pthread_mutexattr_default), "mutex_thread(clone) constructor failed") + #else + _CLPTHREAD_CHECK(pthread_mutex_init(&_internal->mtx, 0), "mutex_thread(clone) constructor failed") + #endif + _internal->lockCount=0; + _internal->lockOwner=0; + #endif + } + + mutex_thread::~mutex_thread() + { + _CLPTHREAD_CHECK(pthread_mutex_destroy(&_internal->mtx), "~mutex_thread destructor failed") + delete _internal; + } + + _LUCENE_THREADID_TYPE mutex_thread::_GetCurrentThreadId(){ + return pthread_self(); + } + + int32_t atomic_threads::atomic_increment(_LUCENE_ATOMIC_INT *theInteger){ + #ifdef _CL_HAVE_GCC_ATOMIC_FUNCTIONS + return __sync_add_and_fetch(theInteger, 1); + #else + SCOPED_LOCK_MUTEX(theInteger->THIS_LOCK) + return ++theInteger->value; + #endif + } + int32_t atomic_threads::atomic_decrement(_LUCENE_ATOMIC_INT *theInteger){ + #ifdef _CL_HAVE_GCC_ATOMIC_FUNCTIONS + return __sync_sub_and_fetch(theInteger, 1); + #else + SCOPED_LOCK_MUTEX(theInteger->THIS_LOCK) + return --theInteger->value; + #endif + } + + + _LUCENE_THREADID_TYPE mutex_thread::CreateThread(luceneThreadStartRoutine* func, void* arg){ + _LUCENE_THREADID_TYPE ret; + int nRes = pthread_create(&ret, NULL, func, arg); + assert( nRes == 0 ); + return ret; + } + void mutex_thread::JoinThread(_LUCENE_THREADID_TYPE id){ + pthread_join(id, NULL); + } + + void mutex_thread::lock() + { + #ifndef _CL_HAVE_PTHREAD_MUTEX_RECURSIVE + pthread_t currentThread = pthread_self(); + if( pthread_equal( _internal->lockOwner, currentThread ) ) { + ++_internal->lockCount; + } else { + _CLPTHREAD_CHECK(pthread_mutex_lock(&_internal->mtx), "mutex_thread::lock") + _internal->lockOwner = currentThread; + _internal->lockCount = 1; + } + #else + _CLPTHREAD_CHECK(pthread_mutex_lock(&_internal->mtx), "mutex_thread::lock") + #endif + } + + void mutex_thread::unlock() + { + #ifndef _CL_HAVE_PTHREAD_MUTEX_RECURSIVE + --_internal->lockCount; + if( _internal->lockCount == 0 ) + { + _internal->lockOwner = 0; + _CLPTHREAD_CHECK(pthread_mutex_unlock(&_internal->mtx), "mutex_thread::unlock") + } + #else + _CLPTHREAD_CHECK(pthread_mutex_unlock(&_internal->mtx), "mutex_thread::unlock") + #endif + } + + + struct shared_condition::Internal{ + pthread_cond_t condition; + Internal(){ + pthread_cond_init (&condition, NULL); + } + ~Internal(){ + pthread_cond_destroy(&condition); + } + }; + shared_condition::shared_condition(){ + _internal = new Internal; + } + shared_condition::~shared_condition(){ + delete _internal; + } + void shared_condition::Wait(mutex_thread* shared_lock){ + int res = 0; + res = pthread_cond_wait(&_internal->condition, &shared_lock->_internal->mtx); + assert(res == 0); + } + void shared_condition::NotifyAll(){ + int res = 0; + res = pthread_cond_broadcast(&_internal->condition); + assert(res == 0); + } + + +#endif //thread impl choice + + +mutexGuard::mutexGuard(const mutexGuard& /*clone*/){ + //no autoclone + mrMutex = NULL; +} +mutexGuard::mutexGuard( _LUCENE_THREADMUTEX& rMutex ) : + mrMutex(&rMutex) +{ + mrMutex->lock(); +} +mutexGuard::~mutexGuard() +{ + mrMutex->unlock(); +} + +#endif //!_CL_DISABLE_MULTITHREADING + +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/shared/CLucene/config/utf8.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/shared/CLucene/config/utf8.cpp new file mode 100644 index 0000000..0a9c1fe --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/shared/CLucene/config/utf8.cpp @@ -0,0 +1,249 @@ +/* + * 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/_SharedHeader.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] = (char)(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 number of p consumed for the character, or 0 on error + **/ +size_t lucene_utf8towc(wchar_t& pwc, const char *p) +{ + 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 = const_cast(str); + wchar_t *rp = result; + + while (rp < result + result_length && *sp!=0){ + size_t r = lucene_utf8towc(*rp,sp); + if ( r == 0 ) + return 0; + sp += r; + rp++; + } + + size_t ret = sp-str; + if ( ret < result_length ) + *rp = '\0'; + + 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 unsigned char c) +{ + int mask = 0; + int len=0; + + UTF8_COMPUTE (c, mask, len); + return len; +} +#ifndef _ASCII +//convert unicode string to a utf8 string +std::string lucene_wcstoutf8string(const wchar_t* str, size_t strlen){ + size_t i = 0; + std::string result; + char p[6]; + + while (i < strlen && str[i] != 0){ + result.append(p, lucene_wctoutf8(p,str[i++])); + } + + return result; +} +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/shared/CLucene/debug/_condition.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/shared/CLucene/debug/_condition.h new file mode 100644 index 0000000..a88856f --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/shared/CLucene/debug/_condition.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 __CONDITION_H +#define __CONDITION_H + +//todo: this is a hack +#undef CND_PRECONDITION + +/* +To enable condition debugging uncomment _CND_DEBUG in CLConfig.h +*/ + +#ifdef _CL__CND_DEBUG /* Don't include the debug code */ + /* _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 CLUCENE_SHARED_EXPORT __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 + +#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 + +//cnd-debug exit command +#ifndef debugFatalExit + #define debugFatalExit(ret) exit(ret) +#endif + + +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/shared/CLucene/debug/condition.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/shared/CLucene/debug/condition.cpp new file mode 100644 index 0000000..1343525 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/shared/CLucene/debug/condition.cpp @@ -0,0 +1,78 @@ +/*------------------------------------------------------------------------------ +* 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. +------------------------------------------------------------------------------*/ +#define _CL__CND_DEBUG +#include "CLucene/_SharedHeader.h" +#include "_condition.h" +#include "CLucene/util/Misc.h" + +#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]; + const 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); +} diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/shared/CLucene/util/Misc.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/shared/CLucene/util/Misc.cpp new file mode 100644 index 0000000..debce71 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/shared/CLucene/util/Misc.cpp @@ -0,0 +1,651 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "Misc.h" +#include +#include +#include + +#if defined(_CL_HAVE_SYS_TIME_H) +# include +#elif defined(_CL_HAVE_TIME_H) +# include +#endif +#ifdef _CL_HAVE_SYS_TIMEB_H + #include +#endif + +#if defined(_CL_HAVE_SYS_STAT_H) + #include +#endif +#ifdef _CL_HAVE_STRINGS_H + #include +#endif +#ifdef _CL_HAVE_UNISTD_H + #include +#endif + +#include +#include +#include "CLucene/util/_dirent.h" //if we have dirent, then the native one will be used + +//for zlib... +#include "zlib.h" +#if defined(MSDOS) || defined(OS2) || defined(WIN32) || defined(__CYGWIN__) +# include +# include +# define SET_BINARY_MODE(file) setmode(fileno(file), O_BINARY) +#else +# define SET_BINARY_MODE(file) +#endif +#define CL_Z_DEFAULT_CHUNK 1024 + + +#ifdef _CL_HAVE_FUNCTION_SLEEP + //don't ignore windows.h... breaks mingw32 in some cases. Define Sleep instead + extern "C" __declspec(dllimport) void __stdcall Sleep(_cl_dword_t); +#endif + +CL_NS_DEF(util) + +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 hashCode = 0; + for (size_t i = 0; i 50 ) // if it still doesn't show up, then we do some sleeping for the last 50ms + _LUCENE_SLEEP( 1 ); + } + + if( maxAttempts > 0 ) + maxAttempts--; + } + + return 0; +} + + +//static +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; +} + +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; +} + +//static +bool Misc::priv_isDotDir( const TCHAR* name ) +{ +if( name[0] == '\0' ) { + return (false); +} +if( name[0] == '.' && name[1] == '\0' ) { + return (true); +} +if( name[1] == '\0' ) { + return (false); +} +if( name[0] == '.' && name[1] == '.' && name[2] == '\0' ) { + return (true); +} + +return (false); +} + +//internal static function shared for clucene +string Misc::segmentname( const char* segment, const char* 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 != NULL, "ext is NULL"); + + + if ( x!=-1 ){ + char buf[30]; + _snprintf(buf,10,"%d",x); + return string(segment) + ext + buf; + }else{ + return string(segment) + ext; + } +} +void Misc::segmentname(char* buffer,int32_t bufferLen, const char* Segment, const char* ext, const int32_t x){ +//Func - Static Method +// Creates a filename in buffer by concatenating Segment with ext and x +//Pre - buffer != NULL +// Segment != NULL and holds the name of the segment +// ext != NULL and holds the extension +// 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(buffer != NULL, "buffer is NULL"); + CND_PRECONDITION(Segment != NULL, "Segment is NULL"); + CND_PRECONDITION(ext != NULL, "ext is NULL"); + + if ( x== -1 ) + _snprintf(buffer,bufferLen,"%s%s", Segment,ext ); + else + _snprintf(buffer,bufferLen,"%s%s%d", Segment,ext,x ); +} + + +//static +int32_t Misc::stringDifference(const TCHAR* s1, const int32_t len1, const TCHAR* s2, const 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; +} + +TCHAR* Misc::stringTrim(TCHAR* text) { + size_t j, i; + size_t len = _tcslen(text); + + for ( i=0;i i; --j ){ // find the last non-space character and store it as j + if ( ! _istspace(text[j]) ) { + break; + } + } + + if (i==0 && j==len-1) // prevent unnecessary copy + return text; + + if (i==0) + text[j+1]=0; + else { + j++; + _tcsncpy(text, text+i, j-i); + text[j-i] = 0; + } + + return text; +} + +TCHAR* Misc::wordTrim(TCHAR* text) { + size_t j, i; + size_t len = _tcslen(text); + + for ( i=0;i buf && value ); + + memcpy( retval, ptr, end - ptr ); + retval[end-ptr] = 0; + + return end-ptr; +} + +int64_t Misc::base36ToLong( const char* value ) { + char* ptr = (char*)value; + int64_t lval = 0; + + while ( *ptr != '\0' ) { + lval = isdigit(*ptr) ? ( 36 * lval ) + ( *ptr - '0' ) : ( 36 * lval ) + ( *ptr - 'a' + 10 ); + ptr++; + } + + return lval; +} + +bool Misc::listFiles(const char* directory, std::vector& files, bool fullPath){ + //clear old files + DIR* dir = opendir(directory); + if ( dir == NULL ) return false; + struct dirent* fl = readdir(dir); + struct cl_stat_t buf; + string path; + while ( fl != NULL ){ + path = string(directory) + "/" + fl->d_name; + int32_t ret = fileStat(path.c_str(),&buf); + if ( ret==0 && !(buf.st_mode & S_IFDIR) ) { + if ( (strcmp(fl->d_name, ".")) && (strcmp(fl->d_name, "..")) ) { + if ( fullPath ){ + files.push_back(path); + }else{ + files.push_back(fl->d_name); + } + } + } + fl = readdir(dir); + } + closedir(dir); + return true; +} + + +std::string Misc::toString(const bool value){ + return value ? "true" : "false"; +} +std::string Misc::toString(_LUCENE_THREADID_TYPE value){ + static int32_t nextindex = 0; + static std::map<_LUCENE_THREADID_TYPE, int32_t> ids; + if (ids.find(value) == ids.end()) { + ids[value] = nextindex++; + } + return toString(ids[value]); +} +std::string Misc::toString(const int32_t value){ + char buf[20]; + TCHAR tbuf[20]; + _i64tot(value, tbuf, 10); + STRCPY_TtoA(buf,tbuf,20); + return buf; +} +std::string Misc::toString(const int64_t value){ + char buf[20]; + TCHAR tbuf[20]; + _i64tot(value, tbuf, 10); + STRCPY_TtoA(buf,tbuf,20); + return buf; +} +std::string Misc::toString(const float_t value){ + char buf[20]; + _snprintf(buf,20,"%0.2f",(double)value); + return buf; +} + +void Misc::zerr(int ret, string& err) +{ + switch (ret) { + case Z_ERRNO: + err = "error occurred while reading or writing from the zlib streams"; + break; + case Z_STREAM_ERROR: + err = "invalid compression level"; + break; + case Z_DATA_ERROR: + err = "invalid or incomplete deflate data"; + break; + case Z_MEM_ERROR: + err = "out of memory"; + break; + case Z_VERSION_ERROR: + err ="zlib version mismatch"; + } +} + + + +/* Compress from file source to file dest until EOF on source. + def() returns Z_OK on success, Z_MEM_ERROR if memory could not be + allocated for processing, Z_STREAM_ERROR if an invalid compression + level is supplied, Z_VERSION_ERROR if the version of zlib.h and the + version of the library linked do not match, or Z_ERRNO if there is + an error reading or writing the files. */ +bool Misc::deflate(const uint8_t* in, size_t inlen, std::ostream& dest, string& err, int CHUNK, int level) +{ + int ret, flush; + unsigned have; + z_stream strm; + if ( level == -1 ) level = Z_BEST_COMPRESSION; + if ( CHUNK == -1 ) CHUNK = CL_Z_DEFAULT_CHUNK; + uint8_t* out = (uint8_t*)malloc(CHUNK); + + /* allocate deflate state */ + strm.zalloc = Z_NULL; + strm.zfree = Z_NULL; + strm.opaque = Z_NULL; + ret = deflateInit(&strm, level); + if (ret != Z_OK){ + free(out); + zerr(ret, err); + return false; + } + + /* compress until end of file */ + do { + strm.avail_in = inlen; + strm.next_in = (uint8_t*)in; + flush = Z_FINISH; + + /* run deflate() on input until output buffer not full, finish + compression if all of source has been read in */ + do { + strm.avail_out = CHUNK; + strm.next_out = out; + ret = ::deflate(&strm, flush); /* no bad return value */ + assert(ret != Z_STREAM_ERROR); /* state not clobbered */ + have = CHUNK - strm.avail_out; + dest.write( (char*)out,have); + if ( dest.fail() ) { + (void)deflateEnd(&strm); + free(out); + zerr(Z_ERRNO, err); + return false; + } + } while (strm.avail_out == 0); + assert(strm.avail_in == 0); /* all input will be used */ + + /* done when last data in file processed */ + } while (flush != Z_FINISH); + assert(ret == Z_STREAM_END); /* stream will be complete */ + + /* clean up and return */ + (void)deflateEnd(&strm); + free(out); + return true; +} + +/* Decompress from file source to file dest until stream ends or EOF. + inf() returns Z_OK on success, Z_MEM_ERROR if memory could not be + allocated for processing, Z_DATA_ERROR if the deflate data is + invalid or incomplete, Z_VERSION_ERROR if the version of zlib.h and + the version of the library linked do not match, or Z_ERRNO if there + is an error reading or writing the files. */ +bool Misc::inflate(const uint8_t* in, size_t inlen, std::ostream& dest, string& err, int CHUNK) +{ + int ret; + unsigned have; + z_stream strm; + if ( CHUNK == -1 ) CHUNK = CL_Z_DEFAULT_CHUNK; + uint8_t* out = (uint8_t*)malloc(CHUNK); + + /* allocate inflate state */ + strm.zalloc = Z_NULL; + strm.zfree = Z_NULL; + strm.opaque = Z_NULL; + strm.avail_in = 0; + strm.next_in = Z_NULL; + ret = inflateInit(&strm); + if (ret != Z_OK){ + free(out); + zerr(ret, err); + return false; + } + + /* decompress until deflate stream ends or end of file */ + do { + strm.avail_in = inlen; + if (strm.avail_in == 0) + break; + strm.next_in = (uint8_t*)in; + + /* run inflate() on input until output buffer not full */ + do { + strm.avail_out = CHUNK; + strm.next_out = out; + ret = ::inflate(&strm, Z_NO_FLUSH); + assert(ret != Z_STREAM_ERROR); /* state not clobbered */ + switch (ret) { + case Z_NEED_DICT: + ret = Z_DATA_ERROR; /* and fall through */ + case Z_DATA_ERROR: + case Z_MEM_ERROR: + (void)inflateEnd(&strm); + free(out); + zerr(ret, err); + return false; + } + have = CHUNK - strm.avail_out; + dest.write( (char*)out,have); + if ( dest.fail() ) { + (void)inflateEnd(&strm); + free(out); + zerr(Z_ERRNO, err); + return false; + } + } while (strm.avail_out == 0); + + /* done when inflate() says it's done */ + } while (ret != Z_STREAM_END); + + /* clean up and return */ + (void)inflateEnd(&strm); + free(out); + if ( ret == Z_STREAM_END ) + return true; + zerr(Z_DATA_ERROR, err); + return false; +} + +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/shared/CLucene/util/Misc.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/shared/CLucene/util/Misc.h new file mode 100644 index 0000000..aea7c42 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/shared/CLucene/util/Misc.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 _lucene_util_Misc_H +#define _lucene_util_Misc_H + +#include + +CL_NS_DEF(util) + /** A class containing various functions. + */ + class CLUCENE_SHARED_EXPORT Misc{ + static void zerr(int ret, std::string& err); + public: + static uint64_t currentTimeMillis(); + static const TCHAR* replace_all( const TCHAR* val, const TCHAR* srch, const TCHAR* repl ); + static bool dir_Exists(const char* path); + static int64_t file_Size(const char* path); + static int64_t filelength(int handle); + static void sleep(const int ms); + + /** + * Unlinks the given file, waits until dir_Exists is false. It makes maxAttempts + * attempts to remove the file. If maxAttemps is less than 0 then unlimited + * count of attempts is done. + * Returns 1 if deleted and dir_Exists returns false + * Returns 0 if deleted and dir_Exists returns still true + * Returns -1 if file can not be deleted. + */ + static int32_t file_Unlink(const char* path, int32_t maxAttempts = -1); + + static size_t ahashCode(const char* str); + static size_t ahashCode(const char* str, size_t len); + + 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 ); + 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 bool priv_isDotDir( const TCHAR* name ); + //Creates a filename by concatenating Segment with ext and x + static std::string segmentname(const char* segment, const char* ext, const int32_t x=-1 ); + //Creates a filename in buffer by concatenating Segment with ext and x + static void segmentname(char* buffer,int32_t bufferLen, const char* Segment, const char* ext, const 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, const int32_t s1Len, const TCHAR* s2, const int32_t s2Len); + + // In-place trimming for strings and words ("te st" will be returned by stringTrim, while wordTrim will return "te") + // This is by design only meant for use with on-memory strings, and calling it like stringTrim(_T("test")) will + // be errorneous + static TCHAR* stringTrim(TCHAR* s); + static TCHAR* wordTrim(TCHAR* s); + + static size_t longToBase( int64_t value, int32_t base, char* to ); //< length of to should be at least ((sizeof(unsigned long) << 3) + 1). returns actual length used + static int64_t base36ToLong( const char* value ); + + static std::string toString(const int32_t value); + static std::string toString(const int64_t value); + static std::string toString(const _LUCENE_THREADID_TYPE value); + static std::string toString(const bool value); + static std::string toString(const float_t value); + static std::string toString(const TCHAR* s, int32_t len=-1); + + #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); + static wchar_t* _charToWide(const char* s); + + static void _cpycharToWide(const char* s, wchar_t* d, size_t len); + static void _cpywideToChar(const wchar_t* s, char* d, size_t len); + #else + #define thashCode ahashCode + #endif + + /** List all files in dir. + * @param bool fullPath True to return entire path + */ + static bool listFiles(const char* dir, std::vector& files, bool fullPath=false); + + /** uncompress the source stream into the dest stream. + * Default CHUNK size is 1k + */ + static bool inflate(const uint8_t* source, size_t sourcelen, std::ostream& dest, std::string& err, int CHUNK=-1); + /** compress the source stream into the dest stream. + * Default CHUNK size is 1k + * Default level is Z_BEST_COMPRESSION + */ + static bool deflate(const uint8_t* source, size_t sourcelen, std::ostream& dest, std::string& err, int CHUNK=-1, int level=-1); + }; + +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/shared/CLucene/util/StringBuffer.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/shared/CLucene/util/StringBuffer.cpp new file mode 100644 index 0000000..63c78bb --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/shared/CLucene/util/StringBuffer.cpp @@ -0,0 +1,423 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.h" +#include "StringBuffer.h" +#include "Misc.h" +#include + +CL_NS_DEF(util) + + StringBuffer::StringBuffer(TCHAR* buf,size_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 size_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 = (size_t) _tcslen(value); + + //Calculate the space occupied in buffer by a copy of value + const size_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 + + // TODO: Should we really delete and recreate the buffer - perhaps just reseting len should suffice? + // We should really look into at least providing both options + + //Destroy the current buffer if present + _CLDELETE_LCARRAY(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 int64_t value, const int32_t _Radix) { + //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 _Radix + _i64tot(value, buf, _Radix); + //Have the converted integer now stored in buf appended to the string in buffer + append(buf); + } + + void StringBuffer::appendFloat(const float_t value, const size_t digits){ + //Func - Appends a float_t (after conversion to a character string) + //Pre - digits > 0. Indicates the minimum number of characters printed + //Post - The converted float_t 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 + assert(digits <= 8); + + //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 l = 99-_tcslen(buf); //how many digits we have to work with? + size_t dig = l< (size_t)digits ? l : digits; + if ( dig > 0 ){ + _tcscat(buf,_T(".")); //add a decimal point + + int64_t remi=(int64_t)((value-v)*pow((float_t)10,(float_t)(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) { + size_t numZeros = dig - (size_t)log10((float_t)remadj) - 1; + while(numZeros-- > 0 && numZeros < 10) + _tcscat(buf,_T("0")); //add a zero before the decimal point + } + + _i64tot(remadj,buf+_tcslen(buf),10); //add the remainder + } + + append(buf); + } + + void StringBuffer::appendBoost(const float_t boost){ + if (boost != 1.0f) { + appendChar(_T('^')); appendFloat(boost,1); + } + } + + void StringBuffer::appendBool(const bool value){ + append( value ? _T( "true" ) : _T( "false" )); + } + + 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; + } + + size_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; + } + + TCHAR* StringBuffer::giveBuffer() { + TCHAR* ret = getBuffer(); + buffer = NULL; + len = 0; + bufferLength = 0; + bufferOwner = false; + return ret; + } + + void StringBuffer::reserve(const size_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 size_t minLength, const size_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 (minLength >= skippingNInitialChars + len + 1,"skippingNInitialChars is not large enough"); + + //More aggressive growth strategy to offset smaller default buffer size: + if ( !bufferOwner ){ + assert(bufferLength>=minLength); + 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); + memset(tmp, 0, sizeof(TCHAR) * skippingNInitialChars); + + //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 + _CLDELETE_LCARRAY(buffer); + + //Assign the new buffer tmp to buffer + buffer = tmp; + } + + void StringBuffer::setCharAt(size_t pos, const TCHAR chr) { + CND_PRECONDITION (pos < len, "pos is not in string"); + buffer[pos] = chr; + } + + TCHAR StringBuffer::charAt(size_t pos) { + CND_PRECONDITION (pos < len, "pos is not in string"); + return buffer[pos]; + } + + void StringBuffer::insert(const size_t pos, TCHAR chr) { + CND_PRECONDITION (pos <= len, "pos is larger than string len"); + growBuffer(len + 1, 0); + memmove(&buffer[pos + 1], &buffer[pos], sizeof(TCHAR) * (len - pos)); + buffer[pos] = chr; + len++; + } + + void StringBuffer::insert(const size_t pos, const TCHAR* chrs, size_t length) { + CND_PRECONDITION (pos <= len, "pos is larger than string len"); + + if (length == -1) { + length = _tcslen(chrs); + } + + if (length > 0) { + growBuffer(len + length, 0); + memmove(&buffer[pos + length], &buffer[pos], sizeof(TCHAR) * (len - pos)); + memcpy(&buffer[pos], chrs, sizeof(TCHAR) * (length)); + len += length; + } + } + + void StringBuffer::deleteCharAt(size_t pos) { + CND_PRECONDITION (pos < len, "pos is larger than string len"); + + memmove(&buffer[pos], &buffer[pos + 1], sizeof(TCHAR) * (len - pos)); + len--; + buffer[len] = _T('\0'); + } + + void StringBuffer::deleteChars(size_t start, size_t end) { + CND_PRECONDITION (start <= end && end <= len, "start/end is not in string"); + + if (start < end) { + memmove(&buffer[start], &buffer[end], sizeof(TCHAR) * (len - end)); + buffer[len - (end - start)] = _T('\0'); + len -= end - start; + } + } + + void StringBuffer::toLower() { + _tcslwr(buffer); + } + + bool StringBuffer::substringEquals(size_t start, size_t end, const TCHAR* str, size_t length) const { + if (length == -1) { + length = _tcslen(str); + } + + if (end - start != length) { + return false; + } + + for (size_t c = start; c < end; c++) { + if (buffer[c] != str[c - start]) { + return false; + } + } + + return true; + } + +CL_NS_END diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/shared/CLucene/util/StringBuffer.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/shared/CLucene/util/StringBuffer.h new file mode 100644 index 0000000..52e4df4 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/shared/CLucene/util/StringBuffer.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. +------------------------------------------------------------------------------*/ +#ifndef _lucene_util_StringBuffer_ +#define _lucene_util_StringBuffer_ + +CL_NS_DEF(util) + class CLUCENE_SHARED_EXPORT StringBuffer{ + public: + ///Constructor. Allocates a buffer with the default length. + StringBuffer(); + ///Constructor. Allocates a buffer of length initSize + 1 + StringBuffer(const size_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,size_t maxlen, const bool consumeBuffer); + ///Destructor + virtual ~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) with a default radix of 10. Radixes lower than 10 not supported. + void appendInt(const int64_t value, const int32_t _Radix = 10); + ///Appends a float_t (after conversion to a character string) + void appendFloat(const float_t value, const size_t digits); + ///Appends a Lucene boost, formatted in the format used in the toString() functions; replaces JL's ToStringUtils::boost + void appendBoost(const float_t boost); + ///Appends a bool in the same way as java StringBuffer does (i.e. "true", "false" ) + void appendBool(const bool value); + ///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); + + StringBuffer& operator<< (const TCHAR* value) + { + append(value); + return *this; + } + StringBuffer& operator<< (const int64_t value) + { + appendInt(value); + return *this; + } + + void setCharAt(size_t pos, const TCHAR chr); + TCHAR charAt(size_t pos); + + void insert(const size_t pos, TCHAR chr); + void insert(const size_t pos, const TCHAR* chrs, size_t length = -1); + void deleteCharAt(size_t pos); + void deleteChars(size_t start, size_t end); + + void toLower(); + bool substringEquals(size_t start, size_t end, const TCHAR* str, size_t length = -1) const; + + ///Contains the length of string in the StringBuffer + ///Public so that analyzers can edit the length directly + size_t len; + ///Returns the length of the string in the StringBuffer + size_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(); + /** Returns a null terminated reference to the StringBuffer's text + * the StringBuffer's buffer is released so that the text doesn't need to be copied + */ + TCHAR* giveBuffer(); + + ///reserve a minimum amount of data for the buffer. + ///no change made if the buffer is already longer than length + void reserve(const size_t length); + private: + ///A buffer that contains strings + TCHAR* buffer; + ///The length of the buffer + size_t bufferLength; + bool bufferOwner; + + ///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 size_t minLength, const size_t skippingNInitialChars=0); + + }; +CL_NS_END +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/shared/CLucene/util/_dirent.h b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/shared/CLucene/util/_dirent.h new file mode 100644 index 0000000..46668ec --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/shared/CLucene/util/_dirent.h @@ -0,0 +1,109 @@ +/*------------------------------------------------------------------------------ +* 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(_CL_HAVE_DIRENT_H) && !defined(_CL_HAVE_SYS_NDIR_H) && !defined(_CL_HAVE_SYS_DIR_H) && !defined(_CL_HAVE_NDIR_H) + +#ifdef _WIN64 + typedef __int64 intptr_t; +#else + typedef int intptr_t; +#endif +#include + + +/** + * 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 + * Significantly revised and rewinddir, seekdir and telldir added by Colin + * Cut down again & changed by Ben van Klinken + * Peters + * + */ + +/** dirent structure - used by the dirent.h directory iteration functions */ +struct CLUCENE_SHARED_INLINE_EXPORT 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 CLUCENE_SHARED_INLINE_EXPORT 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. +*/ +CLUCENE_SHARED_EXPORT DIR* opendir (const char* filespec); + +/** +* Return a pointer to a dirent structure filled with the information on the +* next entry in the directory. +*/ +CLUCENE_SHARED_EXPORT struct dirent* readdir (DIR* dir); + +/** +* Frees up resources allocated by opendir. +*/ +CLUCENE_SHARED_EXPORT int32_t closedir (DIR* dir); + + +#elif defined (_CL_HAVE_DIRENT_H) +# include +# 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 +# endif +# if defined(_CL_HHAVE_SYS_DIR_H) +# include +# endif +# if defined(_CL_HHAVE_NDIR_H) +# include +# endif + +#endif //HAVE_DIRENT_H +#endif diff --git a/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/shared/CLucene/util/dirent.cpp b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/shared/CLucene/util/dirent.cpp new file mode 100644 index 0000000..cb1c331 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/BRCLucene/src/shared/CLucene/util/dirent.cpp @@ -0,0 +1,224 @@ +/*------------------------------------------------------------------------------ +* 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/_ApiHeader.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" +#include +#include + + +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 cl_stat_t rcs; + if ( fileStat(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 cl_stat_t 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 ( fileStat(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/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene.h new file mode 120000 index 0000000..1056795 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene.h @@ -0,0 +1 @@ +../../../BRCLucene/src/core/CLucene.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/CLConfig.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/CLConfig.h new file mode 120000 index 0000000..41e1b76 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/CLConfig.h @@ -0,0 +1 @@ +../../../../BRCLucene/src/core/CLucene/CLConfig.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/LuceneThreads.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/LuceneThreads.h new file mode 120000 index 0000000..207aab5 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/LuceneThreads.h @@ -0,0 +1 @@ +../../../../BRCLucene/src/shared/CLucene/LuceneThreads.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/SharedHeader.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/SharedHeader.h new file mode 120000 index 0000000..7e381f7 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/SharedHeader.h @@ -0,0 +1 @@ +../../../../BRCLucene/src/shared/CLucene/SharedHeader.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/StdHeader.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/StdHeader.h new file mode 120000 index 0000000..26bfabd --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/StdHeader.h @@ -0,0 +1 @@ +../../../../BRCLucene/src/core/CLucene/StdHeader.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/_ApiHeader.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/_ApiHeader.h new file mode 120000 index 0000000..3c06bf3 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/_ApiHeader.h @@ -0,0 +1 @@ +../../../../BRCLucene/src/core/CLucene/_ApiHeader.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/_SharedHeader.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/_SharedHeader.h new file mode 120000 index 0000000..bff44ba --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/_SharedHeader.h @@ -0,0 +1 @@ +../../../../BRCLucene/src/shared/CLucene/_SharedHeader.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/_clucene-config.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/_clucene-config.h new file mode 120000 index 0000000..952c43c --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/_clucene-config.h @@ -0,0 +1 @@ +../../../../BRCLucene/BRCLucene/src/CLucene/_clucene-config.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/analysis/AnalysisHeader.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/analysis/AnalysisHeader.h new file mode 120000 index 0000000..e054134 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/analysis/AnalysisHeader.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/analysis/AnalysisHeader.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/analysis/Analyzers.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/analysis/Analyzers.h new file mode 120000 index 0000000..8592491 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/analysis/Analyzers.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/analysis/Analyzers.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/analysis/CachingTokenFilter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/analysis/CachingTokenFilter.h new file mode 120000 index 0000000..64d815d --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/analysis/CachingTokenFilter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/analysis/CachingTokenFilter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/analysis/LanguageBasedAnalyzer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/analysis/LanguageBasedAnalyzer.h new file mode 120000 index 0000000..49b200f --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/analysis/LanguageBasedAnalyzer.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/analysis/LanguageBasedAnalyzer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/analysis/PorterStemmer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/analysis/PorterStemmer.h new file mode 120000 index 0000000..2dac27e --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/analysis/PorterStemmer.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/analysis/PorterStemmer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/analysis/cjk/CJKAnalyzer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/analysis/cjk/CJKAnalyzer.h new file mode 120000 index 0000000..3c3e644 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/analysis/cjk/CJKAnalyzer.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/analysis/cjk/CJKAnalyzer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/analysis/de/GermanAnalyzer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/analysis/de/GermanAnalyzer.h new file mode 120000 index 0000000..a85f2e7 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/analysis/de/GermanAnalyzer.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/analysis/de/GermanAnalyzer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/analysis/de/GermanStemFilter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/analysis/de/GermanStemFilter.h new file mode 120000 index 0000000..0609efd --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/analysis/de/GermanStemFilter.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/analysis/de/GermanStemFilter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/analysis/de/GermanStemmer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/analysis/de/GermanStemmer.h new file mode 120000 index 0000000..0b8b46e --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/analysis/de/GermanStemmer.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/analysis/de/GermanStemmer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/analysis/standard/StandardAnalyzer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/analysis/standard/StandardAnalyzer.h new file mode 120000 index 0000000..3aad2ae --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/analysis/standard/StandardAnalyzer.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/core/CLucene/analysis/standard/StandardAnalyzer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/analysis/standard/StandardFilter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/analysis/standard/StandardFilter.h new file mode 120000 index 0000000..720f637 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/analysis/standard/StandardFilter.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/core/CLucene/analysis/standard/StandardFilter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/analysis/standard/StandardTokenizer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/analysis/standard/StandardTokenizer.h new file mode 120000 index 0000000..8585feb --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/analysis/standard/StandardTokenizer.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/core/CLucene/analysis/standard/StandardTokenizer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/analysis/standard/StandardTokenizerConstants.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/analysis/standard/StandardTokenizerConstants.h new file mode 120000 index 0000000..775ea81 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/analysis/standard/StandardTokenizerConstants.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/core/CLucene/analysis/standard/StandardTokenizerConstants.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/clucene-config.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/clucene-config.h new file mode 120000 index 0000000..06186b8 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/clucene-config.h @@ -0,0 +1 @@ +../../../../BRCLucene/BRCLucene/src/CLucene/clucene-config.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/config/_gunichartables.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/config/_gunichartables.h new file mode 120000 index 0000000..27b1cfb --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/config/_gunichartables.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/shared/CLucene/config/_gunichartables.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/config/_threads.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/config/_threads.h new file mode 120000 index 0000000..c53c77d --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/config/_threads.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/shared/CLucene/config/_threads.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/config/repl_tchar.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/config/repl_tchar.h new file mode 120000 index 0000000..5a5ab82 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/config/repl_tchar.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/shared/CLucene/config/repl_tchar.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/config/repl_wchar.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/config/repl_wchar.h new file mode 120000 index 0000000..2b9a714 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/config/repl_wchar.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/shared/CLucene/config/repl_wchar.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/config/repl_wctype.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/config/repl_wctype.h new file mode 120000 index 0000000..af337f9 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/config/repl_wctype.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/shared/CLucene/config/repl_wctype.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/debug/_condition.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/debug/_condition.h new file mode 120000 index 0000000..e83cad2 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/debug/_condition.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/shared/CLucene/debug/_condition.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/debug/error.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/debug/error.h new file mode 120000 index 0000000..4c85225 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/debug/error.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/debug/error.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/debug/lucenebase.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/debug/lucenebase.h new file mode 120000 index 0000000..fc701c7 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/debug/lucenebase.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/debug/lucenebase.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/debug/mem.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/debug/mem.h new file mode 120000 index 0000000..a4ff6c6 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/debug/mem.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/debug/mem.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/document/DateField.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/document/DateField.h new file mode 120000 index 0000000..f200176 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/document/DateField.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/document/DateField.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/document/DateTools.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/document/DateTools.h new file mode 120000 index 0000000..02ced4a --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/document/DateTools.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/document/DateTools.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/document/Document.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/document/Document.h new file mode 120000 index 0000000..9c3440a --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/document/Document.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/document/Document.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/document/Field.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/document/Field.h new file mode 120000 index 0000000..484fa30 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/document/Field.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/document/Field.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/document/FieldSelector.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/document/FieldSelector.h new file mode 120000 index 0000000..5313ddf --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/document/FieldSelector.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/document/FieldSelector.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/document/NumberTools.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/document/NumberTools.h new file mode 120000 index 0000000..5d5e3f4 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/document/NumberTools.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/document/NumberTools.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/highlighter/Encoder.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/highlighter/Encoder.h new file mode 120000 index 0000000..8f708c2 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/highlighter/Encoder.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/highlighter/Encoder.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/highlighter/Formatter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/highlighter/Formatter.h new file mode 120000 index 0000000..392096c --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/highlighter/Formatter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/highlighter/Formatter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/highlighter/Fragmenter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/highlighter/Fragmenter.h new file mode 120000 index 0000000..ae47a4a --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/highlighter/Fragmenter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/highlighter/Fragmenter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/highlighter/HighlightScorer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/highlighter/HighlightScorer.h new file mode 120000 index 0000000..7202793 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/highlighter/HighlightScorer.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/highlighter/HighlightScorer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/highlighter/Highlighter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/highlighter/Highlighter.h new file mode 120000 index 0000000..3f143aa --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/highlighter/Highlighter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/highlighter/Highlighter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/highlighter/QueryScorer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/highlighter/QueryScorer.h new file mode 120000 index 0000000..f958c6e --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/highlighter/QueryScorer.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/highlighter/QueryScorer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/highlighter/QueryTermExtractor.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/highlighter/QueryTermExtractor.h new file mode 120000 index 0000000..5c61bf0 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/highlighter/QueryTermExtractor.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/highlighter/QueryTermExtractor.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/highlighter/Scorer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/highlighter/Scorer.h new file mode 120000 index 0000000..5fb1048 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/highlighter/Scorer.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/highlighter/Scorer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/highlighter/SimpleFragmenter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/highlighter/SimpleFragmenter.h new file mode 120000 index 0000000..51798bf --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/highlighter/SimpleFragmenter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/highlighter/SimpleFragmenter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/highlighter/SimpleHTMLEncoder.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/highlighter/SimpleHTMLEncoder.h new file mode 120000 index 0000000..25eeb58 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/highlighter/SimpleHTMLEncoder.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/highlighter/SimpleHTMLEncoder.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/highlighter/SimpleHTMLFormatter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/highlighter/SimpleHTMLFormatter.h new file mode 120000 index 0000000..a744a7e --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/highlighter/SimpleHTMLFormatter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/highlighter/SimpleHTMLFormatter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/highlighter/TextFragment.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/highlighter/TextFragment.h new file mode 120000 index 0000000..30d141d --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/highlighter/TextFragment.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/highlighter/TextFragment.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/highlighter/TokenGroup.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/highlighter/TokenGroup.h new file mode 120000 index 0000000..936a9a1 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/highlighter/TokenGroup.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/highlighter/TokenGroup.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/highlighter/TokenSources.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/highlighter/TokenSources.h new file mode 120000 index 0000000..4bea214 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/highlighter/TokenSources.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/highlighter/TokenSources.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/highlighter/WeightedTerm.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/highlighter/WeightedTerm.h new file mode 120000 index 0000000..0e569c7 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/highlighter/WeightedTerm.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/highlighter/WeightedTerm.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/DirectoryIndexReader.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/DirectoryIndexReader.h new file mode 120000 index 0000000..5c66ed7 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/DirectoryIndexReader.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/DirectoryIndexReader.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/IndexDeletionPolicy.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/IndexDeletionPolicy.h new file mode 120000 index 0000000..23edcc1 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/IndexDeletionPolicy.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/IndexDeletionPolicy.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/IndexModifier.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/IndexModifier.h new file mode 120000 index 0000000..0d73888 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/IndexModifier.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/IndexModifier.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/IndexReader.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/IndexReader.h new file mode 120000 index 0000000..aec2c7f --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/IndexReader.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/IndexReader.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/IndexWriter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/IndexWriter.h new file mode 120000 index 0000000..9a697be --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/IndexWriter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/IndexWriter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/MergePolicy.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/MergePolicy.h new file mode 120000 index 0000000..3d5f73a --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/MergePolicy.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/MergePolicy.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/MergeScheduler.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/MergeScheduler.h new file mode 120000 index 0000000..69732ad --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/MergeScheduler.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/MergeScheduler.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/MultiReader.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/MultiReader.h new file mode 120000 index 0000000..2db408a --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/MultiReader.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/MultiReader.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/MultipleTermPositions.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/MultipleTermPositions.h new file mode 120000 index 0000000..7917a1d --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/MultipleTermPositions.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/MultipleTermPositions.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/Payload.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/Payload.h new file mode 120000 index 0000000..3815610 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/Payload.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/Payload.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/Term.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/Term.h new file mode 120000 index 0000000..8ee534f --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/Term.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/Term.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/TermVector.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/TermVector.h new file mode 120000 index 0000000..71038d1 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/TermVector.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/TermVector.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/Terms.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/Terms.h new file mode 120000 index 0000000..1c2f3e5 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/Terms.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/Terms.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/_CompoundFile.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/_CompoundFile.h new file mode 120000 index 0000000..3c2fcd8 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/_CompoundFile.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_CompoundFile.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/_DocumentsWriter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/_DocumentsWriter.h new file mode 120000 index 0000000..70e4e2a --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/_DocumentsWriter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_DocumentsWriter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/_FieldInfo.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/_FieldInfo.h new file mode 120000 index 0000000..d066778 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/_FieldInfo.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_FieldInfo.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/_FieldInfos.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/_FieldInfos.h new file mode 120000 index 0000000..fef477b --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/_FieldInfos.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_FieldInfos.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/_FieldsReader.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/_FieldsReader.h new file mode 120000 index 0000000..42acd3b --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/_FieldsReader.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_FieldsReader.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/_FieldsWriter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/_FieldsWriter.h new file mode 120000 index 0000000..a894b57 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/_FieldsWriter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_FieldsWriter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/_IndexFileDeleter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/_IndexFileDeleter.h new file mode 120000 index 0000000..fd2767f --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/_IndexFileDeleter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_IndexFileDeleter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/_IndexFileNameFilter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/_IndexFileNameFilter.h new file mode 120000 index 0000000..7b314da --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/_IndexFileNameFilter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_IndexFileNameFilter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/_IndexFileNames.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/_IndexFileNames.h new file mode 120000 index 0000000..84f3bd1 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/_IndexFileNames.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_IndexFileNames.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/_MultiSegmentReader.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/_MultiSegmentReader.h new file mode 120000 index 0000000..51de9d9 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/_MultiSegmentReader.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_MultiSegmentReader.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/_SegmentHeader.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/_SegmentHeader.h new file mode 120000 index 0000000..4404cae --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/_SegmentHeader.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_SegmentHeader.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/_SegmentInfos.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/_SegmentInfos.h new file mode 120000 index 0000000..f9a5537 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/_SegmentInfos.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_SegmentInfos.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/_SegmentMergeInfo.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/_SegmentMergeInfo.h new file mode 120000 index 0000000..4a4184a --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/_SegmentMergeInfo.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_SegmentMergeInfo.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/_SegmentMergeQueue.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/_SegmentMergeQueue.h new file mode 120000 index 0000000..0fdafbc --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/_SegmentMergeQueue.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_SegmentMergeQueue.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/_SegmentMerger.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/_SegmentMerger.h new file mode 120000 index 0000000..bc1dd8b --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/_SegmentMerger.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_SegmentMerger.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/_SegmentTermEnum.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/_SegmentTermEnum.h new file mode 120000 index 0000000..002720a --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/_SegmentTermEnum.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_SegmentTermEnum.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/_SkipListReader.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/_SkipListReader.h new file mode 120000 index 0000000..6b8a8b0 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/_SkipListReader.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_SkipListReader.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/_SkipListWriter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/_SkipListWriter.h new file mode 120000 index 0000000..17cf80c --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/_SkipListWriter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_SkipListWriter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/_Term.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/_Term.h new file mode 120000 index 0000000..ca676c4 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/_Term.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_Term.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/_TermInfo.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/_TermInfo.h new file mode 120000 index 0000000..3c59195 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/_TermInfo.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_TermInfo.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/_TermInfosReader.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/_TermInfosReader.h new file mode 120000 index 0000000..5f137ef --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/_TermInfosReader.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_TermInfosReader.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/_TermInfosWriter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/_TermInfosWriter.h new file mode 120000 index 0000000..bf590b0 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/_TermInfosWriter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_TermInfosWriter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/_TermVector.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/_TermVector.h new file mode 120000 index 0000000..f1ee6f4 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/index/_TermVector.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_TermVector.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/queryParser/MultiFieldQueryParser.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/queryParser/MultiFieldQueryParser.h new file mode 120000 index 0000000..b9525c1 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/queryParser/MultiFieldQueryParser.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/queryParser/MultiFieldQueryParser.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/queryParser/QueryParser.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/queryParser/QueryParser.h new file mode 120000 index 0000000..23f0ac7 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/queryParser/QueryParser.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/queryParser/QueryParser.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/queryParser/QueryParserConstants.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/queryParser/QueryParserConstants.h new file mode 120000 index 0000000..d727749 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/queryParser/QueryParserConstants.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/queryParser/QueryParserConstants.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/queryParser/QueryParserTokenManager.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/queryParser/QueryParserTokenManager.h new file mode 120000 index 0000000..4c74b81 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/queryParser/QueryParserTokenManager.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/queryParser/QueryParserTokenManager.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/queryParser/QueryToken.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/queryParser/QueryToken.h new file mode 120000 index 0000000..67b9604 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/queryParser/QueryToken.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/queryParser/QueryToken.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/queryParser/_CharStream.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/queryParser/_CharStream.h new file mode 120000 index 0000000..3030f3b --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/queryParser/_CharStream.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/queryParser/_CharStream.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/queryParser/_FastCharStream.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/queryParser/_FastCharStream.h new file mode 120000 index 0000000..37e3f74 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/queryParser/_FastCharStream.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/queryParser/_FastCharStream.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/BooleanClause.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/BooleanClause.h new file mode 120000 index 0000000..944d581 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/BooleanClause.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/BooleanClause.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/BooleanQuery.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/BooleanQuery.h new file mode 120000 index 0000000..c684d29 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/BooleanQuery.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/BooleanQuery.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/CachingSpanFilter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/CachingSpanFilter.h new file mode 120000 index 0000000..58b93f6 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/CachingSpanFilter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/CachingSpanFilter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/CachingWrapperFilter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/CachingWrapperFilter.h new file mode 120000 index 0000000..90a1e09 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/CachingWrapperFilter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/CachingWrapperFilter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/ChainedFilter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/ChainedFilter.h new file mode 120000 index 0000000..d7c536c --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/ChainedFilter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/ChainedFilter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/Compare.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/Compare.h new file mode 120000 index 0000000..d226478 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/Compare.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/Compare.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/ConstantScoreQuery.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/ConstantScoreQuery.h new file mode 120000 index 0000000..bf45e1c --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/ConstantScoreQuery.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/ConstantScoreQuery.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/DateFilter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/DateFilter.h new file mode 120000 index 0000000..f346984 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/DateFilter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/DateFilter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/Explanation.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/Explanation.h new file mode 120000 index 0000000..d658350 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/Explanation.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/Explanation.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/FieldCache.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/FieldCache.h new file mode 120000 index 0000000..c5cfe49 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/FieldCache.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/FieldCache.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/FieldDoc.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/FieldDoc.h new file mode 120000 index 0000000..db06ecb --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/FieldDoc.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/FieldDoc.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/FieldSortedHitQueue.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/FieldSortedHitQueue.h new file mode 120000 index 0000000..81f498b --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/FieldSortedHitQueue.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/FieldSortedHitQueue.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/Filter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/Filter.h new file mode 120000 index 0000000..701d25a --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/Filter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/Filter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/FilteredTermEnum.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/FilteredTermEnum.h new file mode 120000 index 0000000..9c670e1 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/FilteredTermEnum.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/FilteredTermEnum.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/FuzzyQuery.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/FuzzyQuery.h new file mode 120000 index 0000000..4c553bf --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/FuzzyQuery.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/FuzzyQuery.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/Hits.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/Hits.h new file mode 120000 index 0000000..e6321cf --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/Hits.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/Hits.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/IndexSearcher.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/IndexSearcher.h new file mode 120000 index 0000000..aff1ec2 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/IndexSearcher.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/IndexSearcher.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/MatchAllDocsQuery.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/MatchAllDocsQuery.h new file mode 120000 index 0000000..bfeda5f --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/MatchAllDocsQuery.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/MatchAllDocsQuery.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/MultiPhraseQuery.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/MultiPhraseQuery.h new file mode 120000 index 0000000..4601f59 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/MultiPhraseQuery.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/MultiPhraseQuery.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/MultiSearcher.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/MultiSearcher.h new file mode 120000 index 0000000..26b7692 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/MultiSearcher.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/MultiSearcher.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/MultiTermQuery.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/MultiTermQuery.h new file mode 120000 index 0000000..b04b339 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/MultiTermQuery.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/MultiTermQuery.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/PhraseQuery.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/PhraseQuery.h new file mode 120000 index 0000000..eec87f1 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/PhraseQuery.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/PhraseQuery.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/PrefixQuery.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/PrefixQuery.h new file mode 120000 index 0000000..4fb6eee --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/PrefixQuery.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/PrefixQuery.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/Query.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/Query.h new file mode 120000 index 0000000..041a836 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/Query.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/Query.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/QueryFilter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/QueryFilter.h new file mode 120000 index 0000000..7daa032 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/QueryFilter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/QueryFilter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/RangeFilter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/RangeFilter.h new file mode 120000 index 0000000..21a3195 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/RangeFilter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/RangeFilter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/RangeQuery.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/RangeQuery.h new file mode 120000 index 0000000..c92e12a --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/RangeQuery.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/RangeQuery.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/Scorer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/Scorer.h new file mode 120000 index 0000000..214fd3e --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/Scorer.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/Scorer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/ScorerDocQueue.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/ScorerDocQueue.h new file mode 120000 index 0000000..d4f058e --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/ScorerDocQueue.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/ScorerDocQueue.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/SearchHeader.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/SearchHeader.h new file mode 120000 index 0000000..9779f35 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/SearchHeader.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/SearchHeader.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/Searchable.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/Searchable.h new file mode 120000 index 0000000..4d2aa09 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/Searchable.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/Searchable.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/Similarity.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/Similarity.h new file mode 120000 index 0000000..3b238d4 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/Similarity.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/Similarity.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/Sort.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/Sort.h new file mode 120000 index 0000000..15816e1 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/Sort.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/Sort.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/SpanFilter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/SpanFilter.h new file mode 120000 index 0000000..016615c --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/SpanFilter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/SpanFilter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/SpanFilterResult.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/SpanFilterResult.h new file mode 120000 index 0000000..1fb2f5d --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/SpanFilterResult.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/SpanFilterResult.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/SpanQueryFilter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/SpanQueryFilter.h new file mode 120000 index 0000000..089eea1 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/SpanQueryFilter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/SpanQueryFilter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/TermQuery.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/TermQuery.h new file mode 120000 index 0000000..a7ae74d --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/TermQuery.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/TermQuery.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/WildcardQuery.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/WildcardQuery.h new file mode 120000 index 0000000..e2b7117 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/WildcardQuery.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/WildcardQuery.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/WildcardTermEnum.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/WildcardTermEnum.h new file mode 120000 index 0000000..ebb467b --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/WildcardTermEnum.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/WildcardTermEnum.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/_BooleanScorer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/_BooleanScorer.h new file mode 120000 index 0000000..af79183 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/_BooleanScorer.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/_BooleanScorer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/_BooleanScorer2.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/_BooleanScorer2.h new file mode 120000 index 0000000..7c51fc3 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/_BooleanScorer2.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/_BooleanScorer2.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/_ConjunctionScorer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/_ConjunctionScorer.h new file mode 120000 index 0000000..05de6cd --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/_ConjunctionScorer.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/_ConjunctionScorer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/_DisjunctionSumScorer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/_DisjunctionSumScorer.h new file mode 120000 index 0000000..c0497b4 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/_DisjunctionSumScorer.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/_DisjunctionSumScorer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/_ExactPhraseScorer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/_ExactPhraseScorer.h new file mode 120000 index 0000000..41d028a --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/_ExactPhraseScorer.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/_ExactPhraseScorer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/_FieldCacheImpl.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/_FieldCacheImpl.h new file mode 120000 index 0000000..c0e4403 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/_FieldCacheImpl.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/_FieldCacheImpl.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/_FieldDocSortedHitQueue.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/_FieldDocSortedHitQueue.h new file mode 120000 index 0000000..9def8d9 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/_FieldDocSortedHitQueue.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/_FieldDocSortedHitQueue.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/_HitQueue.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/_HitQueue.h new file mode 120000 index 0000000..1bc72aa --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/_HitQueue.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/_HitQueue.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/_PhrasePositions.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/_PhrasePositions.h new file mode 120000 index 0000000..b487ca4 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/_PhrasePositions.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/_PhrasePositions.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/_PhraseQueue.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/_PhraseQueue.h new file mode 120000 index 0000000..9d88eb8 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/_PhraseQueue.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/_PhraseQueue.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/_PhraseScorer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/_PhraseScorer.h new file mode 120000 index 0000000..64c5309 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/_PhraseScorer.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/_PhraseScorer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/_SloppyPhraseScorer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/_SloppyPhraseScorer.h new file mode 120000 index 0000000..2c76b21 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/_SloppyPhraseScorer.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/_SloppyPhraseScorer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/_TermScorer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/_TermScorer.h new file mode 120000 index 0000000..728f66f --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/_TermScorer.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/_TermScorer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/spans/SpanFirstQuery.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/spans/SpanFirstQuery.h new file mode 120000 index 0000000..8b33223 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/spans/SpanFirstQuery.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/core/CLucene/search/spans/SpanFirstQuery.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/spans/SpanNearQuery.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/spans/SpanNearQuery.h new file mode 120000 index 0000000..3ba0b89 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/spans/SpanNearQuery.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/core/CLucene/search/spans/SpanNearQuery.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/spans/SpanNotQuery.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/spans/SpanNotQuery.h new file mode 120000 index 0000000..0e6fe55 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/spans/SpanNotQuery.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/core/CLucene/search/spans/SpanNotQuery.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/spans/SpanOrQuery.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/spans/SpanOrQuery.h new file mode 120000 index 0000000..6fa5608 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/spans/SpanOrQuery.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/core/CLucene/search/spans/SpanOrQuery.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/spans/SpanQuery.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/spans/SpanQuery.h new file mode 120000 index 0000000..68ee308 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/spans/SpanQuery.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/core/CLucene/search/spans/SpanQuery.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/spans/SpanScorer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/spans/SpanScorer.h new file mode 120000 index 0000000..17bf74e --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/spans/SpanScorer.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/core/CLucene/search/spans/SpanScorer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/spans/SpanTermQuery.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/spans/SpanTermQuery.h new file mode 120000 index 0000000..39f8484 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/spans/SpanTermQuery.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/core/CLucene/search/spans/SpanTermQuery.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/spans/SpanWeight.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/spans/SpanWeight.h new file mode 120000 index 0000000..ed11e43 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/spans/SpanWeight.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/core/CLucene/search/spans/SpanWeight.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/spans/Spans.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/spans/Spans.h new file mode 120000 index 0000000..0e6bc36 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/spans/Spans.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/core/CLucene/search/spans/Spans.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/spans/_EmptySpans.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/spans/_EmptySpans.h new file mode 120000 index 0000000..3306dd8 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/spans/_EmptySpans.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/core/CLucene/search/spans/_EmptySpans.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/spans/_NearSpansOrdered.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/spans/_NearSpansOrdered.h new file mode 120000 index 0000000..6ff53e3 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/spans/_NearSpansOrdered.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/core/CLucene/search/spans/_NearSpansOrdered.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/spans/_NearSpansUnordered.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/spans/_NearSpansUnordered.h new file mode 120000 index 0000000..578e834 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/spans/_NearSpansUnordered.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/core/CLucene/search/spans/_NearSpansUnordered.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/spans/_TermSpans.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/spans/_TermSpans.h new file mode 120000 index 0000000..5df50f3 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/search/spans/_TermSpans.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/core/CLucene/search/spans/_TermSpans.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/SnowballAnalyzer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/SnowballAnalyzer.h new file mode 120000 index 0000000..df1c345 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/SnowballAnalyzer.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/SnowballAnalyzer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/SnowballFilter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/SnowballFilter.h new file mode 120000 index 0000000..8df9fd0 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/SnowballFilter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/SnowballFilter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/include/libstemmer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/include/libstemmer.h new file mode 120000 index 0000000..b1aa938 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/include/libstemmer.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/include/libstemmer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/libstemmer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/libstemmer.h new file mode 120000 index 0000000..51082f8 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/libstemmer.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/libstemmer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/libstemmer/modules.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/libstemmer/modules.h new file mode 120000 index 0000000..fa1a1b8 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/libstemmer/modules.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/libstemmer/modules.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/runtime/api.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/runtime/api.h new file mode 120000 index 0000000..55a132e --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/runtime/api.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/runtime/api.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/runtime/header.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/runtime/header.h new file mode 120000 index 0000000..d057a30 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/runtime/header.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/runtime/header.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_danish.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_danish.h new file mode 120000 index 0000000..481c19f --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_danish.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_danish.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_dutch.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_dutch.h new file mode 120000 index 0000000..c53e039 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_dutch.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_dutch.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_english.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_english.h new file mode 120000 index 0000000..828e651 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_english.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_english.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_finnish.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_finnish.h new file mode 120000 index 0000000..5c85699 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_finnish.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_finnish.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_french.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_french.h new file mode 120000 index 0000000..8579461 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_french.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_french.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_german.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_german.h new file mode 120000 index 0000000..9b77b13 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_german.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_german.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_italian.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_italian.h new file mode 120000 index 0000000..c748e1c --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_italian.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_italian.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_norwegian.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_norwegian.h new file mode 120000 index 0000000..8807949 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_norwegian.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_norwegian.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_porter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_porter.h new file mode 120000 index 0000000..8af056e --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_porter.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_porter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_portuguese.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_portuguese.h new file mode 120000 index 0000000..e7b9b26 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_portuguese.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_portuguese.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_spanish.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_spanish.h new file mode 120000 index 0000000..1f80c8c --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_spanish.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_spanish.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_swedish.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_swedish.h new file mode 120000 index 0000000..946a29c --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_swedish.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_swedish.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_KOI8_R_russian.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_KOI8_R_russian.h new file mode 120000 index 0000000..836b287 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_KOI8_R_russian.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_KOI8_R_russian.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_danish.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_danish.h new file mode 120000 index 0000000..b6aa6b7 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_danish.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_danish.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_dutch.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_dutch.h new file mode 120000 index 0000000..1259511 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_dutch.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_dutch.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_english.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_english.h new file mode 120000 index 0000000..5d62fbb --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_english.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_english.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_finnish.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_finnish.h new file mode 120000 index 0000000..15a68dd --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_finnish.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_finnish.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_french.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_french.h new file mode 120000 index 0000000..1f93047 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_french.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_french.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_german.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_german.h new file mode 120000 index 0000000..3be5731 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_german.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_german.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_italian.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_italian.h new file mode 120000 index 0000000..8c3f3f4 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_italian.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_italian.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_norwegian.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_norwegian.h new file mode 120000 index 0000000..d3d5a13 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_norwegian.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_norwegian.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_porter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_porter.h new file mode 120000 index 0000000..56ac223 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_porter.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_porter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_portuguese.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_portuguese.h new file mode 120000 index 0000000..e13a4ee --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_portuguese.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_portuguese.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_russian.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_russian.h new file mode 120000 index 0000000..d0f3ae7 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_russian.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_russian.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_spanish.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_spanish.h new file mode 120000 index 0000000..4ef22ae --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_spanish.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_spanish.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_swedish.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_swedish.h new file mode 120000 index 0000000..941252b --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_swedish.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_swedish.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/store/Directory.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/store/Directory.h new file mode 120000 index 0000000..a7ee9fd --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/store/Directory.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/store/Directory.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/store/FSDirectory.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/store/FSDirectory.h new file mode 120000 index 0000000..8c2ed46 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/store/FSDirectory.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/store/FSDirectory.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/store/IndexInput.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/store/IndexInput.h new file mode 120000 index 0000000..60c84ee --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/store/IndexInput.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/store/IndexInput.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/store/IndexOutput.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/store/IndexOutput.h new file mode 120000 index 0000000..eca18f8 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/store/IndexOutput.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/store/IndexOutput.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/store/Lock.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/store/Lock.h new file mode 120000 index 0000000..7517270 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/store/Lock.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/store/Lock.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/store/LockFactory.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/store/LockFactory.h new file mode 120000 index 0000000..0610a0c --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/store/LockFactory.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/store/LockFactory.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/store/RAMDirectory.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/store/RAMDirectory.h new file mode 120000 index 0000000..e049713 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/store/RAMDirectory.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/store/RAMDirectory.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/store/_Lock.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/store/_Lock.h new file mode 120000 index 0000000..e0bcdb9 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/store/_Lock.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/store/_Lock.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/store/_MMapIndexInput.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/store/_MMapIndexInput.h new file mode 120000 index 0000000..222c25d --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/store/_MMapIndexInput.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/store/_MMapIndexInput.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/store/_RAMDirectory.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/store/_RAMDirectory.h new file mode 120000 index 0000000..392d6be --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/store/_RAMDirectory.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/store/_RAMDirectory.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/util/Array.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/util/Array.h new file mode 120000 index 0000000..b8a4b40 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/util/Array.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/util/Array.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/util/BitSet.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/util/BitSet.h new file mode 120000 index 0000000..b7b8811 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/util/BitSet.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/util/BitSet.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/util/CLStreams.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/util/CLStreams.h new file mode 120000 index 0000000..c1b3d84 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/util/CLStreams.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/util/CLStreams.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/util/Equators.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/util/Equators.h new file mode 120000 index 0000000..d162080 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/util/Equators.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/util/Equators.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/util/Misc.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/util/Misc.h new file mode 120000 index 0000000..8020dc5 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/util/Misc.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/shared/CLucene/util/Misc.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/util/PriorityQueue.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/util/PriorityQueue.h new file mode 120000 index 0000000..748c9e8 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/util/PriorityQueue.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/util/PriorityQueue.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/util/Reader.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/util/Reader.h new file mode 120000 index 0000000..ccb3d69 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/util/Reader.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/util/Reader.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/util/StringBuffer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/util/StringBuffer.h new file mode 120000 index 0000000..f8490d2 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/util/StringBuffer.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/shared/CLucene/util/StringBuffer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/util/VoidList.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/util/VoidList.h new file mode 120000 index 0000000..566742b --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/util/VoidList.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/util/VoidList.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/util/VoidMap.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/util/VoidMap.h new file mode 120000 index 0000000..8beee74 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/util/VoidMap.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/util/VoidMap.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/util/_Arrays.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/util/_Arrays.h new file mode 120000 index 0000000..4962a5d --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/util/_Arrays.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/util/_Arrays.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/util/_FastCharStream.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/util/_FastCharStream.h new file mode 120000 index 0000000..bdcaed0 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/util/_FastCharStream.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/util/_FastCharStream.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/util/_MD5Digester.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/util/_MD5Digester.h new file mode 120000 index 0000000..57e6c85 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/util/_MD5Digester.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/util/_MD5Digester.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/util/_StringIntern.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/util/_StringIntern.h new file mode 120000 index 0000000..31d897a --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/util/_StringIntern.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/util/_StringIntern.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/util/_ThreadLocal.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/util/_ThreadLocal.h new file mode 120000 index 0000000..431d8f8 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/util/_ThreadLocal.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/util/_ThreadLocal.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/util/_VoidList.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/util/_VoidList.h new file mode 120000 index 0000000..c1a34f3 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/util/_VoidList.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/util/_VoidList.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/util/_VoidMap.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/util/_VoidMap.h new file mode 120000 index 0000000..1d9f0c8 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/util/_VoidMap.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/util/_VoidMap.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/util/_bufferedstream.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/util/_bufferedstream.h new file mode 120000 index 0000000..8e2e32d --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/util/_bufferedstream.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/util/_bufferedstream.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/util/_dirent.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/util/_dirent.h new file mode 120000 index 0000000..cc8140f --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/util/_dirent.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/shared/CLucene/util/_dirent.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/util/_streambase.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/util/_streambase.h new file mode 120000 index 0000000..188d8fa --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/util/_streambase.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/util/_streambase.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/util/_streambuffer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/util/_streambuffer.h new file mode 120000 index 0000000..9eec76a --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/util/_streambuffer.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/util/_streambuffer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/util/arrayinputstream.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/util/arrayinputstream.h new file mode 120000 index 0000000..0fae9b6 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/util/arrayinputstream.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/util/arrayinputstream.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/util/byteinputstream.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/util/byteinputstream.h new file mode 120000 index 0000000..8dc8d98 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/util/byteinputstream.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/util/byteinputstream.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/util/gzipcompressstream.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/util/gzipcompressstream.h new file mode 120000 index 0000000..adb6a93 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/util/gzipcompressstream.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/util/gzipcompressstream.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/util/gzipinputstream.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/util/gzipinputstream.h new file mode 120000 index 0000000..1fb5187 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/util/gzipinputstream.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/util/gzipinputstream.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/util/streamarray.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/util/streamarray.h new file mode 120000 index 0000000..8aba544 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRCLucene/CLucene/util/streamarray.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/util/streamarray.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene.h deleted file mode 120000 index 30fa9f8..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../clucene/src/core/CLucene.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/CLConfig.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/CLConfig.h deleted file mode 120000 index 33aafbc..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/CLConfig.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../clucene/src/core/CLucene/CLConfig.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/LuceneThreads.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/LuceneThreads.h deleted file mode 120000 index ef01cf5..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/LuceneThreads.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../clucene/src/shared/CLucene/LuceneThreads.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/SharedHeader.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/SharedHeader.h deleted file mode 120000 index efe9d66..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/SharedHeader.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../clucene/src/shared/CLucene/SharedHeader.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/StdHeader.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/StdHeader.h deleted file mode 120000 index 56f479f..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/StdHeader.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../clucene/src/core/CLucene/StdHeader.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/_ApiHeader.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/_ApiHeader.h deleted file mode 120000 index 09861a9..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/_ApiHeader.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../clucene/src/core/CLucene/_ApiHeader.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/_SharedHeader.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/_SharedHeader.h deleted file mode 120000 index d4b7115..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/_SharedHeader.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../clucene/src/shared/CLucene/_SharedHeader.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/_clucene-config.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/_clucene-config.h deleted file mode 120000 index 1f444a6..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/_clucene-config.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../BRFullTextSearch/CLucene/_clucene-config.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/analysis/AnalysisHeader.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/analysis/AnalysisHeader.h deleted file mode 120000 index be4350e..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/analysis/AnalysisHeader.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/analysis/AnalysisHeader.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/analysis/Analyzers.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/analysis/Analyzers.h deleted file mode 120000 index e55085c..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/analysis/Analyzers.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/analysis/Analyzers.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/analysis/CachingTokenFilter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/analysis/CachingTokenFilter.h deleted file mode 120000 index 86a165d..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/analysis/CachingTokenFilter.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/analysis/CachingTokenFilter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/analysis/LanguageBasedAnalyzer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/analysis/LanguageBasedAnalyzer.h deleted file mode 120000 index 1c712f8..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/analysis/LanguageBasedAnalyzer.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/contribs-lib/CLucene/analysis/LanguageBasedAnalyzer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/analysis/PorterStemmer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/analysis/PorterStemmer.h deleted file mode 120000 index 6034cdf..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/analysis/PorterStemmer.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/contribs-lib/CLucene/analysis/PorterStemmer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/analysis/cjk/CJKAnalyzer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/analysis/cjk/CJKAnalyzer.h deleted file mode 120000 index 88ad359..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/analysis/cjk/CJKAnalyzer.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/contribs-lib/CLucene/analysis/cjk/CJKAnalyzer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/analysis/de/GermanAnalyzer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/analysis/de/GermanAnalyzer.h deleted file mode 120000 index f613a4f..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/analysis/de/GermanAnalyzer.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/contribs-lib/CLucene/analysis/de/GermanAnalyzer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/analysis/de/GermanStemFilter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/analysis/de/GermanStemFilter.h deleted file mode 120000 index ea5415e..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/analysis/de/GermanStemFilter.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/contribs-lib/CLucene/analysis/de/GermanStemFilter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/analysis/de/GermanStemmer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/analysis/de/GermanStemmer.h deleted file mode 120000 index f963d09..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/analysis/de/GermanStemmer.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/contribs-lib/CLucene/analysis/de/GermanStemmer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/analysis/standard/StandardAnalyzer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/analysis/standard/StandardAnalyzer.h deleted file mode 120000 index 966a891..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/analysis/standard/StandardAnalyzer.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/core/CLucene/analysis/standard/StandardAnalyzer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/analysis/standard/StandardFilter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/analysis/standard/StandardFilter.h deleted file mode 120000 index cfb3ec8..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/analysis/standard/StandardFilter.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/core/CLucene/analysis/standard/StandardFilter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/analysis/standard/StandardTokenizer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/analysis/standard/StandardTokenizer.h deleted file mode 120000 index e0a691c..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/analysis/standard/StandardTokenizer.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/core/CLucene/analysis/standard/StandardTokenizer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/analysis/standard/StandardTokenizerConstants.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/analysis/standard/StandardTokenizerConstants.h deleted file mode 120000 index df34083..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/analysis/standard/StandardTokenizerConstants.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/core/CLucene/analysis/standard/StandardTokenizerConstants.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/clucene-config.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/clucene-config.h deleted file mode 120000 index 5ab06d7..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/clucene-config.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../BRFullTextSearch/CLucene/clucene-config.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/config/_gunichartables.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/config/_gunichartables.h deleted file mode 120000 index 47cf432..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/config/_gunichartables.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/shared/CLucene/config/_gunichartables.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/config/_threads.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/config/_threads.h deleted file mode 120000 index cc2d9bb..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/config/_threads.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/shared/CLucene/config/_threads.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/config/repl_tchar.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/config/repl_tchar.h deleted file mode 120000 index b617ea7..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/config/repl_tchar.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/shared/CLucene/config/repl_tchar.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/config/repl_wchar.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/config/repl_wchar.h deleted file mode 120000 index f48732d..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/config/repl_wchar.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/shared/CLucene/config/repl_wchar.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/config/repl_wctype.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/config/repl_wctype.h deleted file mode 120000 index 35adba4..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/config/repl_wctype.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/shared/CLucene/config/repl_wctype.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/debug/_condition.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/debug/_condition.h deleted file mode 120000 index 33a9b0a..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/debug/_condition.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/shared/CLucene/debug/_condition.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/debug/error.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/debug/error.h deleted file mode 120000 index 8ae4d3e..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/debug/error.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/debug/error.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/debug/lucenebase.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/debug/lucenebase.h deleted file mode 120000 index 8954efd..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/debug/lucenebase.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/debug/lucenebase.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/debug/mem.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/debug/mem.h deleted file mode 120000 index dc3c88f..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/debug/mem.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/debug/mem.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/document/DateField.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/document/DateField.h deleted file mode 120000 index 2f8537d..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/document/DateField.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/document/DateField.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/document/DateTools.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/document/DateTools.h deleted file mode 120000 index 8406b73..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/document/DateTools.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/document/DateTools.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/document/Document.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/document/Document.h deleted file mode 120000 index 3af39ed..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/document/Document.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/document/Document.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/document/Field.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/document/Field.h deleted file mode 120000 index 2043418..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/document/Field.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/document/Field.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/document/FieldSelector.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/document/FieldSelector.h deleted file mode 120000 index 9bfac6f..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/document/FieldSelector.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/document/FieldSelector.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/document/NumberTools.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/document/NumberTools.h deleted file mode 120000 index 2de6a2d..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/document/NumberTools.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/document/NumberTools.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/highlighter/Encoder.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/highlighter/Encoder.h deleted file mode 120000 index e7b3328..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/highlighter/Encoder.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/contribs-lib/CLucene/highlighter/Encoder.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/highlighter/Formatter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/highlighter/Formatter.h deleted file mode 120000 index 0d39aa1..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/highlighter/Formatter.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/contribs-lib/CLucene/highlighter/Formatter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/highlighter/Fragmenter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/highlighter/Fragmenter.h deleted file mode 120000 index 71fc0f9..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/highlighter/Fragmenter.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/contribs-lib/CLucene/highlighter/Fragmenter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/highlighter/HighlightScorer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/highlighter/HighlightScorer.h deleted file mode 120000 index 5d0d6bc..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/highlighter/HighlightScorer.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/contribs-lib/CLucene/highlighter/HighlightScorer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/highlighter/Highlighter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/highlighter/Highlighter.h deleted file mode 120000 index ed753bb..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/highlighter/Highlighter.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/contribs-lib/CLucene/highlighter/Highlighter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/highlighter/QueryScorer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/highlighter/QueryScorer.h deleted file mode 120000 index c9672d7..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/highlighter/QueryScorer.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/contribs-lib/CLucene/highlighter/QueryScorer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/highlighter/QueryTermExtractor.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/highlighter/QueryTermExtractor.h deleted file mode 120000 index d947d3e..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/highlighter/QueryTermExtractor.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/contribs-lib/CLucene/highlighter/QueryTermExtractor.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/highlighter/Scorer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/highlighter/Scorer.h deleted file mode 120000 index 09f5206..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/highlighter/Scorer.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/contribs-lib/CLucene/highlighter/Scorer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/highlighter/SimpleFragmenter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/highlighter/SimpleFragmenter.h deleted file mode 120000 index 39015f4..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/highlighter/SimpleFragmenter.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/contribs-lib/CLucene/highlighter/SimpleFragmenter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/highlighter/SimpleHTMLEncoder.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/highlighter/SimpleHTMLEncoder.h deleted file mode 120000 index bbe3ae9..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/highlighter/SimpleHTMLEncoder.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/contribs-lib/CLucene/highlighter/SimpleHTMLEncoder.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/highlighter/SimpleHTMLFormatter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/highlighter/SimpleHTMLFormatter.h deleted file mode 120000 index 408589d..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/highlighter/SimpleHTMLFormatter.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/contribs-lib/CLucene/highlighter/SimpleHTMLFormatter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/highlighter/TextFragment.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/highlighter/TextFragment.h deleted file mode 120000 index f5799ba..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/highlighter/TextFragment.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/contribs-lib/CLucene/highlighter/TextFragment.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/highlighter/TokenGroup.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/highlighter/TokenGroup.h deleted file mode 120000 index bd15c34..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/highlighter/TokenGroup.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/contribs-lib/CLucene/highlighter/TokenGroup.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/highlighter/TokenSources.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/highlighter/TokenSources.h deleted file mode 120000 index 316a1f3..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/highlighter/TokenSources.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/contribs-lib/CLucene/highlighter/TokenSources.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/highlighter/WeightedTerm.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/highlighter/WeightedTerm.h deleted file mode 120000 index df51d84..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/highlighter/WeightedTerm.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/contribs-lib/CLucene/highlighter/WeightedTerm.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/DirectoryIndexReader.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/DirectoryIndexReader.h deleted file mode 120000 index 6f69a05..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/DirectoryIndexReader.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/index/DirectoryIndexReader.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/IndexDeletionPolicy.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/IndexDeletionPolicy.h deleted file mode 120000 index 273d972..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/IndexDeletionPolicy.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/index/IndexDeletionPolicy.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/IndexModifier.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/IndexModifier.h deleted file mode 120000 index 3599f26..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/IndexModifier.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/index/IndexModifier.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/IndexReader.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/IndexReader.h deleted file mode 120000 index 6ba03ba..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/IndexReader.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/index/IndexReader.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/IndexWriter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/IndexWriter.h deleted file mode 120000 index bfb00e0..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/IndexWriter.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/index/IndexWriter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/MergePolicy.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/MergePolicy.h deleted file mode 120000 index 2cdc4e8..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/MergePolicy.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/index/MergePolicy.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/MergeScheduler.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/MergeScheduler.h deleted file mode 120000 index b89ec76..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/MergeScheduler.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/index/MergeScheduler.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/MultiReader.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/MultiReader.h deleted file mode 120000 index 685ea10..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/MultiReader.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/index/MultiReader.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/MultipleTermPositions.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/MultipleTermPositions.h deleted file mode 120000 index 7898d6a..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/MultipleTermPositions.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/index/MultipleTermPositions.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/Payload.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/Payload.h deleted file mode 120000 index 3ef5664..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/Payload.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/index/Payload.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/Term.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/Term.h deleted file mode 120000 index 19819d9..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/Term.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/index/Term.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/TermVector.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/TermVector.h deleted file mode 120000 index 569f909..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/TermVector.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/index/TermVector.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/Terms.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/Terms.h deleted file mode 120000 index 4c03dbb..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/Terms.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/index/Terms.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/_CompoundFile.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/_CompoundFile.h deleted file mode 120000 index 880efef..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/_CompoundFile.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/index/_CompoundFile.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/_DocumentsWriter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/_DocumentsWriter.h deleted file mode 120000 index dd34ee3..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/_DocumentsWriter.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/index/_DocumentsWriter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/_FieldInfo.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/_FieldInfo.h deleted file mode 120000 index b011307..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/_FieldInfo.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/index/_FieldInfo.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/_FieldInfos.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/_FieldInfos.h deleted file mode 120000 index ba53819..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/_FieldInfos.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/index/_FieldInfos.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/_FieldsReader.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/_FieldsReader.h deleted file mode 120000 index 8920765..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/_FieldsReader.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/index/_FieldsReader.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/_FieldsWriter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/_FieldsWriter.h deleted file mode 120000 index c48e34b..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/_FieldsWriter.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/index/_FieldsWriter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/_IndexFileDeleter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/_IndexFileDeleter.h deleted file mode 120000 index 6815318..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/_IndexFileDeleter.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/index/_IndexFileDeleter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/_IndexFileNameFilter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/_IndexFileNameFilter.h deleted file mode 120000 index bb1ec18..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/_IndexFileNameFilter.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/index/_IndexFileNameFilter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/_IndexFileNames.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/_IndexFileNames.h deleted file mode 120000 index e45a0f5..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/_IndexFileNames.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/index/_IndexFileNames.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/_MultiSegmentReader.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/_MultiSegmentReader.h deleted file mode 120000 index 61487a5..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/_MultiSegmentReader.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/index/_MultiSegmentReader.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/_SegmentHeader.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/_SegmentHeader.h deleted file mode 120000 index 15f8a98..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/_SegmentHeader.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/index/_SegmentHeader.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/_SegmentInfos.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/_SegmentInfos.h deleted file mode 120000 index 057276b..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/_SegmentInfos.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/index/_SegmentInfos.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/_SegmentMergeInfo.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/_SegmentMergeInfo.h deleted file mode 120000 index 748b456..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/_SegmentMergeInfo.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/index/_SegmentMergeInfo.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/_SegmentMergeQueue.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/_SegmentMergeQueue.h deleted file mode 120000 index d0d89c7..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/_SegmentMergeQueue.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/index/_SegmentMergeQueue.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/_SegmentMerger.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/_SegmentMerger.h deleted file mode 120000 index 90b9327..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/_SegmentMerger.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/index/_SegmentMerger.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/_SegmentTermEnum.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/_SegmentTermEnum.h deleted file mode 120000 index 870a968..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/_SegmentTermEnum.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/index/_SegmentTermEnum.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/_SkipListReader.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/_SkipListReader.h deleted file mode 120000 index 05800f9..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/_SkipListReader.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/index/_SkipListReader.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/_SkipListWriter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/_SkipListWriter.h deleted file mode 120000 index d67f51c..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/_SkipListWriter.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/index/_SkipListWriter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/_Term.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/_Term.h deleted file mode 120000 index b8edb4e..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/_Term.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/index/_Term.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/_TermInfo.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/_TermInfo.h deleted file mode 120000 index a1d4efe..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/_TermInfo.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/index/_TermInfo.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/_TermInfosReader.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/_TermInfosReader.h deleted file mode 120000 index 86d35f1..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/_TermInfosReader.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/index/_TermInfosReader.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/_TermInfosWriter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/_TermInfosWriter.h deleted file mode 120000 index f437406..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/_TermInfosWriter.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/index/_TermInfosWriter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/_TermVector.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/_TermVector.h deleted file mode 120000 index 0404e3a..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/index/_TermVector.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/index/_TermVector.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/queryParser/MultiFieldQueryParser.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/queryParser/MultiFieldQueryParser.h deleted file mode 120000 index 09a0525..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/queryParser/MultiFieldQueryParser.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/queryParser/MultiFieldQueryParser.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/queryParser/QueryParser.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/queryParser/QueryParser.h deleted file mode 120000 index 6976e1c..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/queryParser/QueryParser.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/queryParser/QueryParser.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/queryParser/QueryParserConstants.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/queryParser/QueryParserConstants.h deleted file mode 120000 index 5afe8b9..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/queryParser/QueryParserConstants.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/queryParser/QueryParserConstants.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/queryParser/QueryParserTokenManager.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/queryParser/QueryParserTokenManager.h deleted file mode 120000 index d1ccdc6..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/queryParser/QueryParserTokenManager.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/queryParser/QueryParserTokenManager.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/queryParser/QueryToken.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/queryParser/QueryToken.h deleted file mode 120000 index a1028de..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/queryParser/QueryToken.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/queryParser/QueryToken.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/queryParser/_CharStream.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/queryParser/_CharStream.h deleted file mode 120000 index b0e03d9..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/queryParser/_CharStream.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/queryParser/_CharStream.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/queryParser/_FastCharStream.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/queryParser/_FastCharStream.h deleted file mode 120000 index 5cf4818..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/queryParser/_FastCharStream.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/queryParser/_FastCharStream.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/BooleanClause.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/BooleanClause.h deleted file mode 120000 index 3d35af0..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/BooleanClause.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/BooleanClause.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/BooleanQuery.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/BooleanQuery.h deleted file mode 120000 index c1c40b7..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/BooleanQuery.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/BooleanQuery.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/CachingSpanFilter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/CachingSpanFilter.h deleted file mode 120000 index 29d6fcb..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/CachingSpanFilter.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/CachingSpanFilter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/CachingWrapperFilter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/CachingWrapperFilter.h deleted file mode 120000 index 72e6b85..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/CachingWrapperFilter.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/CachingWrapperFilter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/ChainedFilter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/ChainedFilter.h deleted file mode 120000 index f48aab3..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/ChainedFilter.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/ChainedFilter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/Compare.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/Compare.h deleted file mode 120000 index a9b0c23..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/Compare.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/Compare.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/ConstantScoreQuery.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/ConstantScoreQuery.h deleted file mode 120000 index 0246d8b..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/ConstantScoreQuery.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/ConstantScoreQuery.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/DateFilter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/DateFilter.h deleted file mode 120000 index cfc52a5..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/DateFilter.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/DateFilter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/Explanation.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/Explanation.h deleted file mode 120000 index d29a6f9..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/Explanation.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/Explanation.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/FieldCache.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/FieldCache.h deleted file mode 120000 index d8415bb..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/FieldCache.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/FieldCache.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/FieldDoc.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/FieldDoc.h deleted file mode 120000 index b2b0382..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/FieldDoc.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/FieldDoc.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/FieldSortedHitQueue.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/FieldSortedHitQueue.h deleted file mode 120000 index d7f8550..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/FieldSortedHitQueue.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/FieldSortedHitQueue.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/Filter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/Filter.h deleted file mode 120000 index 9d744fd..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/Filter.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/Filter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/FilteredTermEnum.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/FilteredTermEnum.h deleted file mode 120000 index b72e276..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/FilteredTermEnum.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/FilteredTermEnum.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/FuzzyQuery.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/FuzzyQuery.h deleted file mode 120000 index fc68686..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/FuzzyQuery.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/FuzzyQuery.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/Hits.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/Hits.h deleted file mode 120000 index c623a93..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/Hits.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/Hits.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/IndexSearcher.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/IndexSearcher.h deleted file mode 120000 index 44d8a5f..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/IndexSearcher.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/IndexSearcher.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/MatchAllDocsQuery.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/MatchAllDocsQuery.h deleted file mode 120000 index c115568..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/MatchAllDocsQuery.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/MatchAllDocsQuery.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/MultiPhraseQuery.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/MultiPhraseQuery.h deleted file mode 120000 index 792f52b..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/MultiPhraseQuery.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/MultiPhraseQuery.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/MultiSearcher.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/MultiSearcher.h deleted file mode 120000 index da12e74..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/MultiSearcher.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/MultiSearcher.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/MultiTermQuery.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/MultiTermQuery.h deleted file mode 120000 index 9ac381d..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/MultiTermQuery.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/MultiTermQuery.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/PhraseQuery.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/PhraseQuery.h deleted file mode 120000 index 1d2dc1a..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/PhraseQuery.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/PhraseQuery.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/PrefixQuery.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/PrefixQuery.h deleted file mode 120000 index a18a55c..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/PrefixQuery.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/PrefixQuery.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/Query.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/Query.h deleted file mode 120000 index 1fc59d1..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/Query.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/Query.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/QueryFilter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/QueryFilter.h deleted file mode 120000 index cbe3707..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/QueryFilter.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/QueryFilter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/RangeFilter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/RangeFilter.h deleted file mode 120000 index 3961188..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/RangeFilter.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/RangeFilter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/RangeQuery.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/RangeQuery.h deleted file mode 120000 index 4b66fa0..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/RangeQuery.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/RangeQuery.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/Scorer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/Scorer.h deleted file mode 120000 index eea15b4..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/Scorer.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/Scorer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/ScorerDocQueue.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/ScorerDocQueue.h deleted file mode 120000 index 7d2c156..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/ScorerDocQueue.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/ScorerDocQueue.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/SearchHeader.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/SearchHeader.h deleted file mode 120000 index 602762b..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/SearchHeader.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/SearchHeader.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/Searchable.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/Searchable.h deleted file mode 120000 index 70180de..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/Searchable.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/Searchable.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/Similarity.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/Similarity.h deleted file mode 120000 index e50f49e..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/Similarity.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/Similarity.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/Sort.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/Sort.h deleted file mode 120000 index 39beef5..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/Sort.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/Sort.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/SpanFilter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/SpanFilter.h deleted file mode 120000 index 18647c8..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/SpanFilter.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/SpanFilter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/SpanFilterResult.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/SpanFilterResult.h deleted file mode 120000 index a76e7c8..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/SpanFilterResult.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/SpanFilterResult.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/SpanQueryFilter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/SpanQueryFilter.h deleted file mode 120000 index efab368..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/SpanQueryFilter.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/SpanQueryFilter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/TermQuery.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/TermQuery.h deleted file mode 120000 index 31af5f7..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/TermQuery.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/TermQuery.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/WildcardQuery.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/WildcardQuery.h deleted file mode 120000 index 10a1968..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/WildcardQuery.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/WildcardQuery.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/WildcardTermEnum.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/WildcardTermEnum.h deleted file mode 120000 index 70fd734..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/WildcardTermEnum.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/WildcardTermEnum.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/_BooleanScorer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/_BooleanScorer.h deleted file mode 120000 index 7aae929..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/_BooleanScorer.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/_BooleanScorer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/_BooleanScorer2.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/_BooleanScorer2.h deleted file mode 120000 index 20a30e8..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/_BooleanScorer2.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/_BooleanScorer2.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/_ConjunctionScorer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/_ConjunctionScorer.h deleted file mode 120000 index 78979d7..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/_ConjunctionScorer.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/_ConjunctionScorer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/_DisjunctionSumScorer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/_DisjunctionSumScorer.h deleted file mode 120000 index 1a1390d..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/_DisjunctionSumScorer.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/_DisjunctionSumScorer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/_ExactPhraseScorer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/_ExactPhraseScorer.h deleted file mode 120000 index 3e7af03..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/_ExactPhraseScorer.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/_ExactPhraseScorer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/_FieldCacheImpl.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/_FieldCacheImpl.h deleted file mode 120000 index 8de1209..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/_FieldCacheImpl.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/_FieldCacheImpl.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/_FieldDocSortedHitQueue.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/_FieldDocSortedHitQueue.h deleted file mode 120000 index 325062a..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/_FieldDocSortedHitQueue.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/_FieldDocSortedHitQueue.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/_HitQueue.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/_HitQueue.h deleted file mode 120000 index 52f29ce..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/_HitQueue.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/_HitQueue.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/_PhrasePositions.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/_PhrasePositions.h deleted file mode 120000 index f2c0604..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/_PhrasePositions.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/_PhrasePositions.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/_PhraseQueue.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/_PhraseQueue.h deleted file mode 120000 index 4f77b10..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/_PhraseQueue.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/_PhraseQueue.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/_PhraseScorer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/_PhraseScorer.h deleted file mode 120000 index 794885a..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/_PhraseScorer.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/_PhraseScorer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/_SloppyPhraseScorer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/_SloppyPhraseScorer.h deleted file mode 120000 index 25994e9..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/_SloppyPhraseScorer.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/_SloppyPhraseScorer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/_TermScorer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/_TermScorer.h deleted file mode 120000 index 2ac2eda..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/_TermScorer.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/_TermScorer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/spans/SpanFirstQuery.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/spans/SpanFirstQuery.h deleted file mode 120000 index 83544d7..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/spans/SpanFirstQuery.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/core/CLucene/search/spans/SpanFirstQuery.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/spans/SpanNearQuery.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/spans/SpanNearQuery.h deleted file mode 120000 index f2aef04..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/spans/SpanNearQuery.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/core/CLucene/search/spans/SpanNearQuery.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/spans/SpanNotQuery.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/spans/SpanNotQuery.h deleted file mode 120000 index be53511..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/spans/SpanNotQuery.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/core/CLucene/search/spans/SpanNotQuery.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/spans/SpanOrQuery.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/spans/SpanOrQuery.h deleted file mode 120000 index ea868fd..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/spans/SpanOrQuery.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/core/CLucene/search/spans/SpanOrQuery.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/spans/SpanQuery.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/spans/SpanQuery.h deleted file mode 120000 index 21b4e28..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/spans/SpanQuery.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/core/CLucene/search/spans/SpanQuery.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/spans/SpanScorer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/spans/SpanScorer.h deleted file mode 120000 index 95ddfc9..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/spans/SpanScorer.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/core/CLucene/search/spans/SpanScorer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/spans/SpanTermQuery.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/spans/SpanTermQuery.h deleted file mode 120000 index c8d7fc2..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/spans/SpanTermQuery.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/core/CLucene/search/spans/SpanTermQuery.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/spans/SpanWeight.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/spans/SpanWeight.h deleted file mode 120000 index 7b91413..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/spans/SpanWeight.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/core/CLucene/search/spans/SpanWeight.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/spans/Spans.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/spans/Spans.h deleted file mode 120000 index 34273b2..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/spans/Spans.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/core/CLucene/search/spans/Spans.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/spans/_EmptySpans.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/spans/_EmptySpans.h deleted file mode 120000 index 2613d2d..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/spans/_EmptySpans.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/core/CLucene/search/spans/_EmptySpans.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/spans/_NearSpansOrdered.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/spans/_NearSpansOrdered.h deleted file mode 120000 index 816a25e..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/spans/_NearSpansOrdered.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/core/CLucene/search/spans/_NearSpansOrdered.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/spans/_NearSpansUnordered.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/spans/_NearSpansUnordered.h deleted file mode 120000 index 8818b31..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/spans/_NearSpansUnordered.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/core/CLucene/search/spans/_NearSpansUnordered.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/spans/_TermSpans.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/spans/_TermSpans.h deleted file mode 120000 index b2cf6c2..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/search/spans/_TermSpans.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/core/CLucene/search/spans/_TermSpans.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/SnowballAnalyzer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/SnowballAnalyzer.h deleted file mode 120000 index 7f3191b..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/SnowballAnalyzer.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/contribs-lib/CLucene/snowball/SnowballAnalyzer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/SnowballFilter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/SnowballFilter.h deleted file mode 120000 index b1a6ee7..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/SnowballFilter.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/contribs-lib/CLucene/snowball/SnowballFilter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/include/libstemmer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/include/libstemmer.h deleted file mode 120000 index e81c7e0..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/include/libstemmer.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/contribs-lib/CLucene/snowball/include/libstemmer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/libstemmer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/libstemmer.h deleted file mode 120000 index 8a76cdf..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/libstemmer.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/contribs-lib/CLucene/snowball/libstemmer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/libstemmer/modules.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/libstemmer/modules.h deleted file mode 120000 index 1b65811..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/libstemmer/modules.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/contribs-lib/CLucene/snowball/libstemmer/modules.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/runtime/api.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/runtime/api.h deleted file mode 120000 index b39883e..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/runtime/api.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/contribs-lib/CLucene/snowball/runtime/api.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/runtime/header.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/runtime/header.h deleted file mode 120000 index b414982..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/runtime/header.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/contribs-lib/CLucene/snowball/runtime/header.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/src_c/stem_ISO_8859_1_danish.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/src_c/stem_ISO_8859_1_danish.h deleted file mode 120000 index adeac93..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/src_c/stem_ISO_8859_1_danish.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_danish.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/src_c/stem_ISO_8859_1_dutch.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/src_c/stem_ISO_8859_1_dutch.h deleted file mode 120000 index d1f2eed..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/src_c/stem_ISO_8859_1_dutch.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_dutch.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/src_c/stem_ISO_8859_1_english.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/src_c/stem_ISO_8859_1_english.h deleted file mode 120000 index cd62a06..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/src_c/stem_ISO_8859_1_english.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_english.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/src_c/stem_ISO_8859_1_finnish.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/src_c/stem_ISO_8859_1_finnish.h deleted file mode 120000 index a2c5eca..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/src_c/stem_ISO_8859_1_finnish.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_finnish.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/src_c/stem_ISO_8859_1_french.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/src_c/stem_ISO_8859_1_french.h deleted file mode 120000 index 5e268fc..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/src_c/stem_ISO_8859_1_french.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_french.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/src_c/stem_ISO_8859_1_german.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/src_c/stem_ISO_8859_1_german.h deleted file mode 120000 index 83374a7..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/src_c/stem_ISO_8859_1_german.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_german.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/src_c/stem_ISO_8859_1_italian.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/src_c/stem_ISO_8859_1_italian.h deleted file mode 120000 index 1076b52..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/src_c/stem_ISO_8859_1_italian.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_italian.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/src_c/stem_ISO_8859_1_norwegian.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/src_c/stem_ISO_8859_1_norwegian.h deleted file mode 120000 index edfdbbb..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/src_c/stem_ISO_8859_1_norwegian.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_norwegian.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/src_c/stem_ISO_8859_1_porter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/src_c/stem_ISO_8859_1_porter.h deleted file mode 120000 index 483bc95..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/src_c/stem_ISO_8859_1_porter.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_porter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/src_c/stem_ISO_8859_1_portuguese.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/src_c/stem_ISO_8859_1_portuguese.h deleted file mode 120000 index 4ba7c00..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/src_c/stem_ISO_8859_1_portuguese.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_portuguese.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/src_c/stem_ISO_8859_1_spanish.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/src_c/stem_ISO_8859_1_spanish.h deleted file mode 120000 index a54daa2..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/src_c/stem_ISO_8859_1_spanish.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_spanish.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/src_c/stem_ISO_8859_1_swedish.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/src_c/stem_ISO_8859_1_swedish.h deleted file mode 120000 index 70d3663..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/src_c/stem_ISO_8859_1_swedish.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_swedish.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/src_c/stem_KOI8_R_russian.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/src_c/stem_KOI8_R_russian.h deleted file mode 120000 index 90ff39b..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/src_c/stem_KOI8_R_russian.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/contribs-lib/CLucene/snowball/src_c/stem_KOI8_R_russian.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/src_c/stem_UTF_8_danish.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/src_c/stem_UTF_8_danish.h deleted file mode 120000 index 66d82ee..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/src_c/stem_UTF_8_danish.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_danish.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/src_c/stem_UTF_8_dutch.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/src_c/stem_UTF_8_dutch.h deleted file mode 120000 index e0a44e6..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/src_c/stem_UTF_8_dutch.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_dutch.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/src_c/stem_UTF_8_english.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/src_c/stem_UTF_8_english.h deleted file mode 120000 index 88bc6da..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/src_c/stem_UTF_8_english.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_english.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/src_c/stem_UTF_8_finnish.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/src_c/stem_UTF_8_finnish.h deleted file mode 120000 index bfeb6cb..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/src_c/stem_UTF_8_finnish.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_finnish.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/src_c/stem_UTF_8_french.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/src_c/stem_UTF_8_french.h deleted file mode 120000 index eda3285..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/src_c/stem_UTF_8_french.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_french.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/src_c/stem_UTF_8_german.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/src_c/stem_UTF_8_german.h deleted file mode 120000 index a66418b..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/src_c/stem_UTF_8_german.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_german.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/src_c/stem_UTF_8_italian.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/src_c/stem_UTF_8_italian.h deleted file mode 120000 index 9c8809f..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/src_c/stem_UTF_8_italian.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_italian.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/src_c/stem_UTF_8_norwegian.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/src_c/stem_UTF_8_norwegian.h deleted file mode 120000 index b0b4bd5..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/src_c/stem_UTF_8_norwegian.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_norwegian.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/src_c/stem_UTF_8_porter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/src_c/stem_UTF_8_porter.h deleted file mode 120000 index 30568f7..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/src_c/stem_UTF_8_porter.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_porter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/src_c/stem_UTF_8_portuguese.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/src_c/stem_UTF_8_portuguese.h deleted file mode 120000 index 02c377b..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/src_c/stem_UTF_8_portuguese.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_portuguese.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/src_c/stem_UTF_8_russian.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/src_c/stem_UTF_8_russian.h deleted file mode 120000 index 4f0ef29..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/src_c/stem_UTF_8_russian.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_russian.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/src_c/stem_UTF_8_spanish.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/src_c/stem_UTF_8_spanish.h deleted file mode 120000 index cf84881..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/src_c/stem_UTF_8_spanish.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_spanish.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/src_c/stem_UTF_8_swedish.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/src_c/stem_UTF_8_swedish.h deleted file mode 120000 index ff1a07d..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/snowball/src_c/stem_UTF_8_swedish.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_swedish.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/store/Directory.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/store/Directory.h deleted file mode 120000 index 4737908..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/store/Directory.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/store/Directory.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/store/FSDirectory.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/store/FSDirectory.h deleted file mode 120000 index de9b731..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/store/FSDirectory.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/store/FSDirectory.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/store/IndexInput.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/store/IndexInput.h deleted file mode 120000 index 1b968f4..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/store/IndexInput.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/store/IndexInput.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/store/IndexOutput.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/store/IndexOutput.h deleted file mode 120000 index 147a519..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/store/IndexOutput.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/store/IndexOutput.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/store/Lock.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/store/Lock.h deleted file mode 120000 index 6dee5d7..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/store/Lock.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/store/Lock.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/store/LockFactory.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/store/LockFactory.h deleted file mode 120000 index 16f3385..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/store/LockFactory.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/store/LockFactory.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/store/RAMDirectory.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/store/RAMDirectory.h deleted file mode 120000 index fac1a87..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/store/RAMDirectory.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/store/RAMDirectory.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/store/_Lock.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/store/_Lock.h deleted file mode 120000 index 5eb980c..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/store/_Lock.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/store/_Lock.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/store/_MMapIndexInput.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/store/_MMapIndexInput.h deleted file mode 120000 index ad09a77..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/store/_MMapIndexInput.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/store/_MMapIndexInput.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/store/_RAMDirectory.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/store/_RAMDirectory.h deleted file mode 120000 index cdd9b09..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/store/_RAMDirectory.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/store/_RAMDirectory.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/util/Array.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/util/Array.h deleted file mode 120000 index 561d885..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/util/Array.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/util/Array.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/util/BitSet.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/util/BitSet.h deleted file mode 120000 index 3c728c6..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/util/BitSet.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/util/BitSet.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/util/CLStreams.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/util/CLStreams.h deleted file mode 120000 index 5054caf..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/util/CLStreams.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/util/CLStreams.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/util/Equators.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/util/Equators.h deleted file mode 120000 index 08736c7..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/util/Equators.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/util/Equators.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/util/Misc.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/util/Misc.h deleted file mode 120000 index 9a8c7ce..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/util/Misc.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/shared/CLucene/util/Misc.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/util/PriorityQueue.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/util/PriorityQueue.h deleted file mode 120000 index 031be2f..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/util/PriorityQueue.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/util/PriorityQueue.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/util/Reader.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/util/Reader.h deleted file mode 120000 index 3579aee..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/util/Reader.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/util/Reader.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/util/StringBuffer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/util/StringBuffer.h deleted file mode 120000 index e2122ff..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/util/StringBuffer.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/shared/CLucene/util/StringBuffer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/util/VoidList.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/util/VoidList.h deleted file mode 120000 index c7c18af..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/util/VoidList.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/util/VoidList.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/util/VoidMap.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/util/VoidMap.h deleted file mode 120000 index 2f2e8be..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/util/VoidMap.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/util/VoidMap.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/util/_Arrays.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/util/_Arrays.h deleted file mode 120000 index d34a221..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/util/_Arrays.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/util/_Arrays.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/util/_FastCharStream.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/util/_FastCharStream.h deleted file mode 120000 index af77fb4..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/util/_FastCharStream.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/util/_FastCharStream.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/util/_MD5Digester.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/util/_MD5Digester.h deleted file mode 120000 index c3e5fb1..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/util/_MD5Digester.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/util/_MD5Digester.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/util/_StringIntern.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/util/_StringIntern.h deleted file mode 120000 index d46ce57..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/util/_StringIntern.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/util/_StringIntern.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/util/_ThreadLocal.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/util/_ThreadLocal.h deleted file mode 120000 index ecb8943..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/util/_ThreadLocal.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/util/_ThreadLocal.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/util/_VoidList.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/util/_VoidList.h deleted file mode 120000 index f5a7d0f..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/util/_VoidList.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/util/_VoidList.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/util/_VoidMap.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/util/_VoidMap.h deleted file mode 120000 index c04995b..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/util/_VoidMap.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/util/_VoidMap.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/util/_bufferedstream.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/util/_bufferedstream.h deleted file mode 120000 index e3cf553..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/util/_bufferedstream.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/util/_bufferedstream.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/util/_dirent.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/util/_dirent.h deleted file mode 120000 index c45e16d..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/util/_dirent.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/shared/CLucene/util/_dirent.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/util/_streambase.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/util/_streambase.h deleted file mode 120000 index 52c06bf..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/util/_streambase.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/util/_streambase.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/util/_streambuffer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/util/_streambuffer.h deleted file mode 120000 index 561968a..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/util/_streambuffer.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/util/_streambuffer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/util/arrayinputstream.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/util/arrayinputstream.h deleted file mode 120000 index 8756cd8..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/util/arrayinputstream.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/contribs-lib/CLucene/util/arrayinputstream.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/util/byteinputstream.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/util/byteinputstream.h deleted file mode 120000 index a74e33e..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/util/byteinputstream.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/contribs-lib/CLucene/util/byteinputstream.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/util/gzipcompressstream.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/util/gzipcompressstream.h deleted file mode 120000 index 08446ee..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/util/gzipcompressstream.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/contribs-lib/CLucene/util/gzipcompressstream.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/util/gzipinputstream.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/util/gzipinputstream.h deleted file mode 120000 index 359f449..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/util/gzipinputstream.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/contribs-lib/CLucene/util/gzipinputstream.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/util/streamarray.h b/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/util/streamarray.h deleted file mode 120000 index 233458f..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Private/BRFullTextSearch/CLucene/util/streamarray.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/contribs-lib/CLucene/util/streamarray.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene.h new file mode 120000 index 0000000..1056795 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene.h @@ -0,0 +1 @@ +../../../BRCLucene/src/core/CLucene.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/CLConfig.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/CLConfig.h new file mode 120000 index 0000000..41e1b76 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/CLConfig.h @@ -0,0 +1 @@ +../../../../BRCLucene/src/core/CLucene/CLConfig.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/LuceneThreads.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/LuceneThreads.h new file mode 120000 index 0000000..207aab5 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/LuceneThreads.h @@ -0,0 +1 @@ +../../../../BRCLucene/src/shared/CLucene/LuceneThreads.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/SharedHeader.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/SharedHeader.h new file mode 120000 index 0000000..7e381f7 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/SharedHeader.h @@ -0,0 +1 @@ +../../../../BRCLucene/src/shared/CLucene/SharedHeader.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/StdHeader.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/StdHeader.h new file mode 120000 index 0000000..26bfabd --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/StdHeader.h @@ -0,0 +1 @@ +../../../../BRCLucene/src/core/CLucene/StdHeader.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/_ApiHeader.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/_ApiHeader.h new file mode 120000 index 0000000..3c06bf3 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/_ApiHeader.h @@ -0,0 +1 @@ +../../../../BRCLucene/src/core/CLucene/_ApiHeader.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/_SharedHeader.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/_SharedHeader.h new file mode 120000 index 0000000..bff44ba --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/_SharedHeader.h @@ -0,0 +1 @@ +../../../../BRCLucene/src/shared/CLucene/_SharedHeader.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/_clucene-config.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/_clucene-config.h new file mode 120000 index 0000000..952c43c --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/_clucene-config.h @@ -0,0 +1 @@ +../../../../BRCLucene/BRCLucene/src/CLucene/_clucene-config.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/analysis/AnalysisHeader.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/analysis/AnalysisHeader.h new file mode 120000 index 0000000..e054134 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/analysis/AnalysisHeader.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/analysis/AnalysisHeader.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/analysis/Analyzers.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/analysis/Analyzers.h new file mode 120000 index 0000000..8592491 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/analysis/Analyzers.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/analysis/Analyzers.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/analysis/CachingTokenFilter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/analysis/CachingTokenFilter.h new file mode 120000 index 0000000..64d815d --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/analysis/CachingTokenFilter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/analysis/CachingTokenFilter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/analysis/LanguageBasedAnalyzer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/analysis/LanguageBasedAnalyzer.h new file mode 120000 index 0000000..49b200f --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/analysis/LanguageBasedAnalyzer.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/analysis/LanguageBasedAnalyzer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/analysis/PorterStemmer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/analysis/PorterStemmer.h new file mode 120000 index 0000000..2dac27e --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/analysis/PorterStemmer.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/analysis/PorterStemmer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/analysis/cjk/CJKAnalyzer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/analysis/cjk/CJKAnalyzer.h new file mode 120000 index 0000000..3c3e644 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/analysis/cjk/CJKAnalyzer.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/analysis/cjk/CJKAnalyzer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/analysis/de/GermanAnalyzer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/analysis/de/GermanAnalyzer.h new file mode 120000 index 0000000..a85f2e7 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/analysis/de/GermanAnalyzer.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/analysis/de/GermanAnalyzer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/analysis/de/GermanStemFilter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/analysis/de/GermanStemFilter.h new file mode 120000 index 0000000..0609efd --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/analysis/de/GermanStemFilter.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/analysis/de/GermanStemFilter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/analysis/de/GermanStemmer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/analysis/de/GermanStemmer.h new file mode 120000 index 0000000..0b8b46e --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/analysis/de/GermanStemmer.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/analysis/de/GermanStemmer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/analysis/standard/StandardAnalyzer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/analysis/standard/StandardAnalyzer.h new file mode 120000 index 0000000..3aad2ae --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/analysis/standard/StandardAnalyzer.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/core/CLucene/analysis/standard/StandardAnalyzer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/analysis/standard/StandardFilter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/analysis/standard/StandardFilter.h new file mode 120000 index 0000000..720f637 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/analysis/standard/StandardFilter.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/core/CLucene/analysis/standard/StandardFilter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/analysis/standard/StandardTokenizer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/analysis/standard/StandardTokenizer.h new file mode 120000 index 0000000..8585feb --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/analysis/standard/StandardTokenizer.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/core/CLucene/analysis/standard/StandardTokenizer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/analysis/standard/StandardTokenizerConstants.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/analysis/standard/StandardTokenizerConstants.h new file mode 120000 index 0000000..775ea81 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/analysis/standard/StandardTokenizerConstants.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/core/CLucene/analysis/standard/StandardTokenizerConstants.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/clucene-config.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/clucene-config.h new file mode 120000 index 0000000..06186b8 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/clucene-config.h @@ -0,0 +1 @@ +../../../../BRCLucene/BRCLucene/src/CLucene/clucene-config.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/config/_gunichartables.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/config/_gunichartables.h new file mode 120000 index 0000000..27b1cfb --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/config/_gunichartables.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/shared/CLucene/config/_gunichartables.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/config/_threads.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/config/_threads.h new file mode 120000 index 0000000..c53c77d --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/config/_threads.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/shared/CLucene/config/_threads.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/config/repl_tchar.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/config/repl_tchar.h new file mode 120000 index 0000000..5a5ab82 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/config/repl_tchar.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/shared/CLucene/config/repl_tchar.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/config/repl_wchar.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/config/repl_wchar.h new file mode 120000 index 0000000..2b9a714 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/config/repl_wchar.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/shared/CLucene/config/repl_wchar.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/config/repl_wctype.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/config/repl_wctype.h new file mode 120000 index 0000000..af337f9 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/config/repl_wctype.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/shared/CLucene/config/repl_wctype.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/debug/_condition.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/debug/_condition.h new file mode 120000 index 0000000..e83cad2 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/debug/_condition.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/shared/CLucene/debug/_condition.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/debug/error.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/debug/error.h new file mode 120000 index 0000000..4c85225 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/debug/error.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/debug/error.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/debug/lucenebase.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/debug/lucenebase.h new file mode 120000 index 0000000..fc701c7 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/debug/lucenebase.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/debug/lucenebase.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/debug/mem.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/debug/mem.h new file mode 120000 index 0000000..a4ff6c6 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/debug/mem.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/debug/mem.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/document/DateField.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/document/DateField.h new file mode 120000 index 0000000..f200176 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/document/DateField.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/document/DateField.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/document/DateTools.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/document/DateTools.h new file mode 120000 index 0000000..02ced4a --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/document/DateTools.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/document/DateTools.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/document/Document.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/document/Document.h new file mode 120000 index 0000000..9c3440a --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/document/Document.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/document/Document.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/document/Field.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/document/Field.h new file mode 120000 index 0000000..484fa30 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/document/Field.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/document/Field.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/document/FieldSelector.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/document/FieldSelector.h new file mode 120000 index 0000000..5313ddf --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/document/FieldSelector.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/document/FieldSelector.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/document/NumberTools.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/document/NumberTools.h new file mode 120000 index 0000000..5d5e3f4 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/document/NumberTools.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/document/NumberTools.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/highlighter/Encoder.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/highlighter/Encoder.h new file mode 120000 index 0000000..8f708c2 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/highlighter/Encoder.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/highlighter/Encoder.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/highlighter/Formatter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/highlighter/Formatter.h new file mode 120000 index 0000000..392096c --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/highlighter/Formatter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/highlighter/Formatter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/highlighter/Fragmenter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/highlighter/Fragmenter.h new file mode 120000 index 0000000..ae47a4a --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/highlighter/Fragmenter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/highlighter/Fragmenter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/highlighter/HighlightScorer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/highlighter/HighlightScorer.h new file mode 120000 index 0000000..7202793 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/highlighter/HighlightScorer.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/highlighter/HighlightScorer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/highlighter/Highlighter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/highlighter/Highlighter.h new file mode 120000 index 0000000..3f143aa --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/highlighter/Highlighter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/highlighter/Highlighter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/highlighter/QueryScorer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/highlighter/QueryScorer.h new file mode 120000 index 0000000..f958c6e --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/highlighter/QueryScorer.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/highlighter/QueryScorer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/highlighter/QueryTermExtractor.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/highlighter/QueryTermExtractor.h new file mode 120000 index 0000000..5c61bf0 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/highlighter/QueryTermExtractor.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/highlighter/QueryTermExtractor.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/highlighter/Scorer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/highlighter/Scorer.h new file mode 120000 index 0000000..5fb1048 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/highlighter/Scorer.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/highlighter/Scorer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/highlighter/SimpleFragmenter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/highlighter/SimpleFragmenter.h new file mode 120000 index 0000000..51798bf --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/highlighter/SimpleFragmenter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/highlighter/SimpleFragmenter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/highlighter/SimpleHTMLEncoder.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/highlighter/SimpleHTMLEncoder.h new file mode 120000 index 0000000..25eeb58 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/highlighter/SimpleHTMLEncoder.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/highlighter/SimpleHTMLEncoder.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/highlighter/SimpleHTMLFormatter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/highlighter/SimpleHTMLFormatter.h new file mode 120000 index 0000000..a744a7e --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/highlighter/SimpleHTMLFormatter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/highlighter/SimpleHTMLFormatter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/highlighter/TextFragment.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/highlighter/TextFragment.h new file mode 120000 index 0000000..30d141d --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/highlighter/TextFragment.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/highlighter/TextFragment.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/highlighter/TokenGroup.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/highlighter/TokenGroup.h new file mode 120000 index 0000000..936a9a1 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/highlighter/TokenGroup.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/highlighter/TokenGroup.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/highlighter/TokenSources.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/highlighter/TokenSources.h new file mode 120000 index 0000000..4bea214 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/highlighter/TokenSources.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/highlighter/TokenSources.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/highlighter/WeightedTerm.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/highlighter/WeightedTerm.h new file mode 120000 index 0000000..0e569c7 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/highlighter/WeightedTerm.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/highlighter/WeightedTerm.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/DirectoryIndexReader.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/DirectoryIndexReader.h new file mode 120000 index 0000000..5c66ed7 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/DirectoryIndexReader.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/DirectoryIndexReader.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/IndexDeletionPolicy.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/IndexDeletionPolicy.h new file mode 120000 index 0000000..23edcc1 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/IndexDeletionPolicy.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/IndexDeletionPolicy.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/IndexModifier.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/IndexModifier.h new file mode 120000 index 0000000..0d73888 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/IndexModifier.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/IndexModifier.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/IndexReader.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/IndexReader.h new file mode 120000 index 0000000..aec2c7f --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/IndexReader.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/IndexReader.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/IndexWriter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/IndexWriter.h new file mode 120000 index 0000000..9a697be --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/IndexWriter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/IndexWriter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/MergePolicy.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/MergePolicy.h new file mode 120000 index 0000000..3d5f73a --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/MergePolicy.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/MergePolicy.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/MergeScheduler.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/MergeScheduler.h new file mode 120000 index 0000000..69732ad --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/MergeScheduler.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/MergeScheduler.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/MultiReader.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/MultiReader.h new file mode 120000 index 0000000..2db408a --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/MultiReader.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/MultiReader.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/MultipleTermPositions.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/MultipleTermPositions.h new file mode 120000 index 0000000..7917a1d --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/MultipleTermPositions.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/MultipleTermPositions.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/Payload.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/Payload.h new file mode 120000 index 0000000..3815610 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/Payload.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/Payload.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/Term.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/Term.h new file mode 120000 index 0000000..8ee534f --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/Term.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/Term.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/TermVector.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/TermVector.h new file mode 120000 index 0000000..71038d1 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/TermVector.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/TermVector.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/Terms.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/Terms.h new file mode 120000 index 0000000..1c2f3e5 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/Terms.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/Terms.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/_CompoundFile.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/_CompoundFile.h new file mode 120000 index 0000000..3c2fcd8 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/_CompoundFile.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_CompoundFile.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/_DocumentsWriter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/_DocumentsWriter.h new file mode 120000 index 0000000..70e4e2a --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/_DocumentsWriter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_DocumentsWriter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/_FieldInfo.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/_FieldInfo.h new file mode 120000 index 0000000..d066778 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/_FieldInfo.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_FieldInfo.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/_FieldInfos.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/_FieldInfos.h new file mode 120000 index 0000000..fef477b --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/_FieldInfos.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_FieldInfos.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/_FieldsReader.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/_FieldsReader.h new file mode 120000 index 0000000..42acd3b --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/_FieldsReader.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_FieldsReader.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/_FieldsWriter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/_FieldsWriter.h new file mode 120000 index 0000000..a894b57 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/_FieldsWriter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_FieldsWriter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/_IndexFileDeleter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/_IndexFileDeleter.h new file mode 120000 index 0000000..fd2767f --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/_IndexFileDeleter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_IndexFileDeleter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/_IndexFileNameFilter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/_IndexFileNameFilter.h new file mode 120000 index 0000000..7b314da --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/_IndexFileNameFilter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_IndexFileNameFilter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/_IndexFileNames.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/_IndexFileNames.h new file mode 120000 index 0000000..84f3bd1 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/_IndexFileNames.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_IndexFileNames.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/_MultiSegmentReader.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/_MultiSegmentReader.h new file mode 120000 index 0000000..51de9d9 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/_MultiSegmentReader.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_MultiSegmentReader.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/_SegmentHeader.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/_SegmentHeader.h new file mode 120000 index 0000000..4404cae --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/_SegmentHeader.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_SegmentHeader.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/_SegmentInfos.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/_SegmentInfos.h new file mode 120000 index 0000000..f9a5537 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/_SegmentInfos.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_SegmentInfos.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/_SegmentMergeInfo.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/_SegmentMergeInfo.h new file mode 120000 index 0000000..4a4184a --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/_SegmentMergeInfo.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_SegmentMergeInfo.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/_SegmentMergeQueue.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/_SegmentMergeQueue.h new file mode 120000 index 0000000..0fdafbc --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/_SegmentMergeQueue.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_SegmentMergeQueue.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/_SegmentMerger.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/_SegmentMerger.h new file mode 120000 index 0000000..bc1dd8b --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/_SegmentMerger.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_SegmentMerger.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/_SegmentTermEnum.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/_SegmentTermEnum.h new file mode 120000 index 0000000..002720a --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/_SegmentTermEnum.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_SegmentTermEnum.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/_SkipListReader.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/_SkipListReader.h new file mode 120000 index 0000000..6b8a8b0 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/_SkipListReader.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_SkipListReader.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/_SkipListWriter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/_SkipListWriter.h new file mode 120000 index 0000000..17cf80c --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/_SkipListWriter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_SkipListWriter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/_Term.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/_Term.h new file mode 120000 index 0000000..ca676c4 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/_Term.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_Term.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/_TermInfo.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/_TermInfo.h new file mode 120000 index 0000000..3c59195 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/_TermInfo.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_TermInfo.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/_TermInfosReader.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/_TermInfosReader.h new file mode 120000 index 0000000..5f137ef --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/_TermInfosReader.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_TermInfosReader.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/_TermInfosWriter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/_TermInfosWriter.h new file mode 120000 index 0000000..bf590b0 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/_TermInfosWriter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_TermInfosWriter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/_TermVector.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/_TermVector.h new file mode 120000 index 0000000..f1ee6f4 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/index/_TermVector.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/index/_TermVector.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/queryParser/MultiFieldQueryParser.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/queryParser/MultiFieldQueryParser.h new file mode 120000 index 0000000..b9525c1 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/queryParser/MultiFieldQueryParser.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/queryParser/MultiFieldQueryParser.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/queryParser/QueryParser.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/queryParser/QueryParser.h new file mode 120000 index 0000000..23f0ac7 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/queryParser/QueryParser.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/queryParser/QueryParser.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/queryParser/QueryParserConstants.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/queryParser/QueryParserConstants.h new file mode 120000 index 0000000..d727749 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/queryParser/QueryParserConstants.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/queryParser/QueryParserConstants.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/queryParser/QueryParserTokenManager.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/queryParser/QueryParserTokenManager.h new file mode 120000 index 0000000..4c74b81 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/queryParser/QueryParserTokenManager.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/queryParser/QueryParserTokenManager.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/queryParser/QueryToken.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/queryParser/QueryToken.h new file mode 120000 index 0000000..67b9604 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/queryParser/QueryToken.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/queryParser/QueryToken.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/queryParser/_CharStream.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/queryParser/_CharStream.h new file mode 120000 index 0000000..3030f3b --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/queryParser/_CharStream.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/queryParser/_CharStream.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/queryParser/_FastCharStream.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/queryParser/_FastCharStream.h new file mode 120000 index 0000000..37e3f74 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/queryParser/_FastCharStream.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/queryParser/_FastCharStream.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/BooleanClause.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/BooleanClause.h new file mode 120000 index 0000000..944d581 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/BooleanClause.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/BooleanClause.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/BooleanQuery.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/BooleanQuery.h new file mode 120000 index 0000000..c684d29 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/BooleanQuery.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/BooleanQuery.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/CachingSpanFilter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/CachingSpanFilter.h new file mode 120000 index 0000000..58b93f6 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/CachingSpanFilter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/CachingSpanFilter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/CachingWrapperFilter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/CachingWrapperFilter.h new file mode 120000 index 0000000..90a1e09 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/CachingWrapperFilter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/CachingWrapperFilter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/ChainedFilter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/ChainedFilter.h new file mode 120000 index 0000000..d7c536c --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/ChainedFilter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/ChainedFilter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/Compare.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/Compare.h new file mode 120000 index 0000000..d226478 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/Compare.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/Compare.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/ConstantScoreQuery.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/ConstantScoreQuery.h new file mode 120000 index 0000000..bf45e1c --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/ConstantScoreQuery.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/ConstantScoreQuery.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/DateFilter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/DateFilter.h new file mode 120000 index 0000000..f346984 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/DateFilter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/DateFilter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/Explanation.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/Explanation.h new file mode 120000 index 0000000..d658350 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/Explanation.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/Explanation.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/FieldCache.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/FieldCache.h new file mode 120000 index 0000000..c5cfe49 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/FieldCache.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/FieldCache.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/FieldDoc.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/FieldDoc.h new file mode 120000 index 0000000..db06ecb --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/FieldDoc.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/FieldDoc.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/FieldSortedHitQueue.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/FieldSortedHitQueue.h new file mode 120000 index 0000000..81f498b --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/FieldSortedHitQueue.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/FieldSortedHitQueue.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/Filter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/Filter.h new file mode 120000 index 0000000..701d25a --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/Filter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/Filter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/FilteredTermEnum.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/FilteredTermEnum.h new file mode 120000 index 0000000..9c670e1 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/FilteredTermEnum.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/FilteredTermEnum.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/FuzzyQuery.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/FuzzyQuery.h new file mode 120000 index 0000000..4c553bf --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/FuzzyQuery.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/FuzzyQuery.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/Hits.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/Hits.h new file mode 120000 index 0000000..e6321cf --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/Hits.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/Hits.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/IndexSearcher.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/IndexSearcher.h new file mode 120000 index 0000000..aff1ec2 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/IndexSearcher.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/IndexSearcher.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/MatchAllDocsQuery.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/MatchAllDocsQuery.h new file mode 120000 index 0000000..bfeda5f --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/MatchAllDocsQuery.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/MatchAllDocsQuery.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/MultiPhraseQuery.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/MultiPhraseQuery.h new file mode 120000 index 0000000..4601f59 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/MultiPhraseQuery.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/MultiPhraseQuery.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/MultiSearcher.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/MultiSearcher.h new file mode 120000 index 0000000..26b7692 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/MultiSearcher.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/MultiSearcher.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/MultiTermQuery.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/MultiTermQuery.h new file mode 120000 index 0000000..b04b339 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/MultiTermQuery.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/MultiTermQuery.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/PhraseQuery.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/PhraseQuery.h new file mode 120000 index 0000000..eec87f1 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/PhraseQuery.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/PhraseQuery.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/PrefixQuery.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/PrefixQuery.h new file mode 120000 index 0000000..4fb6eee --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/PrefixQuery.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/PrefixQuery.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/Query.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/Query.h new file mode 120000 index 0000000..041a836 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/Query.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/Query.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/QueryFilter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/QueryFilter.h new file mode 120000 index 0000000..7daa032 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/QueryFilter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/QueryFilter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/RangeFilter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/RangeFilter.h new file mode 120000 index 0000000..21a3195 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/RangeFilter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/RangeFilter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/RangeQuery.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/RangeQuery.h new file mode 120000 index 0000000..c92e12a --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/RangeQuery.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/RangeQuery.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/Scorer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/Scorer.h new file mode 120000 index 0000000..214fd3e --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/Scorer.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/Scorer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/ScorerDocQueue.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/ScorerDocQueue.h new file mode 120000 index 0000000..d4f058e --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/ScorerDocQueue.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/ScorerDocQueue.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/SearchHeader.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/SearchHeader.h new file mode 120000 index 0000000..9779f35 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/SearchHeader.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/SearchHeader.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/Searchable.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/Searchable.h new file mode 120000 index 0000000..4d2aa09 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/Searchable.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/Searchable.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/Similarity.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/Similarity.h new file mode 120000 index 0000000..3b238d4 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/Similarity.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/Similarity.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/Sort.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/Sort.h new file mode 120000 index 0000000..15816e1 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/Sort.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/Sort.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/SpanFilter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/SpanFilter.h new file mode 120000 index 0000000..016615c --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/SpanFilter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/SpanFilter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/SpanFilterResult.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/SpanFilterResult.h new file mode 120000 index 0000000..1fb2f5d --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/SpanFilterResult.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/SpanFilterResult.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/SpanQueryFilter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/SpanQueryFilter.h new file mode 120000 index 0000000..089eea1 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/SpanQueryFilter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/SpanQueryFilter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/TermQuery.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/TermQuery.h new file mode 120000 index 0000000..a7ae74d --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/TermQuery.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/TermQuery.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/WildcardQuery.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/WildcardQuery.h new file mode 120000 index 0000000..e2b7117 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/WildcardQuery.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/WildcardQuery.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/WildcardTermEnum.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/WildcardTermEnum.h new file mode 120000 index 0000000..ebb467b --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/WildcardTermEnum.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/WildcardTermEnum.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/_BooleanScorer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/_BooleanScorer.h new file mode 120000 index 0000000..af79183 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/_BooleanScorer.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/_BooleanScorer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/_BooleanScorer2.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/_BooleanScorer2.h new file mode 120000 index 0000000..7c51fc3 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/_BooleanScorer2.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/_BooleanScorer2.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/_ConjunctionScorer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/_ConjunctionScorer.h new file mode 120000 index 0000000..05de6cd --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/_ConjunctionScorer.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/_ConjunctionScorer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/_DisjunctionSumScorer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/_DisjunctionSumScorer.h new file mode 120000 index 0000000..c0497b4 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/_DisjunctionSumScorer.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/_DisjunctionSumScorer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/_ExactPhraseScorer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/_ExactPhraseScorer.h new file mode 120000 index 0000000..41d028a --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/_ExactPhraseScorer.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/_ExactPhraseScorer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/_FieldCacheImpl.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/_FieldCacheImpl.h new file mode 120000 index 0000000..c0e4403 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/_FieldCacheImpl.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/_FieldCacheImpl.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/_FieldDocSortedHitQueue.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/_FieldDocSortedHitQueue.h new file mode 120000 index 0000000..9def8d9 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/_FieldDocSortedHitQueue.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/_FieldDocSortedHitQueue.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/_HitQueue.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/_HitQueue.h new file mode 120000 index 0000000..1bc72aa --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/_HitQueue.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/_HitQueue.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/_PhrasePositions.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/_PhrasePositions.h new file mode 120000 index 0000000..b487ca4 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/_PhrasePositions.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/_PhrasePositions.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/_PhraseQueue.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/_PhraseQueue.h new file mode 120000 index 0000000..9d88eb8 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/_PhraseQueue.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/_PhraseQueue.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/_PhraseScorer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/_PhraseScorer.h new file mode 120000 index 0000000..64c5309 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/_PhraseScorer.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/_PhraseScorer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/_SloppyPhraseScorer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/_SloppyPhraseScorer.h new file mode 120000 index 0000000..2c76b21 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/_SloppyPhraseScorer.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/_SloppyPhraseScorer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/_TermScorer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/_TermScorer.h new file mode 120000 index 0000000..728f66f --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/_TermScorer.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/search/_TermScorer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/spans/SpanFirstQuery.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/spans/SpanFirstQuery.h new file mode 120000 index 0000000..8b33223 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/spans/SpanFirstQuery.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/core/CLucene/search/spans/SpanFirstQuery.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/spans/SpanNearQuery.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/spans/SpanNearQuery.h new file mode 120000 index 0000000..3ba0b89 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/spans/SpanNearQuery.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/core/CLucene/search/spans/SpanNearQuery.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/spans/SpanNotQuery.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/spans/SpanNotQuery.h new file mode 120000 index 0000000..0e6fe55 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/spans/SpanNotQuery.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/core/CLucene/search/spans/SpanNotQuery.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/spans/SpanOrQuery.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/spans/SpanOrQuery.h new file mode 120000 index 0000000..6fa5608 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/spans/SpanOrQuery.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/core/CLucene/search/spans/SpanOrQuery.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/spans/SpanQuery.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/spans/SpanQuery.h new file mode 120000 index 0000000..68ee308 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/spans/SpanQuery.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/core/CLucene/search/spans/SpanQuery.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/spans/SpanScorer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/spans/SpanScorer.h new file mode 120000 index 0000000..17bf74e --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/spans/SpanScorer.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/core/CLucene/search/spans/SpanScorer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/spans/SpanTermQuery.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/spans/SpanTermQuery.h new file mode 120000 index 0000000..39f8484 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/spans/SpanTermQuery.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/core/CLucene/search/spans/SpanTermQuery.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/spans/SpanWeight.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/spans/SpanWeight.h new file mode 120000 index 0000000..ed11e43 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/spans/SpanWeight.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/core/CLucene/search/spans/SpanWeight.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/spans/Spans.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/spans/Spans.h new file mode 120000 index 0000000..0e6bc36 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/spans/Spans.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/core/CLucene/search/spans/Spans.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/spans/_EmptySpans.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/spans/_EmptySpans.h new file mode 120000 index 0000000..3306dd8 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/spans/_EmptySpans.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/core/CLucene/search/spans/_EmptySpans.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/spans/_NearSpansOrdered.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/spans/_NearSpansOrdered.h new file mode 120000 index 0000000..6ff53e3 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/spans/_NearSpansOrdered.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/core/CLucene/search/spans/_NearSpansOrdered.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/spans/_NearSpansUnordered.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/spans/_NearSpansUnordered.h new file mode 120000 index 0000000..578e834 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/spans/_NearSpansUnordered.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/core/CLucene/search/spans/_NearSpansUnordered.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/spans/_TermSpans.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/spans/_TermSpans.h new file mode 120000 index 0000000..5df50f3 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/search/spans/_TermSpans.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/core/CLucene/search/spans/_TermSpans.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/SnowballAnalyzer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/SnowballAnalyzer.h new file mode 120000 index 0000000..df1c345 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/SnowballAnalyzer.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/SnowballAnalyzer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/SnowballFilter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/SnowballFilter.h new file mode 120000 index 0000000..8df9fd0 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/SnowballFilter.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/SnowballFilter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/include/libstemmer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/include/libstemmer.h new file mode 120000 index 0000000..b1aa938 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/include/libstemmer.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/include/libstemmer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/libstemmer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/libstemmer.h new file mode 120000 index 0000000..51082f8 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/libstemmer.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/libstemmer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/libstemmer/modules.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/libstemmer/modules.h new file mode 120000 index 0000000..fa1a1b8 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/libstemmer/modules.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/libstemmer/modules.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/runtime/api.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/runtime/api.h new file mode 120000 index 0000000..55a132e --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/runtime/api.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/runtime/api.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/runtime/header.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/runtime/header.h new file mode 120000 index 0000000..d057a30 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/runtime/header.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/runtime/header.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_danish.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_danish.h new file mode 120000 index 0000000..481c19f --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_danish.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_danish.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_dutch.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_dutch.h new file mode 120000 index 0000000..c53e039 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_dutch.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_dutch.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_english.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_english.h new file mode 120000 index 0000000..828e651 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_english.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_english.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_finnish.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_finnish.h new file mode 120000 index 0000000..5c85699 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_finnish.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_finnish.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_french.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_french.h new file mode 120000 index 0000000..8579461 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_french.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_french.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_german.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_german.h new file mode 120000 index 0000000..9b77b13 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_german.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_german.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_italian.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_italian.h new file mode 120000 index 0000000..c748e1c --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_italian.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_italian.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_norwegian.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_norwegian.h new file mode 120000 index 0000000..8807949 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_norwegian.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_norwegian.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_porter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_porter.h new file mode 120000 index 0000000..8af056e --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_porter.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_porter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_portuguese.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_portuguese.h new file mode 120000 index 0000000..e7b9b26 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_portuguese.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_portuguese.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_spanish.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_spanish.h new file mode 120000 index 0000000..1f80c8c --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_spanish.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_spanish.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_swedish.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_swedish.h new file mode 120000 index 0000000..946a29c --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_ISO_8859_1_swedish.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_swedish.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_KOI8_R_russian.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_KOI8_R_russian.h new file mode 120000 index 0000000..836b287 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_KOI8_R_russian.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_KOI8_R_russian.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_danish.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_danish.h new file mode 120000 index 0000000..b6aa6b7 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_danish.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_danish.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_dutch.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_dutch.h new file mode 120000 index 0000000..1259511 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_dutch.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_dutch.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_english.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_english.h new file mode 120000 index 0000000..5d62fbb --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_english.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_english.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_finnish.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_finnish.h new file mode 120000 index 0000000..15a68dd --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_finnish.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_finnish.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_french.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_french.h new file mode 120000 index 0000000..1f93047 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_french.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_french.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_german.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_german.h new file mode 120000 index 0000000..3be5731 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_german.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_german.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_italian.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_italian.h new file mode 120000 index 0000000..8c3f3f4 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_italian.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_italian.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_norwegian.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_norwegian.h new file mode 120000 index 0000000..d3d5a13 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_norwegian.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_norwegian.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_porter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_porter.h new file mode 120000 index 0000000..56ac223 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_porter.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_porter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_portuguese.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_portuguese.h new file mode 120000 index 0000000..e13a4ee --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_portuguese.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_portuguese.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_russian.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_russian.h new file mode 120000 index 0000000..d0f3ae7 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_russian.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_russian.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_spanish.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_spanish.h new file mode 120000 index 0000000..4ef22ae --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_spanish.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_spanish.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_swedish.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_swedish.h new file mode 120000 index 0000000..941252b --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/snowball/src_c/stem_UTF_8_swedish.h @@ -0,0 +1 @@ +../../../../../../BRCLucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_swedish.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/store/Directory.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/store/Directory.h new file mode 120000 index 0000000..a7ee9fd --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/store/Directory.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/store/Directory.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/store/FSDirectory.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/store/FSDirectory.h new file mode 120000 index 0000000..8c2ed46 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/store/FSDirectory.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/store/FSDirectory.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/store/IndexInput.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/store/IndexInput.h new file mode 120000 index 0000000..60c84ee --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/store/IndexInput.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/store/IndexInput.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/store/IndexOutput.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/store/IndexOutput.h new file mode 120000 index 0000000..eca18f8 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/store/IndexOutput.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/store/IndexOutput.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/store/Lock.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/store/Lock.h new file mode 120000 index 0000000..7517270 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/store/Lock.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/store/Lock.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/store/LockFactory.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/store/LockFactory.h new file mode 120000 index 0000000..0610a0c --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/store/LockFactory.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/store/LockFactory.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/store/RAMDirectory.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/store/RAMDirectory.h new file mode 120000 index 0000000..e049713 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/store/RAMDirectory.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/store/RAMDirectory.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/store/_Lock.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/store/_Lock.h new file mode 120000 index 0000000..e0bcdb9 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/store/_Lock.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/store/_Lock.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/store/_MMapIndexInput.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/store/_MMapIndexInput.h new file mode 120000 index 0000000..222c25d --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/store/_MMapIndexInput.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/store/_MMapIndexInput.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/store/_RAMDirectory.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/store/_RAMDirectory.h new file mode 120000 index 0000000..392d6be --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/store/_RAMDirectory.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/store/_RAMDirectory.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/util/Array.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/util/Array.h new file mode 120000 index 0000000..b8a4b40 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/util/Array.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/util/Array.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/util/BitSet.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/util/BitSet.h new file mode 120000 index 0000000..b7b8811 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/util/BitSet.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/util/BitSet.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/util/CLStreams.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/util/CLStreams.h new file mode 120000 index 0000000..c1b3d84 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/util/CLStreams.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/util/CLStreams.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/util/Equators.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/util/Equators.h new file mode 120000 index 0000000..d162080 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/util/Equators.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/util/Equators.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/util/Misc.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/util/Misc.h new file mode 120000 index 0000000..8020dc5 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/util/Misc.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/shared/CLucene/util/Misc.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/util/PriorityQueue.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/util/PriorityQueue.h new file mode 120000 index 0000000..748c9e8 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/util/PriorityQueue.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/util/PriorityQueue.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/util/Reader.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/util/Reader.h new file mode 120000 index 0000000..ccb3d69 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/util/Reader.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/util/Reader.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/util/StringBuffer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/util/StringBuffer.h new file mode 120000 index 0000000..f8490d2 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/util/StringBuffer.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/shared/CLucene/util/StringBuffer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/util/VoidList.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/util/VoidList.h new file mode 120000 index 0000000..566742b --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/util/VoidList.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/util/VoidList.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/util/VoidMap.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/util/VoidMap.h new file mode 120000 index 0000000..8beee74 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/util/VoidMap.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/util/VoidMap.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/util/_Arrays.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/util/_Arrays.h new file mode 120000 index 0000000..4962a5d --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/util/_Arrays.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/util/_Arrays.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/util/_FastCharStream.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/util/_FastCharStream.h new file mode 120000 index 0000000..bdcaed0 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/util/_FastCharStream.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/util/_FastCharStream.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/util/_MD5Digester.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/util/_MD5Digester.h new file mode 120000 index 0000000..57e6c85 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/util/_MD5Digester.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/util/_MD5Digester.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/util/_StringIntern.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/util/_StringIntern.h new file mode 120000 index 0000000..31d897a --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/util/_StringIntern.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/util/_StringIntern.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/util/_ThreadLocal.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/util/_ThreadLocal.h new file mode 120000 index 0000000..431d8f8 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/util/_ThreadLocal.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/util/_ThreadLocal.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/util/_VoidList.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/util/_VoidList.h new file mode 120000 index 0000000..c1a34f3 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/util/_VoidList.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/util/_VoidList.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/util/_VoidMap.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/util/_VoidMap.h new file mode 120000 index 0000000..1d9f0c8 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/util/_VoidMap.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/util/_VoidMap.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/util/_bufferedstream.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/util/_bufferedstream.h new file mode 120000 index 0000000..8e2e32d --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/util/_bufferedstream.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/util/_bufferedstream.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/util/_dirent.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/util/_dirent.h new file mode 120000 index 0000000..cc8140f --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/util/_dirent.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/shared/CLucene/util/_dirent.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/util/_streambase.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/util/_streambase.h new file mode 120000 index 0000000..188d8fa --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/util/_streambase.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/util/_streambase.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/util/_streambuffer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/util/_streambuffer.h new file mode 120000 index 0000000..9eec76a --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/util/_streambuffer.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/core/CLucene/util/_streambuffer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/util/arrayinputstream.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/util/arrayinputstream.h new file mode 120000 index 0000000..0fae9b6 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/util/arrayinputstream.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/util/arrayinputstream.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/util/byteinputstream.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/util/byteinputstream.h new file mode 120000 index 0000000..8dc8d98 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/util/byteinputstream.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/util/byteinputstream.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/util/gzipcompressstream.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/util/gzipcompressstream.h new file mode 120000 index 0000000..adb6a93 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/util/gzipcompressstream.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/util/gzipcompressstream.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/util/gzipinputstream.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/util/gzipinputstream.h new file mode 120000 index 0000000..1fb5187 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/util/gzipinputstream.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/util/gzipinputstream.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/util/streamarray.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/util/streamarray.h new file mode 120000 index 0000000..8aba544 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRCLucene/CLucene/util/streamarray.h @@ -0,0 +1 @@ +../../../../../BRCLucene/src/contribs-lib/CLucene/util/streamarray.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene.h deleted file mode 120000 index 30fa9f8..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../clucene/src/core/CLucene.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/CLConfig.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/CLConfig.h deleted file mode 120000 index 33aafbc..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/CLConfig.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../clucene/src/core/CLucene/CLConfig.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/LuceneThreads.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/LuceneThreads.h deleted file mode 120000 index ef01cf5..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/LuceneThreads.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../clucene/src/shared/CLucene/LuceneThreads.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/SharedHeader.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/SharedHeader.h deleted file mode 120000 index efe9d66..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/SharedHeader.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../clucene/src/shared/CLucene/SharedHeader.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/StdHeader.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/StdHeader.h deleted file mode 120000 index 56f479f..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/StdHeader.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../clucene/src/core/CLucene/StdHeader.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/_ApiHeader.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/_ApiHeader.h deleted file mode 120000 index 09861a9..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/_ApiHeader.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../clucene/src/core/CLucene/_ApiHeader.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/_SharedHeader.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/_SharedHeader.h deleted file mode 120000 index d4b7115..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/_SharedHeader.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../clucene/src/shared/CLucene/_SharedHeader.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/_clucene-config.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/_clucene-config.h deleted file mode 120000 index 1f444a6..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/_clucene-config.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../BRFullTextSearch/CLucene/_clucene-config.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/analysis/AnalysisHeader.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/analysis/AnalysisHeader.h deleted file mode 120000 index be4350e..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/analysis/AnalysisHeader.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/analysis/AnalysisHeader.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/analysis/Analyzers.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/analysis/Analyzers.h deleted file mode 120000 index e55085c..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/analysis/Analyzers.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/analysis/Analyzers.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/analysis/CachingTokenFilter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/analysis/CachingTokenFilter.h deleted file mode 120000 index 86a165d..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/analysis/CachingTokenFilter.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/analysis/CachingTokenFilter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/analysis/LanguageBasedAnalyzer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/analysis/LanguageBasedAnalyzer.h deleted file mode 120000 index 1c712f8..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/analysis/LanguageBasedAnalyzer.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/contribs-lib/CLucene/analysis/LanguageBasedAnalyzer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/analysis/PorterStemmer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/analysis/PorterStemmer.h deleted file mode 120000 index 6034cdf..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/analysis/PorterStemmer.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/contribs-lib/CLucene/analysis/PorterStemmer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/analysis/cjk/CJKAnalyzer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/analysis/cjk/CJKAnalyzer.h deleted file mode 120000 index 88ad359..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/analysis/cjk/CJKAnalyzer.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/contribs-lib/CLucene/analysis/cjk/CJKAnalyzer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/analysis/de/GermanAnalyzer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/analysis/de/GermanAnalyzer.h deleted file mode 120000 index f613a4f..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/analysis/de/GermanAnalyzer.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/contribs-lib/CLucene/analysis/de/GermanAnalyzer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/analysis/de/GermanStemFilter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/analysis/de/GermanStemFilter.h deleted file mode 120000 index ea5415e..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/analysis/de/GermanStemFilter.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/contribs-lib/CLucene/analysis/de/GermanStemFilter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/analysis/de/GermanStemmer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/analysis/de/GermanStemmer.h deleted file mode 120000 index f963d09..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/analysis/de/GermanStemmer.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/contribs-lib/CLucene/analysis/de/GermanStemmer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/analysis/standard/StandardAnalyzer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/analysis/standard/StandardAnalyzer.h deleted file mode 120000 index 966a891..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/analysis/standard/StandardAnalyzer.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/core/CLucene/analysis/standard/StandardAnalyzer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/analysis/standard/StandardFilter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/analysis/standard/StandardFilter.h deleted file mode 120000 index cfb3ec8..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/analysis/standard/StandardFilter.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/core/CLucene/analysis/standard/StandardFilter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/analysis/standard/StandardTokenizer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/analysis/standard/StandardTokenizer.h deleted file mode 120000 index e0a691c..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/analysis/standard/StandardTokenizer.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/core/CLucene/analysis/standard/StandardTokenizer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/analysis/standard/StandardTokenizerConstants.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/analysis/standard/StandardTokenizerConstants.h deleted file mode 120000 index df34083..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/analysis/standard/StandardTokenizerConstants.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/core/CLucene/analysis/standard/StandardTokenizerConstants.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/clucene-config.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/clucene-config.h deleted file mode 120000 index 5ab06d7..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/clucene-config.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../BRFullTextSearch/CLucene/clucene-config.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/config/_gunichartables.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/config/_gunichartables.h deleted file mode 120000 index 47cf432..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/config/_gunichartables.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/shared/CLucene/config/_gunichartables.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/config/_threads.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/config/_threads.h deleted file mode 120000 index cc2d9bb..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/config/_threads.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/shared/CLucene/config/_threads.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/config/repl_tchar.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/config/repl_tchar.h deleted file mode 120000 index b617ea7..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/config/repl_tchar.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/shared/CLucene/config/repl_tchar.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/config/repl_wchar.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/config/repl_wchar.h deleted file mode 120000 index f48732d..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/config/repl_wchar.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/shared/CLucene/config/repl_wchar.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/config/repl_wctype.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/config/repl_wctype.h deleted file mode 120000 index 35adba4..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/config/repl_wctype.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/shared/CLucene/config/repl_wctype.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/debug/_condition.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/debug/_condition.h deleted file mode 120000 index 33a9b0a..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/debug/_condition.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/shared/CLucene/debug/_condition.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/debug/error.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/debug/error.h deleted file mode 120000 index 8ae4d3e..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/debug/error.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/debug/error.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/debug/lucenebase.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/debug/lucenebase.h deleted file mode 120000 index 8954efd..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/debug/lucenebase.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/debug/lucenebase.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/debug/mem.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/debug/mem.h deleted file mode 120000 index dc3c88f..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/debug/mem.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/debug/mem.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/document/DateField.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/document/DateField.h deleted file mode 120000 index 2f8537d..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/document/DateField.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/document/DateField.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/document/DateTools.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/document/DateTools.h deleted file mode 120000 index 8406b73..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/document/DateTools.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/document/DateTools.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/document/Document.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/document/Document.h deleted file mode 120000 index 3af39ed..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/document/Document.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/document/Document.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/document/Field.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/document/Field.h deleted file mode 120000 index 2043418..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/document/Field.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/document/Field.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/document/FieldSelector.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/document/FieldSelector.h deleted file mode 120000 index 9bfac6f..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/document/FieldSelector.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/document/FieldSelector.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/document/NumberTools.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/document/NumberTools.h deleted file mode 120000 index 2de6a2d..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/document/NumberTools.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/document/NumberTools.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/highlighter/Encoder.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/highlighter/Encoder.h deleted file mode 120000 index e7b3328..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/highlighter/Encoder.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/contribs-lib/CLucene/highlighter/Encoder.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/highlighter/Formatter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/highlighter/Formatter.h deleted file mode 120000 index 0d39aa1..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/highlighter/Formatter.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/contribs-lib/CLucene/highlighter/Formatter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/highlighter/Fragmenter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/highlighter/Fragmenter.h deleted file mode 120000 index 71fc0f9..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/highlighter/Fragmenter.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/contribs-lib/CLucene/highlighter/Fragmenter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/highlighter/HighlightScorer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/highlighter/HighlightScorer.h deleted file mode 120000 index 5d0d6bc..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/highlighter/HighlightScorer.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/contribs-lib/CLucene/highlighter/HighlightScorer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/highlighter/Highlighter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/highlighter/Highlighter.h deleted file mode 120000 index ed753bb..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/highlighter/Highlighter.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/contribs-lib/CLucene/highlighter/Highlighter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/highlighter/QueryScorer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/highlighter/QueryScorer.h deleted file mode 120000 index c9672d7..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/highlighter/QueryScorer.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/contribs-lib/CLucene/highlighter/QueryScorer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/highlighter/QueryTermExtractor.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/highlighter/QueryTermExtractor.h deleted file mode 120000 index d947d3e..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/highlighter/QueryTermExtractor.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/contribs-lib/CLucene/highlighter/QueryTermExtractor.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/highlighter/Scorer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/highlighter/Scorer.h deleted file mode 120000 index 09f5206..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/highlighter/Scorer.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/contribs-lib/CLucene/highlighter/Scorer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/highlighter/SimpleFragmenter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/highlighter/SimpleFragmenter.h deleted file mode 120000 index 39015f4..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/highlighter/SimpleFragmenter.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/contribs-lib/CLucene/highlighter/SimpleFragmenter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/highlighter/SimpleHTMLEncoder.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/highlighter/SimpleHTMLEncoder.h deleted file mode 120000 index bbe3ae9..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/highlighter/SimpleHTMLEncoder.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/contribs-lib/CLucene/highlighter/SimpleHTMLEncoder.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/highlighter/SimpleHTMLFormatter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/highlighter/SimpleHTMLFormatter.h deleted file mode 120000 index 408589d..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/highlighter/SimpleHTMLFormatter.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/contribs-lib/CLucene/highlighter/SimpleHTMLFormatter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/highlighter/TextFragment.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/highlighter/TextFragment.h deleted file mode 120000 index f5799ba..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/highlighter/TextFragment.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/contribs-lib/CLucene/highlighter/TextFragment.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/highlighter/TokenGroup.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/highlighter/TokenGroup.h deleted file mode 120000 index bd15c34..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/highlighter/TokenGroup.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/contribs-lib/CLucene/highlighter/TokenGroup.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/highlighter/TokenSources.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/highlighter/TokenSources.h deleted file mode 120000 index 316a1f3..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/highlighter/TokenSources.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/contribs-lib/CLucene/highlighter/TokenSources.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/highlighter/WeightedTerm.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/highlighter/WeightedTerm.h deleted file mode 120000 index df51d84..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/highlighter/WeightedTerm.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/contribs-lib/CLucene/highlighter/WeightedTerm.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/DirectoryIndexReader.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/DirectoryIndexReader.h deleted file mode 120000 index 6f69a05..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/DirectoryIndexReader.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/index/DirectoryIndexReader.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/IndexDeletionPolicy.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/IndexDeletionPolicy.h deleted file mode 120000 index 273d972..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/IndexDeletionPolicy.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/index/IndexDeletionPolicy.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/IndexModifier.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/IndexModifier.h deleted file mode 120000 index 3599f26..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/IndexModifier.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/index/IndexModifier.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/IndexReader.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/IndexReader.h deleted file mode 120000 index 6ba03ba..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/IndexReader.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/index/IndexReader.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/IndexWriter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/IndexWriter.h deleted file mode 120000 index bfb00e0..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/IndexWriter.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/index/IndexWriter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/MergePolicy.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/MergePolicy.h deleted file mode 120000 index 2cdc4e8..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/MergePolicy.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/index/MergePolicy.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/MergeScheduler.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/MergeScheduler.h deleted file mode 120000 index b89ec76..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/MergeScheduler.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/index/MergeScheduler.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/MultiReader.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/MultiReader.h deleted file mode 120000 index 685ea10..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/MultiReader.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/index/MultiReader.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/MultipleTermPositions.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/MultipleTermPositions.h deleted file mode 120000 index 7898d6a..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/MultipleTermPositions.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/index/MultipleTermPositions.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/Payload.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/Payload.h deleted file mode 120000 index 3ef5664..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/Payload.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/index/Payload.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/Term.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/Term.h deleted file mode 120000 index 19819d9..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/Term.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/index/Term.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/TermVector.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/TermVector.h deleted file mode 120000 index 569f909..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/TermVector.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/index/TermVector.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/Terms.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/Terms.h deleted file mode 120000 index 4c03dbb..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/Terms.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/index/Terms.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/_CompoundFile.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/_CompoundFile.h deleted file mode 120000 index 880efef..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/_CompoundFile.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/index/_CompoundFile.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/_DocumentsWriter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/_DocumentsWriter.h deleted file mode 120000 index dd34ee3..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/_DocumentsWriter.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/index/_DocumentsWriter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/_FieldInfo.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/_FieldInfo.h deleted file mode 120000 index b011307..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/_FieldInfo.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/index/_FieldInfo.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/_FieldInfos.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/_FieldInfos.h deleted file mode 120000 index ba53819..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/_FieldInfos.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/index/_FieldInfos.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/_FieldsReader.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/_FieldsReader.h deleted file mode 120000 index 8920765..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/_FieldsReader.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/index/_FieldsReader.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/_FieldsWriter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/_FieldsWriter.h deleted file mode 120000 index c48e34b..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/_FieldsWriter.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/index/_FieldsWriter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/_IndexFileDeleter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/_IndexFileDeleter.h deleted file mode 120000 index 6815318..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/_IndexFileDeleter.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/index/_IndexFileDeleter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/_IndexFileNameFilter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/_IndexFileNameFilter.h deleted file mode 120000 index bb1ec18..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/_IndexFileNameFilter.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/index/_IndexFileNameFilter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/_IndexFileNames.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/_IndexFileNames.h deleted file mode 120000 index e45a0f5..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/_IndexFileNames.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/index/_IndexFileNames.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/_MultiSegmentReader.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/_MultiSegmentReader.h deleted file mode 120000 index 61487a5..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/_MultiSegmentReader.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/index/_MultiSegmentReader.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/_SegmentHeader.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/_SegmentHeader.h deleted file mode 120000 index 15f8a98..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/_SegmentHeader.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/index/_SegmentHeader.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/_SegmentInfos.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/_SegmentInfos.h deleted file mode 120000 index 057276b..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/_SegmentInfos.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/index/_SegmentInfos.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/_SegmentMergeInfo.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/_SegmentMergeInfo.h deleted file mode 120000 index 748b456..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/_SegmentMergeInfo.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/index/_SegmentMergeInfo.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/_SegmentMergeQueue.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/_SegmentMergeQueue.h deleted file mode 120000 index d0d89c7..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/_SegmentMergeQueue.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/index/_SegmentMergeQueue.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/_SegmentMerger.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/_SegmentMerger.h deleted file mode 120000 index 90b9327..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/_SegmentMerger.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/index/_SegmentMerger.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/_SegmentTermEnum.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/_SegmentTermEnum.h deleted file mode 120000 index 870a968..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/_SegmentTermEnum.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/index/_SegmentTermEnum.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/_SkipListReader.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/_SkipListReader.h deleted file mode 120000 index 05800f9..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/_SkipListReader.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/index/_SkipListReader.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/_SkipListWriter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/_SkipListWriter.h deleted file mode 120000 index d67f51c..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/_SkipListWriter.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/index/_SkipListWriter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/_Term.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/_Term.h deleted file mode 120000 index b8edb4e..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/_Term.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/index/_Term.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/_TermInfo.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/_TermInfo.h deleted file mode 120000 index a1d4efe..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/_TermInfo.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/index/_TermInfo.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/_TermInfosReader.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/_TermInfosReader.h deleted file mode 120000 index 86d35f1..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/_TermInfosReader.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/index/_TermInfosReader.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/_TermInfosWriter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/_TermInfosWriter.h deleted file mode 120000 index f437406..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/_TermInfosWriter.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/index/_TermInfosWriter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/_TermVector.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/_TermVector.h deleted file mode 120000 index 0404e3a..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/index/_TermVector.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/index/_TermVector.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/queryParser/MultiFieldQueryParser.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/queryParser/MultiFieldQueryParser.h deleted file mode 120000 index 09a0525..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/queryParser/MultiFieldQueryParser.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/queryParser/MultiFieldQueryParser.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/queryParser/QueryParser.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/queryParser/QueryParser.h deleted file mode 120000 index 6976e1c..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/queryParser/QueryParser.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/queryParser/QueryParser.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/queryParser/QueryParserConstants.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/queryParser/QueryParserConstants.h deleted file mode 120000 index 5afe8b9..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/queryParser/QueryParserConstants.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/queryParser/QueryParserConstants.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/queryParser/QueryParserTokenManager.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/queryParser/QueryParserTokenManager.h deleted file mode 120000 index d1ccdc6..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/queryParser/QueryParserTokenManager.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/queryParser/QueryParserTokenManager.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/queryParser/QueryToken.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/queryParser/QueryToken.h deleted file mode 120000 index a1028de..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/queryParser/QueryToken.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/queryParser/QueryToken.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/queryParser/_CharStream.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/queryParser/_CharStream.h deleted file mode 120000 index b0e03d9..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/queryParser/_CharStream.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/queryParser/_CharStream.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/queryParser/_FastCharStream.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/queryParser/_FastCharStream.h deleted file mode 120000 index 5cf4818..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/queryParser/_FastCharStream.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/queryParser/_FastCharStream.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/BooleanClause.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/BooleanClause.h deleted file mode 120000 index 3d35af0..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/BooleanClause.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/BooleanClause.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/BooleanQuery.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/BooleanQuery.h deleted file mode 120000 index c1c40b7..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/BooleanQuery.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/BooleanQuery.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/CachingSpanFilter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/CachingSpanFilter.h deleted file mode 120000 index 29d6fcb..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/CachingSpanFilter.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/CachingSpanFilter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/CachingWrapperFilter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/CachingWrapperFilter.h deleted file mode 120000 index 72e6b85..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/CachingWrapperFilter.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/CachingWrapperFilter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/ChainedFilter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/ChainedFilter.h deleted file mode 120000 index f48aab3..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/ChainedFilter.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/ChainedFilter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/Compare.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/Compare.h deleted file mode 120000 index a9b0c23..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/Compare.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/Compare.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/ConstantScoreQuery.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/ConstantScoreQuery.h deleted file mode 120000 index 0246d8b..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/ConstantScoreQuery.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/ConstantScoreQuery.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/DateFilter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/DateFilter.h deleted file mode 120000 index cfc52a5..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/DateFilter.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/DateFilter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/Explanation.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/Explanation.h deleted file mode 120000 index d29a6f9..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/Explanation.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/Explanation.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/FieldCache.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/FieldCache.h deleted file mode 120000 index d8415bb..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/FieldCache.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/FieldCache.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/FieldDoc.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/FieldDoc.h deleted file mode 120000 index b2b0382..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/FieldDoc.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/FieldDoc.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/FieldSortedHitQueue.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/FieldSortedHitQueue.h deleted file mode 120000 index d7f8550..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/FieldSortedHitQueue.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/FieldSortedHitQueue.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/Filter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/Filter.h deleted file mode 120000 index 9d744fd..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/Filter.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/Filter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/FilteredTermEnum.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/FilteredTermEnum.h deleted file mode 120000 index b72e276..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/FilteredTermEnum.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/FilteredTermEnum.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/FuzzyQuery.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/FuzzyQuery.h deleted file mode 120000 index fc68686..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/FuzzyQuery.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/FuzzyQuery.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/Hits.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/Hits.h deleted file mode 120000 index c623a93..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/Hits.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/Hits.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/IndexSearcher.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/IndexSearcher.h deleted file mode 120000 index 44d8a5f..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/IndexSearcher.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/IndexSearcher.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/MatchAllDocsQuery.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/MatchAllDocsQuery.h deleted file mode 120000 index c115568..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/MatchAllDocsQuery.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/MatchAllDocsQuery.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/MultiPhraseQuery.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/MultiPhraseQuery.h deleted file mode 120000 index 792f52b..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/MultiPhraseQuery.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/MultiPhraseQuery.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/MultiSearcher.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/MultiSearcher.h deleted file mode 120000 index da12e74..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/MultiSearcher.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/MultiSearcher.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/MultiTermQuery.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/MultiTermQuery.h deleted file mode 120000 index 9ac381d..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/MultiTermQuery.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/MultiTermQuery.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/PhraseQuery.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/PhraseQuery.h deleted file mode 120000 index 1d2dc1a..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/PhraseQuery.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/PhraseQuery.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/PrefixQuery.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/PrefixQuery.h deleted file mode 120000 index a18a55c..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/PrefixQuery.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/PrefixQuery.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/Query.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/Query.h deleted file mode 120000 index 1fc59d1..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/Query.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/Query.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/QueryFilter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/QueryFilter.h deleted file mode 120000 index cbe3707..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/QueryFilter.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/QueryFilter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/RangeFilter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/RangeFilter.h deleted file mode 120000 index 3961188..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/RangeFilter.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/RangeFilter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/RangeQuery.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/RangeQuery.h deleted file mode 120000 index 4b66fa0..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/RangeQuery.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/RangeQuery.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/Scorer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/Scorer.h deleted file mode 120000 index eea15b4..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/Scorer.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/Scorer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/ScorerDocQueue.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/ScorerDocQueue.h deleted file mode 120000 index 7d2c156..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/ScorerDocQueue.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/ScorerDocQueue.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/SearchHeader.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/SearchHeader.h deleted file mode 120000 index 602762b..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/SearchHeader.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/SearchHeader.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/Searchable.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/Searchable.h deleted file mode 120000 index 70180de..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/Searchable.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/Searchable.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/Similarity.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/Similarity.h deleted file mode 120000 index e50f49e..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/Similarity.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/Similarity.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/Sort.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/Sort.h deleted file mode 120000 index 39beef5..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/Sort.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/Sort.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/SpanFilter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/SpanFilter.h deleted file mode 120000 index 18647c8..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/SpanFilter.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/SpanFilter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/SpanFilterResult.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/SpanFilterResult.h deleted file mode 120000 index a76e7c8..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/SpanFilterResult.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/SpanFilterResult.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/SpanQueryFilter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/SpanQueryFilter.h deleted file mode 120000 index efab368..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/SpanQueryFilter.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/SpanQueryFilter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/TermQuery.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/TermQuery.h deleted file mode 120000 index 31af5f7..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/TermQuery.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/TermQuery.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/WildcardQuery.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/WildcardQuery.h deleted file mode 120000 index 10a1968..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/WildcardQuery.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/WildcardQuery.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/WildcardTermEnum.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/WildcardTermEnum.h deleted file mode 120000 index 70fd734..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/WildcardTermEnum.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/WildcardTermEnum.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/_BooleanScorer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/_BooleanScorer.h deleted file mode 120000 index 7aae929..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/_BooleanScorer.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/_BooleanScorer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/_BooleanScorer2.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/_BooleanScorer2.h deleted file mode 120000 index 20a30e8..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/_BooleanScorer2.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/_BooleanScorer2.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/_ConjunctionScorer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/_ConjunctionScorer.h deleted file mode 120000 index 78979d7..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/_ConjunctionScorer.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/_ConjunctionScorer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/_DisjunctionSumScorer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/_DisjunctionSumScorer.h deleted file mode 120000 index 1a1390d..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/_DisjunctionSumScorer.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/_DisjunctionSumScorer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/_ExactPhraseScorer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/_ExactPhraseScorer.h deleted file mode 120000 index 3e7af03..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/_ExactPhraseScorer.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/_ExactPhraseScorer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/_FieldCacheImpl.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/_FieldCacheImpl.h deleted file mode 120000 index 8de1209..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/_FieldCacheImpl.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/_FieldCacheImpl.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/_FieldDocSortedHitQueue.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/_FieldDocSortedHitQueue.h deleted file mode 120000 index 325062a..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/_FieldDocSortedHitQueue.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/_FieldDocSortedHitQueue.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/_HitQueue.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/_HitQueue.h deleted file mode 120000 index 52f29ce..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/_HitQueue.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/_HitQueue.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/_PhrasePositions.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/_PhrasePositions.h deleted file mode 120000 index f2c0604..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/_PhrasePositions.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/_PhrasePositions.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/_PhraseQueue.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/_PhraseQueue.h deleted file mode 120000 index 4f77b10..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/_PhraseQueue.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/_PhraseQueue.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/_PhraseScorer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/_PhraseScorer.h deleted file mode 120000 index 794885a..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/_PhraseScorer.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/_PhraseScorer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/_SloppyPhraseScorer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/_SloppyPhraseScorer.h deleted file mode 120000 index 25994e9..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/_SloppyPhraseScorer.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/_SloppyPhraseScorer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/_TermScorer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/_TermScorer.h deleted file mode 120000 index 2ac2eda..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/_TermScorer.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/search/_TermScorer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/spans/SpanFirstQuery.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/spans/SpanFirstQuery.h deleted file mode 120000 index 83544d7..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/spans/SpanFirstQuery.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/core/CLucene/search/spans/SpanFirstQuery.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/spans/SpanNearQuery.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/spans/SpanNearQuery.h deleted file mode 120000 index f2aef04..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/spans/SpanNearQuery.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/core/CLucene/search/spans/SpanNearQuery.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/spans/SpanNotQuery.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/spans/SpanNotQuery.h deleted file mode 120000 index be53511..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/spans/SpanNotQuery.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/core/CLucene/search/spans/SpanNotQuery.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/spans/SpanOrQuery.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/spans/SpanOrQuery.h deleted file mode 120000 index ea868fd..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/spans/SpanOrQuery.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/core/CLucene/search/spans/SpanOrQuery.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/spans/SpanQuery.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/spans/SpanQuery.h deleted file mode 120000 index 21b4e28..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/spans/SpanQuery.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/core/CLucene/search/spans/SpanQuery.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/spans/SpanScorer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/spans/SpanScorer.h deleted file mode 120000 index 95ddfc9..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/spans/SpanScorer.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/core/CLucene/search/spans/SpanScorer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/spans/SpanTermQuery.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/spans/SpanTermQuery.h deleted file mode 120000 index c8d7fc2..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/spans/SpanTermQuery.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/core/CLucene/search/spans/SpanTermQuery.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/spans/SpanWeight.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/spans/SpanWeight.h deleted file mode 120000 index 7b91413..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/spans/SpanWeight.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/core/CLucene/search/spans/SpanWeight.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/spans/Spans.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/spans/Spans.h deleted file mode 120000 index 34273b2..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/spans/Spans.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/core/CLucene/search/spans/Spans.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/spans/_EmptySpans.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/spans/_EmptySpans.h deleted file mode 120000 index 2613d2d..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/spans/_EmptySpans.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/core/CLucene/search/spans/_EmptySpans.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/spans/_NearSpansOrdered.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/spans/_NearSpansOrdered.h deleted file mode 120000 index 816a25e..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/spans/_NearSpansOrdered.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/core/CLucene/search/spans/_NearSpansOrdered.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/spans/_NearSpansUnordered.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/spans/_NearSpansUnordered.h deleted file mode 120000 index 8818b31..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/spans/_NearSpansUnordered.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/core/CLucene/search/spans/_NearSpansUnordered.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/spans/_TermSpans.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/spans/_TermSpans.h deleted file mode 120000 index b2cf6c2..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/search/spans/_TermSpans.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/core/CLucene/search/spans/_TermSpans.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/SnowballAnalyzer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/SnowballAnalyzer.h deleted file mode 120000 index 7f3191b..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/SnowballAnalyzer.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/contribs-lib/CLucene/snowball/SnowballAnalyzer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/SnowballFilter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/SnowballFilter.h deleted file mode 120000 index b1a6ee7..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/SnowballFilter.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/contribs-lib/CLucene/snowball/SnowballFilter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/include/libstemmer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/include/libstemmer.h deleted file mode 120000 index e81c7e0..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/include/libstemmer.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/contribs-lib/CLucene/snowball/include/libstemmer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/libstemmer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/libstemmer.h deleted file mode 120000 index 8a76cdf..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/libstemmer.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/contribs-lib/CLucene/snowball/libstemmer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/libstemmer/modules.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/libstemmer/modules.h deleted file mode 120000 index 1b65811..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/libstemmer/modules.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/contribs-lib/CLucene/snowball/libstemmer/modules.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/runtime/api.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/runtime/api.h deleted file mode 120000 index b39883e..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/runtime/api.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/contribs-lib/CLucene/snowball/runtime/api.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/runtime/header.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/runtime/header.h deleted file mode 120000 index b414982..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/runtime/header.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/contribs-lib/CLucene/snowball/runtime/header.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/src_c/stem_ISO_8859_1_danish.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/src_c/stem_ISO_8859_1_danish.h deleted file mode 120000 index adeac93..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/src_c/stem_ISO_8859_1_danish.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_danish.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/src_c/stem_ISO_8859_1_dutch.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/src_c/stem_ISO_8859_1_dutch.h deleted file mode 120000 index d1f2eed..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/src_c/stem_ISO_8859_1_dutch.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_dutch.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/src_c/stem_ISO_8859_1_english.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/src_c/stem_ISO_8859_1_english.h deleted file mode 120000 index cd62a06..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/src_c/stem_ISO_8859_1_english.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_english.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/src_c/stem_ISO_8859_1_finnish.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/src_c/stem_ISO_8859_1_finnish.h deleted file mode 120000 index a2c5eca..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/src_c/stem_ISO_8859_1_finnish.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_finnish.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/src_c/stem_ISO_8859_1_french.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/src_c/stem_ISO_8859_1_french.h deleted file mode 120000 index 5e268fc..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/src_c/stem_ISO_8859_1_french.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_french.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/src_c/stem_ISO_8859_1_german.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/src_c/stem_ISO_8859_1_german.h deleted file mode 120000 index 83374a7..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/src_c/stem_ISO_8859_1_german.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_german.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/src_c/stem_ISO_8859_1_italian.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/src_c/stem_ISO_8859_1_italian.h deleted file mode 120000 index 1076b52..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/src_c/stem_ISO_8859_1_italian.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_italian.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/src_c/stem_ISO_8859_1_norwegian.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/src_c/stem_ISO_8859_1_norwegian.h deleted file mode 120000 index edfdbbb..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/src_c/stem_ISO_8859_1_norwegian.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_norwegian.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/src_c/stem_ISO_8859_1_porter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/src_c/stem_ISO_8859_1_porter.h deleted file mode 120000 index 483bc95..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/src_c/stem_ISO_8859_1_porter.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_porter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/src_c/stem_ISO_8859_1_portuguese.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/src_c/stem_ISO_8859_1_portuguese.h deleted file mode 120000 index 4ba7c00..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/src_c/stem_ISO_8859_1_portuguese.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_portuguese.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/src_c/stem_ISO_8859_1_spanish.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/src_c/stem_ISO_8859_1_spanish.h deleted file mode 120000 index a54daa2..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/src_c/stem_ISO_8859_1_spanish.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_spanish.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/src_c/stem_ISO_8859_1_swedish.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/src_c/stem_ISO_8859_1_swedish.h deleted file mode 120000 index 70d3663..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/src_c/stem_ISO_8859_1_swedish.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_swedish.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/src_c/stem_KOI8_R_russian.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/src_c/stem_KOI8_R_russian.h deleted file mode 120000 index 90ff39b..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/src_c/stem_KOI8_R_russian.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/contribs-lib/CLucene/snowball/src_c/stem_KOI8_R_russian.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/src_c/stem_UTF_8_danish.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/src_c/stem_UTF_8_danish.h deleted file mode 120000 index 66d82ee..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/src_c/stem_UTF_8_danish.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_danish.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/src_c/stem_UTF_8_dutch.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/src_c/stem_UTF_8_dutch.h deleted file mode 120000 index e0a44e6..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/src_c/stem_UTF_8_dutch.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_dutch.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/src_c/stem_UTF_8_english.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/src_c/stem_UTF_8_english.h deleted file mode 120000 index 88bc6da..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/src_c/stem_UTF_8_english.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_english.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/src_c/stem_UTF_8_finnish.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/src_c/stem_UTF_8_finnish.h deleted file mode 120000 index bfeb6cb..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/src_c/stem_UTF_8_finnish.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_finnish.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/src_c/stem_UTF_8_french.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/src_c/stem_UTF_8_french.h deleted file mode 120000 index eda3285..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/src_c/stem_UTF_8_french.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_french.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/src_c/stem_UTF_8_german.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/src_c/stem_UTF_8_german.h deleted file mode 120000 index a66418b..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/src_c/stem_UTF_8_german.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_german.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/src_c/stem_UTF_8_italian.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/src_c/stem_UTF_8_italian.h deleted file mode 120000 index 9c8809f..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/src_c/stem_UTF_8_italian.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_italian.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/src_c/stem_UTF_8_norwegian.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/src_c/stem_UTF_8_norwegian.h deleted file mode 120000 index b0b4bd5..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/src_c/stem_UTF_8_norwegian.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_norwegian.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/src_c/stem_UTF_8_porter.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/src_c/stem_UTF_8_porter.h deleted file mode 120000 index 30568f7..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/src_c/stem_UTF_8_porter.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_porter.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/src_c/stem_UTF_8_portuguese.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/src_c/stem_UTF_8_portuguese.h deleted file mode 120000 index 02c377b..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/src_c/stem_UTF_8_portuguese.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_portuguese.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/src_c/stem_UTF_8_russian.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/src_c/stem_UTF_8_russian.h deleted file mode 120000 index 4f0ef29..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/src_c/stem_UTF_8_russian.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_russian.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/src_c/stem_UTF_8_spanish.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/src_c/stem_UTF_8_spanish.h deleted file mode 120000 index cf84881..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/src_c/stem_UTF_8_spanish.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_spanish.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/src_c/stem_UTF_8_swedish.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/src_c/stem_UTF_8_swedish.h deleted file mode 120000 index ff1a07d..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/snowball/src_c/stem_UTF_8_swedish.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../../clucene/src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_swedish.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/store/Directory.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/store/Directory.h deleted file mode 120000 index 4737908..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/store/Directory.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/store/Directory.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/store/FSDirectory.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/store/FSDirectory.h deleted file mode 120000 index de9b731..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/store/FSDirectory.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/store/FSDirectory.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/store/IndexInput.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/store/IndexInput.h deleted file mode 120000 index 1b968f4..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/store/IndexInput.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/store/IndexInput.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/store/IndexOutput.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/store/IndexOutput.h deleted file mode 120000 index 147a519..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/store/IndexOutput.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/store/IndexOutput.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/store/Lock.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/store/Lock.h deleted file mode 120000 index 6dee5d7..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/store/Lock.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/store/Lock.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/store/LockFactory.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/store/LockFactory.h deleted file mode 120000 index 16f3385..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/store/LockFactory.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/store/LockFactory.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/store/RAMDirectory.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/store/RAMDirectory.h deleted file mode 120000 index fac1a87..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/store/RAMDirectory.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/store/RAMDirectory.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/store/_Lock.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/store/_Lock.h deleted file mode 120000 index 5eb980c..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/store/_Lock.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/store/_Lock.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/store/_MMapIndexInput.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/store/_MMapIndexInput.h deleted file mode 120000 index ad09a77..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/store/_MMapIndexInput.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/store/_MMapIndexInput.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/store/_RAMDirectory.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/store/_RAMDirectory.h deleted file mode 120000 index cdd9b09..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/store/_RAMDirectory.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/store/_RAMDirectory.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/util/Array.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/util/Array.h deleted file mode 120000 index 561d885..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/util/Array.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/util/Array.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/util/BitSet.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/util/BitSet.h deleted file mode 120000 index 3c728c6..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/util/BitSet.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/util/BitSet.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/util/CLStreams.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/util/CLStreams.h deleted file mode 120000 index 5054caf..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/util/CLStreams.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/util/CLStreams.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/util/Equators.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/util/Equators.h deleted file mode 120000 index 08736c7..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/util/Equators.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/util/Equators.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/util/Misc.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/util/Misc.h deleted file mode 120000 index 9a8c7ce..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/util/Misc.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/shared/CLucene/util/Misc.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/util/PriorityQueue.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/util/PriorityQueue.h deleted file mode 120000 index 031be2f..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/util/PriorityQueue.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/util/PriorityQueue.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/util/Reader.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/util/Reader.h deleted file mode 120000 index 3579aee..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/util/Reader.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/util/Reader.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/util/StringBuffer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/util/StringBuffer.h deleted file mode 120000 index e2122ff..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/util/StringBuffer.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/shared/CLucene/util/StringBuffer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/util/VoidList.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/util/VoidList.h deleted file mode 120000 index c7c18af..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/util/VoidList.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/util/VoidList.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/util/VoidMap.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/util/VoidMap.h deleted file mode 120000 index 2f2e8be..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/util/VoidMap.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/util/VoidMap.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/util/_Arrays.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/util/_Arrays.h deleted file mode 120000 index d34a221..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/util/_Arrays.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/util/_Arrays.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/util/_FastCharStream.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/util/_FastCharStream.h deleted file mode 120000 index af77fb4..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/util/_FastCharStream.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/util/_FastCharStream.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/util/_MD5Digester.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/util/_MD5Digester.h deleted file mode 120000 index c3e5fb1..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/util/_MD5Digester.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/util/_MD5Digester.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/util/_StringIntern.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/util/_StringIntern.h deleted file mode 120000 index d46ce57..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/util/_StringIntern.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/util/_StringIntern.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/util/_ThreadLocal.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/util/_ThreadLocal.h deleted file mode 120000 index ecb8943..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/util/_ThreadLocal.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/util/_ThreadLocal.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/util/_VoidList.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/util/_VoidList.h deleted file mode 120000 index f5a7d0f..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/util/_VoidList.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/util/_VoidList.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/util/_VoidMap.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/util/_VoidMap.h deleted file mode 120000 index c04995b..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/util/_VoidMap.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/util/_VoidMap.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/util/_bufferedstream.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/util/_bufferedstream.h deleted file mode 120000 index e3cf553..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/util/_bufferedstream.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/util/_bufferedstream.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/util/_dirent.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/util/_dirent.h deleted file mode 120000 index c45e16d..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/util/_dirent.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/shared/CLucene/util/_dirent.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/util/_streambase.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/util/_streambase.h deleted file mode 120000 index 52c06bf..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/util/_streambase.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/util/_streambase.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/util/_streambuffer.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/util/_streambuffer.h deleted file mode 120000 index 561968a..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/util/_streambuffer.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/core/CLucene/util/_streambuffer.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/util/arrayinputstream.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/util/arrayinputstream.h deleted file mode 120000 index 8756cd8..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/util/arrayinputstream.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/contribs-lib/CLucene/util/arrayinputstream.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/util/byteinputstream.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/util/byteinputstream.h deleted file mode 120000 index a74e33e..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/util/byteinputstream.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/contribs-lib/CLucene/util/byteinputstream.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/util/gzipcompressstream.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/util/gzipcompressstream.h deleted file mode 120000 index 08446ee..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/util/gzipcompressstream.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/contribs-lib/CLucene/util/gzipcompressstream.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/util/gzipinputstream.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/util/gzipinputstream.h deleted file mode 120000 index 359f449..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/util/gzipinputstream.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/contribs-lib/CLucene/util/gzipinputstream.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/util/streamarray.h b/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/util/streamarray.h deleted file mode 120000 index 233458f..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Headers/Public/BRFullTextSearch/CLucene/util/streamarray.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../../../clucene/src/contribs-lib/CLucene/util/streamarray.h \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Local Podspecs/BRFullTextSearch.podspec.json b/SampleOSXCocoaPodsProject/Pods/Local Podspecs/BRFullTextSearch.podspec.json index 4c4aaab..9727822 100644 --- a/SampleOSXCocoaPodsProject/Pods/Local Podspecs/BRFullTextSearch.podspec.json +++ b/SampleOSXCocoaPodsProject/Pods/Local Podspecs/BRFullTextSearch.podspec.json @@ -1,28 +1,26 @@ { "name": "BRFullTextSearch", - "version": "1.1.1", - "summary": "iOS Objective-C full text search engine.", - "description": "This project provides a way to integrate full-text search\ncapabilities into your iOS project. First, it provides a\nprotocol-based API for a simple text indexing and search\nframework. Second, it provides a\n[CLucene](http://clucene.sourceforge.net/) based implementation of\nthat framework.", + "version": "2.0.0", + "summary": "Objective-C full text search engine.", + "description": "This project provides a way to integrate full-text search\ncapabilities into your iOS and OS X projects. First, it provides\na protocol-based API for a simple text indexing and search\nframework. Second, it provides a\n[CLucene](http://clucene.sourceforge.net/) based implementation of\nthat framework.", "homepage": "https://github.com/Blue-Rocket/BRFullTextSearch", "license": "Apache License, Version 2.0", "authors": { "Matt Magoffin": "matt@bluerocket.us" }, "platforms": { - "ios": "5.0", + "ios": "5.1", "osx": "10.7" }, "source": { "git": "https://github.com/Blue-Rocket/BRFullTextSearch.git", - "tag": "1.1.1", - "submodules": true + "tag": "2.0.0" }, "libraries": [ - "stdc++", + "c++", "z" ], "compiler_flags": [ - "-Wmost", "-fvisibility=default", "-fPIC", "-D_UCS2", @@ -31,9 +29,8 @@ "-DNDEBUG" ], "xcconfig": { - "CLANG_CXX_LANGUAGE_STANDARD": "gnu++98", - "CLANG_CXX_LIBRARY": "libstdc++", - "OTHER_LDFLAGS": "-stdlib=libstdc++" + "CLANG_CXX_LANGUAGE_STANDARD": "c++0x", + "CLANG_CXX_LIBRARY": "libc++" }, "requires_arc": true, "default_subspecs": "Core", @@ -71,95 +68,8 @@ "BRFullTextSearch/API": [ ], - "BRFullTextSearch/CLucene": [ - - ] - } - }, - { - "name": "CLucene", - "dependencies": { - "BRFullTextSearch/CLucene-Shared": [ - - ], - "BRFullTextSearch/CLucene-Core": [ - - ], - "BRFullTextSearch/CLucene-Contribs-Lib": [ - - ] - } - }, - { - "name": "CLucene-Config", - "requires_arc": false, - "source_files": "BRFullTextSearch/CLucene/*", - "header_mappings_dir": "BRFullTextSearch" - }, - { - "name": "CLucene-Core-API", - "requires_arc": false, - "source_files": [ - "clucene/src/core/CLucene.h", - "clucene/src/core/CLucene/**/*.h" - ], - "header_mappings_dir": "clucene/src/core", - "exclude_files": [ - "clucene/src/core/CLucene/CLMonolithic.*", - "clucene/src/core/CLucene/search/FilterResultCache.*", - "clucene/src/core/CLucene/queryParser/legacy" - ], - "dependencies": { - "BRFullTextSearch/CLucene-Config": [ - - ] - } - }, - { - "name": "CLucene-Shared", - "requires_arc": false, - "source_files": "clucene/src/shared/CLucene/**/*.{h,c,cpp}", - "header_mappings_dir": "clucene/src/shared", - "exclude_files": [ - "clucene/src/shared/CLucene/CLSharedMonolithic.*", - "clucene/src/shared/CLucene/util/deflate.*" - ], - "dependencies": { - "BRFullTextSearch/CLucene-Core-API": [ - - ] - } - }, - { - "name": "CLucene-Core", - "requires_arc": false, - "source_files": "clucene/src/core/CLucene/**/*.{c,cpp}", - "header_mappings_dir": "clucene/src/core", - "exclude_files": [ - "clucene/src/core/CLucene/CLMonolithic.*", - "clucene/src/core/CLucene/search/FilterResultCache.*", - "clucene/src/core/CLucene/queryParser/legacy" - ], - "dependencies": { - "BRFullTextSearch/CLucene-Core-API": [ - - ], - "BRFullTextSearch/CLucene-Shared": [ - - ] - } - }, - { - "name": "CLucene-Contribs-Lib", - "requires_arc": false, - "source_files": "clucene/src/contribs-lib/CLucene/**/*.{h,c,cpp}", - "header_mappings_dir": "clucene/src/contribs-lib", - "dependencies": { - "BRFullTextSearch/CLucene-Core": [ - - ], - "BRFullTextSearch/CLucene-Shared": [ - + "BRCLucene": [ + "< 2.0" ] } } diff --git a/SampleOSXCocoaPodsProject/Pods/Manifest.lock b/SampleOSXCocoaPodsProject/Pods/Manifest.lock index 802e796..fe44119 100644 --- a/SampleOSXCocoaPodsProject/Pods/Manifest.lock +++ b/SampleOSXCocoaPodsProject/Pods/Manifest.lock @@ -1,28 +1,30 @@ PODS: - - BRFullTextSearch (1.1.1): - - BRFullTextSearch/Core (= 1.1.1) - - BRFullTextSearch/API (1.1.1) - - BRFullTextSearch/CLucene (1.1.1): - - BRFullTextSearch/CLucene-Contribs-Lib - - BRFullTextSearch/CLucene-Core - - BRFullTextSearch/CLucene-Shared - - BRFullTextSearch/CLucene-Config (1.1.1) - - BRFullTextSearch/CLucene-Contribs-Lib (1.1.1): - - BRFullTextSearch/CLucene-Core - - BRFullTextSearch/CLucene-Shared - - BRFullTextSearch/CLucene-Core (1.1.1): - - BRFullTextSearch/CLucene-Core-API - - BRFullTextSearch/CLucene-Shared - - BRFullTextSearch/CLucene-Core-API (1.1.1): - - BRFullTextSearch/CLucene-Config - - BRFullTextSearch/CLucene-Shared (1.1.1): - - BRFullTextSearch/CLucene-Core-API - - BRFullTextSearch/Core (1.1.1): + - BRCLucene (0.1.0): + - BRCLucene/CLucene (= 0.1.0) + - BRCLucene/CLucene (0.1.0): + - BRCLucene/CLucene-Contribs-Lib + - BRCLucene/CLucene-Core + - BRCLucene/CLucene-Shared + - BRCLucene/CLucene-Config (0.1.0) + - BRCLucene/CLucene-Contribs-Lib (0.1.0): + - BRCLucene/CLucene-Core + - BRCLucene/CLucene-Shared + - BRCLucene/CLucene-Core (0.1.0): + - BRCLucene/CLucene-Core-API + - BRCLucene/CLucene-Shared + - BRCLucene/CLucene-Core-API (0.1.0): + - BRCLucene/CLucene-Config + - BRCLucene/CLucene-Shared (0.1.0): + - BRCLucene/CLucene-Core-API + - BRFullTextSearch (2.0.0): + - BRFullTextSearch/Core (= 2.0.0) + - BRFullTextSearch/API (2.0.0) + - BRFullTextSearch/Core (2.0.0): - BRFullTextSearch/API - BRFullTextSearch/Implementation-CLucene - - BRFullTextSearch/Implementation-CLucene (1.1.1): + - BRFullTextSearch/Implementation-CLucene (2.0.0): + - BRCLucene (< 2.0) - BRFullTextSearch/API - - BRFullTextSearch/CLucene - MagicalRecord (2.2): - MagicalRecord/Core (= 2.2) - MagicalRecord/Core (2.2) @@ -36,7 +38,10 @@ EXTERNAL SOURCES: :path: ../ SPEC CHECKSUMS: - BRFullTextSearch: 7e416f703adc68e7bc507273d0931b4199773dfb + BRCLucene: 1035562d82d9bdad637ce0991b0b8ef4f8720ce3 + BRFullTextSearch: 5f5ee65e1e8a26c5743664361c1008d1f16b6983 MagicalRecord: 2dc87179ae7c1f2a274442624ec65a07d4357a6f -COCOAPODS: 0.39.0 +PODFILE CHECKSUM: ec1511de673c0886b75c50decf58e5f961d4b808 + +COCOAPODS: 1.1.1 diff --git a/SampleOSXCocoaPodsProject/Pods/Pods.xcodeproj/project.pbxproj b/SampleOSXCocoaPodsProject/Pods/Pods.xcodeproj/project.pbxproj index 5e6ee0f..fe3ef25 100644 --- a/SampleOSXCocoaPodsProject/Pods/Pods.xcodeproj/project.pbxproj +++ b/SampleOSXCocoaPodsProject/Pods/Pods.xcodeproj/project.pbxproj @@ -1,16252 +1,2916 @@ - - - - - archiveVersion - 1 - classes - - objectVersion - 46 - objects - - 00193E7218AC118A0C2ECE2A - - includeInIndex - 1 - isa - PBXFileReference - path - DocumentsWriterThreadState.cpp - sourceTree - <group> - - 00A197019698500417E21481 - - fileRef - 7E00FB65257DB6039A762E17 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 00E5942AD201C7FDA387C8BC - - fileRef - 21ECD99136275A75BB0610A8 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 00E65E2497B24D8557D75F05 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - _SegmentMerger.h - sourceTree - <group> - - 01282228562B1E909395060D - - fileRef - 1B556A09CDA57E9E32EE52B9 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 013410F3BC97F5CF3784C953 - - fileRef - 0E71E08FFADD6EAEA12DD62F - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 015D49E1871C14D2CD2E97C7 - - includeInIndex - 1 - isa - PBXFileReference - path - SpanOrQuery.cpp - sourceTree - <group> - - 0181CC26EE0AE3332D29CEE4 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - _RAMDirectory.h - sourceTree - <group> - - 02622B566777CBDAECEA3948 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - Searchable.h - sourceTree - <group> - - 026DD2AB3977653A0A74041F - - fileRef - 1AAB7099229A3C83F7D61A6D - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 02C4B20B1966BB1DF5CC144A - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - NSPersistentStore+MagicalRecord.h - path - MagicalRecord/Categories/NSPersistentStore+MagicalRecord.h - sourceTree - <group> - - 02F50EAB86CAE1ED535971B6 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - _CompoundFile.h - sourceTree - <group> - - 03443F5C8542A0223CA7B57C - - includeInIndex - 1 - isa - PBXFileReference - path - StandardFilter.cpp - sourceTree - <group> - - 0360F45A6C384D2CDA3E2BA6 - - fileRef - 76F1279038E18B617BFB2F7E - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 03770883807DC15581BE2CCE - - fileRef - 11BB66B6B92C17B19D9F5DD0 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 03BF35A04A66763195E9D653 - - fileRef - EA854CAAADAB25FA30958CA2 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 03DC407482BDDFB6C7BD6A8B - - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - CLANG_CXX_LANGUAGE_STANDARD - gnu++0x - CLANG_CXX_LIBRARY - libc++ - CLANG_ENABLE_MODULES - YES - CLANG_ENABLE_OBJC_ARC - YES - CLANG_WARN_BOOL_CONVERSION - YES - CLANG_WARN_CONSTANT_CONVERSION - YES - CLANG_WARN_DIRECT_OBJC_ISA_USAGE - YES - CLANG_WARN_EMPTY_BODY - YES - CLANG_WARN_ENUM_CONVERSION - YES - CLANG_WARN_INT_CONVERSION - YES - CLANG_WARN_OBJC_ROOT_CLASS - YES - CLANG_WARN_UNREACHABLE_CODE - YES - CLANG_WARN__DUPLICATE_METHOD_MATCH - YES - COPY_PHASE_STRIP - YES - ENABLE_NS_ASSERTIONS - NO - GCC_C_LANGUAGE_STANDARD - gnu99 - GCC_PREPROCESSOR_DEFINITIONS - - RELEASE=1 - - GCC_WARN_64_TO_32_BIT_CONVERSION - YES - GCC_WARN_ABOUT_RETURN_TYPE - YES - GCC_WARN_UNDECLARED_SELECTOR - YES - GCC_WARN_UNINITIALIZED_AUTOS - YES - GCC_WARN_UNUSED_FUNCTION - YES - GCC_WARN_UNUSED_VARIABLE - YES - MACOSX_DEPLOYMENT_TARGET - 10.9 - STRIP_INSTALLED_PRODUCT - NO - SYMROOT - ${SRCROOT}/../build - VALIDATE_PRODUCT - YES - - isa - XCBuildConfiguration - name - Release - - 04022581BF6D105211A03192 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - CachingTokenFilter.h - sourceTree - <group> - - 042D3C734BF1BDF226928573 - - children - - 272DA5C234B408496C348A2F - - isa - PBXGroup - name - BRFullTextSearch - path - BRFullTextSearch - sourceTree - <group> - - 043F744D3328A6E02C3BEFF2 - - fileRef - 70241592686B0B6C70D4548E - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 04631C8E4C4095E0A10B7A1A - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - _MultiSegmentReader.h - sourceTree - <group> - - 04A35A64C6778AB5BA423666 - - includeInIndex - 1 - isa - PBXFileReference - path - ScorerDocQueue.cpp - sourceTree - <group> - - 04B006D89669E663328F46B0 - - children - - 386AB1CB697BC5266C6813DC - 4A6AFCABC00B39654D872CC6 - 4B95006EFEC94C8431EC73C4 - 4860EBF787BA38B5DED961C1 - BF703906459BFF08961E8459 - F02C4F2789A04E73F5B0D855 - - isa - PBXGroup - name - document - path - document - sourceTree - <group> - - 04B47F8C4C40903F5CB8F2A0 - - children - - EF3FEC97BE828DA280B1F018 - F0D45B6DE0914737E3BA42AE - 889236B430B66F0E3463707B - 1D04699C8AA689C238590226 - A49D6DB1468421D91AAED79F - 1EEF7632C16E1C8F63EC6C03 - 85A5F6C1D836636FA1276898 - 6426870F4047F37FEA6220D7 - 1AAB7099229A3C83F7D61A6D - 65BBC78C11C62E1C9DAE8B64 - 5B158D0C0D3B168D2C82C4DA - 3179783B92DDDF04B02CEDE7 - 75A928066ACCECA8D05215AA - 1A46E539CAD222BD91F36254 - 78127D4B127C3E70138A36D0 - 662B5D081B824BF00C9ABFE9 - 40DC189BFC7CE6FF83BE6C1E - F97125F3BEEB6432A2FC6666 - 205072BA7EA52C39E8B099A7 - 40BF9834C30F798B31F730BE - 29C0C39FED18AC22E311F8EF - 1F31AA26CBCF3F5F0D85B98F - B4415BC5D22554D350FD4300 - 6BDC240E47F9EC0E61ADA4AF - EABB423BBEB234E3F6CFCF91 - DD072B075A6CC6CC6E4DCD97 - 589320E13F9BD41380ECA488 - C5FF0659B894D438991B3DE2 - E14BA43AD9A9EC79033772A8 - A98DC9BE005694F521ECA285 - EA8EEE3704486458D9C8C2E8 - 3997AF46707F0285C9161CF0 - 2ABD4F4D3F116EDDCF673F6C - 5338BB33E6AC1153BA2F494C - 70DDEBC633508131F640649C - 0915A4B92B2F466210CA8A72 - ADC6E11451B63EDC85FA7EEC - DCA68B0D72443D070132338F - 89B12780EB9920E7A67E675C - E0D609D9BDF0DB466267627A - EE260CA140F8C6AAC0F5B3C8 - 1DCEFAF4279F77380C6213AB - 02622B566777CBDAECEA3948 - F1E3A2EB8EA61982C41728A4 - 68779072DD5102546AB77744 - 1BD1335873746DAD7B83A6D6 - 4EF57E7BD14F1D66A324CE75 - E4503098668D6FAB1E778591 - 8AFA1275047232E824821865 - D81CB7126001B0556DCF1469 - 2289F7C1051C793E7DDD5C69 - 5DF950A3F006782F674F8AD6 - 75C955D16CFA1D181860E22B - - isa - PBXGroup - name - search - path - search - sourceTree - <group> - - 04C52E146DE16654E4EB40D6 - - fileRef - F71136BF46193C135922865C - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 04E036E8B4BB77EF754024DF - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - Payload.h - sourceTree - <group> - - 04E612A365EE2139C3E148AB - - fileRef - EC95A0D94E525F0FF443976A - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 0579996E3765D8F815E5A1CE - - fileRef - D57977E13142ECAC7AB4C0D0 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 05A9687D9114AEE92DBDF2CC - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - _IndexFileNames.h - sourceTree - <group> - - 05D04C9B5ACF844A15F35FB6 - - isa - PBXTargetDependency - name - MagicalRecord - target - 4208DA7F7EE1D2461B44D7B2 - targetProxy - DF1AB8C9325ED4A2224E7136 - - 05F7D54603AE2F1EDEF8CB82 - - children - - 1BE77EFD772F5003B75059B4 - 766AC7A8E36065B8E449648A - F5BBBAD069D2F558001F1DEA - 57F7D82E7886BA3A7425E8B9 - 944FD0F435743BBD44A5254B - FA7D4D917B0D3BDBBB3883A4 - - isa - PBXGroup - name - de - path - de - sourceTree - <group> - - 063202E9CE72DB38C08EB785 - - includeInIndex - 1 - isa - PBXFileReference - path - IndexDeletionPolicy.cpp - sourceTree - <group> - - 06520C8371DB610CD094E6DA - - fileRef - 2C6469A9018ADF3D38A4FC94 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 06AADEB47F1C60A63DFC29F9 - - fileRef - 122F0CCD798030CFD157F55D - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 06C9586359A5DC76C4863402 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - _VoidList.h - sourceTree - <group> - - 0729888C45D15F4D5B5BB4DD - - fileRef - 77336FF4E2326C79108866DA - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 07472E94E2B7C42C05F9B6DA - - fileRef - 04022581BF6D105211A03192 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 07562E0C6DC11FCB8E75CF7D - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - SnowballAnalyzer.h - sourceTree - <group> - - 0761C1A122F7E85AA860037F - - fileRef - 932E6275CB6DE374B5AED1A6 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 076DDB6CBE26F313BFC1DB15 - - fileRef - 61931BAB75A5942277B431EA - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks - - - 07EB69451F084D0217A4BB6C - - fileRef - 9CDBD8F97957308FD75BA919 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 080BB7AF262B5C0AE8054CB3 - - fileRef - 2CE521F6A5A9830F33761170 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 08456763BBF74807D8095589 - - fileRef - 853CF54E39465D59860AC785 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 0886F358751F7A3BC8CE16F8 - - baseConfigurationReference - BFB890C04CA5D75ADEF01D5A - buildSettings - - DEBUG_INFORMATION_FORMAT - dwarf-with-dsym - ENABLE_STRICT_OBJC_MSGSEND - YES - EXECUTABLE_PREFIX - lib - GCC_PREFIX_HEADER - Target Support Files/MagicalRecord/MagicalRecord-prefix.pch - MACOSX_DEPLOYMENT_TARGET - 10.9 - MTL_ENABLE_DEBUG_INFO - NO - OTHER_LDFLAGS - - OTHER_LIBTOOLFLAGS - - PRIVATE_HEADERS_FOLDER_PATH - - PRODUCT_NAME - $(TARGET_NAME) - PUBLIC_HEADERS_FOLDER_PATH - - SDKROOT - macosx - - isa - XCBuildConfiguration - name - Release - - 08DF9F0851E5528D53DD0CAB - - children - - E28A0D9C4FB2F3C057798518 - - isa - PBXGroup - name - src - path - src - sourceTree - <group> - - 0915A4B92B2F466210CA8A72 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - PrefixQuery.h - sourceTree - <group> - - 09318330599B23C187A0D39F - - fileRef - 6DDE7699E9004594909FBC16 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 0978E989EE49E8F6702E07CB - - includeInIndex - 1 - isa - PBXFileReference - path - SharedHeader.cpp - sourceTree - <group> - - 09A26ABC28537AF4BC20656B - - fileRef - B22CBD2777AC007FD405B4B5 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks - - - 09A8E1D6DFF872A9468BED35 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - CJKAnalyzer.h - sourceTree - <group> - - 0A25FA34BD0F2CDADB748261 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - stem_UTF_8_russian.h - sourceTree - <group> - - 0A6231F377003E3C7DF88757 - - fileRef - 10DEC03CFB12D2AB87B2C35E - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 0A97DB030433E0FBC407E444 - - includeInIndex - 1 - isa - PBXFileReference - path - MergePolicy.cpp - sourceTree - <group> - - 0ABBE983A33847A589542588 - - children - - 6C9E3C0967F6E7739F1C55B8 - 742CD5E2406AA373BD48C99B - - isa - PBXGroup - name - core - path - core - sourceTree - <group> - - 0AE403A72846ED47EDC73486 - - includeInIndex - 1 - isa - PBXFileReference - path - TokenSources.cpp - sourceTree - <group> - - 0B0F7314D9F542D994633EF9 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - _EmptySpans.h - sourceTree - <group> - - 0B5A6AC492D5CB735CE61F6D - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - Encoder.h - sourceTree - <group> - - 0B8721928065C9CC4BDB9ECF - - fileRef - 64CAA194FC7C81037B765184 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 0BE8288D6334CBD2A75AAE7F - - fileRef - 8AFA1275047232E824821865 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 0BFD33FA7CB49BC92252E78E - - fileRef - A0FB8B42C0775159EB622495 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 0D4944EB321C9A0D1F03586D - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - _SkipListWriter.h - sourceTree - <group> - - 0D94F14B9977AE6A2FFE6629 - - includeInIndex - 1 - isa - PBXFileReference - path - stem_ISO_8859_1_dutch.c - sourceTree - <group> - - 0DFBC286CBD9C4FBAC140FE4 - - fileRef - 0181CC26EE0AE3332D29CEE4 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 0E71E08FFADD6EAEA12DD62F - - includeInIndex - 1 - isa - PBXFileReference - path - NearSpansOrdered.cpp - sourceTree - <group> - - 0E75938E2780E0F320D57C2C - - includeInIndex - 1 - isa - PBXFileReference - path - RangeFilter.cpp - sourceTree - <group> - - 0EC48C3A43957CE026412A39 - - fileRef - 04A35A64C6778AB5BA423666 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 0EFA9FC814FD14116341205C - - fileRef - D21321FC49273301F47DC33A - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 0F21D4611FA8A1635C3EC3A8 - - includeInIndex - 1 - isa - PBXFileReference - path - SegmentMergeQueue.cpp - sourceTree - <group> - - 0F41B7C2E4732F2DD461804E - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - stem_ISO_8859_1_english.h - sourceTree - <group> - - 0F6F9C0F498684EE0D4FE4A9 - - includeInIndex - 1 - isa - PBXFileReference - path - Payload.cpp - sourceTree - <group> - - 0F815364A61DEEEF50C7F7E8 - - fileRef - 2011A9C8BA79169AB60E68E8 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 0F816C24AEB9795B5D941711 - - fileRef - 1BE8B43E4C0FA56BA5C606CB - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 0F865EF8AB48B1679ADF6DB8 - - fileRef - 2E6440F4CA70EDAE0AB56F63 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 0F92370FB239F7E9FA796A7B - - fileRef - 0E75938E2780E0F320D57C2C - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 0FCC1A0ADA84B8291678123B - - includeInIndex - 1 - isa - PBXFileReference - path - PhraseQuery.cpp - sourceTree - <group> - - 0FDFBF7BD33462F62E7D4295 - - includeInIndex - 1 - isa - PBXFileReference - path - FilteredTermEnum.cpp - sourceTree - <group> - - 0FE0CBE38C5D274E00EEDC55 - - fileRef - 0FEB9D018AD5B030E2CAD87F - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 0FEB9D018AD5B030E2CAD87F - - includeInIndex - 1 - isa - PBXFileReference - path - stem_UTF_8_finnish.c - sourceTree - <group> - - 100B453F7E27FF97B71ACDCE - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - header.h - sourceTree - <group> - - 10AD472927D4BA9CE6358045 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - _SegmentMergeQueue.h - sourceTree - <group> - - 10DEC03CFB12D2AB87B2C35E - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - CLuceneSearchResults.h - sourceTree - <group> - - 10EB0D800EE7123C91C217E6 - - fileRef - 718BA45D7D0FD507EACA9299 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 1154226778789AFE29DC75B8 - - children - - F063C8EFBCD29E6F450C625D - - isa - PBXGroup - name - CLucene-Core - sourceTree - <group> - - 116ECB4E0EF949F9EEED64BF - - fileRef - 57F7D82E7886BA3A7425E8B9 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 118288AC61EF93BD51671258 - - fileRef - D97B67805AB6500196B8B825 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 118408488EC49DD912A4C368 - - fileRef - CB64360BA725551FF3FA25E7 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 11999A5119188A3766763BF2 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - path - NSTimeZone+BRFullTextSearchAdditions.m - sourceTree - <group> - - 11BB66B6B92C17B19D9F5DD0 - - includeInIndex - 1 - isa - PBXFileReference - path - TermVectorWriter.cpp - sourceTree - <group> - - 12214C7AA68BE024CB8975EA - - fileRef - EAAD71F5DD9ABC8C059CCC1A - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 122F0CCD798030CFD157F55D - - includeInIndex - 1 - isa - PBXFileReference - path - MultiSearcher.cpp - sourceTree - <group> - - 123CDC8591D7F01EE0A4C44A - - explicitFileType - archive.ar - includeInIndex - 0 - isa - PBXFileReference - name - libBRFullTextSearch.a - path - libBRFullTextSearch.a - sourceTree - BUILT_PRODUCTS_DIR - - 13EF7C293F4D994E4ED2E63A - - includeInIndex - 1 - isa - PBXFileReference - path - Hits.cpp - sourceTree - <group> - - 1499C5CCAE2D5A054CAE05EF - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - SimpleFragmenter.h - sourceTree - <group> - - 14F518BA655209D18E9772A4 - - includeInIndex - 1 - isa - PBXFileReference - path - ConstantScoreQuery.cpp - sourceTree - <group> - - 1523814AA309EF5B4D26DA73 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - NumberTools.h - sourceTree - <group> - - 152C463442D4A72EAF51791C - - fileRef - 4F09EEBFC4AE8FA8BF148D45 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 153F4328C4EEFB6E792C78F3 - - includeInIndex - 1 - isa - PBXFileReference - path - LockFactory.cpp - sourceTree - <group> - - 155156FB5232E476C5BEFE69 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - repl_tchar.h - sourceTree - <group> - - 158B2008564F2B7840E4A602 - - includeInIndex - 1 - isa - PBXFileReference - path - Snowball.cpp - sourceTree - <group> - - 15BF2919D47611C4069837F7 - - fileRef - F02C4F2789A04E73F5B0D855 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 1618E61949B4FD8DB26344F2 - - fileRef - 6B4D72DDEC4C50FE2F3F31A7 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 1623CE297014EEB04C219411 - - fileRef - E687916575053E9A58BCF91B - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 1668D5B8241008DF4DBF6D37 - - children - - 6755C0484441D785BF2B4A3E - 0B5A6AC492D5CB735CE61F6D - 43A80D08DDA1DD76058D5978 - C7CD8F9F4E68E3F7C75F214E - 501D0883F2A4F56BE0756325 - 4248F0F424A12A978018EA55 - BDEFE3AE1B3FF4537D6F9018 - 89505E36F01C5D8D09FC107A - 6329512A024A5DF62EFA3009 - 3560466C09CAB57ED1598443 - 7AA956FF6436661D47D57158 - AD7DDAB5A9A587177FB1A1B1 - 80DBF89051C4CD70EEF319C1 - 216835D29001587FC4243D7D - CDECFA15A8310A4AF8891134 - 1499C5CCAE2D5A054CAE05EF - F6D9A29EE98F12B078670954 - 3C7E40091008170AB3C40C03 - 99F30E1C41E5720ABEA9E771 - CE63A3C1BD760C1054AB8E93 - D6D64F07BBB9EC93E095D5DC - 2476266DEC41B33D47656FED - 3CDEFCF108F17891EDEA6733 - 666EEB6F9D57EE4FC1CF297E - 0AE403A72846ED47EDC73486 - E4DFAE2EF95CB83A34C3258A - B7F8367FFD0D3B47A340E552 - B5CDD0A698F49B1F1AF1C97B - - isa - PBXGroup - name - highlighter - path - highlighter - sourceTree - <group> - - 1689B1AF593D35111D1C838C - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - api.h - sourceTree - <group> - - 16BF906B6D21239D5A3B3AC7 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - AnalysisHeader.h - sourceTree - <group> - - 17783F6A325E801EEC3E0CC9 - - includeInIndex - 1 - isa - PBXFileReference - path - Misc.cpp - sourceTree - <group> - - 179449F335B5713A20B32E21 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - IndexOutput.h - sourceTree - <group> - - 181CD4EBC1E580A208CF923D - - fileRef - 99F30E1C41E5720ABEA9E771 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 18BA412EE13898290E2030AC - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - MagicalRecord+Setup.m - path - MagicalRecord/Core/MagicalRecord+Setup.m - sourceTree - <group> - - 190AC441C678A51938BFBCBA - - fileRef - 97AED17A783CD7012FD6666B - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 191A26430F4412BD48B1DFEE - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - arrayinputstream.h - sourceTree - <group> - - 195B4FF23189D6EF908554CB - - fileRef - 4860EBF787BA38B5DED961C1 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 195E0E00D018032F4B251B15 - - fileRef - A15ED1F615FE495CD5BC49C8 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 19EF4C9DAA1AFA0FDC45FBA4 - - fileRef - 95DB5C33FA997A9E8DE854F8 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 1A128F2D6F3971553D8B5700 - - fileRef - 2F76E4B268890E23B5FDACB6 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 1A148058E849A7075272D6C7 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - VoidMap.h - sourceTree - <group> - - 1A15CF1C6E7E99C9CABBB6DD - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - stem_UTF_8_norwegian.h - sourceTree - <group> - - 1A46E539CAD222BD91F36254 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - BooleanClause.h - sourceTree - <group> - - 1A636497488BE25165F4F693 - - includeInIndex - 1 - isa - PBXFileReference - path - gunichartables.cpp - sourceTree - <group> - - 1A922B63F4CB06699828351E - - fileRef - C7CD8F9F4E68E3F7C75F214E - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 1AAB7099229A3C83F7D61A6D - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - _PhrasePositions.h - sourceTree - <group> - - 1AD07D3D37F50F249123DF94 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text.plist.xml - path - Pods-acknowledgements.plist - sourceTree - <group> - - 1B556A09CDA57E9E32EE52B9 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - TermVector.h - sourceTree - <group> - - 1B85CFAC341D4F2F48948B07 - - fileRef - 1DCB516F82B04687C57D53F9 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 1BB6C732F8063A3F332ED6B8 - - fileRef - 21CC225E952E964C7965A94C - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 1BC99647ED365B31CD1BD85C - - fileRef - 3997AF46707F0285C9161CF0 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 1BD1335873746DAD7B83A6D6 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - Sort.h - sourceTree - <group> - - 1BE77EFD772F5003B75059B4 - - includeInIndex - 1 - isa - PBXFileReference - path - GermanAnalyzer.cpp - sourceTree - <group> - - 1BE8B43E4C0FA56BA5C606CB - - includeInIndex - 1 - isa - PBXFileReference - path - utf8.cpp - sourceTree - <group> - - 1BEF1849A672A7D738A36389 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - Document.h - sourceTree - <group> - - 1BF19E2826BB1A19FE45B22C - - includeInIndex - 1 - isa - PBXFileReference - path - stem_ISO_8859_1_porter.c - sourceTree - <group> - - 1C1A7D0A757C552788B214BD - - fileRef - 817248EB210C02220C215B94 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 1C39185165A4DA4361018D50 - - fileRef - 1EEF7632C16E1C8F63EC6C03 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 1C42E7FEBC0311808D74DA29 - - isa - PBXFileReference - lastKnownFileType - wrapper.framework - name - CoreData.framework - path - Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/System/Library/Frameworks/CoreData.framework - sourceTree - DEVELOPER_DIR - - 1C6E6292D36ADE9D1E33098F - - fileRef - 05A9687D9114AEE92DBDF2CC - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 1C748C368580AE3D88CCC39D - - includeInIndex - 1 - isa - PBXFileReference - path - MD5Digester.cpp - sourceTree - <group> - - 1CD442F55AD2DF0FCB82C0FA - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - MagicalRecord.m - path - MagicalRecord/Core/MagicalRecord.m - sourceTree - <group> - - 1CFCA09993711542766B2297 - - fileRef - BE9EED90D05EF52F2A40D4C7 - isa - PBXBuildFile - - 1D04699C8AA689C238590226 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - _DisjunctionSumScorer.h - sourceTree - <group> - - 1D1EF24477F0B7EC15959510 - - includeInIndex - 1 - isa - PBXFileReference - path - StandardAnalyzer.cpp - sourceTree - <group> - - 1DBA17A41CDC6764BB227F1D - - includeInIndex - 1 - isa - PBXFileReference - path - SegmentTermVector.cpp - sourceTree - <group> - - 1DCB516F82B04687C57D53F9 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - _Lock.h - sourceTree - <group> - - 1DCECBFE18A198F63A7CE9E9 - - includeInIndex - 1 - isa - PBXFileReference - path - DisjunctionSumScorer.cpp - sourceTree - <group> - - 1DCEFAF4279F77380C6213AB - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - ScorerDocQueue.h - sourceTree - <group> - - 1E87F259B8C10F203FEEE986 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - MagicalImportFunctions.h - path - MagicalRecord/Categories/DataImport/MagicalImportFunctions.h - sourceTree - <group> - - 1E8823AEAE55C1D50C1D4B95 - - includeInIndex - 1 - isa - PBXFileReference - path - RangeQuery.cpp - sourceTree - <group> - - 1EB02ED67F8471D328DBA162 - - fileRef - 3BE63C2DF40A011B27B692CF - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 1EEF7632C16E1C8F63EC6C03 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - _FieldCacheImpl.h - sourceTree - <group> - - 1EF2934E6675EE33D1A4817F - - includeInIndex - 1 - isa - PBXFileReference - path - StdHeader.cpp - sourceTree - <group> - - 1F31AA26CBCF3F5F0D85B98F - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - Explanation.h - sourceTree - <group> - - 1F4A799182C2391F356C71FE - - fileRef - D6D64F07BBB9EC93E095D5DC - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 1F715F51A4C239626B7FDFF7 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - _SkipListReader.h - sourceTree - <group> - - 1F9829C835D3E19A1E6B3FB8 - - fileRef - A678921E5ADAC3529A3383B6 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 1FD874E64B287E120FEF2D41 - - buildConfigurations - - B81AF4DCAB32055DE66E5D33 - 7B810F15A656431520F9AD5F - - defaultConfigurationIsVisible - 0 - defaultConfigurationName - Release - isa - XCConfigurationList - - 200083713F5DC50EFB5BB932 - - fileRef - E9CE7457AD9E75FAC9836EB8 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 2011A9C8BA79169AB60E68E8 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - stem_ISO_8859_1_porter.h - sourceTree - <group> - - 205072BA7EA52C39E8B099A7 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - Compare.h - sourceTree - <group> - - 2075D418B81EE6D69A054276 - - includeInIndex - 1 - isa - PBXFileReference - path - FastCharStream.cpp - sourceTree - <group> - - 2079D41698D17A66A399586A - - includeInIndex - 1 - isa - PBXFileReference - path - PrefixQuery.cpp - sourceTree - <group> - - 20AC62CB5D38EA845B2A7726 - - fileRef - 10AD472927D4BA9CE6358045 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 2101E878A0DC29642F73DAC7 - - fileRef - E4DFAE2EF95CB83A34C3258A - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 21292FADA31E191AC302BDD5 - - fileRef - 77283DB81F9A959F7D266917 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 2129341487E9631B16EC189A - - includeInIndex - 1 - isa - PBXFileReference - path - SegmentMergeInfo.cpp - sourceTree - <group> - - 216835D29001587FC4243D7D - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - Scorer.h - sourceTree - <group> - - 21CC225E952E964C7965A94C - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - PorterStemmer.h - sourceTree - <group> - - 21ECD99136275A75BB0610A8 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - _StringIntern.h - sourceTree - <group> - - 21F0A93F93B89850F7F06636 - - fileRef - 253EA75BE3BAA26B03F775D2 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 222E76D2922FC6012577A65D - - includeInIndex - 1 - isa - PBXFileReference - path - stem_UTF_8_dutch.c - sourceTree - <group> - - 2289F7C1051C793E7DDD5C69 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - WildcardQuery.h - sourceTree - <group> - - 22A03773D4C66FB662986272 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - IndexModifier.h - sourceTree - <group> - - 22EA58D8B324383EFD340FAA - - fileRef - 71701A4EC12BB8914E02B8F1 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 22FC8026129E74064F7410BE - - includeInIndex - 1 - isa - PBXFileReference - path - NearSpansUnordered.cpp - sourceTree - <group> - - 233D68A64C3305D098A6D308 - - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - CLANG_CXX_LANGUAGE_STANDARD - gnu++0x - CLANG_CXX_LIBRARY - libc++ - CLANG_ENABLE_MODULES - YES - CLANG_ENABLE_OBJC_ARC - YES - CLANG_WARN_BOOL_CONVERSION - YES - CLANG_WARN_CONSTANT_CONVERSION - YES - CLANG_WARN_DIRECT_OBJC_ISA_USAGE - YES - CLANG_WARN_EMPTY_BODY - YES - CLANG_WARN_ENUM_CONVERSION - YES - CLANG_WARN_INT_CONVERSION - YES - CLANG_WARN_OBJC_ROOT_CLASS - YES - CLANG_WARN_UNREACHABLE_CODE - YES - CLANG_WARN__DUPLICATE_METHOD_MATCH - YES - COPY_PHASE_STRIP - NO - GCC_C_LANGUAGE_STANDARD - gnu99 - GCC_DYNAMIC_NO_PIC - NO - GCC_OPTIMIZATION_LEVEL - 0 - GCC_PREPROCESSOR_DEFINITIONS - - DEBUG=1 - $(inherited) - - GCC_SYMBOLS_PRIVATE_EXTERN - NO - GCC_WARN_64_TO_32_BIT_CONVERSION - YES - GCC_WARN_ABOUT_RETURN_TYPE - YES - GCC_WARN_UNDECLARED_SELECTOR - YES - GCC_WARN_UNINITIALIZED_AUTOS - YES - GCC_WARN_UNUSED_FUNCTION - YES - GCC_WARN_UNUSED_VARIABLE - YES - MACOSX_DEPLOYMENT_TARGET - 10.9 - ONLY_ACTIVE_ARCH - YES - STRIP_INSTALLED_PRODUCT - NO - SYMROOT - ${SRCROOT}/../build - - isa - XCBuildConfiguration - name - Debug - - 234B1D780207BC3EC47F9469 - - fileRef - 5177E7ED2B669CEA891B7AE7 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 236F954DCDC1B04192DE6F4A - - fileRef - 1E87F259B8C10F203FEEE986 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 23F220D9293DC81B7F1DC1FD - - includeInIndex - 1 - isa - PBXFileReference - path - CLuceneSearchResult.mm - sourceTree - <group> - - 23FA0AB5578FFF3C69002EF8 - - includeInIndex - 1 - isa - PBXFileReference - path - Term.cpp - sourceTree - <group> - - 241E6AE8F7FF13DC9E471AD8 - - fileRef - 3A3665A91AA93CA0A27C8F94 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 242B3AE8D69D8CED6F4D9BEA - - fileRef - A0A0CA6F6D96BAF0E406850D - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 242B9743FE949547C38B3AA1 - - fileRef - 89505E36F01C5D8D09FC107A - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 243DDBEA15D23ED920060166 - - fileRef - 7050C1CF512D7A8CE9467A4A - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 24696B8F00C914CC4C18EBBA - - fileRef - A679178BDF4CA5A0689F9B12 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 2476266DEC41B33D47656FED - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - TextFragment.h - sourceTree - <group> - - 24BB795C9DD244DFC55D3338 - - baseConfigurationReference - BFB890C04CA5D75ADEF01D5A - buildSettings - - ENABLE_STRICT_OBJC_MSGSEND - YES - EXECUTABLE_PREFIX - lib - GCC_PREFIX_HEADER - Target Support Files/MagicalRecord/MagicalRecord-prefix.pch - MACOSX_DEPLOYMENT_TARGET - 10.9 - MTL_ENABLE_DEBUG_INFO - YES - OTHER_LDFLAGS - - OTHER_LIBTOOLFLAGS - - PRIVATE_HEADERS_FOLDER_PATH - - PRODUCT_NAME - $(TARGET_NAME) - PUBLIC_HEADERS_FOLDER_PATH - - SDKROOT - macosx - - isa - XCBuildConfiguration - name - Debug - - 24ECADDB4E7EAC7FADE4D1FA - - fileRef - 75A928066ACCECA8D05215AA - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 251431EBC777B9C04E8FACDF - - fileRef - 755885785D26F26E11F398D8 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 253AEB30B4859A28CB0EDE5E - - fileRef - 944FD0F435743BBD44A5254B - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 253EA75BE3BAA26B03F775D2 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - Field.h - sourceTree - <group> - - 254036D6B36CDE2A6D4F9817 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - stem_ISO_8859_1_danish.h - sourceTree - <group> - - 25809E5B5654439959D47287 - - fileRef - BA3FDE7A3BDE7E6D54F35FF8 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 2608945DC25BED7AC55D8035 - - fileRef - 8C7DFA6F35716FE75A12241B - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks - - - 2614F08CC06129667C7E7D23 - - fileRef - 662B5D081B824BF00C9ABFE9 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 261FCCC0C87FDC833352A1A9 - - includeInIndex - 1 - isa - PBXFileReference - path - FuzzyQuery.cpp - sourceTree - <group> - - 26236D064906E634BF29CD7C - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - MagicalRecord+ErrorHandling.h - path - MagicalRecord/Core/MagicalRecord+ErrorHandling.h - sourceTree - <group> - - 262D2E2611D3E5B77493D200 - - fileRef - 1499C5CCAE2D5A054CAE05EF - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 2641A61D34F8C1C2EDC8DFDE - - includeInIndex - 1 - isa - PBXFileReference - path - FastCharStream.cpp - sourceTree - <group> - - 2652B261EC7D384EE8F9E8B0 - - children - - 788AF9D5A2A794AD17ABDAB7 - 6CF3DEEC517DCE926C5AA3F9 - 7371A1598E691AE93DFA11FE - 1154226778789AFE29DC75B8 - 6C938DC820C7B61B4099E81E - C740B635A63A158562CF8ED0 - 9A168C39BE69E8A3A038AC43 - DEE6EA55109F794EF410C365 - - isa - PBXGroup - name - BRFullTextSearch - path - ../.. - sourceTree - <group> - - 26DFF84EC7ADEA5A6DBBCA92 - - children - - E83DFB9CBAE207A9FE7D4F07 - E3A7461047459D318B3F19EF - - isa - PBXGroup - name - debug - path - debug - sourceTree - <group> - - 26F639F07D907A6E49C2078C - - children - - 3131A39A41162501CD0FF3C2 - 4282BC23610571A87E103E0B - 17783F6A325E801EEC3E0CC9 - 556674C3F503ACB0F365C486 - 7E3C23D5044201997E7CE2DB - F0C8DEEAD50643AB2BFE5226 - - isa - PBXGroup - name - util - path - util - sourceTree - <group> - - 271ED031E0F757B79527FB6B - - includeInIndex - 1 - isa - PBXFileReference - path - Compare.cpp - sourceTree - <group> - - 272DA5C234B408496C348A2F - - children - - 2E6440F4CA70EDAE0AB56F63 - C72A666E81D292E4882DA54F - - isa - PBXGroup - name - CLucene - path - CLucene - sourceTree - <group> - - 274E26BA456B1C78578E2D51 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - path - BRSearchService.m - sourceTree - <group> - - 2777368172F586B800CEAD9C - - fileRef - EABB423BBEB234E3F6CFCF91 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 2832B92D6D15EA9401BB9884 - - fileRef - 0F6F9C0F498684EE0D4FE4A9 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 284728CC12981881D81FCBC4 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - _TermInfo.h - sourceTree - <group> - - 2878C68036AF8E2C63F8BFB0 - - fileRef - 3179783B92DDDF04B02CEDE7 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 28A14FF2ECC0944300D94357 - - fileRef - 6BD73638A7E081238D84C31A - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks - - - 28A2D75AB03D5150E6FB0872 - - explicitFileType - archive.ar - includeInIndex - 0 - isa - PBXFileReference - name - libPods.a - path - libPods.a - sourceTree - BUILT_PRODUCTS_DIR - - 28EFD9703AD9A028BF702D92 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - MagicalImportFunctions.m - path - MagicalRecord/Categories/DataImport/MagicalImportFunctions.m - sourceTree - <group> - - 2959B2E5ED5EEF982A65AF65 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - stem_ISO_8859_1_dutch.h - sourceTree - <group> - - 29764B244C7A4D957BAD2CB3 - - includeInIndex - 1 - isa - PBXFileReference - path - FieldSortedHitQueue.cpp - sourceTree - <group> - - 29B73112197AB3D5842FCECA - - fileRef - 1A46E539CAD222BD91F36254 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 29C0C39FED18AC22E311F8EF - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - DateFilter.h - sourceTree - <group> - - 29CB0D6F23A60FC2249C79C6 - - children - - B3D1EF3AC7F78FAE4E26F381 - - isa - PBXGroup - name - debug - path - debug - sourceTree - <group> - - 2A47FA093AD381399630D9D8 - - includeInIndex - 1 - isa - PBXFileReference - path - DocumentsWriter.cpp - sourceTree - <group> - - 2A6CC3FCA3EB97EC96BA377A - - fileRef - EC442525118A832FA43F1893 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 2ABD4F4D3F116EDDCF673F6C - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - MultiSearcher.h - sourceTree - <group> - - 2B2B7E9F32EC208D7662FE77 - - fileRef - 7EB35E00A4EF61BD73DC0724 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 2B40270633D8F9999EA6830E - - fileRef - 216835D29001587FC4243D7D - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 2B6FE47F2213589ED0A24A1B - - includeInIndex - 1 - isa - PBXFileReference - path - CLuceneIndexUpdateContext.mm - sourceTree - <group> - - 2C6469A9018ADF3D38A4FC94 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - NSManagedObject+MagicalAggregation.h - path - MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalAggregation.h - sourceTree - <group> - - 2C7FBE0EBC9249571E79319F - - fileRef - 158B2008564F2B7840E4A602 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 2C893B67CBD258038B5C1DD7 - - fileRef - 0915A4B92B2F466210CA8A72 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 2C9AC39E9C1D7DAECECC4995 - - children - - BF62A616E6CCBE202F8723FD - - isa - PBXGroup - name - src - path - src - sourceTree - <group> - - 2CB9B0BF446D4AC2D3C79603 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - LuceneThreads.h - sourceTree - <group> - - 2CE521F6A5A9830F33761170 - - includeInIndex - 1 - isa - PBXFileReference - path - MatchAllDocsQuery.cpp - sourceTree - <group> - - 2D00A9659811DDA78645A731 - - fileRef - F59BC4E5B1A2636F0A2FA7EB - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 2D245B06193320549C8D98A9 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - NSObject+MagicalDataImport.m - path - MagicalRecord/Categories/DataImport/NSObject+MagicalDataImport.m - sourceTree - <group> - - 2E50D5D00C80BD5B29A1568C - - fileRef - 254036D6B36CDE2A6D4F9817 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 2E6440F4CA70EDAE0AB56F63 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - _clucene-config.h - sourceTree - <group> - - 2E78497BC87DE89639FF5530 - - fileRef - 5E7868C23F5B9E27390C1BB1 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 2ECCF8652A62ED6A4759E5B4 - - fileRef - 6BBE2A772F3A3BCDD05E10D2 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 2ED307A6EA748B4C154F01EC - - children - - 74F59A4E197380B527ACFE42 - 5EAC13CBF67285DEAE3884FB - A48BF9274EB8E8E8FFCFBE31 - - isa - PBXGroup - name - debug - path - debug - sourceTree - <group> - - 2F4B4074009189B05BECF4E6 - - includeInIndex - 1 - isa - PBXFileReference - path - ExactPhraseScorer.cpp - sourceTree - <group> - - 2F76E4B268890E23B5FDACB6 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - NSManagedObject+MagicalDataImport.h - path - MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalDataImport.h - sourceTree - <group> - - 2FBACE2EE415DF586B563177 - - buildActionMask - 2147483647 - files - - CEC1CE34FCA634B4C51E8599 - B392814A1868D090E6BEB0A9 - 9905BA53E84A685CFDED3D77 - 4215EE6292D23A3EA8DC0A7F - 04E612A365EE2139C3E148AB - 7492216D0A7685547FF7AFB8 - 0F865EF8AB48B1679ADF6DB8 - BE037198C3D6B59586DE7429 - C75D30FD6471A4E92CC2E865 - 6C0CAAE5AA136B0C6261DCC9 - C870FD179CF3136E1ED64001 - 44A70064FDE1F2C0C30C9403 - 8644C54931E8557170ECB6B7 - 5BDF23CD932B94FFE2D88C1F - DE57FA1CF82AB7A41E081F30 - 2B2B7E9F32EC208D7662FE77 - CD93E10F4B83A98C5C2520D7 - 1C39185165A4DA4361018D50 - 4AF00884476431C49B4B8480 - 3630493CD79B1BCC54F574B7 - 4B46FC05045432A81110996C - BEED5B1092D99641727130B2 - FE4CE68DFB5FC62C2B0A1B08 - A3A110ACB90ED85728BBB76C - AEC4CB97E87FBB07111C4C72 - 926E2F4292BE4DDF253B2EA8 - 251431EBC777B9C04E8FACDF - 1C6E6292D36ADE9D1E33098F - 1B85CFAC341D4F2F48948B07 - 0761C1A122F7E85AA860037F - CAB79397DF8A4C235996B0B3 - 47122D3D50E97C0CD527303D - CCABD97B890D59731AB152D0 - 6C9EF15D5BACEED7AF4CFFE9 - 026DD2AB3977653A0A74041F - 4EA3FA914DF5F8B574DB5549 - 3E5D3E27F1FC4F85CEE7E1CA - 0DFBC286CBD9C4FBAC140FE4 - 6B09E6256A74C8A7383F7496 - 25809E5B5654439959D47287 - C6E3F041EA34C05DFFA221EA - 20AC62CB5D38EA845B2A7726 - 6D1EF0BCEF820F5EEF69AA12 - 36CA8AF924FC8FB7480D1A75 - 7932F1A3CBF2AC2DC47D54B6 - B35FE999320B57DD21098CE8 - B58D7B6ECFB2CCED0908DC4B - 2878C68036AF8E2C63F8BFB0 - FFB16C76AFB9138FE0F8698D - BA13458C60157054AFCB328E - 00E5942AD201C7FDA387C8BC - 234B1D780207BC3EC47F9469 - 837448958BFB2E17A28EF69E - 527571EFBF036EDD1A20FFC0 - 388B53EA3A10BF08F476BDC7 - 24ECADDB4E7EAC7FADE4D1FA - 96E21133779D85F224AE5D8B - A3DA97D387E9DC17F5868C66 - DAF81D58676B0A89A16A26E8 - 0579996E3765D8F815E5A1CE - F038EC511516E601025D64DA - B5F03320F1019F0B2B3EC91D - 58BF4432670687C84F68D421 - F742E38ADC26CC395A35759D - 70E697C6C955EC0249BF49CF - 195E0E00D018032F4B251B15 - 6AE5D89650C054C60EF26CE4 - 12214C7AA68BE024CB8975EA - 29B73112197AB3D5842FCECA - 5E283A8FE3A27C2D03DE82AB - 82D1F8232CBFC28B6BCEAA9A - 5054A838AB86B7ECE9A62B91 - 1618E61949B4FD8DB26344F2 - 00A197019698500417E21481 - A969853342381221638F9BD2 - 3245B159BD801A7CF11B011B - 4C87D35676FA20FB8EE9ED98 - FA45C8D8238D6E6389BA6182 - 51FBB7A162A434CA2D5AB0CB - DC0BC55C3FE62A086294C1FF - 5AECF3498D6CA8FE630BC06C - A7A708B658264A92C3DCBF6E - 64D51C7A1C7FA097D0085A46 - 2614F08CC06129667C7E7D23 - 07472E94E2B7C42C05F9B6DA - C72049DE366960573B482155 - E6F96E6A975A430766F12F66 - 95E915E2CDF500CA2ED22F2E - 30CCE1B89899B64FDF4B4B72 - 5C8CBD4735E97BACCBBBAD38 - CAAF0F464DB433FACE770BA1 - 96C8D7575BED6F88D3A71716 - 45D24EA8CBA88A489BF4116A - BF3B851C22C6106FC8DD9B32 - 0A6231F377003E3C7DF88757 - 4B78ED942EF7C87E0FAD21D3 - 30C178DA44F15E91C1F398CC - 7D23505741F7F67036619662 - 87EF4E8F612FF2B4D362AFB5 - A2B9193B8F02EB7362B58CAC - 7814315E5E4817735A35EE85 - E48D86965B56A2255D066DBE - FBE5CC8F91F9FB37BD47FA21 - 2E78497BC87DE89639FF5530 - 725F057D5E162172E9A11B43 - 3213E224D9032B7DCA16E57C - BE073D79CB0AB53262541D42 - D0480E10EE4C95D350145E07 - 6EAF19B65A3E982CFA2C167E - 21F0A93F93B89850F7F06636 - 69E9A17A90EA3C050C972B7A - 9986C925EEEA7E5CFC673D13 - A3923AD15CC0CAFD176B3721 - 2777368172F586B800CEAD9C - 683DBB193C0CD14D204AFDC9 - 3F14E44FAADC3F7B6B6B434F - 1A922B63F4CB06699828351E - C828273031603EEEA7202D4D - 68D037D4156639A484ADEAB9 - F27D6554AAAF384B09ED0B5C - 4F97E21F12525B64F103F246 - 116ECB4E0EF949F9EEED64BF - 8B3299325EF7C214A356443D - 59FCE0E4E968801C7EC1226F - FC5AE2050665A485573A960A - 61097B8C0ED2112DD81EA9C1 - 242B9743FE949547C38B3AA1 - F7C8A755B9522F501AA50E34 - D54734A5503F6CAE11B03F30 - F5C0150EDF4DA8911B357773 - 5DEC4330F7B20A0AA5E11C5C - 42B2CA150BAFC2542D64B273 - F1F56A5305879C4C9F8CBFB5 - D32D9320DA483226E3D57836 - E69C261328FD27F7EDCB2D0A - 345F3367089017718F418466 - 53279FCDC4377852FFB015E0 - BCF8B5A56F3F93E62EBC2BC6 - F4F08DE0C2662C545AE8C659 - 9944BAA1CC3DA65FEA1DFC5E - AB27B8ADC5355361FC1FAD9C - 8C12D5EFE61A1A65BBFDA80C - BA47DBA6DF8B871E57D8A4D6 - B227930794500D0AF558CC42 - D1C6567E7C9FBD4C8304CEF2 - 04C52E146DE16654E4EB40D6 - E9B183904DF39550705B4B55 - 7DB2E4496D8581174D96DC2E - 1623CE297014EEB04C219411 - 8DAF330F8A1AD1263B2FEA0C - 1BC99647ED365B31CD1BD85C - 88016BBEAE5E5EF9EF0009B4 - 0EFA9FC814FD14116341205C - A84345E07E85B8680FDBCE3A - 82902ED44739DB991845903F - F14DFEBCA4B0A131C5DF9691 - BE2F47A488D73C6E6FEBC4E7 - 07EB69451F084D0217A4BB6C - A06C16C9E114C447473B9F34 - A1C07331EB08D0ECCA2804F7 - 76FF378A4DAA02DD0C69D0A3 - 3B39C01A4D67747659A4416E - FE24D9CFB5BA16A68638B7F9 - CF7FA6CFBE211694C4F32891 - 1BB6C732F8063A3F332ED6B8 - 2C893B67CBD258038B5C1DD7 - 482F513E046FE126EE579C53 - C4423D50EA85E95FA336F469 - 3DC8B7EDD42D143395040CE6 - 6BCC9549B7DB5E49A89C628A - DCF71175514B1BD48813B3FF - 6F4BE6A818110B9D4F7FC186 - DF28BCFA6EC66788F3A5BD18 - E40CA6F9396553B96FB8EEFE - DE7574A9B5479A14BE8228F6 - 6A2790B892592872A83555EC - C4653255232E1D8E11B749C8 - B02CD9A483B2682686193305 - 76CBC57176285C5230043A64 - 97E7F3800E0DDB063A759E42 - 4AE355C23976B8E2E3E82BB8 - 4EBACEF1E20D38E906B05690 - 87A88EF1E7D1E2862C2634D7 - 2B40270633D8F9999EA6830E - 61D2CDE162161543D5949DD3 - 743A6908FF87FFBE66B40AA2 - 7AE3DF8FA7A1FE6FF65A02C5 - 5A57EC956746513334C23A36 - 57842675DDC380C3E5E867E2 - 262D2E2611D3E5B77493D200 - F53E96534091EAF490BDD4A7 - 3BF6119059ABE8EAD9839198 - 39AF794827CEFF9B7C7298B0 - 60A63C4E75AE49A544911FFB - 44950AEE6CBC62EBBB1AE8F5 - 6708A56F41F258541DC117E4 - 6E581FC004BE987FA79A0E3A - 808AE4EE631CA2C8D5C8595F - B5C5B090D201361BE035CA2B - EA6F11CABEBB4EFBC304C09A - D8B4C5463CCA333326BD42F3 - 7D19B296FCE2CB018876704E - D627263226B4ABE81E64AB39 - 0BE8288D6334CBD2A75AAE7F - 660B70095000DFBFA6F81ED1 - 3568549AA4F359D045C78242 - 8CF015F62E6F7579EF0D68CF - AB62403F7C2FB44EB025DC05 - E942FCC23B283FEA2BA67DA4 - 8919DA9F4D8898F17CDC07F4 - 3DC1464C13A19F4B2B904B05 - B707FEF8EA5491DD29ED596E - 381401CA19F44AB8E8402EA8 - 2E50D5D00C80BD5B29A1568C - 561553EF1B4345415D272E48 - 5887E461F14031911F8E3B6C - 95762693A9A09686FEFD5311 - C03AC17FB33C9AB761591E7E - C9496282861D02B1FBA2F10E - 7867E6A8898157A0BB6D0A03 - 9BAE21A613612D3EED10F67D - 0F815364A61DEEEF50C7F7E8 - E4B8B24D0DB6B1500AF3495B - 453F323C879AC39578965812 - 3E20E7DDBEB9F28FC62EF928 - 45ED033A488DE9CD28738E4F - D077B13BA27992608E0CB9D8 - ECB779CEE8EC9C5B47491700 - C06F260C584A9BAF8A8BEF19 - EB99DD89A8EB8EC08263F542 - C0D1C157A05FD6CDB89730AF - 9D19FA7F14E221249529DB75 - 49E0974D58D80C8C9427704D - 3C257E80CD014DB8EA002BEF - B441518F2AAD292874335AD4 - 376448408828F05E96290E01 - 4CE27FBED8F49185B8B3395A - 627A7C2A96EBC6A7685A93DA - A6532CB8C8A85262898F6406 - C90E01473FB1E46DD4761AA2 - 8684F90C6360727EC1431AB3 - B6DD8D9DE6A8C226E5EB775C - 86679FEBDA6B59F33B4B5565 - 19EF4C9DAA1AFA0FDC45FBA4 - 01282228562B1E909395060D - CF9533303E09BD0025E59D73 - 4055384857E0805320901379 - 2101E878A0DC29642F73DAC7 - FFF067C301696ABCF61AD0C3 - 4E2EC0515E0CED675CB70EBD - A2DFA440E48D78C990E35F8E - 35AD37B1947EEC67D2D7D180 - A2E1035E29E1CD70519FDFF9 - - isa - PBXHeadersBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - 2FC2CAD124AB27073E741E9C - - includeInIndex - 1 - isa - PBXFileReference - path - BooleanScorer2.cpp - sourceTree - <group> - - 2FEFE13361BF1273AF837783 - - includeInIndex - 1 - isa - PBXFileReference - path - ChainedFilter.cpp - sourceTree - <group> - - 301267A9E07F4D873C85CCEF - - fileRef - 1DBA17A41CDC6764BB227F1D - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 301BF744D532B5131903AB5D - - fileRef - 2079D41698D17A66A399586A - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 305B095CCB80D7DE617E5E4D - - fileRef - EABD9DED5EB90ABDBA398EC5 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 30658F484852B5F33FAA9ADA - - fileRef - C6DF822A092B218B0CBE0264 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 30B946B8D656F0BB45CAB938 - - isa - PBXTargetDependency - name - BRFullTextSearch - target - DC02470A3644F4C2181CEAC1 - targetProxy - ADE44E36FF9D9F2BE36CB461 - - 30C178DA44F15E91C1F398CC - - fileRef - B823E795CC4D3B4FDE1B58EF - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 30C46B16C318916C4F51E9C3 - - fileRef - 6F17249E485658A3DF7EFAD1 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 30CCE1B89899B64FDF4B4B72 - - fileRef - A8AAC7635AE9DBE51E2776CE - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 312B6732CF362A5063C355C6 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - libstemmer.h - sourceTree - <group> - - 3131A39A41162501CD0FF3C2 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - _dirent.h - sourceTree - <group> - - 315E772B5493826B76C1A97A - - includeInIndex - 1 - isa - PBXFileReference - path - IndexOutput.cpp - sourceTree - <group> - - 3179783B92DDDF04B02CEDE7 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - _SloppyPhraseScorer.h - sourceTree - <group> - - 31E610CCDCDC112AD2317FE1 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text.xcconfig - path - BRFullTextSearch.xcconfig - sourceTree - <group> - - 31F4E38E2E3487FA5A1F2AD1 - - children - - 2652B261EC7D384EE8F9E8B0 - - isa - PBXGroup - name - Development Pods - sourceTree - <group> - - 3213E224D9032B7DCA16E57C - - fileRef - 0B5A6AC492D5CB735CE61F6D - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 32271FFE9DDDD68CC4EA89B5 - - fileRef - 598AAC5C79270D9AB98FC5A7 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 3239680A2176026B7AC6BFC0 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - SpanNearQuery.h - sourceTree - <group> - - 3245B159BD801A7CF11B011B - - fileRef - 8EFCB2F24CD2ADAE7767CA37 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 33523731E85C50496BB0D3F3 - - fileRef - 4282BC23610571A87E103E0B - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 33B167CA5202F531E5E043EF - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - BRSearchFields.h - sourceTree - <group> - - 34286DEE91533CA4536D89AD - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - stem_UTF_8_finnish.h - sourceTree - <group> - - 345F3367089017718F418466 - - fileRef - 43985071AAAE3EBDF727CBBB - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 34C6C036D2F25DFC22971842 - - fileRef - BF99AFAC81F89594080A9FF5 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 34E1F09B55D10524E46AF35E - - fileRef - 2F4B4074009189B05BECF4E6 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 34ECF0CF5E8EE29928DCB48E - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text.script.sh - path - Pods-frameworks.sh - sourceTree - <group> - - 355141F0A791E481E7C69393 - - fileRef - 28EFD9703AD9A028BF702D92 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks - - - 3560466C09CAB57ED1598443 - - includeInIndex - 1 - isa - PBXFileReference - path - QueryScorer.cpp - sourceTree - <group> - - 3568549AA4F359D045C78242 - - fileRef - CFC357186F781B6A74FE9799 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 35AD37B1947EEC67D2D7D180 - - fileRef - 2289F7C1051C793E7DDD5C69 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 35B7E2DC6D9E23A2E7382A9B - - fileRef - 7E3C23D5044201997E7CE2DB - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 362F1C53F906F8AC32F2540D - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - repl_wctype.h - sourceTree - <group> - - 3630493CD79B1BCC54F574B7 - - fileRef - E5F8A5E1CAF5E830270632A0 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 3699F996D9094758D1DC986F - - fileRef - E3A7461047459D318B3F19EF - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 369E8C97AE2FA6290BE626D1 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - path - BRSearchFields.m - sourceTree - <group> - - 36B678E77A0F7B6CA64CA9C3 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - stem_ISO_8859_1_german.h - sourceTree - <group> - - 36CA8AF924FC8FB7480D1A75 - - fileRef - CF45B905FBFF4BD88AC307B0 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 375D2944708E4A2A00537BA5 - - includeInIndex - 1 - isa - PBXFileReference - path - CachingWrapperFilter.cpp - sourceTree - <group> - - 376448408828F05E96290E01 - - fileRef - 89C32EA372300AD4E5FB1BBA - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 377BF0055E6E99A9E399278F - - fileRef - 222E76D2922FC6012577A65D - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 37C04BB15D4A242604B6BE78 - - fileRef - 7E7B8CE96CFE1B767C29E502 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 37E3FBE03C28C2E536B88777 - - fileRef - BF703906459BFF08961E8459 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 37F1A52B9740B1A9B57A5BBF - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - _SegmentHeader.h - sourceTree - <group> - - 381401CA19F44AB8E8402EA8 - - fileRef - B9102649C2D71678FBB99DF2 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 386AB1CB697BC5266C6813DC - - includeInIndex - 1 - isa - PBXFileReference - path - DateField.cpp - sourceTree - <group> - - 386C640E51679532F5FF9ED0 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - _FastCharStream.h - sourceTree - <group> - - 387237E8F6AC2B80AFFE797A - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - SnowballPrefixFilter.h - sourceTree - <group> - - 387C40E1CDFF6C21CF1C4F3C - - fileRef - CE22856C0A806BA6945E4B0E - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 388B53EA3A10BF08F476BDC7 - - fileRef - AB0C95FCCF16C431FD63AEF0 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 38F75157E9C14AD14BA0688A - - includeInIndex - 1 - isa - PBXFileReference - path - repl_tcscasecmp.cpp - sourceTree - <group> - - 39496126A79BAE8538E7B360 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text.xcconfig - path - Pods.release.xcconfig - sourceTree - <group> - - 3997AF46707F0285C9161CF0 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - MultiPhraseQuery.h - sourceTree - <group> - - 399E43EEAE745EACC4904145 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - Reader.h - sourceTree - <group> - - 39AF794827CEFF9B7C7298B0 - - fileRef - 07562E0C6DC11FCB8E75CF7D - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 3A3665A91AA93CA0A27C8F94 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - NSRelationshipDescription+MagicalDataImport.h - path - MagicalRecord/Categories/DataImport/NSRelationshipDescription+MagicalDataImport.h - sourceTree - <group> - - 3A4CA7E7F0E75AE2BE1064F0 - - fileRef - 46146F16F9927BF080002586 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 3A6F3D448A38DFBEA03F1D72 - - fileRef - 13EF7C293F4D994E4ED2E63A - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 3A83D9FB4F1A8ADE8F88351D - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - MagicalRecord+Actions.h - path - MagicalRecord/Core/MagicalRecord+Actions.h - sourceTree - <group> - - 3AAE3216C4D1F3EC112E7907 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - _TermInfosReader.h - sourceTree - <group> - - 3B39C01A4D67747659A4416E - - fileRef - 1523814AA309EF5B4D26DA73 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 3B7D975C1F482B047471100B - - includeInIndex - 1 - isa - PBXFileReference - path - IndexFileNames.cpp - sourceTree - <group> - - 3BE63C2DF40A011B27B692CF - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - NSAttributeDescription+MagicalDataImport.h - path - MagicalRecord/Categories/DataImport/NSAttributeDescription+MagicalDataImport.h - sourceTree - <group> - - 3BF6119059ABE8EAD9839198 - - fileRef - CE63A3C1BD760C1054AB8E93 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 3C257E80CD014DB8EA002BEF - - fileRef - 1A15CF1C6E7E99C9CABBB6DD - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 3C7E40091008170AB3C40C03 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - SimpleHTMLEncoder.h - sourceTree - <group> - - 3CDEFCF108F17891EDEA6733 - - includeInIndex - 1 - isa - PBXFileReference - path - TokenGroup.cpp - sourceTree - <group> - - 3CEEDC486D465ED2F15CD27B - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - CLuceneIndexUpdateContext.h - sourceTree - <group> - - 3DC1464C13A19F4B2B904B05 - - fileRef - 596AF49A3DE7E4AC8344BF43 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 3DC8B7EDD42D143395040CE6 - - fileRef - DCA68B0D72443D070132338F - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 3E20E7DDBEB9F28FC62EF928 - - fileRef - F1B59457ADDA0A973E53F0D7 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 3E3B570A46A6E6DEB98BA10A - - fileRef - C32155AB6FC07A0FCDB3778F - isa - PBXBuildFile - - 3E5D3E27F1FC4F85CEE7E1CA - - fileRef - 5B158D0C0D3B168D2C82C4DA - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 3E95C3748BBAEC50D8996327 - - includeInIndex - 1 - isa - PBXFileReference - path - Directory.cpp - sourceTree - <group> - - 3EBD7E39D12338BA78012245 - - children - - 449E51D7416613747AF513FD - 2CB9B0BF446D4AC2D3C79603 - 0978E989EE49E8F6702E07CB - 8C0AB3759666A05898221224 - C220EC33CA7950F19251A110 - 26DFF84EC7ADEA5A6DBBCA92 - 26F639F07D907A6E49C2078C - - isa - PBXGroup - name - CLucene - path - CLucene - sourceTree - <group> - - 3EF825204F143E6D58B0CBBB - - includeInIndex - 1 - isa - PBXFileReference - path - QueryFilter.cpp - sourceTree - <group> - - 3F14E44FAADC3F7B6B6B434F - - fileRef - 589320E13F9BD41380ECA488 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 4002F6028C601969B9F1BF03 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - NSString+MagicalDataImport.m - path - MagicalRecord/Categories/DataImport/NSString+MagicalDataImport.m - sourceTree - <group> - - 40490A8150A91C76A5743C0C - - includeInIndex - 1 - isa - PBXFileReference - path - SegmentInfos.cpp - sourceTree - <group> - - 4055384857E0805320901379 - - fileRef - 666EEB6F9D57EE4FC1CF297E - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 405F695BD6DAD6A34D58CD1F - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - stem_UTF_8_swedish.h - sourceTree - <group> - - 406A8E494A75C3B9F996706A - - fileRef - B0BF5CEF9F8DDBF215F6FA6D - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 409759A8EE20EEF807C16A00 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - NSPersistentStoreCoordinator+MagicalRecord.h - path - MagicalRecord/Categories/NSPersistentStoreCoordinator+MagicalRecord.h - sourceTree - <group> - - 40BF9834C30F798B31F730BE - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - ConstantScoreQuery.h - sourceTree - <group> - - 40DC189BFC7CE6FF83BE6C1E - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - CachingWrapperFilter.h - sourceTree - <group> - - 41978CEF7590A1AD32C02621 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - RAMDirectory.h - sourceTree - <group> - - 4208DA7F7EE1D2461B44D7B2 - - buildConfigurationList - 52863915E84FA3AD664D131F - buildPhases - - 7C77C47E91B2B352BF78724B - CAB7E718170EC7A6AE23FFB9 - 8C52691CE713CF06DCD5DA24 - - buildRules - - dependencies - - isa - PBXNativeTarget - name - MagicalRecord - productName - MagicalRecord - productReference - A575CAB8625D5EB63F4D990F - productType - com.apple.product-type.library.static - - 4215EE6292D23A3EA8DC0A7F - - fileRef - F0D45B6DE0914737E3BA42AE - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 422BA015B5B88337570C9528 - - children - - BD336D0DA50FEAD102357114 - - isa - PBXGroup - name - clucene - path - clucene - sourceTree - <group> - - 4248F0F424A12A978018EA55 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - Fragmenter.h - sourceTree - <group> - - 427F752330DA28AFAE2E9E66 - - fileRef - 6E97EEF5F7867E2493B8B61A - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 4282BC23610571A87E103E0B - - includeInIndex - 1 - isa - PBXFileReference - path - dirent.cpp - sourceTree - <group> - - 4296464FD4C5407221B474F9 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - NSManagedObjectContext+MagicalThreading.h - path - MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalThreading.h - sourceTree - <group> - - 429F01F70DE12B22E53337E0 - - fileRef - FD7A0B67128711FD5BEF2870 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks - - - 42B2CA150BAFC2542D64B273 - - fileRef - 22A03773D4C66FB662986272 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 42C427AF8221CF9B83B705DC - - includeInIndex - 1 - isa - PBXFileReference - path - QueryParserTokenManager.cpp - sourceTree - <group> - - 4360224911545B213C8C4501 - - includeInIndex - 1 - isa - PBXFileReference - path - gzipinputstream.cpp - sourceTree - <group> - - 43985071AAAE3EBDF727CBBB - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - IndexWriter.h - sourceTree - <group> - - 43A80D08DDA1DD76058D5978 - - includeInIndex - 1 - isa - PBXFileReference - path - Formatter.cpp - sourceTree - <group> - - 43D14DF650BB349A390A09C9 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - BRSortDescriptor.h - sourceTree - <group> - - 440D2FEF648D6A5A1F5DC328 - - fileRef - DFE22055C25A528C0FFB5E5C - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 442086ACCE4B2B830D4A5EE1 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - NSManagedObject+MagicalRecord.h - path - MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalRecord.h - sourceTree - <group> - - 4462F8C6D72CDABA27E1917A - - fileRef - 23F220D9293DC81B7F1DC1FD - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks - - - 4466C8453BCF3B60B96A3C42 - - includeInIndex - 1 - isa - PBXFileReference - path - CLuceneSearchService.mm - sourceTree - <group> - - 448CB46FB54C5B2F78D51246 - - includeInIndex - 1 - isa - PBXFileReference - path - stem_ISO_8859_1_spanish.c - sourceTree - <group> - - 449093C8CF68608048BDE550 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - NSData+CLuceneAdditions.h - sourceTree - <group> - - 44950AEE6CBC62EBBB1AE8F5 - - fileRef - 387237E8F6AC2B80AFFE797A - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 449A559F1E10CCF219DBA69A - - fileRef - 8B8FD962EB452C3B1DF183F9 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 449E51D7416613747AF513FD - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - _SharedHeader.h - sourceTree - <group> - - 44A019EC172D47E3DD319221 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - SpanTermQuery.h - sourceTree - <group> - - 44A05BA5CCBA6202331377C1 - - fileRef - 8CA6D49A7E56963AE5AB5F72 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks - - - 44A091D3E4F728D77ECE6C6F - - fileRef - FF4F4BD186D05C2B9DAFD751 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 44A70064FDE1F2C0C30C9403 - - fileRef - 1D04699C8AA689C238590226 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 44F42243D7D11BC758312094 - - fileRef - 03443F5C8542A0223CA7B57C - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 453F323C879AC39578965812 - - fileRef - FD0B06D88A24C6FF3674E75B - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 45495922837A15D8CA9BAF76 - - fileRef - 8E7B5611206F1E338857A2F2 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 45CEB58855A0D700BEB29995 - - includeInIndex - 1 - isa - PBXFileReference - path - PhrasePositions.cpp - sourceTree - <group> - - 45D24EA8CBA88A489BF4116A - - fileRef - 3CEEDC486D465ED2F15CD27B - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 45ED033A488DE9CD28738E4F - - fileRef - 7E7EC75B803A53AC6FDB0DFB - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 4608B8A530C34BD269470979 - - includeInIndex - 1 - isa - PBXFileReference - path - SloppyPhraseScorer.cpp - sourceTree - <group> - - 46146F16F9927BF080002586 - - includeInIndex - 1 - isa - PBXFileReference - path - DirectoryIndexReader.cpp - sourceTree - <group> - - 47122D3D50E97C0CD527303D - - fileRef - 04631C8E4C4095E0A10B7A1A - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 47386A560834D676739B900B - - fileRef - C21C5DFFA208C0CE56DCAE02 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 47A64746E8A4AB0079EBCC9A - - includeInIndex - 1 - isa - PBXFileReference - path - StringIntern.cpp - sourceTree - <group> - - 47BACAA9594FEC7A93229AF8 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - _ThreadLocal.h - sourceTree - <group> - - 47D7C1D2936FAE9952F8D28F - - includeInIndex - 1 - isa - PBXFileReference - path - SpanQueryFilter.cpp - sourceTree - <group> - - 482F513E046FE126EE579C53 - - fileRef - EA5AE29DCF9538980779C10D - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 4860EBF787BA38B5DED961C1 - - includeInIndex - 1 - isa - PBXFileReference - path - Field.cpp - sourceTree - <group> - - 48A0664593C1D51A2DFC158B - - includeInIndex - 1 - isa - PBXFileReference - path - Similarity.cpp - sourceTree - <group> - - 48D2DB4D8E75BB6FA2321DF0 - - children - - F806ABD958C934169EB42392 - 1689B1AF593D35111D1C838C - 100B453F7E27FF97B71ACDCE - CE27B167B62B0EFC1CA8E72A - - isa - PBXGroup - name - runtime - path - runtime - sourceTree - <group> - - 4919E166B2A71DCFC074BC06 - - fileRef - 713403B89DDA149D85BC6B11 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks - - - 4933E9385EAF2207D7B3FAC3 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - NSString+MagicalDataImport.h - path - MagicalRecord/Categories/DataImport/NSString+MagicalDataImport.h - sourceTree - <group> - - 49CF50AE21C1B3B6B7816778 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - _MMapIndexInput.h - sourceTree - <group> - - 49E0974D58D80C8C9427704D - - fileRef - E6620955B176223D69B75D52 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 49F84351E1E38068CC0D71DD - - fileRef - 1BE77EFD772F5003B75059B4 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 4A6AFCABC00B39654D872CC6 - - includeInIndex - 1 - isa - PBXFileReference - path - DateTools.cpp - sourceTree - <group> - - 4A8182DAD922EEA758912911 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - NSObject+MagicalDataImport.h - path - MagicalRecord/Categories/DataImport/NSObject+MagicalDataImport.h - sourceTree - <group> - - 4AE355C23976B8E2E3E82BB8 - - fileRef - 562AA4BBB97F9770F02ACDFE - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 4AF00884476431C49B4B8480 - - fileRef - 85A5F6C1D836636FA1276898 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 4B0CA36BAEE1A26D923E859F - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - IndexInput.h - sourceTree - <group> - - 4B1604C8A677819D0C71F0E2 - - fileRef - 4933E9385EAF2207D7B3FAC3 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 4B46FC05045432A81110996C - - fileRef - 83A8C7154E3A69BA03D8DF1B - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 4B5C54C71518B47B276AE9D3 - - fileRef - A8291DDB57675042EBF9B15F - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks - - - 4B64B9BCC8F4FB7E424F8782 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - MagicalRecord+ErrorHandling.m - path - MagicalRecord/Core/MagicalRecord+ErrorHandling.m - sourceTree - <group> - - 4B78ED942EF7C87E0FAD21D3 - - fileRef - 572692E5EFD0F83227FEABF6 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 4B90B4BC85F70222B88F0386 - - children - - E48AAFF138B2453FE8F53DD4 - 1668D5B8241008DF4DBF6D37 - 59540AEDACA2BB302D2707DC - 80AAF75C63B69928D2E9E516 - - isa - PBXGroup - name - CLucene - path - CLucene - sourceTree - <group> - - 4B95006EFEC94C8431EC73C4 - - includeInIndex - 1 - isa - PBXFileReference - path - Document.cpp - sourceTree - <group> - - 4BF674E723AAD984B3129163 - - children - - F6B189572F952C37116D5075 - 1E87F259B8C10F203FEEE986 - 28EFD9703AD9A028BF702D92 - B2D6DA1FB407EBEF0E25D519 - 1CD442F55AD2DF0FCB82C0FA - 3A83D9FB4F1A8ADE8F88351D - 82A5B5412D552346DEDD1835 - 26236D064906E634BF29CD7C - 4B64B9BCC8F4FB7E424F8782 - 64CAA194FC7C81037B765184 - 8113B777BD538ED3DC30A6D6 - 6BBE2A772F3A3BCDD05E10D2 - A8291DDB57675042EBF9B15F - A0FB8B42C0775159EB622495 - 18BA412EE13898290E2030AC - 817248EB210C02220C215B94 - F22A61C2882E6FE4947DDE6E - E688BD58B65753889BC05F87 - 3BE63C2DF40A011B27B692CF - 8A81212484B9C85CC9030BF1 - 948089ED32D0068AE6869FB5 - 63875F8E8E0F028C3B33A769 - 2C6469A9018ADF3D38A4FC94 - 5EF89509D64622959A7F3F02 - 2F76E4B268890E23B5FDACB6 - EC295BC4F71D120F12A0B700 - 591838887565181E39AC2A8D - E57E81ACE68C8FA04825AD86 - 442086ACCE4B2B830D4A5EE1 - 95560B5AE136BA253101DAEA - FA39AE906049AC2B497ACA70 - 8C7DFA6F35716FE75A12241B - FF4F4BD186D05C2B9DAFD751 - E192D9501555CA6399805DF2 - F2D87756AF5F2980FCEE5B2A - 61931BAB75A5942277B431EA - 643D5C1DD1D5AD8C8C09BC0C - E9589FA346C37BC268E98BCD - 4296464FD4C5407221B474F9 - 4F8FFE5342236666BD806E96 - EDEF9364CAF46C0AC695591C - 51898E80E36EB4E1E67EEC6E - F6C54E5B2EF9746565CFCFC9 - C36572C22F0810966A3FBEC8 - 4A8182DAD922EEA758912911 - 2D245B06193320549C8D98A9 - 02C4B20B1966BB1DF5CC144A - 9407FE63087C726F5A3210FE - 409759A8EE20EEF807C16A00 - A589356F6372788BA495C0E2 - 3A3665A91AA93CA0A27C8F94 - 8B8DEBB9B8A8ADF3AF92A3A8 - 4933E9385EAF2207D7B3FAC3 - 4002F6028C601969B9F1BF03 - - isa - PBXGroup - name - Core - sourceTree - <group> - - 4C19C31B371CDE374C4D9C10 - - fileRef - E24A26179CC2DD0FDE821589 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 4C87D35676FA20FB8EE9ED98 - - fileRef - 7AC6BAEC3618E3AFD2AEA3D8 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 4CA768EEB4819A39380AE8B1 - - fileRef - F75C19F95A53C80A965F9695 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 4CDCF401756DEDE24C3F44CD - - children - - 86612E1F96BAA3D2CBEB9B82 - EC95A0D94E525F0FF443976A - 7EB35E00A4EF61BD73DC0724 - 932E6275CB6DE374B5AED1A6 - A0C70C25E6EA38F2E1C30F6E - A9F2A9DF77DE363B59D5A3D2 - 21ECD99136275A75BB0610A8 - 47BACAA9594FEC7A93229AF8 - 06C9586359A5DC76C4863402 - D671E804F1835ED7AB67C31F - A15ED1F615FE495CD5BC49C8 - EAAD71F5DD9ABC8C059CCC1A - D7FA7F432C39C397D10CA59F - 70D62A6FCCD8009631F4C6B8 - EA5AE29DCF9538980779C10D - 399E43EEAE745EACC4904145 - 9901CBC9770CCD5FA8C06D7B - 1A148058E849A7075272D6C7 - - isa - PBXGroup - name - util - path - util - sourceTree - <group> - - 4CE27FBED8F49185B8B3395A - - fileRef - 0A25FA34BD0F2CDADB748261 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 4D1B57694F499630EF7CF055 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - FSDirectory.h - sourceTree - <group> - - 4D55BD9697E6BCADB3282B21 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - SpanNotQuery.h - sourceTree - <group> - - 4D57D8087F2E20C675E3707B - - fileRef - 11999A5119188A3766763BF2 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks - - - 4E1CA108776EA4E8215CCA90 - - fileRef - 6755C0484441D785BF2B4A3E - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 4E2EC0515E0CED675CB70EBD - - fileRef - 1A148058E849A7075272D6C7 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 4EA3FA914DF5F8B574DB5549 - - fileRef - 65BBC78C11C62E1C9DAE8B64 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 4EBACEF1E20D38E906B05690 - - fileRef - 362F1C53F906F8AC32F2540D - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 4EF57E7BD14F1D66A324CE75 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - SpanFilter.h - sourceTree - <group> - - 4EFFC4FE0761DFE9AE12EEC4 - - children - - F48BE159E95731CF33E83EE9 - 948C2CA0439320D5CEDAEFA0 - 1BEF1849A672A7D738A36389 - 253EA75BE3BAA26B03F775D2 - 577368B16D78693053596A6D - 1523814AA309EF5B4D26DA73 - - isa - PBXGroup - name - document - path - document - sourceTree - <group> - - 4F09EEBFC4AE8FA8BF148D45 - - includeInIndex - 1 - isa - PBXFileReference - path - SearchHeader.cpp - sourceTree - <group> - - 4F152B0FF946935A202B1B8F - - includeInIndex - 1 - isa - PBXFileReference - path - SpanNotQuery.cpp - sourceTree - <group> - - 4F85C06336F90DAB0A712F41 - - fileRef - 26236D064906E634BF29CD7C - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 4F8FFE5342236666BD806E96 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - NSManagedObjectContext+MagicalThreading.m - path - MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalThreading.m - sourceTree - <group> - - 4F97E21F12525B64F103F246 - - fileRef - 766AC7A8E36065B8E449648A - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 4F9A83F749F24E78ED83CF1F - - fileRef - 40490A8150A91C76A5743C0C - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 4FC7B2DFA6F66B8DBA7AEC77 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - path - MagicalRecord-dummy.m - sourceTree - <group> - - 501D0883F2A4F56BE0756325 - - includeInIndex - 1 - isa - PBXFileReference - path - Fragmenter.cpp - sourceTree - <group> - - 5054A838AB86B7ECE9A62B91 - - fileRef - 650644ACA3131BC42FEDA5C1 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 50C128F283F13120444CC6E4 - - fileRef - DC25F85BFB1EC5CCA4C96E56 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks - - - 5177E7ED2B669CEA891B7AE7 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - _Term.h - sourceTree - <group> - - 51898E80E36EB4E1E67EEC6E - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - NSManagedObjectModel+MagicalRecord.m - path - MagicalRecord/Categories/NSManagedObjectModel+MagicalRecord.m - sourceTree - <group> - - 51EA40A7522B5BFFC4D7B91A - - fileRef - 0978E989EE49E8F6702E07CB - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 51F95572A135E3913051A587 - - fileRef - 43A80D08DDA1DD76058D5978 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 51FBB7A162A434CA2D5AB0CB - - fileRef - BE6808BFA9DFE1A2547D6FA6 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 52153A8DF28C8AC4CC156C31 - - attributes - - LastSwiftUpdateCheck - 0700 - LastUpgradeCheck - 0700 - - buildConfigurationList - 71C3754D0D175B585F165FD0 - compatibilityVersion - Xcode 3.2 - developmentRegion - English - hasScannedForEncodings - 0 - isa - PBXProject - knownRegions - - en - - mainGroup - A168F1EC2A8A878B5D1FF9EB - productRefGroup - 6D64E817B37643B8EA045FEB - projectDirPath - - projectReferences - - projectRoot - - targets - - DC02470A3644F4C2181CEAC1 - 4208DA7F7EE1D2461B44D7B2 - 6023C41288F3D6533ED24161 - - - 527571EFBF036EDD1A20FFC0 - - fileRef - 3AAE3216C4D1F3EC112E7907 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 52863915E84FA3AD664D131F - - buildConfigurations - - 24BB795C9DD244DFC55D3338 - 0886F358751F7A3BC8CE16F8 - - defaultConfigurationIsVisible - 0 - defaultConfigurationName - Release - isa - XCConfigurationList - - 52AFC005ECEEB85B802EB6A7 - - includeInIndex - 1 - isa - PBXFileReference - path - FieldInfos.cpp - sourceTree - <group> - - 53279FCDC4377852FFB015E0 - - fileRef - EB5D30DC10B34B0CD7D4AA0B - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 5338BB33E6AC1153BA2F494C - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - MultiTermQuery.h - sourceTree - <group> - - 535F155D51FE18E4A9433AF4 - - includeInIndex - 1 - isa - PBXFileReference - path - TermInfo.cpp - sourceTree - <group> - - 53FFCDFDA054A7492FAA75D2 - - fileRef - 1BF19E2826BB1A19FE45B22C - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 54857E8CC442C778CC079F55 - - includeInIndex - 1 - isa - PBXFileReference - path - ThreadLocal.cpp - sourceTree - <group> - - 548CECEEF5A1FC039D45E31C - - children - - 312B6732CF362A5063C355C6 - - isa - PBXGroup - name - include - path - include - sourceTree - <group> - - 54B041AF8CC33575A3CB3A14 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - NSTimeZone+BRFullTextSearchAdditions.h - sourceTree - <group> - - 54C8D4EB4D1F506A5459D293 - - fileRef - DA68322F59E7E529DB16D228 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 556674C3F503ACB0F365C486 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - Misc.h - sourceTree - <group> - - 55A4EB265DEA007DE02327BB - - includeInIndex - 1 - isa - PBXFileReference - path - stem_ISO_8859_1_swedish.c - sourceTree - <group> - - 561553EF1B4345415D272E48 - - fileRef - 2959B2E5ED5EEF982A65AF65 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 562AA4BBB97F9770F02ACDFE - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - repl_wchar.h - sourceTree - <group> - - 56AC9D33808FEB6D81144E21 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - MergeScheduler.h - sourceTree - <group> - - 5723E9CE326B60A672230A20 - - children - - EF11B826F7E757C8B8CCE70E - 254036D6B36CDE2A6D4F9817 - 0D94F14B9977AE6A2FFE6629 - 2959B2E5ED5EEF982A65AF65 - CB64360BA725551FF3FA25E7 - 0F41B7C2E4732F2DD461804E - C3F404DE2DDABAC54DD84859 - BCF6C62BFFC7A9BC06B4A6BD - D4CE204C3D7DE467FABF48FE - 83627788A4FE6814D4E84532 - 6A8C0D5C68827C7AD6E5E666 - 36B678E77A0F7B6CA64CA9C3 - BF99AFAC81F89594080A9FF5 - 6D69503423B54D7A492FCF1C - A0A0CA6F6D96BAF0E406850D - 9DAFA085FD22442295679B28 - 1BF19E2826BB1A19FE45B22C - 2011A9C8BA79169AB60E68E8 - 8908BB95745D9E53B306308A - 8138D42BFE19C72ED512257A - 448CB46FB54C5B2F78D51246 - FD0B06D88A24C6FF3674E75B - 55A4EB265DEA007DE02327BB - F1B59457ADDA0A973E53F0D7 - 6D4FD36C83EBD74C46DDEB1D - 7E7EC75B803A53AC6FDB0DFB - E9CE7457AD9E75FAC9836EB8 - B2500BEA802349F98F35609B - 222E76D2922FC6012577A65D - CF62722E51E340032926877A - 71701A4EC12BB8914E02B8F1 - C535DAD8BE9908E18C56BD71 - 0FEB9D018AD5B030E2CAD87F - 34286DEE91533CA4536D89AD - 70C0AD0014451BD7E01B8E02 - D917D861D2705399CA798E2D - A7683D7979A1A0F42DBBC564 - AE52D01879C079717190EBA0 - 77283DB81F9A959F7D266917 - E6620955B176223D69B75D52 - 598AAC5C79270D9AB98FC5A7 - 1A15CF1C6E7E99C9CABBB6DD - C542580D94206570FA3A404C - F1B1717012450477A27C6268 - 70241592686B0B6C70D4548E - 89C32EA372300AD4E5FB1BBA - DC4DE131509C84869B471740 - 0A25FA34BD0F2CDADB748261 - A8C17885D411AF328A653803 - 8B5C22D189D688117E0C56DC - 89013FDE84B2C11185CB6D9B - 405F695BD6DAD6A34D58CD1F - - isa - PBXGroup - name - src_c - path - src_c - sourceTree - <group> - - 572574B8A64BA55DAD0C5DC3 - - children - - 7E59130FC6CDE43416B6A265 - 5EDD939E988ED25D21C72A13 - 596AF49A3DE7E4AC8344BF43 - 63C55C6F5086D1A04D07B920 - - isa - PBXGroup - name - standard - path - standard - sourceTree - <group> - - 572692E5EFD0F83227FEABF6 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - CLuceneSearchService+Subclassing.h - sourceTree - <group> - - 5751C53969476442315C03BD - - children - - 3EBD7E39D12338BA78012245 - - isa - PBXGroup - name - shared - path - shared - sourceTree - <group> - - 577368B16D78693053596A6D - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - FieldSelector.h - sourceTree - <group> - - 57842675DDC380C3E5E867E2 - - fileRef - 68779072DD5102546AB77744 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 57B5B8AEA2FF629E242E085A - - fileRef - 6E7EF8420E3818467A540754 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 57BE15AB2525E43BA16248CB - - fileRef - F22A61C2882E6FE4947DDE6E - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks - - - 57F7D82E7886BA3A7425E8B9 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - GermanStemFilter.h - sourceTree - <group> - - 5887E461F14031911F8E3B6C - - fileRef - 0F41B7C2E4732F2DD461804E - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 589320E13F9BD41380ECA488 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - FilteredTermEnum.h - sourceTree - <group> - - 58A3C5F72F8EC097FD4EBA01 - - fileRef - 4002F6028C601969B9F1BF03 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks - - - 58BF4432670687C84F68D421 - - fileRef - 16BF906B6D21239D5A3B3AC7 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 59091771D56586B49874ADAF - - fileRef - 90F972D8199BF281ACA72FEC - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 590C34AC821D4F0DF15A21D7 - - fileRef - 274E26BA456B1C78578E2D51 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks - - - 591838887565181E39AC2A8D - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - NSManagedObject+MagicalFinders.h - path - MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalFinders.h - sourceTree - <group> - - 5950E165CDB720F3B1010EA5 - - children - - 02F50EAB86CAE1ED535971B6 - FB98EA8D7B51E456CABC6A92 - E5F8A5E1CAF5E830270632A0 - 83A8C7154E3A69BA03D8DF1B - E29D30D90FC11C94346B7872 - 9FE75A5F4E1A617EE5BAD03D - D5FBFA64843318233672A876 - 755885785D26F26E11F398D8 - 05A9687D9114AEE92DBDF2CC - 04631C8E4C4095E0A10B7A1A - 37F1A52B9740B1A9B57A5BBF - BA3FDE7A3BDE7E6D54F35FF8 - A0B8BA7ACE9AF34281DDBBBA - 10AD472927D4BA9CE6358045 - 00E65E2497B24D8557D75F05 - CF45B905FBFF4BD88AC307B0 - 1F715F51A4C239626B7FDFF7 - 0D4944EB321C9A0D1F03586D - 5177E7ED2B669CEA891B7AE7 - 284728CC12981881D81FCBC4 - 3AAE3216C4D1F3EC112E7907 - AB0C95FCCF16C431FD63AEF0 - B9805AA190C8FB1E34C5C83C - 5E7868C23F5B9E27390C1BB1 - 5B0315834AEF7AC11D021DA8 - 22A03773D4C66FB662986272 - 7B795848D1FD5EAC6051F130 - 43985071AAAE3EBDF727CBBB - F71136BF46193C135922865C - 56AC9D33808FEB6D81144E21 - B23D07DC1DE49788867B65C2 - D21321FC49273301F47DC33A - 04E036E8B4BB77EF754024DF - 7ED607C47CC5DF2FBF42D6CA - 95DB5C33FA997A9E8DE854F8 - 1B556A09CDA57E9E32EE52B9 - - isa - PBXGroup - name - index - path - index - sourceTree - <group> - - 59540AEDACA2BB302D2707DC - - children - - DA0F2E6D0938AAE0D7BB4B53 - 158B2008564F2B7840E4A602 - 07562E0C6DC11FCB8E75CF7D - EEC396E3E6DE17540B6CBC85 - 548CECEEF5A1FC039D45E31C - E828D2189386C14427BDDE41 - 48D2DB4D8E75BB6FA2321DF0 - 5723E9CE326B60A672230A20 - - isa - PBXGroup - name - snowball - path - snowball - sourceTree - <group> - - 596AF49A3DE7E4AC8344BF43 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - StandardTokenizer.h - sourceTree - <group> - - 598AAC5C79270D9AB98FC5A7 - - includeInIndex - 1 - isa - PBXFileReference - path - stem_UTF_8_norwegian.c - sourceTree - <group> - - 59D8D8FAD0EA6EC927CC47F9 - - buildActionMask - 2147483647 - files - - 3E3B570A46A6E6DEB98BA10A - - isa - PBXFrameworksBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - 59FCE0E4E968801C7EC1226F - - fileRef - 677687262098D9A2294D3F3D - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 5A03445FD577C53B7E7AEA2B - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - BRFullTextSearch.h - sourceTree - <group> - - 5A1A22FA6EFC4F86423DB424 - - fileRef - D9F5490951A1FEB8FAD0D0FD - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 5A57EC956746513334C23A36 - - fileRef - 8C0AB3759666A05898221224 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 5A6D7D17260B36E539076C91 - - fileRef - 663CE19CE0EC955A9058EE75 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 5AECF3498D6CA8FE630BC06C - - fileRef - C784A26DC3D42B8A6DDCE84B - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 5AF284DAAFFC323FE4040604 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - LockFactory.h - sourceTree - <group> - - 5B0315834AEF7AC11D021DA8 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - IndexDeletionPolicy.h - sourceTree - <group> - - 5B158D0C0D3B168D2C82C4DA - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - _PhraseScorer.h - sourceTree - <group> - - 5BDF23CD932B94FFE2D88C1F - - fileRef - 0B0F7314D9F542D994633EF9 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 5C8CBD4735E97BACCBBBAD38 - - fileRef - D7FA7F432C39C397D10CA59F - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 5DA97E8AD2E29FE664BC3EE2 - - fileRef - 22FC8026129E74064F7410BE - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 5DBC0D04748802198AE75A1C - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - path - Pods-dummy.m - sourceTree - <group> - - 5DEC4330F7B20A0AA5E11C5C - - fileRef - 4B0CA36BAEE1A26D923E859F - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 5DF950A3F006782F674F8AD6 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - WildcardTermEnum.h - sourceTree - <group> - - 5E283A8FE3A27C2D03DE82AB - - fileRef - 78127D4B127C3E70138A36D0 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 5E3F9E98FB11716B40F38401 - - fileRef - 386AB1CB697BC5266C6813DC - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 5E7868C23F5B9E27390C1BB1 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - DirectoryIndexReader.h - sourceTree - <group> - - 5EAC13CBF67285DEAE3884FB - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - lucenebase.h - sourceTree - <group> - - 5ECCF01F281A2C81FF0B1D7D - - children - - 927D1DAC9CB3AAFEEC6EB7F8 - 7E00FB65257DB6039A762E17 - EB6B8AD9F7E026FC24FF6E71 - C784A26DC3D42B8A6DDCE84B - 3CEEDC486D465ED2F15CD27B - 2B6FE47F2213589ED0A24A1B - C980C3B30E2E00F6F279FEFB - 23F220D9293DC81B7F1DC1FD - 10DEC03CFB12D2AB87B2C35E - B759262BB13FE1BC91332376 - B823E795CC4D3B4FDE1B58EF - 4466C8453BCF3B60B96A3C42 - 572692E5EFD0F83227FEABF6 - 449093C8CF68608048BDE550 - DC25F85BFB1EC5CCA4C96E56 - 78EEA28B6DE82F57A4E04B0B - 8CA6D49A7E56963AE5AB5F72 - 956EE7E22759B7FD185A83A2 - B22CBD2777AC007FD405B4B5 - CB79D0DC0044534AB0F505B1 - 387237E8F6AC2B80AFFE797A - - isa - PBXGroup - name - BRFullTextSearch - path - BRFullTextSearch - sourceTree - <group> - - 5EDD939E988ED25D21C72A13 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - StandardFilter.h - sourceTree - <group> - - 5EF89509D64622959A7F3F02 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - NSManagedObject+MagicalAggregation.m - path - MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalAggregation.m - sourceTree - <group> - - 5F1463E516ADAD532AD8E378 - - fileRef - 4FC7B2DFA6F66B8DBA7AEC77 - isa - PBXBuildFile - - 5FD0C2F6E5F8441E5E8DEA7A - - fileRef - EF11B826F7E757C8B8CCE70E - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 6023C41288F3D6533ED24161 - - buildConfigurationList - 1FD874E64B287E120FEF2D41 - buildPhases - - 824FED8B5F8032950496C92A - 59D8D8FAD0EA6EC927CC47F9 - - buildRules - - dependencies - - 30B946B8D656F0BB45CAB938 - 05D04C9B5ACF844A15F35FB6 - - isa - PBXNativeTarget - name - Pods - productName - Pods - productReference - 28A2D75AB03D5150E6FB0872 - productType - com.apple.product-type.library.static - - 609B4FF3FA05835CEC3E05CB - - includeInIndex - 1 - isa - PBXFileReference - path - Reader.cpp - sourceTree - <group> - - 60A63C4E75AE49A544911FFB - - fileRef - EEC396E3E6DE17540B6CBC85 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 61097B8C0ED2112DD81EA9C1 - - fileRef - 100B453F7E27FF97B71ACDCE - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 61931BAB75A5942277B431EA - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - NSManagedObjectContext+MagicalRecord.m - path - MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalRecord.m - sourceTree - <group> - - 61AC916A487A8E6BB2914B95 - - includeInIndex - 1 - isa - PBXFileReference - path - IndexSearcher.cpp - sourceTree - <group> - - 61C5AAD405353B39369BC7C7 - - fileRef - 448CB46FB54C5B2F78D51246 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 61D2CDE162161543D5949DD3 - - fileRef - 1DCEFAF4279F77380C6213AB - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 627A7C2A96EBC6A7685A93DA - - fileRef - 8B5C22D189D688117E0C56DC - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 62D354DD1967B587331FD426 - - fileRef - CDECFA15A8310A4AF8891134 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 6329512A024A5DF62EFA3009 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - HighlightScorer.h - sourceTree - <group> - - 63875F8E8E0F028C3B33A769 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - NSEntityDescription+MagicalDataImport.m - path - MagicalRecord/Categories/DataImport/NSEntityDescription+MagicalDataImport.m - sourceTree - <group> - - 63C55C6F5086D1A04D07B920 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - StandardTokenizerConstants.h - sourceTree - <group> - - 63F7F2FC27A2E8DC23D16A62 - - includeInIndex - 1 - isa - PBXFileReference - path - threads.cpp - sourceTree - <group> - - 6426870F4047F37FEA6220D7 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - _HitQueue.h - sourceTree - <group> - - 643D5C1DD1D5AD8C8C09BC0C - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - NSManagedObjectContext+MagicalSaves.h - path - MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalSaves.h - sourceTree - <group> - - 644AB08B6ADC592CF9C0C800 - - fileRef - 8A81212484B9C85CC9030BF1 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks - - - 645D5A116604A038D8B77398 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - QueryParser.h - sourceTree - <group> - - 64CAA194FC7C81037B765184 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - MagicalRecord+iCloud.h - path - MagicalRecord/Core/MagicalRecord+iCloud.h - sourceTree - <group> - - 64D51C7A1C7FA097D0085A46 - - fileRef - 8D94591FF0962AE00A816F64 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 650644ACA3131BC42FEDA5C1 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - BRIndexable.h - sourceTree - <group> - - 6593A64EBDA22285E850FF12 - - fileRef - 3EF825204F143E6D58B0CBBB - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 65BBC78C11C62E1C9DAE8B64 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - _PhraseQueue.h - sourceTree - <group> - - 660B70095000DFBFA6F81ED1 - - fileRef - 7088EC9D9384E17E850A8A25 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 6623B92F94601207C7749CE1 - - fileRef - 1C748C368580AE3D88CCC39D - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 662B5D081B824BF00C9ABFE9 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - CachingSpanFilter.h - sourceTree - <group> - - 663CE19CE0EC955A9058EE75 - - includeInIndex - 1 - isa - PBXFileReference - path - SpanFirstQuery.cpp - sourceTree - <group> - - 666EEB6F9D57EE4FC1CF297E - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - TokenGroup.h - sourceTree - <group> - - 6708A56F41F258541DC117E4 - - fileRef - 1BD1335873746DAD7B83A6D6 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 6755C0484441D785BF2B4A3E - - includeInIndex - 1 - isa - PBXFileReference - path - Encoder.cpp - sourceTree - <group> - - 677687262098D9A2294D3F3D - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - gzipcompressstream.h - sourceTree - <group> - - 683DBB193C0CD14D204AFDC9 - - fileRef - DD072B075A6CC6CC6E4DCD97 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 6845FB93DCC34AF70030E554 - - fileRef - 786A14394C5785E12BDF1604 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 686F25EC3B071972479AB68D - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - _TermSpans.h - sourceTree - <group> - - 68779072DD5102546AB77744 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - Similarity.h - sourceTree - <group> - - 68D037D4156639A484ADEAB9 - - fileRef - 4D1B57694F499630EF7CF055 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 69372940E94E75C00F57FF6A - - children - - DA6AA5C109D6D9DAFCE63C1D - - isa - PBXGroup - name - clucene - path - clucene - sourceTree - <group> - - 695E9064B29692F43AFE0AC4 - - fileRef - AE7C2BA4131B5FD02D673B5F - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 69E9A17A90EA3C050C972B7A - - fileRef - B4415BC5D22554D350FD4300 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 6A271E0093AB967E7DD00450 - - fileRef - E57E81ACE68C8FA04825AD86 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks - - - 6A2790B892592872A83555EC - - fileRef - 41978CEF7590A1AD32C02621 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 6A8C0D5C68827C7AD6E5E666 - - includeInIndex - 1 - isa - PBXFileReference - path - stem_ISO_8859_1_german.c - sourceTree - <group> - - 6AE5D89650C054C60EF26CE4 - - fileRef - 191A26430F4412BD48B1DFEE - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 6B09E6256A74C8A7383F7496 - - fileRef - 37F1A52B9740B1A9B57A5BBF - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 6B4D72DDEC4C50FE2F3F31A7 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - BRIndexUpdateContext.h - sourceTree - <group> - - 6B75BC237B59277C70595329 - - fileRef - 45CEB58855A0D700BEB29995 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 6BBE2A772F3A3BCDD05E10D2 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - MagicalRecord+Options.h - path - MagicalRecord/Core/MagicalRecord+Options.h - sourceTree - <group> - - 6BCC9549B7DB5E49A89C628A - - fileRef - 645D5A116604A038D8B77398 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 6BD73638A7E081238D84C31A - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - path - NSDate+BRFullTextSearchAdditions.m - sourceTree - <group> - - 6BDC240E47F9EC0E61ADA4AF - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - FieldDoc.h - sourceTree - <group> - - 6C0CAAE5AA136B0C6261DCC9 - - fileRef - 889236B430B66F0E3463707B - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 6C63428323092452621CFC87 - - includeInIndex - 1 - isa - PBXFileReference - path - SkipListReader.cpp - sourceTree - <group> - - 6C938DC820C7B61B4099E81E - - children - - 422BA015B5B88337570C9528 - - isa - PBXGroup - name - CLucene-Core-API - sourceTree - <group> - - 6C9E3C0967F6E7739F1C55B8 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - CLucene.h - sourceTree - <group> - - 6C9EF15D5BACEED7AF4CFFE9 - - fileRef - FE6450FA970056AF13422542 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 6CCB77DA87B998A8B61BC6DE - - fileRef - C32155AB6FC07A0FCDB3778F - isa - PBXBuildFile - - 6CDA3B5923F08A7F5FA29A0D - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text - path - Pods-acknowledgements.markdown - sourceTree - <group> - - 6CF053389187BF88593C75AB - - fileRef - 8908BB95745D9E53B306308A - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 6CF3DEEC517DCE926C5AA3F9 - - children - - 042D3C734BF1BDF226928573 - - isa - PBXGroup - name - CLucene-Config - sourceTree - <group> - - 6D01882D43755E6A27E06B48 - - fileRef - 63875F8E8E0F028C3B33A769 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks - - - 6D1EF0BCEF820F5EEF69AA12 - - fileRef - 00E65E2497B24D8557D75F05 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 6D4FD36C83EBD74C46DDEB1D - - includeInIndex - 1 - isa - PBXFileReference - path - stem_KOI8_R_russian.c - sourceTree - <group> - - 6D545641A71B41370BE2F59A - - fileRef - 02C4B20B1966BB1DF5CC144A - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 6D64E817B37643B8EA045FEB - - children - - 123CDC8591D7F01EE0A4C44A - A575CAB8625D5EB63F4D990F - 28A2D75AB03D5150E6FB0872 - - isa - PBXGroup - name - Products - sourceTree - <group> - - 6D69503423B54D7A492FCF1C - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - stem_ISO_8859_1_italian.h - sourceTree - <group> - - 6DDE7699E9004594909FBC16 - - includeInIndex - 1 - isa - PBXFileReference - path - FieldCacheImpl.cpp - sourceTree - <group> - - 6E2DD52F25C4E441561BE4DE - - includeInIndex - 1 - isa - PBXFileReference - path - TermInfosReader.cpp - sourceTree - <group> - - 6E581FC004BE987FA79A0E3A - - fileRef - 4EF57E7BD14F1D66A324CE75 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 6E7EF8420E3818467A540754 - - includeInIndex - 1 - isa - PBXFileReference - path - MultiReader.cpp - sourceTree - <group> - - 6E97EEF5F7867E2493B8B61A - - includeInIndex - 1 - isa - PBXFileReference - path - libstemmer.c - sourceTree - <group> - - 6EAF19B65A3E982CFA2C167E - - fileRef - 1F31AA26CBCF3F5F0D85B98F - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 6F17249E485658A3DF7EFAD1 - - includeInIndex - 1 - isa - PBXFileReference - path - CachingTokenFilter.cpp - sourceTree - <group> - - 6F4BE6A818110B9D4F7FC186 - - fileRef - A27826A65F41BD47F6CE9F11 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 6F67A84A200C4A3790AF6C1F - - fileRef - 8113B777BD538ED3DC30A6D6 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks - - - 6F778ECEE21E745C93092E73 - - fileRef - B759262BB13FE1BC91332376 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks - - - 6F8F79EC8B56F954D26A71A3 - - fileRef - 927D1DAC9CB3AAFEEC6EB7F8 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks - - - 70241592686B0B6C70D4548E - - includeInIndex - 1 - isa - PBXFileReference - path - stem_UTF_8_portuguese.c - sourceTree - <group> - - 7050C1CF512D7A8CE9467A4A - - includeInIndex - 1 - isa - PBXFileReference - path - DateFilter.cpp - sourceTree - <group> - - 7088EC9D9384E17E850A8A25 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - Spans.h - sourceTree - <group> - - 70995E25CA8390B92495FB72 - - includeInIndex - 1 - isa - PBXFileReference - path - MergeScheduler.cpp - sourceTree - <group> - - 70C0AD0014451BD7E01B8E02 - - includeInIndex - 1 - isa - PBXFileReference - path - stem_UTF_8_french.c - sourceTree - <group> - - 70D62A6FCCD8009631F4C6B8 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - Equators.h - sourceTree - <group> - - 70DDEBC633508131F640649C - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - PhraseQuery.h - sourceTree - <group> - - 70E697C6C955EC0249BF49CF - - fileRef - 1689B1AF593D35111D1C838C - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 710AA2A3AAB0D639AACF7559 - - children - - 7E7B8CE96CFE1B767C29E502 - 09A8E1D6DFF872A9468BED35 - - isa - PBXGroup - name - cjk - path - cjk - sourceTree - <group> - - 713403B89DDA149D85BC6B11 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - path - BRSimpleSortDescriptor.m - sourceTree - <group> - - 71701A4EC12BB8914E02B8F1 - - includeInIndex - 1 - isa - PBXFileReference - path - stem_UTF_8_english.c - sourceTree - <group> - - 718BA45D7D0FD507EACA9299 - - includeInIndex - 1 - isa - PBXFileReference - path - Equators.cpp - sourceTree - <group> - - 71C3754D0D175B585F165FD0 - - buildConfigurations - - 233D68A64C3305D098A6D308 - 03DC407482BDDFB6C7BD6A8B - - defaultConfigurationIsVisible - 0 - defaultConfigurationName - Release - isa - XCConfigurationList - - 7212B5DE5A7EDC23067F03F6 - - children - - 5A03445FD577C53B7E7AEA2B - 650644ACA3131BC42FEDA5C1 - 6B4D72DDEC4C50FE2F3F31A7 - 33B167CA5202F531E5E043EF - 369E8C97AE2FA6290BE626D1 - 8EFCB2F24CD2ADAE7767CA37 - 7AC6BAEC3618E3AFD2AEA3D8 - ACBCBE42AB38B85586D376D4 - 274E26BA456B1C78578E2D51 - BE6808BFA9DFE1A2547D6FA6 - FD7A0B67128711FD5BEF2870 - 744440FD403223694C01FC48 - 713403B89DDA149D85BC6B11 - 43D14DF650BB349A390A09C9 - F3CE13D2A1D6E011DFE0D522 - 6BD73638A7E081238D84C31A - 9CDBD8F97957308FD75BA919 - 8D982B4FAFDB6484F03C74E7 - 54B041AF8CC33575A3CB3A14 - 11999A5119188A3766763BF2 - - isa - PBXGroup - name - BRFullTextSearch - path - BRFullTextSearch - sourceTree - <group> - - 725F057D5E162172E9A11B43 - - fileRef - 1BEF1849A672A7D738A36389 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 7276D94B4EB4AEDD19FDBAA0 - - baseConfigurationReference - 31E610CCDCDC112AD2317FE1 - buildSettings - - ENABLE_STRICT_OBJC_MSGSEND - YES - EXECUTABLE_PREFIX - lib - GCC_PREFIX_HEADER - Target Support Files/BRFullTextSearch/BRFullTextSearch-prefix.pch - MACOSX_DEPLOYMENT_TARGET - 10.9 - MTL_ENABLE_DEBUG_INFO - YES - OTHER_LDFLAGS - - OTHER_LIBTOOLFLAGS - - PRIVATE_HEADERS_FOLDER_PATH - - PRODUCT_NAME - $(TARGET_NAME) - PUBLIC_HEADERS_FOLDER_PATH - - SDKROOT - macosx - - isa - XCBuildConfiguration - name - Debug - - 7371A1598E691AE93DFA11FE - - children - - 7BAD823E4480E2087517F2BB - - isa - PBXGroup - name - CLucene-Contribs-Lib - sourceTree - <group> - - 742CD5E2406AA373BD48C99B - - children - - A8CEE116B82F35158CBCCDC9 - A8AAC7635AE9DBE51E2776CE - B9102649C2D71678FBB99DF2 - E8140E441AC63660E6DE20A3 - 2ED307A6EA748B4C154F01EC - 4EFFC4FE0761DFE9AE12EEC4 - 5950E165CDB720F3B1010EA5 - DE95A8EF702A2DD36F42514A - 04B47F8C4C40903F5CB8F2A0 - F31B19E73AC5F0A2B8E0D2F5 - 4CDCF401756DEDE24C3F44CD - - isa - PBXGroup - name - CLucene - path - CLucene - sourceTree - <group> - - 743A6908FF87FFBE66B40AA2 - - fileRef - 02622B566777CBDAECEA3948 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 744440FD403223694C01FC48 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - BRSimpleSortDescriptor.h - sourceTree - <group> - - 7492216D0A7685547FF7AFB8 - - fileRef - EC55E4C0ABB20AF87127A12F - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 74F59A4E197380B527ACFE42 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - error.h - sourceTree - <group> - - 7544C7B1A2C5AB13732E738F - - fileRef - F6AE3E1A06680CAE528B7299 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 755885785D26F26E11F398D8 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - _IndexFileNameFilter.h - sourceTree - <group> - - 75A928066ACCECA8D05215AA - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - _TermScorer.h - sourceTree - <group> - - 75C955D16CFA1D181860E22B - - children - - 0B0F7314D9F542D994633EF9 - D0119306BF9BF8EFE979BD0E - FE6450FA970056AF13422542 - 686F25EC3B071972479AB68D - C0D9DECEE9BDE170E0072528 - 3239680A2176026B7AC6BFC0 - 4D55BD9697E6BCADB3282B21 - BAF374A7D2860D3FA1D8494B - 9A710CFD82BEBB27F78BE0BB - 7088EC9D9384E17E850A8A25 - CFC357186F781B6A74FE9799 - 44A019EC172D47E3DD319221 - 9E6C66FC35E46E266E97B30B - - isa - PBXGroup - name - spans - path - spans - sourceTree - <group> - - 766AC7A8E36065B8E449648A - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - GermanAnalyzer.h - sourceTree - <group> - - 76CBC57176285C5230043A64 - - fileRef - 399E43EEAE745EACC4904145 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 76F1279038E18B617BFB2F7E - - includeInIndex - 1 - isa - PBXFileReference - path - MultiSegmentReader.cpp - sourceTree - <group> - - 76FF378A4DAA02DD0C69D0A3 - - fileRef - 54B041AF8CC33575A3CB3A14 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 77283DB81F9A959F7D266917 - - includeInIndex - 1 - isa - PBXFileReference - path - stem_UTF_8_italian.c - sourceTree - <group> - - 77336FF4E2326C79108866DA - - includeInIndex - 1 - isa - PBXFileReference - path - QueryParser.cpp - sourceTree - <group> - - 77E62904BCE3BD0BECB31E7F - - children - - 0E71E08FFADD6EAEA12DD62F - 22FC8026129E74064F7410BE - 663CE19CE0EC955A9058EE75 - 9C21C9348CC12C1621C8096F - 4F152B0FF946935A202B1B8F - 015D49E1871C14D2CD2E97C7 - C21C5DFFA208C0CE56DCAE02 - 90F972D8199BF281ACA72FEC - 8E1B86C49D09DBB439E3E9A1 - 9EA1695E8AC74054B56EEAE2 - - isa - PBXGroup - name - spans - path - spans - sourceTree - <group> - - 77E6B9619A97DF9912B0F296 - - fileRef - C1E529C1BAE1BE9D818A0668 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 78127D4B127C3E70138A36D0 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - BooleanQuery.h - sourceTree - <group> - - 7814315E5E4817735A35EE85 - - fileRef - 29C0C39FED18AC22E311F8EF - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 7867E6A8898157A0BB6D0A03 - - fileRef - 6D69503423B54D7A492FCF1C - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 786A14394C5785E12BDF1604 - - includeInIndex - 1 - isa - PBXFileReference - path - repl_tcstod.cpp - sourceTree - <group> - - 788AF9D5A2A794AD17ABDAB7 - - children - - 7212B5DE5A7EDC23067F03F6 - - isa - PBXGroup - name - API - sourceTree - <group> - - 7890CBAACAF188DDB27E68EF - - fileRef - 6A8C0D5C68827C7AD6E5E666 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 78EEA28B6DE82F57A4E04B0B - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - NSExpression+CLuceneAdditions.h - sourceTree - <group> - - 7932F1A3CBF2AC2DC47D54B6 - - fileRef - 449E51D7416613747AF513FD - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 79E9A093A0E7A65925D246F8 - - fileRef - FC09E294CF4A4B73381086FD - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 7A60B69C48BE2A220D7545A3 - - fileRef - 4F152B0FF946935A202B1B8F - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 7A67827FE646216ABA48FE90 - - includeInIndex - 1 - isa - PBXFileReference - path - repl_tcstoll.cpp - sourceTree - <group> - - 7A7E4B2EAB51E8935EE511C1 - - children - - 919C3258848336E655F4C5CE - - isa - PBXGroup - name - Targets Support Files - sourceTree - <group> - - 7AA956FF6436661D47D57158 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - QueryScorer.h - sourceTree - <group> - - 7AC6BAEC3618E3AFD2AEA3D8 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - BRSearchResults.h - sourceTree - <group> - - 7AE3DF8FA7A1FE6FF65A02C5 - - fileRef - F1E3A2EB8EA61982C41728A4 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 7B795848D1FD5EAC6051F130 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - IndexReader.h - sourceTree - <group> - - 7B810F15A656431520F9AD5F - - baseConfigurationReference - 39496126A79BAE8538E7B360 - buildSettings - - DEBUG_INFORMATION_FORMAT - dwarf-with-dsym - ENABLE_STRICT_OBJC_MSGSEND - YES - EXECUTABLE_PREFIX - lib - MACH_O_TYPE - staticlib - MACOSX_DEPLOYMENT_TARGET - 10.9 - MTL_ENABLE_DEBUG_INFO - NO - OTHER_LDFLAGS - - OTHER_LIBTOOLFLAGS - - PODS_ROOT - $(SRCROOT) - PRODUCT_NAME - $(TARGET_NAME) - SDKROOT - macosx - SKIP_INSTALL - YES - - isa - XCBuildConfiguration - name - Release - - 7BAD823E4480E2087517F2BB - - children - - 08DF9F0851E5528D53DD0CAB - - isa - PBXGroup - name - clucene - path - clucene - sourceTree - <group> - - 7BAEBDFF1A79EAE2E7979748 - - includeInIndex - 1 - isa - PBXFileReference - path - SegmentMerger.cpp - sourceTree - <group> - - 7C77C47E91B2B352BF78724B - - buildActionMask - 2147483647 - files - - 355141F0A791E481E7C69393 - F1A309823CC8DB44FB9B5F44 - 81C99E6BF991B73C076862F8 - 6F67A84A200C4A3790AF6C1F - 4B5C54C71518B47B276AE9D3 - DAFD315DBE90FF61B09A25CC - 57BE15AB2525E43BA16248CB - 5F1463E516ADAD532AD8E378 - BB405FA94189D729F49CE9D2 - 644AB08B6ADC592CF9C0C800 - 6D01882D43755E6A27E06B48 - 85C6D3E0777DC2D110A5CDD1 - C24D152E26A859E51F7F6323 - 6A271E0093AB967E7DD00450 - E180438D793F55DE426B4653 - 2608945DC25BED7AC55D8035 - D35FAB33AD099D975C304FAF - 076DDB6CBE26F313BFC1DB15 - ACA71CD170307441E52CAB60 - A59B6099A7850F7E23D13F99 - C0EAF758D7AEE01F9D37A824 - A2E45CBBFB7DD4930C008250 - F754F0F28FEA12C2EEF4DB25 - A30FCC0F047EC769554E3AC7 - 9A3AE70BA872A98CA1AD3CD0 - D4266C6C0A14AA3CEFD6DB6A - 58A3C5F72F8EC097FD4EBA01 - - isa - PBXSourcesBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - 7D19B296FCE2CB018876704E - - fileRef - BAF374A7D2860D3FA1D8494B - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 7D23505741F7F67036619662 - - fileRef - 205072BA7EA52C39E8B099A7 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 7D5289A7260A0C653F50B305 - - fileRef - 3B7D975C1F482B047471100B - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 7DB0D038358922EE08A405FA - - includeInIndex - 1 - isa - PBXFileReference - path - BooleanScorer.cpp - sourceTree - <group> - - 7DB2E4496D8581174D96DC2E - - fileRef - 556674C3F503ACB0F365C486 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 7E00FB65257DB6039A762E17 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - BRNoLockFactory.h - sourceTree - <group> - - 7E3C23D5044201997E7CE2DB - - includeInIndex - 1 - isa - PBXFileReference - path - StringBuffer.cpp - sourceTree - <group> - - 7E59130FC6CDE43416B6A265 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - StandardAnalyzer.h - sourceTree - <group> - - 7E7B8CE96CFE1B767C29E502 - - includeInIndex - 1 - isa - PBXFileReference - path - CJKAnalyzer.cpp - sourceTree - <group> - - 7E7D97274C7ADC72C7EFB670 - - fileRef - 4A6AFCABC00B39654D872CC6 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 7E7EC75B803A53AC6FDB0DFB - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - stem_KOI8_R_russian.h - sourceTree - <group> - - 7E83FCB69283A4B2985BB424 - - fileRef - 2FEFE13361BF1273AF837783 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 7EB35E00A4EF61BD73DC0724 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - _FastCharStream.h - sourceTree - <group> - - 7ED607C47CC5DF2FBF42D6CA - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - Term.h - sourceTree - <group> - - 7F58050DED0BDE11CA1EC628 - - fileRef - 14F518BA655209D18E9772A4 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 7FB72AC49BF248F6BBD0B3A9 - - includeInIndex - 1 - isa - PBXFileReference - path - Terms.cpp - sourceTree - <group> - - 7FBAC1C882ABD287937C4AA9 - - fileRef - 015D49E1871C14D2CD2E97C7 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 7FC6F64AD63F83B0ABF6D817 - - fileRef - EE79F6214478B885F26E24A0 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 808AE4EE631CA2C8D5C8595F - - fileRef - E4503098668D6FAB1E778591 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 80AAF75C63B69928D2E9E516 - - children - - 191A26430F4412BD48B1DFEE - 8D94591FF0962AE00A816F64 - EABD9DED5EB90ABDBA398EC5 - 677687262098D9A2294D3F3D - 4360224911545B213C8C4501 - FB6718BBB1DF98CCA56AE951 - AD3C9DB0E23F991F4C412F2D - - isa - PBXGroup - name - util - path - util - sourceTree - <group> - - 80C1CD7BB82AC6ACEDC1CEEC - - fileRef - A4318B9B2C25AB4DD2E4945E - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 80DBF89051C4CD70EEF319C1 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - QueryTermExtractor.h - sourceTree - <group> - - 8113B777BD538ED3DC30A6D6 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - MagicalRecord+iCloud.m - path - MagicalRecord/Core/MagicalRecord+iCloud.m - sourceTree - <group> - - 8138D42BFE19C72ED512257A - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - stem_ISO_8859_1_portuguese.h - sourceTree - <group> - - 817248EB210C02220C215B94 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - MagicalRecord+ShorthandSupport.h - path - MagicalRecord/Core/MagicalRecord+ShorthandSupport.h - sourceTree - <group> - - 81C99E6BF991B73C076862F8 - - fileRef - 4B64B9BCC8F4FB7E424F8782 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks - - - 81CB08F4C604965CBFE33F30 - - includeInIndex - 1 - isa - PBXFileReference - path - SegmentReader.cpp - sourceTree - <group> - - 81EB85C74D3E72B46FE76EE6 - - fileRef - 9EA1695E8AC74054B56EEAE2 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 824FED8B5F8032950496C92A - - buildActionMask - 2147483647 - files - - 8FDB574B0B16EECC099D60B2 - - isa - PBXSourcesBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - 82902ED44739DB991845903F - - fileRef - 5338BB33E6AC1153BA2F494C - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 82A5B5412D552346DEDD1835 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - MagicalRecord+Actions.m - path - MagicalRecord/Core/MagicalRecord+Actions.m - sourceTree - <group> - - 82D1F8232CBFC28B6BCEAA9A - - fileRef - 5A03445FD577C53B7E7AEA2B - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 83627788A4FE6814D4E84532 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - stem_ISO_8859_1_french.h - sourceTree - <group> - - 837448958BFB2E17A28EF69E - - fileRef - 284728CC12981881D81FCBC4 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 839D99A8FBC9D1B694304622 - - fileRef - F702563275580A3480F41549 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 83A7DDE55A3ECD5B89F5A248 - - includeInIndex - 1 - isa - PBXFileReference - path - WildcardTermEnum.cpp - sourceTree - <group> - - 83A8C7154E3A69BA03D8DF1B - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - _FieldInfos.h - sourceTree - <group> - - 83AB55E56ABD3FC1003170B4 - - fileRef - 38F75157E9C14AD14BA0688A - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 844AD46B4186B91889A4B8A3 - - includeInIndex - 1 - isa - PBXFileReference - path - Lock.cpp - sourceTree - <group> - - 848A1821320EBB4229677D9B - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - QueryToken.h - sourceTree - <group> - - 84EA28DB7069E586F2C0C14F - - fileRef - E688BD58B65753889BC05F87 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 853CF54E39465D59860AC785 - - includeInIndex - 1 - isa - PBXFileReference - path - SegmentTermPositions.cpp - sourceTree - <group> - - 85A5F6C1D836636FA1276898 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - _FieldDocSortedHitQueue.h - sourceTree - <group> - - 85B6A8D282AB979D2C9306C7 - - fileRef - 3CDEFCF108F17891EDEA6733 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 85C6D3E0777DC2D110A5CDD1 - - fileRef - 5EF89509D64622959A7F3F02 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks - - - 85D2648328D35201AC4327B9 - - includeInIndex - 1 - isa - PBXFileReference - path - IndexWriter.cpp - sourceTree - <group> - - 8644C54931E8557170ECB6B7 - - fileRef - FB98EA8D7B51E456CABC6A92 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 86612E1F96BAA3D2CBEB9B82 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - _Arrays.h - sourceTree - <group> - - 86679FEBDA6B59F33B4B5565 - - fileRef - D81CB7126001B0556DCF1469 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 8684F90C6360727EC1431AB3 - - fileRef - F0C8DEEAD50643AB2BFE5226 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 87A88EF1E7D1E2862C2634D7 - - fileRef - EE260CA140F8C6AAC0F5B3C8 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 87B55005161C10B066AEBD2D - - fileRef - 063202E9CE72DB38C08EB785 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 87EF4E8F612FF2B4D362AFB5 - - fileRef - 40BF9834C30F798B31F730BE - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 88016BBEAE5E5EF9EF0009B4 - - fileRef - B23D07DC1DE49788867B65C2 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 889236B430B66F0E3463707B - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - _ConjunctionScorer.h - sourceTree - <group> - - 89013FDE84B2C11185CB6D9B - - includeInIndex - 1 - isa - PBXFileReference - path - stem_UTF_8_swedish.c - sourceTree - <group> - - 8908BB95745D9E53B306308A - - includeInIndex - 1 - isa - PBXFileReference - path - stem_ISO_8859_1_portuguese.c - sourceTree - <group> - - 8919DA9F4D8898F17CDC07F4 - - fileRef - 5EDD939E988ED25D21C72A13 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 89505E36F01C5D8D09FC107A - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - Highlighter.h - sourceTree - <group> - - 89B12780EB9920E7A67E675C - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - RangeFilter.h - sourceTree - <group> - - 89C32EA372300AD4E5FB1BBA - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - stem_UTF_8_portuguese.h - sourceTree - <group> - - 8A81212484B9C85CC9030BF1 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - NSAttributeDescription+MagicalDataImport.m - path - MagicalRecord/Categories/DataImport/NSAttributeDescription+MagicalDataImport.m - sourceTree - <group> - - 8AFA1275047232E824821865 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - SpanQueryFilter.h - sourceTree - <group> - - 8B3299325EF7C214A356443D - - fileRef - FA7D4D917B0D3BDBBB3883A4 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 8B4AE5F1C77C27125EED1BBB - - buildActionMask - 2147483647 - files - - D3D774CB08FCC9BE1FF957C6 - - isa - PBXFrameworksBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - 8B5AC20AEFBF506262E8EB2F - - fileRef - CE27B167B62B0EFC1CA8E72A - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 8B5C22D189D688117E0C56DC - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - stem_UTF_8_spanish.h - sourceTree - <group> - - 8B6E24CCF423F9DC38735AE9 - - children - - EC442525118A832FA43F1893 - 7DB0D038358922EE08A405FA - 2FC2CAD124AB27073E741E9C - DA45340425C9B0DE4B37AA5E - 375D2944708E4A2A00537BA5 - 2FEFE13361BF1273AF837783 - 271ED031E0F757B79527FB6B - FC09E294CF4A4B73381086FD - 14F518BA655209D18E9772A4 - 7050C1CF512D7A8CE9467A4A - 1DCECBFE18A198F63A7CE9E9 - 2F4B4074009189B05BECF4E6 - F6AE3E1A06680CAE528B7299 - CA4AA1338B4272EAD5A872B1 - 6DDE7699E9004594909FBC16 - AE7C2BA4131B5FD02D673B5F - 29764B244C7A4D957BAD2CB3 - 0FDFBF7BD33462F62E7D4295 - 261FCCC0C87FDC833352A1A9 - F59BC4E5B1A2636F0A2FA7EB - 13EF7C293F4D994E4ED2E63A - 61AC916A487A8E6BB2914B95 - 2CE521F6A5A9830F33761170 - DA68322F59E7E529DB16D228 - 122F0CCD798030CFD157F55D - C7533A47E93EDDC11351B054 - 45CEB58855A0D700BEB29995 - 0FCC1A0ADA84B8291678123B - F4AA9AF46839F6C4F71A560E - 2079D41698D17A66A399586A - 3EF825204F143E6D58B0CBBB - 0E75938E2780E0F320D57C2C - 1E8823AEAE55C1D50C1D4B95 - A678921E5ADAC3529A3383B6 - 04A35A64C6778AB5BA423666 - 4F09EEBFC4AE8FA8BF148D45 - 48A0664593C1D51A2DFC158B - 4608B8A530C34BD269470979 - D51B4F3C4C3C26DBF307234B - 47D7C1D2936FAE9952F8D28F - F702563275580A3480F41549 - 8B8FD962EB452C3B1DF183F9 - D97B67805AB6500196B8B825 - 83A7DDE55A3ECD5B89F5A248 - 77E62904BCE3BD0BECB31E7F - - isa - PBXGroup - name - search - path - search - sourceTree - <group> - - 8B8DEBB9B8A8ADF3AF92A3A8 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - NSRelationshipDescription+MagicalDataImport.m - path - MagicalRecord/Categories/DataImport/NSRelationshipDescription+MagicalDataImport.m - sourceTree - <group> - - 8B8FD962EB452C3B1DF183F9 - - includeInIndex - 1 - isa - PBXFileReference - path - TermScorer.cpp - sourceTree - <group> - - 8BDF4E0EDE39B4684644FBDA - - children - - 9BCA91D0DDBF92636BC25428 - - isa - PBXGroup - name - Pods - sourceTree - <group> - - 8BEC681EA30CDEAEDD994D1E - - includeInIndex - 1 - isa - PBXFileReference - path - IndexModifier.cpp - sourceTree - <group> - - 8C0AB3759666A05898221224 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - SharedHeader.h - sourceTree - <group> - - 8C12D5EFE61A1A65BBFDA80C - - fileRef - 5EAC13CBF67285DEAE3884FB - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 8C52691CE713CF06DCD5DA24 - - buildActionMask - 2147483647 - files - - FF5EED7C7FD73A974EB34A1F - 236F954DCDC1B04192DE6F4A - D9E5F6E1BC3CD2169EBCC4B1 - 4F85C06336F90DAB0A712F41 - 0B8721928065C9CC4BDB9ECF - 2ECCF8652A62ED6A4759E5B4 - 0BFD33FA7CB49BC92252E78E - 1C1A7D0A757C552788B214BD - D40A94AF8DFD9174D7D50EEE - 84EA28DB7069E586F2C0C14F - 1EB02ED67F8471D328DBA162 - C18EADF4328E7FF2A9A148F9 - 06520C8371DB610CD094E6DA - 1A128F2D6F3971553D8B5700 - 8DE53FFBC442C8977E5E3F0E - C3F0891B61858F56D951C8D2 - D5669F43D9F68E4AD34B2DDF - 44A091D3E4F728D77ECE6C6F - DE6EAA4DA0659DD75C3E8942 - 9485465C1AC459783A44303B - 9EE04B2BC3001F922361EDBB - 973149CA76190BB68A0BB714 - E19AD1B36D0CB3A8A4F0367D - B84EE766812476ADCA340E4F - 6D545641A71B41370BE2F59A - BA103070A28E52E2A3B68269 - 241E6AE8F7FF13DC9E471AD8 - 4B1604C8A677819D0C71F0E2 - - isa - PBXHeadersBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - 8C610722AEFFF091BDA071BF - - fileRef - 315E772B5493826B76C1A97A - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 8C7DFA6F35716FE75A12241B - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - NSManagedObject+MagicalRequests.m - path - MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalRequests.m - sourceTree - <group> - - 8CA6D49A7E56963AE5AB5F72 - - includeInIndex - 1 - isa - PBXFileReference - path - NSExpression+CLuceneAdditions.mm - sourceTree - <group> - - 8CBBB222E5DD36F84DCA3202 - - includeInIndex - 1 - isa - PBXFileReference - path - BitSet.cpp - sourceTree - <group> - - 8CF015F62E6F7579EF0D68CF - - fileRef - 44A019EC172D47E3DD319221 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 8D94591FF0962AE00A816F64 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - byteinputstream.h - sourceTree - <group> - - 8D982B4FAFDB6484F03C74E7 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - path - NSDateComponents+BRFullTextSearchAdditions.m - sourceTree - <group> - - 8DAF330F8A1AD1263B2FEA0C - - fileRef - EE672BE213D83C93DE4EC8C9 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 8DE53FFBC442C8977E5E3F0E - - fileRef - 591838887565181E39AC2A8D - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 8E1B86C49D09DBB439E3E9A1 - - includeInIndex - 1 - isa - PBXFileReference - path - SpanWeight.cpp - sourceTree - <group> - - 8E7B5611206F1E338857A2F2 - - includeInIndex - 1 - isa - PBXFileReference - path - repl_tprintf.cpp - sourceTree - <group> - - 8EEF9CF8195DF3ECE4DD6F66 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - Lock.h - sourceTree - <group> - - 8EFCB2F24CD2ADAE7767CA37 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - BRSearchResult.h - sourceTree - <group> - - 8FDB574B0B16EECC099D60B2 - - fileRef - 5DBC0D04748802198AE75A1C - isa - PBXBuildFile - - 90F13BCC048E3A5E624CDA4E - - fileRef - 375D2944708E4A2A00537BA5 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 90F972D8199BF281ACA72FEC - - includeInIndex - 1 - isa - PBXFileReference - path - SpanTermQuery.cpp - sourceTree - <group> - - 913C5E97C04853194B436DD3 - - fileRef - 23FA0AB5578FFF3C69002EF8 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 91927D63F4B7DA4714A6B9B5 - - fileRef - 89013FDE84B2C11185CB6D9B - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 919C3258848336E655F4C5CE - - children - - 6CDA3B5923F08A7F5FA29A0D - 1AD07D3D37F50F249123DF94 - 5DBC0D04748802198AE75A1C - 34ECF0CF5E8EE29928DCB48E - A6CA606BA643EEC749255BA4 - 9CD6BDD301B7519975726D19 - 39496126A79BAE8538E7B360 - - isa - PBXGroup - name - Pods - path - Target Support Files/Pods - sourceTree - <group> - - 920B23B11EF457BE017D2F92 - - fileRef - 7A67827FE646216ABA48FE90 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 926E2F4292BE4DDF253B2EA8 - - fileRef - D5FBFA64843318233672A876 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 927D1DAC9CB3AAFEEC6EB7F8 - - includeInIndex - 1 - isa - PBXFileReference - path - BRNoLockFactory.cpp - sourceTree - <group> - - 928D8B051FFD1345541780AF - - fileRef - F074DD4FDE802625C766268A - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 932E6275CB6DE374B5AED1A6 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - _MD5Digester.h - sourceTree - <group> - - 9407FE63087C726F5A3210FE - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - NSPersistentStore+MagicalRecord.m - path - MagicalRecord/Categories/NSPersistentStore+MagicalRecord.m - sourceTree - <group> - - 944FD0F435743BBD44A5254B - - includeInIndex - 1 - isa - PBXFileReference - path - GermanStemmer.cpp - sourceTree - <group> - - 948089ED32D0068AE6869FB5 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - NSEntityDescription+MagicalDataImport.h - path - MagicalRecord/Categories/DataImport/NSEntityDescription+MagicalDataImport.h - sourceTree - <group> - - 9485465C1AC459783A44303B - - fileRef - 643D5C1DD1D5AD8C8C09BC0C - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 948C2CA0439320D5CEDAEFA0 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - DateTools.h - sourceTree - <group> - - 94FF476AB8E4A5604755709B - - includeInIndex - 1 - isa - PBXFileReference - path - IndexFileDeleter.cpp - sourceTree - <group> - - 95560B5AE136BA253101DAEA - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - NSManagedObject+MagicalRecord.m - path - MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalRecord.m - sourceTree - <group> - - 956EE7E22759B7FD185A83A2 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - NSString+CLuceneAdditions.h - sourceTree - <group> - - 95762693A9A09686FEFD5311 - - fileRef - BCF6C62BFFC7A9BC06B4A6BD - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 95DB5C33FA997A9E8DE854F8 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - Terms.h - sourceTree - <group> - - 95E915E2CDF500CA2ED22F2E - - fileRef - 09A8E1D6DFF872A9468BED35 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 96C8D7575BED6F88D3A71716 - - fileRef - 6C9E3C0967F6E7739F1C55B8 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 96E21133779D85F224AE5D8B - - fileRef - 686F25EC3B071972479AB68D - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 973149CA76190BB68A0BB714 - - fileRef - EDEF9364CAF46C0AC695591C - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 97AED17A783CD7012FD6666B - - includeInIndex - 1 - isa - PBXFileReference - path - TermInfosWriter.cpp - sourceTree - <group> - - 97D50BC30559403DA837619A - - fileRef - 1EF2934E6675EE33D1A4817F - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 97E7F3800E0DDB063A759E42 - - fileRef - 155156FB5232E476C5BEFE69 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 9901CBC9770CCD5FA8C06D7B - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - VoidList.h - sourceTree - <group> - - 9905BA53E84A685CFDED3D77 - - fileRef - EF3FEC97BE828DA280B1F018 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 9944BAA1CC3DA65FEA1DFC5E - - fileRef - 8EEF9CF8195DF3ECE4DD6F66 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 9955878AA03237E0CB02BF17 - - fileRef - 00193E7218AC118A0C2ECE2A - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 9986C925EEEA7E5CFC673D13 - - fileRef - 6BDC240E47F9EC0E61ADA4AF - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 998AD47AA4F168240902199B - - fileRef - C7533A47E93EDDC11351B054 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 99F30E1C41E5720ABEA9E771 - - includeInIndex - 1 - isa - PBXFileReference - path - SimpleHTMLFormatter.cpp - sourceTree - <group> - - 9A168C39BE69E8A3A038AC43 - - children - - 5ECCF01F281A2C81FF0B1D7D - - isa - PBXGroup - name - Implementation-CLucene - sourceTree - <group> - - 9A3AE70BA872A98CA1AD3CD0 - - fileRef - A589356F6372788BA495C0E2 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks - - - 9A710CFD82BEBB27F78BE0BB - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - SpanQuery.h - sourceTree - <group> - - 9A8FF6F563B9C1BF95460529 - - fileRef - 1C42E7FEBC0311808D74DA29 - isa - PBXBuildFile - - 9B8EB40480E72D2D27EE525D - - fileRef - 2075D418B81EE6D69A054276 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 9BAE21A613612D3EED10F67D - - fileRef - 9DAFA085FD22442295679B28 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 9BC7A16E7235D8F692ED7D9D - - fileRef - 83A7DDE55A3ECD5B89F5A248 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 9BCA91D0DDBF92636BC25428 - - children - - 4BF674E723AAD984B3129163 - 9CF3B6938FE1FC1845FD53F7 - - isa - PBXGroup - name - MagicalRecord - path - MagicalRecord - sourceTree - <group> - - 9C21C9348CC12C1621C8096F - - includeInIndex - 1 - isa - PBXFileReference - path - SpanNearQuery.cpp - sourceTree - <group> - - 9C6848FD31A7565FDA939A09 - - children - - F8FE1F1C4ED1D5C40D14AB79 - - isa - PBXGroup - name - Frameworks - sourceTree - <group> - - 9CD6BDD301B7519975726D19 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text.xcconfig - path - Pods.debug.xcconfig - sourceTree - <group> - - 9CDBD8F97957308FD75BA919 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - NSDateComponents+BRFullTextSearchAdditions.h - sourceTree - <group> - - 9CF3B6938FE1FC1845FD53F7 - - children - - BFB890C04CA5D75ADEF01D5A - 4FC7B2DFA6F66B8DBA7AEC77 - FE85DC73093FBB0FEA384E4B - - isa - PBXGroup - name - Support Files - path - ../Target Support Files/MagicalRecord - sourceTree - <group> - - 9D0334E15CE35BB7C65780DB - - fileRef - 17783F6A325E801EEC3E0CC9 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 9D107D1C7415FED77CDF0CE7 - - buildConfigurations - - 7276D94B4EB4AEDD19FDBAA0 - C8BAD2137A90B629C9BC6FB5 - - defaultConfigurationIsVisible - 0 - defaultConfigurationName - Release - isa - XCConfigurationList - - 9D19FA7F14E221249529DB75 - - fileRef - AE52D01879C079717190EBA0 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 9D75F866824E80CC2CEE80D2 - - fileRef - 63F7F2FC27A2E8DC23D16A62 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 9DAFA085FD22442295679B28 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - stem_ISO_8859_1_norwegian.h - sourceTree - <group> - - 9E43A7B98336488E2005113C - - fileRef - 6D4FD36C83EBD74C46DDEB1D - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 9E6C66FC35E46E266E97B30B - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - SpanWeight.h - sourceTree - <group> - - 9EA1695E8AC74054B56EEAE2 - - includeInIndex - 1 - isa - PBXFileReference - path - TermSpans.cpp - sourceTree - <group> - - 9EA9C84967A947D3D2A0B8DE - - fileRef - DC4DE131509C84869B471740 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 9EE04B2BC3001F922361EDBB - - fileRef - 4296464FD4C5407221B474F9 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - 9EFD58C08FC0ABFD016D6A49 - - fileRef - 3560466C09CAB57ED1598443 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 9F17F9A3CFBFEDB695DDD7B2 - - fileRef - 81CB08F4C604965CBFE33F30 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 9F9672D9CA55FEF7ED32131A - - fileRef - C542580D94206570FA3A404C - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 9FC0B79657B9F18EC5969A3B - - fileRef - 94FF476AB8E4A5604755709B - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - 9FE75A5F4E1A617EE5BAD03D - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - _FieldsWriter.h - sourceTree - <group> - - A06C16C9E114C447473B9F34 - - fileRef - 78EEA28B6DE82F57A4E04B0B - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - A078A106FD166CCDAE36465C - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - Analyzers.h - sourceTree - <group> - - A0A0CA6F6D96BAF0E406850D - - includeInIndex - 1 - isa - PBXFileReference - path - stem_ISO_8859_1_norwegian.c - sourceTree - <group> - - A0B8BA7ACE9AF34281DDBBBA - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - _SegmentMergeInfo.h - sourceTree - <group> - - A0C70C25E6EA38F2E1C30F6E - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - _streambase.h - sourceTree - <group> - - A0FB8B42C0775159EB622495 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - MagicalRecord+Setup.h - path - MagicalRecord/Core/MagicalRecord+Setup.h - sourceTree - <group> - - A1383548ABC7A5E8E709A989 - - fileRef - 54857E8CC442C778CC079F55 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - A14D182393A5D92C6F4F28A1 - - fileRef - 4360224911545B213C8C4501 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - A15ED1F615FE495CD5BC49C8 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - Array.h - sourceTree - <group> - - A168F1EC2A8A878B5D1FF9EB - - children - - E1F2CD6045BBAD32DAA02480 - 31F4E38E2E3487FA5A1F2AD1 - 9C6848FD31A7565FDA939A09 - 8BDF4E0EDE39B4684644FBDA - 6D64E817B37643B8EA045FEB - 7A7E4B2EAB51E8935EE511C1 - - isa - PBXGroup - sourceTree - <group> - - A1C07331EB08D0ECCA2804F7 - - fileRef - 956EE7E22759B7FD185A83A2 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - A1C6D1AE085BBE339576710F - - fileRef - 0F21D4611FA8A1635C3EC3A8 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - A27826A65F41BD47F6CE9F11 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - QueryParserTokenManager.h - sourceTree - <group> - - A2B9193B8F02EB7362B58CAC - - fileRef - F48BE159E95731CF33E83EE9 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - A2DFA440E48D78C990E35F8E - - fileRef - B5CDD0A698F49B1F1AF1C97B - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - A2E1035E29E1CD70519FDFF9 - - fileRef - 5DF950A3F006782F674F8AD6 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - A2E45CBBFB7DD4930C008250 - - fileRef - C36572C22F0810966A3FBEC8 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks - - - A30FCC0F047EC769554E3AC7 - - fileRef - 9407FE63087C726F5A3210FE - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks - - - A3923AD15CC0CAFD176B3721 - - fileRef - 577368B16D78693053596A6D - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - A3930D019F8827C48104E78D - - fileRef - 1DCECBFE18A198F63A7CE9E9 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - A3A110ACB90ED85728BBB76C - - fileRef - E14EDDB3716129A4BF4EF89C - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - A3DA97D387E9DC17F5868C66 - - fileRef - B9805AA190C8FB1E34C5C83C - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - A4318B9B2C25AB4DD2E4945E - - includeInIndex - 1 - isa - PBXFileReference - path - repl_tcslwr.cpp - sourceTree - <group> - - A43DFC3E4B4984D3945CAAB8 - - fileRef - 8D982B4FAFDB6484F03C74E7 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks - - - A48BF9274EB8E8E8FFCFBE31 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - mem.h - sourceTree - <group> - - A49D6DB1468421D91AAED79F - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - _ExactPhraseScorer.h - sourceTree - <group> - - A55BDEBA7D50F13C7F656188 - - fileRef - A8C17885D411AF328A653803 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - A575CAB8625D5EB63F4D990F - - explicitFileType - archive.ar - includeInIndex - 0 - isa - PBXFileReference - name - libMagicalRecord.a - path - libMagicalRecord.a - sourceTree - BUILT_PRODUCTS_DIR - - A589356F6372788BA495C0E2 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - NSPersistentStoreCoordinator+MagicalRecord.m - path - MagicalRecord/Categories/NSPersistentStoreCoordinator+MagicalRecord.m - sourceTree - <group> - - A59B6099A7850F7E23D13F99 - - fileRef - 4F8FFE5342236666BD806E96 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks - - - A60F76DA9CA00841DDD26A97 - - fileRef - CB79D0DC0044534AB0F505B1 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks - - - A61C5385A68495332F28954A - - children - - 2075D418B81EE6D69A054276 - C1E529C1BAE1BE9D818A0668 - 77336FF4E2326C79108866DA - 42C427AF8221CF9B83B705DC - D8D0766B2192C3CBEE19E5CF - - isa - PBXGroup - name - queryParser - path - queryParser - sourceTree - <group> - - A6532CB8C8A85262898F6406 - - fileRef - 405F695BD6DAD6A34D58CD1F - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - A678921E5ADAC3529A3383B6 - - includeInIndex - 1 - isa - PBXFileReference - path - Scorer.cpp - sourceTree - <group> - - A679178BDF4CA5A0689F9B12 - - includeInIndex - 1 - isa - PBXFileReference - path - IndexReader.cpp - sourceTree - <group> - - A6C6AF7C830252CFEE4D2D71 - - fileRef - 70995E25CA8390B92495FB72 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - A6CA606BA643EEC749255BA4 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text.script.sh - path - Pods-resources.sh - sourceTree - <group> - - A6F8B10607CAE4D6B22F5FB3 - - includeInIndex - 1 - isa - PBXFileReference - path - CompoundFile.cpp - sourceTree - <group> - - A7683D7979A1A0F42DBBC564 - - includeInIndex - 1 - isa - PBXFileReference - path - stem_UTF_8_german.c - sourceTree - <group> - - A7A708B658264A92C3DCBF6E - - fileRef - 43D14DF650BB349A390A09C9 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - A8291DDB57675042EBF9B15F - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - MagicalRecord+Options.m - path - MagicalRecord/Core/MagicalRecord+Options.m - sourceTree - <group> - - A84345E07E85B8680FDBCE3A - - fileRef - 2ABD4F4D3F116EDDCF673F6C - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - A851D2A08D3C2CEF3C89CE64 - - fileRef - D4CE204C3D7DE467FABF48FE - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - A8AAC7635AE9DBE51E2776CE - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - CLConfig.h - sourceTree - <group> - - A8C17885D411AF328A653803 - - includeInIndex - 1 - isa - PBXFileReference - path - stem_UTF_8_spanish.c - sourceTree - <group> - - A8CEE116B82F35158CBCCDC9 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - _ApiHeader.h - sourceTree - <group> - - A8D6FC6E7D84D0ABE67EF281 - - includeInIndex - 1 - isa - PBXFileReference - path - Analyzers.cpp - sourceTree - <group> - - A969853342381221638F9BD2 - - fileRef - 33B167CA5202F531E5E043EF - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - A98DC9BE005694F521ECA285 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - IndexSearcher.h - sourceTree - <group> - - A9F2A9DF77DE363B59D5A3D2 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - _streambuffer.h - sourceTree - <group> - - AA80D6A3BEF114FE2D7EF53C - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - BRFullTextSearch-prefix.pch - sourceTree - <group> - - AB0C95FCCF16C431FD63AEF0 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - _TermInfosWriter.h - sourceTree - <group> - - AB27B8ADC5355361FC1FAD9C - - fileRef - 5AF284DAAFFC323FE4040604 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - AB36E4DA56D73D1E24B0CE82 - - fileRef - 42C427AF8221CF9B83B705DC - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - AB62403F7C2FB44EB025DC05 - - fileRef - 9E6C66FC35E46E266E97B30B - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - AB7FC1BCC4B5E219B2AA06E5 - - fileRef - EB6B8AD9F7E026FC24FF6E71 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks - - - AC7B1B45030FE8D33D6BE2A2 - - children - - A6F8B10607CAE4D6B22F5FB3 - 46146F16F9927BF080002586 - 2A47FA093AD381399630D9D8 - 00193E7218AC118A0C2ECE2A - 52AFC005ECEEB85B802EB6A7 - D9F5490951A1FEB8FAD0D0FD - E24A26179CC2DD0FDE821589 - 063202E9CE72DB38C08EB785 - 94FF476AB8E4A5604755709B - C6DF822A092B218B0CBE0264 - 3B7D975C1F482B047471100B - 8BEC681EA30CDEAEDD994D1E - A679178BDF4CA5A0689F9B12 - 85D2648328D35201AC4327B9 - 0A97DB030433E0FBC407E444 - 70995E25CA8390B92495FB72 - EA854CAAADAB25FA30958CA2 - 6E7EF8420E3818467A540754 - 76F1279038E18B617BFB2F7E - 0F6F9C0F498684EE0D4FE4A9 - 40490A8150A91C76A5743C0C - 2129341487E9631B16EC189A - 0F21D4611FA8A1635C3EC3A8 - 7BAEBDFF1A79EAE2E7979748 - 81CB08F4C604965CBFE33F30 - B856141B1173CE2EFE8ED678 - B3310B5B0E22AFAD502D25BD - 853CF54E39465D59860AC785 - 1DBA17A41CDC6764BB227F1D - 6C63428323092452621CFC87 - B877400FD31A6652C7AAC8CD - 23FA0AB5578FFF3C69002EF8 - 535F155D51FE18E4A9433AF4 - 6E2DD52F25C4E441561BE4DE - 97AED17A783CD7012FD6666B - 7FB72AC49BF248F6BBD0B3A9 - D62CFEDE9ED06F852D37F4CA - 11BB66B6B92C17B19D9F5DD0 - - isa - PBXGroup - name - index - path - index - sourceTree - <group> - - ACA71CD170307441E52CAB60 - - fileRef - E9589FA346C37BC268E98BCD - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks - - - ACBCBE42AB38B85586D376D4 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - BRSearchService.h - sourceTree - <group> - - ACDAAAAD397A797186069181 - - fileRef - F6D9A29EE98F12B078670954 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - AD3C9DB0E23F991F4C412F2D - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - streamarray.h - sourceTree - <group> - - AD7DDAB5A9A587177FB1A1B1 - - includeInIndex - 1 - isa - PBXFileReference - path - QueryTermExtractor.cpp - sourceTree - <group> - - ADC6E11451B63EDC85FA7EEC - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - Query.h - sourceTree - <group> - - ADD30DBA60876E6C022CE967 - - fileRef - B877400FD31A6652C7AAC8CD - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - ADE44E36FF9D9F2BE36CB461 - - containerPortal - 52153A8DF28C8AC4CC156C31 - isa - PBXContainerItemProxy - proxyType - 1 - remoteGlobalIDString - DC02470A3644F4C2181CEAC1 - remoteInfo - BRFullTextSearch - - AE4225ED729489FC536F9FAD - - children - - 1EF2934E6675EE33D1A4817F - F34179A41A6A3F1708FCAFF4 - 29CB0D6F23A60FC2249C79C6 - 04B006D89669E663328F46B0 - AC7B1B45030FE8D33D6BE2A2 - A61C5385A68495332F28954A - 8B6E24CCF423F9DC38735AE9 - B33DF9C6D3A851ED1AE66CF7 - F23904EDC1F8EC6B72113FE1 - - isa - PBXGroup - name - CLucene - path - CLucene - sourceTree - <group> - - AE52D01879C079717190EBA0 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - stem_UTF_8_german.h - sourceTree - <group> - - AE7C2BA4131B5FD02D673B5F - - includeInIndex - 1 - isa - PBXFileReference - path - FieldDocSortedHitQueue.cpp - sourceTree - <group> - - AEC4CB97E87FBB07111C4C72 - - fileRef - 6426870F4047F37FEA6220D7 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - AF882C715B67CDDAE23B8B5F - - fileRef - CA4AA1338B4272EAD5A872B1 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - B02CD9A483B2682686193305 - - fileRef - E0D609D9BDF0DB466267627A - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - B083DC69528B46DDEE477376 - - fileRef - F79F15DAFEA74A183E799C00 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - B0BF5CEF9F8DDBF215F6FA6D - - includeInIndex - 1 - isa - PBXFileReference - path - LanguageBasedAnalyzer.cpp - sourceTree - <group> - - B116356E17C007CFE283A6F0 - - fileRef - 0D94F14B9977AE6A2FFE6629 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - B1F639323388DECFD62C4BC0 - - fileRef - B3310B5B0E22AFAD502D25BD - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - B227930794500D0AF558CC42 - - fileRef - EA8EEE3704486458D9C8C2E8 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - B22CBD2777AC007FD405B4B5 - - includeInIndex - 1 - isa - PBXFileReference - path - NSString+CLuceneAdditions.mm - sourceTree - <group> - - B23D07DC1DE49788867B65C2 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - MultipleTermPositions.h - sourceTree - <group> - - B2500BEA802349F98F35609B - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - stem_UTF_8_danish.h - sourceTree - <group> - - B2D6DA1FB407EBEF0E25D519 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - MagicalRecord.h - path - MagicalRecord/Core/MagicalRecord.h - sourceTree - <group> - - B3310B5B0E22AFAD502D25BD - - includeInIndex - 1 - isa - PBXFileReference - path - SegmentTermEnum.cpp - sourceTree - <group> - - B33DF9C6D3A851ED1AE66CF7 - - children - - 3E95C3748BBAEC50D8996327 - F75C19F95A53C80A965F9695 - EE79F6214478B885F26E24A0 - 315E772B5493826B76C1A97A - 844AD46B4186B91889A4B8A3 - 153F4328C4EEFB6E792C78F3 - C18649E0653062CD8E15DF69 - DCFE654EC0E3893795CCFFFE - - isa - PBXGroup - name - store - path - store - sourceTree - <group> - - B35FE999320B57DD21098CE8 - - fileRef - 1F715F51A4C239626B7FDFF7 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - B392814A1868D090E6BEB0A9 - - fileRef - 86612E1F96BAA3D2CBEB9B82 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - B3D1EF3AC7F78FAE4E26F381 - - includeInIndex - 1 - isa - PBXFileReference - path - error.cpp - sourceTree - <group> - - B441518F2AAD292874335AD4 - - fileRef - F1B1717012450477A27C6268 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - B4415BC5D22554D350FD4300 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - FieldCache.h - sourceTree - <group> - - B58D7B6ECFB2CCED0908DC4B - - fileRef - 0D4944EB321C9A0D1F03586D - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - B5C5B090D201361BE035CA2B - - fileRef - C0D9DECEE9BDE170E0072528 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - B5CDD0A698F49B1F1AF1C97B - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - WeightedTerm.h - sourceTree - <group> - - B5F03320F1019F0B2B3EC91D - - fileRef - D671E804F1835ED7AB67C31F - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - B6DD8D9DE6A8C226E5EB775C - - fileRef - 7ED607C47CC5DF2FBF42D6CA - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - B707FEF8EA5491DD29ED596E - - fileRef - 63C55C6F5086D1A04D07B920 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - B74C8199D1B0484695648342 - - fileRef - 8E1B86C49D09DBB439E3E9A1 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - B759262BB13FE1BC91332376 - - includeInIndex - 1 - isa - PBXFileReference - path - CLuceneSearchResults.mm - sourceTree - <group> - - B788444CD667B0A9E0D80752 - - fileRef - 0AE403A72846ED47EDC73486 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - B7ADFF99289ACA83F3ABDD13 - - fileRef - 261FCCC0C87FDC833352A1A9 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - B7F8367FFD0D3B47A340E552 - - includeInIndex - 1 - isa - PBXFileReference - path - WeightedTerm.cpp - sourceTree - <group> - - B81AF4DCAB32055DE66E5D33 - - baseConfigurationReference - 9CD6BDD301B7519975726D19 - buildSettings - - ENABLE_STRICT_OBJC_MSGSEND - YES - EXECUTABLE_PREFIX - lib - MACH_O_TYPE - staticlib - MACOSX_DEPLOYMENT_TARGET - 10.9 - MTL_ENABLE_DEBUG_INFO - YES - OTHER_LDFLAGS - - OTHER_LIBTOOLFLAGS - - PODS_ROOT - $(SRCROOT) - PRODUCT_NAME - $(TARGET_NAME) - SDKROOT - macosx - SKIP_INSTALL - YES - - isa - XCBuildConfiguration - name - Debug - - B823E795CC4D3B4FDE1B58EF - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - CLuceneSearchService.h - sourceTree - <group> - - B84EE766812476ADCA340E4F - - fileRef - 4A8182DAD922EEA758912911 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - B856141B1173CE2EFE8ED678 - - includeInIndex - 1 - isa - PBXFileReference - path - SegmentTermDocs.cpp - sourceTree - <group> - - B877400FD31A6652C7AAC8CD - - includeInIndex - 1 - isa - PBXFileReference - path - SkipListWriter.cpp - sourceTree - <group> - - B9102649C2D71678FBB99DF2 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - StdHeader.h - sourceTree - <group> - - B9805AA190C8FB1E34C5C83C - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - _TermVector.h - sourceTree - <group> - - BA103070A28E52E2A3B68269 - - fileRef - 409759A8EE20EEF807C16A00 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - BA13458C60157054AFCB328E - - fileRef - A9F2A9DF77DE363B59D5A3D2 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - BA3FDE7A3BDE7E6D54F35FF8 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - _SegmentInfos.h - sourceTree - <group> - - BA47DBA6DF8B871E57D8A4D6 - - fileRef - 2CB9B0BF446D4AC2D3C79603 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - BAF374A7D2860D3FA1D8494B - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - SpanOrQuery.h - sourceTree - <group> - - BB405FA94189D729F49CE9D2 - - fileRef - 1CD442F55AD2DF0FCB82C0FA - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks - - - BC460C65A439E9ECFDE9F808 - - fileRef - 8BEC681EA30CDEAEDD994D1E - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - BC796953DEB73943876E81F4 - - fileRef - 1A636497488BE25165F4F693 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - BCF6C62BFFC7A9BC06B4A6BD - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - stem_ISO_8859_1_finnish.h - sourceTree - <group> - - BCF8B5A56F3F93E62EBC2BC6 - - fileRef - 312B6732CF362A5063C355C6 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - BD336D0DA50FEAD102357114 - - children - - 0ABBE983A33847A589542588 - - isa - PBXGroup - name - src - path - src - sourceTree - <group> - - BDEFE3AE1B3FF4537D6F9018 - - includeInIndex - 1 - isa - PBXFileReference - path - Highlighter.cpp - sourceTree - <group> - - BE037198C3D6B59586DE7429 - - fileRef - 02F50EAB86CAE1ED535971B6 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - BE073D79CB0AB53262541D42 - - fileRef - 70D62A6FCCD8009631F4C6B8 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - BE2F47A488D73C6E6FEBC4E7 - - fileRef - F3CE13D2A1D6E011DFE0D522 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - BE6808BFA9DFE1A2547D6FA6 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - BRSimpleIndexable.h - sourceTree - <group> - - BE9EED90D05EF52F2A40D4C7 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - path - BRFullTextSearch-dummy.m - sourceTree - <group> - - BED9C5C2FF914A6651CC715A - - fileRef - B7F8367FFD0D3B47A340E552 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - BEED5B1092D99641727130B2 - - fileRef - E29D30D90FC11C94346B7872 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - BF12E6D889E376912A1E4882 - - fileRef - 4B95006EFEC94C8431EC73C4 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - BF3B851C22C6106FC8DD9B32 - - fileRef - C980C3B30E2E00F6F279FEFB - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - BF6150861FFDC09C5CF2207A - - fileRef - DCFE654EC0E3893795CCFFFE - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - BF62A616E6CCBE202F8723FD - - children - - AE4225ED729489FC536F9FAD - - isa - PBXGroup - name - core - path - core - sourceTree - <group> - - BF703906459BFF08961E8459 - - includeInIndex - 1 - isa - PBXFileReference - path - FieldSelector.cpp - sourceTree - <group> - - BF99AFAC81F89594080A9FF5 - - includeInIndex - 1 - isa - PBXFileReference - path - stem_ISO_8859_1_italian.c - sourceTree - <group> - - BFB890C04CA5D75ADEF01D5A - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text.xcconfig - path - MagicalRecord.xcconfig - sourceTree - <group> - - C03AC17FB33C9AB761591E7E - - fileRef - 83627788A4FE6814D4E84532 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - C06ED29B2C8DFAE0205112D1 - - fileRef - A7683D7979A1A0F42DBBC564 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - C06F260C584A9BAF8A8BEF19 - - fileRef - C535DAD8BE9908E18C56BD71 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - C0D1C157A05FD6CDB89730AF - - fileRef - D917D861D2705399CA798E2D - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - C0D9DECEE9BDE170E0072528 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - SpanFirstQuery.h - sourceTree - <group> - - C0EAF758D7AEE01F9D37A824 - - fileRef - 51898E80E36EB4E1E67EEC6E - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks - - - C18649E0653062CD8E15DF69 - - includeInIndex - 1 - isa - PBXFileReference - path - MMapInput.cpp - sourceTree - <group> - - C18EADF4328E7FF2A9A148F9 - - fileRef - 948089ED32D0068AE6869FB5 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - C1E529C1BAE1BE9D818A0668 - - includeInIndex - 1 - isa - PBXFileReference - path - MultiFieldQueryParser.cpp - sourceTree - <group> - - C1F1B4D0AC5682B06320D9E9 - - fileRef - 0A97DB030433E0FBC407E444 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - C21C5DFFA208C0CE56DCAE02 - - includeInIndex - 1 - isa - PBXFileReference - path - SpanScorer.cpp - sourceTree - <group> - - C220EC33CA7950F19251A110 - - children - - E14EDDB3716129A4BF4EF89C - D57977E13142ECAC7AB4C0D0 - 1A636497488BE25165F4F693 - F79F15DAFEA74A183E799C00 - 155156FB5232E476C5BEFE69 - 38F75157E9C14AD14BA0688A - A4318B9B2C25AB4DD2E4945E - 786A14394C5785E12BDF1604 - 7A67827FE646216ABA48FE90 - 8E7B5611206F1E338857A2F2 - 562AA4BBB97F9770F02ACDFE - 362F1C53F906F8AC32F2540D - 63F7F2FC27A2E8DC23D16A62 - 1BE8B43E4C0FA56BA5C606CB - - isa - PBXGroup - name - config - path - config - sourceTree - <group> - - C24D152E26A859E51F7F6323 - - fileRef - EC295BC4F71D120F12A0B700 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks - - - C32155AB6FC07A0FCDB3778F - - isa - PBXFileReference - lastKnownFileType - wrapper.framework - name - Cocoa.framework - path - Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/System/Library/Frameworks/Cocoa.framework - sourceTree - DEVELOPER_DIR - - C35160996A6069F736E08CD6 - - fileRef - 3E95C3748BBAEC50D8996327 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - C36572C22F0810966A3FBEC8 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - NSNumber+MagicalDataImport.m - path - MagicalRecord/Categories/DataImport/NSNumber+MagicalDataImport.m - sourceTree - <group> - - C3F0891B61858F56D951C8D2 - - fileRef - 442086ACCE4B2B830D4A5EE1 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - C3F404DE2DDABAC54DD84859 - - includeInIndex - 1 - isa - PBXFileReference - path - stem_ISO_8859_1_finnish.c - sourceTree - <group> - - C3F9061EA1162E79EDD98612 - - fileRef - 844AD46B4186B91889A4B8A3 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - C4423D50EA85E95FA336F469 - - fileRef - ADC6E11451B63EDC85FA7EEC - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - C4653255232E1D8E11B749C8 - - fileRef - 89B12780EB9920E7A67E675C - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - C4746ABB9C5EF227DC128850 - - fileRef - 6E2DD52F25C4E441561BE4DE - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - C498EB2C9653CCE2FC46380F - - fileRef - BDEFE3AE1B3FF4537D6F9018 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - C4CD45BB47AC2A48DBF26439 - - fileRef - 70C0AD0014451BD7E01B8E02 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - C50C11930D596B7F271C9884 - - fileRef - 2129341487E9631B16EC189A - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - C535DAD8BE9908E18C56BD71 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - stem_UTF_8_english.h - sourceTree - <group> - - C542580D94206570FA3A404C - - includeInIndex - 1 - isa - PBXFileReference - path - stem_UTF_8_porter.c - sourceTree - <group> - - C5FF0659B894D438991B3DE2 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - FuzzyQuery.h - sourceTree - <group> - - C65F571EB762BE576C0F6C5E - - fileRef - F4AA9AF46839F6C4F71A560E - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - C6DF822A092B218B0CBE0264 - - includeInIndex - 1 - isa - PBXFileReference - path - IndexFileNameFilter.cpp - sourceTree - <group> - - C6E3F041EA34C05DFFA221EA - - fileRef - A0B8BA7ACE9AF34281DDBBBA - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - C72049DE366960573B482155 - - fileRef - 40DC189BFC7CE6FF83BE6C1E - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - C72A666E81D292E4882DA54F - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - clucene-config.h - sourceTree - <group> - - C740B635A63A158562CF8ED0 - - children - - 69372940E94E75C00F57FF6A - - isa - PBXGroup - name - CLucene-Shared - sourceTree - <group> - - C74181D7868878A5229CD4DD - - fileRef - 47D7C1D2936FAE9952F8D28F - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - C7533A47E93EDDC11351B054 - - includeInIndex - 1 - isa - PBXFileReference - path - MultiTermQuery.cpp - sourceTree - <group> - - C75D30FD6471A4E92CC2E865 - - fileRef - E83DFB9CBAE207A9FE7D4F07 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - C784A26DC3D42B8A6DDCE84B - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - BRSnowballAnalyzer.h - sourceTree - <group> - - C7CD8F9F4E68E3F7C75F214E - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - Formatter.h - sourceTree - <group> - - C828273031603EEEA7202D4D - - fileRef - 4248F0F424A12A978018EA55 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - C870C384C7C4CBB3DF0792D5 - - fileRef - F5BBBAD069D2F558001F1DEA - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - C870FD179CF3136E1ED64001 - - fileRef - 3131A39A41162501CD0FF3C2 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - C8BAD2137A90B629C9BC6FB5 - - baseConfigurationReference - 31E610CCDCDC112AD2317FE1 - buildSettings - - DEBUG_INFORMATION_FORMAT - dwarf-with-dsym - ENABLE_STRICT_OBJC_MSGSEND - YES - EXECUTABLE_PREFIX - lib - GCC_PREFIX_HEADER - Target Support Files/BRFullTextSearch/BRFullTextSearch-prefix.pch - MACOSX_DEPLOYMENT_TARGET - 10.9 - MTL_ENABLE_DEBUG_INFO - NO - OTHER_LDFLAGS - - OTHER_LIBTOOLFLAGS - - PRIVATE_HEADERS_FOLDER_PATH - - PRODUCT_NAME - $(TARGET_NAME) - PUBLIC_HEADERS_FOLDER_PATH - - SDKROOT - macosx - - isa - XCBuildConfiguration - name - Release - - C90E01473FB1E46DD4761AA2 - - fileRef - AD3C9DB0E23F991F4C412F2D - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - C9496282861D02B1FBA2F10E - - fileRef - 36B678E77A0F7B6CA64CA9C3 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - C980C3B30E2E00F6F279FEFB - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - CLuceneSearchResult.h - sourceTree - <group> - - CA4AA1338B4272EAD5A872B1 - - includeInIndex - 1 - isa - PBXFileReference - path - FieldCache.cpp - sourceTree - <group> - - CAAF0F464DB433FACE770BA1 - - fileRef - C72A666E81D292E4882DA54F - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - CAB79397DF8A4C235996B0B3 - - fileRef - 49CF50AE21C1B3B6B7816778 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - CAB7E718170EC7A6AE23FFB9 - - buildActionMask - 2147483647 - files - - 6CCB77DA87B998A8B61BC6DE - 9A8FF6F563B9C1BF95460529 - - isa - PBXFrameworksBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - CB64360BA725551FF3FA25E7 - - includeInIndex - 1 - isa - PBXFileReference - path - stem_ISO_8859_1_english.c - sourceTree - <group> - - CB79D0DC0044534AB0F505B1 - - includeInIndex - 1 - isa - PBXFileReference - path - SnowballPrefixFilter.cpp - sourceTree - <group> - - CCABD97B890D59731AB152D0 - - fileRef - D0119306BF9BF8EFE979BD0E - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - CCFF1493518FB99577564F3F - - buildActionMask - 2147483647 - files - - 440D2FEF648D6A5A1F5DC328 - D4617DD0D5828672B23FF704 - D5DB816B898D2A8E93EBF313 - DE44F9BAB681A18D272BDDBC - 2A6CC3FCA3EB97EC96BA377A - FC7C2C3F8326F2ABE0F8090C - E02A5D836D21BAA07DDFF42D - 1CFCA09993711542766B2297 - 6F8F79EC8B56F954D26A71A3 - DEA003332A46565D2EB6838B - 590C34AC821D4F0DF15A21D7 - 429F01F70DE12B22E53337E0 - 4919E166B2A71DCFC074BC06 - AB7FC1BCC4B5E219B2AA06E5 - F6E41F05ED93AD5049DED951 - 30C46B16C318916C4F51E9C3 - 90F13BCC048E3A5E624CDA4E - 7E83FCB69283A4B2985BB424 - 37C04BB15D4A242604B6BE78 - FBEC581DCB84AE98C02C1EB6 - 4462F8C6D72CDABA27E1917A - 6F778ECEE21E745C93092E73 - CF340FF07389BA7EBCFFB2B9 - D940A43133EE9AFB874D8B95 - E1BAEF19D0A8593DD765F208 - 3699F996D9094758D1DC986F - 79E9A093A0E7A65925D246F8 - 7F58050DED0BDE11CA1EC628 - 5E3F9E98FB11716B40F38401 - 243DDBEA15D23ED920060166 - 7E7D97274C7ADC72C7EFB670 - C35160996A6069F736E08CD6 - 3A4CA7E7F0E75AE2BE1064F0 - 33523731E85C50496BB0D3F3 - A3930D019F8827C48104E78D - BF12E6D889E376912A1E4882 - EE814358ABA1942D3DEF0E97 - 9955878AA03237E0CB02BF17 - 4E1CA108776EA4E8215CCA90 - 10EB0D800EE7123C91C217E6 - E13F1E0BC6AA0D24B66EF733 - 34E1F09B55D10524E46AF35E - 7544C7B1A2C5AB13732E738F - 9B8EB40480E72D2D27EE525D - D58348A6BC6D6CBD51183D96 - 195B4FF23189D6EF908554CB - AF882C715B67CDDAE23B8B5F - 09318330599B23C187A0D39F - 695E9064B29692F43AFE0AC4 - F3AB4D82F24BE28AF5DE69EA - 37E3FBE03C28C2E536B88777 - F08251AC4BAB27561F324491 - 5A1A22FA6EFC4F86423DB424 - 4C19C31B371CDE374C4D9C10 - E30D0235196B2AE517131BD7 - 51F95572A135E3913051A587 - D5F09C3305D91B327E95B3BA - 4CA768EEB4819A39380AE8B1 - B7ADFF99289ACA83F3ABDD13 - 49F84351E1E38068CC0D71DD - C870C384C7C4CBB3DF0792D5 - 253AEB30B4859A28CB0EDE5E - BC796953DEB73943876E81F4 - 305B095CCB80D7DE617E5E4D - A14D182393A5D92C6F4F28A1 - C498EB2C9653CCE2FC46380F - 2D00A9659811DDA78645A731 - 3A6F3D448A38DFBEA03F1D72 - 87B55005161C10B066AEBD2D - 9FC0B79657B9F18EC5969A3B - 30658F484852B5F33FAA9ADA - 7D5289A7260A0C653F50B305 - 7FC6F64AD63F83B0ABF6D817 - BC460C65A439E9ECFDE9F808 - 8C610722AEFFF091BDA071BF - 24696B8F00C914CC4C18EBBA - CEB1655B4B9116B39A77D9B0 - DB52883401309DF8ECC831A5 - 406A8E494A75C3B9F996706A - 427F752330DA28AFAE2E9E66 - C3F9061EA1162E79EDD98612 - F27001914ED5191225F6CAAB - 080BB7AF262B5C0AE8054CB3 - 6623B92F94601207C7749CE1 - C1F1B4D0AC5682B06320D9E9 - A6C6AF7C830252CFEE4D2D71 - 9D0334E15CE35BB7C65780DB - F8354F8C787CAAC8A0CF7595 - 77E6B9619A97DF9912B0F296 - 54C8D4EB4D1F506A5459D293 - 03BF35A04A66763195E9D653 - 57B5B8AEA2FF629E242E085A - 06AADEB47F1C60A63DFC29F9 - 0360F45A6C384D2CDA3E2BA6 - 998AD47AA4F168240902199B - 013410F3BC97F5CF3784C953 - 5DA97E8AD2E29FE664BC3EE2 - 50C128F283F13120444CC6E4 - 28A14FF2ECC0944300D94357 - A43DFC3E4B4984D3945CAAB8 - 44A05BA5CCBA6202331377C1 - 09A26ABC28537AF4BC20656B - 4D57D8087F2E20C675E3707B - 15BF2919D47611C4069837F7 - 2832B92D6D15EA9401BB9884 - 6B75BC237B59277C70595329 - E850FC1CC91331ED91243B14 - C65F571EB762BE576C0F6C5E - 928D8B051FFD1345541780AF - 301BF744D532B5131903AB5D - 6593A64EBDA22285E850FF12 - 0729888C45D15F4D5B5BB4DD - AB36E4DA56D73D1E24B0CE82 - 9EFD58C08FC0ABFD016D6A49 - D91A73F8DC6615804D89008E - EBCCF241A1D7D202FBBE6B3E - BF6150861FFDC09C5CF2207A - 0F92370FB239F7E9FA796A7B - E6A6C69DE1730641690A4979 - E8EC724385A92DA778A51FE6 - B083DC69528B46DDEE477376 - 83AB55E56ABD3FC1003170B4 - 80C1CD7BB82AC6ACEDC1CEEC - 6845FB93DCC34AF70030E554 - 920B23B11EF457BE017D2F92 - 45495922837A15D8CA9BAF76 - 1F9829C835D3E19A1E6B3FB8 - 0EC48C3A43957CE026412A39 - 152C463442D4A72EAF51791C - 4F9A83F749F24E78ED83CF1F - C50C11930D596B7F271C9884 - A1C6D1AE085BBE339576710F - D42AFC123524C38487B344FF - 9F17F9A3CFBFEDB695DDD7B2 - F136F5B5F766A33B6D15A02B - B1F639323388DECFD62C4BC0 - 08456763BBF74807D8095589 - 301267A9E07F4D873C85CCEF - 51EA40A7522B5BFFC4D7B91A - E792F895C64711FC79240956 - 62D354DD1967B587331FD426 - ACDAAAAD397A797186069181 - 181CD4EBC1E580A208CF923D - EFB542AE8CB71405A836FDFA - ADD30DBA60876E6C022CE967 - F1D87226F3CF3896F9625AA6 - 2C7FBE0EBC9249571E79319F - A60F76DA9CA00841DDD26A97 - D2C56C507313EA32143D8A4F - 5A6D7D17260B36E539076C91 - E44F9D0E5C59E38EC959EA80 - 7A60B69C48BE2A220D7545A3 - 7FBAC1C882ABD287937C4AA9 - C74181D7868878A5229CD4DD - 47386A560834D676739B900B - 59091771D56586B49874ADAF - B74C8199D1B0484695648342 - FEA6680ADEAD32CD4B5964D0 - 44F42243D7D11BC758312094 - 387C40E1CDFF6C21CF1C4F3C - 97D50BC30559403DA837619A - 5FD0C2F6E5F8441E5E8DEA7A - B116356E17C007CFE283A6F0 - 118408488EC49DD912A4C368 - CD5455DEC60837E947125410 - A851D2A08D3C2CEF3C89CE64 - 7890CBAACAF188DDB27E68EF - 34C6C036D2F25DFC22971842 - 242B3AE8D69D8CED6F4D9BEA - 53FFCDFDA054A7492FAA75D2 - 6CF053389187BF88593C75AB - 61C5AAD405353B39369BC7C7 - DE7C46DB992A116CB0B32BD5 - 9E43A7B98336488E2005113C - 200083713F5DC50EFB5BB932 - 377BF0055E6E99A9E399278F - 22EA58D8B324383EFD340FAA - 0FE0CBE38C5D274E00EEDC55 - C4CD45BB47AC2A48DBF26439 - C06ED29B2C8DFAE0205112D1 - 21292FADA31E191AC302BDD5 - 32271FFE9DDDD68CC4EA89B5 - 9F9672D9CA55FEF7ED32131A - 043F744D3328A6E02C3BEFF2 - 9EA9C84967A947D3D2A0B8DE - A55BDEBA7D50F13C7F656188 - 91927D63F4B7DA4714A6B9B5 - 35B7E2DC6D9E23A2E7382A9B - D031FA4EF645A21984C61098 - 913C5E97C04853194B436DD3 - D144A43ED75CDE80715D5C71 - C4746ABB9C5EF227DC128850 - 190AC441C678A51938BFBCBA - 839D99A8FBC9D1B694304622 - CEB479289D754038C8B466D8 - 449A559F1E10CCF219DBA69A - 81EB85C74D3E72B46FE76EE6 - FBA68CA92B80969C30723D19 - 03770883807DC15581BE2CCE - 1F4A799182C2391F356C71FE - A1383548ABC7A5E8E709A989 - 9D75F866824E80CC2CEE80D2 - 85B6A8D282AB979D2C9306C7 - B788444CD667B0A9E0D80752 - 0F816C24AEB9795B5D941711 - 8B5AC20AEFBF506262E8EB2F - BED9C5C2FF914A6651CC715A - 118288AC61EF93BD51671258 - 9BC7A16E7235D8F692ED7D9D - - isa - PBXSourcesBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - CD5455DEC60837E947125410 - - fileRef - C3F404DE2DDABAC54DD84859 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - CD93E10F4B83A98C5C2520D7 - - fileRef - 386C640E51679532F5FF9ED0 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - CDECFA15A8310A4AF8891134 - - includeInIndex - 1 - isa - PBXFileReference - path - SimpleFragmenter.cpp - sourceTree - <group> - - CE22856C0A806BA6945E4B0E - - includeInIndex - 1 - isa - PBXFileReference - path - StandardTokenizer.cpp - sourceTree - <group> - - CE27B167B62B0EFC1CA8E72A - - includeInIndex - 1 - isa - PBXFileReference - path - utilities.c - sourceTree - <group> - - CE63A3C1BD760C1054AB8E93 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - SimpleHTMLFormatter.h - sourceTree - <group> - - CEB1655B4B9116B39A77D9B0 - - fileRef - 61AC916A487A8E6BB2914B95 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - CEB479289D754038C8B466D8 - - fileRef - 7FB72AC49BF248F6BBD0B3A9 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - CEC1CE34FCA634B4C51E8599 - - fileRef - A8CEE116B82F35158CBCCDC9 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - CF340FF07389BA7EBCFFB2B9 - - fileRef - 4466C8453BCF3B60B96A3C42 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks - - - CF45B905FBFF4BD88AC307B0 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - _SegmentTermEnum.h - sourceTree - <group> - - CF62722E51E340032926877A - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - stem_UTF_8_dutch.h - sourceTree - <group> - - CF7FA6CFBE211694C4F32891 - - fileRef - 70DDEBC633508131F640649C - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - CF9533303E09BD0025E59D73 - - fileRef - 2476266DEC41B33D47656FED - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - CFC357186F781B6A74FE9799 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - SpanScorer.h - sourceTree - <group> - - D0119306BF9BF8EFE979BD0E - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - _NearSpansOrdered.h - sourceTree - <group> - - D031FA4EF645A21984C61098 - - fileRef - 47A64746E8A4AB0079EBCC9A - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - D0480E10EE4C95D350145E07 - - fileRef - 74F59A4E197380B527ACFE42 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - D077B13BA27992608E0CB9D8 - - fileRef - B2500BEA802349F98F35609B - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - D0C759B2986C448BC8FEDE43 - - children - - 1D1EF24477F0B7EC15959510 - 03443F5C8542A0223CA7B57C - CE22856C0A806BA6945E4B0E - - isa - PBXGroup - name - standard - path - standard - sourceTree - <group> - - D144A43ED75CDE80715D5C71 - - fileRef - 535F155D51FE18E4A9433AF4 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - D1C6567E7C9FBD4C8304CEF2 - - fileRef - A48BF9274EB8E8E8FFCFBE31 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - D21321FC49273301F47DC33A - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - MultiReader.h - sourceTree - <group> - - D2C56C507313EA32143D8A4F - - fileRef - D51B4F3C4C3C26DBF307234B - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - D32D9320DA483226E3D57836 - - fileRef - 7B795848D1FD5EAC6051F130 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - D349E9379BF5C7CCDAE81975 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - QueryParserConstants.h - sourceTree - <group> - - D35FAB33AD099D975C304FAF - - fileRef - E192D9501555CA6399805DF2 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks - - - D3D774CB08FCC9BE1FF957C6 - - fileRef - C32155AB6FC07A0FCDB3778F - isa - PBXBuildFile - - D40A94AF8DFD9174D7D50EEE - - fileRef - B2D6DA1FB407EBEF0E25D519 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - D4266C6C0A14AA3CEFD6DB6A - - fileRef - 8B8DEBB9B8A8ADF3AF92A3A8 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks - - - D42AFC123524C38487B344FF - - fileRef - 7BAEBDFF1A79EAE2E7979748 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - D4617DD0D5828672B23FF704 - - fileRef - A8D6FC6E7D84D0ABE67EF281 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - D4CE204C3D7DE467FABF48FE - - includeInIndex - 1 - isa - PBXFileReference - path - stem_ISO_8859_1_french.c - sourceTree - <group> - - D51B4F3C4C3C26DBF307234B - - includeInIndex - 1 - isa - PBXFileReference - path - Sort.cpp - sourceTree - <group> - - D54734A5503F6CAE11B03F30 - - fileRef - E14BA43AD9A9EC79033772A8 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - D5669F43D9F68E4AD34B2DDF - - fileRef - FA39AE906049AC2B497ACA70 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - D57977E13142ECAC7AB4C0D0 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - _threads.h - sourceTree - <group> - - D58348A6BC6D6CBD51183D96 - - fileRef - 2641A61D34F8C1C2EDC8DFDE - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - D5DB816B898D2A8E93EBF313 - - fileRef - F806ABD958C934169EB42392 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - D5F09C3305D91B327E95B3BA - - fileRef - 501D0883F2A4F56BE0756325 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - D5FBFA64843318233672A876 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - _IndexFileDeleter.h - sourceTree - <group> - - D627263226B4ABE81E64AB39 - - fileRef - 9A710CFD82BEBB27F78BE0BB - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - D62CFEDE9ED06F852D37F4CA - - includeInIndex - 1 - isa - PBXFileReference - path - TermVectorReader.cpp - sourceTree - <group> - - D671E804F1835ED7AB67C31F - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - _VoidMap.h - sourceTree - <group> - - D6D64F07BBB9EC93E095D5DC - - includeInIndex - 1 - isa - PBXFileReference - path - TextFragment.cpp - sourceTree - <group> - - D7FA7F432C39C397D10CA59F - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - CLStreams.h - sourceTree - <group> - - D81CB7126001B0556DCF1469 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - TermQuery.h - sourceTree - <group> - - D8B4C5463CCA333326BD42F3 - - fileRef - 4D55BD9697E6BCADB3282B21 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - D8D0766B2192C3CBEE19E5CF - - includeInIndex - 1 - isa - PBXFileReference - path - QueryToken.cpp - sourceTree - <group> - - D917D861D2705399CA798E2D - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - stem_UTF_8_french.h - sourceTree - <group> - - D91A73F8DC6615804D89008E - - fileRef - AD7DDAB5A9A587177FB1A1B1 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - D940A43133EE9AFB874D8B95 - - fileRef - 271ED031E0F757B79527FB6B - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - D97B67805AB6500196B8B825 - - includeInIndex - 1 - isa - PBXFileReference - path - WildcardQuery.cpp - sourceTree - <group> - - D9E5F6E1BC3CD2169EBCC4B1 - - fileRef - 3A83D9FB4F1A8ADE8F88351D - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - D9F5490951A1FEB8FAD0D0FD - - includeInIndex - 1 - isa - PBXFileReference - path - FieldsReader.cpp - sourceTree - <group> - - DA0F2E6D0938AAE0D7BB4B53 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - libstemmer.h - sourceTree - <group> - - DA45340425C9B0DE4B37AA5E - - includeInIndex - 1 - isa - PBXFileReference - path - CachingSpanFilter.cpp - sourceTree - <group> - - DA68322F59E7E529DB16D228 - - includeInIndex - 1 - isa - PBXFileReference - path - MultiPhraseQuery.cpp - sourceTree - <group> - - DA6AA5C109D6D9DAFCE63C1D - - children - - 5751C53969476442315C03BD - - isa - PBXGroup - name - src - path - src - sourceTree - <group> - - DAF81D58676B0A89A16A26E8 - - fileRef - 47BACAA9594FEC7A93229AF8 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - DAFD315DBE90FF61B09A25CC - - fileRef - 18BA412EE13898290E2030AC - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks - - - DB52883401309DF8ECC831A5 - - fileRef - 85D2648328D35201AC4327B9 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - DC02470A3644F4C2181CEAC1 - - buildConfigurationList - 9D107D1C7415FED77CDF0CE7 - buildPhases - - CCFF1493518FB99577564F3F - 8B4AE5F1C77C27125EED1BBB - 2FBACE2EE415DF586B563177 - - buildRules - - dependencies - - isa - PBXNativeTarget - name - BRFullTextSearch - productName - BRFullTextSearch - productReference - 123CDC8591D7F01EE0A4C44A - productType - com.apple.product-type.library.static - - DC0BC55C3FE62A086294C1FF - - fileRef - 744440FD403223694C01FC48 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - DC25F85BFB1EC5CCA4C96E56 - - includeInIndex - 1 - isa - PBXFileReference - path - NSData+CLuceneAdditions.mm - sourceTree - <group> - - DC4DE131509C84869B471740 - - includeInIndex - 1 - isa - PBXFileReference - path - stem_UTF_8_russian.c - sourceTree - <group> - - DCA68B0D72443D070132338F - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - QueryFilter.h - sourceTree - <group> - - DCF71175514B1BD48813B3FF - - fileRef - D349E9379BF5C7CCDAE81975 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - DCFE654EC0E3893795CCFFFE - - includeInIndex - 1 - isa - PBXFileReference - path - RAMDirectory.cpp - sourceTree - <group> - - DD072B075A6CC6CC6E4DCD97 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - Filter.h - sourceTree - <group> - - DE44F9BAB681A18D272BDDBC - - fileRef - 8CBBB222E5DD36F84DCA3202 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - DE57FA1CF82AB7A41E081F30 - - fileRef - A49D6DB1468421D91AAED79F - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - DE6EAA4DA0659DD75C3E8942 - - fileRef - F2D87756AF5F2980FCEE5B2A - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - DE7574A9B5479A14BE8228F6 - - fileRef - 848A1821320EBB4229677D9B - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - DE7C46DB992A116CB0B32BD5 - - fileRef - 55A4EB265DEA007DE02327BB - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - DE95A8EF702A2DD36F42514A - - children - - EC55E4C0ABB20AF87127A12F - 386C640E51679532F5FF9ED0 - EE672BE213D83C93DE4EC8C9 - 645D5A116604A038D8B77398 - D349E9379BF5C7CCDAE81975 - A27826A65F41BD47F6CE9F11 - 848A1821320EBB4229677D9B - - isa - PBXGroup - name - queryParser - path - queryParser - sourceTree - <group> - - DEA003332A46565D2EB6838B - - fileRef - 369E8C97AE2FA6290BE626D1 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks - - - DEE6EA55109F794EF410C365 - - children - - 31E610CCDCDC112AD2317FE1 - BE9EED90D05EF52F2A40D4C7 - AA80D6A3BEF114FE2D7EF53C - - isa - PBXGroup - name - Support Files - path - SampleOSXCocoaPodsProject/Pods/Target Support Files/BRFullTextSearch - sourceTree - <group> - - DF1AB8C9325ED4A2224E7136 - - containerPortal - 52153A8DF28C8AC4CC156C31 - isa - PBXContainerItemProxy - proxyType - 1 - remoteGlobalIDString - 4208DA7F7EE1D2461B44D7B2 - remoteInfo - MagicalRecord - - DF28BCFA6EC66788F3A5BD18 - - fileRef - 7AA956FF6436661D47D57158 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - DFE22055C25A528C0FFB5E5C - - includeInIndex - 1 - isa - PBXFileReference - path - AnalysisHeader.cpp - sourceTree - <group> - - E02A5D836D21BAA07DDFF42D - - fileRef - 2FC2CAD124AB27073E741E9C - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - E0D609D9BDF0DB466267627A - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - RangeQuery.h - sourceTree - <group> - - E13F1E0BC6AA0D24B66EF733 - - fileRef - B3D1EF3AC7F78FAE4E26F381 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - E14BA43AD9A9EC79033772A8 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - Hits.h - sourceTree - <group> - - E14EDDB3716129A4BF4EF89C - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - _gunichartables.h - sourceTree - <group> - - E180438D793F55DE426B4653 - - fileRef - 95560B5AE136BA253101DAEA - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks - - - E192D9501555CA6399805DF2 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - NSManagedObjectContext+MagicalObserving.m - path - MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalObserving.m - sourceTree - <group> - - E19AD1B36D0CB3A8A4F0367D - - fileRef - F6C54E5B2EF9746565CFCFC9 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - E1AB86C99D0FA6D681051B4F - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - Directory.h - sourceTree - <group> - - E1BAEF19D0A8593DD765F208 - - fileRef - A6F8B10607CAE4D6B22F5FB3 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - E1F2CD6045BBAD32DAA02480 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text - name - Podfile - path - ../Podfile - sourceTree - SOURCE_ROOT - xcLanguageSpecificationIdentifier - xcode.lang.ruby - - E24A26179CC2DD0FDE821589 - - includeInIndex - 1 - isa - PBXFileReference - path - FieldsWriter.cpp - sourceTree - <group> - - E28A0D9C4FB2F3C057798518 - - children - - 4B90B4BC85F70222B88F0386 - - isa - PBXGroup - name - contribs-lib - path - contribs-lib - sourceTree - <group> - - E29D30D90FC11C94346B7872 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - _FieldsReader.h - sourceTree - <group> - - E30D0235196B2AE517131BD7 - - fileRef - 0FDFBF7BD33462F62E7D4295 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - E3A7461047459D318B3F19EF - - includeInIndex - 1 - isa - PBXFileReference - path - condition.cpp - sourceTree - <group> - - E40CA6F9396553B96FB8EEFE - - fileRef - 80DBF89051C4CD70EEF319C1 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - E44F9D0E5C59E38EC959EA80 - - fileRef - 9C21C9348CC12C1621C8096F - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - E4503098668D6FAB1E778591 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - SpanFilterResult.h - sourceTree - <group> - - E48AAFF138B2453FE8F53DD4 - - children - - B0BF5CEF9F8DDBF215F6FA6D - EB5D30DC10B34B0CD7D4AA0B - F074DD4FDE802625C766268A - 21CC225E952E964C7965A94C - 710AA2A3AAB0D639AACF7559 - 05F7D54603AE2F1EDEF8CB82 - - isa - PBXGroup - name - analysis - path - analysis - sourceTree - <group> - - E48D86965B56A2255D066DBE - - fileRef - 948C2CA0439320D5CEDAEFA0 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - E4B8B24D0DB6B1500AF3495B - - fileRef - 8138D42BFE19C72ED512257A - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - E4DFAE2EF95CB83A34C3258A - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - TokenSources.h - sourceTree - <group> - - E57E81ACE68C8FA04825AD86 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - NSManagedObject+MagicalFinders.m - path - MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalFinders.m - sourceTree - <group> - - E5F8A5E1CAF5E830270632A0 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - _FieldInfo.h - sourceTree - <group> - - E6620955B176223D69B75D52 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - stem_UTF_8_italian.h - sourceTree - <group> - - E687916575053E9A58BCF91B - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - modules.h - sourceTree - <group> - - E688BD58B65753889BC05F87 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - MagicalRecordShorthand.h - path - MagicalRecord/Core/MagicalRecordShorthand.h - sourceTree - <group> - - E69C261328FD27F7EDCB2D0A - - fileRef - A98DC9BE005694F521ECA285 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - E6A6C69DE1730641690A4979 - - fileRef - 1E8823AEAE55C1D50C1D4B95 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - E6F96E6A975A430766F12F66 - - fileRef - F97125F3BEEB6432A2FC6666 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - E792F895C64711FC79240956 - - fileRef - 48A0664593C1D51A2DFC158B - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - E8140E441AC63660E6DE20A3 - - children - - 16BF906B6D21239D5A3B3AC7 - A078A106FD166CCDAE36465C - 04022581BF6D105211A03192 - 572574B8A64BA55DAD0C5DC3 - - isa - PBXGroup - name - analysis - path - analysis - sourceTree - <group> - - E828D2189386C14427BDDE41 - - children - - 6E97EEF5F7867E2493B8B61A - E687916575053E9A58BCF91B - - isa - PBXGroup - name - libstemmer - path - libstemmer - sourceTree - <group> - - E83DFB9CBAE207A9FE7D4F07 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - _condition.h - sourceTree - <group> - - E850FC1CC91331ED91243B14 - - fileRef - 0FCC1A0ADA84B8291678123B - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - E8EC724385A92DA778A51FE6 - - fileRef - 609B4FF3FA05835CEC3E05CB - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - E942FCC23B283FEA2BA67DA4 - - fileRef - 7E59130FC6CDE43416B6A265 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - E9589FA346C37BC268E98BCD - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - NSManagedObjectContext+MagicalSaves.m - path - MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalSaves.m - sourceTree - <group> - - E9B183904DF39550705B4B55 - - fileRef - 56AC9D33808FEB6D81144E21 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - E9CE7457AD9E75FAC9836EB8 - - includeInIndex - 1 - isa - PBXFileReference - path - stem_UTF_8_danish.c - sourceTree - <group> - - EA5AE29DCF9538980779C10D - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - PriorityQueue.h - sourceTree - <group> - - EA6F11CABEBB4EFBC304C09A - - fileRef - 3239680A2176026B7AC6BFC0 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - EA854CAAADAB25FA30958CA2 - - includeInIndex - 1 - isa - PBXFileReference - path - MultipleTermPositions.cpp - sourceTree - <group> - - EA8EEE3704486458D9C8C2E8 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - MatchAllDocsQuery.h - sourceTree - <group> - - EAAD71F5DD9ABC8C059CCC1A - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - BitSet.h - sourceTree - <group> - - EABB423BBEB234E3F6CFCF91 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - FieldSortedHitQueue.h - sourceTree - <group> - - EABD9DED5EB90ABDBA398EC5 - - includeInIndex - 1 - isa - PBXFileReference - path - gzipcompressstream.cpp - sourceTree - <group> - - EB5D30DC10B34B0CD7D4AA0B - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - LanguageBasedAnalyzer.h - sourceTree - <group> - - EB6B8AD9F7E026FC24FF6E71 - - includeInIndex - 1 - isa - PBXFileReference - path - BRSnowballAnalyzer.cpp - sourceTree - <group> - - EB99DD89A8EB8EC08263F542 - - fileRef - 34286DEE91533CA4536D89AD - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - EBCCF241A1D7D202FBBE6B3E - - fileRef - D8D0766B2192C3CBEE19E5CF - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - EC295BC4F71D120F12A0B700 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - NSManagedObject+MagicalDataImport.m - path - MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalDataImport.m - sourceTree - <group> - - EC442525118A832FA43F1893 - - includeInIndex - 1 - isa - PBXFileReference - path - BooleanQuery.cpp - sourceTree - <group> - - EC55E4C0ABB20AF87127A12F - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - _CharStream.h - sourceTree - <group> - - EC95A0D94E525F0FF443976A - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - _bufferedstream.h - sourceTree - <group> - - ECB779CEE8EC9C5B47491700 - - fileRef - CF62722E51E340032926877A - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - EDEF9364CAF46C0AC695591C - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - NSManagedObjectModel+MagicalRecord.h - path - MagicalRecord/Categories/NSManagedObjectModel+MagicalRecord.h - sourceTree - <group> - - EE260CA140F8C6AAC0F5B3C8 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - Scorer.h - sourceTree - <group> - - EE672BE213D83C93DE4EC8C9 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - MultiFieldQueryParser.h - sourceTree - <group> - - EE79F6214478B885F26E24A0 - - includeInIndex - 1 - isa - PBXFileReference - path - IndexInput.cpp - sourceTree - <group> - - EE814358ABA1942D3DEF0E97 - - fileRef - 2A47FA093AD381399630D9D8 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - EEC396E3E6DE17540B6CBC85 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - SnowballFilter.h - sourceTree - <group> - - EF11B826F7E757C8B8CCE70E - - includeInIndex - 1 - isa - PBXFileReference - path - stem_ISO_8859_1_danish.c - sourceTree - <group> - - EF3FEC97BE828DA280B1F018 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - _BooleanScorer.h - sourceTree - <group> - - EFB542AE8CB71405A836FDFA - - fileRef - 6C63428323092452621CFC87 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - F02C4F2789A04E73F5B0D855 - - includeInIndex - 1 - isa - PBXFileReference - path - NumberTools.cpp - sourceTree - <group> - - F038EC511516E601025D64DA - - fileRef - 06C9586359A5DC76C4863402 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - F063C8EFBCD29E6F450C625D - - children - - 2C9AC39E9C1D7DAECECC4995 - - isa - PBXGroup - name - clucene - path - clucene - sourceTree - <group> - - F074DD4FDE802625C766268A - - includeInIndex - 1 - isa - PBXFileReference - path - PorterStemmer.cpp - sourceTree - <group> - - F08251AC4BAB27561F324491 - - fileRef - 29764B244C7A4D957BAD2CB3 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - F0C8DEEAD50643AB2BFE5226 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - StringBuffer.h - sourceTree - <group> - - F0D45B6DE0914737E3BA42AE - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - _BooleanScorer2.h - sourceTree - <group> - - F136F5B5F766A33B6D15A02B - - fileRef - B856141B1173CE2EFE8ED678 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - F14DFEBCA4B0A131C5DF9691 - - fileRef - 449093C8CF68608048BDE550 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - F1A309823CC8DB44FB9B5F44 - - fileRef - 82A5B5412D552346DEDD1835 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks - - - F1B1717012450477A27C6268 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - stem_UTF_8_porter.h - sourceTree - <group> - - F1B59457ADDA0A973E53F0D7 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - stem_ISO_8859_1_swedish.h - sourceTree - <group> - - F1D87226F3CF3896F9625AA6 - - fileRef - 4608B8A530C34BD269470979 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - F1E3A2EB8EA61982C41728A4 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - SearchHeader.h - sourceTree - <group> - - F1F56A5305879C4C9F8CBFB5 - - fileRef - 179449F335B5713A20B32E21 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - F22A61C2882E6FE4947DDE6E - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - MagicalRecord+ShorthandSupport.m - path - MagicalRecord/Core/MagicalRecord+ShorthandSupport.m - sourceTree - <group> - - F23904EDC1F8EC6B72113FE1 - - children - - 8CBBB222E5DD36F84DCA3202 - 718BA45D7D0FD507EACA9299 - 2641A61D34F8C1C2EDC8DFDE - 1C748C368580AE3D88CCC39D - 609B4FF3FA05835CEC3E05CB - 47A64746E8A4AB0079EBCC9A - 54857E8CC442C778CC079F55 - - isa - PBXGroup - name - util - path - util - sourceTree - <group> - - F27001914ED5191225F6CAAB - - fileRef - 153F4328C4EEFB6E792C78F3 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - F27D6554AAAF384B09ED0B5C - - fileRef - C5FF0659B894D438991B3DE2 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - F2D87756AF5F2980FCEE5B2A - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - NSManagedObjectContext+MagicalRecord.h - path - MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalRecord.h - sourceTree - <group> - - F31B19E73AC5F0A2B8E0D2F5 - - children - - 1DCB516F82B04687C57D53F9 - 49CF50AE21C1B3B6B7816778 - 0181CC26EE0AE3332D29CEE4 - E1AB86C99D0FA6D681051B4F - 4D1B57694F499630EF7CF055 - 4B0CA36BAEE1A26D923E859F - 179449F335B5713A20B32E21 - 8EEF9CF8195DF3ECE4DD6F66 - 5AF284DAAFFC323FE4040604 - 41978CEF7590A1AD32C02621 - - isa - PBXGroup - name - store - path - store - sourceTree - <group> - - F34179A41A6A3F1708FCAFF4 - - children - - DFE22055C25A528C0FFB5E5C - A8D6FC6E7D84D0ABE67EF281 - 6F17249E485658A3DF7EFAD1 - D0C759B2986C448BC8FEDE43 - - isa - PBXGroup - name - analysis - path - analysis - sourceTree - <group> - - F3AB4D82F24BE28AF5DE69EA - - fileRef - 52AFC005ECEEB85B802EB6A7 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - F3CE13D2A1D6E011DFE0D522 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - NSDate+BRFullTextSearchAdditions.h - sourceTree - <group> - - F48BE159E95731CF33E83EE9 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - DateField.h - sourceTree - <group> - - F4AA9AF46839F6C4F71A560E - - includeInIndex - 1 - isa - PBXFileReference - path - PhraseScorer.cpp - sourceTree - <group> - - F4F08DE0C2662C545AE8C659 - - fileRef - DA0F2E6D0938AAE0D7BB4B53 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - F53E96534091EAF490BDD4A7 - - fileRef - 3C7E40091008170AB3C40C03 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - F59BC4E5B1A2636F0A2FA7EB - - includeInIndex - 1 - isa - PBXFileReference - path - HitQueue.cpp - sourceTree - <group> - - F5BBBAD069D2F558001F1DEA - - includeInIndex - 1 - isa - PBXFileReference - path - GermanStemFilter.cpp - sourceTree - <group> - - F5C0150EDF4DA8911B357773 - - fileRef - 5B0315834AEF7AC11D021DA8 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - F6AE3E1A06680CAE528B7299 - - includeInIndex - 1 - isa - PBXFileReference - path - Explanation.cpp - sourceTree - <group> - - F6B189572F952C37116D5075 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - CoreData+MagicalRecord.h - path - MagicalRecord/CoreData+MagicalRecord.h - sourceTree - <group> - - F6C54E5B2EF9746565CFCFC9 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - NSNumber+MagicalDataImport.h - path - MagicalRecord/Categories/DataImport/NSNumber+MagicalDataImport.h - sourceTree - <group> - - F6D9A29EE98F12B078670954 - - includeInIndex - 1 - isa - PBXFileReference - path - SimpleHTMLEncoder.cpp - sourceTree - <group> - - F6E41F05ED93AD5049DED951 - - fileRef - DA45340425C9B0DE4B37AA5E - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - F702563275580A3480F41549 - - includeInIndex - 1 - isa - PBXFileReference - path - TermQuery.cpp - sourceTree - <group> - - F71136BF46193C135922865C - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - MergePolicy.h - sourceTree - <group> - - F742E38ADC26CC395A35759D - - fileRef - A078A106FD166CCDAE36465C - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - F754F0F28FEA12C2EEF4DB25 - - fileRef - 2D245B06193320549C8D98A9 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks - - - F75C19F95A53C80A965F9695 - - includeInIndex - 1 - isa - PBXFileReference - path - FSDirectory.cpp - sourceTree - <group> - - F79F15DAFEA74A183E799C00 - - includeInIndex - 1 - isa - PBXFileReference - path - repl_lltot.cpp - sourceTree - <group> - - F7C8A755B9522F501AA50E34 - - fileRef - 6329512A024A5DF62EFA3009 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - F806ABD958C934169EB42392 - - includeInIndex - 1 - isa - PBXFileReference - path - api.c - sourceTree - <group> - - F8354F8C787CAAC8A0CF7595 - - fileRef - C18649E0653062CD8E15DF69 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - F8FE1F1C4ED1D5C40D14AB79 - - children - - C32155AB6FC07A0FCDB3778F - 1C42E7FEBC0311808D74DA29 - - isa - PBXGroup - name - OS X - sourceTree - <group> - - F97125F3BEEB6432A2FC6666 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - ChainedFilter.h - sourceTree - <group> - - FA39AE906049AC2B497ACA70 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - NSManagedObject+MagicalRequests.h - path - MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalRequests.h - sourceTree - <group> - - FA45C8D8238D6E6389BA6182 - - fileRef - ACBCBE42AB38B85586D376D4 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - FA7D4D917B0D3BDBBB3883A4 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - GermanStemmer.h - sourceTree - <group> - - FB6718BBB1DF98CCA56AE951 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - gzipinputstream.h - sourceTree - <group> - - FB98EA8D7B51E456CABC6A92 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - _DocumentsWriter.h - sourceTree - <group> - - FBA68CA92B80969C30723D19 - - fileRef - D62CFEDE9ED06F852D37F4CA - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - FBE5CC8F91F9FB37BD47FA21 - - fileRef - E1AB86C99D0FA6D681051B4F - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - FBEC581DCB84AE98C02C1EB6 - - fileRef - 2B6FE47F2213589ED0A24A1B - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks - - - FC09E294CF4A4B73381086FD - - includeInIndex - 1 - isa - PBXFileReference - path - ConjunctionScorer.cpp - sourceTree - <group> - - FC5AE2050665A485573A960A - - fileRef - FB6718BBB1DF98CCA56AE951 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - FC7C2C3F8326F2ABE0F8090C - - fileRef - 7DB0D038358922EE08A405FA - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - FD0B06D88A24C6FF3674E75B - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - stem_ISO_8859_1_spanish.h - sourceTree - <group> - - FD7A0B67128711FD5BEF2870 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - path - BRSimpleIndexable.m - sourceTree - <group> - - FE24D9CFB5BA16A68638B7F9 - - fileRef - 04E036E8B4BB77EF754024DF - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - FE4CE68DFB5FC62C2B0A1B08 - - fileRef - 9FE75A5F4E1A617EE5BAD03D - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - FE6450FA970056AF13422542 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - _NearSpansUnordered.h - sourceTree - <group> - - FE85DC73093FBB0FEA384E4B - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - MagicalRecord-prefix.pch - sourceTree - <group> - - FEA6680ADEAD32CD4B5964D0 - - fileRef - 1D1EF24477F0B7EC15959510 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks - - - FF4F4BD186D05C2B9DAFD751 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - NSManagedObjectContext+MagicalObserving.h - path - MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalObserving.h - sourceTree - <group> - - FF5EED7C7FD73A974EB34A1F - - fileRef - F6B189572F952C37116D5075 - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - FFB16C76AFB9138FE0F8698D - - fileRef - A0C70C25E6EA38F2E1C30F6E - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - FFF067C301696ABCF61AD0C3 - - fileRef - 9901CBC9770CCD5FA8C06D7B - isa - PBXBuildFile - settings - - ATTRIBUTES - - Public - - - - - rootObject - 52153A8DF28C8AC4CC156C31 - - +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 00279AFBB918A360FEFB2EF3C3130E18 /* FieldsWriter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 622638E352513B394B4BD8B58436FF78 /* FieldsWriter.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 006150531ADC11A7B34EA55AAD6BD117 /* SpanFirstQuery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 75CD4B9DA1FB572EC09D675996FA757D /* SpanFirstQuery.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 007B3C27391267A0BF4D675147B42701 /* Encoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 1DBEC6EE9286268A90147044DCD47E7E /* Encoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 00DEA8D22FE26F6B7492DF0E51044881 /* GermanStemmer.h in Headers */ = {isa = PBXBuildFile; fileRef = 46124E452DD89143D740805694179A66 /* GermanStemmer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 01AE8392284015BBDE786A98BE9E4F2F /* header.h in Headers */ = {isa = PBXBuildFile; fileRef = E526612A59322726F31AEDC5902AB670 /* header.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 025330A75CDE3F340DE72F1D139F6813 /* stem_UTF_8_portuguese.c in Sources */ = {isa = PBXBuildFile; fileRef = CAD7FDAEC41696681BB9FDE55592B751 /* stem_UTF_8_portuguese.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0276AB199CA18A237D8CBFF8693CDE15 /* SearchHeader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FD1DAF2712C61C4B6F04BF01E93F6006 /* SearchHeader.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 02B1D2A86C72C8FA393AC8835D537DC6 /* MagicalRecord+ErrorHandling.h in Headers */ = {isa = PBXBuildFile; fileRef = 6D1E66320368050F0CB4E818526CD761 /* MagicalRecord+ErrorHandling.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 02BA5DE994DE47EB90F669BF7BB890E8 /* NSManagedObjectModel+MagicalRecord.m in Sources */ = {isa = PBXBuildFile; fileRef = 4682B8E786ADB56A04E9C7020B954471 /* NSManagedObjectModel+MagicalRecord.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 03130C0D6DD4D360F617F2F1C7AA91F8 /* ScorerDocQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = E1DAD073494E4D820F7867BD3EB7F6E1 /* ScorerDocQueue.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 03190501F41177341DC1DB07942AE606 /* DateFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ED6559FEEE9CECAC6A3BB0757CD6BF5 /* DateFilter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 03BFFE3995C7B0EC57F5E1C4FB79195A /* NSManagedObject+MagicalFinders.h in Headers */ = {isa = PBXBuildFile; fileRef = 401BC5367116136E063784470E5E55CE /* NSManagedObject+MagicalFinders.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 04292DDE1B87EA5CA41C8183BDD2FFC8 /* NSString+MagicalDataImport.m in Sources */ = {isa = PBXBuildFile; fileRef = B8D2705197E256517B8598BF9C7FFC90 /* NSString+MagicalDataImport.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 047D5DBF3D6E585710FF29CB09777442 /* MultiPhraseQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = 067F82F6F18230BAA4B493A6A050E95B /* MultiPhraseQuery.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 04A1A1A6A3951CB5B5384D3F8E2C0B68 /* stem_ISO_8859_1_norwegian.c in Sources */ = {isa = PBXBuildFile; fileRef = AAE615DC7C3E6D7780C2E5C60C4D433D /* stem_ISO_8859_1_norwegian.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 052359B893D267DF58ECB49740664A20 /* stem_ISO_8859_1_italian.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BB65A0BEDC31555BF4FC7A35E4672FB /* stem_ISO_8859_1_italian.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 05555D82773D517BDBF88D4ED5211115 /* arrayinputstream.h in Headers */ = {isa = PBXBuildFile; fileRef = 25450189C760A9136476E940A557357C /* arrayinputstream.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 05FE5A0C66FBE776717C6C1F1A03ACD7 /* condition.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C2A6C3FE13A424792BD1663574E8948C /* condition.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 06344CA8BBB42F543AD461DEDEEB36A4 /* CLuceneIndexUpdateContext.h in Headers */ = {isa = PBXBuildFile; fileRef = B509CF1BF2EB3B5D0C079980D56B0605 /* CLuceneIndexUpdateContext.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 06E506C409AAB57A526A7D6A83D1ABE6 /* _NearSpansOrdered.h in Headers */ = {isa = PBXBuildFile; fileRef = DD54E3BB72C82B5CF08033B634008661 /* _NearSpansOrdered.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 06EB97A0321DB357744D7E92DC454C13 /* _HitQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 314E2E2322AFFBD6B443F7CC43E0B030 /* _HitQueue.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 07FC3AFAF80C4537E05680947CE550D7 /* threads.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8AF2E83AC1617C37BCAC0D351DF78A18 /* threads.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0832CF9BEF082E6F997C721D97C0606F /* _ConjunctionScorer.h in Headers */ = {isa = PBXBuildFile; fileRef = 9052F73AD94DE0D3C9ADDDE5CACECAB8 /* _ConjunctionScorer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 09E77AB13BE2118D20BB7836B346A58C /* MultipleTermPositions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA48564FC777CC8A7D2D128A679E97A0 /* MultipleTermPositions.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0A12852769DC6B07BDF4432380D0562A /* stem_ISO_8859_1_finnish.c in Sources */ = {isa = PBXBuildFile; fileRef = 3D40DE06986C284BD836D0BF861092DF /* stem_ISO_8859_1_finnish.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0A1549A37FD10782BFFDB1B5FCBA0524 /* SkipListWriter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5A4C0E6A1FAC0E2D123E1802366AFA46 /* SkipListWriter.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0A88C20B264A89F596CB092417677B78 /* NSAttributeDescription+MagicalDataImport.m in Sources */ = {isa = PBXBuildFile; fileRef = C95D6DB36E48B9E1E3A2AD499442A476 /* NSAttributeDescription+MagicalDataImport.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0BDC01A049A78529DAA7E7E1170ED32F /* utf8.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 12E46A287E0FB4B6063CB7C2D9C86CF7 /* utf8.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0BDCB654EB224C32B02C69B48ECBD602 /* BRFullTextSearch-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 9880008DCA743F94753DE07B8D1820F3 /* BRFullTextSearch-dummy.m */; }; + 0BF3B69487D019BD5670A4277A1FA6C2 /* QueryParserTokenManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 535BA77ED0A8D1E2DD5975B0EC39886A /* QueryParserTokenManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0BFFB56EB27779820BE052EE4CDE9FB5 /* Term.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5E7E512457ED609FE6DB9B778AC966BF /* Term.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0C42AA8A33802DE37A4AB10EE1E5C564 /* _IndexFileDeleter.h in Headers */ = {isa = PBXBuildFile; fileRef = C52DB83BBEF1104D8031BB83D9114DDF /* _IndexFileDeleter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0C95112152CF75AE653A02A5FFFC5CCE /* SimpleFragmenter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 160846AE5181166C8F5ADB61A178738B /* SimpleFragmenter.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0D131A208A1155E4DF85A6B1DA4D5805 /* _TermVector.h in Headers */ = {isa = PBXBuildFile; fileRef = 41A19C4E32DDE5E1F4632166DADF9109 /* _TermVector.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0D6E6A5FA56C3B9E93C763FA38E75162 /* CLuceneSearchService+Subclassing.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FAED71FFD390D524F311B0E56E56DF6 /* CLuceneSearchService+Subclassing.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0DD7E94346715D9C3FA85D9367073F9F /* mem.h in Headers */ = {isa = PBXBuildFile; fileRef = A4CCE22118AC1CF4DFE2D107CEDB35DA /* mem.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0E08E7E1E4953E1D161912ECC7D5EC10 /* StandardTokenizer.h in Headers */ = {isa = PBXBuildFile; fileRef = 041CA437CE709016429E33F334D1A574 /* StandardTokenizer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0E4F78AF00B811F64FD4DE01A7B1A634 /* MatchAllDocsQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = 53D7E1985CD4A9D9DFFA24C44508D569 /* MatchAllDocsQuery.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 10623EB3856A2F41F40BC3BA7C3EE87C /* QueryToken.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B17F4367A42B45AA2A6E6F5469ED547 /* QueryToken.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 11436A4FDA42508DA793F01481851543 /* SimpleFragmenter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2AFA782B439DCBA08EE7067B00111FAA /* SimpleFragmenter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 11FB4EEC948536E0B3EDF406E3D1C6E8 /* IndexFileNameFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 180C4C05BE9C4F2FC7951B0D66C4718A /* IndexFileNameFilter.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 127D27BF93F21C11422887BB10578786 /* _TermScorer.h in Headers */ = {isa = PBXBuildFile; fileRef = 13391B8024D7F791872BFDA93B80D616 /* _TermScorer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 12B69C0867E9DC51A1302D4E10CC5AB9 /* DateTools.h in Headers */ = {isa = PBXBuildFile; fileRef = A8A9B3045217E913CDB0A85972FC4CE6 /* DateTools.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 13333401D8A36B59DD796AD03EA71E7B /* BRSearchService.m in Sources */ = {isa = PBXBuildFile; fileRef = 09FE0E03B9993D301DE754457005AA94 /* BRSearchService.m */; settings = {COMPILER_FLAGS = "-fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 139CD3AE779157B1574A949175CBE868 /* NSDate+BRFullTextSearchAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = B75A406399781B50414F79393CCD3A91 /* NSDate+BRFullTextSearchAdditions.m */; settings = {COMPILER_FLAGS = "-fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 14610CB7B1B66CA8897BF0695F292F0D /* FuzzyQuery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 704BE68679FA060BDA30D873351D3054 /* FuzzyQuery.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 15958649C861EB37217A143A655C6419 /* stem_ISO_8859_1_dutch.c in Sources */ = {isa = PBXBuildFile; fileRef = 774D1CAFFE38E669B316371202EC01BB /* stem_ISO_8859_1_dutch.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 16092B157A392029C9CDD6010809051B /* SpanOrQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = DC3E119E9A769879D5A25CC2C029241D /* SpanOrQuery.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 16B9333D6419624228DE32B61047E8D1 /* Searchable.h in Headers */ = {isa = PBXBuildFile; fileRef = D056BBAB7AEB184A0F889D13B4E4C40A /* Searchable.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 16F4592B2E8EF7AC5BC848C2114D92E8 /* VoidList.h in Headers */ = {isa = PBXBuildFile; fileRef = 4CFFD0B50C0A60A76AA03DED6D803AA2 /* VoidList.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1775A2D8ECCFBCE94BB95A36961EDFBD /* MergePolicy.h in Headers */ = {isa = PBXBuildFile; fileRef = C83DB46802B392AC955055094183A662 /* MergePolicy.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1784E1C2D56211F69B01CE36FB9F5C61 /* CLStreams.h in Headers */ = {isa = PBXBuildFile; fileRef = F3D6105B1D1C44F401D8917AA1F1797D /* CLStreams.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 18CA188D5A912E680CA9A9B0BE327822 /* QueryToken.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7364535410E14E3C9F61C87C9234E691 /* QueryToken.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 18DB8071A7EB223F7178F70421296234 /* SpanFilterResult.h in Headers */ = {isa = PBXBuildFile; fileRef = 9100035CAE57C0A81C77663D17D5E4C5 /* SpanFilterResult.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1930739FE461C8C68CE3FACE0CBA4F9B /* repl_tcstod.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4F5C2FC73476F796BDB22D49A533E8DE /* repl_tcstod.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 195882909AEC47393C1C4F6E023D9855 /* Highlighter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D581AE304E7100E0C07D8475DC758A4 /* Highlighter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1C35C1CCCEDCC48A43BD68D94DC50304 /* PhraseScorer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F1FCAD354B4F6338C96207C0894FD23F /* PhraseScorer.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 1C388F570143C03BDC8C3647F46F78B2 /* MagicalRecordShorthand.h in Headers */ = {isa = PBXBuildFile; fileRef = ECCD7B487CFBF76FEFF1A7D0B94019F7 /* MagicalRecordShorthand.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1CECE5C7EE5C83D027AD9002CC1E9EEE /* NSExpression+CLuceneAdditions.mm in Sources */ = {isa = PBXBuildFile; fileRef = 46BB7F5F5FE537867B3BF4DBD4B3FE95 /* NSExpression+CLuceneAdditions.mm */; settings = {COMPILER_FLAGS = "-fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 1D21D92DB0EBCCA30899F142E67AF898 /* NumberTools.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9D19E237E3AC90DC3A07B1E71D196C4D /* NumberTools.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 1D58D8D3D11F25096536FB2388502BDE /* _FieldsWriter.h in Headers */ = {isa = PBXBuildFile; fileRef = 86458B28609CD4DEE0C01F0B61C94993 /* _FieldsWriter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1D838611A104657AD4075574DB950B3D /* WeightedTerm.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0C77B95D6114FA17E9BD9A701F0FB7B4 /* WeightedTerm.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 1E6AA8949FC4CE4F90ADDA37D51EA17B /* DisjunctionSumScorer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AD00509918397565244F5A1F9153B442 /* DisjunctionSumScorer.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 1F16DF17727B484A75E814671AA732FB /* ExactPhraseScorer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FF48513AC8932FEE33F065FDE1584B67 /* ExactPhraseScorer.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 1F32227AB96E8ECA3F735278040E8B12 /* SpanQueryFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A3FB1E03025AA08FA7DFBC4F543275AF /* SpanQueryFilter.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 208A9A89503F90986AC1746FBBD8F21F /* MergeScheduler.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D326AF7EE50252F0DB7DAA74532A7B1 /* MergeScheduler.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 210527C3E323FB614BC7EC166E4D1140 /* Field.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4630FF2C1003236B762B9DC84AE1F9B4 /* Field.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 21BB1E81621F3142E84ACEB07A6740F4 /* stem_ISO_8859_1_french.h in Headers */ = {isa = PBXBuildFile; fileRef = D2F50E8B46CFC472A6DC9DBC2EC12868 /* stem_ISO_8859_1_french.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 21C975280AD528D89BCC49D5D0ED06D9 /* _NearSpansUnordered.h in Headers */ = {isa = PBXBuildFile; fileRef = E61655022330881057711F3C1FC4FB6B /* _NearSpansUnordered.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 22583D62C4F00088ED04ED413C193350 /* FieldDocSortedHitQueue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B5A4FD5F8DCA5544DB65669242763BD /* FieldDocSortedHitQueue.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 23546BE10D1F0650AAD1864D75DA9E71 /* MultiReader.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FC7273589812AE37EBC18FE943DACAC /* MultiReader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 23993CD5F57B5422A8E05F1B87F56A04 /* NSObject+MagicalDataImport.h in Headers */ = {isa = PBXBuildFile; fileRef = E4F0E3C1B80E78B88C28E51B446FD1DC /* NSObject+MagicalDataImport.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 23B3066C353078FF32D4DC1478FFE8D9 /* StandardAnalyzer.h in Headers */ = {isa = PBXBuildFile; fileRef = 023C6B5F9B81FDD5C5F2408B3B0ECB69 /* StandardAnalyzer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 23FECE4A3B730F533C4E434ADF4A6385 /* AnalysisHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = 28A80FE0CE72841F6ACB4CC6E597412C /* AnalysisHeader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 244312AA50A42395A7D5A23F3F633629 /* stem_ISO_8859_1_dutch.h in Headers */ = {isa = PBXBuildFile; fileRef = C03E306AD8E814F65C46AE1177B8956B /* stem_ISO_8859_1_dutch.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2493B0B972BE25251B8AD72DCF54FDA6 /* stem_UTF_8_porter.c in Sources */ = {isa = PBXBuildFile; fileRef = 02BD871133FD36C2247DA340D164722F /* stem_UTF_8_porter.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 25776DADBADFB9D9DB2D00F9800A33C3 /* QueryTermExtractor.h in Headers */ = {isa = PBXBuildFile; fileRef = CC7FF1F8763E6138543BEC08D42174A7 /* QueryTermExtractor.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 25D05A91C56713A9F796C03831460D4E /* ChainedFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = E739C1E8EC4AE1926BA45602ADADB445 /* ChainedFilter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 260A75E9A8EEFF33C9C6842655E52452 /* RangeQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = A1B2C96970379A4CED85DBAD95A300B2 /* RangeQuery.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 26B4554B5DAB6CAA10BA87CFC1A50F84 /* NSObject+MagicalDataImport.m in Sources */ = {isa = PBXBuildFile; fileRef = 8375322C0E6E0A696CA052E0863315B8 /* NSObject+MagicalDataImport.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 26CE27EFFDDA2CD0C26DBA7606D9ABD7 /* BRSnowballAnalyzer.h in Headers */ = {isa = PBXBuildFile; fileRef = 07EDD2BF676A7F985DD53F3CD2EEF621 /* BRSnowballAnalyzer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2732CE5A8B5E6C0A64993F90BA407646 /* Highlighter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4FF03957DDF418768204AB82749529B8 /* Highlighter.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 27A3E5247C9AE07FFC719B9F17C1475F /* StandardAnalyzer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 11A8D97676AB54A53CF745F1D4D7F69D /* StandardAnalyzer.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2864ECC5D20ADBF01EC53AD5F7326F95 /* SnowballFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 8F34B4DB0BB9B6F5EF25A0D2EEE5CEE2 /* SnowballFilter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 286D07F932EF4F97D1E40BEBD0C1FD08 /* IndexSearcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 56FB61C99ABBFE8FE9A0767C5EA09D86 /* IndexSearcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 29A53FE475C8A506FA5C914BC43C20A0 /* FieldCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 57675D93A6A70DB6DB160E9A141DD753 /* FieldCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2AB96AAEAD3361F559FE970C8B2EED18 /* NSManagedObjectContext+MagicalObserving.m in Sources */ = {isa = PBXBuildFile; fileRef = C7974DF023F51F5A5E919148E9A3C171 /* NSManagedObjectContext+MagicalObserving.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2C622FD6D51BAF08A780349ED58C1BE1 /* _IndexFileNameFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = DE562C62464DF93D0E563AF4B13009BB /* _IndexFileNameFilter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2C79DB248D9DFF1DF0F7C4443C810B42 /* SimpleHTMLEncoder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C23D034CACB48B3F157661A87641A958 /* SimpleHTMLEncoder.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2CEFF872341401D75FEB43047FD4D498 /* NSManagedObjectContext+MagicalRecord.m in Sources */ = {isa = PBXBuildFile; fileRef = A524387C9664D35B4F4D634FA6FAF592 /* NSManagedObjectContext+MagicalRecord.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2D6A2E5102D7AE368A7E753962D635E1 /* SpanQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = 9907BA4D42A55366A18F9285EBB0F726 /* SpanQuery.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2DF5A0804955926466E849F561887C06 /* Misc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D0E427CD6A914D3D8E3791CA7588DF9E /* Misc.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2EA2A17DAB0049DBC001225DA0F0E419 /* _bufferedstream.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F985B4F77CA962908E799DF572D0769 /* _bufferedstream.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2EBA4EFA45981161EF1FEDABFA36A203 /* IndexInput.h in Headers */ = {isa = PBXBuildFile; fileRef = E1AC20C88EB086C5E6B6471C39D1C873 /* IndexInput.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2F008CE3A9BAC4270A21695B4491A271 /* _streambuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = FE68314AFAF234C98B4C94C08977330A /* _streambuffer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2F0AB48EBA7A7A92BD4571B4597ECA9E /* _CompoundFile.h in Headers */ = {isa = PBXBuildFile; fileRef = 62D0ACCC127DFA017DCC1B9DDAE4C9DD /* _CompoundFile.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2F4D4E3F55CFE3AFA857FC2288DA3610 /* NSManagedObjectContext+MagicalRecord.h in Headers */ = {isa = PBXBuildFile; fileRef = 732976431692D5CCC977851BAB498AD3 /* NSManagedObjectContext+MagicalRecord.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 30ABDC8FBD69FA2DCF5C697CECB5B6AF /* CachingTokenFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC4C06B186FEC255E51EB26F3EA5B582 /* CachingTokenFilter.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 30F309E0122C97F6A115D3EADC12E851 /* NSManagedObject+MagicalRecord.m in Sources */ = {isa = PBXBuildFile; fileRef = D6FB5FF45ADDB7FC160F9B0E0E4FCE52 /* NSManagedObject+MagicalRecord.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 314DD0A835724370C883EF277A4501A0 /* MMapInput.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FFA17B74B389B35ACD7EF8AF90588829 /* MMapInput.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 31AFC742D17903ED8100CE20299AA56B /* _Term.h in Headers */ = {isa = PBXBuildFile; fileRef = D3515CBB247F3BB720CD3770DD2A9FF0 /* _Term.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 31ECCCCC0A31D279FE7E9349CB569B83 /* SegmentTermVector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3FF4ACDFB6F17F33D7DFA9A99EE18851 /* SegmentTermVector.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 31F58328CF5E41C3277FFC7FCBBEB489 /* NearSpansUnordered.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39DDCD5CF3666E04838EB45456FD0650 /* NearSpansUnordered.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 32492349C0C89450ECC51A3E33944E57 /* HitQueue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 623F87CAD01CC9593D3F2AF8920BD43A /* HitQueue.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 32F08A05679CD1A1C61EF7059C09BF4A /* NSPersistentStore+MagicalRecord.m in Sources */ = {isa = PBXBuildFile; fileRef = AB651BAAC79EDC475F4ADBEDDD63F171 /* NSPersistentStore+MagicalRecord.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 330110121FA6EF62A4ED5DAA95349A23 /* Terms.h in Headers */ = {isa = PBXBuildFile; fileRef = A8DEB41390A69C903FD0D97E9CD6FEF0 /* Terms.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3327670C284648035643680DDF4E87B2 /* NSManagedObjectContext+MagicalObserving.h in Headers */ = {isa = PBXBuildFile; fileRef = 982317E055AF17CC6668F751AFD1159B /* NSManagedObjectContext+MagicalObserving.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3351EB184572BB617218D5731BFE2435 /* MultiFieldQueryParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 7BDEB8AE28799FF0F409BD829F95D586 /* MultiFieldQueryParser.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 337ADC790C55A6AD28124A4AC4F78CC3 /* _BooleanScorer.h in Headers */ = {isa = PBXBuildFile; fileRef = 190847F87D4617A881A6CAE81866416C /* _BooleanScorer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3531095070C639BD09C75D4C952E462C /* MultiSearcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 21F8217D3E4A913674D6E345B9DAE157 /* MultiSearcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 355C485994C2E2CAEB1FB887F6707A93 /* BitSet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1C66E43064F5D11D648B10F570373110 /* BitSet.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3567E8CAA43645D6788FB2A313FC3812 /* TokenSources.h in Headers */ = {isa = PBXBuildFile; fileRef = DBB9B86D9AC8B2D22B4DB18F1D024A3C /* TokenSources.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 358BAEA0230CDBD3DD0DF0C062F0C363 /* MatchAllDocsQuery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 37F6010272C60DA182D786B15E5A707A /* MatchAllDocsQuery.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 359084ECE8EE4F5706475961F6F02D48 /* stem_ISO_8859_1_norwegian.h in Headers */ = {isa = PBXBuildFile; fileRef = C2EBCBBB2D22665392B7817D00B3D6F5 /* stem_ISO_8859_1_norwegian.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 35ADDDB338F0D4B6DF8AB2D2AA63FE6E /* SpanFirstQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = B2C874DD8961F4ACFEE00507784B988A /* SpanFirstQuery.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 35C38181AAAC72CEA1F97482B246C25D /* _SkipListWriter.h in Headers */ = {isa = PBXBuildFile; fileRef = 1C7C64BBB14327BDC8C5B009FD33E61E /* _SkipListWriter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 35F954C00550BC54C2C4D6BCD34EC47D /* Scorer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E731F7DC56C0D1995D546F88A019FAA5 /* Scorer.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3770B0264BAD24157892319278CB22BA /* _FieldInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = F0EE94D8CF833E2A4A4B5D74211FE6DA /* _FieldInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 38825CFF56E699796C57614D07D2BCE5 /* stem_UTF_8_swedish.c in Sources */ = {isa = PBXBuildFile; fileRef = CD3E4607B341F6F1EBDE586EC4644331 /* stem_UTF_8_swedish.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3974F454EC1ADA04E4DEF8990EB58984 /* BRSimpleSortDescriptor.m in Sources */ = {isa = PBXBuildFile; fileRef = 44DC01C644FD82F7AD1E8C70F7D766F3 /* BRSimpleSortDescriptor.m */; settings = {COMPILER_FLAGS = "-fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3AE90EF3604B6D6D5A47452988072B45 /* NSNumber+MagicalDataImport.h in Headers */ = {isa = PBXBuildFile; fileRef = 5BFE4112BB325408798A72589563CC11 /* NSNumber+MagicalDataImport.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3AED6CC5166ED32D89B5265D56E862B3 /* stem_ISO_8859_1_spanish.h in Headers */ = {isa = PBXBuildFile; fileRef = 4033C7C6D2FBBF221ACE15972744F395 /* stem_ISO_8859_1_spanish.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3B4147B9D3B128BFB3813C34DE13E5C5 /* stem_UTF_8_italian.c in Sources */ = {isa = PBXBuildFile; fileRef = 30621FC0546DD2EEDEF03E70717EDC3C /* stem_UTF_8_italian.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3D797668BBF7C2D77C8F310682E89328 /* BRSearchFields.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CECE0DFD6E127CF44C25C07A58BD354 /* BRSearchFields.m */; settings = {COMPILER_FLAGS = "-fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3DA0379E4400A5B894D1AF87E93741BD /* MagicalRecord+ShorthandSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C6A1340650D4FE35D58081AF93D478E /* MagicalRecord+ShorthandSupport.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3DD1DCCDD3C1AF8AAED7E3DE3435C7D5 /* CachingWrapperFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 3622396976233C97C77A3E6D676709DD /* CachingWrapperFilter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3E416D3B0FA54BBE64DA2194ACFC7EF5 /* _FieldInfos.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B04EE61042644C0BC004031200642DF /* _FieldInfos.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3E4488B860C393368E64EF916817D6BD /* SpanScorer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 01A08785EF49450022529C811985FFF8 /* SpanScorer.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3E9DE9CDED39F24869C4FA2660082E88 /* Explanation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4A01353E27E8F46DDA9FBB97266F6203 /* Explanation.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3EAC2353AF9D652FCF6C80033AE5E0E8 /* _MultiSegmentReader.h in Headers */ = {isa = PBXBuildFile; fileRef = 242837C598D53CBCB4C0DE36179D409B /* _MultiSegmentReader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3EF7A45C494E685089CA3E1A617FCCFE /* TextFragment.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 75CAE0B5E26F0486A996B7966BA714AF /* TextFragment.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3FE096322AFF99EE5656E04AA7AC3C98 /* CLuceneSearchResult.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3EB31227E6A3D4FD0D04997EC7940AB1 /* CLuceneSearchResult.mm */; settings = {COMPILER_FLAGS = "-fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3FFA4CC7EE376A12699FEACE8CF8D5CB /* FSDirectory.h in Headers */ = {isa = PBXBuildFile; fileRef = BEFE44D5317E663965AABAEE9BFBACE0 /* FSDirectory.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 401AFDC1700A4AC4811A6688A1161B97 /* ConjunctionScorer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5DEE2ACB39CDA60E57D674B0D961C87D /* ConjunctionScorer.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 407650D7522070210CFE0F3458C44A8F /* stem_UTF_8_finnish.c in Sources */ = {isa = PBXBuildFile; fileRef = FEB2EC9EC06293BB496854626EA781E2 /* stem_UTF_8_finnish.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 4137A893DA13E4286C2EAA7293A99275 /* QueryFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ECE5AB850498BF4F125C918A6504ED0F /* QueryFilter.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 424E61630665323E202697E7FC67E7FA /* _FastCharStream.h in Headers */ = {isa = PBXBuildFile; fileRef = D216007361563B7F426D52774DC7509C /* _FastCharStream.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 427892A364EA0ED78970ED15B1BA9C2E /* FieldsReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2AA53D00527851483BCE9253C71EE597 /* FieldsReader.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 4323062899403A931F4B3BF2E5783AD1 /* FastCharStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5196B1B4E0135F36E2F322EC648AE605 /* FastCharStream.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 43BAF31476E5B7C447EA6F0DDE84D852 /* FieldCacheImpl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E28258A38CACCB5FEF6246CF75A9DF29 /* FieldCacheImpl.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 44759760E2F3A593D44DFCD462093E60 /* CLuceneSearchService.mm in Sources */ = {isa = PBXBuildFile; fileRef = 066950684B76926145133A4E4794D3AB /* CLuceneSearchService.mm */; settings = {COMPILER_FLAGS = "-fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 44C1982C502C2CCA55081400119DECC8 /* _FastCharStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 60BE5BFFE0A4333C975AB8C1DBCA2F7D /* _FastCharStream.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 44E33DE45867FC84A6968DC70479498B /* IndexOutput.h in Headers */ = {isa = PBXBuildFile; fileRef = 7355B6411CE91CA576F1012FE24D7F1A /* IndexOutput.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 44F5727CAE9ADFB52477FC3C3A4CB18E /* stem_ISO_8859_1_portuguese.h in Headers */ = {isa = PBXBuildFile; fileRef = 99D74188BECF8BAE8B2B87D92C46AD41 /* stem_ISO_8859_1_portuguese.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 454F8CE2F66A48308139B22471635646 /* IndexSearcher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6937EEEDDF0A6F7B45AA150C89DC1B86 /* IndexSearcher.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 45A257A642F97286AE7328143DBC8963 /* stem_ISO_8859_1_german.c in Sources */ = {isa = PBXBuildFile; fileRef = E625CDFFDF0F1A316642F96E60E71366 /* stem_ISO_8859_1_german.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 45B4249136C07638934B3A0AC1E27680 /* GermanStemFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E4CD2DA8B899F80F93554F9AC6CA8385 /* GermanStemFilter.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 45C74193350DBD602084AA9FB5690C2A /* MultiTermQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = 44F29302F058F65BED3485600CB4FCE1 /* MultiTermQuery.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 46D2CB68BBFF59BFAE00CE287C62C293 /* QueryParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FEF551BDE2774BD422457DD08DE64935 /* QueryParser.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 46F200C3B3ABDF53E4AEEB9C3EC53721 /* MultiSearcher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4318EB604F269B47211DA5E7E36A2B90 /* MultiSearcher.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 47AC9F1139C900B31A47C7283CC381EB /* stem_ISO_8859_1_porter.h in Headers */ = {isa = PBXBuildFile; fileRef = BB7B0C4FE44AEDFB3A25FFAD6FAF3206 /* stem_ISO_8859_1_porter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 48CC111F1F1C2ED2B3E0A1D4A058C44E /* BooleanQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = 3B258C64CA03EF469669942463AC6232 /* BooleanQuery.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4AD69C358EF12ECC65620D3911BF0B8F /* stem_UTF_8_english.h in Headers */ = {isa = PBXBuildFile; fileRef = 4344093172180902D2B69E0AB1DCAB6E /* stem_UTF_8_english.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4B6B0AA34BD6E0867513B434BFAB0BEC /* MergePolicy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5E0570B36187668126F98C86D9E8246B /* MergePolicy.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 4C533A6972FAC277DE596B8D54CF92AF /* SearchHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = 11D0E1833074BEB8E6F684A42FE95044 /* SearchHeader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4CC9BF88B44C36EB6F6C69CFDB3B082D /* NSDate+BRFullTextSearchAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = B631820FD082A5CB135310D96229B1AC /* NSDate+BRFullTextSearchAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4DDEE7CA873745D6170F285E8AED04E7 /* _MMapIndexInput.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A2AD88A9226B521A8CF3AB9C9FA982A /* _MMapIndexInput.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4E765A9F5663EE7F87EE55BC55C5674D /* NSPersistentStoreCoordinator+MagicalRecord.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C936302A8E89C954D3DF8CD388DFA4F /* NSPersistentStoreCoordinator+MagicalRecord.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4EE99889782F0CB5D12780211B6ACA9E /* ConstantScoreQuery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B2C217234787BEB7653062C341129532 /* ConstantScoreQuery.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 4F52A99D209115F594D725504F10164A /* TermQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = C26067CCA1A3445218291648F5B9477E /* TermQuery.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4F71B4A284906FACAD8D2FF0D14ABE36 /* NSNumber+MagicalDataImport.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B44ADD3E7E6E0B011AEF8B0AA2FC265 /* NSNumber+MagicalDataImport.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 50184144271732DCE25DC5943E914864 /* stem_UTF_8_norwegian.h in Headers */ = {isa = PBXBuildFile; fileRef = 528AC44A4F7DA848A07DE52D9B589973 /* stem_UTF_8_norwegian.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 513A134029511625F1E8AA04FE7A5DB9 /* _PhraseQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = AA286AFA457BE96A4AE7425579B41F71 /* _PhraseQueue.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 51704691AB18B416FF580E16C4E814DE /* TermInfosReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 230439D6FC8DFEB0F6339DB302E8BF4A /* TermInfosReader.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 519685565F75C8FCB1F8CE5578859D2B /* TextFragment.h in Headers */ = {isa = PBXBuildFile; fileRef = 2F28AD8E054731ADD026D8BD44BF4BAC /* TextFragment.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5264002C9BFD4CD03FE68E562C4FFF89 /* GermanStemmer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5BD1021A5307DE1A327AA1A6FBA0EBD7 /* GermanStemmer.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 52C50633793A671713BA56134B50F18C /* SloppyPhraseScorer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 12339A167E0E680715E152B852731B01 /* SloppyPhraseScorer.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 52D44D3137F767575A4FC82442D3B43A /* MagicalRecord+Options.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FA0505C3440BDD35D779C960B044344 /* MagicalRecord+Options.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5343CE93A43FE4073E1373DE33E9A2A6 /* _PhrasePositions.h in Headers */ = {isa = PBXBuildFile; fileRef = CF8FFA04848B29DBF409D77A7D954152 /* _PhrasePositions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 534B7B01BD0A9C5AD1BDC878EC0DC094 /* Lock.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB7D50E6837B2A15410401CCD9244FC6 /* Lock.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 548B5918F6A69916FD6D39FD3B10514C /* stem_UTF_8_spanish.h in Headers */ = {isa = PBXBuildFile; fileRef = 360222A40011AB5A8DA35DD84A54216F /* stem_UTF_8_spanish.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 54A5243465E84FD90B1A888A1FF7F8BB /* StdHeader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 28699CA56B726787125763DE171F50A4 /* StdHeader.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 553926BA6E1A81D95AC6181EFDCF3068 /* IndexModifier.h in Headers */ = {isa = PBXBuildFile; fileRef = 75063B9B316C66D608EDE01E9F7ED037 /* IndexModifier.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 560650E4E7A1AD672076EB2B4E7C76F7 /* SpanNearQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = 92B18DDDADADC2A9CCF4AF1D7C76CC33 /* SpanNearQuery.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 566F4B32E9150CA1A510A38651871C29 /* MD5Digester.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5D51E199BC20841D7D2781757A091787 /* MD5Digester.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 56905957E03248D151F8594749C4EB7E /* Equators.h in Headers */ = {isa = PBXBuildFile; fileRef = 805A1875D72B17EA8F93E4504129E256 /* Equators.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 56923FA358A873089D10CC32AA37DFB3 /* MagicalImportFunctions.h in Headers */ = {isa = PBXBuildFile; fileRef = 90C521B8E2BF3445D457B52C323FCA8D /* MagicalImportFunctions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 56AD513F4A2604140DC79EA3274B19A3 /* _FieldsReader.h in Headers */ = {isa = PBXBuildFile; fileRef = D09E2A6864380C9DDFBD29392C9BBF64 /* _FieldsReader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 56FC23F03630942C31F95EC762C8154E /* CLConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = B7172A0EF83D8AD5192CA1A7ADF5FC2C /* CLConfig.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 585B4B654D41D22CE40C20A021EB3611 /* IndexModifier.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9E18FA1212CF5CB97DD3AB62AB11A4D /* IndexModifier.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 58938F5CFCEAC429EB0D238C0AAD4FDB /* stem_UTF_8_danish.c in Sources */ = {isa = PBXBuildFile; fileRef = 37E166D0A9665D627DB93B3D81A7C0E7 /* stem_UTF_8_danish.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 58BD147DC34525C107B9E37388BF10A1 /* stem_ISO_8859_1_spanish.c in Sources */ = {isa = PBXBuildFile; fileRef = 3868080E99BB6B84390DEDB91A8AD854 /* stem_ISO_8859_1_spanish.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 58F8335461127F088FB84E78210696B3 /* modules.h in Headers */ = {isa = PBXBuildFile; fileRef = 576FEC692C313CBC17D00EDB2FCFFCB0 /* modules.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 596FD4E5F190A03C87AE05FA3698604C /* Payload.h in Headers */ = {isa = PBXBuildFile; fileRef = 300905B1467DF0F0B0432E9922F7534E /* Payload.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5A6EDD89DD97C5E1BF2C2DA3C02C17A0 /* RangeFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6AF5C81FE77DA7B1221584B0BC9E685B /* RangeFilter.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 5A8628EF2C09E5CDFACFC3692A89068E /* _SegmentInfos.h in Headers */ = {isa = PBXBuildFile; fileRef = D170B026BB5CD2BE014E7F027BB59B6E /* _SegmentInfos.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5BABA737C4D159D0CF23ABF37D7ABD04 /* QueryParser.h in Headers */ = {isa = PBXBuildFile; fileRef = A7399E8EF9F89A74F387772C2F24EBC0 /* QueryParser.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5C341ADDBB09F7741BC1660438B36DD8 /* NSDateComponents+BRFullTextSearchAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EA8E754202E73D65B760DE359372F1A /* NSDateComponents+BRFullTextSearchAdditions.m */; settings = {COMPILER_FLAGS = "-fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 5CF729CE04C90D0D3F22522A4912F046 /* CJKAnalyzer.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F4CE771DCCEF80F413A501B49778054 /* CJKAnalyzer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5D124D40B65793E7018241EB2C1ACBBD /* SpanTermQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = CD4B2E352B364AB1C5A232D1E2828647 /* SpanTermQuery.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5F7BB56FA3031ED827A513EA0B19F421 /* Hits.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 14B777D3F3BB4DDCDACA126C7A6996FF /* Hits.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 600ED00CA93B82107E880C6F44C19140 /* WildcardQuery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9E6022A2F977678293D0489E9E2BCD2B /* WildcardQuery.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 60D558C2FBAA6E72616C9D5879B7410F /* repl_lltot.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1D1D499844CF12E6D69C54D74A27471C /* repl_lltot.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 6140C31A7F82A47614FE9E41E04C33F0 /* DirectoryIndexReader.h in Headers */ = {isa = PBXBuildFile; fileRef = 565AD8BF5F33ED2565C3CD59E92F0BD0 /* DirectoryIndexReader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 61A69FB1EB8014BCEDC40C23F3794F32 /* BRIndexable.h in Headers */ = {isa = PBXBuildFile; fileRef = 746FF232FDDEAF58F0B56FCC776F7062 /* BRIndexable.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 61B830BC4DDA7BBA1873399DEE6EB118 /* FilteredTermEnum.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 47F78B60B23DBF5C570914FDB36A8C4F /* FilteredTermEnum.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 61DF19B0C845F98C0BA25ECDF14103E3 /* NSManagedObjectContext+MagicalThreading.m in Sources */ = {isa = PBXBuildFile; fileRef = DB5435C9933D6C8E31F2018C5A50689C /* NSManagedObjectContext+MagicalThreading.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 61FFC154E44131C07424328F7BEB925B /* _TermInfosWriter.h in Headers */ = {isa = PBXBuildFile; fileRef = A3366D9406EA82AED3EBC08F2D212D79 /* _TermInfosWriter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6262ACAF625AA6AED14D3E1C8B4C077F /* gzipinputstream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7DC2BF81F57D621CB1634D58328D9E10 /* gzipinputstream.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 644EF9A9157B32E49A57950EED3390AA /* SpanScorer.h in Headers */ = {isa = PBXBuildFile; fileRef = 457CF1D6AE50F3EF56DB858BB2AAF861 /* SpanScorer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 64DB4499121B09CC1BCFA539695533F2 /* Document.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AF78755D898EC23C0150FCE8B21E8027 /* Document.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 664B2A98467FDD668673ADDD7362706F /* NumberTools.h in Headers */ = {isa = PBXBuildFile; fileRef = A9F2986CDB83B04E92D589FB93F6D2D1 /* NumberTools.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 665F845711E063701C0F7DB8C2463910 /* PrefixQuery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EADDF549A0757CB1EF1DA4DB7B9A8CBA /* PrefixQuery.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 669BA7D6C0D31278D59B175F01CCB43A /* api.c in Sources */ = {isa = PBXBuildFile; fileRef = 70CEBE56AA04C0898EE29EB02E48B403 /* api.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 675842A2C42ADCAB8026064445D84574 /* MagicalRecord+Setup.m in Sources */ = {isa = PBXBuildFile; fileRef = 602B0CB7642E3E23CEE0826E85016917 /* MagicalRecord+Setup.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 678E49E08E3450A7F7F33791BA70BC99 /* CachingSpanFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 67778391524206BE409425B899B19BBC /* CachingSpanFilter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6822FF26E8DE7903AAD477564F577E45 /* stem_ISO_8859_1_german.h in Headers */ = {isa = PBXBuildFile; fileRef = CE7071DC76F7272C0D149F7B14180AD3 /* stem_ISO_8859_1_german.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 68AEEA243AEB450D18B4287CEF097746 /* SnowballAnalyzer.h in Headers */ = {isa = PBXBuildFile; fileRef = 02D2999E28D05C43B1E8F1838483AD67 /* SnowballAnalyzer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 68D7D82E4D70B22DD4DED95724E22CC6 /* CJKAnalyzer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D9169CA56E8E3965E7C466A9825E6F83 /* CJKAnalyzer.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 68EA7ACE9C44FE56391A35BDD21800C9 /* CLuceneIndexUpdateContext.mm in Sources */ = {isa = PBXBuildFile; fileRef = 768BCEBCB1F5B77EB7162D38E591EA94 /* CLuceneIndexUpdateContext.mm */; settings = {COMPILER_FLAGS = "-fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 690AA66D51ED34855E4C859860E76D06 /* _SegmentMergeInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 018BFBA78995FE2A9E07E7CAF0CCA792 /* _SegmentMergeInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6A5D2D8074A07A88E780D7A84EEA502B /* _ApiHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = ACDA6C7D5DE38307CB40C972C18E227F /* _ApiHeader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6AA7585650932B3F2D00F2642B2FF536 /* GermanAnalyzer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4589AB69F66A9B2A1031A97BAC729388 /* GermanAnalyzer.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 6AA8C0FCA37ABBDCF5990255BFDE6F85 /* CLuceneSearchResult.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DD7F7FAF7BADD8D96222250C78D374E /* CLuceneSearchResult.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6B0A44AB178EA7424B9D82D22E168B3C /* PorterStemmer.h in Headers */ = {isa = PBXBuildFile; fileRef = 76B196F74ADEDFFEC18A542BAFCB3864 /* PorterStemmer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6B11390FF42A53DB2A6F7ACB0AF934F7 /* NSAttributeDescription+MagicalDataImport.h in Headers */ = {isa = PBXBuildFile; fileRef = 6F48F40293B78972A8E4FE5291103F04 /* NSAttributeDescription+MagicalDataImport.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6B2174B5CA8EAD3CD2396D9515B7927B /* FieldDoc.h in Headers */ = {isa = PBXBuildFile; fileRef = 8AAF40A7B8629C71DB96E76244F41DA9 /* FieldDoc.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6C9340CCDBB60B132FA3919AAE76F5A0 /* NSExpression+CLuceneAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = BBACC73EA24B43A57584E78401FDF2E6 /* NSExpression+CLuceneAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6CCE01C9C1F83B6A5111DA8D348A929B /* GermanStemFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 009882B75D7B75810F027F950BE613EA /* GermanStemFilter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6CD79B06C87AB6F2B3200F77926FB266 /* Analyzers.h in Headers */ = {isa = PBXBuildFile; fileRef = 071A54C5C0D3640499EFE72B59DB9DB8 /* Analyzers.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6CF3C47160A09087A0E943558A3F0D2F /* CLucene.h in Headers */ = {isa = PBXBuildFile; fileRef = 7B9E7B01F4B961360C0298EFC9871F3D /* CLucene.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6D01695B2C99F9E1258F696662ECAE6B /* Compare.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 98081EFDC125F6FCF0263EAD9F495C96 /* Compare.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 6DFA7913EE5899EBCFF362AFC9365E78 /* FuzzyQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F1CCDA698DBF0E4F1A0CC63FDCE663F /* FuzzyQuery.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6E45AE916276FE2AE2885A49F6B8FA9B /* ScorerDocQueue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 530D202CE8C5CE77D1EF342DC68808C1 /* ScorerDocQueue.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 6E5D6E550D8B0E9F19E996819DDBC29D /* Sort.h in Headers */ = {isa = PBXBuildFile; fileRef = 2FF76478C360613D6C1191D0B4D16B19 /* Sort.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6EC08F910B08F7A049C607FA2F9A2488 /* NSRelationshipDescription+MagicalDataImport.h in Headers */ = {isa = PBXBuildFile; fileRef = FCEAB3131DD6A3CF9400B95481915309 /* NSRelationshipDescription+MagicalDataImport.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6EF509DB03846153903D2AF95F29258A /* MultiTermQuery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D9FE04E31DA566A8B4C48982CB90B668 /* MultiTermQuery.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 6FF554ADDF5DF41C1DB157691BC4DBA7 /* TermInfosWriter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 94F9C731637E44395903EE978676E908 /* TermInfosWriter.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7060FBAE06B1AD22FFFBE20385CDF6AC /* libstemmer.h in Headers */ = {isa = PBXBuildFile; fileRef = 3BCD29DCC65A9A3F8161852A5D1CC1F8 /* libstemmer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 70BC1FD77EAD039C8AF57A2808EA11BA /* NSManagedObject+MagicalRequests.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C3991FB606E8B6F0E61765A67993309 /* NSManagedObject+MagicalRequests.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7121157A31BA8E022F1AD3F7D11CA249 /* NSRelationshipDescription+MagicalDataImport.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EAB7FE80BFBE5C37603ECCF77E9D41D /* NSRelationshipDescription+MagicalDataImport.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 715CDA7EF9405228C1ECC32B1588A601 /* NearSpansOrdered.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A34B52863B2308160DE34202A28ADFD3 /* NearSpansOrdered.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 71899837DAFB98CE5B61C307E422EE41 /* Formatter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 751E99FD31C5F968474E887D74952EAF /* Formatter.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7205B8BE6B01BED4AC1F4E273E969C83 /* IndexOutput.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E91FEFE82A966CD2F98C7C9ACA75CDE7 /* IndexOutput.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7431A01AAE49BA85BB9F38F9F1AFA054 /* stem_UTF_8_finnish.h in Headers */ = {isa = PBXBuildFile; fileRef = EAAAA33FA1114D560DB775BFCA1361F5 /* stem_UTF_8_finnish.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7481BF33FB07D3ABB07B4338F7E25E3C /* BRFullTextSearch.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C8D6BDF49393055933BD7742D54BEDD /* BRFullTextSearch.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 748705380627BC2F3CA5843382EBB053 /* CLuceneSearchService.h in Headers */ = {isa = PBXBuildFile; fileRef = EDFC0412FA30B0B3F01014036EE93482 /* CLuceneSearchService.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 753642D9B19D7EE1880D1ABB8A5B4B27 /* repl_tchar.h in Headers */ = {isa = PBXBuildFile; fileRef = B303185FCB9AC197F9A291C9C2102F53 /* repl_tchar.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 75FED859BBBDE87CAFCF393FB481E400 /* DocumentsWriter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F3740562FF70D1166FFD5B78671E5A3F /* DocumentsWriter.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 76555D68DD628FBB587CBF51C4E4A1C3 /* _TermSpans.h in Headers */ = {isa = PBXBuildFile; fileRef = 80D033208C8F70340BFA0C437F5419E8 /* _TermSpans.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 76B3190190555F724C36ADD8EE560CB5 /* Reader.h in Headers */ = {isa = PBXBuildFile; fileRef = D2230DA82778E688B62F0C785956C19C /* Reader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 76E6015B040106FCA4186F55099CE988 /* NSTimeZone+BRFullTextSearchAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B76CA71339FB8933B3D0243AF3C41FE /* NSTimeZone+BRFullTextSearchAdditions.m */; settings = {COMPILER_FLAGS = "-fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 784C86B690A55F7333CA6EC7E5715A4C /* MergeScheduler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 54967098508D5BDCA878B9D8DE0CE8FE /* MergeScheduler.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 78A027634A453D9350BC95E9CA0ED35F /* stem_UTF_8_italian.h in Headers */ = {isa = PBXBuildFile; fileRef = BE525F8C997153CCF77E84F66B8742BE /* stem_UTF_8_italian.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 78C73AE6ED2BBB58A162DC972E2583A7 /* AnalysisHeader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DE6A9CDE781F27373AC94FFD9250E81C /* AnalysisHeader.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 78CD145B06E6FE2C7A1DFE4880F49056 /* CLuceneSearchResults.h in Headers */ = {isa = PBXBuildFile; fileRef = 6F76B28434E2485D484EFA488754A005 /* CLuceneSearchResults.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 78E26F04B81F5AA0AD900D24207A80B7 /* SnowballPrefixFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA4FEACB7BC1D13278FBC3CC806C0602 /* SnowballPrefixFilter.cpp */; settings = {COMPILER_FLAGS = "-fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 78E8E2CA4689EB58791782888E20EED5 /* SimpleHTMLFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = 44FE212087FC89F90B5014EBC06EA8BD /* SimpleHTMLFormatter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 796DA1F510832784073A636F2DBCAFFE /* _ExactPhraseScorer.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E0F7FC1BE7DF8FE18DF1CA2200DD28A /* _ExactPhraseScorer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 798E738774A460B06C87AC87C0250A59 /* NSString+MagicalDataImport.h in Headers */ = {isa = PBXBuildFile; fileRef = EA9798899A5AC7F8E1782B7A6EBA32E6 /* NSString+MagicalDataImport.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 79C664D313F155EA90C041DF841C40D3 /* BRSortDescriptor.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C6CD0B01AE2A4408A3130FE868F44C8 /* BRSortDescriptor.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 79D2CF2B299818F07A09504DE656D841 /* _MD5Digester.h in Headers */ = {isa = PBXBuildFile; fileRef = 41E221654E18B2F1B7964761C29B20BC /* _MD5Digester.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7A2677F7941703D008331BA4822BEBAD /* IndexReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C6E0D8E6C60CC206F1A80CF8E0AD732D /* IndexReader.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7A5CAF8BBFA261394CF88A397D62097D /* IndexFileNames.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F84318B0FF23176FF15035DDE333E449 /* IndexFileNames.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7A866CA5DB4A01DE3BAF55ACB80231DC /* IndexFileDeleter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DC654E3E47511B2E24BE1EF4BA17A420 /* IndexFileDeleter.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7AB148C52EB50831E13481B1591DC120 /* NSManagedObjectContext+MagicalSaves.m in Sources */ = {isa = PBXBuildFile; fileRef = 73573AB65382DF0CB819D8C854611A80 /* NSManagedObjectContext+MagicalSaves.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7AD6DC943A6B8EB54CAB745217744DD9 /* NSManagedObject+MagicalRequests.m in Sources */ = {isa = PBXBuildFile; fileRef = 31D9AAE2EAA175F3032B32A8F44DF8CA /* NSManagedObject+MagicalRequests.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7AD88818005DC71F4A872148FEBC8C92 /* BRCLucene-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 97EF0E55FA680F66D72A142ABD59682B /* BRCLucene-dummy.m */; }; + 7AED120CCE063DFA72DC017F85A44BDB /* SpanNotQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = 25C6A0E8EB7569E5019924489DC9AE41 /* SpanNotQuery.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7BA486FC349610BCEBCA42219F7E72CB /* TermScorer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0B9985C5E9C9FEF0337F11CAAA4B6BF1 /* TermScorer.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7BAEB249F54301270B86BD68765917E4 /* VoidMap.h in Headers */ = {isa = PBXBuildFile; fileRef = A1AB90E0C2320ED0BAB24963425BA205 /* VoidMap.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7BD4BC6F10A514E35A75239BA911B8CA /* PrefixQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = 451CD9FE257D429B7F84846D6E578828 /* PrefixQuery.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7BE15E6146E74BA252A503FA1DAB44DF /* NSData+CLuceneAdditions.mm in Sources */ = {isa = PBXBuildFile; fileRef = E9174D24630AC097922A965C4E779149 /* NSData+CLuceneAdditions.mm */; settings = {COMPILER_FLAGS = "-fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7C0A442CAA97E14280485625AE581BF3 /* BooleanScorer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8D420A8DB25674848611CB3D084E8E6F /* BooleanScorer.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7C82EBDC1D44F79CC3D8821EDE995715 /* SegmentTermPositions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CCD0DCC46C2F66FE49D4EF0E2C63DF28 /* SegmentTermPositions.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7CC5BF71AF58E97FA66DAC63A6B1D840 /* stem_UTF_8_french.c in Sources */ = {isa = PBXBuildFile; fileRef = 91213B3768B944E4C0315BB2D97BD481 /* stem_UTF_8_french.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7CE1F5EDE712A23930515D430FF42360 /* SimpleHTMLFormatter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E05F79A641D2B3314A9D9AA1EFD3BE13 /* SimpleHTMLFormatter.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7D09315E8A192C6F6ED9E1E41EC9DB68 /* SkipListReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EFC8A18F9813B50ABBA0305CD777F62B /* SkipListReader.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7D28066395B50FA2899340732CCB5735 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 18763936F9DB1C416B14F3354E26BB22 /* Cocoa.framework */; }; + 7DC3649A5DBBA982320E58D1FAD649A3 /* NSString+CLuceneAdditions.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9E36AD43D90A140F55AEE9D0FD86F14D /* NSString+CLuceneAdditions.mm */; settings = {COMPILER_FLAGS = "-fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7E2D789698538799CEC6A44E6980A340 /* NSPersistentStore+MagicalRecord.h in Headers */ = {isa = PBXBuildFile; fileRef = 92BDAF08B8F33FC13215617512487F06 /* NSPersistentStore+MagicalRecord.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7FA4FE1D7F9A8DB31A66FA4E98EED7B7 /* QueryTermExtractor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4FD115D7A8137191487C2B152159C4D5 /* QueryTermExtractor.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7FF4485B45F5A9B5B9E3D1C0C6CDEB97 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 18763936F9DB1C416B14F3354E26BB22 /* Cocoa.framework */; }; + 804B9A1FC60F3AF24C8FFD584C30CB52 /* QueryScorer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B9AC60EF2824852829FEC66811D8D4C6 /* QueryScorer.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 80612518EB3A100CE9EF5697DB2FF33E /* _CharStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 565A4AE0173A9903DE6217B34AE91B7F /* _CharStream.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 80B0934755900D4CAA4A8DAC6CA59819 /* Spans.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E329701C3674ACE7FE348F0B5E0A7A4 /* Spans.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 80FAF54DCBF0794054B5F258D5873020 /* WildcardQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = 325DC359AD8630166B09793E4A07865D /* WildcardQuery.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 80FE6C9CE16B977B2FE545C02380CBF9 /* SpanOrQuery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42E07CAFAA0287DD31F9CD2B526E57FE /* SpanOrQuery.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 8199CBBB9A36EA793C45130E82EDB369 /* stem_ISO_8859_1_english.h in Headers */ = {isa = PBXBuildFile; fileRef = 5645D2A6B12FAA9F00560F84BE86BD08 /* stem_ISO_8859_1_english.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 825818C2D3A6F72B2DEBC4149DEE6E92 /* Array.h in Headers */ = {isa = PBXBuildFile; fileRef = 57988E00253B2CC4D707476C6EA54FB6 /* Array.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 82E20FE6537812FDCB52A8BC37C5B009 /* StdHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = 9648E413DE61A432DA094BEBA9D70086 /* StdHeader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 831AA621DFB447CAC0508619E685C360 /* stem_UTF_8_spanish.c in Sources */ = {isa = PBXBuildFile; fileRef = 5725D6D96EE9EC0FF8A0B778F7176B24 /* stem_UTF_8_spanish.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 831C1D903C3FF5C52CD680BD4AE7DAD1 /* _VoidList.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6CFBFC85BC8BE66A37453B7341A7B0 /* _VoidList.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 836BCDD78BFF155E61502556B8C5D1F2 /* Hits.h in Headers */ = {isa = PBXBuildFile; fileRef = 08700907FC0ABBB72F5FBC34F56E10F7 /* Hits.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8485DA82793C721F36871D80318BCF2B /* SegmentReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 80CB318DA6866FC55B02FE56AB1AF7DD /* SegmentReader.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 84FB03B7869AD5DB38435F779C2C0231 /* dirent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 37E197EC5BE2083B5DE9E9D2BCA01F84 /* dirent.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 8585FF2C51F5B22C09CC80919851A5E8 /* _EmptySpans.h in Headers */ = {isa = PBXBuildFile; fileRef = F46023A2AA36B4677D3A61154DBA26F8 /* _EmptySpans.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8653C2FCD8FDFFB5CC41F52B2F2C3BA1 /* _SegmentHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C25FB4F434C9E34C4B2AA595C799791 /* _SegmentHeader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 875495275097EA71B7ECE7FCBA0BEAB6 /* FieldSelector.h in Headers */ = {isa = PBXBuildFile; fileRef = B49CFD6862CE8C2D360C3D3D1F671E30 /* FieldSelector.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 881D677C3F2EA73B475EA35109B241C7 /* SpanNearQuery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BC4A9690E8354EE34E7201267C06527 /* SpanNearQuery.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 88ED04AAC8E38975687028A222575462 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 18763936F9DB1C416B14F3354E26BB22 /* Cocoa.framework */; }; + 89B05DD3086B9219A1800FF6EAF27167 /* PorterStemmer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4C51695D1BE52731251898BE7556F77C /* PorterStemmer.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 8A2A623C12E157D2286566A485CB7601 /* FieldCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 546C5168B58A308D4732D680CEC01259 /* FieldCache.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 8AE6102177165AD7B40978E1FFD5D9AD /* stem_UTF_8_french.h in Headers */ = {isa = PBXBuildFile; fileRef = 707558E8FCA98F05F1D440606B6EAFBC /* stem_UTF_8_french.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8B2D2F255CAF1AD2406EE1C38B865CD2 /* error.h in Headers */ = {isa = PBXBuildFile; fileRef = B11B8DB59683C72F054B551BCE0A8CEE /* error.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8B8DCCFA7271F8415E560FC166F7D7FC /* Scorer.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E2E5D30FBA09058D87DFD27D390E32A /* Scorer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8C761A80A510ABE179AA9700C63B502C /* TermVectorReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5D393B5BB643173327C8BFD7FCDC801C /* TermVectorReader.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 8C76B8026A10086EABB6C8E901B36E14 /* BRSimpleIndexable.h in Headers */ = {isa = PBXBuildFile; fileRef = AB667646D438CFE8CFBCCF80C6F4C2A8 /* BRSimpleIndexable.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8C93AE5A2AF75D46C792078757E97B82 /* NSManagedObject+MagicalDataImport.h in Headers */ = {isa = PBXBuildFile; fileRef = D166EE321BF5D461C8F8349194472357 /* NSManagedObject+MagicalDataImport.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8D19D45C1DB55DE66D8674E935EA2D0C /* MagicalRecord.m in Sources */ = {isa = PBXBuildFile; fileRef = 47FF44CE8D00E48678114C1845CCC068 /* MagicalRecord.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 8D411EE65464670B1F4DE8920492BAB3 /* BooleanScorer2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 70D0DFC72EAF53657FBF857A3A2E2EA3 /* BooleanScorer2.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 8E03BE59D6B7A4562003C8C3369300AB /* _IndexFileNames.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D6A914258EBD9FDE85BFE2AD109C603 /* _IndexFileNames.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8E5DBC5CFEC0DD6F03A6C1E5768043DB /* PhrasePositions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C9C73E967A3E51656D643142C9E4CA82 /* PhrasePositions.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 8F1CC8F044CE61AC67313AB01CCA662E /* DocumentsWriterThreadState.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3DADB5089E70CB34FAAC7EAC398837AB /* DocumentsWriterThreadState.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 8F5FC39BF411ED133209E51D4B3AE504 /* BRSnowballAnalyzer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 05CEE2F68B3FCE1EA3ABACC24CF762DA /* BRSnowballAnalyzer.cpp */; settings = {COMPILER_FLAGS = "-fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 8FBC13FF209F03D66489BEC0C6EDB9D1 /* stem_UTF_8_norwegian.c in Sources */ = {isa = PBXBuildFile; fileRef = 8F092DCD5B54E94F989E4CCB3D9D63AE /* stem_UTF_8_norwegian.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 9006533459DA3AA32A73E9A39C2E4DC2 /* DateField.h in Headers */ = {isa = PBXBuildFile; fileRef = DA4298B6DF194765AF16977362CB92D2 /* DateField.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9016F3EF41B00A5CDD8BA3D6513E2F51 /* SpanTermQuery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26E9093CA434C2BE8F55C943844CCF41 /* SpanTermQuery.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 903AA1120B4366C1C0B74B42ED6C020D /* _TermInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 990CDC2101D54FD7AD419CA585D9AF1E /* _TermInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9109B005879B980C0B679390150A7EFA /* _Lock.h in Headers */ = {isa = PBXBuildFile; fileRef = 273ECC52FD890567546DB588003B9CA4 /* _Lock.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 919BA3AC1246C9E2B0D83D5605F94A7B /* MultiReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AD42033CAC35AC729B0BD3B9F260030F /* MultiReader.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 91B57B077F7497413687153E6415F30D /* Query.h in Headers */ = {isa = PBXBuildFile; fileRef = E315D0E7459F25192DD969D33493BFAD /* Query.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 91DE1937A0E2B9046E7B434A6A316DBD /* api.h in Headers */ = {isa = PBXBuildFile; fileRef = E464668BFBAAA8833081E488E3013E1A /* api.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9259141834E0B41E8CB3412F968DD9BA /* stem_UTF_8_german.c in Sources */ = {isa = PBXBuildFile; fileRef = B2D8511E2AA08F5A12A98060179E119B /* stem_UTF_8_german.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 934A72ED556B9FB1167DF7299EE99802 /* repl_wctype.h in Headers */ = {isa = PBXBuildFile; fileRef = DFD6DA3D2F7B3653D7F55F17BA84638C /* repl_wctype.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9357E5C79F6947134ED6EFE8B9C9BC37 /* StandardTokenizer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B640396B1DC98F5DB0ADA142680444A0 /* StandardTokenizer.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 939BAF39FDB896231CEA12C55E5CD363 /* MagicalRecord.h in Headers */ = {isa = PBXBuildFile; fileRef = 4ACCEB697C259D88C464803E9442F3F8 /* MagicalRecord.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 93A9AF828F4D2C4CF9935809A9347B6B /* stem_UTF_8_dutch.h in Headers */ = {isa = PBXBuildFile; fileRef = B196415C43B0C207AC489263779D10AD /* stem_UTF_8_dutch.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 95D775726FE2E5C6255D2371DBD34470 /* _SloppyPhraseScorer.h in Headers */ = {isa = PBXBuildFile; fileRef = E31C33AB8382FF2B401A28BBDA975573 /* _SloppyPhraseScorer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 95F8B2FBE5D2950D7160256D497812C9 /* gzipinputstream.h in Headers */ = {isa = PBXBuildFile; fileRef = BF9C4D4C2C21354C7C6BB3E99C8CFD59 /* gzipinputstream.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 97C559151644F350DB33320F83CB5482 /* Equators.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 862BD47B100B863FB23CBDFF7FED0120 /* Equators.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 9804C37314CADA39C1679DDD0733CA25 /* SegmentTermEnum.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1D3A15FA7F517AEF0DC380D8AD518571 /* SegmentTermEnum.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 983C6A24C14B7D54B91B4FB1B6D198C8 /* SharedHeader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ED0A3BA9B09937E25FCFD3A4A19B5A3F /* SharedHeader.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 9856306AC8941513E030B8CE5954B9B9 /* SnowballPrefixFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F83729543FE4699F8FBD30FB81F744B /* SnowballPrefixFilter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 99060ADA57BF09013F90C5AEEA219A39 /* TermVectorWriter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8D062465F0B789C8FD7784D4A8057CD9 /* TermVectorWriter.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 9955786AFA9B3A4A22C873215A2AFEC4 /* repl_wchar.h in Headers */ = {isa = PBXBuildFile; fileRef = 4357B8E7FE60E58180A2D3E6ACB22D7D /* repl_wchar.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9964BBA279E776960C03CCF4F2707D93 /* byteinputstream.h in Headers */ = {isa = PBXBuildFile; fileRef = 24CBCBAB90F4C54656F808F70A536916 /* byteinputstream.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9A0BD7C77673925E991490ACF686B5EA /* NSManagedObject+MagicalRecord.h in Headers */ = {isa = PBXBuildFile; fileRef = DD532F3B4CE85595EE7DE476986531BB /* NSManagedObject+MagicalRecord.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9A17AD07894072407DB326DC64872599 /* SpanQueryFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D2FA179EC8753C40DB4CE79FA6A2EF6 /* SpanQueryFilter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9AE52FA7C42D2FA188D1085E84E085E5 /* CompoundFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4810634A65400209479B92D7737AE908 /* CompoundFile.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 9AF65419EA8C01534FE6D0EAF347E2CB /* TokenGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = 8F46004ECA1F2D53C53D2E135C212E43 /* TokenGroup.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9B64EA505522D0D8C7FE072CCBE72FE8 /* SpanWeight.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A923E5765BC7E55BBEC97834932ED72 /* SpanWeight.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9BE8572834B5219D1CEE0FDD3C46E224 /* MagicalRecord+iCloud.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E86F7B9D0D971341DF96B742D3871E1 /* MagicalRecord+iCloud.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9C1DE8B36E4246AE968BA78EAE80D09E /* stem_UTF_8_russian.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CA615C122034D1AC7E0D6FB1343D3DC /* stem_UTF_8_russian.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 9D0421CC65BBF70F58C64ADD62786F61 /* NSString+CLuceneAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 9CBC6D93C0273BEEBA49A60E6FDD8720 /* NSString+CLuceneAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9E313A7869B29BDDCDA0DAE17593868E /* _SegmentTermEnum.h in Headers */ = {isa = PBXBuildFile; fileRef = 5096DBCDE2F3145408B5071845D8FD25 /* _SegmentTermEnum.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9E55D87B02C5319311F04708D78CFAFD /* FilteredTermEnum.h in Headers */ = {isa = PBXBuildFile; fileRef = D19874134A52A00637B76D687B6564B2 /* FilteredTermEnum.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9E8D8EB50B3FBC2E5443F86B5962C760 /* QueryParserTokenManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3A1B5CA716DE6A0613393366B4248241 /* QueryParserTokenManager.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 9F5716B838A289F8B99E9128E63D5516 /* Document.h in Headers */ = {isa = PBXBuildFile; fileRef = 67D5951EAB1A789975725C408B9C632D /* Document.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A04388FBC3A3FB8B3759D09C129F11FD /* MagicalImportFunctions.m in Sources */ = {isa = PBXBuildFile; fileRef = D9E84CBA3963E103938F8F9D949F16FF /* MagicalImportFunctions.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A04A6FD5C1F1DD2BCEFE5F81DDDB2E19 /* IndexInput.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C51E171F177395BBDF5B4CEBC4E71C22 /* IndexInput.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A0C9A5A9B4B2733B316A3CC27E2F1F6E /* _condition.h in Headers */ = {isa = PBXBuildFile; fileRef = C5B847269EFC8F6354849B845EE76F9A /* _condition.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A1740CC0EFB72E4A78AB7D06977D9B3B /* NSManagedObjectModel+MagicalRecord.h in Headers */ = {isa = PBXBuildFile; fileRef = 54395A1FCCDC02A6D3543EB077F9F266 /* NSManagedObjectModel+MagicalRecord.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A236F209D85B4A4EF0D168E81FC43886 /* BooleanClause.h in Headers */ = {isa = PBXBuildFile; fileRef = 98A67ED3D0A8EA1A7ACF9DB61997F18A /* BooleanClause.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A2E21C070D4A2AE37F46A59B0D968D82 /* Lock.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B3A5FDD9CF9B743E9622E1570B16534 /* Lock.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A304ADA5145D895BCD7BF9B7A231F742 /* MultipleTermPositions.h in Headers */ = {isa = PBXBuildFile; fileRef = 1854A2FB203E88A26CABDA7926F10864 /* MultipleTermPositions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A331F34CC97FA9F4B851F2A7E4185DB5 /* stem_ISO_8859_1_swedish.h in Headers */ = {isa = PBXBuildFile; fileRef = E33B69820A52BED0534EE4C315A7FE17 /* stem_ISO_8859_1_swedish.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A450663B14BBE99A8AA8177A68F708B3 /* _dirent.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B93BA74B3640BA25FC1BF308F0F3363 /* _dirent.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A46C2BF7F7B6F643484DA601D6D23F7E /* LockFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E4943A2D1AC87D86F96AC0545201BEE5 /* LockFactory.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A46D9149C4A989E5358C2CD7B2436747 /* Formatter.h in Headers */ = {isa = PBXBuildFile; fileRef = 5AD70E6FA6AE0DBA17B210AA6D696A1E /* Formatter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A5418202190D6BC0A3B111B46E4FC3D8 /* IndexWriter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8DB89D6654C129BAAD85011D9084AB20 /* IndexWriter.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A56CC7AEE010B9F269414561F56F700E /* stem_ISO_8859_1_porter.c in Sources */ = {isa = PBXBuildFile; fileRef = 2DA50CA1C48A173C15A5C75F1B1BB9C5 /* stem_ISO_8859_1_porter.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A5FC27C715A7C20F433DA02C5BB1D4F6 /* SpanFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = CFC1CC7064CB4052642F191D5C96A52A /* SpanFilter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A63A08F0D29CF7163AD7F4FCD94145AA /* lucenebase.h in Headers */ = {isa = PBXBuildFile; fileRef = 01FA844CAD5762937B29F0B1904EE2A5 /* lucenebase.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A688732C6072724D7CF8BB1F5D21FD7D /* WildcardTermEnum.h in Headers */ = {isa = PBXBuildFile; fileRef = D12FC3982728C4E6FDBA5479A2B7AAC6 /* WildcardTermEnum.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A6FFD80C18D1513F799A1236E5EA9D99 /* repl_tcslwr.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FB23D1EB83257B1CBBA104BCE6DE2EF8 /* repl_tcslwr.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A719FBAF0935EA34340661601E25FFA3 /* CLuceneSearchResults.mm in Sources */ = {isa = PBXBuildFile; fileRef = A11A53ADE93AB63EB7C0987E95723AE9 /* CLuceneSearchResults.mm */; settings = {COMPILER_FLAGS = "-fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A7B4CA21280B630C5771EEF71805086B /* Compare.h in Headers */ = {isa = PBXBuildFile; fileRef = A41732C243ABA3388C70C1C1C825E39A /* Compare.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A80CFB0C1F3DEA8D5A1CE1A284019D02 /* LanguageBasedAnalyzer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 41798227CBCF71425709AAFCC5591825 /* LanguageBasedAnalyzer.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A87AE369EE39E7E9D144A69219CC4EB2 /* _threads.h in Headers */ = {isa = PBXBuildFile; fileRef = 445FC1FC1CAD9EE473B74521FC617E17 /* _threads.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A8DE8F9E07C885AACFDADB922A367AD3 /* FSDirectory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F3F564C26FC944AE1B6D02C805F250 /* FSDirectory.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A8FDEF9A60E07B7BD3C391400EB79706 /* NSData+CLuceneAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 71C5126459A142615CF04F9D055B7FAE /* NSData+CLuceneAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A928D1128883D0481ACF0C4364FA11EC /* MagicalRecord+iCloud.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F37DA5C715840CDF13DFACBDB17703C /* MagicalRecord+iCloud.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + AAB28301D20ADD7A6D615FC68B2E6720 /* stem_UTF_8_portuguese.h in Headers */ = {isa = PBXBuildFile; fileRef = 78DA43BDF5AE4D266B1761EFDA15B06A /* stem_UTF_8_portuguese.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AAD0CE25BFBF96255F11F6339667D1F6 /* MagicalRecord+ErrorHandling.m in Sources */ = {isa = PBXBuildFile; fileRef = BA8B1DF466D279DE81E6A981895D10D4 /* MagicalRecord+ErrorHandling.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + ABCE3BD5D28A41B80BCA0738A17AA5E1 /* _SegmentMerger.h in Headers */ = {isa = PBXBuildFile; fileRef = D8B87F562F25ADD414900D3271F2ADF4 /* _SegmentMerger.h */; settings = {ATTRIBUTES = (Public, ); }; }; + ABFAED04D65906E77982568578F35353 /* NSPersistentStoreCoordinator+MagicalRecord.m in Sources */ = {isa = PBXBuildFile; fileRef = 74F4CF7F65D860B5BADEFD9CA5501C3F /* NSPersistentStoreCoordinator+MagicalRecord.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + ACD77711CC7C373AC8FB1D1406FCA014 /* ChainedFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7D73C41280AE19C57E5FE7923805D3DF /* ChainedFilter.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + AD5624BE0257ACE664F3A4F75BDF70AA /* BooleanQuery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB24FCB65BC0EBF2E09803F1E7BEBE9B /* BooleanQuery.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + ADD43A1FC4142C32C78FC8C8E7AE1A51 /* MultiPhraseQuery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C8DED676A1A9BAE3FCD9615CAD0AF649 /* MultiPhraseQuery.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + AE526B5E227F0B276DFD8F2B75A1D5A7 /* _FieldCacheImpl.h in Headers */ = {isa = PBXBuildFile; fileRef = A520009FA69E6C24919933C8D83ACFCD /* _FieldCacheImpl.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AEA5CD614A946B8D0B7FCE707DFB8800 /* MultiFieldQueryParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F537368F4EA438A3A9B92AC4D05438DA /* MultiFieldQueryParser.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + AF6E2A6A52AC7287A9C2F176FA18EF87 /* _DocumentsWriter.h in Headers */ = {isa = PBXBuildFile; fileRef = 25616461EF66368390BF28C0002A287F /* _DocumentsWriter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B002B4015C2BCC87813CBCA38DD72382 /* BRIndexUpdateContext.h in Headers */ = {isa = PBXBuildFile; fileRef = 3121E265518EA8E8C7A958A5B2BD4431 /* BRIndexUpdateContext.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B021B5E90C334F46B2D43828DE552C22 /* MagicalRecord+Actions.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F3503944FB304BDB2BC1188B4EBF60C /* MagicalRecord+Actions.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B04AF3661DB41CB355DBE580C24A5DAD /* _DisjunctionSumScorer.h in Headers */ = {isa = PBXBuildFile; fileRef = 979C1DF79EA615A955A044151983AD30 /* _DisjunctionSumScorer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B05AB6E405F62C73C3E37E8C39F2FF7B /* CoreData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 711FF6036DABA264EC4881238C158221 /* CoreData.framework */; }; + B07011035F1F22AAC86EEA04EE8C71C5 /* Analyzers.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4845AF0122206B78A3E6B14F177F3B6E /* Analyzers.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B0C4755773CC745E2EED5118FBD48004 /* BRSimpleSortDescriptor.h in Headers */ = {isa = PBXBuildFile; fileRef = 024B976597C68B141CB7A881037B931A /* BRSimpleSortDescriptor.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B0E427ACD8C548C0BB705B66EC3B2366 /* IndexWriter.h in Headers */ = {isa = PBXBuildFile; fileRef = EBEA97984C496C4699EA201913A7F35B /* IndexWriter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B14B4F9EE95A5310482E45E62F2254D5 /* Encoder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5D9016A5EE2DA8D63DB51625945DB157 /* Encoder.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B2DA9FBFBD8AD3DD2C23207B6EDBD034 /* PhraseQuery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 37F384DE0CE8A12BEAFF006192E7ADAF /* PhraseQuery.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B2F6C9370EA2F4CD6F9E09B1998F849F /* stem_ISO_8859_1_swedish.c in Sources */ = {isa = PBXBuildFile; fileRef = B1755A8BB93840767F1DA2B1C9323730 /* stem_ISO_8859_1_swedish.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B36D7F6CCE6C70ABE02CB03365DE6DB3 /* MagicalRecord+Setup.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D29CCEA051215B982E56EE9E9B9DE9B /* MagicalRecord+Setup.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B3DB3B3901850939E40E506F22B96DF5 /* stem_UTF_8_german.h in Headers */ = {isa = PBXBuildFile; fileRef = E36B2E834C27DF4B691279214A9AA816 /* stem_UTF_8_german.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B3F154A93738DA4A1044F4CF99B91320 /* _FieldDocSortedHitQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = B50FA0E298D6CE36715BD000DF60F3CF /* _FieldDocSortedHitQueue.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B3F1C3E7B014419D52F6D8D732F8AA43 /* Reader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BA1B61014F3C0BD146B5F5E71F725B55 /* Reader.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B5BE0DCA790B9BC4936AA76743E76B52 /* stem_ISO_8859_1_danish.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F704D672D5EFF612E0D0DCB427A82E7 /* stem_ISO_8859_1_danish.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B63A0DF7EBD1567F736B9EC4337F77B7 /* gunichartables.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 494509771B14BC35FBE0365EEBF547C8 /* gunichartables.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B7DFA1E531D671888E38C2322F48FF95 /* BitSet.h in Headers */ = {isa = PBXBuildFile; fileRef = 143BC2C4F6E956CD13DAD201BBF3EE7C /* BitSet.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B9E89EE665E6845EA269E6574B8B33D2 /* _SegmentMergeQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EB326299D355D8CA5B6875F56EED551 /* _SegmentMergeQueue.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BAD71B42188E4F4154C37B53A411A553 /* SegmentMergeQueue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A6F81D22336A1B2E3BF8123E9A10842 /* SegmentMergeQueue.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + BAEE91CFC472CD45704C5ED990070A0C /* TokenGroup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7B8455F26FEAA601EEF28CBDA0E77EFF /* TokenGroup.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + BC0BB90706926FB3FED62405E035CC48 /* PhraseQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = 5593F49590A8635FA55534D225B58198 /* PhraseQuery.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BCD4F1BDED21FFC943EA4609CEA9FFD5 /* stem_UTF_8_dutch.c in Sources */ = {isa = PBXBuildFile; fileRef = B64B73B038EB12CC59F5248DF4C25EB5 /* stem_UTF_8_dutch.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + BD0E5649B91CB64BEC684876F2CC494E /* SegmentInfos.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E06EC32B5AE150C6935E5054382F4CFA /* SegmentInfos.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + BDDA051CC9C97C254A622B96B312B55E /* TermSpans.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0D0B02068775D3AB7DA927AB368F0873 /* TermSpans.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + BE92504BABEAC8A2C8F9B606611C1889 /* repl_tcstoll.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FBA09E8F0FF36C6E91D7EEECC972A6F9 /* repl_tcstoll.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + BED9071951614DBF7BB1531EDBB32FF1 /* Sort.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 73A1297033B2F3481F639BFE07EFC48C /* Sort.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + BF6B9AB2DD7DFE750E9F2FF2B90D266C /* CachingSpanFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 92409982DC51989EE6B7503626811BA4 /* CachingSpanFilter.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + BF9C2326B242CBEBA265BDF91A08E5B5 /* NSManagedObject+MagicalDataImport.m in Sources */ = {isa = PBXBuildFile; fileRef = 5699E43FBC9BF0A4A9D576488AD6ED7C /* NSManagedObject+MagicalDataImport.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + BFB52EF9526C718761A07CA33D289780 /* stem_UTF_8_danish.h in Headers */ = {isa = PBXBuildFile; fileRef = 90AE23877E4D82C45DC08528DFAA6CB8 /* stem_UTF_8_danish.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C00FBC6B73BD0B93E1E2CDD755EE69A6 /* stem_UTF_8_porter.h in Headers */ = {isa = PBXBuildFile; fileRef = EFFDB2F48A4FD22C3E720BECEFB9B108 /* stem_UTF_8_porter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C073101796AE6E00E7733CE8D64916CC /* Explanation.h in Headers */ = {isa = PBXBuildFile; fileRef = F43549492E9AAB05FFD00C266692513E /* Explanation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C0820183D7CC3714B761EA2911E9CEBC /* MagicalRecord+Actions.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D83C5C60A897FDBF02F03BFD330D541 /* MagicalRecord+Actions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C18727E3BA2B1CD7C03A244B0C48BDDC /* ConstantScoreQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = D0B1A933E3B5ACDC25EF48C5D9379047 /* ConstantScoreQuery.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C19D55AD3B8ACF1E6DEEDB8FC93CADE9 /* NSEntityDescription+MagicalDataImport.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A5AC4B935F997D71A1EEF1C3B4C0AE4 /* NSEntityDescription+MagicalDataImport.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C208F1315702F817558C5E5DFD9973D9 /* StringBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 36E68752A9CE7CA7C0B5D3CF5EA0A10B /* StringBuffer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C2910AA700F2094761CD35F7F8EC425F /* CoreData+MagicalRecord.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D935126841B7B1AF285F57F89945A61 /* CoreData+MagicalRecord.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C2FAC60F4399B0386FC5A07EE0236877 /* _PhraseScorer.h in Headers */ = {isa = PBXBuildFile; fileRef = 749FA81D4B3B0B292053540DA6302AAC /* _PhraseScorer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C300583EF33369E344709820EEB58E62 /* stem_ISO_8859_1_italian.c in Sources */ = {isa = PBXBuildFile; fileRef = 6CCE18F60E76823D1D0CEB104E3B34E5 /* stem_ISO_8859_1_italian.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C3682F681D4387173200722EC21B43DB /* libstemmer.h in Headers */ = {isa = PBXBuildFile; fileRef = 9CC876806C4F5C8606E0A3B8C0B6DDC2 /* libstemmer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C4D4AB0B2D69AB6139F1D786DAF7AD10 /* SegmentMergeInfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B2334CDCD713C1978737851DFB1C554 /* SegmentMergeInfo.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C4DD13836FF91F2AD8A727BBD3315D17 /* TermVector.h in Headers */ = {isa = PBXBuildFile; fileRef = BD29F34F8F2622C679BC223D10484045 /* TermVector.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C533BDF6EDB32FC96B766ACB6774C132 /* BRSearchService.h in Headers */ = {isa = PBXBuildFile; fileRef = F7F449FB17B4C8FAFD4A6B42CF1105DD /* BRSearchService.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C61766657BBF75ACA68D5A1BEBAAF31D /* repl_tcscasecmp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 09BEA4975F65BAFF6735BEA062855307 /* repl_tcscasecmp.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C8E9A30DA16610B15890E3CB7FA47B69 /* Directory.h in Headers */ = {isa = PBXBuildFile; fileRef = FE15BC07111C7A34838710F9162C726C /* Directory.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C91D979F20DF64122F417449969BFEF3 /* NSTimeZone+BRFullTextSearchAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = D6ED55C641C9882C499C34A91D4FECC8 /* NSTimeZone+BRFullTextSearchAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C925B06353971127C7CCAAA58F639A61 /* QueryParserConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = CC452524FA971775CA1423885F9317E6 /* QueryParserConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CABEC8A3BE804A223D16196D8602BC9E /* streamarray.h in Headers */ = {isa = PBXBuildFile; fileRef = 68F49BD6F0F4E5884425561E3581F897 /* streamarray.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CB99C32EAC5F1F7B5401D460631AB9F3 /* BRSearchFields.h in Headers */ = {isa = PBXBuildFile; fileRef = D1AF57517F94C35BF1839CCA6AB5B26B /* BRSearchFields.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CCA12F12FF4139E062AEB455E3159834 /* TokenSources.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1CD436E7717178C32D5955442F03411 /* TokenSources.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + CCD22DDC11CBB5C706FBA4234C24BD1D /* stem_UTF_8_english.c in Sources */ = {isa = PBXBuildFile; fileRef = EEB66D92C167CEDA58AF75A9B5DC7658 /* stem_UTF_8_english.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + CCF4F52A0BB88226D0E451821DB328AA /* _gunichartables.h in Headers */ = {isa = PBXBuildFile; fileRef = 8464801A3162D216C408939E94682104 /* _gunichartables.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CCFEB9B2C361232E71D2A9D62369C761 /* DirectoryIndexReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F084D1BEDE2B10A77F0F24B56204517B /* DirectoryIndexReader.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + CD054801D600974FE9EEFD01CCB243E0 /* IndexDeletionPolicy.h in Headers */ = {isa = PBXBuildFile; fileRef = 1433A97B8E23322E2005FCB08355EE9C /* IndexDeletionPolicy.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CD9C5CA556185EF1A0706026FF0FB8AA /* Pods-SampleOSXCocoaPodsProject-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 806D8004C981177DFCC2F31F3E474AFC /* Pods-SampleOSXCocoaPodsProject-dummy.m */; }; + CE0BB13AE218591F35131722BC91DF0C /* RAMDirectory.h in Headers */ = {isa = PBXBuildFile; fileRef = 939199F2D565C76CBED0D578B9B3D755 /* RAMDirectory.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CEC3E7397A1946EF6F3AC532F43D6534 /* NSManagedObject+MagicalAggregation.m in Sources */ = {isa = PBXBuildFile; fileRef = 4F08853CCF0BBB97CA77669DF5E3616C /* NSManagedObject+MagicalAggregation.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + CF2ACF389B90C826FA30A203DAB58713 /* error.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C70BB8B8810C1DA29165F10F1D95035F /* error.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + CFCCF14B4E2CF0FF95669EFA2ECBAD7C /* _TermInfosReader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AAF3D5FCE31D774F775C9C1A8553486 /* _TermInfosReader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CFE8C324BD4FBAA8AC6CB177AEDE21B3 /* GermanAnalyzer.h in Headers */ = {isa = PBXBuildFile; fileRef = 31AAA84E949DB6499E106CDFE1C5F887 /* GermanAnalyzer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D0898BEBA69DB7B0106686068D87638E /* _clucene-config.h in Headers */ = {isa = PBXBuildFile; fileRef = C4622608A4C01D72805EEADA3B0A2AAC /* _clucene-config.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D0A59169B6AD97A0AF3E606DE17D76ED /* DateTools.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0BAFEE85ECCAB767D7CC218882927A72 /* DateTools.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D0DAD40128D6D41B32D2C07C434EFD02 /* stem_ISO_8859_1_finnish.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D5F3C65333A1367AD4D5756694479FD /* stem_ISO_8859_1_finnish.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D1EB05397F0D2EF6B3E9A2A479A5B6F1 /* CachingTokenFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A5A283AA41EC7E044725D1807170A84 /* CachingTokenFilter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D2989C2D95D1CBCF9505C8C71B7D4528 /* Similarity.h in Headers */ = {isa = PBXBuildFile; fileRef = 3774004C41DD949B7A0331826C347035 /* Similarity.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D306B2CE54F5A7BC62A99F4BE4721F91 /* FieldSelector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C23EFB68259FEF0C8F9FE151E9CABE52 /* FieldSelector.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D30F68D21CCB7DDBDB5195C10F35B8D3 /* _ThreadLocal.h in Headers */ = {isa = PBXBuildFile; fileRef = 35C730D5CB487829EE698B00547F10E5 /* _ThreadLocal.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D36305E396ACBF7C796A7F2FCAAABD92 /* StandardTokenizerConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = B031D7A3DD77B06FEDAE749CF0183028 /* StandardTokenizerConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D430EEDCAD9E7403CFA95D1BD7C8AE26 /* stem_KOI8_R_russian.h in Headers */ = {isa = PBXBuildFile; fileRef = 0813264CB23B0EB3E04EB9AA5069C447 /* stem_KOI8_R_russian.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D48DE943DB94D346C9F068D87DA5932B /* stem_UTF_8_russian.h in Headers */ = {isa = PBXBuildFile; fileRef = 32EF40F43C0E79EDA6AC7B771F91A8B8 /* stem_UTF_8_russian.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D49929F6802F31AF81E2CF67EDF3E98C /* StandardFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 74D28A2D241FCF08E85C7A4C1B701534 /* StandardFilter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D4B505FA092E73A59B03071FBE3AF70E /* Directory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 76802644BFAA4A2CF7402242595FA840 /* Directory.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D51F8FE43D459BDDDEDEE2E81CAD784D /* DateFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EDF13A7B423B26B71793F0EE6012521C /* DateFilter.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D5E4FE9060AED540BFCB0B612E249A10 /* FieldSortedHitQueue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E62EC51BA896C727A3498533AC739AF4 /* FieldSortedHitQueue.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D7201100C65CF5ACCC5A4EDE7299DE87 /* RangeFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = C39E6D06C0D6752F07B7FFE3AED60AD9 /* RangeFilter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D792829A339D23D30D80D8EA41C75E99 /* Similarity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FAFC028AC8C4F5DAD546F97BF5BF3524 /* Similarity.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D7F2FA020E9B6D8671AAADD6A7C28036 /* MagicalRecord+ShorthandSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = EC341472BFBD5BA9456D15319E075728 /* MagicalRecord+ShorthandSupport.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D8AF63A4D49F0385BAF024C16787E609 /* LanguageBasedAnalyzer.h in Headers */ = {isa = PBXBuildFile; fileRef = 07B7BA11867C8FAEFC51698B07660152 /* LanguageBasedAnalyzer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D8E1FFBF6A8C4DD45AE1E99BA1AFF201 /* _streambase.h in Headers */ = {isa = PBXBuildFile; fileRef = FD203BDE546B448C6B763FCAD3415682 /* _streambase.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D8EB2368A0585647121ED38FDFD89ECD /* Field.h in Headers */ = {isa = PBXBuildFile; fileRef = A854146321C77E6C8A710CAC7C23FA63 /* Field.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D9C68EC08B56296EF7EA719D16ABA8AE /* NSDateComponents+BRFullTextSearchAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 5BB8E1D0E5AD7BA32AE01C91E208F9F3 /* NSDateComponents+BRFullTextSearchAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DAA16AE2A48B05EE19A7E67C448966A2 /* libstemmer.c in Sources */ = {isa = PBXBuildFile; fileRef = CFEB3BDFDBBD215F65A231A3296E9206 /* libstemmer.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + DAB041079D26ADFCFD368D328C0888FD /* FastCharStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A995A59B1895A4495F4484FCCCA3599C /* FastCharStream.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + DB615492E3B02424EE26078E1981286D /* TermQuery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C162D222BCC0D7677592ECA43B54DEF7 /* TermQuery.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + DBDE932082A5EF046ACFC4B98115A89E /* LuceneThreads.h in Headers */ = {isa = PBXBuildFile; fileRef = F497118B1A99846A91D5FAE3A41C9763 /* LuceneThreads.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DC3339F7ECB89C020BEA6C8CCCF7FF6E /* RangeQuery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 50843DCEC8081B4FE6D388E678A5BBF6 /* RangeQuery.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + DC492E17E440BAAC39A256E822D6FD15 /* NSManagedObject+MagicalFinders.m in Sources */ = {isa = PBXBuildFile; fileRef = 2149011252C8FF78D7B5A10C457CA705 /* NSManagedObject+MagicalFinders.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + DD4F190F75C58FA81CCD24F27907DE06 /* _SharedHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = 0C66AE6450AD3137BA007C3BC81028AC /* _SharedHeader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DD606150DF29B46678ADE8F5EABB7B25 /* CachingWrapperFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C88ACDF2BC1506E71F6552AB55BDEC55 /* CachingWrapperFilter.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + DDAC2C5046966E40BC725E8899079933 /* NSManagedObjectContext+MagicalSaves.h in Headers */ = {isa = PBXBuildFile; fileRef = 6AD7B1907D750C3A3FC4CB85E7A408A4 /* NSManagedObjectContext+MagicalSaves.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DDC1BACD92DD9E29CDC2E631B38474A1 /* Scorer.h in Headers */ = {isa = PBXBuildFile; fileRef = DD92BAD789278D86323770B5510B1BD4 /* Scorer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DDC218FDC011744D6E662D8E8723D4D9 /* Fragmenter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3938CE1590684E7ADD24573B5DDBF21A /* Fragmenter.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + DE525EB8E97BD04E877C8436F7F23A9C /* repl_tprintf.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EF46053E98147BB8C9BCF7F4A45DEE6F /* repl_tprintf.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + DE8361E570A0C29C54A543A1DF43FB84 /* _BooleanScorer2.h in Headers */ = {isa = PBXBuildFile; fileRef = D5E5FFE28830E5BE59E17ABF175DDF5C /* _BooleanScorer2.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DF151FC09E165C78227180B9F8D35D43 /* StandardFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 168A865B0ABD5080A8DC6CA26FF3EB48 /* StandardFilter.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + DFDEA8A052DABBBE75F4F76F9B03435A /* SimpleHTMLEncoder.h in Headers */ = {isa = PBXBuildFile; fileRef = FD236C52DBBDFD95DC70E8466C19C6EE /* SimpleHTMLEncoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DFFCCFEB5254096951F37BD6A8C00BFC /* stem_ISO_8859_1_english.c in Sources */ = {isa = PBXBuildFile; fileRef = AC4CDFA53C547E9051D3EA0319D7A5D8 /* stem_ISO_8859_1_english.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E02920313DAC0FC98CBF94AA3AF6061B /* _VoidMap.h in Headers */ = {isa = PBXBuildFile; fileRef = 93F01E0B269C5A484143CC98347BEFCA /* _VoidMap.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E06DA7981702F4D81CC26D269D167787 /* SharedHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = E5EB8E641C8909EF88D7A5531D3776DA /* SharedHeader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E0C07F881E61B764BD54216F0199C850 /* Fragmenter.h in Headers */ = {isa = PBXBuildFile; fileRef = 011A7928585F439653D1561D60181E25 /* Fragmenter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E12816FB7CDC01D4ED3A0033DA57355D /* NSManagedObjectContext+MagicalThreading.h in Headers */ = {isa = PBXBuildFile; fileRef = E1DA926EE40DD27D9ABC79AEAAD52707 /* NSManagedObjectContext+MagicalThreading.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E136A50AC6EE8A719DEEEBD4B68D193D /* gzipcompressstream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 304C1D14DD142B8DC1F99C9F184610A0 /* gzipcompressstream.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E14E6A6AC70E88738F912295019CC92D /* SpanWeight.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6864B6D38A8257008CD4050E1CC6D985 /* SpanWeight.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E183C8BCA9ED66249D4A7A11BD6B463D /* stem_ISO_8859_1_danish.c in Sources */ = {isa = PBXBuildFile; fileRef = 80D44BBBF7D5F4C235FD4507234AF3AA /* stem_ISO_8859_1_danish.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E1CB05C7794F4481D52F0206A7D85D6B /* BRSearchResults.h in Headers */ = {isa = PBXBuildFile; fileRef = DF9368CE5A12FFBF2CBB68CE89AEB9A4 /* BRSearchResults.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E2527ECE673891B976CE95F4C1BDF1CE /* Term.h in Headers */ = {isa = PBXBuildFile; fileRef = 7DE4D53F6117DD810988D22559DEBB6C /* Term.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E28986A4E9F544F6655F26530108BD9C /* Misc.h in Headers */ = {isa = PBXBuildFile; fileRef = 34BCA4D47291CCB62E7C29F16B2166F8 /* Misc.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E3CB99A1E214C5DF76D3CADE30D4F419 /* stem_ISO_8859_1_french.c in Sources */ = {isa = PBXBuildFile; fileRef = C63B68320EB32C2FC309BA0D931DF9C4 /* stem_ISO_8859_1_french.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E3FA5751D69777D31744506C29050854 /* ThreadLocal.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AB59E5049FD20E071742B42AF626CB2 /* ThreadLocal.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E45AC9977CAC4F50C60A244CD2F1F1C0 /* MultiSegmentReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EB30669177770F2991B62716CE46D3CD /* MultiSegmentReader.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E5233B31B651C93C5788B1D3DFD289CD /* MagicalRecord-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B7DFC012E46CD6957E29768A8D73D4A /* MagicalRecord-dummy.m */; }; + E6376FBA4FF7B840B94A893845EB621F /* gzipcompressstream.h in Headers */ = {isa = PBXBuildFile; fileRef = 52E34AE1E545535E031A384A1E2066C3 /* gzipcompressstream.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E642FC7859914BE633A028475AD854C3 /* WeightedTerm.h in Headers */ = {isa = PBXBuildFile; fileRef = 16435F0F9142ACFF595C4ACE6EE1445D /* WeightedTerm.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E6B5AFB97B9CD139F993AC50580535EB /* _StringIntern.h in Headers */ = {isa = PBXBuildFile; fileRef = 03E4192C2011FB1BD2F8E6B4A83FBAA8 /* _StringIntern.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E6DC312780EB4E3C713EA3602372445A /* WildcardTermEnum.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CC07D0A5AE8220E4FBB0DA5A7AE22962 /* WildcardTermEnum.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E6ECAEA9D98CCB2A60F397933F60ECD0 /* clucene-config.h in Headers */ = {isa = PBXBuildFile; fileRef = 3BF3EAF64EB4B8CF331CEDF303F86DAB /* clucene-config.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E79C3EFD9F1647A3ED9ECE5E0567F3CE /* BRSearchResult.h in Headers */ = {isa = PBXBuildFile; fileRef = 7E595E37C4C26DF2BB95D1F030181515 /* BRSearchResult.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E843512E4661D34CE51F03AE3606E48C /* QueryScorer.h in Headers */ = {isa = PBXBuildFile; fileRef = 9543C236C8B31E364C07890A2C213837 /* QueryScorer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E878A872C8B34F9BD3082A8DEA6B9B78 /* IndexDeletionPolicy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6A0E2227514D895B3F4AC5AA68B07C1B /* IndexDeletionPolicy.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E99EAF9042D30F1A1C4F1B1EA52BFD18 /* RAMDirectory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CED3132726B8568756ACE328107BB088 /* RAMDirectory.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + EA3216B080996799CB973BF6B64692A9 /* SegmentTermDocs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 959A5ED3E0F30D2AE0DE3AF64FCF9B7C /* SegmentTermDocs.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + EAFD011380356AC9959C024E445BD6BF /* _RAMDirectory.h in Headers */ = {isa = PBXBuildFile; fileRef = 2396408CA68671A2E857C914F3976317 /* _RAMDirectory.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EB8604E3C9E8FB60AF26F96529DD2759 /* Filter.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A78D7DE1B699BA6E2878A1E775B94F5 /* Filter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EB8EA956E148A5FDEDFDE0F6D118198F /* Snowball.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ADEB670673AB3AE1A6A5C724F81E3C3B /* Snowball.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + EBD800166232121AEB27A2C0031EA9FC /* FieldSortedHitQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = CFD58621506DC476AF1CE25E6130639F /* FieldSortedHitQueue.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EC476D23CA7D68A21639892023348FB4 /* stem_ISO_8859_1_portuguese.c in Sources */ = {isa = PBXBuildFile; fileRef = D16D32AA9F7796231E4CF8817AD2736A /* stem_ISO_8859_1_portuguese.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + ED0920906E9418FDC79444A7A47EB1A6 /* DateField.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4F87B24BFBB5A9116538FE400C44BC00 /* DateField.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + EDE6F751DCE0F5F19B6C939502E1E824 /* _SkipListReader.h in Headers */ = {isa = PBXBuildFile; fileRef = 7F38B75273064902F07DB7627BA873D3 /* _SkipListReader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EDE9DC6F8EB429FA568088125E5D527C /* _Arrays.h in Headers */ = {isa = PBXBuildFile; fileRef = DD64E7E49B82D5C8B6A5623B2F377E1F /* _Arrays.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EE45C46C824712B38DCF972D7765E904 /* IndexReader.h in Headers */ = {isa = PBXBuildFile; fileRef = 21F85D5C2ECBFA9ECA299B2CF4274065 /* IndexReader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EE5D4805987B45C8F030CC8878E66BAB /* StringBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0E54F921B35D18530309B008801E397B /* StringBuffer.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + EE9519757C0320B4015197A3FE2285BF /* QueryFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E86B604323C8B5FB80BCFDCE700EF6F /* QueryFilter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EEA8A6632E160A847D9CFAF41BDE95CC /* HighlightScorer.h in Headers */ = {isa = PBXBuildFile; fileRef = CC0723942A5FE20AB30AB252427D4F54 /* HighlightScorer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EEEA75D5C899FCD0D5B099D97C7A4CC9 /* SegmentMerger.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E94D171BEC936DDD46358C152CEB9DD0 /* SegmentMerger.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F288FFFFDF445721C4F9B253A588C5BC /* NSEntityDescription+MagicalDataImport.m in Sources */ = {isa = PBXBuildFile; fileRef = 22925035AF0451BF1A610A5ECB288F0C /* NSEntityDescription+MagicalDataImport.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F4E3DA77AD17C070E2CEC44ABF47117F /* stem_KOI8_R_russian.c in Sources */ = {isa = PBXBuildFile; fileRef = 99CBE67A82A4FE8A753247F5682D3967 /* stem_KOI8_R_russian.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F52E7937504BEB63D44D56C4A074757D /* Terms.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 514BBCF5E0C7EC8C213D60743F02B873 /* Terms.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F5606D98D0147CAAE5293127FC2BCE9C /* BRNoLockFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C6C18D71CBA5A91A3B7D17B1725C31D9 /* BRNoLockFactory.cpp */; settings = {COMPILER_FLAGS = "-fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F73848FBE5344DF273993A482A4C3C92 /* LockFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D2F0F5A75292BDCBE83E1914BCBE8DE /* LockFactory.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F757C26D575213461DB91FE2B8C38414 /* SpanNotQuery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B498167FE4A893BA6F112C9C7B041EEE /* SpanNotQuery.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F83CD5CB5EBB25F1A0FA27E72F371D87 /* utilities.c in Sources */ = {isa = PBXBuildFile; fileRef = 4AFC58E25E869A576811207B854DDFE5 /* utilities.c */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F8774A4C2B8617F83B7EDBB54E238AC7 /* NSManagedObject+MagicalAggregation.h in Headers */ = {isa = PBXBuildFile; fileRef = A424A9859E4FD1EF15B5932333107956 /* NSManagedObject+MagicalAggregation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F965312823EA2D2F0BE3A71B6A166909 /* FieldInfos.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B4AACFB66AE995F2A40CE179F66B34EF /* FieldInfos.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + FB2A50B8E7145454F686D61F3A04CC7E /* BRSimpleIndexable.m in Sources */ = {isa = PBXBuildFile; fileRef = 5C8D882550A37E0ADD79B989F4E173CF /* BRSimpleIndexable.m */; settings = {COMPILER_FLAGS = "-fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + FB58915E2F0F448944437584A9B1EB7F /* StringIntern.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ACC757F974D8DA10465589ED310171D6 /* StringIntern.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + FCC31C1018E4CE28D5B8A650BFCF7598 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 18763936F9DB1C416B14F3354E26BB22 /* Cocoa.framework */; }; + FD1023095FCA71BBB8A7A348BEAEAD1B /* stem_UTF_8_swedish.h in Headers */ = {isa = PBXBuildFile; fileRef = 4A1244C144ABC03AEFAA64B27128C9A6 /* stem_UTF_8_swedish.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FE12FA3E5AF23583F0E1752A21170AD4 /* PriorityQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 6EE034D82C72BA2ABEAA10EA084DFB9E /* PriorityQueue.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FE7D4FBAD52A68B05B3559C0CC8B09A3 /* TermInfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 85488AB0AF28DF9CB8913D071B2B487D /* TermInfo.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + FEA60FB7B8E8AE464C0EC59BFDF3531E /* BRNoLockFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = F34621830BC1198B8261B32C0950A395 /* BRNoLockFactory.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FF6D719F6FFC6054C37B1E0780BF3A2F /* Payload.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1C292D2D4E627AD8906F8C132AD7C2D9 /* Payload.cpp */; settings = {COMPILER_FLAGS = "-Wmost -fvisibility=default -fPIC -D_UCS2 -D_UNICODE -D_REENTRANT -DNDEBUG -fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + FFBCDBE6D250967FE939C71656986385 /* MagicalRecord+Options.m in Sources */ = {isa = PBXBuildFile; fileRef = 86C7AF748C23E9524FBE0DE3A322FA84 /* MagicalRecord+Options.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0 -w -Xanalyzer -analyzer-disable-all-checks"; }; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 17D13E81132118B0B5CDBC69EE72321D /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = BFB7466E5AAE0E3B0F9D78A3DF79C1C2; + remoteInfo = BRCLucene; + }; + 9B6A3E8E006BE01282BB180D7D5B5AFB /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = BFB7466E5AAE0E3B0F9D78A3DF79C1C2; + remoteInfo = BRCLucene; + }; + 9E5E228038E728A022AEA298C0EBD83F /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = EC4FD212AB4972975789333E27148F2B; + remoteInfo = BRFullTextSearch; + }; + F42485CAC4C4434C2D617D2EDEDDA26A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = 44043489BB712FEE61998C3EADF6004E; + remoteInfo = MagicalRecord; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 009882B75D7B75810F027F950BE613EA /* GermanStemFilter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GermanStemFilter.h; path = "src/contribs-lib/CLucene/analysis/de/GermanStemFilter.h"; sourceTree = ""; }; + 011A7928585F439653D1561D60181E25 /* Fragmenter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Fragmenter.h; path = "src/contribs-lib/CLucene/highlighter/Fragmenter.h"; sourceTree = ""; }; + 018BFBA78995FE2A9E07E7CAF0CCA792 /* _SegmentMergeInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _SegmentMergeInfo.h; path = src/core/CLucene/index/_SegmentMergeInfo.h; sourceTree = ""; }; + 01A08785EF49450022529C811985FFF8 /* SpanScorer.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = SpanScorer.cpp; path = src/core/CLucene/search/spans/SpanScorer.cpp; sourceTree = ""; }; + 01FA844CAD5762937B29F0B1904EE2A5 /* lucenebase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = lucenebase.h; path = src/core/CLucene/debug/lucenebase.h; sourceTree = ""; }; + 023C6B5F9B81FDD5C5F2408B3B0ECB69 /* StandardAnalyzer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = StandardAnalyzer.h; path = src/core/CLucene/analysis/standard/StandardAnalyzer.h; sourceTree = ""; }; + 024B976597C68B141CB7A881037B931A /* BRSimpleSortDescriptor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = BRSimpleSortDescriptor.h; sourceTree = ""; }; + 02BD871133FD36C2247DA340D164722F /* stem_UTF_8_porter.c */ = {isa = PBXFileReference; includeInIndex = 1; name = stem_UTF_8_porter.c; path = "src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_porter.c"; sourceTree = ""; }; + 02D2999E28D05C43B1E8F1838483AD67 /* SnowballAnalyzer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SnowballAnalyzer.h; path = "src/contribs-lib/CLucene/snowball/SnowballAnalyzer.h"; sourceTree = ""; }; + 03E4192C2011FB1BD2F8E6B4A83FBAA8 /* _StringIntern.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _StringIntern.h; path = src/core/CLucene/util/_StringIntern.h; sourceTree = ""; }; + 041CA437CE709016429E33F334D1A574 /* StandardTokenizer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = StandardTokenizer.h; path = src/core/CLucene/analysis/standard/StandardTokenizer.h; sourceTree = ""; }; + 05CEE2F68B3FCE1EA3ABACC24CF762DA /* BRSnowballAnalyzer.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = BRSnowballAnalyzer.cpp; sourceTree = ""; }; + 066950684B76926145133A4E4794D3AB /* CLuceneSearchService.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = CLuceneSearchService.mm; sourceTree = ""; }; + 067F82F6F18230BAA4B493A6A050E95B /* MultiPhraseQuery.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MultiPhraseQuery.h; path = src/core/CLucene/search/MultiPhraseQuery.h; sourceTree = ""; }; + 071A54C5C0D3640499EFE72B59DB9DB8 /* Analyzers.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Analyzers.h; path = src/core/CLucene/analysis/Analyzers.h; sourceTree = ""; }; + 07B7BA11867C8FAEFC51698B07660152 /* LanguageBasedAnalyzer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LanguageBasedAnalyzer.h; path = "src/contribs-lib/CLucene/analysis/LanguageBasedAnalyzer.h"; sourceTree = ""; }; + 07EDD2BF676A7F985DD53F3CD2EEF621 /* BRSnowballAnalyzer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = BRSnowballAnalyzer.h; sourceTree = ""; }; + 0813264CB23B0EB3E04EB9AA5069C447 /* stem_KOI8_R_russian.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = stem_KOI8_R_russian.h; path = "src/contribs-lib/CLucene/snowball/src_c/stem_KOI8_R_russian.h"; sourceTree = ""; }; + 08700907FC0ABBB72F5FBC34F56E10F7 /* Hits.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Hits.h; path = src/core/CLucene/search/Hits.h; sourceTree = ""; }; + 09BEA4975F65BAFF6735BEA062855307 /* repl_tcscasecmp.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = repl_tcscasecmp.cpp; path = src/shared/CLucene/config/repl_tcscasecmp.cpp; sourceTree = ""; }; + 09FE0E03B9993D301DE754457005AA94 /* BRSearchService.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = BRSearchService.m; sourceTree = ""; }; + 0A6F81D22336A1B2E3BF8123E9A10842 /* SegmentMergeQueue.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = SegmentMergeQueue.cpp; path = src/core/CLucene/index/SegmentMergeQueue.cpp; sourceTree = ""; }; + 0B44ADD3E7E6E0B011AEF8B0AA2FC265 /* NSNumber+MagicalDataImport.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSNumber+MagicalDataImport.m"; path = "MagicalRecord/Categories/DataImport/NSNumber+MagicalDataImport.m"; sourceTree = ""; }; + 0B76CA71339FB8933B3D0243AF3C41FE /* NSTimeZone+BRFullTextSearchAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "NSTimeZone+BRFullTextSearchAdditions.m"; sourceTree = ""; }; + 0B7DFC012E46CD6957E29768A8D73D4A /* MagicalRecord-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "MagicalRecord-dummy.m"; sourceTree = ""; }; + 0B9985C5E9C9FEF0337F11CAAA4B6BF1 /* TermScorer.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = TermScorer.cpp; path = src/core/CLucene/search/TermScorer.cpp; sourceTree = ""; }; + 0BAFEE85ECCAB767D7CC218882927A72 /* DateTools.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = DateTools.cpp; path = src/core/CLucene/document/DateTools.cpp; sourceTree = ""; }; + 0C66AE6450AD3137BA007C3BC81028AC /* _SharedHeader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _SharedHeader.h; path = src/shared/CLucene/_SharedHeader.h; sourceTree = ""; }; + 0C77B95D6114FA17E9BD9A701F0FB7B4 /* WeightedTerm.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = WeightedTerm.cpp; path = "src/contribs-lib/CLucene/highlighter/WeightedTerm.cpp"; sourceTree = ""; }; + 0D0B02068775D3AB7DA927AB368F0873 /* TermSpans.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = TermSpans.cpp; path = src/core/CLucene/search/spans/TermSpans.cpp; sourceTree = ""; }; + 0D326AF7EE50252F0DB7DAA74532A7B1 /* MergeScheduler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MergeScheduler.h; path = src/core/CLucene/index/MergeScheduler.h; sourceTree = ""; }; + 0D935126841B7B1AF285F57F89945A61 /* CoreData+MagicalRecord.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "CoreData+MagicalRecord.h"; path = "MagicalRecord/CoreData+MagicalRecord.h"; sourceTree = ""; }; + 0E54F921B35D18530309B008801E397B /* StringBuffer.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = StringBuffer.cpp; path = src/shared/CLucene/util/StringBuffer.cpp; sourceTree = ""; }; + 0F1CCDA698DBF0E4F1A0CC63FDCE663F /* FuzzyQuery.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FuzzyQuery.h; path = src/core/CLucene/search/FuzzyQuery.h; sourceTree = ""; }; + 0F4CE771DCCEF80F413A501B49778054 /* CJKAnalyzer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CJKAnalyzer.h; path = "src/contribs-lib/CLucene/analysis/cjk/CJKAnalyzer.h"; sourceTree = ""; }; + 0F704D672D5EFF612E0D0DCB427A82E7 /* stem_ISO_8859_1_danish.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = stem_ISO_8859_1_danish.h; path = "src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_danish.h"; sourceTree = ""; }; + 0F83729543FE4699F8FBD30FB81F744B /* SnowballPrefixFilter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SnowballPrefixFilter.h; sourceTree = ""; }; + 11A8D97676AB54A53CF745F1D4D7F69D /* StandardAnalyzer.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = StandardAnalyzer.cpp; path = src/core/CLucene/analysis/standard/StandardAnalyzer.cpp; sourceTree = ""; }; + 11D0E1833074BEB8E6F684A42FE95044 /* SearchHeader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SearchHeader.h; path = src/core/CLucene/search/SearchHeader.h; sourceTree = ""; }; + 12339A167E0E680715E152B852731B01 /* SloppyPhraseScorer.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = SloppyPhraseScorer.cpp; path = src/core/CLucene/search/SloppyPhraseScorer.cpp; sourceTree = ""; }; + 12E46A287E0FB4B6063CB7C2D9C86CF7 /* utf8.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = utf8.cpp; path = src/shared/CLucene/config/utf8.cpp; sourceTree = ""; }; + 13391B8024D7F791872BFDA93B80D616 /* _TermScorer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _TermScorer.h; path = src/core/CLucene/search/_TermScorer.h; sourceTree = ""; }; + 1433A97B8E23322E2005FCB08355EE9C /* IndexDeletionPolicy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IndexDeletionPolicy.h; path = src/core/CLucene/index/IndexDeletionPolicy.h; sourceTree = ""; }; + 143BC2C4F6E956CD13DAD201BBF3EE7C /* BitSet.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BitSet.h; path = src/core/CLucene/util/BitSet.h; sourceTree = ""; }; + 14B777D3F3BB4DDCDACA126C7A6996FF /* Hits.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = Hits.cpp; path = src/core/CLucene/search/Hits.cpp; sourceTree = ""; }; + 160846AE5181166C8F5ADB61A178738B /* SimpleFragmenter.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = SimpleFragmenter.cpp; path = "src/contribs-lib/CLucene/highlighter/SimpleFragmenter.cpp"; sourceTree = ""; }; + 16435F0F9142ACFF595C4ACE6EE1445D /* WeightedTerm.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WeightedTerm.h; path = "src/contribs-lib/CLucene/highlighter/WeightedTerm.h"; sourceTree = ""; }; + 168A865B0ABD5080A8DC6CA26FF3EB48 /* StandardFilter.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = StandardFilter.cpp; path = src/core/CLucene/analysis/standard/StandardFilter.cpp; sourceTree = ""; }; + 180C4C05BE9C4F2FC7951B0D66C4718A /* IndexFileNameFilter.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = IndexFileNameFilter.cpp; path = src/core/CLucene/index/IndexFileNameFilter.cpp; sourceTree = ""; }; + 1854A2FB203E88A26CABDA7926F10864 /* MultipleTermPositions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MultipleTermPositions.h; path = src/core/CLucene/index/MultipleTermPositions.h; sourceTree = ""; }; + 18763936F9DB1C416B14F3354E26BB22 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/System/Library/Frameworks/Cocoa.framework; sourceTree = DEVELOPER_DIR; }; + 190847F87D4617A881A6CAE81866416C /* _BooleanScorer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _BooleanScorer.h; path = src/core/CLucene/search/_BooleanScorer.h; sourceTree = ""; }; + 1C292D2D4E627AD8906F8C132AD7C2D9 /* Payload.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = Payload.cpp; path = src/core/CLucene/index/Payload.cpp; sourceTree = ""; }; + 1C66E43064F5D11D648B10F570373110 /* BitSet.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = BitSet.cpp; path = src/core/CLucene/util/BitSet.cpp; sourceTree = ""; }; + 1C7C64BBB14327BDC8C5B009FD33E61E /* _SkipListWriter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _SkipListWriter.h; path = src/core/CLucene/index/_SkipListWriter.h; sourceTree = ""; }; + 1D1D499844CF12E6D69C54D74A27471C /* repl_lltot.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = repl_lltot.cpp; path = src/shared/CLucene/config/repl_lltot.cpp; sourceTree = ""; }; + 1D3A15FA7F517AEF0DC380D8AD518571 /* SegmentTermEnum.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = SegmentTermEnum.cpp; path = src/core/CLucene/index/SegmentTermEnum.cpp; sourceTree = ""; }; + 1D6A914258EBD9FDE85BFE2AD109C603 /* _IndexFileNames.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _IndexFileNames.h; path = src/core/CLucene/index/_IndexFileNames.h; sourceTree = ""; }; + 1D83C5C60A897FDBF02F03BFD330D541 /* MagicalRecord+Actions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MagicalRecord+Actions.h"; path = "MagicalRecord/Core/MagicalRecord+Actions.h"; sourceTree = ""; }; + 1DBEC6EE9286268A90147044DCD47E7E /* Encoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Encoder.h; path = "src/contribs-lib/CLucene/highlighter/Encoder.h"; sourceTree = ""; }; + 1E0F7FC1BE7DF8FE18DF1CA2200DD28A /* _ExactPhraseScorer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _ExactPhraseScorer.h; path = src/core/CLucene/search/_ExactPhraseScorer.h; sourceTree = ""; }; + 1E86B604323C8B5FB80BCFDCE700EF6F /* QueryFilter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = QueryFilter.h; path = src/core/CLucene/search/QueryFilter.h; sourceTree = ""; }; + 1EB326299D355D8CA5B6875F56EED551 /* _SegmentMergeQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _SegmentMergeQueue.h; path = src/core/CLucene/index/_SegmentMergeQueue.h; sourceTree = ""; }; + 1ED6559FEEE9CECAC6A3BB0757CD6BF5 /* DateFilter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DateFilter.h; path = src/core/CLucene/search/DateFilter.h; sourceTree = ""; }; + 1F3503944FB304BDB2BC1188B4EBF60C /* MagicalRecord+Actions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "MagicalRecord+Actions.m"; path = "MagicalRecord/Core/MagicalRecord+Actions.m"; sourceTree = ""; }; + 1FA0505C3440BDD35D779C960B044344 /* MagicalRecord+Options.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MagicalRecord+Options.h"; path = "MagicalRecord/Core/MagicalRecord+Options.h"; sourceTree = ""; }; + 1FAED71FFD390D524F311B0E56E56DF6 /* CLuceneSearchService+Subclassing.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "CLuceneSearchService+Subclassing.h"; sourceTree = ""; }; + 2149011252C8FF78D7B5A10C457CA705 /* NSManagedObject+MagicalFinders.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSManagedObject+MagicalFinders.m"; path = "MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalFinders.m"; sourceTree = ""; }; + 21F8217D3E4A913674D6E345B9DAE157 /* MultiSearcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MultiSearcher.h; path = src/core/CLucene/search/MultiSearcher.h; sourceTree = ""; }; + 21F85D5C2ECBFA9ECA299B2CF4274065 /* IndexReader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IndexReader.h; path = src/core/CLucene/index/IndexReader.h; sourceTree = ""; }; + 22925035AF0451BF1A610A5ECB288F0C /* NSEntityDescription+MagicalDataImport.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSEntityDescription+MagicalDataImport.m"; path = "MagicalRecord/Categories/DataImport/NSEntityDescription+MagicalDataImport.m"; sourceTree = ""; }; + 230439D6FC8DFEB0F6339DB302E8BF4A /* TermInfosReader.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = TermInfosReader.cpp; path = src/core/CLucene/index/TermInfosReader.cpp; sourceTree = ""; }; + 2396408CA68671A2E857C914F3976317 /* _RAMDirectory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _RAMDirectory.h; path = src/core/CLucene/store/_RAMDirectory.h; sourceTree = ""; }; + 242837C598D53CBCB4C0DE36179D409B /* _MultiSegmentReader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _MultiSegmentReader.h; path = src/core/CLucene/index/_MultiSegmentReader.h; sourceTree = ""; }; + 24CBCBAB90F4C54656F808F70A536916 /* byteinputstream.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = byteinputstream.h; path = "src/contribs-lib/CLucene/util/byteinputstream.h"; sourceTree = ""; }; + 25450189C760A9136476E940A557357C /* arrayinputstream.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = arrayinputstream.h; path = "src/contribs-lib/CLucene/util/arrayinputstream.h"; sourceTree = ""; }; + 25616461EF66368390BF28C0002A287F /* _DocumentsWriter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _DocumentsWriter.h; path = src/core/CLucene/index/_DocumentsWriter.h; sourceTree = ""; }; + 25C6A0E8EB7569E5019924489DC9AE41 /* SpanNotQuery.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SpanNotQuery.h; path = src/core/CLucene/search/spans/SpanNotQuery.h; sourceTree = ""; }; + 26E9093CA434C2BE8F55C943844CCF41 /* SpanTermQuery.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = SpanTermQuery.cpp; path = src/core/CLucene/search/spans/SpanTermQuery.cpp; sourceTree = ""; }; + 26F3F564C26FC944AE1B6D02C805F250 /* FSDirectory.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = FSDirectory.cpp; path = src/core/CLucene/store/FSDirectory.cpp; sourceTree = ""; }; + 273ECC52FD890567546DB588003B9CA4 /* _Lock.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _Lock.h; path = src/core/CLucene/store/_Lock.h; sourceTree = ""; }; + 27C6ABB018ED82CEA611E303A1932ECD /* libMagicalRecord.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libMagicalRecord.a; path = libMagicalRecord.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 28699CA56B726787125763DE171F50A4 /* StdHeader.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = StdHeader.cpp; path = src/core/CLucene/StdHeader.cpp; sourceTree = ""; }; + 28A80FE0CE72841F6ACB4CC6E597412C /* AnalysisHeader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AnalysisHeader.h; path = src/core/CLucene/analysis/AnalysisHeader.h; sourceTree = ""; }; + 2AA53D00527851483BCE9253C71EE597 /* FieldsReader.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = FieldsReader.cpp; path = src/core/CLucene/index/FieldsReader.cpp; sourceTree = ""; }; + 2AFA782B439DCBA08EE7067B00111FAA /* SimpleFragmenter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SimpleFragmenter.h; path = "src/contribs-lib/CLucene/highlighter/SimpleFragmenter.h"; sourceTree = ""; }; + 2B2334CDCD713C1978737851DFB1C554 /* SegmentMergeInfo.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = SegmentMergeInfo.cpp; path = src/core/CLucene/index/SegmentMergeInfo.cpp; sourceTree = ""; }; + 2D29CCEA051215B982E56EE9E9B9DE9B /* MagicalRecord+Setup.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MagicalRecord+Setup.h"; path = "MagicalRecord/Core/MagicalRecord+Setup.h"; sourceTree = ""; }; + 2D581AE304E7100E0C07D8475DC758A4 /* Highlighter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Highlighter.h; path = "src/contribs-lib/CLucene/highlighter/Highlighter.h"; sourceTree = ""; }; + 2DA50CA1C48A173C15A5C75F1B1BB9C5 /* stem_ISO_8859_1_porter.c */ = {isa = PBXFileReference; includeInIndex = 1; name = stem_ISO_8859_1_porter.c; path = "src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_porter.c"; sourceTree = ""; }; + 2E2E5D30FBA09058D87DFD27D390E32A /* Scorer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Scorer.h; path = "src/contribs-lib/CLucene/highlighter/Scorer.h"; sourceTree = ""; }; + 2F28AD8E054731ADD026D8BD44BF4BAC /* TextFragment.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = TextFragment.h; path = "src/contribs-lib/CLucene/highlighter/TextFragment.h"; sourceTree = ""; }; + 2FF76478C360613D6C1191D0B4D16B19 /* Sort.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Sort.h; path = src/core/CLucene/search/Sort.h; sourceTree = ""; }; + 300905B1467DF0F0B0432E9922F7534E /* Payload.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Payload.h; path = src/core/CLucene/index/Payload.h; sourceTree = ""; }; + 304C1D14DD142B8DC1F99C9F184610A0 /* gzipcompressstream.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = gzipcompressstream.cpp; path = "src/contribs-lib/CLucene/util/gzipcompressstream.cpp"; sourceTree = ""; }; + 30621FC0546DD2EEDEF03E70717EDC3C /* stem_UTF_8_italian.c */ = {isa = PBXFileReference; includeInIndex = 1; name = stem_UTF_8_italian.c; path = "src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_italian.c"; sourceTree = ""; }; + 3121E265518EA8E8C7A958A5B2BD4431 /* BRIndexUpdateContext.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = BRIndexUpdateContext.h; sourceTree = ""; }; + 314E2E2322AFFBD6B443F7CC43E0B030 /* _HitQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _HitQueue.h; path = src/core/CLucene/search/_HitQueue.h; sourceTree = ""; }; + 31AAA84E949DB6499E106CDFE1C5F887 /* GermanAnalyzer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GermanAnalyzer.h; path = "src/contribs-lib/CLucene/analysis/de/GermanAnalyzer.h"; sourceTree = ""; }; + 31D9AAE2EAA175F3032B32A8F44DF8CA /* NSManagedObject+MagicalRequests.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSManagedObject+MagicalRequests.m"; path = "MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalRequests.m"; sourceTree = ""; }; + 325DC359AD8630166B09793E4A07865D /* WildcardQuery.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WildcardQuery.h; path = src/core/CLucene/search/WildcardQuery.h; sourceTree = ""; }; + 32EF40F43C0E79EDA6AC7B771F91A8B8 /* stem_UTF_8_russian.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = stem_UTF_8_russian.h; path = "src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_russian.h"; sourceTree = ""; }; + 34BCA4D47291CCB62E7C29F16B2166F8 /* Misc.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Misc.h; path = src/shared/CLucene/util/Misc.h; sourceTree = ""; }; + 35C730D5CB487829EE698B00547F10E5 /* _ThreadLocal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _ThreadLocal.h; path = src/core/CLucene/util/_ThreadLocal.h; sourceTree = ""; }; + 360222A40011AB5A8DA35DD84A54216F /* stem_UTF_8_spanish.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = stem_UTF_8_spanish.h; path = "src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_spanish.h"; sourceTree = ""; }; + 3622396976233C97C77A3E6D676709DD /* CachingWrapperFilter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CachingWrapperFilter.h; path = src/core/CLucene/search/CachingWrapperFilter.h; sourceTree = ""; }; + 36E68752A9CE7CA7C0B5D3CF5EA0A10B /* StringBuffer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = StringBuffer.h; path = src/shared/CLucene/util/StringBuffer.h; sourceTree = ""; }; + 3752A24D7C023A343E01E77926F6C177 /* BRCLucene-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "BRCLucene-prefix.pch"; sourceTree = ""; }; + 3774004C41DD949B7A0331826C347035 /* Similarity.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Similarity.h; path = src/core/CLucene/search/Similarity.h; sourceTree = ""; }; + 37E166D0A9665D627DB93B3D81A7C0E7 /* stem_UTF_8_danish.c */ = {isa = PBXFileReference; includeInIndex = 1; name = stem_UTF_8_danish.c; path = "src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_danish.c"; sourceTree = ""; }; + 37E197EC5BE2083B5DE9E9D2BCA01F84 /* dirent.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = dirent.cpp; path = src/shared/CLucene/util/dirent.cpp; sourceTree = ""; }; + 37F384DE0CE8A12BEAFF006192E7ADAF /* PhraseQuery.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = PhraseQuery.cpp; path = src/core/CLucene/search/PhraseQuery.cpp; sourceTree = ""; }; + 37F6010272C60DA182D786B15E5A707A /* MatchAllDocsQuery.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = MatchAllDocsQuery.cpp; path = src/core/CLucene/search/MatchAllDocsQuery.cpp; sourceTree = ""; }; + 3868080E99BB6B84390DEDB91A8AD854 /* stem_ISO_8859_1_spanish.c */ = {isa = PBXFileReference; includeInIndex = 1; name = stem_ISO_8859_1_spanish.c; path = "src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_spanish.c"; sourceTree = ""; }; + 3938CE1590684E7ADD24573B5DDBF21A /* Fragmenter.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = Fragmenter.cpp; path = "src/contribs-lib/CLucene/highlighter/Fragmenter.cpp"; sourceTree = ""; }; + 39DDCD5CF3666E04838EB45456FD0650 /* NearSpansUnordered.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = NearSpansUnordered.cpp; path = src/core/CLucene/search/spans/NearSpansUnordered.cpp; sourceTree = ""; }; + 3A1B5CA716DE6A0613393366B4248241 /* QueryParserTokenManager.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = QueryParserTokenManager.cpp; path = src/core/CLucene/queryParser/QueryParserTokenManager.cpp; sourceTree = ""; }; + 3AAF3D5FCE31D774F775C9C1A8553486 /* _TermInfosReader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _TermInfosReader.h; path = src/core/CLucene/index/_TermInfosReader.h; sourceTree = ""; }; + 3AB59E5049FD20E071742B42AF626CB2 /* ThreadLocal.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = ThreadLocal.cpp; path = src/core/CLucene/util/ThreadLocal.cpp; sourceTree = ""; }; + 3B258C64CA03EF469669942463AC6232 /* BooleanQuery.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BooleanQuery.h; path = src/core/CLucene/search/BooleanQuery.h; sourceTree = ""; }; + 3BCD29DCC65A9A3F8161852A5D1CC1F8 /* libstemmer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = libstemmer.h; path = "src/contribs-lib/CLucene/snowball/include/libstemmer.h"; sourceTree = ""; }; + 3BF3EAF64EB4B8CF331CEDF303F86DAB /* clucene-config.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "clucene-config.h"; path = "BRCLucene/src/CLucene/clucene-config.h"; sourceTree = ""; }; + 3D40DE06986C284BD836D0BF861092DF /* stem_ISO_8859_1_finnish.c */ = {isa = PBXFileReference; includeInIndex = 1; name = stem_ISO_8859_1_finnish.c; path = "src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_finnish.c"; sourceTree = ""; }; + 3D5F3C65333A1367AD4D5756694479FD /* stem_ISO_8859_1_finnish.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = stem_ISO_8859_1_finnish.h; path = "src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_finnish.h"; sourceTree = ""; }; + 3DADB5089E70CB34FAAC7EAC398837AB /* DocumentsWriterThreadState.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = DocumentsWriterThreadState.cpp; path = src/core/CLucene/index/DocumentsWriterThreadState.cpp; sourceTree = ""; }; + 3E329701C3674ACE7FE348F0B5E0A7A4 /* Spans.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Spans.h; path = src/core/CLucene/search/spans/Spans.h; sourceTree = ""; }; + 3E86F7B9D0D971341DF96B742D3871E1 /* MagicalRecord+iCloud.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MagicalRecord+iCloud.h"; path = "MagicalRecord/Core/MagicalRecord+iCloud.h"; sourceTree = ""; }; + 3EB31227E6A3D4FD0D04997EC7940AB1 /* CLuceneSearchResult.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = CLuceneSearchResult.mm; sourceTree = ""; }; + 3EB60C40FA604671B29E09190847CD1B /* Pods-SampleOSXCocoaPodsProject-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-SampleOSXCocoaPodsProject-frameworks.sh"; sourceTree = ""; }; + 3F985B4F77CA962908E799DF572D0769 /* _bufferedstream.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _bufferedstream.h; path = src/core/CLucene/util/_bufferedstream.h; sourceTree = ""; }; + 3FF4ACDFB6F17F33D7DFA9A99EE18851 /* SegmentTermVector.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = SegmentTermVector.cpp; path = src/core/CLucene/index/SegmentTermVector.cpp; sourceTree = ""; }; + 401BC5367116136E063784470E5E55CE /* NSManagedObject+MagicalFinders.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSManagedObject+MagicalFinders.h"; path = "MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalFinders.h"; sourceTree = ""; }; + 4033C7C6D2FBBF221ACE15972744F395 /* stem_ISO_8859_1_spanish.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = stem_ISO_8859_1_spanish.h; path = "src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_spanish.h"; sourceTree = ""; }; + 41798227CBCF71425709AAFCC5591825 /* LanguageBasedAnalyzer.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = LanguageBasedAnalyzer.cpp; path = "src/contribs-lib/CLucene/analysis/LanguageBasedAnalyzer.cpp"; sourceTree = ""; }; + 41A19C4E32DDE5E1F4632166DADF9109 /* _TermVector.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _TermVector.h; path = src/core/CLucene/index/_TermVector.h; sourceTree = ""; }; + 41E221654E18B2F1B7964761C29B20BC /* _MD5Digester.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _MD5Digester.h; path = src/core/CLucene/util/_MD5Digester.h; sourceTree = ""; }; + 42E07CAFAA0287DD31F9CD2B526E57FE /* SpanOrQuery.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = SpanOrQuery.cpp; path = src/core/CLucene/search/spans/SpanOrQuery.cpp; sourceTree = ""; }; + 4318EB604F269B47211DA5E7E36A2B90 /* MultiSearcher.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = MultiSearcher.cpp; path = src/core/CLucene/search/MultiSearcher.cpp; sourceTree = ""; }; + 4344093172180902D2B69E0AB1DCAB6E /* stem_UTF_8_english.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = stem_UTF_8_english.h; path = "src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_english.h"; sourceTree = ""; }; + 4357B8E7FE60E58180A2D3E6ACB22D7D /* repl_wchar.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = repl_wchar.h; path = src/shared/CLucene/config/repl_wchar.h; sourceTree = ""; }; + 445FC1FC1CAD9EE473B74521FC617E17 /* _threads.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _threads.h; path = src/shared/CLucene/config/_threads.h; sourceTree = ""; }; + 44DC01C644FD82F7AD1E8C70F7D766F3 /* BRSimpleSortDescriptor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = BRSimpleSortDescriptor.m; sourceTree = ""; }; + 44F29302F058F65BED3485600CB4FCE1 /* MultiTermQuery.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MultiTermQuery.h; path = src/core/CLucene/search/MultiTermQuery.h; sourceTree = ""; }; + 44FE212087FC89F90B5014EBC06EA8BD /* SimpleHTMLFormatter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SimpleHTMLFormatter.h; path = "src/contribs-lib/CLucene/highlighter/SimpleHTMLFormatter.h"; sourceTree = ""; }; + 451CD9FE257D429B7F84846D6E578828 /* PrefixQuery.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PrefixQuery.h; path = src/core/CLucene/search/PrefixQuery.h; sourceTree = ""; }; + 457CF1D6AE50F3EF56DB858BB2AAF861 /* SpanScorer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SpanScorer.h; path = src/core/CLucene/search/spans/SpanScorer.h; sourceTree = ""; }; + 4589AB69F66A9B2A1031A97BAC729388 /* GermanAnalyzer.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = GermanAnalyzer.cpp; path = "src/contribs-lib/CLucene/analysis/de/GermanAnalyzer.cpp"; sourceTree = ""; }; + 46124E452DD89143D740805694179A66 /* GermanStemmer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GermanStemmer.h; path = "src/contribs-lib/CLucene/analysis/de/GermanStemmer.h"; sourceTree = ""; }; + 4630FF2C1003236B762B9DC84AE1F9B4 /* Field.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = Field.cpp; path = src/core/CLucene/document/Field.cpp; sourceTree = ""; }; + 4682B8E786ADB56A04E9C7020B954471 /* NSManagedObjectModel+MagicalRecord.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSManagedObjectModel+MagicalRecord.m"; path = "MagicalRecord/Categories/NSManagedObjectModel+MagicalRecord.m"; sourceTree = ""; }; + 46BB7F5F5FE537867B3BF4DBD4B3FE95 /* NSExpression+CLuceneAdditions.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = "NSExpression+CLuceneAdditions.mm"; sourceTree = ""; }; + 47F78B60B23DBF5C570914FDB36A8C4F /* FilteredTermEnum.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = FilteredTermEnum.cpp; path = src/core/CLucene/search/FilteredTermEnum.cpp; sourceTree = ""; }; + 47FF44CE8D00E48678114C1845CCC068 /* MagicalRecord.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MagicalRecord.m; path = MagicalRecord/Core/MagicalRecord.m; sourceTree = ""; }; + 4810634A65400209479B92D7737AE908 /* CompoundFile.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = CompoundFile.cpp; path = src/core/CLucene/index/CompoundFile.cpp; sourceTree = ""; }; + 4845AF0122206B78A3E6B14F177F3B6E /* Analyzers.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = Analyzers.cpp; path = src/core/CLucene/analysis/Analyzers.cpp; sourceTree = ""; }; + 494509771B14BC35FBE0365EEBF547C8 /* gunichartables.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = gunichartables.cpp; path = src/shared/CLucene/config/gunichartables.cpp; sourceTree = ""; }; + 4A01353E27E8F46DDA9FBB97266F6203 /* Explanation.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = Explanation.cpp; path = src/core/CLucene/search/Explanation.cpp; sourceTree = ""; }; + 4A1244C144ABC03AEFAA64B27128C9A6 /* stem_UTF_8_swedish.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = stem_UTF_8_swedish.h; path = "src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_swedish.h"; sourceTree = ""; }; + 4ACCEB697C259D88C464803E9442F3F8 /* MagicalRecord.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MagicalRecord.h; path = MagicalRecord/Core/MagicalRecord.h; sourceTree = ""; }; + 4AFC58E25E869A576811207B854DDFE5 /* utilities.c */ = {isa = PBXFileReference; includeInIndex = 1; name = utilities.c; path = "src/contribs-lib/CLucene/snowball/runtime/utilities.c"; sourceTree = ""; }; + 4B17F4367A42B45AA2A6E6F5469ED547 /* QueryToken.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = QueryToken.h; path = src/core/CLucene/queryParser/QueryToken.h; sourceTree = ""; }; + 4B93BA74B3640BA25FC1BF308F0F3363 /* _dirent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _dirent.h; path = src/shared/CLucene/util/_dirent.h; sourceTree = ""; }; + 4C51695D1BE52731251898BE7556F77C /* PorterStemmer.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = PorterStemmer.cpp; path = "src/contribs-lib/CLucene/analysis/PorterStemmer.cpp"; sourceTree = ""; }; + 4C6CD0B01AE2A4408A3130FE868F44C8 /* BRSortDescriptor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = BRSortDescriptor.h; sourceTree = ""; }; + 4CA615C122034D1AC7E0D6FB1343D3DC /* stem_UTF_8_russian.c */ = {isa = PBXFileReference; includeInIndex = 1; name = stem_UTF_8_russian.c; path = "src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_russian.c"; sourceTree = ""; }; + 4CECE0DFD6E127CF44C25C07A58BD354 /* BRSearchFields.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = BRSearchFields.m; sourceTree = ""; }; + 4CFFD0B50C0A60A76AA03DED6D803AA2 /* VoidList.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VoidList.h; path = src/core/CLucene/util/VoidList.h; sourceTree = ""; }; + 4D2F0F5A75292BDCBE83E1914BCBE8DE /* LockFactory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LockFactory.h; path = src/core/CLucene/store/LockFactory.h; sourceTree = ""; }; + 4F08853CCF0BBB97CA77669DF5E3616C /* NSManagedObject+MagicalAggregation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSManagedObject+MagicalAggregation.m"; path = "MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalAggregation.m"; sourceTree = ""; }; + 4F5C2FC73476F796BDB22D49A533E8DE /* repl_tcstod.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = repl_tcstod.cpp; path = src/shared/CLucene/config/repl_tcstod.cpp; sourceTree = ""; }; + 4F87B24BFBB5A9116538FE400C44BC00 /* DateField.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = DateField.cpp; path = src/core/CLucene/document/DateField.cpp; sourceTree = ""; }; + 4FD115D7A8137191487C2B152159C4D5 /* QueryTermExtractor.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = QueryTermExtractor.cpp; path = "src/contribs-lib/CLucene/highlighter/QueryTermExtractor.cpp"; sourceTree = ""; }; + 4FF03957DDF418768204AB82749529B8 /* Highlighter.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = Highlighter.cpp; path = "src/contribs-lib/CLucene/highlighter/Highlighter.cpp"; sourceTree = ""; }; + 50843DCEC8081B4FE6D388E678A5BBF6 /* RangeQuery.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = RangeQuery.cpp; path = src/core/CLucene/search/RangeQuery.cpp; sourceTree = ""; }; + 5096DBCDE2F3145408B5071845D8FD25 /* _SegmentTermEnum.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _SegmentTermEnum.h; path = src/core/CLucene/index/_SegmentTermEnum.h; sourceTree = ""; }; + 514BBCF5E0C7EC8C213D60743F02B873 /* Terms.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = Terms.cpp; path = src/core/CLucene/index/Terms.cpp; sourceTree = ""; }; + 5196B1B4E0135F36E2F322EC648AE605 /* FastCharStream.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = FastCharStream.cpp; path = src/core/CLucene/util/FastCharStream.cpp; sourceTree = ""; }; + 528AC44A4F7DA848A07DE52D9B589973 /* stem_UTF_8_norwegian.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = stem_UTF_8_norwegian.h; path = "src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_norwegian.h"; sourceTree = ""; }; + 52E34AE1E545535E031A384A1E2066C3 /* gzipcompressstream.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = gzipcompressstream.h; path = "src/contribs-lib/CLucene/util/gzipcompressstream.h"; sourceTree = ""; }; + 530D202CE8C5CE77D1EF342DC68808C1 /* ScorerDocQueue.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = ScorerDocQueue.cpp; path = src/core/CLucene/search/ScorerDocQueue.cpp; sourceTree = ""; }; + 535BA77ED0A8D1E2DD5975B0EC39886A /* QueryParserTokenManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = QueryParserTokenManager.h; path = src/core/CLucene/queryParser/QueryParserTokenManager.h; sourceTree = ""; }; + 53D7E1985CD4A9D9DFFA24C44508D569 /* MatchAllDocsQuery.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MatchAllDocsQuery.h; path = src/core/CLucene/search/MatchAllDocsQuery.h; sourceTree = ""; }; + 54395A1FCCDC02A6D3543EB077F9F266 /* NSManagedObjectModel+MagicalRecord.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSManagedObjectModel+MagicalRecord.h"; path = "MagicalRecord/Categories/NSManagedObjectModel+MagicalRecord.h"; sourceTree = ""; }; + 546C5168B58A308D4732D680CEC01259 /* FieldCache.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = FieldCache.cpp; path = src/core/CLucene/search/FieldCache.cpp; sourceTree = ""; }; + 54967098508D5BDCA878B9D8DE0CE8FE /* MergeScheduler.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = MergeScheduler.cpp; path = src/core/CLucene/index/MergeScheduler.cpp; sourceTree = ""; }; + 5593F49590A8635FA55534D225B58198 /* PhraseQuery.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PhraseQuery.h; path = src/core/CLucene/search/PhraseQuery.h; sourceTree = ""; }; + 5645D2A6B12FAA9F00560F84BE86BD08 /* stem_ISO_8859_1_english.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = stem_ISO_8859_1_english.h; path = "src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_english.h"; sourceTree = ""; }; + 565A4AE0173A9903DE6217B34AE91B7F /* _CharStream.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _CharStream.h; path = src/core/CLucene/queryParser/_CharStream.h; sourceTree = ""; }; + 565AD8BF5F33ED2565C3CD59E92F0BD0 /* DirectoryIndexReader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DirectoryIndexReader.h; path = src/core/CLucene/index/DirectoryIndexReader.h; sourceTree = ""; }; + 5699E43FBC9BF0A4A9D576488AD6ED7C /* NSManagedObject+MagicalDataImport.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSManagedObject+MagicalDataImport.m"; path = "MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalDataImport.m"; sourceTree = ""; }; + 56FB61C99ABBFE8FE9A0767C5EA09D86 /* IndexSearcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IndexSearcher.h; path = src/core/CLucene/search/IndexSearcher.h; sourceTree = ""; }; + 5725D6D96EE9EC0FF8A0B778F7176B24 /* stem_UTF_8_spanish.c */ = {isa = PBXFileReference; includeInIndex = 1; name = stem_UTF_8_spanish.c; path = "src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_spanish.c"; sourceTree = ""; }; + 57675D93A6A70DB6DB160E9A141DD753 /* FieldCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FieldCache.h; path = src/core/CLucene/search/FieldCache.h; sourceTree = ""; }; + 576FEC692C313CBC17D00EDB2FCFFCB0 /* modules.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = modules.h; path = "src/contribs-lib/CLucene/snowball/libstemmer/modules.h"; sourceTree = ""; }; + 57988E00253B2CC4D707476C6EA54FB6 /* Array.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Array.h; path = src/core/CLucene/util/Array.h; sourceTree = ""; }; + 5A4C0E6A1FAC0E2D123E1802366AFA46 /* SkipListWriter.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = SkipListWriter.cpp; path = src/core/CLucene/index/SkipListWriter.cpp; sourceTree = ""; }; + 5A5A283AA41EC7E044725D1807170A84 /* CachingTokenFilter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CachingTokenFilter.h; path = src/core/CLucene/analysis/CachingTokenFilter.h; sourceTree = ""; }; + 5AD70E6FA6AE0DBA17B210AA6D696A1E /* Formatter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Formatter.h; path = "src/contribs-lib/CLucene/highlighter/Formatter.h"; sourceTree = ""; }; + 5B3A5FDD9CF9B743E9622E1570B16534 /* Lock.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Lock.h; path = src/core/CLucene/store/Lock.h; sourceTree = ""; }; + 5BB8E1D0E5AD7BA32AE01C91E208F9F3 /* NSDateComponents+BRFullTextSearchAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "NSDateComponents+BRFullTextSearchAdditions.h"; sourceTree = ""; }; + 5BD1021A5307DE1A327AA1A6FBA0EBD7 /* GermanStemmer.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = GermanStemmer.cpp; path = "src/contribs-lib/CLucene/analysis/de/GermanStemmer.cpp"; sourceTree = ""; }; + 5BFE4112BB325408798A72589563CC11 /* NSNumber+MagicalDataImport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSNumber+MagicalDataImport.h"; path = "MagicalRecord/Categories/DataImport/NSNumber+MagicalDataImport.h"; sourceTree = ""; }; + 5C8D882550A37E0ADD79B989F4E173CF /* BRSimpleIndexable.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = BRSimpleIndexable.m; sourceTree = ""; }; + 5C936302A8E89C954D3DF8CD388DFA4F /* NSPersistentStoreCoordinator+MagicalRecord.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSPersistentStoreCoordinator+MagicalRecord.h"; path = "MagicalRecord/Categories/NSPersistentStoreCoordinator+MagicalRecord.h"; sourceTree = ""; }; + 5D2FA179EC8753C40DB4CE79FA6A2EF6 /* SpanQueryFilter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SpanQueryFilter.h; path = src/core/CLucene/search/SpanQueryFilter.h; sourceTree = ""; }; + 5D393B5BB643173327C8BFD7FCDC801C /* TermVectorReader.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = TermVectorReader.cpp; path = src/core/CLucene/index/TermVectorReader.cpp; sourceTree = ""; }; + 5D51E199BC20841D7D2781757A091787 /* MD5Digester.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = MD5Digester.cpp; path = src/core/CLucene/util/MD5Digester.cpp; sourceTree = ""; }; + 5D84E50D8089BC67C109073E270E062A /* BRCLucene.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = BRCLucene.xcconfig; sourceTree = ""; }; + 5D9016A5EE2DA8D63DB51625945DB157 /* Encoder.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = Encoder.cpp; path = "src/contribs-lib/CLucene/highlighter/Encoder.cpp"; sourceTree = ""; }; + 5DEE2ACB39CDA60E57D674B0D961C87D /* ConjunctionScorer.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = ConjunctionScorer.cpp; path = src/core/CLucene/search/ConjunctionScorer.cpp; sourceTree = ""; }; + 5E0570B36187668126F98C86D9E8246B /* MergePolicy.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = MergePolicy.cpp; path = src/core/CLucene/index/MergePolicy.cpp; sourceTree = ""; }; + 5E7E512457ED609FE6DB9B778AC966BF /* Term.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = Term.cpp; path = src/core/CLucene/index/Term.cpp; sourceTree = ""; }; + 5FC7273589812AE37EBC18FE943DACAC /* MultiReader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MultiReader.h; path = src/core/CLucene/index/MultiReader.h; sourceTree = ""; }; + 602B0CB7642E3E23CEE0826E85016917 /* MagicalRecord+Setup.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "MagicalRecord+Setup.m"; path = "MagicalRecord/Core/MagicalRecord+Setup.m"; sourceTree = ""; }; + 60BE5BFFE0A4333C975AB8C1DBCA2F7D /* _FastCharStream.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _FastCharStream.h; path = src/core/CLucene/queryParser/_FastCharStream.h; sourceTree = ""; }; + 622638E352513B394B4BD8B58436FF78 /* FieldsWriter.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = FieldsWriter.cpp; path = src/core/CLucene/index/FieldsWriter.cpp; sourceTree = ""; }; + 623F87CAD01CC9593D3F2AF8920BD43A /* HitQueue.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = HitQueue.cpp; path = src/core/CLucene/search/HitQueue.cpp; sourceTree = ""; }; + 62D0ACCC127DFA017DCC1B9DDAE4C9DD /* _CompoundFile.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _CompoundFile.h; path = src/core/CLucene/index/_CompoundFile.h; sourceTree = ""; }; + 67778391524206BE409425B899B19BBC /* CachingSpanFilter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CachingSpanFilter.h; path = src/core/CLucene/search/CachingSpanFilter.h; sourceTree = ""; }; + 67D5951EAB1A789975725C408B9C632D /* Document.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Document.h; path = src/core/CLucene/document/Document.h; sourceTree = ""; }; + 6864B6D38A8257008CD4050E1CC6D985 /* SpanWeight.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = SpanWeight.cpp; path = src/core/CLucene/search/spans/SpanWeight.cpp; sourceTree = ""; }; + 68F49BD6F0F4E5884425561E3581F897 /* streamarray.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = streamarray.h; path = "src/contribs-lib/CLucene/util/streamarray.h"; sourceTree = ""; }; + 6937EEEDDF0A6F7B45AA150C89DC1B86 /* IndexSearcher.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = IndexSearcher.cpp; path = src/core/CLucene/search/IndexSearcher.cpp; sourceTree = ""; }; + 6A0E2227514D895B3F4AC5AA68B07C1B /* IndexDeletionPolicy.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = IndexDeletionPolicy.cpp; path = src/core/CLucene/index/IndexDeletionPolicy.cpp; sourceTree = ""; }; + 6A78D7DE1B699BA6E2878A1E775B94F5 /* Filter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Filter.h; path = src/core/CLucene/search/Filter.h; sourceTree = ""; }; + 6AD7B1907D750C3A3FC4CB85E7A408A4 /* NSManagedObjectContext+MagicalSaves.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSManagedObjectContext+MagicalSaves.h"; path = "MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalSaves.h"; sourceTree = ""; }; + 6AF5C81FE77DA7B1221584B0BC9E685B /* RangeFilter.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = RangeFilter.cpp; path = src/core/CLucene/search/RangeFilter.cpp; sourceTree = ""; }; + 6C3991FB606E8B6F0E61765A67993309 /* NSManagedObject+MagicalRequests.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSManagedObject+MagicalRequests.h"; path = "MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalRequests.h"; sourceTree = ""; }; + 6C6A1340650D4FE35D58081AF93D478E /* MagicalRecord+ShorthandSupport.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "MagicalRecord+ShorthandSupport.m"; path = "MagicalRecord/Core/MagicalRecord+ShorthandSupport.m"; sourceTree = ""; }; + 6CCE18F60E76823D1D0CEB104E3B34E5 /* stem_ISO_8859_1_italian.c */ = {isa = PBXFileReference; includeInIndex = 1; name = stem_ISO_8859_1_italian.c; path = "src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_italian.c"; sourceTree = ""; }; + 6D1E66320368050F0CB4E818526CD761 /* MagicalRecord+ErrorHandling.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MagicalRecord+ErrorHandling.h"; path = "MagicalRecord/Core/MagicalRecord+ErrorHandling.h"; sourceTree = ""; }; + 6EE034D82C72BA2ABEAA10EA084DFB9E /* PriorityQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PriorityQueue.h; path = src/core/CLucene/util/PriorityQueue.h; sourceTree = ""; }; + 6F37DA5C715840CDF13DFACBDB17703C /* MagicalRecord+iCloud.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "MagicalRecord+iCloud.m"; path = "MagicalRecord/Core/MagicalRecord+iCloud.m"; sourceTree = ""; }; + 6F48F40293B78972A8E4FE5291103F04 /* NSAttributeDescription+MagicalDataImport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSAttributeDescription+MagicalDataImport.h"; path = "MagicalRecord/Categories/DataImport/NSAttributeDescription+MagicalDataImport.h"; sourceTree = ""; }; + 6F76B28434E2485D484EFA488754A005 /* CLuceneSearchResults.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = CLuceneSearchResults.h; sourceTree = ""; }; + 704BE68679FA060BDA30D873351D3054 /* FuzzyQuery.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = FuzzyQuery.cpp; path = src/core/CLucene/search/FuzzyQuery.cpp; sourceTree = ""; }; + 707558E8FCA98F05F1D440606B6EAFBC /* stem_UTF_8_french.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = stem_UTF_8_french.h; path = "src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_french.h"; sourceTree = ""; }; + 70CEBE56AA04C0898EE29EB02E48B403 /* api.c */ = {isa = PBXFileReference; includeInIndex = 1; name = api.c; path = "src/contribs-lib/CLucene/snowball/runtime/api.c"; sourceTree = ""; }; + 70D0DFC72EAF53657FBF857A3A2E2EA3 /* BooleanScorer2.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = BooleanScorer2.cpp; path = src/core/CLucene/search/BooleanScorer2.cpp; sourceTree = ""; }; + 711FF6036DABA264EC4881238C158221 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/System/Library/Frameworks/CoreData.framework; sourceTree = DEVELOPER_DIR; }; + 71C5126459A142615CF04F9D055B7FAE /* NSData+CLuceneAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "NSData+CLuceneAdditions.h"; sourceTree = ""; }; + 732976431692D5CCC977851BAB498AD3 /* NSManagedObjectContext+MagicalRecord.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSManagedObjectContext+MagicalRecord.h"; path = "MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalRecord.h"; sourceTree = ""; }; + 7355B6411CE91CA576F1012FE24D7F1A /* IndexOutput.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IndexOutput.h; path = src/core/CLucene/store/IndexOutput.h; sourceTree = ""; }; + 73573AB65382DF0CB819D8C854611A80 /* NSManagedObjectContext+MagicalSaves.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSManagedObjectContext+MagicalSaves.m"; path = "MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalSaves.m"; sourceTree = ""; }; + 7364535410E14E3C9F61C87C9234E691 /* QueryToken.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = QueryToken.cpp; path = src/core/CLucene/queryParser/QueryToken.cpp; sourceTree = ""; }; + 73A1297033B2F3481F639BFE07EFC48C /* Sort.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = Sort.cpp; path = src/core/CLucene/search/Sort.cpp; sourceTree = ""; }; + 73F7A0707352461774A523E3F7C49BB2 /* libPods-SampleOSXCocoaPodsProject.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = "libPods-SampleOSXCocoaPodsProject.a"; path = "libPods-SampleOSXCocoaPodsProject.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 746FF232FDDEAF58F0B56FCC776F7062 /* BRIndexable.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = BRIndexable.h; sourceTree = ""; }; + 749FA81D4B3B0B292053540DA6302AAC /* _PhraseScorer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _PhraseScorer.h; path = src/core/CLucene/search/_PhraseScorer.h; sourceTree = ""; }; + 74D28A2D241FCF08E85C7A4C1B701534 /* StandardFilter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = StandardFilter.h; path = src/core/CLucene/analysis/standard/StandardFilter.h; sourceTree = ""; }; + 74F4CF7F65D860B5BADEFD9CA5501C3F /* NSPersistentStoreCoordinator+MagicalRecord.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSPersistentStoreCoordinator+MagicalRecord.m"; path = "MagicalRecord/Categories/NSPersistentStoreCoordinator+MagicalRecord.m"; sourceTree = ""; }; + 75063B9B316C66D608EDE01E9F7ED037 /* IndexModifier.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IndexModifier.h; path = src/core/CLucene/index/IndexModifier.h; sourceTree = ""; }; + 751E99FD31C5F968474E887D74952EAF /* Formatter.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = Formatter.cpp; path = "src/contribs-lib/CLucene/highlighter/Formatter.cpp"; sourceTree = ""; }; + 759A6B18D53B006E1153063E0CB40103 /* Pods-SampleOSXCocoaPodsProject-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-SampleOSXCocoaPodsProject-resources.sh"; sourceTree = ""; }; + 75CAE0B5E26F0486A996B7966BA714AF /* TextFragment.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = TextFragment.cpp; path = "src/contribs-lib/CLucene/highlighter/TextFragment.cpp"; sourceTree = ""; }; + 75CD4B9DA1FB572EC09D675996FA757D /* SpanFirstQuery.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = SpanFirstQuery.cpp; path = src/core/CLucene/search/spans/SpanFirstQuery.cpp; sourceTree = ""; }; + 76802644BFAA4A2CF7402242595FA840 /* Directory.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = Directory.cpp; path = src/core/CLucene/store/Directory.cpp; sourceTree = ""; }; + 768BCEBCB1F5B77EB7162D38E591EA94 /* CLuceneIndexUpdateContext.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = CLuceneIndexUpdateContext.mm; sourceTree = ""; }; + 76B196F74ADEDFFEC18A542BAFCB3864 /* PorterStemmer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PorterStemmer.h; path = "src/contribs-lib/CLucene/analysis/PorterStemmer.h"; sourceTree = ""; }; + 774D1CAFFE38E669B316371202EC01BB /* stem_ISO_8859_1_dutch.c */ = {isa = PBXFileReference; includeInIndex = 1; name = stem_ISO_8859_1_dutch.c; path = "src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_dutch.c"; sourceTree = ""; }; + 78DA43BDF5AE4D266B1761EFDA15B06A /* stem_UTF_8_portuguese.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = stem_UTF_8_portuguese.h; path = "src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_portuguese.h"; sourceTree = ""; }; + 7B8455F26FEAA601EEF28CBDA0E77EFF /* TokenGroup.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = TokenGroup.cpp; path = "src/contribs-lib/CLucene/highlighter/TokenGroup.cpp"; sourceTree = ""; }; + 7B9E7B01F4B961360C0298EFC9871F3D /* CLucene.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLucene.h; path = src/core/CLucene.h; sourceTree = ""; }; + 7BDEB8AE28799FF0F409BD829F95D586 /* MultiFieldQueryParser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MultiFieldQueryParser.h; path = src/core/CLucene/queryParser/MultiFieldQueryParser.h; sourceTree = ""; }; + 7D73C41280AE19C57E5FE7923805D3DF /* ChainedFilter.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = ChainedFilter.cpp; path = src/core/CLucene/search/ChainedFilter.cpp; sourceTree = ""; }; + 7DC2BF81F57D621CB1634D58328D9E10 /* gzipinputstream.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = gzipinputstream.cpp; path = "src/contribs-lib/CLucene/util/gzipinputstream.cpp"; sourceTree = ""; }; + 7DE4D53F6117DD810988D22559DEBB6C /* Term.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Term.h; path = src/core/CLucene/index/Term.h; sourceTree = ""; }; + 7E595E37C4C26DF2BB95D1F030181515 /* BRSearchResult.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = BRSearchResult.h; sourceTree = ""; }; + 7F38B75273064902F07DB7627BA873D3 /* _SkipListReader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _SkipListReader.h; path = src/core/CLucene/index/_SkipListReader.h; sourceTree = ""; }; + 805A1875D72B17EA8F93E4504129E256 /* Equators.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Equators.h; path = src/core/CLucene/util/Equators.h; sourceTree = ""; }; + 806D8004C981177DFCC2F31F3E474AFC /* Pods-SampleOSXCocoaPodsProject-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-SampleOSXCocoaPodsProject-dummy.m"; sourceTree = ""; }; + 80CB318DA6866FC55B02FE56AB1AF7DD /* SegmentReader.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = SegmentReader.cpp; path = src/core/CLucene/index/SegmentReader.cpp; sourceTree = ""; }; + 80D033208C8F70340BFA0C437F5419E8 /* _TermSpans.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _TermSpans.h; path = src/core/CLucene/search/spans/_TermSpans.h; sourceTree = ""; }; + 80D44BBBF7D5F4C235FD4507234AF3AA /* stem_ISO_8859_1_danish.c */ = {isa = PBXFileReference; includeInIndex = 1; name = stem_ISO_8859_1_danish.c; path = "src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_danish.c"; sourceTree = ""; }; + 8375322C0E6E0A696CA052E0863315B8 /* NSObject+MagicalDataImport.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSObject+MagicalDataImport.m"; path = "MagicalRecord/Categories/DataImport/NSObject+MagicalDataImport.m"; sourceTree = ""; }; + 8464801A3162D216C408939E94682104 /* _gunichartables.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _gunichartables.h; path = src/shared/CLucene/config/_gunichartables.h; sourceTree = ""; }; + 85488AB0AF28DF9CB8913D071B2B487D /* TermInfo.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = TermInfo.cpp; path = src/core/CLucene/index/TermInfo.cpp; sourceTree = ""; }; + 862BD47B100B863FB23CBDFF7FED0120 /* Equators.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = Equators.cpp; path = src/core/CLucene/util/Equators.cpp; sourceTree = ""; }; + 86458B28609CD4DEE0C01F0B61C94993 /* _FieldsWriter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _FieldsWriter.h; path = src/core/CLucene/index/_FieldsWriter.h; sourceTree = ""; }; + 86C7AF748C23E9524FBE0DE3A322FA84 /* MagicalRecord+Options.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "MagicalRecord+Options.m"; path = "MagicalRecord/Core/MagicalRecord+Options.m"; sourceTree = ""; }; + 8A2AD88A9226B521A8CF3AB9C9FA982A /* _MMapIndexInput.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _MMapIndexInput.h; path = src/core/CLucene/store/_MMapIndexInput.h; sourceTree = ""; }; + 8A5AC4B935F997D71A1EEF1C3B4C0AE4 /* NSEntityDescription+MagicalDataImport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSEntityDescription+MagicalDataImport.h"; path = "MagicalRecord/Categories/DataImport/NSEntityDescription+MagicalDataImport.h"; sourceTree = ""; }; + 8AAF40A7B8629C71DB96E76244F41DA9 /* FieldDoc.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FieldDoc.h; path = src/core/CLucene/search/FieldDoc.h; sourceTree = ""; }; + 8AF2E83AC1617C37BCAC0D351DF78A18 /* threads.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = threads.cpp; path = src/shared/CLucene/config/threads.cpp; sourceTree = ""; }; + 8B5A4FD5F8DCA5544DB65669242763BD /* FieldDocSortedHitQueue.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = FieldDocSortedHitQueue.cpp; path = src/core/CLucene/search/FieldDocSortedHitQueue.cpp; sourceTree = ""; }; + 8BB65A0BEDC31555BF4FC7A35E4672FB /* stem_ISO_8859_1_italian.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = stem_ISO_8859_1_italian.h; path = "src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_italian.h"; sourceTree = ""; }; + 8BC4A9690E8354EE34E7201267C06527 /* SpanNearQuery.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = SpanNearQuery.cpp; path = src/core/CLucene/search/spans/SpanNearQuery.cpp; sourceTree = ""; }; + 8D062465F0B789C8FD7784D4A8057CD9 /* TermVectorWriter.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = TermVectorWriter.cpp; path = src/core/CLucene/index/TermVectorWriter.cpp; sourceTree = ""; }; + 8D420A8DB25674848611CB3D084E8E6F /* BooleanScorer.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = BooleanScorer.cpp; path = src/core/CLucene/search/BooleanScorer.cpp; sourceTree = ""; }; + 8DB89D6654C129BAAD85011D9084AB20 /* IndexWriter.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = IndexWriter.cpp; path = src/core/CLucene/index/IndexWriter.cpp; sourceTree = ""; }; + 8EA8E754202E73D65B760DE359372F1A /* NSDateComponents+BRFullTextSearchAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "NSDateComponents+BRFullTextSearchAdditions.m"; sourceTree = ""; }; + 8EAB7FE80BFBE5C37603ECCF77E9D41D /* NSRelationshipDescription+MagicalDataImport.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSRelationshipDescription+MagicalDataImport.m"; path = "MagicalRecord/Categories/DataImport/NSRelationshipDescription+MagicalDataImport.m"; sourceTree = ""; }; + 8F092DCD5B54E94F989E4CCB3D9D63AE /* stem_UTF_8_norwegian.c */ = {isa = PBXFileReference; includeInIndex = 1; name = stem_UTF_8_norwegian.c; path = "src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_norwegian.c"; sourceTree = ""; }; + 8F34B4DB0BB9B6F5EF25A0D2EEE5CEE2 /* SnowballFilter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SnowballFilter.h; path = "src/contribs-lib/CLucene/snowball/SnowballFilter.h"; sourceTree = ""; }; + 8F46004ECA1F2D53C53D2E135C212E43 /* TokenGroup.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = TokenGroup.h; path = "src/contribs-lib/CLucene/highlighter/TokenGroup.h"; sourceTree = ""; }; + 9052F73AD94DE0D3C9ADDDE5CACECAB8 /* _ConjunctionScorer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _ConjunctionScorer.h; path = src/core/CLucene/search/_ConjunctionScorer.h; sourceTree = ""; }; + 90AE23877E4D82C45DC08528DFAA6CB8 /* stem_UTF_8_danish.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = stem_UTF_8_danish.h; path = "src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_danish.h"; sourceTree = ""; }; + 90C521B8E2BF3445D457B52C323FCA8D /* MagicalImportFunctions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MagicalImportFunctions.h; path = MagicalRecord/Categories/DataImport/MagicalImportFunctions.h; sourceTree = ""; }; + 9100035CAE57C0A81C77663D17D5E4C5 /* SpanFilterResult.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SpanFilterResult.h; path = src/core/CLucene/search/SpanFilterResult.h; sourceTree = ""; }; + 91213B3768B944E4C0315BB2D97BD481 /* stem_UTF_8_french.c */ = {isa = PBXFileReference; includeInIndex = 1; name = stem_UTF_8_french.c; path = "src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_french.c"; sourceTree = ""; }; + 92409982DC51989EE6B7503626811BA4 /* CachingSpanFilter.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = CachingSpanFilter.cpp; path = src/core/CLucene/search/CachingSpanFilter.cpp; sourceTree = ""; }; + 92B18DDDADADC2A9CCF4AF1D7C76CC33 /* SpanNearQuery.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SpanNearQuery.h; path = src/core/CLucene/search/spans/SpanNearQuery.h; sourceTree = ""; }; + 92BDAF08B8F33FC13215617512487F06 /* NSPersistentStore+MagicalRecord.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSPersistentStore+MagicalRecord.h"; path = "MagicalRecord/Categories/NSPersistentStore+MagicalRecord.h"; sourceTree = ""; }; + 92E4AD9C5757E2C8B08D6F95CC34AE9F /* libBRCLucene.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libBRCLucene.a; path = libBRCLucene.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 939199F2D565C76CBED0D578B9B3D755 /* RAMDirectory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RAMDirectory.h; path = src/core/CLucene/store/RAMDirectory.h; sourceTree = ""; }; + 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + 93F01E0B269C5A484143CC98347BEFCA /* _VoidMap.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _VoidMap.h; path = src/core/CLucene/util/_VoidMap.h; sourceTree = ""; }; + 94F9C731637E44395903EE978676E908 /* TermInfosWriter.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = TermInfosWriter.cpp; path = src/core/CLucene/index/TermInfosWriter.cpp; sourceTree = ""; }; + 9543C236C8B31E364C07890A2C213837 /* QueryScorer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = QueryScorer.h; path = "src/contribs-lib/CLucene/highlighter/QueryScorer.h"; sourceTree = ""; }; + 959A5ED3E0F30D2AE0DE3AF64FCF9B7C /* SegmentTermDocs.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = SegmentTermDocs.cpp; path = src/core/CLucene/index/SegmentTermDocs.cpp; sourceTree = ""; }; + 9648E413DE61A432DA094BEBA9D70086 /* StdHeader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = StdHeader.h; path = src/core/CLucene/StdHeader.h; sourceTree = ""; }; + 979C1DF79EA615A955A044151983AD30 /* _DisjunctionSumScorer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _DisjunctionSumScorer.h; path = src/core/CLucene/search/_DisjunctionSumScorer.h; sourceTree = ""; }; + 97EF0E55FA680F66D72A142ABD59682B /* BRCLucene-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "BRCLucene-dummy.m"; sourceTree = ""; }; + 98081EFDC125F6FCF0263EAD9F495C96 /* Compare.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = Compare.cpp; path = src/core/CLucene/search/Compare.cpp; sourceTree = ""; }; + 982317E055AF17CC6668F751AFD1159B /* NSManagedObjectContext+MagicalObserving.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSManagedObjectContext+MagicalObserving.h"; path = "MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalObserving.h"; sourceTree = ""; }; + 9880008DCA743F94753DE07B8D1820F3 /* BRFullTextSearch-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "BRFullTextSearch-dummy.m"; sourceTree = ""; }; + 98A67ED3D0A8EA1A7ACF9DB61997F18A /* BooleanClause.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BooleanClause.h; path = src/core/CLucene/search/BooleanClause.h; sourceTree = ""; }; + 9907BA4D42A55366A18F9285EBB0F726 /* SpanQuery.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SpanQuery.h; path = src/core/CLucene/search/spans/SpanQuery.h; sourceTree = ""; }; + 990CDC2101D54FD7AD419CA585D9AF1E /* _TermInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _TermInfo.h; path = src/core/CLucene/index/_TermInfo.h; sourceTree = ""; }; + 99CBE67A82A4FE8A753247F5682D3967 /* stem_KOI8_R_russian.c */ = {isa = PBXFileReference; includeInIndex = 1; name = stem_KOI8_R_russian.c; path = "src/contribs-lib/CLucene/snowball/src_c/stem_KOI8_R_russian.c"; sourceTree = ""; }; + 99D74188BECF8BAE8B2B87D92C46AD41 /* stem_ISO_8859_1_portuguese.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = stem_ISO_8859_1_portuguese.h; path = "src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_portuguese.h"; sourceTree = ""; }; + 9A923E5765BC7E55BBEC97834932ED72 /* SpanWeight.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SpanWeight.h; path = src/core/CLucene/search/spans/SpanWeight.h; sourceTree = ""; }; + 9B04EE61042644C0BC004031200642DF /* _FieldInfos.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _FieldInfos.h; path = src/core/CLucene/index/_FieldInfos.h; sourceTree = ""; }; + 9C25FB4F434C9E34C4B2AA595C799791 /* _SegmentHeader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _SegmentHeader.h; path = src/core/CLucene/index/_SegmentHeader.h; sourceTree = ""; }; + 9C8D6BDF49393055933BD7742D54BEDD /* BRFullTextSearch.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = BRFullTextSearch.h; sourceTree = ""; }; + 9CBC6D93C0273BEEBA49A60E6FDD8720 /* NSString+CLuceneAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "NSString+CLuceneAdditions.h"; sourceTree = ""; }; + 9CC876806C4F5C8606E0A3B8C0B6DDC2 /* libstemmer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = libstemmer.h; path = "src/contribs-lib/CLucene/snowball/libstemmer.h"; sourceTree = ""; }; + 9D19E237E3AC90DC3A07B1E71D196C4D /* NumberTools.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = NumberTools.cpp; path = src/core/CLucene/document/NumberTools.cpp; sourceTree = ""; }; + 9DD7F7FAF7BADD8D96222250C78D374E /* CLuceneSearchResult.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = CLuceneSearchResult.h; sourceTree = ""; }; + 9E36AD43D90A140F55AEE9D0FD86F14D /* NSString+CLuceneAdditions.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = "NSString+CLuceneAdditions.mm"; sourceTree = ""; }; + 9E6022A2F977678293D0489E9E2BCD2B /* WildcardQuery.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = WildcardQuery.cpp; path = src/core/CLucene/search/WildcardQuery.cpp; sourceTree = ""; }; + A11A53ADE93AB63EB7C0987E95723AE9 /* CLuceneSearchResults.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = CLuceneSearchResults.mm; sourceTree = ""; }; + A1AB90E0C2320ED0BAB24963425BA205 /* VoidMap.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VoidMap.h; path = src/core/CLucene/util/VoidMap.h; sourceTree = ""; }; + A1B2C96970379A4CED85DBAD95A300B2 /* RangeQuery.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RangeQuery.h; path = src/core/CLucene/search/RangeQuery.h; sourceTree = ""; }; + A3366D9406EA82AED3EBC08F2D212D79 /* _TermInfosWriter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _TermInfosWriter.h; path = src/core/CLucene/index/_TermInfosWriter.h; sourceTree = ""; }; + A34B52863B2308160DE34202A28ADFD3 /* NearSpansOrdered.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = NearSpansOrdered.cpp; path = src/core/CLucene/search/spans/NearSpansOrdered.cpp; sourceTree = ""; }; + A3FB1E03025AA08FA7DFBC4F543275AF /* SpanQueryFilter.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = SpanQueryFilter.cpp; path = src/core/CLucene/search/SpanQueryFilter.cpp; sourceTree = ""; }; + A41732C243ABA3388C70C1C1C825E39A /* Compare.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Compare.h; path = src/core/CLucene/search/Compare.h; sourceTree = ""; }; + A424A9859E4FD1EF15B5932333107956 /* NSManagedObject+MagicalAggregation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSManagedObject+MagicalAggregation.h"; path = "MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalAggregation.h"; sourceTree = ""; }; + A4CCE22118AC1CF4DFE2D107CEDB35DA /* mem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = mem.h; path = src/core/CLucene/debug/mem.h; sourceTree = ""; }; + A520009FA69E6C24919933C8D83ACFCD /* _FieldCacheImpl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _FieldCacheImpl.h; path = src/core/CLucene/search/_FieldCacheImpl.h; sourceTree = ""; }; + A524387C9664D35B4F4D634FA6FAF592 /* NSManagedObjectContext+MagicalRecord.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSManagedObjectContext+MagicalRecord.m"; path = "MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalRecord.m"; sourceTree = ""; }; + A7399E8EF9F89A74F387772C2F24EBC0 /* QueryParser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = QueryParser.h; path = src/core/CLucene/queryParser/QueryParser.h; sourceTree = ""; }; + A854146321C77E6C8A710CAC7C23FA63 /* Field.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Field.h; path = src/core/CLucene/document/Field.h; sourceTree = ""; }; + A8A9B3045217E913CDB0A85972FC4CE6 /* DateTools.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DateTools.h; path = src/core/CLucene/document/DateTools.h; sourceTree = ""; }; + A8DEB41390A69C903FD0D97E9CD6FEF0 /* Terms.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Terms.h; path = src/core/CLucene/index/Terms.h; sourceTree = ""; }; + A995A59B1895A4495F4484FCCCA3599C /* FastCharStream.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = FastCharStream.cpp; path = src/core/CLucene/queryParser/FastCharStream.cpp; sourceTree = ""; }; + A9E18FA1212CF5CB97DD3AB62AB11A4D /* IndexModifier.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = IndexModifier.cpp; path = src/core/CLucene/index/IndexModifier.cpp; sourceTree = ""; }; + A9F2986CDB83B04E92D589FB93F6D2D1 /* NumberTools.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = NumberTools.h; path = src/core/CLucene/document/NumberTools.h; sourceTree = ""; }; + AA286AFA457BE96A4AE7425579B41F71 /* _PhraseQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _PhraseQueue.h; path = src/core/CLucene/search/_PhraseQueue.h; sourceTree = ""; }; + AA4FEACB7BC1D13278FBC3CC806C0602 /* SnowballPrefixFilter.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = SnowballPrefixFilter.cpp; sourceTree = ""; }; + AA6CFBFC85BC8BE66A37453B7341A7B0 /* _VoidList.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _VoidList.h; path = src/core/CLucene/util/_VoidList.h; sourceTree = ""; }; + AAE615DC7C3E6D7780C2E5C60C4D433D /* stem_ISO_8859_1_norwegian.c */ = {isa = PBXFileReference; includeInIndex = 1; name = stem_ISO_8859_1_norwegian.c; path = "src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_norwegian.c"; sourceTree = ""; }; + AB651BAAC79EDC475F4ADBEDDD63F171 /* NSPersistentStore+MagicalRecord.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSPersistentStore+MagicalRecord.m"; path = "MagicalRecord/Categories/NSPersistentStore+MagicalRecord.m"; sourceTree = ""; }; + AB667646D438CFE8CFBCCF80C6F4C2A8 /* BRSimpleIndexable.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = BRSimpleIndexable.h; sourceTree = ""; }; + AC4CDFA53C547E9051D3EA0319D7A5D8 /* stem_ISO_8859_1_english.c */ = {isa = PBXFileReference; includeInIndex = 1; name = stem_ISO_8859_1_english.c; path = "src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_english.c"; sourceTree = ""; }; + ACC757F974D8DA10465589ED310171D6 /* StringIntern.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = StringIntern.cpp; path = src/core/CLucene/util/StringIntern.cpp; sourceTree = ""; }; + ACDA6C7D5DE38307CB40C972C18E227F /* _ApiHeader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _ApiHeader.h; path = src/core/CLucene/_ApiHeader.h; sourceTree = ""; }; + AD00509918397565244F5A1F9153B442 /* DisjunctionSumScorer.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = DisjunctionSumScorer.cpp; path = src/core/CLucene/search/DisjunctionSumScorer.cpp; sourceTree = ""; }; + AD42033CAC35AC729B0BD3B9F260030F /* MultiReader.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = MultiReader.cpp; path = src/core/CLucene/index/MultiReader.cpp; sourceTree = ""; }; + ADEB670673AB3AE1A6A5C724F81E3C3B /* Snowball.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = Snowball.cpp; path = "src/contribs-lib/CLucene/snowball/Snowball.cpp"; sourceTree = ""; }; + AE0F01A722453D8B7F75C512BA1480F2 /* libBRFullTextSearch.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libBRFullTextSearch.a; path = libBRFullTextSearch.a; sourceTree = BUILT_PRODUCTS_DIR; }; + AF78755D898EC23C0150FCE8B21E8027 /* Document.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = Document.cpp; path = src/core/CLucene/document/Document.cpp; sourceTree = ""; }; + B031D7A3DD77B06FEDAE749CF0183028 /* StandardTokenizerConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = StandardTokenizerConstants.h; path = src/core/CLucene/analysis/standard/StandardTokenizerConstants.h; sourceTree = ""; }; + B11B8DB59683C72F054B551BCE0A8CEE /* error.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = error.h; path = src/core/CLucene/debug/error.h; sourceTree = ""; }; + B1755A8BB93840767F1DA2B1C9323730 /* stem_ISO_8859_1_swedish.c */ = {isa = PBXFileReference; includeInIndex = 1; name = stem_ISO_8859_1_swedish.c; path = "src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_swedish.c"; sourceTree = ""; }; + B196415C43B0C207AC489263779D10AD /* stem_UTF_8_dutch.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = stem_UTF_8_dutch.h; path = "src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_dutch.h"; sourceTree = ""; }; + B2C217234787BEB7653062C341129532 /* ConstantScoreQuery.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = ConstantScoreQuery.cpp; path = src/core/CLucene/search/ConstantScoreQuery.cpp; sourceTree = ""; }; + B2C874DD8961F4ACFEE00507784B988A /* SpanFirstQuery.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SpanFirstQuery.h; path = src/core/CLucene/search/spans/SpanFirstQuery.h; sourceTree = ""; }; + B2D8511E2AA08F5A12A98060179E119B /* stem_UTF_8_german.c */ = {isa = PBXFileReference; includeInIndex = 1; name = stem_UTF_8_german.c; path = "src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_german.c"; sourceTree = ""; }; + B303185FCB9AC197F9A291C9C2102F53 /* repl_tchar.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = repl_tchar.h; path = src/shared/CLucene/config/repl_tchar.h; sourceTree = ""; }; + B498167FE4A893BA6F112C9C7B041EEE /* SpanNotQuery.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = SpanNotQuery.cpp; path = src/core/CLucene/search/spans/SpanNotQuery.cpp; sourceTree = ""; }; + B49CFD6862CE8C2D360C3D3D1F671E30 /* FieldSelector.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FieldSelector.h; path = src/core/CLucene/document/FieldSelector.h; sourceTree = ""; }; + B4AACFB66AE995F2A40CE179F66B34EF /* FieldInfos.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = FieldInfos.cpp; path = src/core/CLucene/index/FieldInfos.cpp; sourceTree = ""; }; + B509CF1BF2EB3B5D0C079980D56B0605 /* CLuceneIndexUpdateContext.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = CLuceneIndexUpdateContext.h; sourceTree = ""; }; + B50FA0E298D6CE36715BD000DF60F3CF /* _FieldDocSortedHitQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _FieldDocSortedHitQueue.h; path = src/core/CLucene/search/_FieldDocSortedHitQueue.h; sourceTree = ""; }; + B631820FD082A5CB135310D96229B1AC /* NSDate+BRFullTextSearchAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "NSDate+BRFullTextSearchAdditions.h"; sourceTree = ""; }; + B640396B1DC98F5DB0ADA142680444A0 /* StandardTokenizer.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = StandardTokenizer.cpp; path = src/core/CLucene/analysis/standard/StandardTokenizer.cpp; sourceTree = ""; }; + B64B73B038EB12CC59F5248DF4C25EB5 /* stem_UTF_8_dutch.c */ = {isa = PBXFileReference; includeInIndex = 1; name = stem_UTF_8_dutch.c; path = "src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_dutch.c"; sourceTree = ""; }; + B7172A0EF83D8AD5192CA1A7ADF5FC2C /* CLConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLConfig.h; path = src/core/CLucene/CLConfig.h; sourceTree = ""; }; + B75A406399781B50414F79393CCD3A91 /* NSDate+BRFullTextSearchAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "NSDate+BRFullTextSearchAdditions.m"; sourceTree = ""; }; + B82890BE307E0A11384D2D30FA44C209 /* Pods-SampleOSXCocoaPodsProject.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-SampleOSXCocoaPodsProject.debug.xcconfig"; sourceTree = ""; }; + B8D2705197E256517B8598BF9C7FFC90 /* NSString+MagicalDataImport.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+MagicalDataImport.m"; path = "MagicalRecord/Categories/DataImport/NSString+MagicalDataImport.m"; sourceTree = ""; }; + B9AC60EF2824852829FEC66811D8D4C6 /* QueryScorer.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = QueryScorer.cpp; path = "src/contribs-lib/CLucene/highlighter/QueryScorer.cpp"; sourceTree = ""; }; + BA1B61014F3C0BD146B5F5E71F725B55 /* Reader.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = Reader.cpp; path = src/core/CLucene/util/Reader.cpp; sourceTree = ""; }; + BA8B1DF466D279DE81E6A981895D10D4 /* MagicalRecord+ErrorHandling.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "MagicalRecord+ErrorHandling.m"; path = "MagicalRecord/Core/MagicalRecord+ErrorHandling.m"; sourceTree = ""; }; + BB24FCB65BC0EBF2E09803F1E7BEBE9B /* BooleanQuery.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = BooleanQuery.cpp; path = src/core/CLucene/search/BooleanQuery.cpp; sourceTree = ""; }; + BB7B0C4FE44AEDFB3A25FFAD6FAF3206 /* stem_ISO_8859_1_porter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = stem_ISO_8859_1_porter.h; path = "src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_porter.h"; sourceTree = ""; }; + BB7D50E6837B2A15410401CCD9244FC6 /* Lock.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = Lock.cpp; path = src/core/CLucene/store/Lock.cpp; sourceTree = ""; }; + BBACC73EA24B43A57584E78401FDF2E6 /* NSExpression+CLuceneAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "NSExpression+CLuceneAdditions.h"; sourceTree = ""; }; + BC4C06B186FEC255E51EB26F3EA5B582 /* CachingTokenFilter.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = CachingTokenFilter.cpp; path = src/core/CLucene/analysis/CachingTokenFilter.cpp; sourceTree = ""; }; + BD29F34F8F2622C679BC223D10484045 /* TermVector.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = TermVector.h; path = src/core/CLucene/index/TermVector.h; sourceTree = ""; }; + BE525F8C997153CCF77E84F66B8742BE /* stem_UTF_8_italian.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = stem_UTF_8_italian.h; path = "src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_italian.h"; sourceTree = ""; }; + BEFE44D5317E663965AABAEE9BFBACE0 /* FSDirectory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FSDirectory.h; path = src/core/CLucene/store/FSDirectory.h; sourceTree = ""; }; + BF9C4D4C2C21354C7C6BB3E99C8CFD59 /* gzipinputstream.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = gzipinputstream.h; path = "src/contribs-lib/CLucene/util/gzipinputstream.h"; sourceTree = ""; }; + C03E306AD8E814F65C46AE1177B8956B /* stem_ISO_8859_1_dutch.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = stem_ISO_8859_1_dutch.h; path = "src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_dutch.h"; sourceTree = ""; }; + C162D222BCC0D7677592ECA43B54DEF7 /* TermQuery.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = TermQuery.cpp; path = src/core/CLucene/search/TermQuery.cpp; sourceTree = ""; }; + C1CD436E7717178C32D5955442F03411 /* TokenSources.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = TokenSources.cpp; path = "src/contribs-lib/CLucene/highlighter/TokenSources.cpp"; sourceTree = ""; }; + C23D034CACB48B3F157661A87641A958 /* SimpleHTMLEncoder.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = SimpleHTMLEncoder.cpp; path = "src/contribs-lib/CLucene/highlighter/SimpleHTMLEncoder.cpp"; sourceTree = ""; }; + C23EFB68259FEF0C8F9FE151E9CABE52 /* FieldSelector.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = FieldSelector.cpp; path = src/core/CLucene/document/FieldSelector.cpp; sourceTree = ""; }; + C26067CCA1A3445218291648F5B9477E /* TermQuery.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = TermQuery.h; path = src/core/CLucene/search/TermQuery.h; sourceTree = ""; }; + C2A6C3FE13A424792BD1663574E8948C /* condition.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = condition.cpp; path = src/shared/CLucene/debug/condition.cpp; sourceTree = ""; }; + C2EBCBBB2D22665392B7817D00B3D6F5 /* stem_ISO_8859_1_norwegian.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = stem_ISO_8859_1_norwegian.h; path = "src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_norwegian.h"; sourceTree = ""; }; + C39E6D06C0D6752F07B7FFE3AED60AD9 /* RangeFilter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RangeFilter.h; path = src/core/CLucene/search/RangeFilter.h; sourceTree = ""; }; + C4622608A4C01D72805EEADA3B0A2AAC /* _clucene-config.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "_clucene-config.h"; path = "BRCLucene/src/CLucene/_clucene-config.h"; sourceTree = ""; }; + C51E171F177395BBDF5B4CEBC4E71C22 /* IndexInput.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = IndexInput.cpp; path = src/core/CLucene/store/IndexInput.cpp; sourceTree = ""; }; + C52DB83BBEF1104D8031BB83D9114DDF /* _IndexFileDeleter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _IndexFileDeleter.h; path = src/core/CLucene/index/_IndexFileDeleter.h; sourceTree = ""; }; + C5B847269EFC8F6354849B845EE76F9A /* _condition.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _condition.h; path = src/shared/CLucene/debug/_condition.h; sourceTree = ""; }; + C63B68320EB32C2FC309BA0D931DF9C4 /* stem_ISO_8859_1_french.c */ = {isa = PBXFileReference; includeInIndex = 1; name = stem_ISO_8859_1_french.c; path = "src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_french.c"; sourceTree = ""; }; + C6C18D71CBA5A91A3B7D17B1725C31D9 /* BRNoLockFactory.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = BRNoLockFactory.cpp; sourceTree = ""; }; + C6E0D8E6C60CC206F1A80CF8E0AD732D /* IndexReader.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = IndexReader.cpp; path = src/core/CLucene/index/IndexReader.cpp; sourceTree = ""; }; + C70BB8B8810C1DA29165F10F1D95035F /* error.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = error.cpp; path = src/core/CLucene/debug/error.cpp; sourceTree = ""; }; + C7974DF023F51F5A5E919148E9A3C171 /* NSManagedObjectContext+MagicalObserving.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSManagedObjectContext+MagicalObserving.m"; path = "MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalObserving.m"; sourceTree = ""; }; + C83DB46802B392AC955055094183A662 /* MergePolicy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MergePolicy.h; path = src/core/CLucene/index/MergePolicy.h; sourceTree = ""; }; + C88ACDF2BC1506E71F6552AB55BDEC55 /* CachingWrapperFilter.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = CachingWrapperFilter.cpp; path = src/core/CLucene/search/CachingWrapperFilter.cpp; sourceTree = ""; }; + C8DED676A1A9BAE3FCD9615CAD0AF649 /* MultiPhraseQuery.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = MultiPhraseQuery.cpp; path = src/core/CLucene/search/MultiPhraseQuery.cpp; sourceTree = ""; }; + C95D6DB36E48B9E1E3A2AD499442A476 /* NSAttributeDescription+MagicalDataImport.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSAttributeDescription+MagicalDataImport.m"; path = "MagicalRecord/Categories/DataImport/NSAttributeDescription+MagicalDataImport.m"; sourceTree = ""; }; + C9C73E967A3E51656D643142C9E4CA82 /* PhrasePositions.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = PhrasePositions.cpp; path = src/core/CLucene/search/PhrasePositions.cpp; sourceTree = ""; }; + CAD7FDAEC41696681BB9FDE55592B751 /* stem_UTF_8_portuguese.c */ = {isa = PBXFileReference; includeInIndex = 1; name = stem_UTF_8_portuguese.c; path = "src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_portuguese.c"; sourceTree = ""; }; + CC0723942A5FE20AB30AB252427D4F54 /* HighlightScorer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HighlightScorer.h; path = "src/contribs-lib/CLucene/highlighter/HighlightScorer.h"; sourceTree = ""; }; + CC07D0A5AE8220E4FBB0DA5A7AE22962 /* WildcardTermEnum.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = WildcardTermEnum.cpp; path = src/core/CLucene/search/WildcardTermEnum.cpp; sourceTree = ""; }; + CC452524FA971775CA1423885F9317E6 /* QueryParserConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = QueryParserConstants.h; path = src/core/CLucene/queryParser/QueryParserConstants.h; sourceTree = ""; }; + CC7FF1F8763E6138543BEC08D42174A7 /* QueryTermExtractor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = QueryTermExtractor.h; path = "src/contribs-lib/CLucene/highlighter/QueryTermExtractor.h"; sourceTree = ""; }; + CCD0DCC46C2F66FE49D4EF0E2C63DF28 /* SegmentTermPositions.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = SegmentTermPositions.cpp; path = src/core/CLucene/index/SegmentTermPositions.cpp; sourceTree = ""; }; + CD3E4607B341F6F1EBDE586EC4644331 /* stem_UTF_8_swedish.c */ = {isa = PBXFileReference; includeInIndex = 1; name = stem_UTF_8_swedish.c; path = "src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_swedish.c"; sourceTree = ""; }; + CD4B2E352B364AB1C5A232D1E2828647 /* SpanTermQuery.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SpanTermQuery.h; path = src/core/CLucene/search/spans/SpanTermQuery.h; sourceTree = ""; }; + CD8C1C8C216E7845C53870F17CE29B57 /* MagicalRecord-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MagicalRecord-prefix.pch"; sourceTree = ""; }; + CE7071DC76F7272C0D149F7B14180AD3 /* stem_ISO_8859_1_german.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = stem_ISO_8859_1_german.h; path = "src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_german.h"; sourceTree = ""; }; + CED3132726B8568756ACE328107BB088 /* RAMDirectory.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = RAMDirectory.cpp; path = src/core/CLucene/store/RAMDirectory.cpp; sourceTree = ""; }; + CF8FFA04848B29DBF409D77A7D954152 /* _PhrasePositions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _PhrasePositions.h; path = src/core/CLucene/search/_PhrasePositions.h; sourceTree = ""; }; + CFC1CC7064CB4052642F191D5C96A52A /* SpanFilter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SpanFilter.h; path = src/core/CLucene/search/SpanFilter.h; sourceTree = ""; }; + CFD58621506DC476AF1CE25E6130639F /* FieldSortedHitQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FieldSortedHitQueue.h; path = src/core/CLucene/search/FieldSortedHitQueue.h; sourceTree = ""; }; + CFEB3BDFDBBD215F65A231A3296E9206 /* libstemmer.c */ = {isa = PBXFileReference; includeInIndex = 1; name = libstemmer.c; path = "src/contribs-lib/CLucene/snowball/libstemmer/libstemmer.c"; sourceTree = ""; }; + D056BBAB7AEB184A0F889D13B4E4C40A /* Searchable.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Searchable.h; path = src/core/CLucene/search/Searchable.h; sourceTree = ""; }; + D09E2A6864380C9DDFBD29392C9BBF64 /* _FieldsReader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _FieldsReader.h; path = src/core/CLucene/index/_FieldsReader.h; sourceTree = ""; }; + D0B1A933E3B5ACDC25EF48C5D9379047 /* ConstantScoreQuery.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ConstantScoreQuery.h; path = src/core/CLucene/search/ConstantScoreQuery.h; sourceTree = ""; }; + D0E427CD6A914D3D8E3791CA7588DF9E /* Misc.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = Misc.cpp; path = src/shared/CLucene/util/Misc.cpp; sourceTree = ""; }; + D12FC3982728C4E6FDBA5479A2B7AAC6 /* WildcardTermEnum.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WildcardTermEnum.h; path = src/core/CLucene/search/WildcardTermEnum.h; sourceTree = ""; }; + D166EE321BF5D461C8F8349194472357 /* NSManagedObject+MagicalDataImport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSManagedObject+MagicalDataImport.h"; path = "MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalDataImport.h"; sourceTree = ""; }; + D16D32AA9F7796231E4CF8817AD2736A /* stem_ISO_8859_1_portuguese.c */ = {isa = PBXFileReference; includeInIndex = 1; name = stem_ISO_8859_1_portuguese.c; path = "src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_portuguese.c"; sourceTree = ""; }; + D170B026BB5CD2BE014E7F027BB59B6E /* _SegmentInfos.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _SegmentInfos.h; path = src/core/CLucene/index/_SegmentInfos.h; sourceTree = ""; }; + D19874134A52A00637B76D687B6564B2 /* FilteredTermEnum.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FilteredTermEnum.h; path = src/core/CLucene/search/FilteredTermEnum.h; sourceTree = ""; }; + D1AF57517F94C35BF1839CCA6AB5B26B /* BRSearchFields.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = BRSearchFields.h; sourceTree = ""; }; + D216007361563B7F426D52774DC7509C /* _FastCharStream.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _FastCharStream.h; path = src/core/CLucene/util/_FastCharStream.h; sourceTree = ""; }; + D2230DA82778E688B62F0C785956C19C /* Reader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Reader.h; path = src/core/CLucene/util/Reader.h; sourceTree = ""; }; + D2F50E8B46CFC472A6DC9DBC2EC12868 /* stem_ISO_8859_1_french.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = stem_ISO_8859_1_french.h; path = "src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_french.h"; sourceTree = ""; }; + D3515CBB247F3BB720CD3770DD2A9FF0 /* _Term.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _Term.h; path = src/core/CLucene/index/_Term.h; sourceTree = ""; }; + D5E5FFE28830E5BE59E17ABF175DDF5C /* _BooleanScorer2.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _BooleanScorer2.h; path = src/core/CLucene/search/_BooleanScorer2.h; sourceTree = ""; }; + D6ED55C641C9882C499C34A91D4FECC8 /* NSTimeZone+BRFullTextSearchAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "NSTimeZone+BRFullTextSearchAdditions.h"; sourceTree = ""; }; + D6FB5FF45ADDB7FC160F9B0E0E4FCE52 /* NSManagedObject+MagicalRecord.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSManagedObject+MagicalRecord.m"; path = "MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalRecord.m"; sourceTree = ""; }; + D8163D1560FC206887F2227AD953CABE /* BRFullTextSearch.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = BRFullTextSearch.xcconfig; sourceTree = ""; }; + D85EEAEFD4A5E025C2CE466975963929 /* Pods-SampleOSXCocoaPodsProject-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-SampleOSXCocoaPodsProject-acknowledgements.markdown"; sourceTree = ""; }; + D8B87F562F25ADD414900D3271F2ADF4 /* _SegmentMerger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _SegmentMerger.h; path = src/core/CLucene/index/_SegmentMerger.h; sourceTree = ""; }; + D9169CA56E8E3965E7C466A9825E6F83 /* CJKAnalyzer.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = CJKAnalyzer.cpp; path = "src/contribs-lib/CLucene/analysis/cjk/CJKAnalyzer.cpp"; sourceTree = ""; }; + D9E84CBA3963E103938F8F9D949F16FF /* MagicalImportFunctions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MagicalImportFunctions.m; path = MagicalRecord/Categories/DataImport/MagicalImportFunctions.m; sourceTree = ""; }; + D9FE04E31DA566A8B4C48982CB90B668 /* MultiTermQuery.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = MultiTermQuery.cpp; path = src/core/CLucene/search/MultiTermQuery.cpp; sourceTree = ""; }; + DA4298B6DF194765AF16977362CB92D2 /* DateField.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DateField.h; path = src/core/CLucene/document/DateField.h; sourceTree = ""; }; + DB5435C9933D6C8E31F2018C5A50689C /* NSManagedObjectContext+MagicalThreading.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSManagedObjectContext+MagicalThreading.m"; path = "MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalThreading.m"; sourceTree = ""; }; + DBB9B86D9AC8B2D22B4DB18F1D024A3C /* TokenSources.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = TokenSources.h; path = "src/contribs-lib/CLucene/highlighter/TokenSources.h"; sourceTree = ""; }; + DC3E119E9A769879D5A25CC2C029241D /* SpanOrQuery.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SpanOrQuery.h; path = src/core/CLucene/search/spans/SpanOrQuery.h; sourceTree = ""; }; + DC654E3E47511B2E24BE1EF4BA17A420 /* IndexFileDeleter.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = IndexFileDeleter.cpp; path = src/core/CLucene/index/IndexFileDeleter.cpp; sourceTree = ""; }; + DD532F3B4CE85595EE7DE476986531BB /* NSManagedObject+MagicalRecord.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSManagedObject+MagicalRecord.h"; path = "MagicalRecord/Categories/NSManagedObject/NSManagedObject+MagicalRecord.h"; sourceTree = ""; }; + DD54E3BB72C82B5CF08033B634008661 /* _NearSpansOrdered.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _NearSpansOrdered.h; path = src/core/CLucene/search/spans/_NearSpansOrdered.h; sourceTree = ""; }; + DD64E7E49B82D5C8B6A5623B2F377E1F /* _Arrays.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _Arrays.h; path = src/core/CLucene/util/_Arrays.h; sourceTree = ""; }; + DD92BAD789278D86323770B5510B1BD4 /* Scorer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Scorer.h; path = src/core/CLucene/search/Scorer.h; sourceTree = ""; }; + DE562C62464DF93D0E563AF4B13009BB /* _IndexFileNameFilter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _IndexFileNameFilter.h; path = src/core/CLucene/index/_IndexFileNameFilter.h; sourceTree = ""; }; + DE6A9CDE781F27373AC94FFD9250E81C /* AnalysisHeader.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = AnalysisHeader.cpp; path = src/core/CLucene/analysis/AnalysisHeader.cpp; sourceTree = ""; }; + DF9368CE5A12FFBF2CBB68CE89AEB9A4 /* BRSearchResults.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = BRSearchResults.h; sourceTree = ""; }; + DFD6DA3D2F7B3653D7F55F17BA84638C /* repl_wctype.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = repl_wctype.h; path = src/shared/CLucene/config/repl_wctype.h; sourceTree = ""; }; + E05F79A641D2B3314A9D9AA1EFD3BE13 /* SimpleHTMLFormatter.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = SimpleHTMLFormatter.cpp; path = "src/contribs-lib/CLucene/highlighter/SimpleHTMLFormatter.cpp"; sourceTree = ""; }; + E06EC32B5AE150C6935E5054382F4CFA /* SegmentInfos.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = SegmentInfos.cpp; path = src/core/CLucene/index/SegmentInfos.cpp; sourceTree = ""; }; + E1AC20C88EB086C5E6B6471C39D1C873 /* IndexInput.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IndexInput.h; path = src/core/CLucene/store/IndexInput.h; sourceTree = ""; }; + E1DA926EE40DD27D9ABC79AEAAD52707 /* NSManagedObjectContext+MagicalThreading.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSManagedObjectContext+MagicalThreading.h"; path = "MagicalRecord/Categories/NSManagedObjectContext/NSManagedObjectContext+MagicalThreading.h"; sourceTree = ""; }; + E1DAD073494E4D820F7867BD3EB7F6E1 /* ScorerDocQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ScorerDocQueue.h; path = src/core/CLucene/search/ScorerDocQueue.h; sourceTree = ""; }; + E28258A38CACCB5FEF6246CF75A9DF29 /* FieldCacheImpl.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = FieldCacheImpl.cpp; path = src/core/CLucene/search/FieldCacheImpl.cpp; sourceTree = ""; }; + E315D0E7459F25192DD969D33493BFAD /* Query.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Query.h; path = src/core/CLucene/search/Query.h; sourceTree = ""; }; + E31C33AB8382FF2B401A28BBDA975573 /* _SloppyPhraseScorer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _SloppyPhraseScorer.h; path = src/core/CLucene/search/_SloppyPhraseScorer.h; sourceTree = ""; }; + E33B69820A52BED0534EE4C315A7FE17 /* stem_ISO_8859_1_swedish.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = stem_ISO_8859_1_swedish.h; path = "src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_swedish.h"; sourceTree = ""; }; + E36B2E834C27DF4B691279214A9AA816 /* stem_UTF_8_german.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = stem_UTF_8_german.h; path = "src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_german.h"; sourceTree = ""; }; + E3D588B16FF4371D497D846688CA9D66 /* MagicalRecord.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MagicalRecord.xcconfig; sourceTree = ""; }; + E464668BFBAAA8833081E488E3013E1A /* api.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = api.h; path = "src/contribs-lib/CLucene/snowball/runtime/api.h"; sourceTree = ""; }; + E4943A2D1AC87D86F96AC0545201BEE5 /* LockFactory.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = LockFactory.cpp; path = src/core/CLucene/store/LockFactory.cpp; sourceTree = ""; }; + E4CD2DA8B899F80F93554F9AC6CA8385 /* GermanStemFilter.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = GermanStemFilter.cpp; path = "src/contribs-lib/CLucene/analysis/de/GermanStemFilter.cpp"; sourceTree = ""; }; + E4F0E3C1B80E78B88C28E51B446FD1DC /* NSObject+MagicalDataImport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSObject+MagicalDataImport.h"; path = "MagicalRecord/Categories/DataImport/NSObject+MagicalDataImport.h"; sourceTree = ""; }; + E526612A59322726F31AEDC5902AB670 /* header.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = header.h; path = "src/contribs-lib/CLucene/snowball/runtime/header.h"; sourceTree = ""; }; + E5EB8E641C8909EF88D7A5531D3776DA /* SharedHeader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SharedHeader.h; path = src/shared/CLucene/SharedHeader.h; sourceTree = ""; }; + E61655022330881057711F3C1FC4FB6B /* _NearSpansUnordered.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _NearSpansUnordered.h; path = src/core/CLucene/search/spans/_NearSpansUnordered.h; sourceTree = ""; }; + E625CDFFDF0F1A316642F96E60E71366 /* stem_ISO_8859_1_german.c */ = {isa = PBXFileReference; includeInIndex = 1; name = stem_ISO_8859_1_german.c; path = "src/contribs-lib/CLucene/snowball/src_c/stem_ISO_8859_1_german.c"; sourceTree = ""; }; + E62EC51BA896C727A3498533AC739AF4 /* FieldSortedHitQueue.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = FieldSortedHitQueue.cpp; path = src/core/CLucene/search/FieldSortedHitQueue.cpp; sourceTree = ""; }; + E731F7DC56C0D1995D546F88A019FAA5 /* Scorer.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = Scorer.cpp; path = src/core/CLucene/search/Scorer.cpp; sourceTree = ""; }; + E739C1E8EC4AE1926BA45602ADADB445 /* ChainedFilter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ChainedFilter.h; path = src/core/CLucene/search/ChainedFilter.h; sourceTree = ""; }; + E82C48EC484AAB44734F653BC4F1A146 /* Pods-SampleOSXCocoaPodsProject-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-SampleOSXCocoaPodsProject-acknowledgements.plist"; sourceTree = ""; }; + E9174D24630AC097922A965C4E779149 /* NSData+CLuceneAdditions.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = "NSData+CLuceneAdditions.mm"; sourceTree = ""; }; + E91FEFE82A966CD2F98C7C9ACA75CDE7 /* IndexOutput.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = IndexOutput.cpp; path = src/core/CLucene/store/IndexOutput.cpp; sourceTree = ""; }; + E94D171BEC936DDD46358C152CEB9DD0 /* SegmentMerger.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = SegmentMerger.cpp; path = src/core/CLucene/index/SegmentMerger.cpp; sourceTree = ""; }; + EA9798899A5AC7F8E1782B7A6EBA32E6 /* NSString+MagicalDataImport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+MagicalDataImport.h"; path = "MagicalRecord/Categories/DataImport/NSString+MagicalDataImport.h"; sourceTree = ""; }; + EAAAA33FA1114D560DB775BFCA1361F5 /* stem_UTF_8_finnish.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = stem_UTF_8_finnish.h; path = "src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_finnish.h"; sourceTree = ""; }; + EADDF549A0757CB1EF1DA4DB7B9A8CBA /* PrefixQuery.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = PrefixQuery.cpp; path = src/core/CLucene/search/PrefixQuery.cpp; sourceTree = ""; }; + EB30669177770F2991B62716CE46D3CD /* MultiSegmentReader.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = MultiSegmentReader.cpp; path = src/core/CLucene/index/MultiSegmentReader.cpp; sourceTree = ""; }; + EBEA97984C496C4699EA201913A7F35B /* IndexWriter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IndexWriter.h; path = src/core/CLucene/index/IndexWriter.h; sourceTree = ""; }; + EC341472BFBD5BA9456D15319E075728 /* MagicalRecord+ShorthandSupport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MagicalRecord+ShorthandSupport.h"; path = "MagicalRecord/Core/MagicalRecord+ShorthandSupport.h"; sourceTree = ""; }; + ECCD7B487CFBF76FEFF1A7D0B94019F7 /* MagicalRecordShorthand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MagicalRecordShorthand.h; path = MagicalRecord/Core/MagicalRecordShorthand.h; sourceTree = ""; }; + ECE5AB850498BF4F125C918A6504ED0F /* QueryFilter.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = QueryFilter.cpp; path = src/core/CLucene/search/QueryFilter.cpp; sourceTree = ""; }; + ED0A3BA9B09937E25FCFD3A4A19B5A3F /* SharedHeader.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = SharedHeader.cpp; path = src/shared/CLucene/SharedHeader.cpp; sourceTree = ""; }; + EDF13A7B423B26B71793F0EE6012521C /* DateFilter.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = DateFilter.cpp; path = src/core/CLucene/search/DateFilter.cpp; sourceTree = ""; }; + EDFC0412FA30B0B3F01014036EE93482 /* CLuceneSearchService.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = CLuceneSearchService.h; sourceTree = ""; }; + EEB66D92C167CEDA58AF75A9B5DC7658 /* stem_UTF_8_english.c */ = {isa = PBXFileReference; includeInIndex = 1; name = stem_UTF_8_english.c; path = "src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_english.c"; sourceTree = ""; }; + EF46053E98147BB8C9BCF7F4A45DEE6F /* repl_tprintf.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = repl_tprintf.cpp; path = src/shared/CLucene/config/repl_tprintf.cpp; sourceTree = ""; }; + EFC8A18F9813B50ABBA0305CD777F62B /* SkipListReader.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = SkipListReader.cpp; path = src/core/CLucene/index/SkipListReader.cpp; sourceTree = ""; }; + EFFDB2F48A4FD22C3E720BECEFB9B108 /* stem_UTF_8_porter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = stem_UTF_8_porter.h; path = "src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_porter.h"; sourceTree = ""; }; + F084D1BEDE2B10A77F0F24B56204517B /* DirectoryIndexReader.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = DirectoryIndexReader.cpp; path = src/core/CLucene/index/DirectoryIndexReader.cpp; sourceTree = ""; }; + F0EE94D8CF833E2A4A4B5D74211FE6DA /* _FieldInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _FieldInfo.h; path = src/core/CLucene/index/_FieldInfo.h; sourceTree = ""; }; + F1FCAD354B4F6338C96207C0894FD23F /* PhraseScorer.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = PhraseScorer.cpp; path = src/core/CLucene/search/PhraseScorer.cpp; sourceTree = ""; }; + F34621830BC1198B8261B32C0950A395 /* BRNoLockFactory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = BRNoLockFactory.h; sourceTree = ""; }; + F3740562FF70D1166FFD5B78671E5A3F /* DocumentsWriter.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = DocumentsWriter.cpp; path = src/core/CLucene/index/DocumentsWriter.cpp; sourceTree = ""; }; + F3D6105B1D1C44F401D8917AA1F1797D /* CLStreams.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLStreams.h; path = src/core/CLucene/util/CLStreams.h; sourceTree = ""; }; + F43549492E9AAB05FFD00C266692513E /* Explanation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Explanation.h; path = src/core/CLucene/search/Explanation.h; sourceTree = ""; }; + F46023A2AA36B4677D3A61154DBA26F8 /* _EmptySpans.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _EmptySpans.h; path = src/core/CLucene/search/spans/_EmptySpans.h; sourceTree = ""; }; + F497118B1A99846A91D5FAE3A41C9763 /* LuceneThreads.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LuceneThreads.h; path = src/shared/CLucene/LuceneThreads.h; sourceTree = ""; }; + F537368F4EA438A3A9B92AC4D05438DA /* MultiFieldQueryParser.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = MultiFieldQueryParser.cpp; path = src/core/CLucene/queryParser/MultiFieldQueryParser.cpp; sourceTree = ""; }; + F7F449FB17B4C8FAFD4A6B42CF1105DD /* BRSearchService.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = BRSearchService.h; sourceTree = ""; }; + F84318B0FF23176FF15035DDE333E449 /* IndexFileNames.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = IndexFileNames.cpp; path = src/core/CLucene/index/IndexFileNames.cpp; sourceTree = ""; }; + FA48564FC777CC8A7D2D128A679E97A0 /* MultipleTermPositions.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = MultipleTermPositions.cpp; path = src/core/CLucene/index/MultipleTermPositions.cpp; sourceTree = ""; }; + FAFC028AC8C4F5DAD546F97BF5BF3524 /* Similarity.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = Similarity.cpp; path = src/core/CLucene/search/Similarity.cpp; sourceTree = ""; }; + FB23D1EB83257B1CBBA104BCE6DE2EF8 /* repl_tcslwr.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = repl_tcslwr.cpp; path = src/shared/CLucene/config/repl_tcslwr.cpp; sourceTree = ""; }; + FBA09E8F0FF36C6E91D7EEECC972A6F9 /* repl_tcstoll.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = repl_tcstoll.cpp; path = src/shared/CLucene/config/repl_tcstoll.cpp; sourceTree = ""; }; + FCC17AB1D14239C4FE5350CFA783AFE1 /* Pods-SampleOSXCocoaPodsProject.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-SampleOSXCocoaPodsProject.release.xcconfig"; sourceTree = ""; }; + FCEAB3131DD6A3CF9400B95481915309 /* NSRelationshipDescription+MagicalDataImport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSRelationshipDescription+MagicalDataImport.h"; path = "MagicalRecord/Categories/DataImport/NSRelationshipDescription+MagicalDataImport.h"; sourceTree = ""; }; + FD1DAF2712C61C4B6F04BF01E93F6006 /* SearchHeader.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = SearchHeader.cpp; path = src/core/CLucene/search/SearchHeader.cpp; sourceTree = ""; }; + FD203BDE546B448C6B763FCAD3415682 /* _streambase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _streambase.h; path = src/core/CLucene/util/_streambase.h; sourceTree = ""; }; + FD236C52DBBDFD95DC70E8466C19C6EE /* SimpleHTMLEncoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SimpleHTMLEncoder.h; path = "src/contribs-lib/CLucene/highlighter/SimpleHTMLEncoder.h"; sourceTree = ""; }; + FE15BC07111C7A34838710F9162C726C /* Directory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Directory.h; path = src/core/CLucene/store/Directory.h; sourceTree = ""; }; + FE68314AFAF234C98B4C94C08977330A /* _streambuffer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _streambuffer.h; path = src/core/CLucene/util/_streambuffer.h; sourceTree = ""; }; + FEB2EC9EC06293BB496854626EA781E2 /* stem_UTF_8_finnish.c */ = {isa = PBXFileReference; includeInIndex = 1; name = stem_UTF_8_finnish.c; path = "src/contribs-lib/CLucene/snowball/src_c/stem_UTF_8_finnish.c"; sourceTree = ""; }; + FEF551BDE2774BD422457DD08DE64935 /* QueryParser.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = QueryParser.cpp; path = src/core/CLucene/queryParser/QueryParser.cpp; sourceTree = ""; }; + FF48513AC8932FEE33F065FDE1584B67 /* ExactPhraseScorer.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = ExactPhraseScorer.cpp; path = src/core/CLucene/search/ExactPhraseScorer.cpp; sourceTree = ""; }; + FF556D629855725AD2684D8FAAF89959 /* BRFullTextSearch-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "BRFullTextSearch-prefix.pch"; sourceTree = ""; }; + FFA17B74B389B35ACD7EF8AF90588829 /* MMapInput.cpp */ = {isa = PBXFileReference; includeInIndex = 1; name = MMapInput.cpp; path = src/core/CLucene/store/MMapInput.cpp; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 21AA7D17ECCC9AFDE4A6FF49639153F0 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 7FF4485B45F5A9B5B9E3D1C0C6CDEB97 /* Cocoa.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 3C889C614A752E5130728017572D3CD8 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + FCC31C1018E4CE28D5B8A650BFCF7598 /* Cocoa.framework in Frameworks */, + B05AB6E405F62C73C3E37E8C39F2FF7B /* CoreData.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 6278D2E557A32D540983D6D3C03405C1 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 88ED04AAC8E38975687028A222575462 /* Cocoa.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B962DCAB9431B27B91BBE2A20C8C8106 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 7D28066395B50FA2899340732CCB5735 /* Cocoa.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 0C55F428770E568623AF46768E1C5661 /* BRFullTextSearch */ = { + isa = PBXGroup; + children = ( + C6C18D71CBA5A91A3B7D17B1725C31D9 /* BRNoLockFactory.cpp */, + F34621830BC1198B8261B32C0950A395 /* BRNoLockFactory.h */, + 05CEE2F68B3FCE1EA3ABACC24CF762DA /* BRSnowballAnalyzer.cpp */, + 07EDD2BF676A7F985DD53F3CD2EEF621 /* BRSnowballAnalyzer.h */, + B509CF1BF2EB3B5D0C079980D56B0605 /* CLuceneIndexUpdateContext.h */, + 768BCEBCB1F5B77EB7162D38E591EA94 /* CLuceneIndexUpdateContext.mm */, + 9DD7F7FAF7BADD8D96222250C78D374E /* CLuceneSearchResult.h */, + 3EB31227E6A3D4FD0D04997EC7940AB1 /* CLuceneSearchResult.mm */, + 6F76B28434E2485D484EFA488754A005 /* CLuceneSearchResults.h */, + A11A53ADE93AB63EB7C0987E95723AE9 /* CLuceneSearchResults.mm */, + EDFC0412FA30B0B3F01014036EE93482 /* CLuceneSearchService.h */, + 066950684B76926145133A4E4794D3AB /* CLuceneSearchService.mm */, + 1FAED71FFD390D524F311B0E56E56DF6 /* CLuceneSearchService+Subclassing.h */, + 71C5126459A142615CF04F9D055B7FAE /* NSData+CLuceneAdditions.h */, + E9174D24630AC097922A965C4E779149 /* NSData+CLuceneAdditions.mm */, + BBACC73EA24B43A57584E78401FDF2E6 /* NSExpression+CLuceneAdditions.h */, + 46BB7F5F5FE537867B3BF4DBD4B3FE95 /* NSExpression+CLuceneAdditions.mm */, + 9CBC6D93C0273BEEBA49A60E6FDD8720 /* NSString+CLuceneAdditions.h */, + 9E36AD43D90A140F55AEE9D0FD86F14D /* NSString+CLuceneAdditions.mm */, + AA4FEACB7BC1D13278FBC3CC806C0602 /* SnowballPrefixFilter.cpp */, + 0F83729543FE4699F8FBD30FB81F744B /* SnowballPrefixFilter.h */, + ); + name = BRFullTextSearch; + path = BRFullTextSearch; + sourceTree = ""; + }; + 0E076A8A4E8D43F80ABC3A21A2086FDA /* Core */ = { + isa = PBXGroup; + children = ( + 0D935126841B7B1AF285F57F89945A61 /* CoreData+MagicalRecord.h */, + 90C521B8E2BF3445D457B52C323FCA8D /* MagicalImportFunctions.h */, + D9E84CBA3963E103938F8F9D949F16FF /* MagicalImportFunctions.m */, + 4ACCEB697C259D88C464803E9442F3F8 /* MagicalRecord.h */, + 47FF44CE8D00E48678114C1845CCC068 /* MagicalRecord.m */, + 1D83C5C60A897FDBF02F03BFD330D541 /* MagicalRecord+Actions.h */, + 1F3503944FB304BDB2BC1188B4EBF60C /* MagicalRecord+Actions.m */, + 6D1E66320368050F0CB4E818526CD761 /* MagicalRecord+ErrorHandling.h */, + BA8B1DF466D279DE81E6A981895D10D4 /* MagicalRecord+ErrorHandling.m */, + 3E86F7B9D0D971341DF96B742D3871E1 /* MagicalRecord+iCloud.h */, + 6F37DA5C715840CDF13DFACBDB17703C /* MagicalRecord+iCloud.m */, + 1FA0505C3440BDD35D779C960B044344 /* MagicalRecord+Options.h */, + 86C7AF748C23E9524FBE0DE3A322FA84 /* MagicalRecord+Options.m */, + 2D29CCEA051215B982E56EE9E9B9DE9B /* MagicalRecord+Setup.h */, + 602B0CB7642E3E23CEE0826E85016917 /* MagicalRecord+Setup.m */, + EC341472BFBD5BA9456D15319E075728 /* MagicalRecord+ShorthandSupport.h */, + 6C6A1340650D4FE35D58081AF93D478E /* MagicalRecord+ShorthandSupport.m */, + ECCD7B487CFBF76FEFF1A7D0B94019F7 /* MagicalRecordShorthand.h */, + 6F48F40293B78972A8E4FE5291103F04 /* NSAttributeDescription+MagicalDataImport.h */, + C95D6DB36E48B9E1E3A2AD499442A476 /* NSAttributeDescription+MagicalDataImport.m */, + 8A5AC4B935F997D71A1EEF1C3B4C0AE4 /* NSEntityDescription+MagicalDataImport.h */, + 22925035AF0451BF1A610A5ECB288F0C /* NSEntityDescription+MagicalDataImport.m */, + A424A9859E4FD1EF15B5932333107956 /* NSManagedObject+MagicalAggregation.h */, + 4F08853CCF0BBB97CA77669DF5E3616C /* NSManagedObject+MagicalAggregation.m */, + D166EE321BF5D461C8F8349194472357 /* NSManagedObject+MagicalDataImport.h */, + 5699E43FBC9BF0A4A9D576488AD6ED7C /* NSManagedObject+MagicalDataImport.m */, + 401BC5367116136E063784470E5E55CE /* NSManagedObject+MagicalFinders.h */, + 2149011252C8FF78D7B5A10C457CA705 /* NSManagedObject+MagicalFinders.m */, + DD532F3B4CE85595EE7DE476986531BB /* NSManagedObject+MagicalRecord.h */, + D6FB5FF45ADDB7FC160F9B0E0E4FCE52 /* NSManagedObject+MagicalRecord.m */, + 6C3991FB606E8B6F0E61765A67993309 /* NSManagedObject+MagicalRequests.h */, + 31D9AAE2EAA175F3032B32A8F44DF8CA /* NSManagedObject+MagicalRequests.m */, + 982317E055AF17CC6668F751AFD1159B /* NSManagedObjectContext+MagicalObserving.h */, + C7974DF023F51F5A5E919148E9A3C171 /* NSManagedObjectContext+MagicalObserving.m */, + 732976431692D5CCC977851BAB498AD3 /* NSManagedObjectContext+MagicalRecord.h */, + A524387C9664D35B4F4D634FA6FAF592 /* NSManagedObjectContext+MagicalRecord.m */, + 6AD7B1907D750C3A3FC4CB85E7A408A4 /* NSManagedObjectContext+MagicalSaves.h */, + 73573AB65382DF0CB819D8C854611A80 /* NSManagedObjectContext+MagicalSaves.m */, + E1DA926EE40DD27D9ABC79AEAAD52707 /* NSManagedObjectContext+MagicalThreading.h */, + DB5435C9933D6C8E31F2018C5A50689C /* NSManagedObjectContext+MagicalThreading.m */, + 54395A1FCCDC02A6D3543EB077F9F266 /* NSManagedObjectModel+MagicalRecord.h */, + 4682B8E786ADB56A04E9C7020B954471 /* NSManagedObjectModel+MagicalRecord.m */, + 5BFE4112BB325408798A72589563CC11 /* NSNumber+MagicalDataImport.h */, + 0B44ADD3E7E6E0B011AEF8B0AA2FC265 /* NSNumber+MagicalDataImport.m */, + E4F0E3C1B80E78B88C28E51B446FD1DC /* NSObject+MagicalDataImport.h */, + 8375322C0E6E0A696CA052E0863315B8 /* NSObject+MagicalDataImport.m */, + 92BDAF08B8F33FC13215617512487F06 /* NSPersistentStore+MagicalRecord.h */, + AB651BAAC79EDC475F4ADBEDDD63F171 /* NSPersistentStore+MagicalRecord.m */, + 5C936302A8E89C954D3DF8CD388DFA4F /* NSPersistentStoreCoordinator+MagicalRecord.h */, + 74F4CF7F65D860B5BADEFD9CA5501C3F /* NSPersistentStoreCoordinator+MagicalRecord.m */, + FCEAB3131DD6A3CF9400B95481915309 /* NSRelationshipDescription+MagicalDataImport.h */, + 8EAB7FE80BFBE5C37603ECCF77E9D41D /* NSRelationshipDescription+MagicalDataImport.m */, + EA9798899A5AC7F8E1782B7A6EBA32E6 /* NSString+MagicalDataImport.h */, + B8D2705197E256517B8598BF9C7FFC90 /* NSString+MagicalDataImport.m */, + ); + name = Core; + sourceTree = ""; + }; + 16CA9EC8ED0E18967AD80E31991EB162 /* CLucene-Shared */ = { + isa = PBXGroup; + children = ( + C5B847269EFC8F6354849B845EE76F9A /* _condition.h */, + 4B93BA74B3640BA25FC1BF308F0F3363 /* _dirent.h */, + 8464801A3162D216C408939E94682104 /* _gunichartables.h */, + 0C66AE6450AD3137BA007C3BC81028AC /* _SharedHeader.h */, + 445FC1FC1CAD9EE473B74521FC617E17 /* _threads.h */, + C2A6C3FE13A424792BD1663574E8948C /* condition.cpp */, + 37E197EC5BE2083B5DE9E9D2BCA01F84 /* dirent.cpp */, + 494509771B14BC35FBE0365EEBF547C8 /* gunichartables.cpp */, + F497118B1A99846A91D5FAE3A41C9763 /* LuceneThreads.h */, + D0E427CD6A914D3D8E3791CA7588DF9E /* Misc.cpp */, + 34BCA4D47291CCB62E7C29F16B2166F8 /* Misc.h */, + 1D1D499844CF12E6D69C54D74A27471C /* repl_lltot.cpp */, + B303185FCB9AC197F9A291C9C2102F53 /* repl_tchar.h */, + 09BEA4975F65BAFF6735BEA062855307 /* repl_tcscasecmp.cpp */, + FB23D1EB83257B1CBBA104BCE6DE2EF8 /* repl_tcslwr.cpp */, + 4F5C2FC73476F796BDB22D49A533E8DE /* repl_tcstod.cpp */, + FBA09E8F0FF36C6E91D7EEECC972A6F9 /* repl_tcstoll.cpp */, + EF46053E98147BB8C9BCF7F4A45DEE6F /* repl_tprintf.cpp */, + 4357B8E7FE60E58180A2D3E6ACB22D7D /* repl_wchar.h */, + DFD6DA3D2F7B3653D7F55F17BA84638C /* repl_wctype.h */, + ED0A3BA9B09937E25FCFD3A4A19B5A3F /* SharedHeader.cpp */, + E5EB8E641C8909EF88D7A5531D3776DA /* SharedHeader.h */, + 0E54F921B35D18530309B008801E397B /* StringBuffer.cpp */, + 36E68752A9CE7CA7C0B5D3CF5EA0A10B /* StringBuffer.h */, + 8AF2E83AC1617C37BCAC0D351DF78A18 /* threads.cpp */, + 12E46A287E0FB4B6063CB7C2D9C86CF7 /* utf8.cpp */, + ); + name = "CLucene-Shared"; + sourceTree = ""; + }; + 32E3AE1D7B47810038A3265157848856 /* Support Files */ = { + isa = PBXGroup; + children = ( + E3D588B16FF4371D497D846688CA9D66 /* MagicalRecord.xcconfig */, + 0B7DFC012E46CD6957E29768A8D73D4A /* MagicalRecord-dummy.m */, + CD8C1C8C216E7845C53870F17CE29B57 /* MagicalRecord-prefix.pch */, + ); + name = "Support Files"; + path = "../Target Support Files/MagicalRecord"; + sourceTree = ""; + }; + 35374D39596A8FD2B4AE4722BC51DEC8 /* BRFullTextSearch */ = { + isa = PBXGroup; + children = ( + 9C8D6BDF49393055933BD7742D54BEDD /* BRFullTextSearch.h */, + 746FF232FDDEAF58F0B56FCC776F7062 /* BRIndexable.h */, + 3121E265518EA8E8C7A958A5B2BD4431 /* BRIndexUpdateContext.h */, + D1AF57517F94C35BF1839CCA6AB5B26B /* BRSearchFields.h */, + 4CECE0DFD6E127CF44C25C07A58BD354 /* BRSearchFields.m */, + 7E595E37C4C26DF2BB95D1F030181515 /* BRSearchResult.h */, + DF9368CE5A12FFBF2CBB68CE89AEB9A4 /* BRSearchResults.h */, + F7F449FB17B4C8FAFD4A6B42CF1105DD /* BRSearchService.h */, + 09FE0E03B9993D301DE754457005AA94 /* BRSearchService.m */, + AB667646D438CFE8CFBCCF80C6F4C2A8 /* BRSimpleIndexable.h */, + 5C8D882550A37E0ADD79B989F4E173CF /* BRSimpleIndexable.m */, + 024B976597C68B141CB7A881037B931A /* BRSimpleSortDescriptor.h */, + 44DC01C644FD82F7AD1E8C70F7D766F3 /* BRSimpleSortDescriptor.m */, + 4C6CD0B01AE2A4408A3130FE868F44C8 /* BRSortDescriptor.h */, + B631820FD082A5CB135310D96229B1AC /* NSDate+BRFullTextSearchAdditions.h */, + B75A406399781B50414F79393CCD3A91 /* NSDate+BRFullTextSearchAdditions.m */, + 5BB8E1D0E5AD7BA32AE01C91E208F9F3 /* NSDateComponents+BRFullTextSearchAdditions.h */, + 8EA8E754202E73D65B760DE359372F1A /* NSDateComponents+BRFullTextSearchAdditions.m */, + D6ED55C641C9882C499C34A91D4FECC8 /* NSTimeZone+BRFullTextSearchAdditions.h */, + 0B76CA71339FB8933B3D0243AF3C41FE /* NSTimeZone+BRFullTextSearchAdditions.m */, + ); + name = BRFullTextSearch; + path = BRFullTextSearch; + sourceTree = ""; + }; + 35EDDD8C8ED127FA686696547630C6E1 /* BRCLucene */ = { + isa = PBXGroup; + children = ( + 8C011FE83BFEE5E32544A8AE14330543 /* CLucene-Config */, + 98D5F0D21BFE649A77F1BD4BA27045DE /* CLucene-Contribs-Lib */, + 50707FA10877467C6ABDA00AE4A19850 /* CLucene-Core */, + 7EEBD490B0B6D447835E96609494307B /* CLucene-Core-API */, + 16CA9EC8ED0E18967AD80E31991EB162 /* CLucene-Shared */, + 997FF1E1330AF95D76491512868F890F /* Support Files */, + ); + name = BRCLucene; + path = BRCLucene; + sourceTree = ""; + }; + 4BDFEA6606450B605141A62AF9DE11E2 /* Pods-SampleOSXCocoaPodsProject */ = { + isa = PBXGroup; + children = ( + D85EEAEFD4A5E025C2CE466975963929 /* Pods-SampleOSXCocoaPodsProject-acknowledgements.markdown */, + E82C48EC484AAB44734F653BC4F1A146 /* Pods-SampleOSXCocoaPodsProject-acknowledgements.plist */, + 806D8004C981177DFCC2F31F3E474AFC /* Pods-SampleOSXCocoaPodsProject-dummy.m */, + 3EB60C40FA604671B29E09190847CD1B /* Pods-SampleOSXCocoaPodsProject-frameworks.sh */, + 759A6B18D53B006E1153063E0CB40103 /* Pods-SampleOSXCocoaPodsProject-resources.sh */, + B82890BE307E0A11384D2D30FA44C209 /* Pods-SampleOSXCocoaPodsProject.debug.xcconfig */, + FCC17AB1D14239C4FE5350CFA783AFE1 /* Pods-SampleOSXCocoaPodsProject.release.xcconfig */, + ); + name = "Pods-SampleOSXCocoaPodsProject"; + path = "Target Support Files/Pods-SampleOSXCocoaPodsProject"; + sourceTree = ""; + }; + 50707FA10877467C6ABDA00AE4A19850 /* CLucene-Core */ = { + isa = PBXGroup; + children = ( + DE6A9CDE781F27373AC94FFD9250E81C /* AnalysisHeader.cpp */, + 4845AF0122206B78A3E6B14F177F3B6E /* Analyzers.cpp */, + 1C66E43064F5D11D648B10F570373110 /* BitSet.cpp */, + BB24FCB65BC0EBF2E09803F1E7BEBE9B /* BooleanQuery.cpp */, + 8D420A8DB25674848611CB3D084E8E6F /* BooleanScorer.cpp */, + 70D0DFC72EAF53657FBF857A3A2E2EA3 /* BooleanScorer2.cpp */, + 92409982DC51989EE6B7503626811BA4 /* CachingSpanFilter.cpp */, + BC4C06B186FEC255E51EB26F3EA5B582 /* CachingTokenFilter.cpp */, + C88ACDF2BC1506E71F6552AB55BDEC55 /* CachingWrapperFilter.cpp */, + 7D73C41280AE19C57E5FE7923805D3DF /* ChainedFilter.cpp */, + 98081EFDC125F6FCF0263EAD9F495C96 /* Compare.cpp */, + 4810634A65400209479B92D7737AE908 /* CompoundFile.cpp */, + 5DEE2ACB39CDA60E57D674B0D961C87D /* ConjunctionScorer.cpp */, + B2C217234787BEB7653062C341129532 /* ConstantScoreQuery.cpp */, + 4F87B24BFBB5A9116538FE400C44BC00 /* DateField.cpp */, + EDF13A7B423B26B71793F0EE6012521C /* DateFilter.cpp */, + 0BAFEE85ECCAB767D7CC218882927A72 /* DateTools.cpp */, + 76802644BFAA4A2CF7402242595FA840 /* Directory.cpp */, + F084D1BEDE2B10A77F0F24B56204517B /* DirectoryIndexReader.cpp */, + AD00509918397565244F5A1F9153B442 /* DisjunctionSumScorer.cpp */, + AF78755D898EC23C0150FCE8B21E8027 /* Document.cpp */, + F3740562FF70D1166FFD5B78671E5A3F /* DocumentsWriter.cpp */, + 3DADB5089E70CB34FAAC7EAC398837AB /* DocumentsWriterThreadState.cpp */, + 862BD47B100B863FB23CBDFF7FED0120 /* Equators.cpp */, + C70BB8B8810C1DA29165F10F1D95035F /* error.cpp */, + FF48513AC8932FEE33F065FDE1584B67 /* ExactPhraseScorer.cpp */, + 4A01353E27E8F46DDA9FBB97266F6203 /* Explanation.cpp */, + A995A59B1895A4495F4484FCCCA3599C /* FastCharStream.cpp */, + 5196B1B4E0135F36E2F322EC648AE605 /* FastCharStream.cpp */, + 4630FF2C1003236B762B9DC84AE1F9B4 /* Field.cpp */, + 546C5168B58A308D4732D680CEC01259 /* FieldCache.cpp */, + E28258A38CACCB5FEF6246CF75A9DF29 /* FieldCacheImpl.cpp */, + 8B5A4FD5F8DCA5544DB65669242763BD /* FieldDocSortedHitQueue.cpp */, + B4AACFB66AE995F2A40CE179F66B34EF /* FieldInfos.cpp */, + C23EFB68259FEF0C8F9FE151E9CABE52 /* FieldSelector.cpp */, + E62EC51BA896C727A3498533AC739AF4 /* FieldSortedHitQueue.cpp */, + 2AA53D00527851483BCE9253C71EE597 /* FieldsReader.cpp */, + 622638E352513B394B4BD8B58436FF78 /* FieldsWriter.cpp */, + 47F78B60B23DBF5C570914FDB36A8C4F /* FilteredTermEnum.cpp */, + 26F3F564C26FC944AE1B6D02C805F250 /* FSDirectory.cpp */, + 704BE68679FA060BDA30D873351D3054 /* FuzzyQuery.cpp */, + 623F87CAD01CC9593D3F2AF8920BD43A /* HitQueue.cpp */, + 14B777D3F3BB4DDCDACA126C7A6996FF /* Hits.cpp */, + 6A0E2227514D895B3F4AC5AA68B07C1B /* IndexDeletionPolicy.cpp */, + DC654E3E47511B2E24BE1EF4BA17A420 /* IndexFileDeleter.cpp */, + 180C4C05BE9C4F2FC7951B0D66C4718A /* IndexFileNameFilter.cpp */, + F84318B0FF23176FF15035DDE333E449 /* IndexFileNames.cpp */, + C51E171F177395BBDF5B4CEBC4E71C22 /* IndexInput.cpp */, + A9E18FA1212CF5CB97DD3AB62AB11A4D /* IndexModifier.cpp */, + E91FEFE82A966CD2F98C7C9ACA75CDE7 /* IndexOutput.cpp */, + C6E0D8E6C60CC206F1A80CF8E0AD732D /* IndexReader.cpp */, + 6937EEEDDF0A6F7B45AA150C89DC1B86 /* IndexSearcher.cpp */, + 8DB89D6654C129BAAD85011D9084AB20 /* IndexWriter.cpp */, + BB7D50E6837B2A15410401CCD9244FC6 /* Lock.cpp */, + E4943A2D1AC87D86F96AC0545201BEE5 /* LockFactory.cpp */, + 37F6010272C60DA182D786B15E5A707A /* MatchAllDocsQuery.cpp */, + 5D51E199BC20841D7D2781757A091787 /* MD5Digester.cpp */, + 5E0570B36187668126F98C86D9E8246B /* MergePolicy.cpp */, + 54967098508D5BDCA878B9D8DE0CE8FE /* MergeScheduler.cpp */, + FFA17B74B389B35ACD7EF8AF90588829 /* MMapInput.cpp */, + F537368F4EA438A3A9B92AC4D05438DA /* MultiFieldQueryParser.cpp */, + C8DED676A1A9BAE3FCD9615CAD0AF649 /* MultiPhraseQuery.cpp */, + FA48564FC777CC8A7D2D128A679E97A0 /* MultipleTermPositions.cpp */, + AD42033CAC35AC729B0BD3B9F260030F /* MultiReader.cpp */, + 4318EB604F269B47211DA5E7E36A2B90 /* MultiSearcher.cpp */, + EB30669177770F2991B62716CE46D3CD /* MultiSegmentReader.cpp */, + D9FE04E31DA566A8B4C48982CB90B668 /* MultiTermQuery.cpp */, + A34B52863B2308160DE34202A28ADFD3 /* NearSpansOrdered.cpp */, + 39DDCD5CF3666E04838EB45456FD0650 /* NearSpansUnordered.cpp */, + 9D19E237E3AC90DC3A07B1E71D196C4D /* NumberTools.cpp */, + 1C292D2D4E627AD8906F8C132AD7C2D9 /* Payload.cpp */, + C9C73E967A3E51656D643142C9E4CA82 /* PhrasePositions.cpp */, + 37F384DE0CE8A12BEAFF006192E7ADAF /* PhraseQuery.cpp */, + F1FCAD354B4F6338C96207C0894FD23F /* PhraseScorer.cpp */, + EADDF549A0757CB1EF1DA4DB7B9A8CBA /* PrefixQuery.cpp */, + ECE5AB850498BF4F125C918A6504ED0F /* QueryFilter.cpp */, + FEF551BDE2774BD422457DD08DE64935 /* QueryParser.cpp */, + 3A1B5CA716DE6A0613393366B4248241 /* QueryParserTokenManager.cpp */, + 7364535410E14E3C9F61C87C9234E691 /* QueryToken.cpp */, + CED3132726B8568756ACE328107BB088 /* RAMDirectory.cpp */, + 6AF5C81FE77DA7B1221584B0BC9E685B /* RangeFilter.cpp */, + 50843DCEC8081B4FE6D388E678A5BBF6 /* RangeQuery.cpp */, + BA1B61014F3C0BD146B5F5E71F725B55 /* Reader.cpp */, + E731F7DC56C0D1995D546F88A019FAA5 /* Scorer.cpp */, + 530D202CE8C5CE77D1EF342DC68808C1 /* ScorerDocQueue.cpp */, + FD1DAF2712C61C4B6F04BF01E93F6006 /* SearchHeader.cpp */, + E06EC32B5AE150C6935E5054382F4CFA /* SegmentInfos.cpp */, + 2B2334CDCD713C1978737851DFB1C554 /* SegmentMergeInfo.cpp */, + 0A6F81D22336A1B2E3BF8123E9A10842 /* SegmentMergeQueue.cpp */, + E94D171BEC936DDD46358C152CEB9DD0 /* SegmentMerger.cpp */, + 80CB318DA6866FC55B02FE56AB1AF7DD /* SegmentReader.cpp */, + 959A5ED3E0F30D2AE0DE3AF64FCF9B7C /* SegmentTermDocs.cpp */, + 1D3A15FA7F517AEF0DC380D8AD518571 /* SegmentTermEnum.cpp */, + CCD0DCC46C2F66FE49D4EF0E2C63DF28 /* SegmentTermPositions.cpp */, + 3FF4ACDFB6F17F33D7DFA9A99EE18851 /* SegmentTermVector.cpp */, + FAFC028AC8C4F5DAD546F97BF5BF3524 /* Similarity.cpp */, + EFC8A18F9813B50ABBA0305CD777F62B /* SkipListReader.cpp */, + 5A4C0E6A1FAC0E2D123E1802366AFA46 /* SkipListWriter.cpp */, + 12339A167E0E680715E152B852731B01 /* SloppyPhraseScorer.cpp */, + 73A1297033B2F3481F639BFE07EFC48C /* Sort.cpp */, + 75CD4B9DA1FB572EC09D675996FA757D /* SpanFirstQuery.cpp */, + 8BC4A9690E8354EE34E7201267C06527 /* SpanNearQuery.cpp */, + B498167FE4A893BA6F112C9C7B041EEE /* SpanNotQuery.cpp */, + 42E07CAFAA0287DD31F9CD2B526E57FE /* SpanOrQuery.cpp */, + A3FB1E03025AA08FA7DFBC4F543275AF /* SpanQueryFilter.cpp */, + 01A08785EF49450022529C811985FFF8 /* SpanScorer.cpp */, + 26E9093CA434C2BE8F55C943844CCF41 /* SpanTermQuery.cpp */, + 6864B6D38A8257008CD4050E1CC6D985 /* SpanWeight.cpp */, + 11A8D97676AB54A53CF745F1D4D7F69D /* StandardAnalyzer.cpp */, + 168A865B0ABD5080A8DC6CA26FF3EB48 /* StandardFilter.cpp */, + B640396B1DC98F5DB0ADA142680444A0 /* StandardTokenizer.cpp */, + 28699CA56B726787125763DE171F50A4 /* StdHeader.cpp */, + ACC757F974D8DA10465589ED310171D6 /* StringIntern.cpp */, + 5E7E512457ED609FE6DB9B778AC966BF /* Term.cpp */, + 85488AB0AF28DF9CB8913D071B2B487D /* TermInfo.cpp */, + 230439D6FC8DFEB0F6339DB302E8BF4A /* TermInfosReader.cpp */, + 94F9C731637E44395903EE978676E908 /* TermInfosWriter.cpp */, + C162D222BCC0D7677592ECA43B54DEF7 /* TermQuery.cpp */, + 514BBCF5E0C7EC8C213D60743F02B873 /* Terms.cpp */, + 0B9985C5E9C9FEF0337F11CAAA4B6BF1 /* TermScorer.cpp */, + 0D0B02068775D3AB7DA927AB368F0873 /* TermSpans.cpp */, + 5D393B5BB643173327C8BFD7FCDC801C /* TermVectorReader.cpp */, + 8D062465F0B789C8FD7784D4A8057CD9 /* TermVectorWriter.cpp */, + 3AB59E5049FD20E071742B42AF626CB2 /* ThreadLocal.cpp */, + 9E6022A2F977678293D0489E9E2BCD2B /* WildcardQuery.cpp */, + CC07D0A5AE8220E4FBB0DA5A7AE22962 /* WildcardTermEnum.cpp */, + ); + name = "CLucene-Core"; + sourceTree = ""; + }; + 6EA925AB9A2DEA540BC1AE0565D1922A /* API */ = { + isa = PBXGroup; + children = ( + 35374D39596A8FD2B4AE4722BC51DEC8 /* BRFullTextSearch */, + ); + name = API; + sourceTree = ""; + }; + 753F211F924CC2C3E256F1F05F47F880 /* OS X */ = { + isa = PBXGroup; + children = ( + 18763936F9DB1C416B14F3354E26BB22 /* Cocoa.framework */, + 711FF6036DABA264EC4881238C158221 /* CoreData.framework */, + ); + name = "OS X"; + sourceTree = ""; + }; + 78D298E3759CE7F9B448D6502349CBF8 /* Pods */ = { + isa = PBXGroup; + children = ( + 35EDDD8C8ED127FA686696547630C6E1 /* BRCLucene */, + B7CC6B6BF97F3144BCB4B04DB0B23E06 /* MagicalRecord */, + ); + name = Pods; + sourceTree = ""; + }; + 7BF2DCAC53E3A5C59E75E8EBCCD2D6C7 /* Implementation-CLucene */ = { + isa = PBXGroup; + children = ( + 0C55F428770E568623AF46768E1C5661 /* BRFullTextSearch */, + ); + name = "Implementation-CLucene"; + sourceTree = ""; + }; + 7CAEEF3FCC7635864410064D9D774113 /* Development Pods */ = { + isa = PBXGroup; + children = ( + EF4169F75B4A7733C8D535A67533AB52 /* BRFullTextSearch */, + ); + name = "Development Pods"; + sourceTree = ""; + }; + 7DB346D0F39D3F0E887471402A8071AB = { + isa = PBXGroup; + children = ( + 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */, + 7CAEEF3FCC7635864410064D9D774113 /* Development Pods */, + D648CE86F139C7CCFD55D5B8A03BE74B /* Frameworks */, + 78D298E3759CE7F9B448D6502349CBF8 /* Pods */, + A763A0DC6A96278FFAF6C7A0B354F4F6 /* Products */, + E830A9FEBB6432904EAF2CBBE2A2CBFF /* Targets Support Files */, + ); + sourceTree = ""; + }; + 7EEBD490B0B6D447835E96609494307B /* CLucene-Core-API */ = { + isa = PBXGroup; + children = ( + ACDA6C7D5DE38307CB40C972C18E227F /* _ApiHeader.h */, + DD64E7E49B82D5C8B6A5623B2F377E1F /* _Arrays.h */, + 190847F87D4617A881A6CAE81866416C /* _BooleanScorer.h */, + D5E5FFE28830E5BE59E17ABF175DDF5C /* _BooleanScorer2.h */, + 3F985B4F77CA962908E799DF572D0769 /* _bufferedstream.h */, + 565A4AE0173A9903DE6217B34AE91B7F /* _CharStream.h */, + 62D0ACCC127DFA017DCC1B9DDAE4C9DD /* _CompoundFile.h */, + 9052F73AD94DE0D3C9ADDDE5CACECAB8 /* _ConjunctionScorer.h */, + 979C1DF79EA615A955A044151983AD30 /* _DisjunctionSumScorer.h */, + 25616461EF66368390BF28C0002A287F /* _DocumentsWriter.h */, + F46023A2AA36B4677D3A61154DBA26F8 /* _EmptySpans.h */, + 1E0F7FC1BE7DF8FE18DF1CA2200DD28A /* _ExactPhraseScorer.h */, + D216007361563B7F426D52774DC7509C /* _FastCharStream.h */, + 60BE5BFFE0A4333C975AB8C1DBCA2F7D /* _FastCharStream.h */, + A520009FA69E6C24919933C8D83ACFCD /* _FieldCacheImpl.h */, + B50FA0E298D6CE36715BD000DF60F3CF /* _FieldDocSortedHitQueue.h */, + F0EE94D8CF833E2A4A4B5D74211FE6DA /* _FieldInfo.h */, + 9B04EE61042644C0BC004031200642DF /* _FieldInfos.h */, + D09E2A6864380C9DDFBD29392C9BBF64 /* _FieldsReader.h */, + 86458B28609CD4DEE0C01F0B61C94993 /* _FieldsWriter.h */, + 314E2E2322AFFBD6B443F7CC43E0B030 /* _HitQueue.h */, + C52DB83BBEF1104D8031BB83D9114DDF /* _IndexFileDeleter.h */, + DE562C62464DF93D0E563AF4B13009BB /* _IndexFileNameFilter.h */, + 1D6A914258EBD9FDE85BFE2AD109C603 /* _IndexFileNames.h */, + 273ECC52FD890567546DB588003B9CA4 /* _Lock.h */, + 41E221654E18B2F1B7964761C29B20BC /* _MD5Digester.h */, + 8A2AD88A9226B521A8CF3AB9C9FA982A /* _MMapIndexInput.h */, + 242837C598D53CBCB4C0DE36179D409B /* _MultiSegmentReader.h */, + DD54E3BB72C82B5CF08033B634008661 /* _NearSpansOrdered.h */, + E61655022330881057711F3C1FC4FB6B /* _NearSpansUnordered.h */, + CF8FFA04848B29DBF409D77A7D954152 /* _PhrasePositions.h */, + AA286AFA457BE96A4AE7425579B41F71 /* _PhraseQueue.h */, + 749FA81D4B3B0B292053540DA6302AAC /* _PhraseScorer.h */, + 2396408CA68671A2E857C914F3976317 /* _RAMDirectory.h */, + 9C25FB4F434C9E34C4B2AA595C799791 /* _SegmentHeader.h */, + D170B026BB5CD2BE014E7F027BB59B6E /* _SegmentInfos.h */, + 018BFBA78995FE2A9E07E7CAF0CCA792 /* _SegmentMergeInfo.h */, + 1EB326299D355D8CA5B6875F56EED551 /* _SegmentMergeQueue.h */, + D8B87F562F25ADD414900D3271F2ADF4 /* _SegmentMerger.h */, + 5096DBCDE2F3145408B5071845D8FD25 /* _SegmentTermEnum.h */, + 7F38B75273064902F07DB7627BA873D3 /* _SkipListReader.h */, + 1C7C64BBB14327BDC8C5B009FD33E61E /* _SkipListWriter.h */, + E31C33AB8382FF2B401A28BBDA975573 /* _SloppyPhraseScorer.h */, + FD203BDE546B448C6B763FCAD3415682 /* _streambase.h */, + FE68314AFAF234C98B4C94C08977330A /* _streambuffer.h */, + 03E4192C2011FB1BD2F8E6B4A83FBAA8 /* _StringIntern.h */, + D3515CBB247F3BB720CD3770DD2A9FF0 /* _Term.h */, + 990CDC2101D54FD7AD419CA585D9AF1E /* _TermInfo.h */, + 3AAF3D5FCE31D774F775C9C1A8553486 /* _TermInfosReader.h */, + A3366D9406EA82AED3EBC08F2D212D79 /* _TermInfosWriter.h */, + 13391B8024D7F791872BFDA93B80D616 /* _TermScorer.h */, + 80D033208C8F70340BFA0C437F5419E8 /* _TermSpans.h */, + 41A19C4E32DDE5E1F4632166DADF9109 /* _TermVector.h */, + 35C730D5CB487829EE698B00547F10E5 /* _ThreadLocal.h */, + AA6CFBFC85BC8BE66A37453B7341A7B0 /* _VoidList.h */, + 93F01E0B269C5A484143CC98347BEFCA /* _VoidMap.h */, + 28A80FE0CE72841F6ACB4CC6E597412C /* AnalysisHeader.h */, + 071A54C5C0D3640499EFE72B59DB9DB8 /* Analyzers.h */, + 57988E00253B2CC4D707476C6EA54FB6 /* Array.h */, + 143BC2C4F6E956CD13DAD201BBF3EE7C /* BitSet.h */, + 98A67ED3D0A8EA1A7ACF9DB61997F18A /* BooleanClause.h */, + 3B258C64CA03EF469669942463AC6232 /* BooleanQuery.h */, + 67778391524206BE409425B899B19BBC /* CachingSpanFilter.h */, + 5A5A283AA41EC7E044725D1807170A84 /* CachingTokenFilter.h */, + 3622396976233C97C77A3E6D676709DD /* CachingWrapperFilter.h */, + E739C1E8EC4AE1926BA45602ADADB445 /* ChainedFilter.h */, + B7172A0EF83D8AD5192CA1A7ADF5FC2C /* CLConfig.h */, + F3D6105B1D1C44F401D8917AA1F1797D /* CLStreams.h */, + 7B9E7B01F4B961360C0298EFC9871F3D /* CLucene.h */, + A41732C243ABA3388C70C1C1C825E39A /* Compare.h */, + D0B1A933E3B5ACDC25EF48C5D9379047 /* ConstantScoreQuery.h */, + DA4298B6DF194765AF16977362CB92D2 /* DateField.h */, + 1ED6559FEEE9CECAC6A3BB0757CD6BF5 /* DateFilter.h */, + A8A9B3045217E913CDB0A85972FC4CE6 /* DateTools.h */, + FE15BC07111C7A34838710F9162C726C /* Directory.h */, + 565AD8BF5F33ED2565C3CD59E92F0BD0 /* DirectoryIndexReader.h */, + 67D5951EAB1A789975725C408B9C632D /* Document.h */, + 805A1875D72B17EA8F93E4504129E256 /* Equators.h */, + B11B8DB59683C72F054B551BCE0A8CEE /* error.h */, + F43549492E9AAB05FFD00C266692513E /* Explanation.h */, + A854146321C77E6C8A710CAC7C23FA63 /* Field.h */, + 57675D93A6A70DB6DB160E9A141DD753 /* FieldCache.h */, + 8AAF40A7B8629C71DB96E76244F41DA9 /* FieldDoc.h */, + B49CFD6862CE8C2D360C3D3D1F671E30 /* FieldSelector.h */, + CFD58621506DC476AF1CE25E6130639F /* FieldSortedHitQueue.h */, + 6A78D7DE1B699BA6E2878A1E775B94F5 /* Filter.h */, + D19874134A52A00637B76D687B6564B2 /* FilteredTermEnum.h */, + BEFE44D5317E663965AABAEE9BFBACE0 /* FSDirectory.h */, + 0F1CCDA698DBF0E4F1A0CC63FDCE663F /* FuzzyQuery.h */, + 08700907FC0ABBB72F5FBC34F56E10F7 /* Hits.h */, + 1433A97B8E23322E2005FCB08355EE9C /* IndexDeletionPolicy.h */, + E1AC20C88EB086C5E6B6471C39D1C873 /* IndexInput.h */, + 75063B9B316C66D608EDE01E9F7ED037 /* IndexModifier.h */, + 7355B6411CE91CA576F1012FE24D7F1A /* IndexOutput.h */, + 21F85D5C2ECBFA9ECA299B2CF4274065 /* IndexReader.h */, + 56FB61C99ABBFE8FE9A0767C5EA09D86 /* IndexSearcher.h */, + EBEA97984C496C4699EA201913A7F35B /* IndexWriter.h */, + 5B3A5FDD9CF9B743E9622E1570B16534 /* Lock.h */, + 4D2F0F5A75292BDCBE83E1914BCBE8DE /* LockFactory.h */, + 01FA844CAD5762937B29F0B1904EE2A5 /* lucenebase.h */, + 53D7E1985CD4A9D9DFFA24C44508D569 /* MatchAllDocsQuery.h */, + A4CCE22118AC1CF4DFE2D107CEDB35DA /* mem.h */, + C83DB46802B392AC955055094183A662 /* MergePolicy.h */, + 0D326AF7EE50252F0DB7DAA74532A7B1 /* MergeScheduler.h */, + 7BDEB8AE28799FF0F409BD829F95D586 /* MultiFieldQueryParser.h */, + 067F82F6F18230BAA4B493A6A050E95B /* MultiPhraseQuery.h */, + 1854A2FB203E88A26CABDA7926F10864 /* MultipleTermPositions.h */, + 5FC7273589812AE37EBC18FE943DACAC /* MultiReader.h */, + 21F8217D3E4A913674D6E345B9DAE157 /* MultiSearcher.h */, + 44F29302F058F65BED3485600CB4FCE1 /* MultiTermQuery.h */, + A9F2986CDB83B04E92D589FB93F6D2D1 /* NumberTools.h */, + 300905B1467DF0F0B0432E9922F7534E /* Payload.h */, + 5593F49590A8635FA55534D225B58198 /* PhraseQuery.h */, + 451CD9FE257D429B7F84846D6E578828 /* PrefixQuery.h */, + 6EE034D82C72BA2ABEAA10EA084DFB9E /* PriorityQueue.h */, + E315D0E7459F25192DD969D33493BFAD /* Query.h */, + 1E86B604323C8B5FB80BCFDCE700EF6F /* QueryFilter.h */, + A7399E8EF9F89A74F387772C2F24EBC0 /* QueryParser.h */, + CC452524FA971775CA1423885F9317E6 /* QueryParserConstants.h */, + 535BA77ED0A8D1E2DD5975B0EC39886A /* QueryParserTokenManager.h */, + 4B17F4367A42B45AA2A6E6F5469ED547 /* QueryToken.h */, + 939199F2D565C76CBED0D578B9B3D755 /* RAMDirectory.h */, + C39E6D06C0D6752F07B7FFE3AED60AD9 /* RangeFilter.h */, + A1B2C96970379A4CED85DBAD95A300B2 /* RangeQuery.h */, + D2230DA82778E688B62F0C785956C19C /* Reader.h */, + DD92BAD789278D86323770B5510B1BD4 /* Scorer.h */, + E1DAD073494E4D820F7867BD3EB7F6E1 /* ScorerDocQueue.h */, + D056BBAB7AEB184A0F889D13B4E4C40A /* Searchable.h */, + 11D0E1833074BEB8E6F684A42FE95044 /* SearchHeader.h */, + 3774004C41DD949B7A0331826C347035 /* Similarity.h */, + 2FF76478C360613D6C1191D0B4D16B19 /* Sort.h */, + CFC1CC7064CB4052642F191D5C96A52A /* SpanFilter.h */, + 9100035CAE57C0A81C77663D17D5E4C5 /* SpanFilterResult.h */, + B2C874DD8961F4ACFEE00507784B988A /* SpanFirstQuery.h */, + 92B18DDDADADC2A9CCF4AF1D7C76CC33 /* SpanNearQuery.h */, + 25C6A0E8EB7569E5019924489DC9AE41 /* SpanNotQuery.h */, + DC3E119E9A769879D5A25CC2C029241D /* SpanOrQuery.h */, + 9907BA4D42A55366A18F9285EBB0F726 /* SpanQuery.h */, + 5D2FA179EC8753C40DB4CE79FA6A2EF6 /* SpanQueryFilter.h */, + 3E329701C3674ACE7FE348F0B5E0A7A4 /* Spans.h */, + 457CF1D6AE50F3EF56DB858BB2AAF861 /* SpanScorer.h */, + CD4B2E352B364AB1C5A232D1E2828647 /* SpanTermQuery.h */, + 9A923E5765BC7E55BBEC97834932ED72 /* SpanWeight.h */, + 023C6B5F9B81FDD5C5F2408B3B0ECB69 /* StandardAnalyzer.h */, + 74D28A2D241FCF08E85C7A4C1B701534 /* StandardFilter.h */, + 041CA437CE709016429E33F334D1A574 /* StandardTokenizer.h */, + B031D7A3DD77B06FEDAE749CF0183028 /* StandardTokenizerConstants.h */, + 9648E413DE61A432DA094BEBA9D70086 /* StdHeader.h */, + 7DE4D53F6117DD810988D22559DEBB6C /* Term.h */, + C26067CCA1A3445218291648F5B9477E /* TermQuery.h */, + A8DEB41390A69C903FD0D97E9CD6FEF0 /* Terms.h */, + BD29F34F8F2622C679BC223D10484045 /* TermVector.h */, + 4CFFD0B50C0A60A76AA03DED6D803AA2 /* VoidList.h */, + A1AB90E0C2320ED0BAB24963425BA205 /* VoidMap.h */, + 325DC359AD8630166B09793E4A07865D /* WildcardQuery.h */, + D12FC3982728C4E6FDBA5479A2B7AAC6 /* WildcardTermEnum.h */, + ); + name = "CLucene-Core-API"; + sourceTree = ""; + }; + 8C011FE83BFEE5E32544A8AE14330543 /* CLucene-Config */ = { + isa = PBXGroup; + children = ( + C4622608A4C01D72805EEADA3B0A2AAC /* _clucene-config.h */, + 3BF3EAF64EB4B8CF331CEDF303F86DAB /* clucene-config.h */, + ); + name = "CLucene-Config"; + sourceTree = ""; + }; + 98D5F0D21BFE649A77F1BD4BA27045DE /* CLucene-Contribs-Lib */ = { + isa = PBXGroup; + children = ( + 70CEBE56AA04C0898EE29EB02E48B403 /* api.c */, + E464668BFBAAA8833081E488E3013E1A /* api.h */, + 25450189C760A9136476E940A557357C /* arrayinputstream.h */, + 24CBCBAB90F4C54656F808F70A536916 /* byteinputstream.h */, + D9169CA56E8E3965E7C466A9825E6F83 /* CJKAnalyzer.cpp */, + 0F4CE771DCCEF80F413A501B49778054 /* CJKAnalyzer.h */, + 5D9016A5EE2DA8D63DB51625945DB157 /* Encoder.cpp */, + 1DBEC6EE9286268A90147044DCD47E7E /* Encoder.h */, + 751E99FD31C5F968474E887D74952EAF /* Formatter.cpp */, + 5AD70E6FA6AE0DBA17B210AA6D696A1E /* Formatter.h */, + 3938CE1590684E7ADD24573B5DDBF21A /* Fragmenter.cpp */, + 011A7928585F439653D1561D60181E25 /* Fragmenter.h */, + 4589AB69F66A9B2A1031A97BAC729388 /* GermanAnalyzer.cpp */, + 31AAA84E949DB6499E106CDFE1C5F887 /* GermanAnalyzer.h */, + E4CD2DA8B899F80F93554F9AC6CA8385 /* GermanStemFilter.cpp */, + 009882B75D7B75810F027F950BE613EA /* GermanStemFilter.h */, + 5BD1021A5307DE1A327AA1A6FBA0EBD7 /* GermanStemmer.cpp */, + 46124E452DD89143D740805694179A66 /* GermanStemmer.h */, + 304C1D14DD142B8DC1F99C9F184610A0 /* gzipcompressstream.cpp */, + 52E34AE1E545535E031A384A1E2066C3 /* gzipcompressstream.h */, + 7DC2BF81F57D621CB1634D58328D9E10 /* gzipinputstream.cpp */, + BF9C4D4C2C21354C7C6BB3E99C8CFD59 /* gzipinputstream.h */, + E526612A59322726F31AEDC5902AB670 /* header.h */, + 4FF03957DDF418768204AB82749529B8 /* Highlighter.cpp */, + 2D581AE304E7100E0C07D8475DC758A4 /* Highlighter.h */, + CC0723942A5FE20AB30AB252427D4F54 /* HighlightScorer.h */, + 41798227CBCF71425709AAFCC5591825 /* LanguageBasedAnalyzer.cpp */, + 07B7BA11867C8FAEFC51698B07660152 /* LanguageBasedAnalyzer.h */, + CFEB3BDFDBBD215F65A231A3296E9206 /* libstemmer.c */, + 3BCD29DCC65A9A3F8161852A5D1CC1F8 /* libstemmer.h */, + 9CC876806C4F5C8606E0A3B8C0B6DDC2 /* libstemmer.h */, + 576FEC692C313CBC17D00EDB2FCFFCB0 /* modules.h */, + 4C51695D1BE52731251898BE7556F77C /* PorterStemmer.cpp */, + 76B196F74ADEDFFEC18A542BAFCB3864 /* PorterStemmer.h */, + B9AC60EF2824852829FEC66811D8D4C6 /* QueryScorer.cpp */, + 9543C236C8B31E364C07890A2C213837 /* QueryScorer.h */, + 4FD115D7A8137191487C2B152159C4D5 /* QueryTermExtractor.cpp */, + CC7FF1F8763E6138543BEC08D42174A7 /* QueryTermExtractor.h */, + 2E2E5D30FBA09058D87DFD27D390E32A /* Scorer.h */, + 160846AE5181166C8F5ADB61A178738B /* SimpleFragmenter.cpp */, + 2AFA782B439DCBA08EE7067B00111FAA /* SimpleFragmenter.h */, + C23D034CACB48B3F157661A87641A958 /* SimpleHTMLEncoder.cpp */, + FD236C52DBBDFD95DC70E8466C19C6EE /* SimpleHTMLEncoder.h */, + E05F79A641D2B3314A9D9AA1EFD3BE13 /* SimpleHTMLFormatter.cpp */, + 44FE212087FC89F90B5014EBC06EA8BD /* SimpleHTMLFormatter.h */, + ADEB670673AB3AE1A6A5C724F81E3C3B /* Snowball.cpp */, + 02D2999E28D05C43B1E8F1838483AD67 /* SnowballAnalyzer.h */, + 8F34B4DB0BB9B6F5EF25A0D2EEE5CEE2 /* SnowballFilter.h */, + 80D44BBBF7D5F4C235FD4507234AF3AA /* stem_ISO_8859_1_danish.c */, + 0F704D672D5EFF612E0D0DCB427A82E7 /* stem_ISO_8859_1_danish.h */, + 774D1CAFFE38E669B316371202EC01BB /* stem_ISO_8859_1_dutch.c */, + C03E306AD8E814F65C46AE1177B8956B /* stem_ISO_8859_1_dutch.h */, + AC4CDFA53C547E9051D3EA0319D7A5D8 /* stem_ISO_8859_1_english.c */, + 5645D2A6B12FAA9F00560F84BE86BD08 /* stem_ISO_8859_1_english.h */, + 3D40DE06986C284BD836D0BF861092DF /* stem_ISO_8859_1_finnish.c */, + 3D5F3C65333A1367AD4D5756694479FD /* stem_ISO_8859_1_finnish.h */, + C63B68320EB32C2FC309BA0D931DF9C4 /* stem_ISO_8859_1_french.c */, + D2F50E8B46CFC472A6DC9DBC2EC12868 /* stem_ISO_8859_1_french.h */, + E625CDFFDF0F1A316642F96E60E71366 /* stem_ISO_8859_1_german.c */, + CE7071DC76F7272C0D149F7B14180AD3 /* stem_ISO_8859_1_german.h */, + 6CCE18F60E76823D1D0CEB104E3B34E5 /* stem_ISO_8859_1_italian.c */, + 8BB65A0BEDC31555BF4FC7A35E4672FB /* stem_ISO_8859_1_italian.h */, + AAE615DC7C3E6D7780C2E5C60C4D433D /* stem_ISO_8859_1_norwegian.c */, + C2EBCBBB2D22665392B7817D00B3D6F5 /* stem_ISO_8859_1_norwegian.h */, + 2DA50CA1C48A173C15A5C75F1B1BB9C5 /* stem_ISO_8859_1_porter.c */, + BB7B0C4FE44AEDFB3A25FFAD6FAF3206 /* stem_ISO_8859_1_porter.h */, + D16D32AA9F7796231E4CF8817AD2736A /* stem_ISO_8859_1_portuguese.c */, + 99D74188BECF8BAE8B2B87D92C46AD41 /* stem_ISO_8859_1_portuguese.h */, + 3868080E99BB6B84390DEDB91A8AD854 /* stem_ISO_8859_1_spanish.c */, + 4033C7C6D2FBBF221ACE15972744F395 /* stem_ISO_8859_1_spanish.h */, + B1755A8BB93840767F1DA2B1C9323730 /* stem_ISO_8859_1_swedish.c */, + E33B69820A52BED0534EE4C315A7FE17 /* stem_ISO_8859_1_swedish.h */, + 99CBE67A82A4FE8A753247F5682D3967 /* stem_KOI8_R_russian.c */, + 0813264CB23B0EB3E04EB9AA5069C447 /* stem_KOI8_R_russian.h */, + 37E166D0A9665D627DB93B3D81A7C0E7 /* stem_UTF_8_danish.c */, + 90AE23877E4D82C45DC08528DFAA6CB8 /* stem_UTF_8_danish.h */, + B64B73B038EB12CC59F5248DF4C25EB5 /* stem_UTF_8_dutch.c */, + B196415C43B0C207AC489263779D10AD /* stem_UTF_8_dutch.h */, + EEB66D92C167CEDA58AF75A9B5DC7658 /* stem_UTF_8_english.c */, + 4344093172180902D2B69E0AB1DCAB6E /* stem_UTF_8_english.h */, + FEB2EC9EC06293BB496854626EA781E2 /* stem_UTF_8_finnish.c */, + EAAAA33FA1114D560DB775BFCA1361F5 /* stem_UTF_8_finnish.h */, + 91213B3768B944E4C0315BB2D97BD481 /* stem_UTF_8_french.c */, + 707558E8FCA98F05F1D440606B6EAFBC /* stem_UTF_8_french.h */, + B2D8511E2AA08F5A12A98060179E119B /* stem_UTF_8_german.c */, + E36B2E834C27DF4B691279214A9AA816 /* stem_UTF_8_german.h */, + 30621FC0546DD2EEDEF03E70717EDC3C /* stem_UTF_8_italian.c */, + BE525F8C997153CCF77E84F66B8742BE /* stem_UTF_8_italian.h */, + 8F092DCD5B54E94F989E4CCB3D9D63AE /* stem_UTF_8_norwegian.c */, + 528AC44A4F7DA848A07DE52D9B589973 /* stem_UTF_8_norwegian.h */, + 02BD871133FD36C2247DA340D164722F /* stem_UTF_8_porter.c */, + EFFDB2F48A4FD22C3E720BECEFB9B108 /* stem_UTF_8_porter.h */, + CAD7FDAEC41696681BB9FDE55592B751 /* stem_UTF_8_portuguese.c */, + 78DA43BDF5AE4D266B1761EFDA15B06A /* stem_UTF_8_portuguese.h */, + 4CA615C122034D1AC7E0D6FB1343D3DC /* stem_UTF_8_russian.c */, + 32EF40F43C0E79EDA6AC7B771F91A8B8 /* stem_UTF_8_russian.h */, + 5725D6D96EE9EC0FF8A0B778F7176B24 /* stem_UTF_8_spanish.c */, + 360222A40011AB5A8DA35DD84A54216F /* stem_UTF_8_spanish.h */, + CD3E4607B341F6F1EBDE586EC4644331 /* stem_UTF_8_swedish.c */, + 4A1244C144ABC03AEFAA64B27128C9A6 /* stem_UTF_8_swedish.h */, + 68F49BD6F0F4E5884425561E3581F897 /* streamarray.h */, + 75CAE0B5E26F0486A996B7966BA714AF /* TextFragment.cpp */, + 2F28AD8E054731ADD026D8BD44BF4BAC /* TextFragment.h */, + 7B8455F26FEAA601EEF28CBDA0E77EFF /* TokenGroup.cpp */, + 8F46004ECA1F2D53C53D2E135C212E43 /* TokenGroup.h */, + C1CD436E7717178C32D5955442F03411 /* TokenSources.cpp */, + DBB9B86D9AC8B2D22B4DB18F1D024A3C /* TokenSources.h */, + 4AFC58E25E869A576811207B854DDFE5 /* utilities.c */, + 0C77B95D6114FA17E9BD9A701F0FB7B4 /* WeightedTerm.cpp */, + 16435F0F9142ACFF595C4ACE6EE1445D /* WeightedTerm.h */, + ); + name = "CLucene-Contribs-Lib"; + sourceTree = ""; + }; + 997FF1E1330AF95D76491512868F890F /* Support Files */ = { + isa = PBXGroup; + children = ( + 5D84E50D8089BC67C109073E270E062A /* BRCLucene.xcconfig */, + 97EF0E55FA680F66D72A142ABD59682B /* BRCLucene-dummy.m */, + 3752A24D7C023A343E01E77926F6C177 /* BRCLucene-prefix.pch */, + ); + name = "Support Files"; + path = "../Target Support Files/BRCLucene"; + sourceTree = ""; + }; + A763A0DC6A96278FFAF6C7A0B354F4F6 /* Products */ = { + isa = PBXGroup; + children = ( + 92E4AD9C5757E2C8B08D6F95CC34AE9F /* libBRCLucene.a */, + AE0F01A722453D8B7F75C512BA1480F2 /* libBRFullTextSearch.a */, + 27C6ABB018ED82CEA611E303A1932ECD /* libMagicalRecord.a */, + 73F7A0707352461774A523E3F7C49BB2 /* libPods-SampleOSXCocoaPodsProject.a */, + ); + name = Products; + sourceTree = ""; + }; + B18D7C33F979352B4E9F6F35CEAFAB6B /* Support Files */ = { + isa = PBXGroup; + children = ( + D8163D1560FC206887F2227AD953CABE /* BRFullTextSearch.xcconfig */, + 9880008DCA743F94753DE07B8D1820F3 /* BRFullTextSearch-dummy.m */, + FF556D629855725AD2684D8FAAF89959 /* BRFullTextSearch-prefix.pch */, + ); + name = "Support Files"; + path = "SampleOSXCocoaPodsProject/Pods/Target Support Files/BRFullTextSearch"; + sourceTree = ""; + }; + B7CC6B6BF97F3144BCB4B04DB0B23E06 /* MagicalRecord */ = { + isa = PBXGroup; + children = ( + 0E076A8A4E8D43F80ABC3A21A2086FDA /* Core */, + 32E3AE1D7B47810038A3265157848856 /* Support Files */, + ); + name = MagicalRecord; + path = MagicalRecord; + sourceTree = ""; + }; + D648CE86F139C7CCFD55D5B8A03BE74B /* Frameworks */ = { + isa = PBXGroup; + children = ( + 753F211F924CC2C3E256F1F05F47F880 /* OS X */, + ); + name = Frameworks; + sourceTree = ""; + }; + E830A9FEBB6432904EAF2CBBE2A2CBFF /* Targets Support Files */ = { + isa = PBXGroup; + children = ( + 4BDFEA6606450B605141A62AF9DE11E2 /* Pods-SampleOSXCocoaPodsProject */, + ); + name = "Targets Support Files"; + sourceTree = ""; + }; + EF4169F75B4A7733C8D535A67533AB52 /* BRFullTextSearch */ = { + isa = PBXGroup; + children = ( + 6EA925AB9A2DEA540BC1AE0565D1922A /* API */, + 7BF2DCAC53E3A5C59E75E8EBCCD2D6C7 /* Implementation-CLucene */, + B18D7C33F979352B4E9F6F35CEAFAB6B /* Support Files */, + ); + name = BRFullTextSearch; + path = ../..; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + B4D49C45C6BA84337DB4C866756DD7C7 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 7481BF33FB07D3ABB07B4338F7E25E3C /* BRFullTextSearch.h in Headers */, + 61A69FB1EB8014BCEDC40C23F3794F32 /* BRIndexable.h in Headers */, + B002B4015C2BCC87813CBCA38DD72382 /* BRIndexUpdateContext.h in Headers */, + FEA60FB7B8E8AE464C0EC59BFDF3531E /* BRNoLockFactory.h in Headers */, + CB99C32EAC5F1F7B5401D460631AB9F3 /* BRSearchFields.h in Headers */, + E79C3EFD9F1647A3ED9ECE5E0567F3CE /* BRSearchResult.h in Headers */, + E1CB05C7794F4481D52F0206A7D85D6B /* BRSearchResults.h in Headers */, + C533BDF6EDB32FC96B766ACB6774C132 /* BRSearchService.h in Headers */, + 8C76B8026A10086EABB6C8E901B36E14 /* BRSimpleIndexable.h in Headers */, + B0C4755773CC745E2EED5118FBD48004 /* BRSimpleSortDescriptor.h in Headers */, + 26CE27EFFDDA2CD0C26DBA7606D9ABD7 /* BRSnowballAnalyzer.h in Headers */, + 79C664D313F155EA90C041DF841C40D3 /* BRSortDescriptor.h in Headers */, + 06344CA8BBB42F543AD461DEDEEB36A4 /* CLuceneIndexUpdateContext.h in Headers */, + 6AA8C0FCA37ABBDCF5990255BFDE6F85 /* CLuceneSearchResult.h in Headers */, + 78CD145B06E6FE2C7A1DFE4880F49056 /* CLuceneSearchResults.h in Headers */, + 0D6E6A5FA56C3B9E93C763FA38E75162 /* CLuceneSearchService+Subclassing.h in Headers */, + 748705380627BC2F3CA5843382EBB053 /* CLuceneSearchService.h in Headers */, + A8FDEF9A60E07B7BD3C391400EB79706 /* NSData+CLuceneAdditions.h in Headers */, + 4CC9BF88B44C36EB6F6C69CFDB3B082D /* NSDate+BRFullTextSearchAdditions.h in Headers */, + D9C68EC08B56296EF7EA719D16ABA8AE /* NSDateComponents+BRFullTextSearchAdditions.h in Headers */, + 6C9340CCDBB60B132FA3919AAE76F5A0 /* NSExpression+CLuceneAdditions.h in Headers */, + 9D0421CC65BBF70F58C64ADD62786F61 /* NSString+CLuceneAdditions.h in Headers */, + C91D979F20DF64122F417449969BFEF3 /* NSTimeZone+BRFullTextSearchAdditions.h in Headers */, + 9856306AC8941513E030B8CE5954B9B9 /* SnowballPrefixFilter.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + DF19004B94E7D3F6C5D63126E629BE95 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + C2910AA700F2094761CD35F7F8EC425F /* CoreData+MagicalRecord.h in Headers */, + 56923FA358A873089D10CC32AA37DFB3 /* MagicalImportFunctions.h in Headers */, + C0820183D7CC3714B761EA2911E9CEBC /* MagicalRecord+Actions.h in Headers */, + 02B1D2A86C72C8FA393AC8835D537DC6 /* MagicalRecord+ErrorHandling.h in Headers */, + 9BE8572834B5219D1CEE0FDD3C46E224 /* MagicalRecord+iCloud.h in Headers */, + 52D44D3137F767575A4FC82442D3B43A /* MagicalRecord+Options.h in Headers */, + B36D7F6CCE6C70ABE02CB03365DE6DB3 /* MagicalRecord+Setup.h in Headers */, + D7F2FA020E9B6D8671AAADD6A7C28036 /* MagicalRecord+ShorthandSupport.h in Headers */, + 939BAF39FDB896231CEA12C55E5CD363 /* MagicalRecord.h in Headers */, + 1C388F570143C03BDC8C3647F46F78B2 /* MagicalRecordShorthand.h in Headers */, + 6B11390FF42A53DB2A6F7ACB0AF934F7 /* NSAttributeDescription+MagicalDataImport.h in Headers */, + C19D55AD3B8ACF1E6DEEDB8FC93CADE9 /* NSEntityDescription+MagicalDataImport.h in Headers */, + F8774A4C2B8617F83B7EDBB54E238AC7 /* NSManagedObject+MagicalAggregation.h in Headers */, + 8C93AE5A2AF75D46C792078757E97B82 /* NSManagedObject+MagicalDataImport.h in Headers */, + 03BFFE3995C7B0EC57F5E1C4FB79195A /* NSManagedObject+MagicalFinders.h in Headers */, + 9A0BD7C77673925E991490ACF686B5EA /* NSManagedObject+MagicalRecord.h in Headers */, + 70BC1FD77EAD039C8AF57A2808EA11BA /* NSManagedObject+MagicalRequests.h in Headers */, + 3327670C284648035643680DDF4E87B2 /* NSManagedObjectContext+MagicalObserving.h in Headers */, + 2F4D4E3F55CFE3AFA857FC2288DA3610 /* NSManagedObjectContext+MagicalRecord.h in Headers */, + DDAC2C5046966E40BC725E8899079933 /* NSManagedObjectContext+MagicalSaves.h in Headers */, + E12816FB7CDC01D4ED3A0033DA57355D /* NSManagedObjectContext+MagicalThreading.h in Headers */, + A1740CC0EFB72E4A78AB7D06977D9B3B /* NSManagedObjectModel+MagicalRecord.h in Headers */, + 3AE90EF3604B6D6D5A47452988072B45 /* NSNumber+MagicalDataImport.h in Headers */, + 23993CD5F57B5422A8E05F1B87F56A04 /* NSObject+MagicalDataImport.h in Headers */, + 7E2D789698538799CEC6A44E6980A340 /* NSPersistentStore+MagicalRecord.h in Headers */, + 4E765A9F5663EE7F87EE55BC55C5674D /* NSPersistentStoreCoordinator+MagicalRecord.h in Headers */, + 6EC08F910B08F7A049C607FA2F9A2488 /* NSRelationshipDescription+MagicalDataImport.h in Headers */, + 798E738774A460B06C87AC87C0250A59 /* NSString+MagicalDataImport.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F0064D29152FDD57C6A77239B795745E /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 6A5D2D8074A07A88E780D7A84EEA502B /* _ApiHeader.h in Headers */, + EDE9DC6F8EB429FA568088125E5D527C /* _Arrays.h in Headers */, + 337ADC790C55A6AD28124A4AC4F78CC3 /* _BooleanScorer.h in Headers */, + DE8361E570A0C29C54A543A1DF43FB84 /* _BooleanScorer2.h in Headers */, + 2EA2A17DAB0049DBC001225DA0F0E419 /* _bufferedstream.h in Headers */, + 80612518EB3A100CE9EF5697DB2FF33E /* _CharStream.h in Headers */, + D0898BEBA69DB7B0106686068D87638E /* _clucene-config.h in Headers */, + 2F0AB48EBA7A7A92BD4571B4597ECA9E /* _CompoundFile.h in Headers */, + A0C9A5A9B4B2733B316A3CC27E2F1F6E /* _condition.h in Headers */, + 0832CF9BEF082E6F997C721D97C0606F /* _ConjunctionScorer.h in Headers */, + A450663B14BBE99A8AA8177A68F708B3 /* _dirent.h in Headers */, + B04AF3661DB41CB355DBE580C24A5DAD /* _DisjunctionSumScorer.h in Headers */, + AF6E2A6A52AC7287A9C2F176FA18EF87 /* _DocumentsWriter.h in Headers */, + 8585FF2C51F5B22C09CC80919851A5E8 /* _EmptySpans.h in Headers */, + 796DA1F510832784073A636F2DBCAFFE /* _ExactPhraseScorer.h in Headers */, + 424E61630665323E202697E7FC67E7FA /* _FastCharStream.h in Headers */, + 44C1982C502C2CCA55081400119DECC8 /* _FastCharStream.h in Headers */, + AE526B5E227F0B276DFD8F2B75A1D5A7 /* _FieldCacheImpl.h in Headers */, + B3F154A93738DA4A1044F4CF99B91320 /* _FieldDocSortedHitQueue.h in Headers */, + 3770B0264BAD24157892319278CB22BA /* _FieldInfo.h in Headers */, + 3E416D3B0FA54BBE64DA2194ACFC7EF5 /* _FieldInfos.h in Headers */, + 56AD513F4A2604140DC79EA3274B19A3 /* _FieldsReader.h in Headers */, + 1D58D8D3D11F25096536FB2388502BDE /* _FieldsWriter.h in Headers */, + CCF4F52A0BB88226D0E451821DB328AA /* _gunichartables.h in Headers */, + 06EB97A0321DB357744D7E92DC454C13 /* _HitQueue.h in Headers */, + 0C42AA8A33802DE37A4AB10EE1E5C564 /* _IndexFileDeleter.h in Headers */, + 2C622FD6D51BAF08A780349ED58C1BE1 /* _IndexFileNameFilter.h in Headers */, + 8E03BE59D6B7A4562003C8C3369300AB /* _IndexFileNames.h in Headers */, + 9109B005879B980C0B679390150A7EFA /* _Lock.h in Headers */, + 79D2CF2B299818F07A09504DE656D841 /* _MD5Digester.h in Headers */, + 4DDEE7CA873745D6170F285E8AED04E7 /* _MMapIndexInput.h in Headers */, + 3EAC2353AF9D652FCF6C80033AE5E0E8 /* _MultiSegmentReader.h in Headers */, + 06E506C409AAB57A526A7D6A83D1ABE6 /* _NearSpansOrdered.h in Headers */, + 21C975280AD528D89BCC49D5D0ED06D9 /* _NearSpansUnordered.h in Headers */, + 5343CE93A43FE4073E1373DE33E9A2A6 /* _PhrasePositions.h in Headers */, + 513A134029511625F1E8AA04FE7A5DB9 /* _PhraseQueue.h in Headers */, + C2FAC60F4399B0386FC5A07EE0236877 /* _PhraseScorer.h in Headers */, + EAFD011380356AC9959C024E445BD6BF /* _RAMDirectory.h in Headers */, + 8653C2FCD8FDFFB5CC41F52B2F2C3BA1 /* _SegmentHeader.h in Headers */, + 5A8628EF2C09E5CDFACFC3692A89068E /* _SegmentInfos.h in Headers */, + 690AA66D51ED34855E4C859860E76D06 /* _SegmentMergeInfo.h in Headers */, + B9E89EE665E6845EA269E6574B8B33D2 /* _SegmentMergeQueue.h in Headers */, + ABCE3BD5D28A41B80BCA0738A17AA5E1 /* _SegmentMerger.h in Headers */, + 9E313A7869B29BDDCDA0DAE17593868E /* _SegmentTermEnum.h in Headers */, + DD4F190F75C58FA81CCD24F27907DE06 /* _SharedHeader.h in Headers */, + EDE6F751DCE0F5F19B6C939502E1E824 /* _SkipListReader.h in Headers */, + 35C38181AAAC72CEA1F97482B246C25D /* _SkipListWriter.h in Headers */, + 95D775726FE2E5C6255D2371DBD34470 /* _SloppyPhraseScorer.h in Headers */, + D8E1FFBF6A8C4DD45AE1E99BA1AFF201 /* _streambase.h in Headers */, + 2F008CE3A9BAC4270A21695B4491A271 /* _streambuffer.h in Headers */, + E6B5AFB97B9CD139F993AC50580535EB /* _StringIntern.h in Headers */, + 31AFC742D17903ED8100CE20299AA56B /* _Term.h in Headers */, + 903AA1120B4366C1C0B74B42ED6C020D /* _TermInfo.h in Headers */, + CFCCF14B4E2CF0FF95669EFA2ECBAD7C /* _TermInfosReader.h in Headers */, + 61FFC154E44131C07424328F7BEB925B /* _TermInfosWriter.h in Headers */, + 127D27BF93F21C11422887BB10578786 /* _TermScorer.h in Headers */, + 76555D68DD628FBB587CBF51C4E4A1C3 /* _TermSpans.h in Headers */, + 0D131A208A1155E4DF85A6B1DA4D5805 /* _TermVector.h in Headers */, + D30F68D21CCB7DDBDB5195C10F35B8D3 /* _ThreadLocal.h in Headers */, + A87AE369EE39E7E9D144A69219CC4EB2 /* _threads.h in Headers */, + 831C1D903C3FF5C52CD680BD4AE7DAD1 /* _VoidList.h in Headers */, + E02920313DAC0FC98CBF94AA3AF6061B /* _VoidMap.h in Headers */, + 23FECE4A3B730F533C4E434ADF4A6385 /* AnalysisHeader.h in Headers */, + 6CD79B06C87AB6F2B3200F77926FB266 /* Analyzers.h in Headers */, + 91DE1937A0E2B9046E7B434A6A316DBD /* api.h in Headers */, + 825818C2D3A6F72B2DEBC4149DEE6E92 /* Array.h in Headers */, + 05555D82773D517BDBF88D4ED5211115 /* arrayinputstream.h in Headers */, + B7DFA1E531D671888E38C2322F48FF95 /* BitSet.h in Headers */, + A236F209D85B4A4EF0D168E81FC43886 /* BooleanClause.h in Headers */, + 48CC111F1F1C2ED2B3E0A1D4A058C44E /* BooleanQuery.h in Headers */, + 9964BBA279E776960C03CCF4F2707D93 /* byteinputstream.h in Headers */, + 678E49E08E3450A7F7F33791BA70BC99 /* CachingSpanFilter.h in Headers */, + D1EB05397F0D2EF6B3E9A2A479A5B6F1 /* CachingTokenFilter.h in Headers */, + 3DD1DCCDD3C1AF8AAED7E3DE3435C7D5 /* CachingWrapperFilter.h in Headers */, + 25D05A91C56713A9F796C03831460D4E /* ChainedFilter.h in Headers */, + 5CF729CE04C90D0D3F22522A4912F046 /* CJKAnalyzer.h in Headers */, + 56FC23F03630942C31F95EC762C8154E /* CLConfig.h in Headers */, + 1784E1C2D56211F69B01CE36FB9F5C61 /* CLStreams.h in Headers */, + E6ECAEA9D98CCB2A60F397933F60ECD0 /* clucene-config.h in Headers */, + 6CF3C47160A09087A0E943558A3F0D2F /* CLucene.h in Headers */, + A7B4CA21280B630C5771EEF71805086B /* Compare.h in Headers */, + C18727E3BA2B1CD7C03A244B0C48BDDC /* ConstantScoreQuery.h in Headers */, + 9006533459DA3AA32A73E9A39C2E4DC2 /* DateField.h in Headers */, + 03190501F41177341DC1DB07942AE606 /* DateFilter.h in Headers */, + 12B69C0867E9DC51A1302D4E10CC5AB9 /* DateTools.h in Headers */, + C8E9A30DA16610B15890E3CB7FA47B69 /* Directory.h in Headers */, + 6140C31A7F82A47614FE9E41E04C33F0 /* DirectoryIndexReader.h in Headers */, + 9F5716B838A289F8B99E9128E63D5516 /* Document.h in Headers */, + 007B3C27391267A0BF4D675147B42701 /* Encoder.h in Headers */, + 56905957E03248D151F8594749C4EB7E /* Equators.h in Headers */, + 8B2D2F255CAF1AD2406EE1C38B865CD2 /* error.h in Headers */, + C073101796AE6E00E7733CE8D64916CC /* Explanation.h in Headers */, + D8EB2368A0585647121ED38FDFD89ECD /* Field.h in Headers */, + 29A53FE475C8A506FA5C914BC43C20A0 /* FieldCache.h in Headers */, + 6B2174B5CA8EAD3CD2396D9515B7927B /* FieldDoc.h in Headers */, + 875495275097EA71B7ECE7FCBA0BEAB6 /* FieldSelector.h in Headers */, + EBD800166232121AEB27A2C0031EA9FC /* FieldSortedHitQueue.h in Headers */, + EB8604E3C9E8FB60AF26F96529DD2759 /* Filter.h in Headers */, + 9E55D87B02C5319311F04708D78CFAFD /* FilteredTermEnum.h in Headers */, + A46D9149C4A989E5358C2CD7B2436747 /* Formatter.h in Headers */, + E0C07F881E61B764BD54216F0199C850 /* Fragmenter.h in Headers */, + 3FFA4CC7EE376A12699FEACE8CF8D5CB /* FSDirectory.h in Headers */, + 6DFA7913EE5899EBCFF362AFC9365E78 /* FuzzyQuery.h in Headers */, + CFE8C324BD4FBAA8AC6CB177AEDE21B3 /* GermanAnalyzer.h in Headers */, + 6CCE01C9C1F83B6A5111DA8D348A929B /* GermanStemFilter.h in Headers */, + 00DEA8D22FE26F6B7492DF0E51044881 /* GermanStemmer.h in Headers */, + E6376FBA4FF7B840B94A893845EB621F /* gzipcompressstream.h in Headers */, + 95F8B2FBE5D2950D7160256D497812C9 /* gzipinputstream.h in Headers */, + 01AE8392284015BBDE786A98BE9E4F2F /* header.h in Headers */, + 195882909AEC47393C1C4F6E023D9855 /* Highlighter.h in Headers */, + EEA8A6632E160A847D9CFAF41BDE95CC /* HighlightScorer.h in Headers */, + 836BCDD78BFF155E61502556B8C5D1F2 /* Hits.h in Headers */, + CD054801D600974FE9EEFD01CCB243E0 /* IndexDeletionPolicy.h in Headers */, + 2EBA4EFA45981161EF1FEDABFA36A203 /* IndexInput.h in Headers */, + 553926BA6E1A81D95AC6181EFDCF3068 /* IndexModifier.h in Headers */, + 44E33DE45867FC84A6968DC70479498B /* IndexOutput.h in Headers */, + EE45C46C824712B38DCF972D7765E904 /* IndexReader.h in Headers */, + 286D07F932EF4F97D1E40BEBD0C1FD08 /* IndexSearcher.h in Headers */, + B0E427ACD8C548C0BB705B66EC3B2366 /* IndexWriter.h in Headers */, + D8AF63A4D49F0385BAF024C16787E609 /* LanguageBasedAnalyzer.h in Headers */, + 7060FBAE06B1AD22FFFBE20385CDF6AC /* libstemmer.h in Headers */, + C3682F681D4387173200722EC21B43DB /* libstemmer.h in Headers */, + A2E21C070D4A2AE37F46A59B0D968D82 /* Lock.h in Headers */, + F73848FBE5344DF273993A482A4C3C92 /* LockFactory.h in Headers */, + A63A08F0D29CF7163AD7F4FCD94145AA /* lucenebase.h in Headers */, + DBDE932082A5EF046ACFC4B98115A89E /* LuceneThreads.h in Headers */, + 0E4F78AF00B811F64FD4DE01A7B1A634 /* MatchAllDocsQuery.h in Headers */, + 0DD7E94346715D9C3FA85D9367073F9F /* mem.h in Headers */, + 1775A2D8ECCFBCE94BB95A36961EDFBD /* MergePolicy.h in Headers */, + 208A9A89503F90986AC1746FBBD8F21F /* MergeScheduler.h in Headers */, + E28986A4E9F544F6655F26530108BD9C /* Misc.h in Headers */, + 58F8335461127F088FB84E78210696B3 /* modules.h in Headers */, + 3351EB184572BB617218D5731BFE2435 /* MultiFieldQueryParser.h in Headers */, + 047D5DBF3D6E585710FF29CB09777442 /* MultiPhraseQuery.h in Headers */, + A304ADA5145D895BCD7BF9B7A231F742 /* MultipleTermPositions.h in Headers */, + 23546BE10D1F0650AAD1864D75DA9E71 /* MultiReader.h in Headers */, + 3531095070C639BD09C75D4C952E462C /* MultiSearcher.h in Headers */, + 45C74193350DBD602084AA9FB5690C2A /* MultiTermQuery.h in Headers */, + 664B2A98467FDD668673ADDD7362706F /* NumberTools.h in Headers */, + 596FD4E5F190A03C87AE05FA3698604C /* Payload.h in Headers */, + BC0BB90706926FB3FED62405E035CC48 /* PhraseQuery.h in Headers */, + 6B0A44AB178EA7424B9D82D22E168B3C /* PorterStemmer.h in Headers */, + 7BD4BC6F10A514E35A75239BA911B8CA /* PrefixQuery.h in Headers */, + FE12FA3E5AF23583F0E1752A21170AD4 /* PriorityQueue.h in Headers */, + 91B57B077F7497413687153E6415F30D /* Query.h in Headers */, + EE9519757C0320B4015197A3FE2285BF /* QueryFilter.h in Headers */, + 5BABA737C4D159D0CF23ABF37D7ABD04 /* QueryParser.h in Headers */, + C925B06353971127C7CCAAA58F639A61 /* QueryParserConstants.h in Headers */, + 0BF3B69487D019BD5670A4277A1FA6C2 /* QueryParserTokenManager.h in Headers */, + E843512E4661D34CE51F03AE3606E48C /* QueryScorer.h in Headers */, + 25776DADBADFB9D9DB2D00F9800A33C3 /* QueryTermExtractor.h in Headers */, + 10623EB3856A2F41F40BC3BA7C3EE87C /* QueryToken.h in Headers */, + CE0BB13AE218591F35131722BC91DF0C /* RAMDirectory.h in Headers */, + D7201100C65CF5ACCC5A4EDE7299DE87 /* RangeFilter.h in Headers */, + 260A75E9A8EEFF33C9C6842655E52452 /* RangeQuery.h in Headers */, + 76B3190190555F724C36ADD8EE560CB5 /* Reader.h in Headers */, + 753642D9B19D7EE1880D1ABB8A5B4B27 /* repl_tchar.h in Headers */, + 9955786AFA9B3A4A22C873215A2AFEC4 /* repl_wchar.h in Headers */, + 934A72ED556B9FB1167DF7299EE99802 /* repl_wctype.h in Headers */, + DDC1BACD92DD9E29CDC2E631B38474A1 /* Scorer.h in Headers */, + 8B8DCCFA7271F8415E560FC166F7D7FC /* Scorer.h in Headers */, + 03130C0D6DD4D360F617F2F1C7AA91F8 /* ScorerDocQueue.h in Headers */, + 16B9333D6419624228DE32B61047E8D1 /* Searchable.h in Headers */, + 4C533A6972FAC277DE596B8D54CF92AF /* SearchHeader.h in Headers */, + E06DA7981702F4D81CC26D269D167787 /* SharedHeader.h in Headers */, + D2989C2D95D1CBCF9505C8C71B7D4528 /* Similarity.h in Headers */, + 11436A4FDA42508DA793F01481851543 /* SimpleFragmenter.h in Headers */, + DFDEA8A052DABBBE75F4F76F9B03435A /* SimpleHTMLEncoder.h in Headers */, + 78E8E2CA4689EB58791782888E20EED5 /* SimpleHTMLFormatter.h in Headers */, + 68AEEA243AEB450D18B4287CEF097746 /* SnowballAnalyzer.h in Headers */, + 2864ECC5D20ADBF01EC53AD5F7326F95 /* SnowballFilter.h in Headers */, + 6E5D6E550D8B0E9F19E996819DDBC29D /* Sort.h in Headers */, + A5FC27C715A7C20F433DA02C5BB1D4F6 /* SpanFilter.h in Headers */, + 18DB8071A7EB223F7178F70421296234 /* SpanFilterResult.h in Headers */, + 35ADDDB338F0D4B6DF8AB2D2AA63FE6E /* SpanFirstQuery.h in Headers */, + 560650E4E7A1AD672076EB2B4E7C76F7 /* SpanNearQuery.h in Headers */, + 7AED120CCE063DFA72DC017F85A44BDB /* SpanNotQuery.h in Headers */, + 16092B157A392029C9CDD6010809051B /* SpanOrQuery.h in Headers */, + 2D6A2E5102D7AE368A7E753962D635E1 /* SpanQuery.h in Headers */, + 9A17AD07894072407DB326DC64872599 /* SpanQueryFilter.h in Headers */, + 80B0934755900D4CAA4A8DAC6CA59819 /* Spans.h in Headers */, + 644EF9A9157B32E49A57950EED3390AA /* SpanScorer.h in Headers */, + 5D124D40B65793E7018241EB2C1ACBBD /* SpanTermQuery.h in Headers */, + 9B64EA505522D0D8C7FE072CCBE72FE8 /* SpanWeight.h in Headers */, + 23B3066C353078FF32D4DC1478FFE8D9 /* StandardAnalyzer.h in Headers */, + D49929F6802F31AF81E2CF67EDF3E98C /* StandardFilter.h in Headers */, + 0E08E7E1E4953E1D161912ECC7D5EC10 /* StandardTokenizer.h in Headers */, + D36305E396ACBF7C796A7F2FCAAABD92 /* StandardTokenizerConstants.h in Headers */, + 82E20FE6537812FDCB52A8BC37C5B009 /* StdHeader.h in Headers */, + B5BE0DCA790B9BC4936AA76743E76B52 /* stem_ISO_8859_1_danish.h in Headers */, + 244312AA50A42395A7D5A23F3F633629 /* stem_ISO_8859_1_dutch.h in Headers */, + 8199CBBB9A36EA793C45130E82EDB369 /* stem_ISO_8859_1_english.h in Headers */, + D0DAD40128D6D41B32D2C07C434EFD02 /* stem_ISO_8859_1_finnish.h in Headers */, + 21BB1E81621F3142E84ACEB07A6740F4 /* stem_ISO_8859_1_french.h in Headers */, + 6822FF26E8DE7903AAD477564F577E45 /* stem_ISO_8859_1_german.h in Headers */, + 052359B893D267DF58ECB49740664A20 /* stem_ISO_8859_1_italian.h in Headers */, + 359084ECE8EE4F5706475961F6F02D48 /* stem_ISO_8859_1_norwegian.h in Headers */, + 47AC9F1139C900B31A47C7283CC381EB /* stem_ISO_8859_1_porter.h in Headers */, + 44F5727CAE9ADFB52477FC3C3A4CB18E /* stem_ISO_8859_1_portuguese.h in Headers */, + 3AED6CC5166ED32D89B5265D56E862B3 /* stem_ISO_8859_1_spanish.h in Headers */, + A331F34CC97FA9F4B851F2A7E4185DB5 /* stem_ISO_8859_1_swedish.h in Headers */, + D430EEDCAD9E7403CFA95D1BD7C8AE26 /* stem_KOI8_R_russian.h in Headers */, + BFB52EF9526C718761A07CA33D289780 /* stem_UTF_8_danish.h in Headers */, + 93A9AF828F4D2C4CF9935809A9347B6B /* stem_UTF_8_dutch.h in Headers */, + 4AD69C358EF12ECC65620D3911BF0B8F /* stem_UTF_8_english.h in Headers */, + 7431A01AAE49BA85BB9F38F9F1AFA054 /* stem_UTF_8_finnish.h in Headers */, + 8AE6102177165AD7B40978E1FFD5D9AD /* stem_UTF_8_french.h in Headers */, + B3DB3B3901850939E40E506F22B96DF5 /* stem_UTF_8_german.h in Headers */, + 78A027634A453D9350BC95E9CA0ED35F /* stem_UTF_8_italian.h in Headers */, + 50184144271732DCE25DC5943E914864 /* stem_UTF_8_norwegian.h in Headers */, + C00FBC6B73BD0B93E1E2CDD755EE69A6 /* stem_UTF_8_porter.h in Headers */, + AAB28301D20ADD7A6D615FC68B2E6720 /* stem_UTF_8_portuguese.h in Headers */, + D48DE943DB94D346C9F068D87DA5932B /* stem_UTF_8_russian.h in Headers */, + 548B5918F6A69916FD6D39FD3B10514C /* stem_UTF_8_spanish.h in Headers */, + FD1023095FCA71BBB8A7A348BEAEAD1B /* stem_UTF_8_swedish.h in Headers */, + CABEC8A3BE804A223D16196D8602BC9E /* streamarray.h in Headers */, + C208F1315702F817558C5E5DFD9973D9 /* StringBuffer.h in Headers */, + E2527ECE673891B976CE95F4C1BDF1CE /* Term.h in Headers */, + 4F52A99D209115F594D725504F10164A /* TermQuery.h in Headers */, + 330110121FA6EF62A4ED5DAA95349A23 /* Terms.h in Headers */, + C4DD13836FF91F2AD8A727BBD3315D17 /* TermVector.h in Headers */, + 519685565F75C8FCB1F8CE5578859D2B /* TextFragment.h in Headers */, + 9AF65419EA8C01534FE6D0EAF347E2CB /* TokenGroup.h in Headers */, + 3567E8CAA43645D6788FB2A313FC3812 /* TokenSources.h in Headers */, + 16F4592B2E8EF7AC5BC848C2114D92E8 /* VoidList.h in Headers */, + 7BAEB249F54301270B86BD68765917E4 /* VoidMap.h in Headers */, + E642FC7859914BE633A028475AD854C3 /* WeightedTerm.h in Headers */, + 80FAF54DCBF0794054B5F258D5873020 /* WildcardQuery.h in Headers */, + A688732C6072724D7CF8BB1F5D21FD7D /* WildcardTermEnum.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + 06DEBB94272E82F0F83BDCD9504D28C6 /* Pods-SampleOSXCocoaPodsProject */ = { + isa = PBXNativeTarget; + buildConfigurationList = 4B262AA401F99483F3F993E045F5BA42 /* Build configuration list for PBXNativeTarget "Pods-SampleOSXCocoaPodsProject" */; + buildPhases = ( + 451D5CDC3C6868D26EE17E39B4862231 /* Sources */, + 6278D2E557A32D540983D6D3C03405C1 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + E563A5BF176BFA0416F7244C6F0CA9FC /* PBXTargetDependency */, + A0E7F4BD4C449579A073CDBC07AF1CFC /* PBXTargetDependency */, + AB1DB4BD0B0AF0157045D2911D9626D3 /* PBXTargetDependency */, + ); + name = "Pods-SampleOSXCocoaPodsProject"; + productName = "Pods-SampleOSXCocoaPodsProject"; + productReference = 73F7A0707352461774A523E3F7C49BB2 /* libPods-SampleOSXCocoaPodsProject.a */; + productType = "com.apple.product-type.library.static"; + }; + 44043489BB712FEE61998C3EADF6004E /* MagicalRecord */ = { + isa = PBXNativeTarget; + buildConfigurationList = A198A148CBE1BE9BC13AE3C7344B9050 /* Build configuration list for PBXNativeTarget "MagicalRecord" */; + buildPhases = ( + 132DFFC9916869CF2EDBD3390B95CCFB /* Sources */, + 3C889C614A752E5130728017572D3CD8 /* Frameworks */, + DF19004B94E7D3F6C5D63126E629BE95 /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = MagicalRecord; + productName = MagicalRecord; + productReference = 27C6ABB018ED82CEA611E303A1932ECD /* libMagicalRecord.a */; + productType = "com.apple.product-type.library.static"; + }; + BFB7466E5AAE0E3B0F9D78A3DF79C1C2 /* BRCLucene */ = { + isa = PBXNativeTarget; + buildConfigurationList = 7E15973B024589F3B44923E8BD55B71B /* Build configuration list for PBXNativeTarget "BRCLucene" */; + buildPhases = ( + D00DA56FB2E228874A7C79BACE0BFCC2 /* Sources */, + B962DCAB9431B27B91BBE2A20C8C8106 /* Frameworks */, + F0064D29152FDD57C6A77239B795745E /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = BRCLucene; + productName = BRCLucene; + productReference = 92E4AD9C5757E2C8B08D6F95CC34AE9F /* libBRCLucene.a */; + productType = "com.apple.product-type.library.static"; + }; + EC4FD212AB4972975789333E27148F2B /* BRFullTextSearch */ = { + isa = PBXNativeTarget; + buildConfigurationList = 2B91166510634199EC0554B08C081E1E /* Build configuration list for PBXNativeTarget "BRFullTextSearch" */; + buildPhases = ( + 631F0F240DF8D0540C2F7CCEA3AF4CCB /* Sources */, + 21AA7D17ECCC9AFDE4A6FF49639153F0 /* Frameworks */, + B4D49C45C6BA84337DB4C866756DD7C7 /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + EB53999A73C408CE9B318A294933CEFD /* PBXTargetDependency */, + ); + name = BRFullTextSearch; + productName = BRFullTextSearch; + productReference = AE0F01A722453D8B7F75C512BA1480F2 /* libBRFullTextSearch.a */; + productType = "com.apple.product-type.library.static"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + D41D8CD98F00B204E9800998ECF8427E /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 0730; + LastUpgradeCheck = 0700; + }; + buildConfigurationList = 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = 7DB346D0F39D3F0E887471402A8071AB; + productRefGroup = A763A0DC6A96278FFAF6C7A0B354F4F6 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + BFB7466E5AAE0E3B0F9D78A3DF79C1C2 /* BRCLucene */, + EC4FD212AB4972975789333E27148F2B /* BRFullTextSearch */, + 44043489BB712FEE61998C3EADF6004E /* MagicalRecord */, + 06DEBB94272E82F0F83BDCD9504D28C6 /* Pods-SampleOSXCocoaPodsProject */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXSourcesBuildPhase section */ + 132DFFC9916869CF2EDBD3390B95CCFB /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + A04388FBC3A3FB8B3759D09C129F11FD /* MagicalImportFunctions.m in Sources */, + B021B5E90C334F46B2D43828DE552C22 /* MagicalRecord+Actions.m in Sources */, + AAD0CE25BFBF96255F11F6339667D1F6 /* MagicalRecord+ErrorHandling.m in Sources */, + A928D1128883D0481ACF0C4364FA11EC /* MagicalRecord+iCloud.m in Sources */, + FFBCDBE6D250967FE939C71656986385 /* MagicalRecord+Options.m in Sources */, + 675842A2C42ADCAB8026064445D84574 /* MagicalRecord+Setup.m in Sources */, + 3DA0379E4400A5B894D1AF87E93741BD /* MagicalRecord+ShorthandSupport.m in Sources */, + E5233B31B651C93C5788B1D3DFD289CD /* MagicalRecord-dummy.m in Sources */, + 8D19D45C1DB55DE66D8674E935EA2D0C /* MagicalRecord.m in Sources */, + 0A88C20B264A89F596CB092417677B78 /* NSAttributeDescription+MagicalDataImport.m in Sources */, + F288FFFFDF445721C4F9B253A588C5BC /* NSEntityDescription+MagicalDataImport.m in Sources */, + CEC3E7397A1946EF6F3AC532F43D6534 /* NSManagedObject+MagicalAggregation.m in Sources */, + BF9C2326B242CBEBA265BDF91A08E5B5 /* NSManagedObject+MagicalDataImport.m in Sources */, + DC492E17E440BAAC39A256E822D6FD15 /* NSManagedObject+MagicalFinders.m in Sources */, + 30F309E0122C97F6A115D3EADC12E851 /* NSManagedObject+MagicalRecord.m in Sources */, + 7AD6DC943A6B8EB54CAB745217744DD9 /* NSManagedObject+MagicalRequests.m in Sources */, + 2AB96AAEAD3361F559FE970C8B2EED18 /* NSManagedObjectContext+MagicalObserving.m in Sources */, + 2CEFF872341401D75FEB43047FD4D498 /* NSManagedObjectContext+MagicalRecord.m in Sources */, + 7AB148C52EB50831E13481B1591DC120 /* NSManagedObjectContext+MagicalSaves.m in Sources */, + 61DF19B0C845F98C0BA25ECDF14103E3 /* NSManagedObjectContext+MagicalThreading.m in Sources */, + 02BA5DE994DE47EB90F669BF7BB890E8 /* NSManagedObjectModel+MagicalRecord.m in Sources */, + 4F71B4A284906FACAD8D2FF0D14ABE36 /* NSNumber+MagicalDataImport.m in Sources */, + 26B4554B5DAB6CAA10BA87CFC1A50F84 /* NSObject+MagicalDataImport.m in Sources */, + 32F08A05679CD1A1C61EF7059C09BF4A /* NSPersistentStore+MagicalRecord.m in Sources */, + ABFAED04D65906E77982568578F35353 /* NSPersistentStoreCoordinator+MagicalRecord.m in Sources */, + 7121157A31BA8E022F1AD3F7D11CA249 /* NSRelationshipDescription+MagicalDataImport.m in Sources */, + 04292DDE1B87EA5CA41C8183BDD2FFC8 /* NSString+MagicalDataImport.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 451D5CDC3C6868D26EE17E39B4862231 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + CD9C5CA556185EF1A0706026FF0FB8AA /* Pods-SampleOSXCocoaPodsProject-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 631F0F240DF8D0540C2F7CCEA3AF4CCB /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 0BDCB654EB224C32B02C69B48ECBD602 /* BRFullTextSearch-dummy.m in Sources */, + F5606D98D0147CAAE5293127FC2BCE9C /* BRNoLockFactory.cpp in Sources */, + 3D797668BBF7C2D77C8F310682E89328 /* BRSearchFields.m in Sources */, + 13333401D8A36B59DD796AD03EA71E7B /* BRSearchService.m in Sources */, + FB2A50B8E7145454F686D61F3A04CC7E /* BRSimpleIndexable.m in Sources */, + 3974F454EC1ADA04E4DEF8990EB58984 /* BRSimpleSortDescriptor.m in Sources */, + 8F5FC39BF411ED133209E51D4B3AE504 /* BRSnowballAnalyzer.cpp in Sources */, + 68EA7ACE9C44FE56391A35BDD21800C9 /* CLuceneIndexUpdateContext.mm in Sources */, + 3FE096322AFF99EE5656E04AA7AC3C98 /* CLuceneSearchResult.mm in Sources */, + A719FBAF0935EA34340661601E25FFA3 /* CLuceneSearchResults.mm in Sources */, + 44759760E2F3A593D44DFCD462093E60 /* CLuceneSearchService.mm in Sources */, + 7BE15E6146E74BA252A503FA1DAB44DF /* NSData+CLuceneAdditions.mm in Sources */, + 139CD3AE779157B1574A949175CBE868 /* NSDate+BRFullTextSearchAdditions.m in Sources */, + 5C341ADDBB09F7741BC1660438B36DD8 /* NSDateComponents+BRFullTextSearchAdditions.m in Sources */, + 1CECE5C7EE5C83D027AD9002CC1E9EEE /* NSExpression+CLuceneAdditions.mm in Sources */, + 7DC3649A5DBBA982320E58D1FAD649A3 /* NSString+CLuceneAdditions.mm in Sources */, + 76E6015B040106FCA4186F55099CE988 /* NSTimeZone+BRFullTextSearchAdditions.m in Sources */, + 78E26F04B81F5AA0AD900D24207A80B7 /* SnowballPrefixFilter.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + D00DA56FB2E228874A7C79BACE0BFCC2 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 78C73AE6ED2BBB58A162DC972E2583A7 /* AnalysisHeader.cpp in Sources */, + B07011035F1F22AAC86EEA04EE8C71C5 /* Analyzers.cpp in Sources */, + 669BA7D6C0D31278D59B175F01CCB43A /* api.c in Sources */, + 355C485994C2E2CAEB1FB887F6707A93 /* BitSet.cpp in Sources */, + AD5624BE0257ACE664F3A4F75BDF70AA /* BooleanQuery.cpp in Sources */, + 7C0A442CAA97E14280485625AE581BF3 /* BooleanScorer.cpp in Sources */, + 8D411EE65464670B1F4DE8920492BAB3 /* BooleanScorer2.cpp in Sources */, + 7AD88818005DC71F4A872148FEBC8C92 /* BRCLucene-dummy.m in Sources */, + BF6B9AB2DD7DFE750E9F2FF2B90D266C /* CachingSpanFilter.cpp in Sources */, + 30ABDC8FBD69FA2DCF5C697CECB5B6AF /* CachingTokenFilter.cpp in Sources */, + DD606150DF29B46678ADE8F5EABB7B25 /* CachingWrapperFilter.cpp in Sources */, + ACD77711CC7C373AC8FB1D1406FCA014 /* ChainedFilter.cpp in Sources */, + 68D7D82E4D70B22DD4DED95724E22CC6 /* CJKAnalyzer.cpp in Sources */, + 6D01695B2C99F9E1258F696662ECAE6B /* Compare.cpp in Sources */, + 9AE52FA7C42D2FA188D1085E84E085E5 /* CompoundFile.cpp in Sources */, + 05FE5A0C66FBE776717C6C1F1A03ACD7 /* condition.cpp in Sources */, + 401AFDC1700A4AC4811A6688A1161B97 /* ConjunctionScorer.cpp in Sources */, + 4EE99889782F0CB5D12780211B6ACA9E /* ConstantScoreQuery.cpp in Sources */, + ED0920906E9418FDC79444A7A47EB1A6 /* DateField.cpp in Sources */, + D51F8FE43D459BDDDEDEE2E81CAD784D /* DateFilter.cpp in Sources */, + D0A59169B6AD97A0AF3E606DE17D76ED /* DateTools.cpp in Sources */, + D4B505FA092E73A59B03071FBE3AF70E /* Directory.cpp in Sources */, + CCFEB9B2C361232E71D2A9D62369C761 /* DirectoryIndexReader.cpp in Sources */, + 84FB03B7869AD5DB38435F779C2C0231 /* dirent.cpp in Sources */, + 1E6AA8949FC4CE4F90ADDA37D51EA17B /* DisjunctionSumScorer.cpp in Sources */, + 64DB4499121B09CC1BCFA539695533F2 /* Document.cpp in Sources */, + 75FED859BBBDE87CAFCF393FB481E400 /* DocumentsWriter.cpp in Sources */, + 8F1CC8F044CE61AC67313AB01CCA662E /* DocumentsWriterThreadState.cpp in Sources */, + B14B4F9EE95A5310482E45E62F2254D5 /* Encoder.cpp in Sources */, + 97C559151644F350DB33320F83CB5482 /* Equators.cpp in Sources */, + CF2ACF389B90C826FA30A203DAB58713 /* error.cpp in Sources */, + 1F16DF17727B484A75E814671AA732FB /* ExactPhraseScorer.cpp in Sources */, + 3E9DE9CDED39F24869C4FA2660082E88 /* Explanation.cpp in Sources */, + DAB041079D26ADFCFD368D328C0888FD /* FastCharStream.cpp in Sources */, + 4323062899403A931F4B3BF2E5783AD1 /* FastCharStream.cpp in Sources */, + 210527C3E323FB614BC7EC166E4D1140 /* Field.cpp in Sources */, + 8A2A623C12E157D2286566A485CB7601 /* FieldCache.cpp in Sources */, + 43BAF31476E5B7C447EA6F0DDE84D852 /* FieldCacheImpl.cpp in Sources */, + 22583D62C4F00088ED04ED413C193350 /* FieldDocSortedHitQueue.cpp in Sources */, + F965312823EA2D2F0BE3A71B6A166909 /* FieldInfos.cpp in Sources */, + D306B2CE54F5A7BC62A99F4BE4721F91 /* FieldSelector.cpp in Sources */, + D5E4FE9060AED540BFCB0B612E249A10 /* FieldSortedHitQueue.cpp in Sources */, + 427892A364EA0ED78970ED15B1BA9C2E /* FieldsReader.cpp in Sources */, + 00279AFBB918A360FEFB2EF3C3130E18 /* FieldsWriter.cpp in Sources */, + 61B830BC4DDA7BBA1873399DEE6EB118 /* FilteredTermEnum.cpp in Sources */, + 71899837DAFB98CE5B61C307E422EE41 /* Formatter.cpp in Sources */, + DDC218FDC011744D6E662D8E8723D4D9 /* Fragmenter.cpp in Sources */, + A8DE8F9E07C885AACFDADB922A367AD3 /* FSDirectory.cpp in Sources */, + 14610CB7B1B66CA8897BF0695F292F0D /* FuzzyQuery.cpp in Sources */, + 6AA7585650932B3F2D00F2642B2FF536 /* GermanAnalyzer.cpp in Sources */, + 45B4249136C07638934B3A0AC1E27680 /* GermanStemFilter.cpp in Sources */, + 5264002C9BFD4CD03FE68E562C4FFF89 /* GermanStemmer.cpp in Sources */, + B63A0DF7EBD1567F736B9EC4337F77B7 /* gunichartables.cpp in Sources */, + E136A50AC6EE8A719DEEEBD4B68D193D /* gzipcompressstream.cpp in Sources */, + 6262ACAF625AA6AED14D3E1C8B4C077F /* gzipinputstream.cpp in Sources */, + 2732CE5A8B5E6C0A64993F90BA407646 /* Highlighter.cpp in Sources */, + 32492349C0C89450ECC51A3E33944E57 /* HitQueue.cpp in Sources */, + 5F7BB56FA3031ED827A513EA0B19F421 /* Hits.cpp in Sources */, + E878A872C8B34F9BD3082A8DEA6B9B78 /* IndexDeletionPolicy.cpp in Sources */, + 7A866CA5DB4A01DE3BAF55ACB80231DC /* IndexFileDeleter.cpp in Sources */, + 11FB4EEC948536E0B3EDF406E3D1C6E8 /* IndexFileNameFilter.cpp in Sources */, + 7A5CAF8BBFA261394CF88A397D62097D /* IndexFileNames.cpp in Sources */, + A04A6FD5C1F1DD2BCEFE5F81DDDB2E19 /* IndexInput.cpp in Sources */, + 585B4B654D41D22CE40C20A021EB3611 /* IndexModifier.cpp in Sources */, + 7205B8BE6B01BED4AC1F4E273E969C83 /* IndexOutput.cpp in Sources */, + 7A2677F7941703D008331BA4822BEBAD /* IndexReader.cpp in Sources */, + 454F8CE2F66A48308139B22471635646 /* IndexSearcher.cpp in Sources */, + A5418202190D6BC0A3B111B46E4FC3D8 /* IndexWriter.cpp in Sources */, + A80CFB0C1F3DEA8D5A1CE1A284019D02 /* LanguageBasedAnalyzer.cpp in Sources */, + DAA16AE2A48B05EE19A7E67C448966A2 /* libstemmer.c in Sources */, + 534B7B01BD0A9C5AD1BDC878EC0DC094 /* Lock.cpp in Sources */, + A46C2BF7F7B6F643484DA601D6D23F7E /* LockFactory.cpp in Sources */, + 358BAEA0230CDBD3DD0DF0C062F0C363 /* MatchAllDocsQuery.cpp in Sources */, + 566F4B32E9150CA1A510A38651871C29 /* MD5Digester.cpp in Sources */, + 4B6B0AA34BD6E0867513B434BFAB0BEC /* MergePolicy.cpp in Sources */, + 784C86B690A55F7333CA6EC7E5715A4C /* MergeScheduler.cpp in Sources */, + 2DF5A0804955926466E849F561887C06 /* Misc.cpp in Sources */, + 314DD0A835724370C883EF277A4501A0 /* MMapInput.cpp in Sources */, + AEA5CD614A946B8D0B7FCE707DFB8800 /* MultiFieldQueryParser.cpp in Sources */, + ADD43A1FC4142C32C78FC8C8E7AE1A51 /* MultiPhraseQuery.cpp in Sources */, + 09E77AB13BE2118D20BB7836B346A58C /* MultipleTermPositions.cpp in Sources */, + 919BA3AC1246C9E2B0D83D5605F94A7B /* MultiReader.cpp in Sources */, + 46F200C3B3ABDF53E4AEEB9C3EC53721 /* MultiSearcher.cpp in Sources */, + E45AC9977CAC4F50C60A244CD2F1F1C0 /* MultiSegmentReader.cpp in Sources */, + 6EF509DB03846153903D2AF95F29258A /* MultiTermQuery.cpp in Sources */, + 715CDA7EF9405228C1ECC32B1588A601 /* NearSpansOrdered.cpp in Sources */, + 31F58328CF5E41C3277FFC7FCBBEB489 /* NearSpansUnordered.cpp in Sources */, + 1D21D92DB0EBCCA30899F142E67AF898 /* NumberTools.cpp in Sources */, + FF6D719F6FFC6054C37B1E0780BF3A2F /* Payload.cpp in Sources */, + 8E5DBC5CFEC0DD6F03A6C1E5768043DB /* PhrasePositions.cpp in Sources */, + B2DA9FBFBD8AD3DD2C23207B6EDBD034 /* PhraseQuery.cpp in Sources */, + 1C35C1CCCEDCC48A43BD68D94DC50304 /* PhraseScorer.cpp in Sources */, + 89B05DD3086B9219A1800FF6EAF27167 /* PorterStemmer.cpp in Sources */, + 665F845711E063701C0F7DB8C2463910 /* PrefixQuery.cpp in Sources */, + 4137A893DA13E4286C2EAA7293A99275 /* QueryFilter.cpp in Sources */, + 46D2CB68BBFF59BFAE00CE287C62C293 /* QueryParser.cpp in Sources */, + 9E8D8EB50B3FBC2E5443F86B5962C760 /* QueryParserTokenManager.cpp in Sources */, + 804B9A1FC60F3AF24C8FFD584C30CB52 /* QueryScorer.cpp in Sources */, + 7FA4FE1D7F9A8DB31A66FA4E98EED7B7 /* QueryTermExtractor.cpp in Sources */, + 18CA188D5A912E680CA9A9B0BE327822 /* QueryToken.cpp in Sources */, + E99EAF9042D30F1A1C4F1B1EA52BFD18 /* RAMDirectory.cpp in Sources */, + 5A6EDD89DD97C5E1BF2C2DA3C02C17A0 /* RangeFilter.cpp in Sources */, + DC3339F7ECB89C020BEA6C8CCCF7FF6E /* RangeQuery.cpp in Sources */, + B3F1C3E7B014419D52F6D8D732F8AA43 /* Reader.cpp in Sources */, + 60D558C2FBAA6E72616C9D5879B7410F /* repl_lltot.cpp in Sources */, + C61766657BBF75ACA68D5A1BEBAAF31D /* repl_tcscasecmp.cpp in Sources */, + A6FFD80C18D1513F799A1236E5EA9D99 /* repl_tcslwr.cpp in Sources */, + 1930739FE461C8C68CE3FACE0CBA4F9B /* repl_tcstod.cpp in Sources */, + BE92504BABEAC8A2C8F9B606611C1889 /* repl_tcstoll.cpp in Sources */, + DE525EB8E97BD04E877C8436F7F23A9C /* repl_tprintf.cpp in Sources */, + 35F954C00550BC54C2C4D6BCD34EC47D /* Scorer.cpp in Sources */, + 6E45AE916276FE2AE2885A49F6B8FA9B /* ScorerDocQueue.cpp in Sources */, + 0276AB199CA18A237D8CBFF8693CDE15 /* SearchHeader.cpp in Sources */, + BD0E5649B91CB64BEC684876F2CC494E /* SegmentInfos.cpp in Sources */, + C4D4AB0B2D69AB6139F1D786DAF7AD10 /* SegmentMergeInfo.cpp in Sources */, + BAD71B42188E4F4154C37B53A411A553 /* SegmentMergeQueue.cpp in Sources */, + EEEA75D5C899FCD0D5B099D97C7A4CC9 /* SegmentMerger.cpp in Sources */, + 8485DA82793C721F36871D80318BCF2B /* SegmentReader.cpp in Sources */, + EA3216B080996799CB973BF6B64692A9 /* SegmentTermDocs.cpp in Sources */, + 9804C37314CADA39C1679DDD0733CA25 /* SegmentTermEnum.cpp in Sources */, + 7C82EBDC1D44F79CC3D8821EDE995715 /* SegmentTermPositions.cpp in Sources */, + 31ECCCCC0A31D279FE7E9349CB569B83 /* SegmentTermVector.cpp in Sources */, + 983C6A24C14B7D54B91B4FB1B6D198C8 /* SharedHeader.cpp in Sources */, + D792829A339D23D30D80D8EA41C75E99 /* Similarity.cpp in Sources */, + 0C95112152CF75AE653A02A5FFFC5CCE /* SimpleFragmenter.cpp in Sources */, + 2C79DB248D9DFF1DF0F7C4443C810B42 /* SimpleHTMLEncoder.cpp in Sources */, + 7CE1F5EDE712A23930515D430FF42360 /* SimpleHTMLFormatter.cpp in Sources */, + 7D09315E8A192C6F6ED9E1E41EC9DB68 /* SkipListReader.cpp in Sources */, + 0A1549A37FD10782BFFDB1B5FCBA0524 /* SkipListWriter.cpp in Sources */, + 52C50633793A671713BA56134B50F18C /* SloppyPhraseScorer.cpp in Sources */, + EB8EA956E148A5FDEDFDE0F6D118198F /* Snowball.cpp in Sources */, + BED9071951614DBF7BB1531EDBB32FF1 /* Sort.cpp in Sources */, + 006150531ADC11A7B34EA55AAD6BD117 /* SpanFirstQuery.cpp in Sources */, + 881D677C3F2EA73B475EA35109B241C7 /* SpanNearQuery.cpp in Sources */, + F757C26D575213461DB91FE2B8C38414 /* SpanNotQuery.cpp in Sources */, + 80FE6C9CE16B977B2FE545C02380CBF9 /* SpanOrQuery.cpp in Sources */, + 1F32227AB96E8ECA3F735278040E8B12 /* SpanQueryFilter.cpp in Sources */, + 3E4488B860C393368E64EF916817D6BD /* SpanScorer.cpp in Sources */, + 9016F3EF41B00A5CDD8BA3D6513E2F51 /* SpanTermQuery.cpp in Sources */, + E14E6A6AC70E88738F912295019CC92D /* SpanWeight.cpp in Sources */, + 27A3E5247C9AE07FFC719B9F17C1475F /* StandardAnalyzer.cpp in Sources */, + DF151FC09E165C78227180B9F8D35D43 /* StandardFilter.cpp in Sources */, + 9357E5C79F6947134ED6EFE8B9C9BC37 /* StandardTokenizer.cpp in Sources */, + 54A5243465E84FD90B1A888A1FF7F8BB /* StdHeader.cpp in Sources */, + E183C8BCA9ED66249D4A7A11BD6B463D /* stem_ISO_8859_1_danish.c in Sources */, + 15958649C861EB37217A143A655C6419 /* stem_ISO_8859_1_dutch.c in Sources */, + DFFCCFEB5254096951F37BD6A8C00BFC /* stem_ISO_8859_1_english.c in Sources */, + 0A12852769DC6B07BDF4432380D0562A /* stem_ISO_8859_1_finnish.c in Sources */, + E3CB99A1E214C5DF76D3CADE30D4F419 /* stem_ISO_8859_1_french.c in Sources */, + 45A257A642F97286AE7328143DBC8963 /* stem_ISO_8859_1_german.c in Sources */, + C300583EF33369E344709820EEB58E62 /* stem_ISO_8859_1_italian.c in Sources */, + 04A1A1A6A3951CB5B5384D3F8E2C0B68 /* stem_ISO_8859_1_norwegian.c in Sources */, + A56CC7AEE010B9F269414561F56F700E /* stem_ISO_8859_1_porter.c in Sources */, + EC476D23CA7D68A21639892023348FB4 /* stem_ISO_8859_1_portuguese.c in Sources */, + 58BD147DC34525C107B9E37388BF10A1 /* stem_ISO_8859_1_spanish.c in Sources */, + B2F6C9370EA2F4CD6F9E09B1998F849F /* stem_ISO_8859_1_swedish.c in Sources */, + F4E3DA77AD17C070E2CEC44ABF47117F /* stem_KOI8_R_russian.c in Sources */, + 58938F5CFCEAC429EB0D238C0AAD4FDB /* stem_UTF_8_danish.c in Sources */, + BCD4F1BDED21FFC943EA4609CEA9FFD5 /* stem_UTF_8_dutch.c in Sources */, + CCD22DDC11CBB5C706FBA4234C24BD1D /* stem_UTF_8_english.c in Sources */, + 407650D7522070210CFE0F3458C44A8F /* stem_UTF_8_finnish.c in Sources */, + 7CC5BF71AF58E97FA66DAC63A6B1D840 /* stem_UTF_8_french.c in Sources */, + 9259141834E0B41E8CB3412F968DD9BA /* stem_UTF_8_german.c in Sources */, + 3B4147B9D3B128BFB3813C34DE13E5C5 /* stem_UTF_8_italian.c in Sources */, + 8FBC13FF209F03D66489BEC0C6EDB9D1 /* stem_UTF_8_norwegian.c in Sources */, + 2493B0B972BE25251B8AD72DCF54FDA6 /* stem_UTF_8_porter.c in Sources */, + 025330A75CDE3F340DE72F1D139F6813 /* stem_UTF_8_portuguese.c in Sources */, + 9C1DE8B36E4246AE968BA78EAE80D09E /* stem_UTF_8_russian.c in Sources */, + 831AA621DFB447CAC0508619E685C360 /* stem_UTF_8_spanish.c in Sources */, + 38825CFF56E699796C57614D07D2BCE5 /* stem_UTF_8_swedish.c in Sources */, + EE5D4805987B45C8F030CC8878E66BAB /* StringBuffer.cpp in Sources */, + FB58915E2F0F448944437584A9B1EB7F /* StringIntern.cpp in Sources */, + 0BFFB56EB27779820BE052EE4CDE9FB5 /* Term.cpp in Sources */, + FE7D4FBAD52A68B05B3559C0CC8B09A3 /* TermInfo.cpp in Sources */, + 51704691AB18B416FF580E16C4E814DE /* TermInfosReader.cpp in Sources */, + 6FF554ADDF5DF41C1DB157691BC4DBA7 /* TermInfosWriter.cpp in Sources */, + DB615492E3B02424EE26078E1981286D /* TermQuery.cpp in Sources */, + F52E7937504BEB63D44D56C4A074757D /* Terms.cpp in Sources */, + 7BA486FC349610BCEBCA42219F7E72CB /* TermScorer.cpp in Sources */, + BDDA051CC9C97C254A622B96B312B55E /* TermSpans.cpp in Sources */, + 8C761A80A510ABE179AA9700C63B502C /* TermVectorReader.cpp in Sources */, + 99060ADA57BF09013F90C5AEEA219A39 /* TermVectorWriter.cpp in Sources */, + 3EF7A45C494E685089CA3E1A617FCCFE /* TextFragment.cpp in Sources */, + E3FA5751D69777D31744506C29050854 /* ThreadLocal.cpp in Sources */, + 07FC3AFAF80C4537E05680947CE550D7 /* threads.cpp in Sources */, + BAEE91CFC472CD45704C5ED990070A0C /* TokenGroup.cpp in Sources */, + CCA12F12FF4139E062AEB455E3159834 /* TokenSources.cpp in Sources */, + 0BDC01A049A78529DAA7E7E1170ED32F /* utf8.cpp in Sources */, + F83CD5CB5EBB25F1A0FA27E72F371D87 /* utilities.c in Sources */, + 1D838611A104657AD4075574DB950B3D /* WeightedTerm.cpp in Sources */, + 600ED00CA93B82107E880C6F44C19140 /* WildcardQuery.cpp in Sources */, + E6DC312780EB4E3C713EA3602372445A /* WildcardTermEnum.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + A0E7F4BD4C449579A073CDBC07AF1CFC /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = BRFullTextSearch; + target = EC4FD212AB4972975789333E27148F2B /* BRFullTextSearch */; + targetProxy = 9E5E228038E728A022AEA298C0EBD83F /* PBXContainerItemProxy */; + }; + AB1DB4BD0B0AF0157045D2911D9626D3 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = MagicalRecord; + target = 44043489BB712FEE61998C3EADF6004E /* MagicalRecord */; + targetProxy = F42485CAC4C4434C2D617D2EDEDDA26A /* PBXContainerItemProxy */; + }; + E563A5BF176BFA0416F7244C6F0CA9FC /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = BRCLucene; + target = BFB7466E5AAE0E3B0F9D78A3DF79C1C2 /* BRCLucene */; + targetProxy = 17D13E81132118B0B5CDBC69EE72321D /* PBXContainerItemProxy */; + }; + EB53999A73C408CE9B318A294933CEFD /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = BRCLucene; + target = BFB7466E5AAE0E3B0F9D78A3DF79C1C2 /* BRCLucene */; + targetProxy = 9B6A3E8E006BE01282BB180D7D5B5AFB /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + 2F1D8750C1FC55EB90A1909CB89E4305 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 5D84E50D8089BC67C109073E270E062A /* BRCLucene.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = "-"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + EXECUTABLE_PREFIX = lib; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/BRCLucene/BRCLucene-prefix.pch"; + MACOSX_DEPLOYMENT_TARGET = 10.7; + MTL_ENABLE_DEBUG_INFO = YES; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + PUBLIC_HEADERS_FOLDER_PATH = ""; + SDKROOT = macosx; + }; + name = Debug; + }; + 4ECF5F3A7DCBE32E59B23B0C7F362504 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGNING_REQUIRED = NO; + COPY_PHASE_STRIP = YES; + ENABLE_NS_ASSERTIONS = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_PREPROCESSOR_DEFINITIONS = ( + "POD_CONFIGURATION_RELEASE=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.9; + PROVISIONING_PROFILE_SPECIFIER = NO_SIGNING/; + STRIP_INSTALLED_PRODUCT = NO; + SYMROOT = "${SRCROOT}/../build"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 7C981595415719BB35AA9A4993CE0C7A /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = B82890BE307E0A11384D2D30FA44C209 /* Pods-SampleOSXCocoaPodsProject.debug.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = "-"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + EXECUTABLE_PREFIX = lib; + GCC_NO_COMMON_BLOCKS = YES; + MACH_O_TYPE = staticlib; + MACOSX_DEPLOYMENT_TARGET = 10.9; + MTL_ENABLE_DEBUG_INFO = YES; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx; + SKIP_INSTALL = YES; + }; + name = Debug; + }; + 9438B2566E6F335F92470A297F1A132B /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = FCC17AB1D14239C4FE5350CFA783AFE1 /* Pods-SampleOSXCocoaPodsProject.release.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = "-"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + EXECUTABLE_PREFIX = lib; + GCC_NO_COMMON_BLOCKS = YES; + MACH_O_TYPE = staticlib; + MACOSX_DEPLOYMENT_TARGET = 10.9; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx; + SKIP_INSTALL = YES; + }; + name = Release; + }; + 9CBC0216D3ACE6940F71381664971C78 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = E3D588B16FF4371D497D846688CA9D66 /* MagicalRecord.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = "-"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + EXECUTABLE_PREFIX = lib; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/MagicalRecord/MagicalRecord-prefix.pch"; + MACOSX_DEPLOYMENT_TARGET = 10.6; + MTL_ENABLE_DEBUG_INFO = YES; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + PUBLIC_HEADERS_FOLDER_PATH = ""; + SDKROOT = macosx; + }; + name = Debug; + }; + C269F16C69C874215FB299057455A930 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGNING_REQUIRED = NO; + COPY_PHASE_STRIP = NO; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "POD_CONFIGURATION_DEBUG=1", + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.9; + ONLY_ACTIVE_ARCH = YES; + PROVISIONING_PROFILE_SPECIFIER = NO_SIGNING/; + STRIP_INSTALLED_PRODUCT = NO; + SYMROOT = "${SRCROOT}/../build"; + }; + name = Debug; + }; + D9ADB55CBEBAA0FF0C15C188E6573D29 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 5D84E50D8089BC67C109073E270E062A /* BRCLucene.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = "-"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + EXECUTABLE_PREFIX = lib; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/BRCLucene/BRCLucene-prefix.pch"; + MACOSX_DEPLOYMENT_TARGET = 10.7; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + PUBLIC_HEADERS_FOLDER_PATH = ""; + SDKROOT = macosx; + }; + name = Release; + }; + DFD43080FDB11F533AFD6BCD96679AD0 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = D8163D1560FC206887F2227AD953CABE /* BRFullTextSearch.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = "-"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + EXECUTABLE_PREFIX = lib; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/BRFullTextSearch/BRFullTextSearch-prefix.pch"; + MACOSX_DEPLOYMENT_TARGET = 10.7; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + PUBLIC_HEADERS_FOLDER_PATH = ""; + SDKROOT = macosx; + }; + name = Release; + }; + F28B73E7ED0B9D8CA294E892DE46BEC4 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = D8163D1560FC206887F2227AD953CABE /* BRFullTextSearch.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = "-"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + EXECUTABLE_PREFIX = lib; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/BRFullTextSearch/BRFullTextSearch-prefix.pch"; + MACOSX_DEPLOYMENT_TARGET = 10.7; + MTL_ENABLE_DEBUG_INFO = YES; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + PUBLIC_HEADERS_FOLDER_PATH = ""; + SDKROOT = macosx; + }; + name = Debug; + }; + F6D66DB7443E5052FF024787708ACAEE /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = E3D588B16FF4371D497D846688CA9D66 /* MagicalRecord.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = "-"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + EXECUTABLE_PREFIX = lib; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/MagicalRecord/MagicalRecord-prefix.pch"; + MACOSX_DEPLOYMENT_TARGET = 10.6; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + PUBLIC_HEADERS_FOLDER_PATH = ""; + SDKROOT = macosx; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 2B91166510634199EC0554B08C081E1E /* Build configuration list for PBXNativeTarget "BRFullTextSearch" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + F28B73E7ED0B9D8CA294E892DE46BEC4 /* Debug */, + DFD43080FDB11F533AFD6BCD96679AD0 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + C269F16C69C874215FB299057455A930 /* Debug */, + 4ECF5F3A7DCBE32E59B23B0C7F362504 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 4B262AA401F99483F3F993E045F5BA42 /* Build configuration list for PBXNativeTarget "Pods-SampleOSXCocoaPodsProject" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 7C981595415719BB35AA9A4993CE0C7A /* Debug */, + 9438B2566E6F335F92470A297F1A132B /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 7E15973B024589F3B44923E8BD55B71B /* Build configuration list for PBXNativeTarget "BRCLucene" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 2F1D8750C1FC55EB90A1909CB89E4305 /* Debug */, + D9ADB55CBEBAA0FF0C15C188E6573D29 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + A198A148CBE1BE9BC13AE3C7344B9050 /* Build configuration list for PBXNativeTarget "MagicalRecord" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 9CBC0216D3ACE6940F71381664971C78 /* Debug */, + F6D66DB7443E5052FF024787708ACAEE /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = D41D8CD98F00B204E9800998ECF8427E /* Project object */; +} diff --git a/SampleOSXCocoaPodsProject/Pods/Pods.xcodeproj/xcshareddata/xcschemes/BRFullTextSearch.xcscheme b/SampleOSXCocoaPodsProject/Pods/Pods.xcodeproj/xcshareddata/xcschemes/BRFullTextSearch.xcscheme deleted file mode 100644 index 8788706..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Pods.xcodeproj/xcshareddata/xcschemes/BRFullTextSearch.xcscheme +++ /dev/null @@ -1,60 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/SampleOSXCocoaPodsProject/Pods/Target Support Files/BRCLucene/BRCLucene-dummy.m b/SampleOSXCocoaPodsProject/Pods/Target Support Files/BRCLucene/BRCLucene-dummy.m new file mode 100644 index 0000000..5e0210d --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Target Support Files/BRCLucene/BRCLucene-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_BRCLucene : NSObject +@end +@implementation PodsDummy_BRCLucene +@end diff --git a/SampleOSXCocoaPodsProject/Pods/Target Support Files/BRCLucene/BRCLucene-prefix.pch b/SampleOSXCocoaPodsProject/Pods/Target Support Files/BRCLucene/BRCLucene-prefix.pch new file mode 100644 index 0000000..b9c163b --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Target Support Files/BRCLucene/BRCLucene-prefix.pch @@ -0,0 +1,4 @@ +#ifdef __OBJC__ +#import +#endif + diff --git a/SampleOSXCocoaPodsProject/Pods/Target Support Files/BRCLucene/BRCLucene.xcconfig b/SampleOSXCocoaPodsProject/Pods/Target Support Files/BRCLucene/BRCLucene.xcconfig new file mode 100644 index 0000000..8ffd56e --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Target Support Files/BRCLucene/BRCLucene.xcconfig @@ -0,0 +1,9 @@ +CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/BRCLucene +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 _WCHAR_H_CPLUSPLUS_98_CONFORMANCE_ +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/BRCLucene" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/BRCLucene" "${PODS_ROOT}/Headers/Public/BRFullTextSearch" "${PODS_ROOT}/Headers/Public/MagicalRecord" +OTHER_LDFLAGS = -l"c++" -l"z" +PODS_BUILD_DIR = $BUILD_DIR +PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES diff --git a/SampleOSXCocoaPodsProject/Pods/Target Support Files/BRFullTextSearch/BRFullTextSearch.xcconfig b/SampleOSXCocoaPodsProject/Pods/Target Support Files/BRFullTextSearch/BRFullTextSearch.xcconfig index 51b8316..d1d328f 100644 --- a/SampleOSXCocoaPodsProject/Pods/Target Support Files/BRFullTextSearch/BRFullTextSearch.xcconfig +++ b/SampleOSXCocoaPodsProject/Pods/Target Support Files/BRFullTextSearch/BRFullTextSearch.xcconfig @@ -1,7 +1,12 @@ -CLANG_CXX_LANGUAGE_STANDARD = gnu++98 -CLANG_CXX_LIBRARY = libstdc++ +CLANG_CXX_LANGUAGE_STANDARD = c++0x +CLANG_CXX_LIBRARY = libc++ +CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/BRFullTextSearch GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/BRFullTextSearch" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/BRFullTextSearch" "${PODS_ROOT}/Headers/Public/MagicalRecord" -OTHER_LDFLAGS = -stdlib=libstdc++ -l"stdc++" -l"z" +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/BRFullTextSearch" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/BRCLucene" "${PODS_ROOT}/Headers/Public/BRFullTextSearch" "${PODS_ROOT}/Headers/Public/MagicalRecord" +LIBRARY_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/BRCLucene" +OTHER_LDFLAGS = -l"c++" -l"z" +PODS_BUILD_DIR = $BUILD_DIR +PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} -SKIP_INSTALL = YES \ No newline at end of file +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES diff --git a/SampleOSXCocoaPodsProject/Pods/Target Support Files/MagicalRecord/MagicalRecord.xcconfig b/SampleOSXCocoaPodsProject/Pods/Target Support Files/MagicalRecord/MagicalRecord.xcconfig index 26c6de8..4f64719 100644 --- a/SampleOSXCocoaPodsProject/Pods/Target Support Files/MagicalRecord/MagicalRecord.xcconfig +++ b/SampleOSXCocoaPodsProject/Pods/Target Support Files/MagicalRecord/MagicalRecord.xcconfig @@ -1,5 +1,9 @@ +CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/MagicalRecord GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/MagicalRecord" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/BRFullTextSearch" "${PODS_ROOT}/Headers/Public/MagicalRecord" +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/MagicalRecord" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/BRCLucene" "${PODS_ROOT}/Headers/Public/BRFullTextSearch" "${PODS_ROOT}/Headers/Public/MagicalRecord" OTHER_LDFLAGS = -framework "CoreData" +PODS_BUILD_DIR = $BUILD_DIR +PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} -SKIP_INSTALL = YES \ No newline at end of file +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES diff --git a/SampleOSXCocoaPodsProject/Pods/Target Support Files/Pods-SampleOSXCocoaPodsProject/Pods-SampleOSXCocoaPodsProject-acknowledgements.markdown b/SampleOSXCocoaPodsProject/Pods/Target Support Files/Pods-SampleOSXCocoaPodsProject/Pods-SampleOSXCocoaPodsProject-acknowledgements.markdown new file mode 100644 index 0000000..d783e8e --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Target Support Files/Pods-SampleOSXCocoaPodsProject/Pods-SampleOSXCocoaPodsProject-acknowledgements.markdown @@ -0,0 +1,235 @@ +# Acknowledgements +This application makes use of the following third party libraries: + +## BRFullTextSearch + + + 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. + + +## MagicalRecord + + Copyright (c) 2010, Magical Panda Software, LLC + + Permission is hereby granted, free of charge, to any person + obtaining a copy of this software and associated documentation + files (the "Software"), to deal in the Software without + restriction, including without limitation the rights to use, + copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following + conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + +Generated by CocoaPods - https://cocoapods.org diff --git a/SampleOSXCocoaPodsProject/Pods/Target Support Files/Pods-SampleOSXCocoaPodsProject/Pods-SampleOSXCocoaPodsProject-acknowledgements.plist b/SampleOSXCocoaPodsProject/Pods/Target Support Files/Pods-SampleOSXCocoaPodsProject/Pods-SampleOSXCocoaPodsProject-acknowledgements.plist new file mode 100644 index 0000000..b97100f --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Target Support Files/Pods-SampleOSXCocoaPodsProject/Pods-SampleOSXCocoaPodsProject-acknowledgements.plist @@ -0,0 +1,273 @@ + + + + + PreferenceSpecifiers + + + FooterText + This application makes use of the following third party libraries: + Title + Acknowledgements + Type + PSGroupSpecifier + + + FooterText + + 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. + + License + Apache License, Version 2.0 + Title + BRFullTextSearch + Type + PSGroupSpecifier + + + FooterText + Copyright (c) 2010, Magical Panda Software, LLC + + Permission is hereby granted, free of charge, to any person + obtaining a copy of this software and associated documentation + files (the "Software"), to deal in the Software without + restriction, including without limitation the rights to use, + copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following + conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + + License + MIT + Title + MagicalRecord + Type + PSGroupSpecifier + + + FooterText + Generated by CocoaPods - https://cocoapods.org + Title + + Type + PSGroupSpecifier + + + StringsTable + Acknowledgements + Title + Acknowledgements + + diff --git a/SampleOSXCocoaPodsProject/Pods/Target Support Files/Pods-SampleOSXCocoaPodsProject/Pods-SampleOSXCocoaPodsProject-dummy.m b/SampleOSXCocoaPodsProject/Pods/Target Support Files/Pods-SampleOSXCocoaPodsProject/Pods-SampleOSXCocoaPodsProject-dummy.m new file mode 100644 index 0000000..ee4ebe9 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Target Support Files/Pods-SampleOSXCocoaPodsProject/Pods-SampleOSXCocoaPodsProject-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Pods_SampleOSXCocoaPodsProject : NSObject +@end +@implementation PodsDummy_Pods_SampleOSXCocoaPodsProject +@end diff --git a/SampleOSXCocoaPodsProject/Pods/Target Support Files/Pods-SampleOSXCocoaPodsProject/Pods-SampleOSXCocoaPodsProject-frameworks.sh b/SampleOSXCocoaPodsProject/Pods/Target Support Files/Pods-SampleOSXCocoaPodsProject/Pods-SampleOSXCocoaPodsProject-frameworks.sh new file mode 100755 index 0000000..893c16a --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Target Support Files/Pods-SampleOSXCocoaPodsProject/Pods-SampleOSXCocoaPodsProject-frameworks.sh @@ -0,0 +1,84 @@ +#!/bin/sh +set -e + +echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" +mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + +SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" + +install_framework() +{ + if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then + local source="${BUILT_PRODUCTS_DIR}/$1" + elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then + local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" + elif [ -r "$1" ]; then + local source="$1" + fi + + local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + + if [ -L "${source}" ]; then + echo "Symlinked..." + source="$(readlink "${source}")" + fi + + # use filter instead of exclude so missing patterns dont' throw errors + echo "rsync -av --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" + rsync -av --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" + + local basename + basename="$(basename -s .framework "$1")" + binary="${destination}/${basename}.framework/${basename}" + if ! [ -r "$binary" ]; then + binary="${destination}/${basename}" + fi + + # Strip invalid architectures so "fat" simulator / device frameworks work on device + if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then + strip_invalid_archs "$binary" + fi + + # Resign the code if required by the build settings to avoid unstable apps + code_sign_if_enabled "${destination}/$(basename "$1")" + + # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. + if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then + local swift_runtime_libs + swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) + for lib in $swift_runtime_libs; do + echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" + rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" + code_sign_if_enabled "${destination}/${lib}" + done + fi +} + +# Signs a framework with the provided identity +code_sign_if_enabled() { + if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then + # Use the current code_sign_identitiy + echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" + echo "/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements \"$1\"" + /usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements "$1" + fi +} + +# Strip invalid architectures +strip_invalid_archs() { + binary="$1" + # Get architectures for current file + archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)" + stripped="" + for arch in $archs; do + if ! [[ "${VALID_ARCHS}" == *"$arch"* ]]; then + # Strip non-valid architectures in-place + lipo -remove "$arch" -output "$binary" "$binary" || exit 1 + stripped="$stripped $arch" + fi + done + if [[ "$stripped" ]]; then + echo "Stripped $binary of architectures:$stripped" + fi +} + diff --git a/SampleOSXCocoaPodsProject/Pods/Target Support Files/Pods-SampleOSXCocoaPodsProject/Pods-SampleOSXCocoaPodsProject-resources.sh b/SampleOSXCocoaPodsProject/Pods/Target Support Files/Pods-SampleOSXCocoaPodsProject/Pods-SampleOSXCocoaPodsProject-resources.sh new file mode 100755 index 0000000..25e9d37 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Target Support Files/Pods-SampleOSXCocoaPodsProject/Pods-SampleOSXCocoaPodsProject-resources.sh @@ -0,0 +1,96 @@ +#!/bin/sh +set -e + +mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + +RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt +> "$RESOURCES_TO_COPY" + +XCASSET_FILES=() + +case "${TARGETED_DEVICE_FAMILY}" in + 1,2) + TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" + ;; + 1) + TARGET_DEVICE_ARGS="--target-device iphone" + ;; + 2) + TARGET_DEVICE_ARGS="--target-device ipad" + ;; + *) + TARGET_DEVICE_ARGS="--target-device mac" + ;; +esac + +install_resource() +{ + if [[ "$1" = /* ]] ; then + RESOURCE_PATH="$1" + else + RESOURCE_PATH="${PODS_ROOT}/$1" + fi + if [[ ! -e "$RESOURCE_PATH" ]] ; then + cat << EOM +error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. +EOM + exit 1 + fi + case $RESOURCE_PATH in + *.storyboard) + echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" + ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} + ;; + *.xib) + echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" + ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} + ;; + *.framework) + echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + echo "rsync -av $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + rsync -av "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + ;; + *.xcdatamodel) + echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" + xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" + ;; + *.xcdatamodeld) + echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" + xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" + ;; + *.xcmappingmodel) + echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" + xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" + ;; + *.xcassets) + ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH" + XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") + ;; + *) + echo "$RESOURCE_PATH" + echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" + ;; + esac +} + +mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then + mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +fi +rm -f "$RESOURCES_TO_COPY" + +if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] +then + # Find all other xcassets (this unfortunately includes those of path pods and other targets). + OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) + while read line; do + if [[ $line != "${PODS_ROOT}*" ]]; then + XCASSET_FILES+=("$line") + fi + done <<<"$OTHER_XCASSETS" + + printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +fi diff --git a/SampleOSXCocoaPodsProject/Pods/Target Support Files/Pods-SampleOSXCocoaPodsProject/Pods-SampleOSXCocoaPodsProject.debug.xcconfig b/SampleOSXCocoaPodsProject/Pods/Target Support Files/Pods-SampleOSXCocoaPodsProject/Pods-SampleOSXCocoaPodsProject.debug.xcconfig new file mode 100644 index 0000000..e0b6785 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Target Support Files/Pods-SampleOSXCocoaPodsProject/Pods-SampleOSXCocoaPodsProject.debug.xcconfig @@ -0,0 +1,11 @@ +ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO +CLANG_CXX_LANGUAGE_STANDARD = c++0x +CLANG_CXX_LIBRARY = libc++ +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 _WCHAR_H_CPLUSPLUS_98_CONFORMANCE_ +HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/BRCLucene" "${PODS_ROOT}/Headers/Public/BRFullTextSearch" "${PODS_ROOT}/Headers/Public/MagicalRecord" +LIBRARY_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/BRCLucene" "$PODS_CONFIGURATION_BUILD_DIR/BRFullTextSearch" "$PODS_CONFIGURATION_BUILD_DIR/MagicalRecord" +OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/BRCLucene" -isystem "${PODS_ROOT}/Headers/Public/BRFullTextSearch" -isystem "${PODS_ROOT}/Headers/Public/MagicalRecord" +OTHER_LDFLAGS = $(inherited) -ObjC -l"BRCLucene" -l"BRFullTextSearch" -l"MagicalRecord" -l"c++" -l"z" -framework "CoreData" +PODS_BUILD_DIR = $BUILD_DIR +PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT}/Pods diff --git a/SampleOSXCocoaPodsProject/Pods/Target Support Files/Pods-SampleOSXCocoaPodsProject/Pods-SampleOSXCocoaPodsProject.release.xcconfig b/SampleOSXCocoaPodsProject/Pods/Target Support Files/Pods-SampleOSXCocoaPodsProject/Pods-SampleOSXCocoaPodsProject.release.xcconfig new file mode 100644 index 0000000..e0b6785 --- /dev/null +++ b/SampleOSXCocoaPodsProject/Pods/Target Support Files/Pods-SampleOSXCocoaPodsProject/Pods-SampleOSXCocoaPodsProject.release.xcconfig @@ -0,0 +1,11 @@ +ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO +CLANG_CXX_LANGUAGE_STANDARD = c++0x +CLANG_CXX_LIBRARY = libc++ +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 _WCHAR_H_CPLUSPLUS_98_CONFORMANCE_ +HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/BRCLucene" "${PODS_ROOT}/Headers/Public/BRFullTextSearch" "${PODS_ROOT}/Headers/Public/MagicalRecord" +LIBRARY_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/BRCLucene" "$PODS_CONFIGURATION_BUILD_DIR/BRFullTextSearch" "$PODS_CONFIGURATION_BUILD_DIR/MagicalRecord" +OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/BRCLucene" -isystem "${PODS_ROOT}/Headers/Public/BRFullTextSearch" -isystem "${PODS_ROOT}/Headers/Public/MagicalRecord" +OTHER_LDFLAGS = $(inherited) -ObjC -l"BRCLucene" -l"BRFullTextSearch" -l"MagicalRecord" -l"c++" -l"z" -framework "CoreData" +PODS_BUILD_DIR = $BUILD_DIR +PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT}/Pods diff --git a/SampleOSXCocoaPodsProject/Pods/Target Support Files/Pods/Pods-acknowledgements.markdown b/SampleOSXCocoaPodsProject/Pods/Target Support Files/Pods/Pods-acknowledgements.markdown deleted file mode 100644 index a1d7cf5..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Target Support Files/Pods/Pods-acknowledgements.markdown +++ /dev/null @@ -1,235 +0,0 @@ -# Acknowledgements -This application makes use of the following third party libraries: - -## BRFullTextSearch - - - 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. - - -## MagicalRecord - - Copyright (c) 2010, Magical Panda Software, LLC - - Permission is hereby granted, free of charge, to any person - obtaining a copy of this software and associated documentation - files (the "Software"), to deal in the Software without - restriction, including without limitation the rights to use, - copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the - Software is furnished to do so, subject to the following - conditions: - - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES - OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - OTHER DEALINGS IN THE SOFTWARE. - -Generated by CocoaPods - http://cocoapods.org diff --git a/SampleOSXCocoaPodsProject/Pods/Target Support Files/Pods/Pods-acknowledgements.plist b/SampleOSXCocoaPodsProject/Pods/Target Support Files/Pods/Pods-acknowledgements.plist deleted file mode 100644 index 1c34348..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Target Support Files/Pods/Pods-acknowledgements.plist +++ /dev/null @@ -1,269 +0,0 @@ - - - - - PreferenceSpecifiers - - - FooterText - This application makes use of the following third party libraries: - Title - Acknowledgements - Type - PSGroupSpecifier - - - FooterText - - 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. - - Title - BRFullTextSearch - Type - PSGroupSpecifier - - - FooterText - Copyright (c) 2010, Magical Panda Software, LLC - - Permission is hereby granted, free of charge, to any person - obtaining a copy of this software and associated documentation - files (the "Software"), to deal in the Software without - restriction, including without limitation the rights to use, - copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the - Software is furnished to do so, subject to the following - conditions: - - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES - OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - OTHER DEALINGS IN THE SOFTWARE. - - Title - MagicalRecord - Type - PSGroupSpecifier - - - FooterText - Generated by CocoaPods - http://cocoapods.org - Title - - Type - PSGroupSpecifier - - - StringsTable - Acknowledgements - Title - Acknowledgements - - diff --git a/SampleOSXCocoaPodsProject/Pods/Target Support Files/Pods/Pods-dummy.m b/SampleOSXCocoaPodsProject/Pods/Target Support Files/Pods/Pods-dummy.m deleted file mode 100644 index ade64bd..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Target Support Files/Pods/Pods-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_Pods : NSObject -@end -@implementation PodsDummy_Pods -@end diff --git a/SampleOSXCocoaPodsProject/Pods/Target Support Files/Pods/Pods-frameworks.sh b/SampleOSXCocoaPodsProject/Pods/Target Support Files/Pods/Pods-frameworks.sh deleted file mode 100755 index 6f76344..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Target Support Files/Pods/Pods-frameworks.sh +++ /dev/null @@ -1,84 +0,0 @@ -#!/bin/sh -set -e - -echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" -mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - -SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" - -install_framework() -{ - if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then - local source="${BUILT_PRODUCTS_DIR}/$1" - elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then - local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" - elif [ -r "$1" ]; then - local source="$1" - fi - - local destination="${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - - if [ -L "${source}" ]; then - echo "Symlinked..." - source="$(readlink "${source}")" - fi - - # use filter instead of exclude so missing patterns dont' throw errors - echo "rsync -av --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" - rsync -av --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" - - local basename - basename="$(basename -s .framework "$1")" - binary="${destination}/${basename}.framework/${basename}" - if ! [ -r "$binary" ]; then - binary="${destination}/${basename}" - fi - - # Strip invalid architectures so "fat" simulator / device frameworks work on device - if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then - strip_invalid_archs "$binary" - fi - - # Resign the code if required by the build settings to avoid unstable apps - code_sign_if_enabled "${destination}/$(basename "$1")" - - # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. - if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then - local swift_runtime_libs - swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) - for lib in $swift_runtime_libs; do - echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" - rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" - code_sign_if_enabled "${destination}/${lib}" - done - fi -} - -# Signs a framework with the provided identity -code_sign_if_enabled() { - if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then - # Use the current code_sign_identitiy - echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" - echo "/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} --preserve-metadata=identifier,entitlements \"$1\"" - /usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} --preserve-metadata=identifier,entitlements "$1" - fi -} - -# Strip invalid architectures -strip_invalid_archs() { - binary="$1" - # Get architectures for current file - archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)" - stripped="" - for arch in $archs; do - if ! [[ "${VALID_ARCHS}" == *"$arch"* ]]; then - # Strip non-valid architectures in-place - lipo -remove "$arch" -output "$binary" "$binary" || exit 1 - stripped="$stripped $arch" - fi - done - if [[ "$stripped" ]]; then - echo "Stripped $binary of architectures:$stripped" - fi -} - diff --git a/SampleOSXCocoaPodsProject/Pods/Target Support Files/Pods/Pods-resources.sh b/SampleOSXCocoaPodsProject/Pods/Target Support Files/Pods/Pods-resources.sh deleted file mode 100755 index 16774fb..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Target Support Files/Pods/Pods-resources.sh +++ /dev/null @@ -1,95 +0,0 @@ -#!/bin/sh -set -e - -mkdir -p "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" - -RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt -> "$RESOURCES_TO_COPY" - -XCASSET_FILES=() - -realpath() { - DIRECTORY="$(cd "${1%/*}" && pwd)" - FILENAME="${1##*/}" - echo "$DIRECTORY/$FILENAME" -} - -install_resource() -{ - case $1 in - *.storyboard) - echo "ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .storyboard`.storyboardc ${PODS_ROOT}/$1 --sdk ${SDKROOT}" - ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .storyboard`.storyboardc" "${PODS_ROOT}/$1" --sdk "${SDKROOT}" - ;; - *.xib) - echo "ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .xib`.nib ${PODS_ROOT}/$1 --sdk ${SDKROOT}" - ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .xib`.nib" "${PODS_ROOT}/$1" --sdk "${SDKROOT}" - ;; - *.framework) - echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - echo "rsync -av ${PODS_ROOT}/$1 ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - rsync -av "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - ;; - *.xcdatamodel) - echo "xcrun momc \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1"`.mom\"" - xcrun momc "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodel`.mom" - ;; - *.xcdatamodeld) - echo "xcrun momc \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodeld`.momd\"" - xcrun momc "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodeld`.momd" - ;; - *.xcmappingmodel) - echo "xcrun mapc \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcmappingmodel`.cdm\"" - xcrun mapc "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcmappingmodel`.cdm" - ;; - *.xcassets) - ABSOLUTE_XCASSET_FILE=$(realpath "${PODS_ROOT}/$1") - XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") - ;; - /*) - echo "$1" - echo "$1" >> "$RESOURCES_TO_COPY" - ;; - *) - echo "${PODS_ROOT}/$1" - echo "${PODS_ROOT}/$1" >> "$RESOURCES_TO_COPY" - ;; - esac -} - -mkdir -p "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" -rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" -if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then - mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" - rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" -fi -rm -f "$RESOURCES_TO_COPY" - -if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] -then - case "${TARGETED_DEVICE_FAMILY}" in - 1,2) - TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" - ;; - 1) - TARGET_DEVICE_ARGS="--target-device iphone" - ;; - 2) - TARGET_DEVICE_ARGS="--target-device ipad" - ;; - *) - TARGET_DEVICE_ARGS="--target-device mac" - ;; - esac - - # Find all other xcassets (this unfortunately includes those of path pods and other targets). - OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) - while read line; do - if [[ $line != "`realpath $PODS_ROOT`*" ]]; then - XCASSET_FILES+=("$line") - fi - done <<<"$OTHER_XCASSETS" - - printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${IPHONEOS_DEPLOYMENT_TARGET}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" -fi diff --git a/SampleOSXCocoaPodsProject/Pods/Target Support Files/Pods/Pods.debug.xcconfig b/SampleOSXCocoaPodsProject/Pods/Target Support Files/Pods/Pods.debug.xcconfig deleted file mode 100644 index 80372b4..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Target Support Files/Pods/Pods.debug.xcconfig +++ /dev/null @@ -1,7 +0,0 @@ -CLANG_CXX_LANGUAGE_STANDARD = gnu++98 -CLANG_CXX_LIBRARY = libstdc++ -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/BRFullTextSearch" "${PODS_ROOT}/Headers/Public/MagicalRecord" -OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/BRFullTextSearch" -isystem "${PODS_ROOT}/Headers/Public/MagicalRecord" -OTHER_LDFLAGS = $(inherited) -ObjC -stdlib=libstdc++ -l"BRFullTextSearch" -l"MagicalRecord" -l"stdc++" -l"z" -framework "CoreData" -PODS_ROOT = ${SRCROOT}/Pods \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/Pods/Target Support Files/Pods/Pods.release.xcconfig b/SampleOSXCocoaPodsProject/Pods/Target Support Files/Pods/Pods.release.xcconfig deleted file mode 100644 index 80372b4..0000000 --- a/SampleOSXCocoaPodsProject/Pods/Target Support Files/Pods/Pods.release.xcconfig +++ /dev/null @@ -1,7 +0,0 @@ -CLANG_CXX_LANGUAGE_STANDARD = gnu++98 -CLANG_CXX_LIBRARY = libstdc++ -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/BRFullTextSearch" "${PODS_ROOT}/Headers/Public/MagicalRecord" -OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/BRFullTextSearch" -isystem "${PODS_ROOT}/Headers/Public/MagicalRecord" -OTHER_LDFLAGS = $(inherited) -ObjC -stdlib=libstdc++ -l"BRFullTextSearch" -l"MagicalRecord" -l"stdc++" -l"z" -framework "CoreData" -PODS_ROOT = ${SRCROOT}/Pods \ No newline at end of file diff --git a/SampleOSXCocoaPodsProject/SampleOSXCocoaPodsProject.xcodeproj/project.pbxproj b/SampleOSXCocoaPodsProject/SampleOSXCocoaPodsProject.xcodeproj/project.pbxproj index ee2ef56..1c3ebb2 100644 --- a/SampleOSXCocoaPodsProject/SampleOSXCocoaPodsProject.xcodeproj/project.pbxproj +++ b/SampleOSXCocoaPodsProject/SampleOSXCocoaPodsProject.xcodeproj/project.pbxproj @@ -7,6 +7,7 @@ objects = { /* Begin PBXBuildFile section */ + 905F06A34DEA6D39A1E13AAB /* libPods-SampleOSXCocoaPodsProject.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 2CA6FE0635053842DFE57AB4 /* libPods-SampleOSXCocoaPodsProject.a */; }; C933D8361CD68F23006206B9 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = C933D8351CD68F23006206B9 /* AppDelegate.m */; }; C933D8391CD68F23006206B9 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = C933D8381CD68F23006206B9 /* main.m */; }; C933D83C1CD68F23006206B9 /* StickyNoteListViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C933D83B1CD68F23006206B9 /* StickyNoteListViewController.m */; }; @@ -20,12 +21,11 @@ C96BB02B1CEB91A600C7B022 /* Metadata.m in Sources */ = {isa = PBXBuildFile; fileRef = C96BB0291CEB91A600C7B022 /* Metadata.m */; }; C96BB02D1CEB924600C7B022 /* Sample Data in Resources */ = {isa = PBXBuildFile; fileRef = C96BB02C1CEB924600C7B022 /* Sample Data */; }; C96BB0301CEB9A1600C7B022 /* StickyNoteViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C96BB02F1CEB9A1600C7B022 /* StickyNoteViewController.m */; }; - FBAEC06D638494E845C69064 /* libPods.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 54C83B2400F99D89A8A08182 /* libPods.a */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ - 10E154602DE2DDE8F2576D8A /* Pods.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.release.xcconfig; path = "Pods/Target Support Files/Pods/Pods.release.xcconfig"; sourceTree = ""; }; - 54C83B2400F99D89A8A08182 /* libPods.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libPods.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 2CA6FE0635053842DFE57AB4 /* libPods-SampleOSXCocoaPodsProject.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-SampleOSXCocoaPodsProject.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 66A418B9F06FF62343AD43F9 /* Pods-SampleOSXCocoaPodsProject.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SampleOSXCocoaPodsProject.release.xcconfig"; path = "Pods/Target Support Files/Pods-SampleOSXCocoaPodsProject/Pods-SampleOSXCocoaPodsProject.release.xcconfig"; sourceTree = ""; }; C933D8311CD68F23006206B9 /* SampleOSXCocoaPodsProject.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SampleOSXCocoaPodsProject.app; sourceTree = BUILT_PRODUCTS_DIR; }; C933D8341CD68F23006206B9 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; C933D8351CD68F23006206B9 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; @@ -49,7 +49,7 @@ C96BB02C1CEB924600C7B022 /* Sample Data */ = {isa = PBXFileReference; lastKnownFileType = folder; path = "Sample Data"; sourceTree = SOURCE_ROOT; }; C96BB02E1CEB9A1600C7B022 /* StickyNoteViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StickyNoteViewController.h; sourceTree = ""; }; C96BB02F1CEB9A1600C7B022 /* StickyNoteViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = StickyNoteViewController.m; sourceTree = ""; }; - CC15C44C0CAA5FEFDEBBDFB7 /* Pods.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.debug.xcconfig; path = "Pods/Target Support Files/Pods/Pods.debug.xcconfig"; sourceTree = ""; }; + F6539957BBA849BB4E66E1DF /* Pods-SampleOSXCocoaPodsProject.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SampleOSXCocoaPodsProject.debug.xcconfig"; path = "Pods/Target Support Files/Pods-SampleOSXCocoaPodsProject/Pods-SampleOSXCocoaPodsProject.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -57,37 +57,29 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - FBAEC06D638494E845C69064 /* libPods.a in Frameworks */, + 905F06A34DEA6D39A1E13AAB /* libPods-SampleOSXCocoaPodsProject.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 65984B9271FFBA5FBC6C7D6D /* Pods */ = { + 05AFA074A6DC39AEF27ACDFF /* Pods */ = { isa = PBXGroup; children = ( - CC15C44C0CAA5FEFDEBBDFB7 /* Pods.debug.xcconfig */, - 10E154602DE2DDE8F2576D8A /* Pods.release.xcconfig */, + F6539957BBA849BB4E66E1DF /* Pods-SampleOSXCocoaPodsProject.debug.xcconfig */, + 66A418B9F06FF62343AD43F9 /* Pods-SampleOSXCocoaPodsProject.release.xcconfig */, ); name = Pods; sourceTree = ""; }; - 8D74AAD82C28098437494279 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 54C83B2400F99D89A8A08182 /* libPods.a */, - ); - name = Frameworks; - sourceTree = ""; - }; C933D8281CD68F23006206B9 = { isa = PBXGroup; children = ( C933D8331CD68F23006206B9 /* SampleOSXCocoaPodsProject */, C933D8321CD68F23006206B9 /* Products */, - 65984B9271FFBA5FBC6C7D6D /* Pods */, - 8D74AAD82C28098437494279 /* Frameworks */, + 05AFA074A6DC39AEF27ACDFF /* Pods */, + CB3DD1F65E085A722C7B8496 /* Frameworks */, ); sourceTree = ""; }; @@ -144,6 +136,14 @@ name = Model; sourceTree = ""; }; + CB3DD1F65E085A722C7B8496 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 2CA6FE0635053842DFE57AB4 /* libPods-SampleOSXCocoaPodsProject.a */, + ); + name = Frameworks; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -151,12 +151,12 @@ isa = PBXNativeTarget; buildConfigurationList = C933D8481CD68F23006206B9 /* Build configuration list for PBXNativeTarget "SampleOSXCocoaPodsProject" */; buildPhases = ( - 137AEDEA7F75EDFE537C3E74 /* Check Pods Manifest.lock */, + 3FCDCECB2B7A66E2D47154F4 /* [CP] Check Pods Manifest.lock */, C933D82D1CD68F23006206B9 /* Sources */, C933D82E1CD68F23006206B9 /* Frameworks */, C933D82F1CD68F23006206B9 /* Resources */, - 148BDD6B3ED762DF841C283B /* Embed Pods Frameworks */, - A0408BA6076B8D50CB15F0DF /* Copy Pods Resources */, + 9E915FB3638FD07FBE6CA0BB /* [CP] Embed Pods Frameworks */, + 0DCDA16EF7D2A069FD4E450F /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -213,49 +213,49 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 137AEDEA7F75EDFE537C3E74 /* Check Pods Manifest.lock */ = { + 0DCDA16EF7D2A069FD4E450F /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); - name = "Check Pods Manifest.lock"; + name = "[CP] Copy Pods Resources"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-SampleOSXCocoaPodsProject/Pods-SampleOSXCocoaPodsProject-resources.sh\"\n"; showEnvVarsInLog = 0; }; - 148BDD6B3ED762DF841C283B /* Embed Pods Frameworks */ = { + 3FCDCECB2B7A66E2D47154F4 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); - name = "Embed Pods Frameworks"; + name = "[CP] Check Pods Manifest.lock"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods/Pods-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n"; showEnvVarsInLog = 0; }; - A0408BA6076B8D50CB15F0DF /* Copy Pods Resources */ = { + 9E915FB3638FD07FBE6CA0BB /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); - name = "Copy Pods Resources"; + name = "[CP] Embed Pods Frameworks"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods/Pods-resources.sh\"\n"; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-SampleOSXCocoaPodsProject/Pods-SampleOSXCocoaPodsProject-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -375,7 +375,7 @@ }; C933D8491CD68F23006206B9 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CC15C44C0CAA5FEFDEBBDFB7 /* Pods.debug.xcconfig */; + baseConfigurationReference = F6539957BBA849BB4E66E1DF /* Pods-SampleOSXCocoaPodsProject.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; COMBINE_HIDPI_IMAGES = YES; @@ -389,7 +389,7 @@ }; C933D84A1CD68F23006206B9 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 10E154602DE2DDE8F2576D8A /* Pods.release.xcconfig */; + baseConfigurationReference = 66A418B9F06FF62343AD43F9 /* Pods-SampleOSXCocoaPodsProject.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; COMBINE_HIDPI_IMAGES = YES; diff --git a/SampleStaticLibraryProject/README.md b/SampleStaticLibraryProject/README.md deleted file mode 100644 index 934f990..0000000 --- a/SampleStaticLibraryProject/README.md +++ /dev/null @@ -1,13 +0,0 @@ -FullTextSearch - Sample Static Library Project -============================================== - -This sample project shows how to integrate the `BRFullTextSearch` static -framework into an application. This project is configured to support iOS -**5.1.1** in order to deploy onto original iPad devices. It does not -build a 64-bit architecture, so Xcode is still able to launch -**Release** builds on original iPad devices. - -The app is a very basic example of indexing documents and searching the -index. A set of random-length latin text is indexed for a set of -documents when the app launches. You can then search for latin terms, -e.g. "lorem". diff --git a/SampleStaticLibraryProject/SampleStaticLibraryProject.xcodeproj/project.pbxproj b/SampleStaticLibraryProject/SampleStaticLibraryProject.xcodeproj/project.pbxproj deleted file mode 100644 index 3505b8f..0000000 --- a/SampleStaticLibraryProject/SampleStaticLibraryProject.xcodeproj/project.pbxproj +++ /dev/null @@ -1,337 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - C979410417863D3200DF0660 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C979410317863D3200DF0660 /* UIKit.framework */; }; - C979410617863D3200DF0660 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C979410517863D3200DF0660 /* Foundation.framework */; }; - C979410817863D3200DF0660 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C979410717863D3200DF0660 /* CoreGraphics.framework */; }; - C979410E17863D3200DF0660 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = C979410C17863D3200DF0660 /* InfoPlist.strings */; }; - C979411017863D3200DF0660 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = C979410F17863D3200DF0660 /* main.m */; }; - C979411417863D3200DF0660 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = C979411317863D3200DF0660 /* AppDelegate.m */; }; - C979411617863D3200DF0660 /* Default.png in Resources */ = {isa = PBXBuildFile; fileRef = C979411517863D3200DF0660 /* Default.png */; }; - C979411817863D3200DF0660 /* Default@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = C979411717863D3200DF0660 /* Default@2x.png */; }; - C979411A17863D3200DF0660 /* Default-568h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = C979411917863D3200DF0660 /* Default-568h@2x.png */; }; - C979411D17863D3200DF0660 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C979411C17863D3200DF0660 /* ViewController.m */; }; - C979412017863D3200DF0660 /* ViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = C979411E17863D3200DF0660 /* ViewController.xib */; }; - C979412717863D6100DF0660 /* BRFullTextSearch.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C979412617863D6100DF0660 /* BRFullTextSearch.framework */; }; - C9794129178640A100DF0660 /* libstdc++.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = C9794128178640A100DF0660 /* libstdc++.dylib */; }; - C979412B178640AE00DF0660 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = C979412A178640AE00DF0660 /* libz.dylib */; }; - C979412D1786415C00DF0660 /* TestCopy.txt in Resources */ = {isa = PBXBuildFile; fileRef = C979412C1786415C00DF0660 /* TestCopy.txt */; }; -/* End PBXBuildFile section */ - -/* Begin PBXFileReference section */ - C979410017863D3200DF0660 /* SampleStaticLibraryProject.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SampleStaticLibraryProject.app; sourceTree = BUILT_PRODUCTS_DIR; }; - C979410317863D3200DF0660 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; - C979410517863D3200DF0660 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; - C979410717863D3200DF0660 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; - C979410B17863D3200DF0660 /* SampleStaticLibraryProject-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "SampleStaticLibraryProject-Info.plist"; sourceTree = ""; }; - C979410D17863D3200DF0660 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; - C979410F17863D3200DF0660 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; - C979411117863D3200DF0660 /* SampleStaticLibraryProject-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "SampleStaticLibraryProject-Prefix.pch"; sourceTree = ""; }; - C979411217863D3200DF0660 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; - C979411317863D3200DF0660 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; - C979411517863D3200DF0660 /* Default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Default.png; sourceTree = ""; }; - C979411717863D3200DF0660 /* Default@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default@2x.png"; sourceTree = ""; }; - C979411917863D3200DF0660 /* Default-568h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-568h@2x.png"; sourceTree = ""; }; - C979411B17863D3200DF0660 /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; }; - C979411C17863D3200DF0660 /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; }; - C979411F17863D3200DF0660 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/ViewController.xib; sourceTree = ""; }; - C979412617863D6100DF0660 /* BRFullTextSearch.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = BRFullTextSearch.framework; path = ../Framework/Debug/BRFullTextSearch.framework; sourceTree = ""; }; - C9794128178640A100DF0660 /* libstdc++.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libstdc++.dylib"; path = "usr/lib/libstdc++.dylib"; sourceTree = SDKROOT; }; - C979412A178640AE00DF0660 /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = usr/lib/libz.dylib; sourceTree = SDKROOT; }; - C979412C1786415C00DF0660 /* TestCopy.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = TestCopy.txt; sourceTree = ""; }; - C9EDB6ED18F36AFC00675FFC /* README.md */ = {isa = PBXFileReference; lastKnownFileType = text; path = README.md; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - C97940FD17863D3200DF0660 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - C979412B178640AE00DF0660 /* libz.dylib in Frameworks */, - C9794129178640A100DF0660 /* libstdc++.dylib in Frameworks */, - C979410417863D3200DF0660 /* UIKit.framework in Frameworks */, - C979410617863D3200DF0660 /* Foundation.framework in Frameworks */, - C979410817863D3200DF0660 /* CoreGraphics.framework in Frameworks */, - C979412717863D6100DF0660 /* BRFullTextSearch.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - C97940F717863D3200DF0660 = { - isa = PBXGroup; - children = ( - C9EDB6ED18F36AFC00675FFC /* README.md */, - C979410917863D3200DF0660 /* SampleStaticLibraryProject */, - C979410217863D3200DF0660 /* Frameworks */, - C979410117863D3200DF0660 /* Products */, - ); - sourceTree = ""; - }; - C979410117863D3200DF0660 /* Products */ = { - isa = PBXGroup; - children = ( - C979410017863D3200DF0660 /* SampleStaticLibraryProject.app */, - ); - name = Products; - sourceTree = ""; - }; - C979410217863D3200DF0660 /* Frameworks */ = { - isa = PBXGroup; - children = ( - C979412A178640AE00DF0660 /* libz.dylib */, - C9794128178640A100DF0660 /* libstdc++.dylib */, - C979412617863D6100DF0660 /* BRFullTextSearch.framework */, - C979410317863D3200DF0660 /* UIKit.framework */, - C979410517863D3200DF0660 /* Foundation.framework */, - C979410717863D3200DF0660 /* CoreGraphics.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - C979410917863D3200DF0660 /* SampleStaticLibraryProject */ = { - isa = PBXGroup; - children = ( - C979411217863D3200DF0660 /* AppDelegate.h */, - C979411317863D3200DF0660 /* AppDelegate.m */, - C979411B17863D3200DF0660 /* ViewController.h */, - C979411C17863D3200DF0660 /* ViewController.m */, - C979411E17863D3200DF0660 /* ViewController.xib */, - C979410A17863D3200DF0660 /* Supporting Files */, - ); - path = SampleStaticLibraryProject; - sourceTree = ""; - }; - C979410A17863D3200DF0660 /* Supporting Files */ = { - isa = PBXGroup; - children = ( - C979412C1786415C00DF0660 /* TestCopy.txt */, - C979410B17863D3200DF0660 /* SampleStaticLibraryProject-Info.plist */, - C979410C17863D3200DF0660 /* InfoPlist.strings */, - C979410F17863D3200DF0660 /* main.m */, - C979411117863D3200DF0660 /* SampleStaticLibraryProject-Prefix.pch */, - C979411517863D3200DF0660 /* Default.png */, - C979411717863D3200DF0660 /* Default@2x.png */, - C979411917863D3200DF0660 /* Default-568h@2x.png */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - C97940FF17863D3200DF0660 /* SampleStaticLibraryProject */ = { - isa = PBXNativeTarget; - buildConfigurationList = C979412317863D3200DF0660 /* Build configuration list for PBXNativeTarget "SampleStaticLibraryProject" */; - buildPhases = ( - C97940FC17863D3200DF0660 /* Sources */, - C97940FD17863D3200DF0660 /* Frameworks */, - C97940FE17863D3200DF0660 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = SampleStaticLibraryProject; - productName = SampleStaticLibraryProject; - productReference = C979410017863D3200DF0660 /* SampleStaticLibraryProject.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - C97940F817863D3200DF0660 /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 0460; - ORGANIZATIONNAME = "Blue Rocket"; - }; - buildConfigurationList = C97940FB17863D3200DF0660 /* Build configuration list for PBXProject "SampleStaticLibraryProject" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; - hasScannedForEncodings = 0; - knownRegions = ( - en, - ); - mainGroup = C97940F717863D3200DF0660; - productRefGroup = C979410117863D3200DF0660 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - C97940FF17863D3200DF0660 /* SampleStaticLibraryProject */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - C97940FE17863D3200DF0660 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - C979410E17863D3200DF0660 /* InfoPlist.strings in Resources */, - C979411617863D3200DF0660 /* Default.png in Resources */, - C979411817863D3200DF0660 /* Default@2x.png in Resources */, - C979411A17863D3200DF0660 /* Default-568h@2x.png in Resources */, - C979412017863D3200DF0660 /* ViewController.xib in Resources */, - C979412D1786415C00DF0660 /* TestCopy.txt in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - C97940FC17863D3200DF0660 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - C979411017863D3200DF0660 /* main.m in Sources */, - C979411417863D3200DF0660 /* AppDelegate.m in Sources */, - C979411D17863D3200DF0660 /* ViewController.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXVariantGroup section */ - C979410C17863D3200DF0660 /* InfoPlist.strings */ = { - isa = PBXVariantGroup; - children = ( - C979410D17863D3200DF0660 /* en */, - ); - name = InfoPlist.strings; - sourceTree = ""; - }; - C979411E17863D3200DF0660 /* ViewController.xib */ = { - isa = PBXVariantGroup; - children = ( - C979411F17863D3200DF0660 /* en */, - ); - name = ViewController.xib; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - C979412117863D3200DF0660 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - "LOGGING=1", - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 5.1.1; - ONLY_ACTIVE_ARCH = YES; - OTHER_LDFLAGS = "-ObjC"; - SDKROOT = iphoneos; - VALID_ARCHS = "armv7 armv7s"; - }; - name = Debug; - }; - C979412217863D3200DF0660 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 5.1.1; - OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1"; - OTHER_LDFLAGS = "-ObjC"; - SDKROOT = iphoneos; - VALIDATE_PRODUCT = YES; - VALID_ARCHS = "armv7 armv7s"; - }; - name = Release; - }; - C979412417863D3200DF0660 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "\"$(SRCROOT)/../Framework/Debug\"", - ); - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "SampleStaticLibraryProject/SampleStaticLibraryProject-Prefix.pch"; - INFOPLIST_FILE = "SampleStaticLibraryProject/SampleStaticLibraryProject-Info.plist"; - PRODUCT_NAME = "$(TARGET_NAME)"; - WRAPPER_EXTENSION = app; - }; - name = Debug; - }; - C979412517863D3200DF0660 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "\"$(SRCROOT)/../Framework/Debug\"", - ); - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "SampleStaticLibraryProject/SampleStaticLibraryProject-Prefix.pch"; - INFOPLIST_FILE = "SampleStaticLibraryProject/SampleStaticLibraryProject-Info.plist"; - PRODUCT_NAME = "$(TARGET_NAME)"; - WRAPPER_EXTENSION = app; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - C97940FB17863D3200DF0660 /* Build configuration list for PBXProject "SampleStaticLibraryProject" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - C979412117863D3200DF0660 /* Debug */, - C979412217863D3200DF0660 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - C979412317863D3200DF0660 /* Build configuration list for PBXNativeTarget "SampleStaticLibraryProject" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - C979412417863D3200DF0660 /* Debug */, - C979412517863D3200DF0660 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = C97940F817863D3200DF0660 /* Project object */; -} diff --git a/SampleStaticLibraryProject/SampleStaticLibraryProject.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/SampleStaticLibraryProject/SampleStaticLibraryProject.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index fd60c1a..0000000 --- a/SampleStaticLibraryProject/SampleStaticLibraryProject.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/SampleStaticLibraryProject/SampleStaticLibraryProject/AppDelegate.h b/SampleStaticLibraryProject/SampleStaticLibraryProject/AppDelegate.h deleted file mode 100644 index 6d95f84..0000000 --- a/SampleStaticLibraryProject/SampleStaticLibraryProject/AppDelegate.h +++ /dev/null @@ -1,24 +0,0 @@ -// -// AppDelegate.h -// SampleStaticLibraryProject -// -// Created by Matt on 7/5/13. -// Copyright (c) 2013 Blue Rocket, Inc. Distributable under the terms of the Apache License, Version 2.0. -// - -#import - -// notification sent with a NSNumber 0-1 object representing the progress of indexing -extern NSString * const kIndexProgressNotification; - -@protocol BRSearchService; -@class ViewController; - -@interface AppDelegate : UIResponder - -@property (strong, nonatomic) UIWindow *window; -@property (strong, nonatomic) ViewController *viewController; - -@property (readonly, nonatomic) id searchService; - -@end diff --git a/SampleStaticLibraryProject/SampleStaticLibraryProject/AppDelegate.m b/SampleStaticLibraryProject/SampleStaticLibraryProject/AppDelegate.m deleted file mode 100644 index 6ea37e0..0000000 --- a/SampleStaticLibraryProject/SampleStaticLibraryProject/AppDelegate.m +++ /dev/null @@ -1,66 +0,0 @@ -// -// AppDelegate.m -// SampleStaticLibraryProject -// -// Created by Matt on 7/5/13. -// Copyright (c) 2013 Blue Rocket, Inc. Distributable under the terms of the Apache License, Version 2.0. -// - -#import "AppDelegate.h" - -#import "ViewController.h" -#import -#import - -NSString * const kIndexProgressNotification = @"IndexUpdateProgress"; - -@implementation AppDelegate - -- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { - self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; - // Override point for customization after application launch. - self.viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil]; - self.window.rootViewController = self.viewController; - [self.window makeKeyAndVisible]; - - _searchService = [CLuceneSearchService new]; - [self indexSampleData]; - return YES; -} - -- (NSString *)testCopy:(NSUInteger)wordCount { - if ( wordCount == 0 ) { - return nil; - } - static NSArray *words; - if ( words == nil ) { - NSString *copyPath = [[NSBundle mainBundle] pathForResource:@"TestCopy" ofType:@"txt"]; - NSString *copy = [NSString stringWithContentsOfFile:copyPath encoding:NSUTF8StringEncoding error:nil]; - words = [copy componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; - } - return [[words subarrayWithRange:NSMakeRange(0, MIN(wordCount, [words count]))] componentsJoinedByString:@" "]; -} - -static const NSUInteger kNumDocs = 50; - -- (void)indexSampleData { - // let's index some latin! - [_searchService bulkUpdateIndex:^(id updateContext) { - @autoreleasepool { - for ( NSUInteger i = 0; i < kNumDocs; i++ ) { - BRSimpleIndexable *doc = [[BRSimpleIndexable alloc] initWithIdentifier:[NSString stringWithFormat:@"%lu", (unsigned long)i] - data:@{ - kBRSearchFieldNameTitle : [NSString stringWithFormat:@"Document %lu", (unsigned long)(i+1)], - kBRSearchFieldNameValue : [self testCopy:((arc4random() % 100) + 5)] - }]; - [_searchService addObjectToIndex:doc context:updateContext]; - [[NSNotificationCenter defaultCenter] postNotificationName:kIndexProgressNotification - object:@((double)i / (double)kNumDocs)]; - } - } - } queue:NULL finished:^(int updateCount, NSError *error) { - [[NSNotificationCenter defaultCenter] postNotificationName:kIndexProgressNotification object:@(100)]; - }]; -} - -@end diff --git a/SampleStaticLibraryProject/SampleStaticLibraryProject/Default-568h@2x.png b/SampleStaticLibraryProject/SampleStaticLibraryProject/Default-568h@2x.png deleted file mode 100644 index 0891b7a..0000000 Binary files a/SampleStaticLibraryProject/SampleStaticLibraryProject/Default-568h@2x.png and /dev/null differ diff --git a/SampleStaticLibraryProject/SampleStaticLibraryProject/Default.png b/SampleStaticLibraryProject/SampleStaticLibraryProject/Default.png deleted file mode 100644 index 4c8ca6f..0000000 Binary files a/SampleStaticLibraryProject/SampleStaticLibraryProject/Default.png and /dev/null differ diff --git a/SampleStaticLibraryProject/SampleStaticLibraryProject/Default@2x.png b/SampleStaticLibraryProject/SampleStaticLibraryProject/Default@2x.png deleted file mode 100644 index 35b84cf..0000000 Binary files a/SampleStaticLibraryProject/SampleStaticLibraryProject/Default@2x.png and /dev/null differ diff --git a/SampleStaticLibraryProject/SampleStaticLibraryProject/SampleStaticLibraryProject-Info.plist b/SampleStaticLibraryProject/SampleStaticLibraryProject/SampleStaticLibraryProject-Info.plist deleted file mode 100644 index 110315c..0000000 --- a/SampleStaticLibraryProject/SampleStaticLibraryProject/SampleStaticLibraryProject-Info.plist +++ /dev/null @@ -1,38 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleDisplayName - ${PRODUCT_NAME} - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - us.bluerocket.${PRODUCT_NAME:rfc1034identifier} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1.0 - LSRequiresIPhoneOS - - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - - diff --git a/SampleStaticLibraryProject/SampleStaticLibraryProject/SampleStaticLibraryProject-Prefix.pch b/SampleStaticLibraryProject/SampleStaticLibraryProject/SampleStaticLibraryProject-Prefix.pch deleted file mode 100644 index 0e34ea3..0000000 --- a/SampleStaticLibraryProject/SampleStaticLibraryProject/SampleStaticLibraryProject-Prefix.pch +++ /dev/null @@ -1,14 +0,0 @@ -// -// Prefix header for all source files of the 'SampleStaticLibraryProject' target in the 'SampleStaticLibraryProject' project -// - -#import - -#ifndef __IPHONE_4_0 -#warning "This project uses features only available in iOS SDK 4.0 and later." -#endif - -#ifdef __OBJC__ - #import - #import -#endif diff --git a/SampleStaticLibraryProject/SampleStaticLibraryProject/TestCopy.txt b/SampleStaticLibraryProject/SampleStaticLibraryProject/TestCopy.txt deleted file mode 100644 index 2b0ac56..0000000 --- a/SampleStaticLibraryProject/SampleStaticLibraryProject/TestCopy.txt +++ /dev/null @@ -1,9 +0,0 @@ -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas ac leo massa. Vivamus in pellentesque justo. Cras porttitor, orci at placerat tempor, odio elit viverra mi, ut elementum diam elit sit amet tortor. Maecenas gravida lacus ut mi aliquet, et placerat tellus sagittis. Nulla ante tortor, volutpat a mauris mattis, interdum vehicula nunc. Sed fermentum elementum urna sit amet ornare. Donec at aliquam justo, quis sagittis est. - -Ut sit amet augue elit. Praesent eget ullamcorper metus. Etiam pulvinar mi eget placerat adipiscing. Nullam varius massa dolor, a vestibulum urna pulvinar quis. Mauris at ornare urna, ut vulputate nunc. Cras varius elit a convallis accumsan. Fusce sodales elit a leo adipiscing posuere. Nunc tempor nisi vel sapien tempor luctus. Pellentesque ut ligula a enim fermentum facilisis eu at nisi. Praesent feugiat urna nunc, eget aliquam mi euismod ac. Suspendisse at congue ligula, vitae faucibus lorem. Sed vestibulum consequat est, id mollis diam accumsan quis. Proin sit amet mi ut massa semper volutpat. Sed vel neque accumsan, feugiat erat et, eleifend lacus. - -Aenean gravida scelerisque nisl, at sagittis orci tristique ac. Proin ut porta justo. Nulla facilisi. In accumsan eu risus eget mollis. Etiam eu eros turpis. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Nulla vel justo odio. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aenean eros arcu, ornare vitae rutrum id, convallis nec quam. Suspendisse aliquam justo vel neque tristique, nec volutpat urna dictum. Praesent bibendum elementum lorem et condimentum. - -Suspendisse potenti. Nunc vitae elit gravida velit dapibus tristique. Vestibulum eu risus eu nunc fermentum viverra. Nunc sollicitudin id magna quis imperdiet. Sed odio justo, faucibus eget nisl non, pulvinar vehicula nisl. Duis condimentum arcu nec lorem sodales, id accumsan augue ullamcorper. Curabitur porta ultricies est eu adipiscing. Nam condimentum orci dolor, sed scelerisque ante consequat non. Etiam ut mi eu risus eleifend accumsan nec nec nisi. Aliquam porttitor sit amet diam in posuere. Duis at dictum lectus. Morbi viverra augue lectus, at congue est feugiat vel. Phasellus gravida ut lacus at scelerisque. Quisque non nulla a nibh rhoncus gravida. - -Duis mauris nibh, mollis vestibulum vestibulum at, dictum id tellus. Sed vehicula sem ornare nisi iaculis, euismod luctus dui blandit. Praesent fringilla, nibh quis gravida vulputate, massa eros aliquet massa, quis sagittis metus magna eu justo. Curabitur commodo placerat est, eu commodo tortor lacinia sed. Donec congue justo vel risus sollicitudin congue. Suspendisse orci libero, euismod eget ultrices vel, viverra ut libero. Aliquam elementum, elit imperdiet pellentesque congue, nulla quam porttitor mauris, at gravida leo nisi vulputate augue. Donec magna augue, pulvinar id mi vel, porttitor rhoncus velit. Nunc justo massa, vestibulum eget luctus at, euismod sit amet dolor. diff --git a/SampleStaticLibraryProject/SampleStaticLibraryProject/ViewController.h b/SampleStaticLibraryProject/SampleStaticLibraryProject/ViewController.h deleted file mode 100644 index d8cc1a1..0000000 --- a/SampleStaticLibraryProject/SampleStaticLibraryProject/ViewController.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// ViewController.h -// SampleStaticLibraryProject -// -// Created by Matt on 7/5/13. -// Copyright (c) 2013 Blue Rocket, Inc. Distributable under the terms of the Apache License, Version 2.0. -// - -#import - -@interface ViewController : UIViewController - -@property (nonatomic, strong) IBOutlet UIProgressView *indexProgressView; -@property (nonatomic, strong) IBOutlet UISearchBar *searchBar; - -@end diff --git a/SampleStaticLibraryProject/SampleStaticLibraryProject/ViewController.m b/SampleStaticLibraryProject/SampleStaticLibraryProject/ViewController.m deleted file mode 100644 index f095459..0000000 --- a/SampleStaticLibraryProject/SampleStaticLibraryProject/ViewController.m +++ /dev/null @@ -1,92 +0,0 @@ -// -// ViewController.m -// SampleStaticLibraryProject -// -// Created by Matt on 7/5/13. -// Copyright (c) 2013 Blue Rocket, Inc. Distributable under the terms of the Apache License, Version 2.0. -// - -#import "ViewController.h" - -#import "AppDelegate.h" -#import - -@implementation ViewController { - id observer; - id results; -} - -- (void)viewDidLoad { - [super viewDidLoad]; - self.indexProgressView.progress = 0; -} - -- (void)viewWillAppear:(BOOL)animated { - [super viewWillAppear:animated]; - if ( observer == nil ) { - observer = - [[NSNotificationCenter defaultCenter] addObserverForName:kIndexProgressNotification - object:nil - queue:[NSOperationQueue mainQueue] - usingBlock:^(NSNotification *notification) { - NSNumber *num = notification.object; - self.indexProgressView.progress = [num floatValue]; - if ( self.indexProgressView.progress - 100.0 < 0.01 ) { - [UIView animateWithDuration:0.2 animations:^{ - self.indexProgressView.alpha = 0; - } completion:^(BOOL finished) { - [self.searchBar becomeFirstResponder]; - }]; - } - }]; - } -} - -- (void)viewDidAppear:(BOOL)animated { - [super viewDidAppear:animated]; -} - -#pragma mark - UITableView support - -- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { - return 1; -} - -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { - return (tableView == self.searchDisplayController.searchResultsTableView ? [results count] : 0); -} - -- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { - static NSString *CellId = @"Cell"; - UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellId]; - if ( cell == nil ) { - cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellId]; - } - id result = [results resultAtIndex:indexPath.row]; - cell.textLabel.text = [result valueForField:kBRSearchFieldNameValue]; - cell.detailTextLabel.text = [result valueForField:kBRSearchFieldNameTitle]; - return cell; -} - -#pragma mark - UISearchDisplayController support - -- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString { - NSLog(@"search: %@", searchString); - BOOL search = ([searchString rangeOfCharacterFromSet:[NSCharacterSet whitespaceCharacterSet]].location != NSNotFound - || [searchString length] > 2); - if ( search ) { - results = [[(AppDelegate *)[UIApplication sharedApplication].delegate searchService] - search:controller.searchBar.text]; - } - return search; -} - -- (void)searchDisplayControllerDidBeginSearch:(UISearchDisplayController *)controller { - NSLog(@"Searching for %@", self.searchBar.text); -} - -- (void)searchDisplayControllerWillEndSearch:(UISearchDisplayController *)controller { - NSLog(@"Search ended for %@", self.searchBar.text); -} - -@end diff --git a/SampleStaticLibraryProject/SampleStaticLibraryProject/en.lproj/InfoPlist.strings b/SampleStaticLibraryProject/SampleStaticLibraryProject/en.lproj/InfoPlist.strings deleted file mode 100644 index 477b28f..0000000 --- a/SampleStaticLibraryProject/SampleStaticLibraryProject/en.lproj/InfoPlist.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* Localized versions of Info.plist keys */ - diff --git a/SampleStaticLibraryProject/SampleStaticLibraryProject/en.lproj/ViewController.xib b/SampleStaticLibraryProject/SampleStaticLibraryProject/en.lproj/ViewController.xib deleted file mode 100644 index cd55998..0000000 --- a/SampleStaticLibraryProject/SampleStaticLibraryProject/en.lproj/ViewController.xib +++ /dev/null @@ -1,329 +0,0 @@ - - - - 1792 - 13C64 - 5053 - 1265.19 - 697.40 - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - 3733 - - - IBProxyObject - IBUIProgressView - IBUISearchBar - IBUISearchDisplayController - IBUITableView - IBUIView - - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - PluginDependencyRecalculationVersion - - - - - IBFilesOwner - IBCocoaTouchFramework - - - IBFirstResponder - IBCocoaTouchFramework - - - - 292 - - - - 274 - - {{0, 44}, {320, 524}} - - - _NS:9 - - 3 - MQA - - YES - IBCocoaTouchFramework - YES - 1 - 0 - YES - 44 - 22 - 22 - - - - 290 - {320, 44} - - - - _NS:9 - 3 - IBCocoaTouchFramework - - IBCocoaTouchFramework - - - - - 290 - {{0, 44}, {320, 9}} - - - _NS:9 - NO - IBCocoaTouchFramework - 0.5 - - - {320, 568} - - - - _NS:9 - - 3 - MQA - - 2 - - - - IBUIScreenMetrics - - YES - - - - - - {320, 568} - {568, 320} - - - IBCocoaTouchFramework - Retina 4-inch Full Screen - 2 - - IBCocoaTouchFramework - - - IBCocoaTouchFramework - - - - - - - searchDisplayController - - - - 38 - - - - view - - - - 59 - - - - indexProgressView - - - - 67 - - - - searchBar - - - - 68 - - - - delegate - - - - 43 - - - - searchBar - - - - 37 - - - - searchContentsController - - - - 39 - - - - searchResultsDataSource - - - - 40 - - - - searchResultsDelegate - - - - 41 - - - - delegate - - - - 42 - - - - dataSource - - - - 57 - - - - delegate - - - - 58 - - - - - - 0 - - - - - - -1 - - - File's Owner - - - -2 - - - - - 34 - - - - - - - - - - 36 - - - - - 47 - - - - - - 35 - - - - - 60 - - - - - - - ViewController - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - UIResponder - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - - - - 68 - - - - - ViewController - UIViewController - - UIProgressView - UISearchBar - - - - indexProgressView - UIProgressView - - - searchBar - UISearchBar - - - - IBProjectSource - ./Classes/ViewController.h - - - - - 0 - IBCocoaTouchFramework - YES - - com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3 - - - YES - 3 - 3733 - - diff --git a/SampleStaticLibraryProject/SampleStaticLibraryProject/main.m b/SampleStaticLibraryProject/SampleStaticLibraryProject/main.m deleted file mode 100644 index 7d33849..0000000 --- a/SampleStaticLibraryProject/SampleStaticLibraryProject/main.m +++ /dev/null @@ -1,18 +0,0 @@ -// -// main.m -// SampleStaticLibraryProject -// -// Created by Matt on 7/5/13. -// Copyright (c) 2013 Blue Rocket, Inc. Distributable under the terms of the Apache License, Version 2.0. -// - -#import - -#import "AppDelegate.h" - -int main(int argc, char *argv[]) -{ - @autoreleasepool { - return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); - } -} diff --git a/clucene b/clucene deleted file mode 160000 index dbd86e1..0000000 --- a/clucene +++ /dev/null @@ -1 +0,0 @@ -Subproject commit dbd86e177db3ac6fdce4d1e661ce88532ec323bc